claude-in-mobile 2.13.2 → 2.14.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.
- package/README.md +103 -12
- package/dist/client-adapter.d.ts +21 -0
- package/dist/client-adapter.d.ts.map +1 -0
- package/dist/client-adapter.js +84 -0
- package/dist/client-adapter.js.map +1 -0
- package/dist/index.js +44 -5
- package/dist/index.js.map +1 -1
- package/dist/tools/registry.d.ts +8 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +22 -4
- package/dist/tools/registry.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,7 +19,23 @@ Control your Android phone, emulator, iOS Simulator, Desktop applications, or Au
|
|
|
19
19
|
|
|
20
20
|
## Installation
|
|
21
21
|
|
|
22
|
-
###
|
|
22
|
+
### One-liner (any client)
|
|
23
|
+
|
|
24
|
+
Using [add-mcp](https://github.com/neondatabase/add-mcp) — auto-detects installed clients:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx add-mcp claude-in-mobile -y
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Or target a specific client:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx add-mcp claude-in-mobile -a claude-code -y
|
|
34
|
+
npx add-mcp claude-in-mobile -a opencode -y
|
|
35
|
+
npx add-mcp claude-in-mobile -a cursor -y
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Claude Code CLI
|
|
23
39
|
|
|
24
40
|
```bash
|
|
25
41
|
claude mcp add --transport stdio mobile -- npx -y claude-in-mobile
|
|
@@ -31,6 +47,52 @@ To add globally (available in all projects):
|
|
|
31
47
|
claude mcp add --scope user --transport stdio mobile -- npx -y claude-in-mobile
|
|
32
48
|
```
|
|
33
49
|
|
|
50
|
+
### OpenCode
|
|
51
|
+
|
|
52
|
+
Use the interactive setup:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
opencode mcp add
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Or add manually to `opencode.json` (project root or `~/.config/opencode/opencode.json`):
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"mcp": {
|
|
63
|
+
"mobile": {
|
|
64
|
+
"type": "local",
|
|
65
|
+
"command": ["npx", "-y", "claude-in-mobile"],
|
|
66
|
+
"enabled": true
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Cursor
|
|
73
|
+
|
|
74
|
+
Add to `.cursor/mcp.json`:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"mcpServers": {
|
|
79
|
+
"mobile": {
|
|
80
|
+
"command": "npx",
|
|
81
|
+
"args": ["-y", "claude-in-mobile"]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Any MCP Client
|
|
88
|
+
|
|
89
|
+
Print a config snippet for your client:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
npx claude-in-mobile --init <client-name>
|
|
93
|
+
# Supported: opencode, cursor, claude-code
|
|
94
|
+
```
|
|
95
|
+
|
|
34
96
|
### From npm
|
|
35
97
|
|
|
36
98
|
```bash
|
|
@@ -48,6 +110,35 @@ npm run build:all # Builds TypeScript + Desktop companion
|
|
|
48
110
|
|
|
49
111
|
> **Note:** For Desktop support, you need to run `npm run build:desktop` (or `build:all`) to compile the Desktop companion app.
|
|
50
112
|
|
|
113
|
+
#### Using a local build with MCP clients
|
|
114
|
+
|
|
115
|
+
After building from source, point your MCP client to the local `dist/index.js` instead of using npx:
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"mcpServers": {
|
|
120
|
+
"mobile": {
|
|
121
|
+
"command": "node",
|
|
122
|
+
"args": ["/path/to/claude-in-mobile/dist/index.js"]
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
For OpenCode (`opencode.json`):
|
|
129
|
+
|
|
130
|
+
```json
|
|
131
|
+
{
|
|
132
|
+
"mcp": {
|
|
133
|
+
"mobile": {
|
|
134
|
+
"type": "local",
|
|
135
|
+
"command": ["node", "/path/to/claude-in-mobile/dist/index.js"],
|
|
136
|
+
"enabled": true
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
51
142
|
### Manual configuration
|
|
52
143
|
|
|
53
144
|
Add to your Claude Code settings (`~/.claude.json` or project settings):
|
|
@@ -336,17 +427,17 @@ xcodebuild test -project WebDriverAgent.xcodeproj \
|
|
|
336
427
|
|
|
337
428
|
```
|
|
338
429
|
┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
|
339
|
-
│
|
|
340
|
-
|
|
341
|
-
│
|
|
342
|
-
|
|
343
|
-
│
|
|
344
|
-
│
|
|
345
|
-
│
|
|
346
|
-
│
|
|
347
|
-
|
|
348
|
-
│
|
|
349
|
-
|
|
430
|
+
│ Claude Code │────▶│ │────▶│ Android (ADB) │
|
|
431
|
+
├─────────────┤ │ Claude Mobile │ └─────────────────┘
|
|
432
|
+
│ OpenCode │────▶│ MCP Server │ ┌─────────────────┐
|
|
433
|
+
├─────────────┤ │ │────▶│ iOS (simctl+WDA)│
|
|
434
|
+
│ Cursor │────▶│ (auto-detects │ └─────────────────┘
|
|
435
|
+
├─────────────┤ │ client via │ ┌─────────────────┐
|
|
436
|
+
│ Any MCP │────▶│ MCP protocol) │────▶│ Desktop (Compose)│
|
|
437
|
+
│ Client │ │ │ └─────────────────┘
|
|
438
|
+
└─────────────┘ │ │ ┌─────────────────┐
|
|
439
|
+
│ │────▶│ Aurora (audb) │
|
|
440
|
+
└──────────────────┘ └─────────────────┘
|
|
350
441
|
```
|
|
351
442
|
|
|
352
443
|
1. Claude sends commands through MCP protocol
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type ClientType = "claude-code" | "opencode" | "cursor" | "unknown";
|
|
2
|
+
export interface AliasWithDefaults {
|
|
3
|
+
tool: string;
|
|
4
|
+
defaults: Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
export interface ClientAdapter {
|
|
7
|
+
clientType: ClientType;
|
|
8
|
+
clientName: string;
|
|
9
|
+
clientVersion: string;
|
|
10
|
+
getAdditionalAliases(): Record<string, string>;
|
|
11
|
+
getAliasesWithDefaults(): Record<string, AliasWithDefaults>;
|
|
12
|
+
getInstructions(): string;
|
|
13
|
+
}
|
|
14
|
+
interface ClientInfo {
|
|
15
|
+
name: string;
|
|
16
|
+
version: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function detectClient(clientInfo: ClientInfo | undefined): ClientAdapter;
|
|
19
|
+
export declare function getConfigSnippet(client: ClientType): string;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=client-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-adapter.d.ts","sourceRoot":"","sources":["../src/client-adapter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE3E,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC5D,eAAe,IAAI,MAAM,CAAC;CAC3B;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AA8BD,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,aAAa,CAS9E;AA0DD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAQ3D"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
const CLIENT_MATCHERS = [
|
|
2
|
+
{ pattern: /claude/i, type: "claude-code" },
|
|
3
|
+
{ pattern: /opencode/i, type: "opencode" },
|
|
4
|
+
{ pattern: /cursor/i, type: "cursor" },
|
|
5
|
+
];
|
|
6
|
+
const OPENCODE_ALIASES = {
|
|
7
|
+
touch: "tap",
|
|
8
|
+
press: "tap",
|
|
9
|
+
capture_screen: "screenshot",
|
|
10
|
+
};
|
|
11
|
+
const OPENCODE_ALIASES_WITH_DEFAULTS = {
|
|
12
|
+
swipe_up: { tool: "swipe", defaults: { direction: "up" } },
|
|
13
|
+
swipe_down: { tool: "swipe", defaults: { direction: "down" } },
|
|
14
|
+
};
|
|
15
|
+
const INSTRUCTIONS = {
|
|
16
|
+
"claude-code": "Mobile and desktop automation server. Supports Android (ADB), iOS Simulator (simctl+WDA), Desktop (Compose), and Aurora OS (audb). Use 'screenshot' to see the screen, 'tap' to interact with elements, 'get_ui' for the accessibility tree, and 'annotate_screenshot' for visual element discovery.",
|
|
17
|
+
opencode: "Mobile and desktop automation server. Use 'screenshot' to see the screen, 'tap' to interact, 'get_ui' for the element tree. Supports Android, iOS Simulator, Desktop, and Aurora OS. Use 'list_devices' to see connected devices and 'set_device' to switch between them.",
|
|
18
|
+
cursor: "Mobile and desktop automation server. Supports Android (ADB), iOS Simulator (simctl+WDA), Desktop (Compose), and Aurora OS (audb). Use 'screenshot' to see the screen, 'tap' to interact with elements, 'get_ui' for the accessibility tree.",
|
|
19
|
+
unknown: "Mobile and desktop automation server. Use 'screenshot' to see the screen, 'tap' to interact, 'get_ui' for the element tree. Use 'list_devices' to see connected devices.",
|
|
20
|
+
};
|
|
21
|
+
export function detectClient(clientInfo) {
|
|
22
|
+
if (!clientInfo) {
|
|
23
|
+
return createAdapter("unknown", "unknown", "unknown");
|
|
24
|
+
}
|
|
25
|
+
const matched = CLIENT_MATCHERS.find((m) => m.pattern.test(clientInfo.name));
|
|
26
|
+
const clientType = matched?.type ?? "unknown";
|
|
27
|
+
return createAdapter(clientType, clientInfo.name, clientInfo.version);
|
|
28
|
+
}
|
|
29
|
+
function createAdapter(clientType, clientName, clientVersion) {
|
|
30
|
+
return {
|
|
31
|
+
clientType,
|
|
32
|
+
clientName,
|
|
33
|
+
clientVersion,
|
|
34
|
+
getAdditionalAliases() {
|
|
35
|
+
if (clientType === "opencode")
|
|
36
|
+
return { ...OPENCODE_ALIASES };
|
|
37
|
+
return {};
|
|
38
|
+
},
|
|
39
|
+
getAliasesWithDefaults() {
|
|
40
|
+
if (clientType === "opencode")
|
|
41
|
+
return { ...OPENCODE_ALIASES_WITH_DEFAULTS };
|
|
42
|
+
return {};
|
|
43
|
+
},
|
|
44
|
+
getInstructions() {
|
|
45
|
+
return INSTRUCTIONS[clientType];
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// ── Config snippet generation ──
|
|
50
|
+
const CONFIG_TEMPLATES = {
|
|
51
|
+
opencode: {
|
|
52
|
+
mcp: {
|
|
53
|
+
mobile: {
|
|
54
|
+
type: "local",
|
|
55
|
+
command: ["npx", "-y", "claude-in-mobile"],
|
|
56
|
+
enabled: true,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
cursor: {
|
|
61
|
+
mcpServers: {
|
|
62
|
+
mobile: {
|
|
63
|
+
command: "npx",
|
|
64
|
+
args: ["-y", "claude-in-mobile"],
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
"claude-code": {
|
|
69
|
+
mcpServers: {
|
|
70
|
+
mobile: {
|
|
71
|
+
command: "npx",
|
|
72
|
+
args: ["-y", "claude-in-mobile"],
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
export function getConfigSnippet(client) {
|
|
78
|
+
const template = CONFIG_TEMPLATES[client];
|
|
79
|
+
if (!template) {
|
|
80
|
+
throw new Error(`Unsupported client: ${client}. Supported: ${Object.keys(CONFIG_TEMPLATES).join(", ")}`);
|
|
81
|
+
}
|
|
82
|
+
return JSON.stringify(template, null, 2);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=client-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-adapter.js","sourceRoot":"","sources":["../src/client-adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
-
import { registerTools, registerAliases, getTools,
|
|
5
|
+
import { registerTools, registerAliases, registerAliasesWithDefaults, getTools, resolveToolCall } from "./tools/registry.js";
|
|
6
6
|
import { createToolContext, MAX_RECURSION_DEPTH } from "./tools/context.js";
|
|
7
7
|
import { deviceTools } from "./tools/device-tools.js";
|
|
8
8
|
import { screenshotTools } from "./tools/screenshot-tools.js";
|
|
@@ -15,16 +15,17 @@ import { desktopTools } from "./tools/desktop-tools.js";
|
|
|
15
15
|
import { auroraTools } from "./tools/aurora-tools.js";
|
|
16
16
|
import { flowTools } from "./tools/flow-tools.js";
|
|
17
17
|
import { clipboardTools } from "./tools/clipboard-tools.js";
|
|
18
|
+
import { detectClient, getConfigSnippet } from "./client-adapter.js";
|
|
18
19
|
// Dispatch function (needed by batch_commands / run_flow for recursion)
|
|
19
20
|
async function handleTool(name, args, depth = 0) {
|
|
20
21
|
if (depth > MAX_RECURSION_DEPTH) {
|
|
21
22
|
throw new Error(`Maximum recursion depth (${MAX_RECURSION_DEPTH}) exceeded. Nested batch_commands/run_flow calls are limited to prevent stack overflow.`);
|
|
22
23
|
}
|
|
23
|
-
const
|
|
24
|
-
if (!
|
|
24
|
+
const resolved = resolveToolCall(name, args);
|
|
25
|
+
if (!resolved) {
|
|
25
26
|
throw new Error(`Unknown tool: ${name}`);
|
|
26
27
|
}
|
|
27
|
-
return handler(args, ctx, depth);
|
|
28
|
+
return resolved.handler(resolved.args, ctx, depth);
|
|
28
29
|
}
|
|
29
30
|
// Shared context (wired after handleTool is defined)
|
|
30
31
|
const ctx = createToolContext(handleTool);
|
|
@@ -51,15 +52,53 @@ registerAliases({
|
|
|
51
52
|
"long_tap": "long_press",
|
|
52
53
|
"take_screenshot": "screenshot",
|
|
53
54
|
});
|
|
55
|
+
// Handle --init CLI flag (generate config snippet and exit)
|
|
56
|
+
const initIndex = process.argv.indexOf("--init");
|
|
57
|
+
if (initIndex !== -1) {
|
|
58
|
+
const client = process.argv[initIndex + 1];
|
|
59
|
+
if (!client) {
|
|
60
|
+
console.error("Usage: claude-in-mobile --init <client>");
|
|
61
|
+
console.error("Supported clients: opencode, cursor, claude-code");
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const snippet = getConfigSnippet(client);
|
|
66
|
+
console.log(snippet);
|
|
67
|
+
process.exit(0);
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
console.error(e.message);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
54
74
|
// Create MCP server
|
|
55
75
|
const server = new Server({
|
|
56
76
|
name: "claude-mobile",
|
|
57
|
-
version: "2.
|
|
77
|
+
version: "2.14.0",
|
|
58
78
|
}, {
|
|
59
79
|
capabilities: {
|
|
60
80
|
tools: {},
|
|
61
81
|
},
|
|
82
|
+
instructions: "Mobile and desktop automation server. Use 'screenshot' to see the screen, 'tap' to interact, 'get_ui' for the element tree. Use 'list_devices' to see connected devices.",
|
|
62
83
|
});
|
|
84
|
+
// Detect client after MCP handshake and apply per-client adaptations
|
|
85
|
+
server.oninitialized = () => {
|
|
86
|
+
const clientInfo = server.getClientVersion();
|
|
87
|
+
const adapter = detectClient(clientInfo);
|
|
88
|
+
console.error(`Client detected: ${adapter.clientType} (${adapter.clientName} v${adapter.clientVersion})`);
|
|
89
|
+
// Register client-specific aliases
|
|
90
|
+
const additionalAliases = adapter.getAdditionalAliases();
|
|
91
|
+
if (Object.keys(additionalAliases).length > 0) {
|
|
92
|
+
registerAliases(additionalAliases);
|
|
93
|
+
console.error(`Registered ${Object.keys(additionalAliases).length} additional aliases for ${adapter.clientType}`);
|
|
94
|
+
}
|
|
95
|
+
// Register aliases with default arguments (e.g., swipe_up → swipe with direction: "up")
|
|
96
|
+
const aliasesWithDefaults = adapter.getAliasesWithDefaults();
|
|
97
|
+
if (Object.keys(aliasesWithDefaults).length > 0) {
|
|
98
|
+
registerAliasesWithDefaults(aliasesWithDefaults);
|
|
99
|
+
console.error(`Registered ${Object.keys(aliasesWithDefaults).length} aliases with defaults for ${adapter.clientType}`);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
63
102
|
// Handle tool list request
|
|
64
103
|
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
65
104
|
return { tools: getTools() };
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -6,6 +6,13 @@ export interface ToolDefinition {
|
|
|
6
6
|
}
|
|
7
7
|
export declare function registerTools(defs: ToolDefinition[]): void;
|
|
8
8
|
export declare function registerAliases(aliases: Record<string, string>): void;
|
|
9
|
+
export declare function registerAliasesWithDefaults(aliases: Record<string, {
|
|
10
|
+
tool: string;
|
|
11
|
+
defaults: Record<string, unknown>;
|
|
12
|
+
}>): void;
|
|
9
13
|
export declare function getTools(): Tool[];
|
|
10
|
-
export declare function
|
|
14
|
+
export declare function resolveToolCall(name: string, args: Record<string, unknown>): {
|
|
15
|
+
handler: ToolDefinition["handler"];
|
|
16
|
+
args: Record<string, unknown>;
|
|
17
|
+
} | undefined;
|
|
11
18
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChG;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChG;AAMD,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,CAI1D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAIrE;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GAC3E,IAAI,CAIN;AAED,wBAAgB,QAAQ,IAAI,IAAI,EAAE,CAEjC;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B;IAAE,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,SAAS,CAoBnF"}
|
package/dist/tools/registry.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const toolMap = new Map();
|
|
2
2
|
const aliasMap = new Map();
|
|
3
|
+
const aliasDefaultsMap = new Map();
|
|
3
4
|
export function registerTools(defs) {
|
|
4
5
|
for (const def of defs) {
|
|
5
6
|
toolMap.set(def.tool.name, def);
|
|
@@ -10,16 +11,33 @@ export function registerAliases(aliases) {
|
|
|
10
11
|
aliasMap.set(alias, canonical);
|
|
11
12
|
}
|
|
12
13
|
}
|
|
14
|
+
export function registerAliasesWithDefaults(aliases) {
|
|
15
|
+
for (const [alias, entry] of Object.entries(aliases)) {
|
|
16
|
+
aliasDefaultsMap.set(alias, { canonical: entry.tool, defaults: entry.defaults });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
13
19
|
export function getTools() {
|
|
14
20
|
return [...toolMap.values()].map(d => d.tool);
|
|
15
21
|
}
|
|
16
|
-
export function
|
|
22
|
+
export function resolveToolCall(name, args) {
|
|
23
|
+
// Direct tool match
|
|
17
24
|
const direct = toolMap.get(name);
|
|
18
25
|
if (direct)
|
|
19
|
-
return direct.handler;
|
|
26
|
+
return { handler: direct.handler, args };
|
|
27
|
+
// Simple alias (no default args)
|
|
20
28
|
const canonical = aliasMap.get(name);
|
|
21
|
-
if (canonical)
|
|
22
|
-
|
|
29
|
+
if (canonical) {
|
|
30
|
+
const def = toolMap.get(canonical);
|
|
31
|
+
if (def)
|
|
32
|
+
return { handler: def.handler, args };
|
|
33
|
+
}
|
|
34
|
+
// Alias with default args (defaults are overridden by explicit args)
|
|
35
|
+
const withDefaults = aliasDefaultsMap.get(name);
|
|
36
|
+
if (withDefaults) {
|
|
37
|
+
const def = toolMap.get(withDefaults.canonical);
|
|
38
|
+
if (def)
|
|
39
|
+
return { handler: def.handler, args: { ...withDefaults.defaults, ...args } };
|
|
40
|
+
}
|
|
23
41
|
return undefined;
|
|
24
42
|
}
|
|
25
43
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;AAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;AAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC3C,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAoE,CAAC;AAErG,MAAM,UAAU,aAAa,CAAC,IAAsB;IAClD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAA4E;IAE5E,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,IAA6B;IAE7B,oBAAoB;IACpB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IAErD,iCAAiC;IACjC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,GAAG;YAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,qEAAqE;IACrE,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,GAAG;YAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,YAAY,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC;IACxF,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/package.json
CHANGED