@phuetz/code-buddy 0.1.22 → 0.1.24
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 +22 -2
- package/dist/agent/codebuddy-agent.d.ts +10 -0
- package/dist/agent/codebuddy-agent.js +13 -0
- package/dist/agent/codebuddy-agent.js.map +1 -1
- package/dist/agent/execution/agent-executor.d.ts +4 -0
- package/dist/agent/execution/agent-executor.js +12 -0
- package/dist/agent/execution/agent-executor.js.map +1 -1
- package/dist/agent/execution/tool-selection-strategy.d.ts +2 -0
- package/dist/agent/execution/tool-selection-strategy.js +8 -0
- package/dist/agent/execution/tool-selection-strategy.js.map +1 -1
- package/dist/agent/facades/infrastructure-facade.d.ts +6 -0
- package/dist/agent/facades/infrastructure-facade.js +15 -0
- package/dist/agent/facades/infrastructure-facade.js.map +1 -1
- package/dist/agent/tool-handler.d.ts +6 -0
- package/dist/agent/tool-handler.js +18 -0
- package/dist/agent/tool-handler.js.map +1 -1
- package/dist/browser-automation/browser-manager.d.ts +23 -0
- package/dist/browser-automation/browser-manager.js +39 -0
- package/dist/browser-automation/browser-manager.js.map +1 -1
- package/dist/browser-automation/browser-tool.d.ts +30 -1
- package/dist/browser-automation/browser-tool.js +161 -0
- package/dist/browser-automation/browser-tool.js.map +1 -1
- package/dist/canvas/a2ui-manager.d.ts +44 -1
- package/dist/canvas/a2ui-manager.js +148 -23
- package/dist/canvas/a2ui-manager.js.map +1 -1
- package/dist/canvas/a2ui-server.d.ts +5 -0
- package/dist/canvas/a2ui-server.js +26 -0
- package/dist/canvas/a2ui-server.js.map +1 -1
- package/dist/canvas/a2ui-tool.d.ts +15 -1
- package/dist/canvas/a2ui-tool.js +76 -0
- package/dist/canvas/a2ui-tool.js.map +1 -1
- package/dist/canvas/a2ui-types.d.ts +19 -1
- package/dist/canvas/a2ui-types.js.map +1 -1
- package/dist/channels/imessage/index.d.ts +47 -18
- package/dist/channels/imessage/index.js +203 -17
- package/dist/channels/imessage/index.js.map +1 -1
- package/dist/codebuddy/client.d.ts +13 -1
- package/dist/codebuddy/client.js +191 -13
- package/dist/codebuddy/client.js.map +1 -1
- package/dist/codebuddy/tool-definitions/browser-tools.js +84 -1
- package/dist/codebuddy/tool-definitions/browser-tools.js.map +1 -1
- package/dist/codebuddy/tool-definitions/canvas-tools.js +7 -0
- package/dist/codebuddy/tool-definitions/canvas-tools.js.map +1 -1
- package/dist/commands/cli/device-commands.d.ts +8 -0
- package/dist/commands/cli/device-commands.js +114 -0
- package/dist/commands/cli/device-commands.js.map +1 -0
- package/dist/config/constants.d.ts +52 -14
- package/dist/config/constants.js +25 -13
- package/dist/config/constants.js.map +1 -1
- package/dist/config/model-tools.js +125 -10
- package/dist/config/model-tools.js.map +1 -1
- package/dist/config/toml-config.d.ts +13 -0
- package/dist/config/toml-config.js +74 -15
- package/dist/config/toml-config.js.map +1 -1
- package/dist/doctor/index.js +2 -0
- package/dist/doctor/index.js.map +1 -1
- package/dist/hooks/advanced-hooks.js +72 -11
- package/dist/hooks/advanced-hooks.js.map +1 -1
- package/dist/hooks/smart-hooks.js +63 -14
- package/dist/hooks/smart-hooks.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/interpreter/interpreter-service.d.ts +2 -0
- package/dist/interpreter/interpreter-service.js +78 -9
- package/dist/interpreter/interpreter-service.js.map +1 -1
- package/dist/mcp/config.js +10 -0
- package/dist/mcp/config.js.map +1 -1
- package/dist/memory/hybrid-search.d.ts +10 -0
- package/dist/memory/hybrid-search.js +110 -3
- package/dist/memory/hybrid-search.js.map +1 -1
- package/dist/memory/icm-bridge.d.ts +65 -0
- package/dist/memory/icm-bridge.js +125 -0
- package/dist/memory/icm-bridge.js.map +1 -0
- package/dist/nodes/device-node.d.ts +29 -9
- package/dist/nodes/device-node.js +247 -23
- package/dist/nodes/device-node.js.map +1 -1
- package/dist/nodes/platform-commands.d.ts +24 -0
- package/dist/nodes/platform-commands.js +70 -0
- package/dist/nodes/platform-commands.js.map +1 -0
- package/dist/nodes/transports/adb-transport.d.ts +22 -0
- package/dist/nodes/transports/adb-transport.js +115 -0
- package/dist/nodes/transports/adb-transport.js.map +1 -0
- package/dist/nodes/transports/base-transport.d.ts +55 -0
- package/dist/nodes/transports/base-transport.js +8 -0
- package/dist/nodes/transports/base-transport.js.map +1 -0
- package/dist/nodes/transports/local-transport.d.ts +18 -0
- package/dist/nodes/transports/local-transport.js +72 -0
- package/dist/nodes/transports/local-transport.js.map +1 -0
- package/dist/nodes/transports/ssh-transport.d.ts +25 -0
- package/dist/nodes/transports/ssh-transport.js +145 -0
- package/dist/nodes/transports/ssh-transport.js.map +1 -0
- package/dist/tools/device-tool.d.ts +22 -0
- package/dist/tools/device-tool.js +111 -0
- package/dist/tools/device-tool.js.map +1 -0
- package/dist/tools/hooks/default-hooks.js +29 -0
- package/dist/tools/hooks/default-hooks.js.map +1 -1
- package/dist/tools/registry/misc-tools.d.ts +24 -0
- package/dist/tools/registry/misc-tools.js +165 -0
- package/dist/tools/registry/misc-tools.js.map +1 -1
- package/dist/tools/skill-discovery-tool.d.ts +41 -0
- package/dist/tools/skill-discovery-tool.js +104 -0
- package/dist/tools/skill-discovery-tool.js.map +1 -0
- package/dist/tools/tool-selector.js +5 -1
- package/dist/tools/tool-selector.js.map +1 -1
- package/dist/tools/types.d.ts +2 -0
- package/dist/utils/config-validation/schema.d.ts +2 -2
- package/dist/utils/model-utils.d.ts +1 -1
- package/dist/utils/model-utils.js +5 -3
- package/dist/utils/model-utils.js.map +1 -1
- package/dist/utils/rtk-compressor.d.ts +36 -0
- package/dist/utils/rtk-compressor.js +86 -0
- package/dist/utils/rtk-compressor.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid-search.js","sourceRoot":"","sources":["../../src/memory/hybrid-search.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hybrid-search.js","sourceRoot":"","sources":["../../src/memory/hybrid-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ICM (Infinite Context Memory) Bridge
|
|
3
|
+
*
|
|
4
|
+
* Wraps ICM's MCP tools into Code Buddy's memory lifecycle.
|
|
5
|
+
* ICM provides persistent cross-session memory via episodic + semantic
|
|
6
|
+
* dual architecture through 16 MCP tools.
|
|
7
|
+
*
|
|
8
|
+
* All methods fail silently (log warning) if ICM is not available.
|
|
9
|
+
*
|
|
10
|
+
* @see https://github.com/rtk-ai/icm
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Minimal MCP manager interface for calling tools
|
|
14
|
+
*/
|
|
15
|
+
export interface MCPToolCaller {
|
|
16
|
+
callTool(serverName: string, toolName: string, args: Record<string, unknown>): Promise<unknown>;
|
|
17
|
+
getConnectedServers(): string[];
|
|
18
|
+
}
|
|
19
|
+
export interface EpisodeMetadata {
|
|
20
|
+
source?: string;
|
|
21
|
+
tags?: string[];
|
|
22
|
+
sessionId?: string;
|
|
23
|
+
turnNumber?: number;
|
|
24
|
+
[key: string]: unknown;
|
|
25
|
+
}
|
|
26
|
+
export interface MemorySearchOptions {
|
|
27
|
+
limit?: number;
|
|
28
|
+
threshold?: number;
|
|
29
|
+
tags?: string[];
|
|
30
|
+
}
|
|
31
|
+
export interface MemoryEntry {
|
|
32
|
+
id: string;
|
|
33
|
+
content: string;
|
|
34
|
+
metadata?: Record<string, unknown>;
|
|
35
|
+
score?: number;
|
|
36
|
+
createdAt?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Bridge between Code Buddy and ICM MCP server
|
|
40
|
+
*/
|
|
41
|
+
export declare class ICMBridge {
|
|
42
|
+
private mcpCaller;
|
|
43
|
+
private available;
|
|
44
|
+
private readonly serverName;
|
|
45
|
+
/**
|
|
46
|
+
* Initialize the bridge by checking if ICM server is connected
|
|
47
|
+
*/
|
|
48
|
+
initialize(mcpCaller: MCPToolCaller): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Check if ICM MCP server is connected and available
|
|
51
|
+
*/
|
|
52
|
+
isAvailable(): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Store an episode (conversation turn, event) in ICM memory
|
|
55
|
+
*/
|
|
56
|
+
storeEpisode(content: string, metadata?: EpisodeMetadata): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Search ICM memory for relevant entries
|
|
59
|
+
*/
|
|
60
|
+
searchMemory(query: string, options?: MemorySearchOptions): Promise<MemoryEntry[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Get recent memories/episodes from ICM
|
|
63
|
+
*/
|
|
64
|
+
getRecentContext(limit?: number): Promise<MemoryEntry[]>;
|
|
65
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ICM (Infinite Context Memory) Bridge
|
|
3
|
+
*
|
|
4
|
+
* Wraps ICM's MCP tools into Code Buddy's memory lifecycle.
|
|
5
|
+
* ICM provides persistent cross-session memory via episodic + semantic
|
|
6
|
+
* dual architecture through 16 MCP tools.
|
|
7
|
+
*
|
|
8
|
+
* All methods fail silently (log warning) if ICM is not available.
|
|
9
|
+
*
|
|
10
|
+
* @see https://github.com/rtk-ai/icm
|
|
11
|
+
*/
|
|
12
|
+
import { logger } from '../utils/logger.js';
|
|
13
|
+
/**
|
|
14
|
+
* Bridge between Code Buddy and ICM MCP server
|
|
15
|
+
*/
|
|
16
|
+
export class ICMBridge {
|
|
17
|
+
mcpCaller = null;
|
|
18
|
+
available = false;
|
|
19
|
+
serverName = 'icm';
|
|
20
|
+
/**
|
|
21
|
+
* Initialize the bridge by checking if ICM server is connected
|
|
22
|
+
*/
|
|
23
|
+
async initialize(mcpCaller) {
|
|
24
|
+
this.mcpCaller = mcpCaller;
|
|
25
|
+
try {
|
|
26
|
+
const servers = mcpCaller.getConnectedServers();
|
|
27
|
+
this.available = servers.includes(this.serverName);
|
|
28
|
+
if (this.available) {
|
|
29
|
+
logger.info('ICM memory bridge initialized');
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
logger.debug('ICM MCP server not connected — memory bridge inactive');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
logger.warn('Failed to initialize ICM bridge', {
|
|
37
|
+
error: error instanceof Error ? error.message : String(error),
|
|
38
|
+
});
|
|
39
|
+
this.available = false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if ICM MCP server is connected and available
|
|
44
|
+
*/
|
|
45
|
+
isAvailable() {
|
|
46
|
+
return this.available;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Store an episode (conversation turn, event) in ICM memory
|
|
50
|
+
*/
|
|
51
|
+
async storeEpisode(content, metadata) {
|
|
52
|
+
if (!this.available || !this.mcpCaller)
|
|
53
|
+
return;
|
|
54
|
+
try {
|
|
55
|
+
await this.mcpCaller.callTool(this.serverName, 'create_memory', {
|
|
56
|
+
content,
|
|
57
|
+
metadata: metadata || {},
|
|
58
|
+
});
|
|
59
|
+
logger.debug('Stored episode in ICM', { contentLength: content.length });
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
logger.warn('Failed to store episode in ICM', {
|
|
63
|
+
error: error instanceof Error ? error.message : String(error),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Search ICM memory for relevant entries
|
|
69
|
+
*/
|
|
70
|
+
async searchMemory(query, options) {
|
|
71
|
+
if (!this.available || !this.mcpCaller)
|
|
72
|
+
return [];
|
|
73
|
+
try {
|
|
74
|
+
const result = await this.mcpCaller.callTool(this.serverName, 'search_memory', {
|
|
75
|
+
query,
|
|
76
|
+
limit: options?.limit ?? 10,
|
|
77
|
+
threshold: options?.threshold,
|
|
78
|
+
tags: options?.tags,
|
|
79
|
+
});
|
|
80
|
+
// ICM returns results as an array of memory entries
|
|
81
|
+
if (Array.isArray(result)) {
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
// Handle wrapped response
|
|
85
|
+
const response = result;
|
|
86
|
+
if (Array.isArray(response.memories)) {
|
|
87
|
+
return response.memories;
|
|
88
|
+
}
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
logger.warn('ICM memory search failed', {
|
|
93
|
+
error: error instanceof Error ? error.message : String(error),
|
|
94
|
+
});
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get recent memories/episodes from ICM
|
|
100
|
+
*/
|
|
101
|
+
async getRecentContext(limit = 10) {
|
|
102
|
+
if (!this.available || !this.mcpCaller)
|
|
103
|
+
return [];
|
|
104
|
+
try {
|
|
105
|
+
const result = await this.mcpCaller.callTool(this.serverName, 'get_recent_memories', {
|
|
106
|
+
limit,
|
|
107
|
+
});
|
|
108
|
+
if (Array.isArray(result)) {
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
const response = result;
|
|
112
|
+
if (Array.isArray(response.memories)) {
|
|
113
|
+
return response.memories;
|
|
114
|
+
}
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
logger.warn('ICM get recent context failed', {
|
|
119
|
+
error: error instanceof Error ? error.message : String(error),
|
|
120
|
+
});
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=icm-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icm-bridge.js","sourceRoot":"","sources":["../../src/memory/icm-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAgC5C;;GAEG;AACH,MAAM,OAAO,SAAS;IACZ,SAAS,GAAyB,IAAI,CAAC;IACvC,SAAS,GAAG,KAAK,CAAC;IACT,UAAU,GAAG,KAAK,CAAC;IAEpC;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,SAAwB;QACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,SAAS,CAAC,mBAAmB,EAAE,CAAC;YAChD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEnD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;gBAC7C,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,QAA0B;QAC5D,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE/C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE;gBAC9D,OAAO;gBACP,QAAQ,EAAE,QAAQ,IAAI,EAAE;aACzB,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;gBAC5C,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,OAA6B;QAC7D,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE;gBAC7E,KAAK;gBACL,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;gBAC3B,SAAS,EAAE,OAAO,EAAE,SAAS;gBAC7B,IAAI,EAAE,OAAO,EAAE,IAAI;aACpB,CAAC,CAAC;YAEH,oDAAoD;YACpD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,MAAuB,CAAC;YACjC,CAAC;YAED,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,MAAiC,CAAC;YACnD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrC,OAAO,QAAQ,CAAC,QAAyB,CAAC;YAC5C,CAAC;YAED,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;gBACtC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAK,GAAG,EAAE;QAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,EAAE;gBACnF,KAAK;aACN,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,MAAuB,CAAC;YACjC,CAAC;YAED,MAAM,QAAQ,GAAG,MAAiC,CAAC;YACnD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrC,OAAO,QAAQ,CAAC,QAAyB,CAAC;YAC5C,CAAC;YAED,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;gBAC3C,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Device Node System
|
|
3
3
|
*
|
|
4
|
-
* Manages paired device nodes (macOS,
|
|
5
|
-
*
|
|
4
|
+
* Manages paired device nodes (macOS, Linux, Android) with real transport
|
|
5
|
+
* connections (SSH, ADB, local). Capabilities are auto-detected from
|
|
6
|
+
* the connected device.
|
|
6
7
|
*/
|
|
7
|
-
|
|
8
|
-
export type
|
|
8
|
+
import type { ExecuteResult } from './transports/base-transport.js';
|
|
9
|
+
export type DeviceType = 'macos' | 'linux' | 'android' | 'local';
|
|
10
|
+
export type DeviceCapability = 'camera' | 'screen_record' | 'location' | 'notifications' | 'system_run' | 'file_transfer' | 'screenshot';
|
|
11
|
+
export type TransportType = 'ssh' | 'adb' | 'local';
|
|
9
12
|
export interface DeviceNode {
|
|
10
13
|
id: string;
|
|
11
14
|
name: string;
|
|
12
15
|
type: DeviceType;
|
|
16
|
+
transportType: TransportType;
|
|
13
17
|
capabilities: DeviceCapability[];
|
|
14
18
|
paired: boolean;
|
|
15
19
|
lastSeen: number;
|
|
16
20
|
address?: string;
|
|
21
|
+
port?: number;
|
|
22
|
+
username?: string;
|
|
23
|
+
keyPath?: string;
|
|
17
24
|
}
|
|
18
25
|
export interface LocationCoords {
|
|
19
26
|
lat: number;
|
|
@@ -22,19 +29,32 @@ export interface LocationCoords {
|
|
|
22
29
|
export declare class DeviceNodeManager {
|
|
23
30
|
private static instance;
|
|
24
31
|
private devices;
|
|
32
|
+
private transports;
|
|
33
|
+
constructor();
|
|
25
34
|
static getInstance(): DeviceNodeManager;
|
|
26
35
|
static resetInstance(): void;
|
|
27
|
-
|
|
36
|
+
private loadDevices;
|
|
37
|
+
private saveDevices;
|
|
38
|
+
private createTransport;
|
|
39
|
+
private getTransport;
|
|
40
|
+
pairDevice(id: string, name: string, transportType: TransportType, options?: {
|
|
41
|
+
address?: string;
|
|
42
|
+
port?: number;
|
|
43
|
+
username?: string;
|
|
44
|
+
keyPath?: string;
|
|
45
|
+
}): Promise<DeviceNode>;
|
|
28
46
|
unpairDevice(id: string): boolean;
|
|
29
47
|
getDevice(id: string): DeviceNode | undefined;
|
|
30
48
|
listDevices(): DeviceNode[];
|
|
31
49
|
listPairedDevices(): DeviceNode[];
|
|
32
50
|
isDevicePaired(id: string): boolean;
|
|
33
|
-
cameraSnap(deviceId: string): string | null
|
|
34
|
-
screenRecord(deviceId: string, duration?: number): string | null
|
|
35
|
-
|
|
51
|
+
cameraSnap(deviceId: string): Promise<string | null>;
|
|
52
|
+
screenRecord(deviceId: string, duration?: number): Promise<string | null>;
|
|
53
|
+
screenshot(deviceId: string): Promise<string | null>;
|
|
54
|
+
getLocation(deviceId: string): Promise<LocationCoords | null>;
|
|
36
55
|
sendNotification(deviceId: string, title: string, body: string): boolean;
|
|
37
|
-
systemRun(deviceId: string, command: string):
|
|
56
|
+
systemRun(deviceId: string, command: string): Promise<ExecuteResult | null>;
|
|
38
57
|
generatePairingCode(): string;
|
|
39
58
|
updateLastSeen(deviceId: string): boolean;
|
|
59
|
+
private toPlatform;
|
|
40
60
|
}
|
|
@@ -1,16 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Device Node System
|
|
3
3
|
*
|
|
4
|
-
* Manages paired device nodes (macOS,
|
|
5
|
-
*
|
|
4
|
+
* Manages paired device nodes (macOS, Linux, Android) with real transport
|
|
5
|
+
* connections (SSH, ADB, local). Capabilities are auto-detected from
|
|
6
|
+
* the connected device.
|
|
6
7
|
*/
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import * as os from 'os';
|
|
7
11
|
import { logger } from '../utils/logger.js';
|
|
12
|
+
import { getPlatformCommands } from './platform-commands.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Constants
|
|
15
|
+
// ============================================================================
|
|
16
|
+
const DEVICES_FILE = path.join(os.homedir(), '.codebuddy', 'devices.json');
|
|
17
|
+
const DEVICES_VERSION = 1;
|
|
8
18
|
// ============================================================================
|
|
9
19
|
// DeviceNodeManager
|
|
10
20
|
// ============================================================================
|
|
11
21
|
export class DeviceNodeManager {
|
|
12
22
|
static instance = null;
|
|
13
23
|
devices = new Map();
|
|
24
|
+
transports = new Map();
|
|
25
|
+
constructor() {
|
|
26
|
+
this.loadDevices();
|
|
27
|
+
}
|
|
14
28
|
static getInstance() {
|
|
15
29
|
if (!DeviceNodeManager.instance) {
|
|
16
30
|
DeviceNodeManager.instance = new DeviceNodeManager();
|
|
@@ -20,22 +34,156 @@ export class DeviceNodeManager {
|
|
|
20
34
|
static resetInstance() {
|
|
21
35
|
DeviceNodeManager.instance = null;
|
|
22
36
|
}
|
|
23
|
-
|
|
24
|
-
|
|
37
|
+
// ==========================================================================
|
|
38
|
+
// Persistence
|
|
39
|
+
// ==========================================================================
|
|
40
|
+
loadDevices() {
|
|
41
|
+
try {
|
|
42
|
+
if (fs.existsSync(DEVICES_FILE)) {
|
|
43
|
+
const raw = fs.readFileSync(DEVICES_FILE, 'utf-8');
|
|
44
|
+
const data = JSON.parse(raw);
|
|
45
|
+
if (data.version === DEVICES_VERSION && Array.isArray(data.devices)) {
|
|
46
|
+
for (const d of data.devices) {
|
|
47
|
+
this.devices.set(d.id, d);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
logger.debug('No persisted devices found or failed to load');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
saveDevices() {
|
|
57
|
+
try {
|
|
58
|
+
const dir = path.dirname(DEVICES_FILE);
|
|
59
|
+
if (!fs.existsSync(dir)) {
|
|
60
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
61
|
+
}
|
|
62
|
+
const data = {
|
|
63
|
+
version: DEVICES_VERSION,
|
|
64
|
+
devices: Array.from(this.devices.values()),
|
|
65
|
+
};
|
|
66
|
+
fs.writeFileSync(DEVICES_FILE, JSON.stringify(data, null, 2), 'utf-8');
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
logger.warn('Failed to save devices', {
|
|
70
|
+
error: err instanceof Error ? err.message : String(err),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// ==========================================================================
|
|
75
|
+
// Transport Management
|
|
76
|
+
// ==========================================================================
|
|
77
|
+
async createTransport(device) {
|
|
78
|
+
switch (device.transportType) {
|
|
79
|
+
case 'ssh': {
|
|
80
|
+
const { SSHTransport } = await import('./transports/ssh-transport.js');
|
|
81
|
+
return new SSHTransport({
|
|
82
|
+
deviceId: device.id,
|
|
83
|
+
name: device.name,
|
|
84
|
+
address: device.address,
|
|
85
|
+
port: device.port,
|
|
86
|
+
username: device.username,
|
|
87
|
+
keyPath: device.keyPath,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
case 'adb': {
|
|
91
|
+
const { ADBTransport } = await import('./transports/adb-transport.js');
|
|
92
|
+
return new ADBTransport({
|
|
93
|
+
deviceId: device.id,
|
|
94
|
+
name: device.name,
|
|
95
|
+
address: device.address,
|
|
96
|
+
port: device.port,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
case 'local': {
|
|
100
|
+
const { LocalTransport } = await import('./transports/local-transport.js');
|
|
101
|
+
return new LocalTransport();
|
|
102
|
+
}
|
|
103
|
+
default:
|
|
104
|
+
throw new Error(`Unknown transport type: ${device.transportType}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async getTransport(deviceId) {
|
|
108
|
+
const existing = this.transports.get(deviceId);
|
|
109
|
+
if (existing && existing.isConnected()) {
|
|
110
|
+
return existing;
|
|
111
|
+
}
|
|
112
|
+
const device = this.devices.get(deviceId);
|
|
113
|
+
if (!device)
|
|
114
|
+
return null;
|
|
115
|
+
const transport = await this.createTransport(device);
|
|
116
|
+
await transport.connect();
|
|
117
|
+
this.transports.set(deviceId, transport);
|
|
118
|
+
return transport;
|
|
119
|
+
}
|
|
120
|
+
// ==========================================================================
|
|
121
|
+
// Device Pairing
|
|
122
|
+
// ==========================================================================
|
|
123
|
+
async pairDevice(id, name, transportType, options = {}) {
|
|
124
|
+
logger.info(`Pairing device: ${name} (${id}) via ${transportType}`);
|
|
125
|
+
// Determine device type from transport
|
|
126
|
+
let type;
|
|
127
|
+
switch (transportType) {
|
|
128
|
+
case 'adb':
|
|
129
|
+
type = 'android';
|
|
130
|
+
break;
|
|
131
|
+
case 'local':
|
|
132
|
+
type = 'local';
|
|
133
|
+
break;
|
|
134
|
+
default:
|
|
135
|
+
type = 'macos';
|
|
136
|
+
break; // SSH defaults to macOS, refined by capability detection
|
|
137
|
+
}
|
|
25
138
|
const device = {
|
|
26
139
|
id,
|
|
27
140
|
name,
|
|
28
141
|
type,
|
|
29
|
-
|
|
142
|
+
transportType,
|
|
143
|
+
capabilities: [],
|
|
30
144
|
paired: true,
|
|
31
145
|
lastSeen: Date.now(),
|
|
146
|
+
address: options.address,
|
|
147
|
+
port: options.port,
|
|
148
|
+
username: options.username,
|
|
149
|
+
keyPath: options.keyPath,
|
|
32
150
|
};
|
|
33
151
|
this.devices.set(id, device);
|
|
152
|
+
// Connect and auto-detect capabilities
|
|
153
|
+
try {
|
|
154
|
+
const transport = await this.createTransport(device);
|
|
155
|
+
await transport.connect();
|
|
156
|
+
this.transports.set(id, transport);
|
|
157
|
+
const caps = await transport.getCapabilities();
|
|
158
|
+
device.capabilities = caps;
|
|
159
|
+
// Refine type for SSH connections
|
|
160
|
+
if (transportType === 'ssh') {
|
|
161
|
+
const uname = await transport.execute('uname -s');
|
|
162
|
+
const platform = uname.stdout.trim().toLowerCase();
|
|
163
|
+
if (platform === 'linux') {
|
|
164
|
+
device.type = 'linux';
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
logger.info(`Device paired with capabilities: ${caps.join(', ')}`, { id, name });
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
logger.warn(`Device paired but connection failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
171
|
+
device.capabilities = ['system_run'];
|
|
172
|
+
}
|
|
173
|
+
this.saveDevices();
|
|
34
174
|
return device;
|
|
35
175
|
}
|
|
36
176
|
unpairDevice(id) {
|
|
37
177
|
logger.info(`Unpairing device: ${id}`);
|
|
38
|
-
|
|
178
|
+
const transport = this.transports.get(id);
|
|
179
|
+
if (transport) {
|
|
180
|
+
transport.disconnect().catch(() => { });
|
|
181
|
+
this.transports.delete(id);
|
|
182
|
+
}
|
|
183
|
+
const deleted = this.devices.delete(id);
|
|
184
|
+
if (deleted)
|
|
185
|
+
this.saveDevices();
|
|
186
|
+
return deleted;
|
|
39
187
|
}
|
|
40
188
|
getDevice(id) {
|
|
41
189
|
return this.devices.get(id);
|
|
@@ -50,33 +198,98 @@ export class DeviceNodeManager {
|
|
|
50
198
|
const device = this.devices.get(id);
|
|
51
199
|
return device?.paired === true;
|
|
52
200
|
}
|
|
53
|
-
|
|
201
|
+
// ==========================================================================
|
|
202
|
+
// Device Actions (using real transports)
|
|
203
|
+
// ==========================================================================
|
|
204
|
+
async cameraSnap(deviceId) {
|
|
54
205
|
const device = this.devices.get(deviceId);
|
|
55
206
|
if (!device || !device.capabilities.includes('camera')) {
|
|
56
207
|
logger.warn(`Device ${deviceId} does not support camera`);
|
|
57
208
|
return null;
|
|
58
209
|
}
|
|
59
|
-
|
|
60
|
-
|
|
210
|
+
const transport = await this.getTransport(deviceId);
|
|
211
|
+
if (!transport)
|
|
212
|
+
return null;
|
|
213
|
+
const outputPath = `/tmp/snap-${deviceId}-${Date.now()}.jpg`;
|
|
214
|
+
const platform = this.toPlatform(device.type);
|
|
215
|
+
const commands = getPlatformCommands(platform);
|
|
216
|
+
if (!commands)
|
|
217
|
+
return null;
|
|
218
|
+
const result = await transport.execute(commands.cameraSnap(outputPath));
|
|
219
|
+
if (result.exitCode !== 0) {
|
|
220
|
+
logger.warn(`Camera snap failed on ${deviceId}: ${result.stderr}`);
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
device.lastSeen = Date.now();
|
|
224
|
+
return outputPath;
|
|
61
225
|
}
|
|
62
|
-
screenRecord(deviceId, duration) {
|
|
226
|
+
async screenRecord(deviceId, duration) {
|
|
63
227
|
const device = this.devices.get(deviceId);
|
|
64
228
|
if (!device || !device.capabilities.includes('screen_record')) {
|
|
65
229
|
logger.warn(`Device ${deviceId} does not support screen recording`);
|
|
66
230
|
return null;
|
|
67
231
|
}
|
|
232
|
+
const transport = await this.getTransport(deviceId);
|
|
233
|
+
if (!transport)
|
|
234
|
+
return null;
|
|
68
235
|
const dur = duration || 10;
|
|
69
|
-
|
|
70
|
-
|
|
236
|
+
const outputPath = `/tmp/screen-${deviceId}-${Date.now()}.mp4`;
|
|
237
|
+
const platform = this.toPlatform(device.type);
|
|
238
|
+
const commands = getPlatformCommands(platform);
|
|
239
|
+
if (!commands)
|
|
240
|
+
return null;
|
|
241
|
+
const result = await transport.execute(commands.screenRecord(outputPath, dur));
|
|
242
|
+
if (result.exitCode !== 0) {
|
|
243
|
+
logger.warn(`Screen record failed on ${deviceId}: ${result.stderr}`);
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
device.lastSeen = Date.now();
|
|
247
|
+
return outputPath;
|
|
248
|
+
}
|
|
249
|
+
async screenshot(deviceId) {
|
|
250
|
+
const device = this.devices.get(deviceId);
|
|
251
|
+
if (!device || !device.capabilities.includes('screenshot')) {
|
|
252
|
+
logger.warn(`Device ${deviceId} does not support screenshots`);
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
const transport = await this.getTransport(deviceId);
|
|
256
|
+
if (!transport)
|
|
257
|
+
return null;
|
|
258
|
+
const outputPath = `/tmp/screenshot-${deviceId}-${Date.now()}.png`;
|
|
259
|
+
const platform = this.toPlatform(device.type);
|
|
260
|
+
const commands = getPlatformCommands(platform);
|
|
261
|
+
if (!commands)
|
|
262
|
+
return null;
|
|
263
|
+
const result = await transport.execute(commands.screenshot(outputPath));
|
|
264
|
+
if (result.exitCode !== 0) {
|
|
265
|
+
logger.warn(`Screenshot failed on ${deviceId}: ${result.stderr}`);
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
device.lastSeen = Date.now();
|
|
269
|
+
return outputPath;
|
|
71
270
|
}
|
|
72
|
-
getLocation(deviceId) {
|
|
271
|
+
async getLocation(deviceId) {
|
|
73
272
|
const device = this.devices.get(deviceId);
|
|
74
273
|
if (!device || !device.capabilities.includes('location')) {
|
|
75
274
|
logger.warn(`Device ${deviceId} does not support location`);
|
|
76
275
|
return null;
|
|
77
276
|
}
|
|
78
|
-
|
|
79
|
-
|
|
277
|
+
const transport = await this.getTransport(deviceId);
|
|
278
|
+
if (!transport)
|
|
279
|
+
return null;
|
|
280
|
+
const platform = this.toPlatform(device.type);
|
|
281
|
+
const commands = getPlatformCommands(platform);
|
|
282
|
+
if (!commands)
|
|
283
|
+
return null;
|
|
284
|
+
const result = await transport.execute(commands.getLocation());
|
|
285
|
+
device.lastSeen = Date.now();
|
|
286
|
+
try {
|
|
287
|
+
const parsed = JSON.parse(result.stdout);
|
|
288
|
+
return { lat: parsed.lat || 0, lon: parsed.lon || 0 };
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
return { lat: 0, lon: 0 };
|
|
292
|
+
}
|
|
80
293
|
}
|
|
81
294
|
sendNotification(deviceId, title, body) {
|
|
82
295
|
const device = this.devices.get(deviceId);
|
|
@@ -87,18 +300,18 @@ export class DeviceNodeManager {
|
|
|
87
300
|
logger.info(`Sending notification to ${deviceId}: ${title}`);
|
|
88
301
|
return true;
|
|
89
302
|
}
|
|
90
|
-
systemRun(deviceId, command) {
|
|
303
|
+
async systemRun(deviceId, command) {
|
|
91
304
|
const device = this.devices.get(deviceId);
|
|
92
305
|
if (!device || !device.capabilities.includes('system_run')) {
|
|
93
306
|
logger.warn(`Device ${deviceId} does not support system_run`);
|
|
94
307
|
return null;
|
|
95
308
|
}
|
|
96
|
-
|
|
97
|
-
|
|
309
|
+
const transport = await this.getTransport(deviceId);
|
|
310
|
+
if (!transport)
|
|
98
311
|
return null;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
return
|
|
312
|
+
const result = await transport.execute(command);
|
|
313
|
+
device.lastSeen = Date.now();
|
|
314
|
+
return result;
|
|
102
315
|
}
|
|
103
316
|
generatePairingCode() {
|
|
104
317
|
const code = Math.floor(100000 + Math.random() * 900000).toString();
|
|
@@ -107,11 +320,22 @@ export class DeviceNodeManager {
|
|
|
107
320
|
}
|
|
108
321
|
updateLastSeen(deviceId) {
|
|
109
322
|
const device = this.devices.get(deviceId);
|
|
110
|
-
if (!device)
|
|
323
|
+
if (!device)
|
|
111
324
|
return false;
|
|
112
|
-
}
|
|
113
325
|
device.lastSeen = Date.now();
|
|
114
326
|
return true;
|
|
115
327
|
}
|
|
328
|
+
// ==========================================================================
|
|
329
|
+
// Helpers
|
|
330
|
+
// ==========================================================================
|
|
331
|
+
toPlatform(type) {
|
|
332
|
+
switch (type) {
|
|
333
|
+
case 'macos': return 'macos';
|
|
334
|
+
case 'linux': return 'linux';
|
|
335
|
+
case 'android': return 'android';
|
|
336
|
+
case 'local': return os.platform() === 'darwin' ? 'macos' : 'linux';
|
|
337
|
+
default: return 'unknown';
|
|
338
|
+
}
|
|
339
|
+
}
|
|
116
340
|
}
|
|
117
341
|
//# sourceMappingURL=device-node.js.map
|