@adhdev/daemon-core 0.7.38 → 0.7.39

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/agent-stream/forward.d.ts +8 -0
  2. package/dist/agent-stream/index.d.ts +6 -0
  3. package/dist/agent-stream/manager.d.ts +59 -0
  4. package/dist/agent-stream/poller.d.ts +41 -0
  5. package/dist/agent-stream/provider-adapter.d.ts +29 -0
  6. package/dist/agent-stream/types.d.ts +62 -0
  7. package/dist/boot/daemon-lifecycle.d.ts +97 -0
  8. package/dist/cdp/devtools.d.ts +51 -0
  9. package/dist/cdp/initializer.d.ts +50 -0
  10. package/dist/cdp/manager.d.ts +145 -0
  11. package/dist/cdp/scanner.d.ts +58 -0
  12. package/dist/cdp/setup.d.ts +58 -0
  13. package/dist/cli-adapter-types.d.ts +25 -0
  14. package/dist/cli-adapters/provider-cli-adapter.d.ts +229 -0
  15. package/dist/cli-adapters/pty-transport.d.ts +43 -0
  16. package/dist/cli-adapters/session-host-transport.d.ts +19 -0
  17. package/dist/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +12 -0
  18. package/dist/cli-adapters/terminal-backends/types.d.ts +14 -0
  19. package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +13 -0
  20. package/dist/cli-adapters/terminal-screen.d.ts +27 -0
  21. package/dist/commands/cdp-commands.d.ts +15 -0
  22. package/dist/commands/chat-commands.d.ts +15 -0
  23. package/dist/commands/cli-manager.d.ts +82 -0
  24. package/dist/commands/handler.d.ts +101 -0
  25. package/dist/commands/router.d.ts +69 -0
  26. package/dist/commands/stream-commands.d.ts +13 -0
  27. package/dist/commands/workspace-commands.d.ts +11 -0
  28. package/dist/config/chat-history.d.ts +60 -0
  29. package/dist/config/config.d.ts +101 -0
  30. package/dist/config/recent-activity.d.ts +27 -0
  31. package/dist/config/workspaces.d.ts +82 -0
  32. package/dist/daemon/dev-auto-implement.d.ts +26 -0
  33. package/dist/daemon/dev-cdp-handlers.d.ts +22 -0
  34. package/dist/daemon/dev-cli-debug.d.ts +24 -0
  35. package/dist/daemon/dev-server-types.d.ts +43 -0
  36. package/dist/daemon/dev-server.d.ts +133 -0
  37. package/dist/daemon/scaffold-template.d.ts +32 -0
  38. package/dist/daemon-core.d.ts +36 -0
  39. package/dist/detection/cli-detector.d.ts +27 -0
  40. package/dist/detection/ide-detector.d.ts +34 -0
  41. package/dist/index.d.ts +72 -2499
  42. package/dist/index.js +458 -637
  43. package/dist/index.js.map +1 -1
  44. package/dist/index.mjs +465 -642
  45. package/dist/index.mjs.map +1 -1
  46. package/dist/installer.d.ts +50 -0
  47. package/dist/ipc-protocol.d.ts +111 -0
  48. package/dist/launch.d.ts +46 -0
  49. package/dist/logging/command-log.d.ts +31 -0
  50. package/dist/logging/logger.d.ts +87 -0
  51. package/dist/providers/acp-provider-instance.d.ts +101 -0
  52. package/dist/providers/cli-provider-instance.d.ts +43 -0
  53. package/dist/providers/contracts.d.ts +483 -0
  54. package/dist/providers/extension-provider-instance.d.ts +44 -0
  55. package/dist/providers/ide-provider-instance.d.ts +61 -0
  56. package/dist/providers/index.d.ts +5 -0
  57. package/dist/providers/provider-instance-manager.d.ts +84 -0
  58. package/dist/providers/provider-instance.d.ts +148 -0
  59. package/dist/providers/provider-loader.d.ts +270 -0
  60. package/dist/providers/status-monitor.d.ts +48 -0
  61. package/dist/providers/version-archive.d.ts +52 -0
  62. package/dist/session-host/runtime-support.d.ts +8 -0
  63. package/dist/sessions/registry.d.ts +24 -0
  64. package/dist/shared-types-extra.d.ts +29 -0
  65. package/dist/shared-types.d.ts +213 -0
  66. package/dist/status/builders.d.ts +33 -0
  67. package/dist/status/normalize.d.ts +14 -1
  68. package/dist/status/reporter.d.ts +69 -0
  69. package/dist/status/snapshot.d.ts +38 -0
  70. package/dist/system/host-memory.d.ts +19 -0
  71. package/dist/types.d.ts +123 -0
  72. package/node_modules/@adhdev/session-host-core/package.json +1 -1
  73. package/package.json +3 -2
  74. package/src/commands/cli-manager.ts +1 -26
  75. package/src/commands/handler.ts +0 -31
  76. package/src/commands/router.ts +1 -18
  77. package/src/commands/stream-commands.ts +2 -4
  78. package/src/commands/workspace-commands.ts +9 -23
  79. package/src/config/config.ts +1 -78
  80. package/src/config/workspaces.ts +0 -24
  81. package/src/index.ts +16 -15
  82. package/src/providers/provider-loader.ts +13 -5
  83. package/src/shared-types-extra.ts +34 -0
  84. package/src/shared-types.ts +14 -27
  85. package/src/status/builders.ts +12 -0
  86. package/src/status/reporter.ts +1 -0
  87. package/src/status/snapshot.ts +26 -13
  88. package/src/types.ts +3 -8
  89. package/dist/index.d.mts +0 -2504
  90. package/dist/normalize-DVI4Lo5I.d.mts +0 -947
  91. package/dist/normalize-DVI4Lo5I.d.ts +0 -947
  92. package/dist/status/normalize.d.mts +0 -1
  93. package/src/config/workspace-activity.ts +0 -65
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Shared helper for forwarding agent stream snapshots into the IDE instance.
3
+ *
4
+ * Both cloud and standalone daemons use the same InstanceManager wiring.
5
+ */
6
+ export declare function forwardAgentStreamsToIdeInstance(instanceManager: {
7
+ getInstance: (key: string) => any;
8
+ }, ideType: string, streams: any[]): void;
@@ -0,0 +1,6 @@
1
+ export { DaemonAgentStreamManager } from './manager.js';
2
+ export type { ManagedAgent } from './manager.js';
3
+ export { ProviderStreamAdapter } from './provider-adapter.js';
4
+ export * from './types.js';
5
+ export { AgentStreamPoller } from './poller.js';
6
+ export type { AgentStreamPollerDeps } from './poller.js';
@@ -0,0 +1,59 @@
1
+ /**
2
+ * DaemonAgentStreamManager — manage agent streams (ported for Daemon)
3
+ *
4
+ * Agent stream manager for extension data collection.
5
+ * All vscode dependencies removed — pure Node.js environment.
6
+ *
7
+ * Panel focus is delegated to Extension via IPC.
8
+ * CDP session management uses DaemonCdpManager directly.
9
+ */
10
+ import { DaemonCdpManager, AgentWebviewTarget } from '../cdp/manager.js';
11
+ import { ProviderLoader } from '../providers/provider-loader.js';
12
+ import { SessionRegistry } from '../sessions/registry.js';
13
+ import type { IAgentStreamAdapter, AgentStreamState, AgentChatListItem } from './types.js';
14
+ export interface ManagedAgent {
15
+ adapter: IAgentStreamAdapter;
16
+ runtimeSessionId: string;
17
+ parentSessionId: string;
18
+ cdpSessionId: string;
19
+ target: AgentWebviewTarget;
20
+ lastState: AgentStreamState | null;
21
+ lastError: string | null;
22
+ lastHiddenCheckTime: number;
23
+ }
24
+ export declare class DaemonAgentStreamManager {
25
+ private readonly sessionRegistry?;
26
+ private adaptersByType;
27
+ private managedBySessionId;
28
+ private enabled;
29
+ private logFn;
30
+ private lastDiscoveryTimeByParent;
31
+ private discoveryIntervalMsByParent;
32
+ private activeSessionIdByParent;
33
+ constructor(logFn?: (msg: string) => void, providerLoader?: ProviderLoader, sessionRegistry?: SessionRegistry | undefined);
34
+ setEnabled(enabled: boolean): void;
35
+ get isEnabled(): boolean;
36
+ getActiveSessionId(parentSessionId: string): string | null;
37
+ private isRecoverableSessionError;
38
+ private getSessionTarget;
39
+ resetParentSession(parentSessionId: string): void;
40
+ /** Panel focus based on provider.js focusPanel or extensionId (currently no-op) */
41
+ ensureSessionPanelOpen(_sessionId: string): Promise<void>;
42
+ setActiveSession(cdp: DaemonCdpManager, parentSessionId: string, sessionId: string | null): Promise<void>;
43
+ private resolveSessionIdForTarget;
44
+ private connectManagedSession;
45
+ /** Agent webview discovery + session connection */
46
+ syncActiveSession(cdp: DaemonCdpManager, parentSessionId: string): Promise<void>;
47
+ /** Collect active extension session state */
48
+ collectActiveSession(cdp: DaemonCdpManager, parentSessionId: string): Promise<AgentStreamState | null>;
49
+ sendToSession(cdp: DaemonCdpManager, sessionId: string, text: string): Promise<boolean>;
50
+ resolveSessionAction(cdp: DaemonCdpManager, sessionId: string, action: 'approve' | 'reject'): Promise<boolean>;
51
+ newSession(cdp: DaemonCdpManager, sessionId: string): Promise<boolean>;
52
+ listSessionChats(cdp: DaemonCdpManager, sessionId: string): Promise<AgentChatListItem[]>;
53
+ switchConversation(cdp: DaemonCdpManager, sessionId: string, conversationId: string): Promise<boolean>;
54
+ focusSession(cdp: DaemonCdpManager, sessionId: string): Promise<boolean>;
55
+ getConnectedSessions(parentSessionId?: string): string[];
56
+ getManagedSession(sessionId: string): ManagedAgent | undefined;
57
+ dispose(cdpManagers: Map<string, DaemonCdpManager>): Promise<void>;
58
+ resolveSessionForAgent(parentSessionId: string, agentType: string): string | null;
59
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * AgentStreamPoller — Periodic agent stream polling + extension dynamic management
3
+ *
4
+ * Handles periodic agent stream polling and extension dynamic management.
5
+ *
6
+ * Responsibilities:
7
+ * 1. Refresh extension providers in CDP managers (config changes take effect immediately)
8
+ * 2. Dynamically add/remove IDE instance extensions based on enabled state
9
+ * 3. Sync agent sessions + collect agent streams
10
+ * 4. Auto-discover agents in connected IDEs
11
+ */
12
+ import type { DaemonCdpManager } from '../cdp/manager.js';
13
+ import type { DaemonAgentStreamManager } from './manager.js';
14
+ import type { ProviderLoader } from '../providers/provider-loader.js';
15
+ import type { ProviderInstanceManager } from '../providers/provider-instance-manager.js';
16
+ import type { SessionRegistry } from '../sessions/registry.js';
17
+ import type { AgentStreamState } from './types.js';
18
+ export interface AgentStreamPollerDeps {
19
+ agentStreamManager: DaemonAgentStreamManager;
20
+ providerLoader: ProviderLoader;
21
+ instanceManager: ProviderInstanceManager;
22
+ cdpManagers: Map<string, DaemonCdpManager>;
23
+ sessionRegistry: SessionRegistry;
24
+ /** Callback when agent streams are updated */
25
+ onStreamsUpdated?: (ideType: string, streams: AgentStreamState[]) => void;
26
+ }
27
+ export declare class AgentStreamPoller {
28
+ private deps;
29
+ private timer;
30
+ constructor(deps: AgentStreamPollerDeps);
31
+ /** Currently active IDE type for agent streaming */
32
+ get activeIde(): string | null;
33
+ /** Reset active IDE tracking (e.g., when IDE is stopped) */
34
+ resetActiveIde(parentSessionId: string): void;
35
+ /** Start polling (idempotent — ignored if already started) */
36
+ start(intervalMs?: number): void;
37
+ /** Stop polling */
38
+ stop(): void;
39
+ /** Single poll tick — can also be called manually */
40
+ private tick;
41
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * ProviderStreamAdapter — generic Extension adapter based on provider.js
3
+ *
4
+ * Consolidates ClineAdapter, RooCodeAdapter, ContinueAdapter.
5
+ * Auto-configured using provider.js scripts + metadata.
6
+ */
7
+ import type { IAgentStreamAdapter, AgentStreamState, AgentChatListItem, AgentEvaluateFn } from './types.js';
8
+ import type { ProviderModule } from '../providers/contracts.js';
9
+ export declare class ProviderStreamAdapter implements IAgentStreamAdapter {
10
+ readonly agentType: string;
11
+ readonly agentName: string;
12
+ readonly extensionId: string;
13
+ readonly extensionIdPattern: RegExp;
14
+ private provider;
15
+ private lastSuccessState;
16
+ constructor(provider: ProviderModule);
17
+ private callScript;
18
+ private hasScript;
19
+ private summarizeRaw;
20
+ private isTransportError;
21
+ readChat(evaluate: AgentEvaluateFn): Promise<AgentStreamState>;
22
+ sendMessage(evaluate: AgentEvaluateFn, text: string): Promise<void>;
23
+ resolveAction(evaluate: AgentEvaluateFn, action: string, button?: string): Promise<boolean>;
24
+ newSession(evaluate: AgentEvaluateFn): Promise<void>;
25
+ listChats(evaluate: AgentEvaluateFn): Promise<AgentChatListItem[]>;
26
+ switchSession(evaluate: AgentEvaluateFn, sessionId: string): Promise<boolean>;
27
+ focusEditor(evaluate: AgentEvaluateFn): Promise<void>;
28
+ private errorState;
29
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Agent Stream Types — ported for Daemon (identical to original)
3
+ *
4
+ * Agent stream types.
5
+ * No vscode dependency — can be used as-is.
6
+ */
7
+ /** Agent chat message */
8
+ export interface AgentChatMessage {
9
+ role: 'user' | 'assistant' | 'system';
10
+ content: string;
11
+ timestamp?: number;
12
+ }
13
+ /** Agent chat history item */
14
+ export interface AgentChatListItem {
15
+ title: string;
16
+ id: string;
17
+ status?: string;
18
+ time?: string;
19
+ cost?: string;
20
+ }
21
+ /** Agent stream status */
22
+ export interface AgentStreamState {
23
+ agentType: string;
24
+ agentName: string;
25
+ extensionId: string;
26
+ status: 'idle' | 'streaming' | 'waiting_approval' | 'error' | 'disconnected' | 'panel_hidden' | 'not_monitored';
27
+ messages: AgentChatMessage[];
28
+ inputContent: string;
29
+ /** @deprecated Use controlValues['model'] — kept for backward compatibility */
30
+ model?: string;
31
+ /** @deprecated Use controlValues['mode'] — kept for backward compatibility */
32
+ mode?: string;
33
+ activeModal?: {
34
+ message: string;
35
+ buttons: string[];
36
+ };
37
+ /** Dynamic control current values (populated from readChat + provider controls schema) */
38
+ controlValues?: Record<string, string | number | boolean>;
39
+ }
40
+ /** Agent webview target info */
41
+ export interface AgentWebviewTarget {
42
+ targetId: string;
43
+ extensionId: string;
44
+ agentType: string;
45
+ url: string;
46
+ }
47
+ /** Agent stream adapter interface */
48
+ export interface IAgentStreamAdapter {
49
+ readonly agentType: string;
50
+ readonly agentName: string;
51
+ readonly extensionId: string;
52
+ readonly extensionIdPattern: RegExp;
53
+ readChat(evaluate: AgentEvaluateFn): Promise<AgentStreamState>;
54
+ sendMessage(evaluate: AgentEvaluateFn, text: string): Promise<void>;
55
+ resolveAction(evaluate: AgentEvaluateFn, action: string, button?: string): Promise<boolean>;
56
+ newSession(evaluate: AgentEvaluateFn): Promise<void>;
57
+ listChats?(evaluate: AgentEvaluateFn): Promise<AgentChatListItem[]>;
58
+ switchSession?(evaluate: AgentEvaluateFn, sessionId: string): Promise<boolean>;
59
+ focusEditor?(evaluate: AgentEvaluateFn): Promise<void>;
60
+ setProvider?(provider: any): void;
61
+ }
62
+ export type AgentEvaluateFn = (expression: string, timeoutMs?: number) => Promise<unknown>;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Daemon Lifecycle — Shared init + shutdown logic
3
+ *
4
+ * initDaemonComponents(): Creates all core daemon components in correct order.
5
+ * shutdownDaemonComponents(): Graceful shutdown of all components.
6
+ *
7
+ * Transport-specific setup (ServerConnection, P2P, HTTP/WS) remains in each daemon.
8
+ */
9
+ import { DaemonCdpManager } from '../cdp/manager.js';
10
+ import { DaemonCdpInitializer } from '../cdp/initializer.js';
11
+ import { DaemonCommandHandler } from '../commands/handler.js';
12
+ import { DaemonCommandRouter } from '../commands/router.js';
13
+ import { DaemonCliManager, type CliTransportFactoryParams, type HostedCliRuntimeDescriptor } from '../commands/cli-manager.js';
14
+ import { DaemonAgentStreamManager } from '../agent-stream/manager.js';
15
+ import { AgentStreamPoller } from '../agent-stream/poller.js';
16
+ import { ProviderLoader } from '../providers/provider-loader.js';
17
+ import { ProviderInstanceManager } from '../providers/provider-instance-manager.js';
18
+ import { DevServer } from '../daemon/dev-server.js';
19
+ import { SessionRegistry } from '../sessions/registry.js';
20
+ import type { PtyTransportFactory } from '../cli-adapters/pty-transport.js';
21
+ export interface DaemonInitConfig {
22
+ /** ProviderLoader log function */
23
+ providerLogFn?: (msg: string) => void;
24
+ /** CLI Manager deps (transport-specific) */
25
+ cliManagerDeps: {
26
+ getServerConn: () => any;
27
+ getP2p: () => any;
28
+ onStatusChange: () => void;
29
+ removeAgentTracking: (key: string) => void;
30
+ createPtyTransportFactory?: (params: CliTransportFactoryParams) => PtyTransportFactory | null;
31
+ listHostedCliRuntimes?: () => Promise<HostedCliRuntimeDescriptor[]>;
32
+ };
33
+ /** CDP config */
34
+ enabledIdes?: string[];
35
+ /** Router transport-specific callbacks */
36
+ onStatusChange?: () => void;
37
+ onPostChatCommand?: () => void;
38
+ getCdpLogFn?: (ideType: string) => (msg: string) => void;
39
+ /** Additional callback after CDP manager created (transport-specific extras) */
40
+ onCdpManagerSetup?: (ideType: string, manager: DaemonCdpManager, managerKey: string) => void | Promise<void>;
41
+ /** Poller callback (transport-specific) */
42
+ onStreamsUpdated?: (ideType: string, streams: any[]) => void;
43
+ /** Instance ticking interval (ms), default 5000 */
44
+ tickIntervalMs?: number;
45
+ /** CDP scan interval (ms), default 30000 */
46
+ cdpScanIntervalMs?: number;
47
+ }
48
+ export interface DaemonComponents {
49
+ providerLoader: ProviderLoader;
50
+ instanceManager: ProviderInstanceManager;
51
+ cliManager: DaemonCliManager;
52
+ commandHandler: DaemonCommandHandler;
53
+ agentStreamManager: DaemonAgentStreamManager;
54
+ router: DaemonCommandRouter;
55
+ poller: AgentStreamPoller;
56
+ cdpInitializer: DaemonCdpInitializer;
57
+ cdpManagers: Map<string, DaemonCdpManager>;
58
+ sessionRegistry: SessionRegistry;
59
+ detectedIdes: {
60
+ value: any[];
61
+ };
62
+ }
63
+ export interface DaemonDevSupportOptions {
64
+ components: DaemonComponents;
65
+ logFn?: (msg: string) => void;
66
+ }
67
+ /**
68
+ * Initialize all daemon core components.
69
+ *
70
+ * Order:
71
+ * 1. Global log interceptor
72
+ * 2. ProviderLoader
73
+ * 3. InstanceManager + CliManager
74
+ * 4. Detect IDEs
75
+ * 5. CdpInitializer → connectAll + periodic scan + discovery
76
+ * 6. CommandHandler + AgentStreamManager
77
+ * 7. Router + Poller
78
+ * 8. Start instance ticking
79
+ */
80
+ export declare function initDaemonComponents(config: DaemonInitConfig): Promise<DaemonComponents>;
81
+ /**
82
+ * Start shared dev-only helpers:
83
+ * - DevServer on port 19280
84
+ * - Provider hot-reload watcher
85
+ */
86
+ export declare function startDaemonDevSupport(options: DaemonDevSupportOptions): Promise<DevServer>;
87
+ /**
88
+ * Graceful shutdown of all daemon components.
89
+ *
90
+ * Order:
91
+ * 1. Stop timers (poller, cdpInitializer)
92
+ * 2. Dispose agent stream
93
+ * 3. Shutdown CLIs
94
+ * 4. Dispose instances
95
+ * 5. Disconnect CDPs
96
+ */
97
+ export declare function shutdownDaemonComponents(components: DaemonComponents): Promise<void>;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * CDP DOM Analysis Tools — DOM dump, query, debug
3
+ *
4
+ * Separated from daemon-commands.ts.
5
+ * Tools for analyzing DOM structure when developing new IDE scripts.
6
+ */
7
+ import type { DaemonCdpManager } from './manager.js';
8
+ import type { CommandResult } from '../commands/handler.js';
9
+ type CdpGetter = (ideType?: string) => DaemonCdpManager | null;
10
+ /**
11
+ * CDP DOM analysis handler
12
+ *
13
+ * Uses getCdp from DaemonCommandHandler.
14
+ */
15
+ export declare class CdpDomHandlers {
16
+ private getCdp;
17
+ constructor(getCdp: CdpGetter);
18
+ /**
19
+ * CDP DOM Dump — IDE's DOM tree retrieve
20
+ *
21
+ * args:
22
+ * selector?: string — CSS selector to dump specific area only (default: All)
23
+ * depth?: number — Dump depth limit (default: 10)
24
+ * attrs?: boolean — Whether to include properties (default: true)
25
+ * maxLength?: number — Max character count (default: 200000)
26
+ * format?: 'html' | 'tree' | 'summary' — Output format (default: 'html')
27
+ * sessionId?: string — Agent webview session ID (if provided, match webview DOM)
28
+ */
29
+ handleDomDump(args: any): Promise<CommandResult>;
30
+ /**
31
+ * CDP DOM Query — CSS Test selector
32
+ * Check how many elements match selector and what elements they are
33
+ *
34
+ * args:
35
+ * selector: string — CSS selector
36
+ * limit?: number — Max element count to return (default: 20)
37
+ * content?: boolean — Whether to include text content (default: true)
38
+ * sessionId?: string — agent webview session ID
39
+ */
40
+ handleDomQuery(args: any): Promise<CommandResult>;
41
+ /**
42
+ * CDP DOM Debug — IDE AI panel specialized analysis
43
+ * Collect all essential info at once when supporting new IDE
44
+ *
45
+ * args:
46
+ * ideType?: string — IDE type hint
47
+ * sessionId?: string — agent webview session ID
48
+ */
49
+ handleDomDebug(args: any): Promise<CommandResult>;
50
+ }
51
+ export {};
@@ -0,0 +1,50 @@
1
+ /**
2
+ * DaemonCdpInitializer — Unified CDP initialization + periodic scanning
3
+ *
4
+ * Unified CDP initialization + periodic scanning.
5
+ *
6
+ * Features:
7
+ * 1. Initial connection: connectAll() — multi-window aware
8
+ * 2. Periodic scan: startPeriodicScan() — auto-detect newly opened IDEs
9
+ * 3. Discovery: startDiscovery() — periodic agent webview discovery
10
+ */
11
+ import { DaemonCdpManager } from './manager.js';
12
+ import type { ProviderLoader } from '../providers/provider-loader.js';
13
+ export interface CdpInitializerConfig {
14
+ providerLoader: ProviderLoader;
15
+ cdpManagers: Map<string, DaemonCdpManager>;
16
+ /** Filter: only connect these IDEs (empty/undefined = all) */
17
+ enabledIdes?: string[];
18
+ /** Callback when a new CDP manager is connected */
19
+ onConnected?: (ideType: string, manager: DaemonCdpManager, managerKey: string) => void | Promise<void>;
20
+ /** Callback when a stale/disconnected CDP manager is removed */
21
+ onDisconnected?: (ideType: string, manager: DaemonCdpManager, managerKey: string, reason: 'ide_closed' | 'target_closed' | 'target_rekeyed') => void | Promise<void>;
22
+ }
23
+ export declare class DaemonCdpInitializer {
24
+ private config;
25
+ private scanTimer;
26
+ private discoveryTimer;
27
+ constructor(config: CdpInitializerConfig);
28
+ /**
29
+ * Connect to all detected IDEs.
30
+ * Multi-window aware: creates separate CdpManager per workbench page.
31
+ */
32
+ connectAll(detectedIdes: any[]): Promise<void>;
33
+ /**
34
+ * Connect to a single IDE port.
35
+ * Tries multi-window first (listAllTargets), falls back to direct connect.
36
+ */
37
+ private connectIdePort;
38
+ private pruneStaleManagers;
39
+ /**
40
+ * Start periodic scanning for newly opened IDEs.
41
+ * Idempotent — ignored if already started.
42
+ */
43
+ startPeriodicScan(intervalMs?: number): void;
44
+ /**
45
+ * Start periodic agent webview discovery.
46
+ */
47
+ startDiscovery(intervalMs?: number): void;
48
+ /** Stop all timers */
49
+ stop(): void;
50
+ }
@@ -0,0 +1,145 @@
1
+ /**
2
+ * CDP Manager for ADHDev Daemon
3
+ *
4
+ * Ported cdp.ts from Extension for Daemon use.
5
+ * vscode dependencies removed — works in pure Node.js environment.
6
+ *
7
+ * Connects to IDE CDP port (9222, 9333 etc) to:
8
+ * - Execute JS via Runtime.evaluate
9
+ * - Agent webview iframe search & session connection
10
+ * - DOM query
11
+ */
12
+ import type { CdpTargetFilter } from '../providers/contracts.js';
13
+ interface CdpTarget {
14
+ id: string;
15
+ type: string;
16
+ title: string;
17
+ url: string;
18
+ webSocketDebuggerUrl: string;
19
+ }
20
+ export interface AgentWebviewTarget {
21
+ targetId: string;
22
+ extensionId: string;
23
+ agentType: string;
24
+ url: string;
25
+ }
26
+ export declare class DaemonCdpManager {
27
+ private ws;
28
+ private browserWs;
29
+ private browserMsgId;
30
+ private browserPending;
31
+ private msgId;
32
+ private pending;
33
+ private port;
34
+ private _connected;
35
+ private _browserConnected;
36
+ private targetUrl;
37
+ private reconnectTimer;
38
+ private contexts;
39
+ private connectPromise;
40
+ private failureCount;
41
+ private readonly MAX_FAILURES;
42
+ private agentSessions;
43
+ private logFn;
44
+ private extensionProviders;
45
+ private _lastDiscoverSig;
46
+ private _targetId;
47
+ private _pageTitle;
48
+ private _targetFilter;
49
+ private _lastDiscoveredTargets?;
50
+ constructor(port?: number, logFn?: (msg: string) => void, targetId?: string, targetFilter?: CdpTargetFilter);
51
+ /** Set target filter (can be updated after construction) */
52
+ setTargetFilter(filter: CdpTargetFilter): void;
53
+ /**
54
+ * Check if a page title should be excluded (non-main page).
55
+ * Uses provider-configured titleExcludes, falls back to default pattern.
56
+ */
57
+ private isNonMainTitle;
58
+ /**
59
+ * Check if a page URL matches the main window criteria.
60
+ * Uses provider-configured urlIncludes/urlExcludes.
61
+ */
62
+ private isMainPageUrl;
63
+ /** Connected page title (includes workspace name) */
64
+ get pageTitle(): string;
65
+ /** Connected target ID */
66
+ get targetId(): string | null;
67
+ /**
68
+ * Query all workbench pages on port (static)
69
+ * Returns multiple entries if multiple IDE windows are open on same port
70
+ */
71
+ static listAllTargets(port: number): Promise<CdpTarget[]>;
72
+ setPort(port: number): void;
73
+ getPort(): number;
74
+ private log;
75
+ connect(): Promise<boolean>;
76
+ private doConnect;
77
+ private findTargetOnPort;
78
+ private findTarget;
79
+ setExtensionProviders(providers: {
80
+ agentType: string;
81
+ extensionId: string;
82
+ extensionIdPattern: RegExp;
83
+ }[]): void;
84
+ private connectToTarget;
85
+ /** Browser-level CDP connection — needed for Target discovery */
86
+ private connectBrowserWs;
87
+ private getBrowserWsUrl;
88
+ private sendBrowser;
89
+ private scheduleReconnect;
90
+ disconnect(): void;
91
+ get isConnected(): boolean;
92
+ private sendInternal;
93
+ send(method: string, params?: Record<string, unknown>, timeoutMs?: number): Promise<any>;
94
+ sendCdpCommand(method: string, params?: Record<string, unknown>): Promise<any>;
95
+ evaluate(expression: string, timeoutMs?: number): Promise<unknown>;
96
+ querySelector(selector: string): Promise<string | null>;
97
+ /**
98
+ * Input text via CDP protocol then send Enter
99
+ * Used for editors where execCommand does not work (e.g. Lexical).
100
+ *
101
+ * 1. Find editor by selector, focus + click
102
+ * 2. Insert text via Input.insertText
103
+ * 3. Send Enter via Input.dispatchKeyEvent
104
+ */
105
+ typeAndSend(selector: string, text: string): Promise<boolean>;
106
+ /**
107
+ * Coordinate-based typeAndSend — for input fields inside webview iframe
108
+ * Receives coordinates directly instead of selector for click+input+Enter
109
+ */
110
+ typeAndSendAt(x: number, y: number, text: string): Promise<boolean>;
111
+ /**
112
+ * Evaluate JS from inside Webview iframe
113
+ * Kiro, PearAI etc Used for IDEs where chat UI is inside webview iframe.
114
+ *
115
+ * 1. Query Target.getTargets via browser WS → find vscode-webview iframes
116
+ * 2. Target.attachToTarget → session acquire
117
+ * 3. Page.getFrameTree → nested iframe find
118
+ * 4. Page.createIsolatedWorld → contextId acquire
119
+ * 5. Runtime.evaluate → result return
120
+ *
121
+ * @param expression JS expression to execute
122
+ * @param matchFn webview iframe URL match function (optional, all webview attempt)
123
+ * @returns evaluate result or null
124
+ */
125
+ evaluateInWebviewFrame(expression: string, matchFn?: (bodyPreview: string) => boolean): Promise<string | null>;
126
+ discoverAgentWebviews(): Promise<AgentWebviewTarget[]>;
127
+ attachToAgent(target: AgentWebviewTarget): Promise<string | null>;
128
+ evaluateInSession(sessionId: string, expression: string, timeoutMs?: number): Promise<unknown>;
129
+ /**
130
+ * Evaluate inside the child frame of an attached session.
131
+ * Extension webviews have a nested iframe structure:
132
+ * outer (vscode-webview://) → inner (extension React app)
133
+ * This method navigates into the inner frame using CDP Page.getFrameTree.
134
+ * Falls back to evaluateInSession if no child frame is found.
135
+ */
136
+ evaluateInSessionFrame(sessionId: string, expression: string, timeoutMs?: number): Promise<unknown>;
137
+ detachAgent(sessionId: string): Promise<void>;
138
+ detachAllAgents(): Promise<void>;
139
+ getAgentSessions(): Map<string, AgentWebviewTarget>;
140
+ private getCurrentPageWebviewUrls;
141
+ captureScreenshot(opts?: {
142
+ quality?: number;
143
+ }): Promise<Buffer | null>;
144
+ }
145
+ export {};
@@ -0,0 +1,58 @@
1
+ /**
2
+ * DaemonCdpScanner — Periodic CDP port scanning & auto-connect
3
+ *
4
+ * Periodic CDP port scanning and auto-connect for IDE discovery.
5
+ * Provides a unified approach to:
6
+ * 1. Initial CDP port discovery
7
+ * 2. Periodic scanning for newly launched IDEs
8
+ * 3. Multi-window support (multiple pages on same port)
9
+ */
10
+ import { DaemonCdpManager } from './manager.js';
11
+ import { type CdpSetupContext } from './setup.js';
12
+ export interface CdpScannerOptions {
13
+ /** Context for setup operations */
14
+ ctx: CdpSetupContext;
15
+ /** Log function for per-IDE CDP logs */
16
+ logFn?: (ideType: string) => (msg: string) => void;
17
+ /** Whether to support multi-window (multiple pages per port) */
18
+ multiWindow?: boolean;
19
+ /** Scan interval in ms (default: 30000) */
20
+ scanIntervalMs?: number;
21
+ /** Callback when a new CDP connection is established */
22
+ onConnected?: (ideType: string, managerKey: string, manager: DaemonCdpManager) => void;
23
+ }
24
+ export declare class DaemonCdpScanner {
25
+ private ctx;
26
+ private opts;
27
+ private scanTimer;
28
+ private discoveryTimer;
29
+ constructor(opts: CdpScannerOptions);
30
+ /**
31
+ * Initial CDP discovery — connect to all available IDEs.
32
+ * Supports both single-window and multi-window modes.
33
+ */
34
+ initialScan(enabledIdes?: string[]): Promise<void>;
35
+ /**
36
+ * Start periodic scanning for newly launched IDEs.
37
+ */
38
+ startPeriodicScan(): void;
39
+ /**
40
+ * Start periodic agent webview discovery on all connected CDPs.
41
+ */
42
+ startWebviewDiscovery(intervalMs?: number): void;
43
+ /**
44
+ * Stop all timers.
45
+ */
46
+ stop(): void;
47
+ private getLogFn;
48
+ /**
49
+ * Single-window connection (standalone mode).
50
+ * One CDP manager per IDE, first working port wins.
51
+ */
52
+ private connectSingleWindow;
53
+ /**
54
+ * Multi-window connection.
55
+ * Multiple CDP managers per IDE — one per workbench page.
56
+ */
57
+ private connectMultiWindow;
58
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * DaemonCdpSetup — Shared CDP initialization helpers
3
+ *
4
+ * Common CDP setup logic for consistent
5
+ * CDP → ProviderInstance registration.
6
+ */
7
+ import { DaemonCdpManager } from './manager.js';
8
+ import { ProviderLoader } from '../providers/provider-loader.js';
9
+ import { ProviderInstanceManager } from '../providers/provider-instance-manager.js';
10
+ import { IdeProviderInstance } from '../providers/ide-provider-instance.js';
11
+ import { SessionRegistry } from '../sessions/registry.js';
12
+ export interface CdpSetupContext {
13
+ providerLoader: ProviderLoader;
14
+ instanceManager: ProviderInstanceManager;
15
+ cdpManagers: Map<string, DaemonCdpManager>;
16
+ sessionRegistry: SessionRegistry;
17
+ /** Server connection (optional) */
18
+ serverConn?: any;
19
+ }
20
+ export interface SetupIdeInstanceOptions {
21
+ /** Provider-based IDE type (e.g., 'antigravity', 'cursor') */
22
+ ideType: string;
23
+ /** Connected CDP manager */
24
+ manager: DaemonCdpManager;
25
+ /** CDP manager key (for multi-window: 'antigravity_remote_vs', single: 'antigravity') */
26
+ managerKey?: string;
27
+ /** Provider settings override */
28
+ settings?: Record<string, any>;
29
+ }
30
+ /**
31
+ * Register extension providers on a CDP manager.
32
+ * Common pattern used during CDP init and periodic scans.
33
+ */
34
+ export declare function registerExtensionProviders(providerLoader: ProviderLoader, manager: DaemonCdpManager, ideType: string): void;
35
+ /**
36
+ * Setup a CDP-connected IDE as a ProviderInstance.
37
+ *
38
+ * Performs:
39
+ * 1. providerLoader.resolve() to get scripts
40
+ * 2. Create IdeProviderInstance
41
+ * 3. Register in InstanceManager
42
+ * 4. Register enabled extensions
43
+ * 5. Register runtime sessions (workspace + extension children)
44
+ *
45
+ * @returns The created IdeProviderInstance, or null if provider not found
46
+ */
47
+ export declare function setupIdeInstance(ctx: CdpSetupContext, opts: SetupIdeInstanceOptions): Promise<IdeProviderInstance | null>;
48
+ /**
49
+ * Create and connect a DaemonCdpManager for a given port.
50
+ *
51
+ * @returns Connected manager or null if connection failed
52
+ */
53
+ export declare function connectCdpManager(port: number, ideType: string, logFn: (msg: string) => void, providerLoader: ProviderLoader, targetId?: string): Promise<DaemonCdpManager | null>;
54
+ /**
55
+ * Probe a CDP port to check if it's listening.
56
+ * @returns true if CDP is available on this port
57
+ */
58
+ export declare function probeCdpPort(port: number, timeoutMs?: number): Promise<boolean>;