@phuetz/code-buddy 0.1.4 → 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.
Files changed (49) hide show
  1. package/.codebuddy/README.md +52 -0
  2. package/README.md +17 -17
  3. package/dist/browser-automation/browser-manager.js +0 -2
  4. package/dist/browser-automation/browser-manager.js.map +1 -1
  5. package/dist/codebuddy/tool-definitions/computer-control-tools.js +2 -0
  6. package/dist/codebuddy/tool-definitions/computer-control-tools.js.map +1 -1
  7. package/dist/commands/cli/daemon-commands.js +25 -0
  8. package/dist/commands/cli/daemon-commands.js.map +1 -1
  9. package/dist/daemon/daemon-manager.js +3 -1
  10. package/dist/daemon/daemon-manager.js.map +1 -1
  11. package/dist/desktop-automation/automation-manager.d.ts +8 -0
  12. package/dist/desktop-automation/automation-manager.js +52 -0
  13. package/dist/desktop-automation/automation-manager.js.map +1 -1
  14. package/dist/desktop-automation/base-native-provider.d.ts +72 -0
  15. package/dist/desktop-automation/base-native-provider.js +75 -0
  16. package/dist/desktop-automation/base-native-provider.js.map +1 -0
  17. package/dist/desktop-automation/index.d.ts +4 -0
  18. package/dist/desktop-automation/index.js +5 -0
  19. package/dist/desktop-automation/index.js.map +1 -1
  20. package/dist/desktop-automation/linux-native-provider.d.ts +48 -0
  21. package/dist/desktop-automation/linux-native-provider.js +515 -0
  22. package/dist/desktop-automation/linux-native-provider.js.map +1 -0
  23. package/dist/desktop-automation/macos-native-provider.d.ts +61 -0
  24. package/dist/desktop-automation/macos-native-provider.js +768 -0
  25. package/dist/desktop-automation/macos-native-provider.js.map +1 -0
  26. package/dist/desktop-automation/smart-snapshot.d.ts +21 -2
  27. package/dist/desktop-automation/smart-snapshot.js +237 -12
  28. package/dist/desktop-automation/smart-snapshot.js.map +1 -1
  29. package/dist/desktop-automation/types.d.ts +1 -1
  30. package/dist/desktop-automation/types.js +2 -2
  31. package/dist/desktop-automation/types.js.map +1 -1
  32. package/dist/desktop-automation/windows-native-provider.d.ts +71 -0
  33. package/dist/desktop-automation/windows-native-provider.js +653 -0
  34. package/dist/desktop-automation/windows-native-provider.js.map +1 -0
  35. package/dist/index.js +31 -38
  36. package/dist/index.js.map +1 -1
  37. package/dist/server/index.js +26 -10
  38. package/dist/server/index.js.map +1 -1
  39. package/dist/server/routes/chat.js +12 -1
  40. package/dist/server/routes/chat.js.map +1 -1
  41. package/dist/server/websocket/handler.js +10 -1
  42. package/dist/server/websocket/handler.js.map +1 -1
  43. package/dist/tools/computer-control-tool.d.ts +6 -1
  44. package/dist/tools/computer-control-tool.js +97 -1
  45. package/dist/tools/computer-control-tool.js.map +1 -1
  46. package/dist/tools/screenshot-tool.d.ts +23 -0
  47. package/dist/tools/screenshot-tool.js +224 -1
  48. package/dist/tools/screenshot-tool.js.map +1 -1
  49. package/package.json +14 -5
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Base Native Provider
3
+ *
4
+ * Abstract base class for platform-native desktop automation providers.
5
+ * Provides shared utilities for executing CLI tools, checking tool availability,
6
+ * and common helper methods.
7
+ */
8
+ import type { IAutomationProvider } from './automation-manager.js';
9
+ import type { AutomationProvider, ProviderCapabilities, MousePosition, MouseMoveOptions, MouseClickOptions, MouseDragOptions, MouseScrollOptions, MouseButton, KeyCode, KeyPressOptions, TypeOptions, HotkeySequence, WindowInfo, WindowSearchOptions, WindowSetOptions, AppInfo, AppLaunchOptions, ScreenInfo, ColorInfo, ClipboardContent } from './types.js';
10
+ export declare abstract class BaseNativeProvider implements IAutomationProvider {
11
+ readonly name: AutomationProvider;
12
+ abstract readonly capabilities: ProviderCapabilities;
13
+ abstract readonly platformName: string;
14
+ protected initialized: boolean;
15
+ protected availableTools: Map<string, boolean>;
16
+ /**
17
+ * Execute a command asynchronously with optional timeout
18
+ */
19
+ protected exec(cmd: string, timeout?: number): Promise<string>;
20
+ /**
21
+ * Execute a command synchronously
22
+ */
23
+ protected execSync(cmd: string, timeout?: number): string;
24
+ /**
25
+ * Check if a CLI tool is available (cached)
26
+ */
27
+ protected checkTool(name: string): boolean;
28
+ /**
29
+ * Check if a tool is available (from cache)
30
+ */
31
+ protected hasTool(name: string): boolean;
32
+ /**
33
+ * Delay helper
34
+ */
35
+ protected delay(ms: number): Promise<void>;
36
+ /**
37
+ * Ensure provider is initialized
38
+ */
39
+ protected ensureInitialized(): void;
40
+ abstract initialize(): Promise<void>;
41
+ abstract shutdown(): Promise<void>;
42
+ abstract isAvailable(): Promise<boolean>;
43
+ abstract getMousePosition(): Promise<MousePosition>;
44
+ abstract moveMouse(x: number, y: number, options?: MouseMoveOptions): Promise<void>;
45
+ abstract click(options?: MouseClickOptions): Promise<void>;
46
+ abstract doubleClick(button?: MouseButton): Promise<void>;
47
+ abstract rightClick(): Promise<void>;
48
+ abstract drag(fromX: number, fromY: number, toX: number, toY: number, options?: MouseDragOptions): Promise<void>;
49
+ abstract scroll(options: MouseScrollOptions): Promise<void>;
50
+ abstract keyPress(key: KeyCode, options?: KeyPressOptions): Promise<void>;
51
+ abstract keyDown(key: KeyCode): Promise<void>;
52
+ abstract keyUp(key: KeyCode): Promise<void>;
53
+ abstract type(text: string, options?: TypeOptions): Promise<void>;
54
+ abstract hotkey(sequence: HotkeySequence): Promise<void>;
55
+ abstract getActiveWindow(): Promise<WindowInfo | null>;
56
+ abstract getWindows(options?: WindowSearchOptions): Promise<WindowInfo[]>;
57
+ abstract getWindow(handle: string): Promise<WindowInfo | null>;
58
+ abstract focusWindow(handle: string): Promise<void>;
59
+ abstract minimizeWindow(handle: string): Promise<void>;
60
+ abstract maximizeWindow(handle: string): Promise<void>;
61
+ abstract restoreWindow(handle: string): Promise<void>;
62
+ abstract closeWindow(handle: string): Promise<void>;
63
+ abstract setWindow(handle: string, options: WindowSetOptions): Promise<void>;
64
+ abstract getRunningApps(): Promise<AppInfo[]>;
65
+ abstract launchApp(appPath: string, options?: AppLaunchOptions): Promise<AppInfo>;
66
+ abstract closeApp(pid: number): Promise<void>;
67
+ abstract getScreens(): Promise<ScreenInfo[]>;
68
+ abstract getPixelColor(x: number, y: number): Promise<ColorInfo>;
69
+ abstract getClipboard(): Promise<ClipboardContent>;
70
+ abstract setClipboard(content: Partial<ClipboardContent>): Promise<void>;
71
+ abstract clearClipboard(): Promise<void>;
72
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Base Native Provider
3
+ *
4
+ * Abstract base class for platform-native desktop automation providers.
5
+ * Provides shared utilities for executing CLI tools, checking tool availability,
6
+ * and common helper methods.
7
+ */
8
+ import { execSync, exec as execCb } from 'child_process';
9
+ import { promisify } from 'util';
10
+ const execAsync = promisify(execCb);
11
+ export class BaseNativeProvider {
12
+ name = 'native';
13
+ initialized = false;
14
+ availableTools = new Map();
15
+ /**
16
+ * Execute a command asynchronously with optional timeout
17
+ */
18
+ async exec(cmd, timeout = 10000) {
19
+ const { stdout } = await execAsync(cmd, {
20
+ timeout,
21
+ encoding: 'utf-8',
22
+ maxBuffer: 1024 * 1024,
23
+ });
24
+ return stdout.trim();
25
+ }
26
+ /**
27
+ * Execute a command synchronously
28
+ */
29
+ execSync(cmd, timeout = 5000) {
30
+ return execSync(cmd, {
31
+ encoding: 'utf-8',
32
+ timeout,
33
+ maxBuffer: 1024 * 1024,
34
+ }).trim();
35
+ }
36
+ /**
37
+ * Check if a CLI tool is available (cached)
38
+ */
39
+ checkTool(name) {
40
+ if (this.availableTools.has(name)) {
41
+ return this.availableTools.get(name);
42
+ }
43
+ let available = false;
44
+ try {
45
+ execSync(`which ${name}`, { encoding: 'utf-8', timeout: 3000 });
46
+ available = true;
47
+ }
48
+ catch {
49
+ available = false;
50
+ }
51
+ this.availableTools.set(name, available);
52
+ return available;
53
+ }
54
+ /**
55
+ * Check if a tool is available (from cache)
56
+ */
57
+ hasTool(name) {
58
+ return this.availableTools.get(name) ?? false;
59
+ }
60
+ /**
61
+ * Delay helper
62
+ */
63
+ delay(ms) {
64
+ return new Promise(resolve => setTimeout(resolve, ms));
65
+ }
66
+ /**
67
+ * Ensure provider is initialized
68
+ */
69
+ ensureInitialized() {
70
+ if (!this.initialized) {
71
+ throw new Error(`${this.platformName} native provider not initialized. Call initialize() first.`);
72
+ }
73
+ }
74
+ }
75
+ //# sourceMappingURL=base-native-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-native-provider.js","sourceRoot":"","sources":["../../src/desktop-automation/base-native-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAyBjC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAEpC,MAAM,OAAgB,kBAAkB;IAC7B,IAAI,GAAuB,QAAQ,CAAC;IAInC,WAAW,GAAG,KAAK,CAAC;IACpB,cAAc,GAAyB,IAAI,GAAG,EAAE,CAAC;IAE3D;;OAEG;IACO,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,OAAO,GAAG,KAAK;QAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;YACtC,OAAO;YACP,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,IAAI,GAAG,IAAI;SACvB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACO,QAAQ,CAAC,GAAW,EAAE,OAAO,GAAG,IAAI;QAC5C,OAAO,QAAQ,CAAC,GAAG,EAAE;YACnB,QAAQ,EAAE,OAAO;YACjB,OAAO;YACP,SAAS,EAAE,IAAI,GAAG,IAAI;SACvB,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACO,SAAS,CAAC,IAAY;QAC9B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QACxC,CAAC;QACD,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC;YACH,QAAQ,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACO,OAAO,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IAChD,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,EAAU;QACxB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACO,iBAAiB;QACzB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,4DAA4D,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;CAyCF"}
@@ -15,6 +15,10 @@ export { DEFAULT_AUTOMATION_CONFIG } from './types.js';
15
15
  export type { IAutomationProvider } from './automation-manager.js';
16
16
  export { MockAutomationProvider, DesktopAutomationManager, getDesktopAutomation, resetDesktopAutomation, } from './automation-manager.js';
17
17
  export { NutJsProvider } from './nutjs-provider.js';
18
+ export { BaseNativeProvider } from './base-native-provider.js';
19
+ export { LinuxNativeProvider } from './linux-native-provider.js';
20
+ export { WindowsNativeProvider } from './windows-native-provider.js';
21
+ export { MacOSNativeProvider } from './macos-native-provider.js';
18
22
  export type { PermissionType, PermissionStatus, PermissionInfo, PermissionCheckResult, PermissionManagerConfig, } from './permission-manager.js';
19
23
  export { PermissionManager, PermissionError, getPermissionManager, resetPermissionManager, } from './permission-manager.js';
20
24
  export type { VolumeInfo, BrightnessInfo, NotificationOptions, NotificationResult, PowerAction, DisplayInfo, NetworkInfo, BatteryInfo, SystemInfo, } from './system-control.js';
@@ -14,6 +14,11 @@ export { DEFAULT_AUTOMATION_CONFIG } from './types.js';
14
14
  export { MockAutomationProvider, DesktopAutomationManager, getDesktopAutomation, resetDesktopAutomation, } from './automation-manager.js';
15
15
  // Providers
16
16
  export { NutJsProvider } from './nutjs-provider.js';
17
+ // Platform-Native Providers (OpenClaw-inspired)
18
+ export { BaseNativeProvider } from './base-native-provider.js';
19
+ export { LinuxNativeProvider } from './linux-native-provider.js';
20
+ export { WindowsNativeProvider } from './windows-native-provider.js';
21
+ export { MacOSNativeProvider } from './macos-native-provider.js';
17
22
  export { PermissionManager, PermissionError, getPermissionManager, resetPermissionManager, } from './permission-manager.js';
18
23
  export { SystemControl, getSystemControl, resetSystemControl, } from './system-control.js';
19
24
  export { SmartSnapshotManager, getSmartSnapshotManager, resetSmartSnapshotManager, } from './smart-snapshot.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/desktop-automation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiCH,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAKvD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAEjC,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAWpD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAejC,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAY7B,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAa7B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/desktop-automation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiCH,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAKvD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAEjC,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,gDAAgD;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAWjE,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAejC,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAY7B,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAa7B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Linux Native Desktop Automation Provider
3
+ *
4
+ * Uses xdotool, xclip, wmctrl, and xrandr for desktop automation on Linux/X11.
5
+ */
6
+ import { BaseNativeProvider } from './base-native-provider.js';
7
+ import type { ProviderCapabilities, MousePosition, MouseMoveOptions, MouseClickOptions, MouseDragOptions, MouseScrollOptions, MouseButton, KeyCode, KeyPressOptions, TypeOptions, HotkeySequence, WindowInfo, WindowSearchOptions, WindowSetOptions, AppInfo, AppLaunchOptions, ScreenInfo, ColorInfo, ClipboardContent } from './types.js';
8
+ export declare class LinuxNativeProvider extends BaseNativeProvider {
9
+ readonly platformName = "Linux";
10
+ readonly capabilities: ProviderCapabilities;
11
+ private isX11;
12
+ initialize(): Promise<void>;
13
+ isAvailable(): Promise<boolean>;
14
+ shutdown(): Promise<void>;
15
+ /**
16
+ * Map a key name to the xdotool equivalent
17
+ */
18
+ private mapKey;
19
+ getMousePosition(): Promise<MousePosition>;
20
+ moveMouse(x: number, y: number, options?: MouseMoveOptions): Promise<void>;
21
+ click(options?: MouseClickOptions): Promise<void>;
22
+ doubleClick(button?: MouseButton): Promise<void>;
23
+ rightClick(): Promise<void>;
24
+ drag(fromX: number, fromY: number, toX: number, toY: number, _options?: MouseDragOptions): Promise<void>;
25
+ scroll(options: MouseScrollOptions): Promise<void>;
26
+ keyPress(key: KeyCode, options?: KeyPressOptions): Promise<void>;
27
+ keyDown(key: KeyCode): Promise<void>;
28
+ keyUp(key: KeyCode): Promise<void>;
29
+ type(text: string, options?: TypeOptions): Promise<void>;
30
+ hotkey(sequence: HotkeySequence): Promise<void>;
31
+ getActiveWindow(): Promise<WindowInfo | null>;
32
+ getWindows(options?: WindowSearchOptions): Promise<WindowInfo[]>;
33
+ getWindow(handle: string): Promise<WindowInfo | null>;
34
+ focusWindow(handle: string): Promise<void>;
35
+ minimizeWindow(handle: string): Promise<void>;
36
+ maximizeWindow(handle: string): Promise<void>;
37
+ restoreWindow(handle: string): Promise<void>;
38
+ closeWindow(handle: string): Promise<void>;
39
+ setWindow(handle: string, options: WindowSetOptions): Promise<void>;
40
+ getRunningApps(): Promise<AppInfo[]>;
41
+ launchApp(appPath: string, options?: AppLaunchOptions): Promise<AppInfo>;
42
+ closeApp(pid: number): Promise<void>;
43
+ getScreens(): Promise<ScreenInfo[]>;
44
+ getPixelColor(_x: number, _y: number): Promise<ColorInfo>;
45
+ getClipboard(): Promise<ClipboardContent>;
46
+ setClipboard(content: Partial<ClipboardContent>): Promise<void>;
47
+ clearClipboard(): Promise<void>;
48
+ }