@adhdev/daemon-core 0.8.34 → 0.8.36

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 (109) hide show
  1. package/dist/boot/daemon-lifecycle.d.ts +4 -0
  2. package/dist/commands/router.d.ts +3 -0
  3. package/dist/config/config.d.ts +5 -0
  4. package/dist/index.d.ts +2 -2
  5. package/dist/index.js +585 -256
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +584 -256
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/shared-types.d.ts +286 -16
  10. package/dist/status/builders.d.ts +5 -1
  11. package/dist/status/normalize.d.ts +11 -1
  12. package/dist/status/normalize.js +36 -16
  13. package/dist/status/normalize.js.map +1 -1
  14. package/dist/status/normalize.mjs +35 -16
  15. package/dist/status/normalize.mjs.map +1 -1
  16. package/dist/status/reporter.d.ts +7 -0
  17. package/dist/status/snapshot.d.ts +5 -5
  18. package/dist/types.d.ts +1 -1
  19. package/node_modules/@adhdev/session-host-core/package.json +1 -1
  20. package/package.json +1 -1
  21. package/src/agent-stream/forward.d.ts +8 -0
  22. package/src/agent-stream/index.d.ts +6 -0
  23. package/src/agent-stream/manager.d.ts +60 -0
  24. package/src/agent-stream/poller.d.ts +41 -0
  25. package/src/agent-stream/provider-adapter.d.ts +36 -0
  26. package/src/agent-stream/types.d.ts +68 -0
  27. package/src/boot/daemon-lifecycle.d.ts +100 -0
  28. package/src/boot/daemon-lifecycle.ts +7 -0
  29. package/src/cdp/devtools.d.ts +51 -0
  30. package/src/cdp/initializer.d.ts +50 -0
  31. package/src/cdp/manager.d.ts +147 -0
  32. package/src/cdp/scanner.d.ts +58 -0
  33. package/src/cdp/setup.d.ts +58 -0
  34. package/src/cli-adapter-types.d.ts +57 -0
  35. package/src/cli-adapters/provider-cli-adapter.d.ts +177 -0
  36. package/src/cli-adapters/provider-cli-adapter.ts +115 -91
  37. package/src/cli-adapters/provider-cli-config.d.ts +30 -0
  38. package/src/cli-adapters/provider-cli-parse.d.ts +42 -0
  39. package/src/cli-adapters/provider-cli-runtime.d.ts +29 -0
  40. package/src/cli-adapters/provider-cli-shared.d.ts +158 -0
  41. package/src/cli-adapters/pty-transport.d.ts +48 -0
  42. package/src/cli-adapters/session-host-transport.d.ts +20 -0
  43. package/src/cli-adapters/spawn-env.d.ts +8 -0
  44. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +16 -0
  45. package/src/cli-adapters/terminal-backends/types.d.ts +18 -0
  46. package/src/cli-adapters/terminal-backends/xterm-backend.d.ts +17 -0
  47. package/src/cli-adapters/terminal-screen.d.ts +33 -0
  48. package/src/commands/cdp-commands.d.ts +15 -0
  49. package/src/commands/chat-commands.d.ts +15 -0
  50. package/src/commands/chat-commands.ts +192 -17
  51. package/src/commands/cli-manager.d.ts +94 -0
  52. package/src/commands/handler.d.ts +103 -0
  53. package/src/commands/router.d.ts +98 -0
  54. package/src/commands/router.ts +25 -0
  55. package/src/commands/stream-commands.d.ts +14 -0
  56. package/src/commands/stream-commands.ts +14 -10
  57. package/src/commands/upgrade-helper.d.ts +10 -0
  58. package/src/commands/workspace-commands.d.ts +11 -0
  59. package/src/config/chat-history.d.ts +99 -0
  60. package/src/config/config.d.ts +14 -0
  61. package/src/config/config.ts +8 -0
  62. package/src/config/recent-activity.d.ts +29 -0
  63. package/src/config/saved-sessions.d.ts +22 -0
  64. package/src/config/state-store.d.ts +32 -0
  65. package/src/config/workspaces.d.ts +0 -1
  66. package/src/daemon/dev-auto-implement.d.ts +43 -0
  67. package/src/daemon/dev-cdp-handlers.d.ts +22 -0
  68. package/src/daemon/dev-cli-debug.d.ts +106 -0
  69. package/src/daemon/dev-server-types.d.ts +43 -0
  70. package/src/daemon/dev-server.d.ts +140 -0
  71. package/src/daemon/scaffold-template.d.ts +32 -0
  72. package/src/daemon-core.d.ts +36 -0
  73. package/src/detection/cli-detector.d.ts +31 -0
  74. package/src/detection/ide-detector.d.ts +35 -0
  75. package/src/index.d.ts +83 -0
  76. package/src/index.ts +34 -1
  77. package/src/installer.d.ts +50 -0
  78. package/src/ipc-protocol.d.ts +111 -0
  79. package/src/launch.d.ts +46 -0
  80. package/src/logging/command-log.d.ts +31 -0
  81. package/src/logging/logger.d.ts +89 -0
  82. package/src/providers/acp-provider-instance.d.ts +102 -0
  83. package/src/providers/approval-utils.d.ts +7 -0
  84. package/src/providers/cli-provider-instance.d.ts +86 -0
  85. package/src/providers/contracts.d.ts +193 -1
  86. package/src/providers/control-effects.d.ts +4 -0
  87. package/src/providers/extension-provider-instance.d.ts +61 -0
  88. package/src/providers/ide-provider-instance.d.ts +70 -0
  89. package/src/providers/provider-instance-manager.d.ts +84 -0
  90. package/src/providers/provider-instance.d.ts +7 -1
  91. package/src/providers/provider-loader.d.ts +299 -0
  92. package/src/providers/status-monitor.d.ts +48 -0
  93. package/src/providers/version-archive.d.ts +52 -0
  94. package/src/session-host/runtime-support.d.ts +8 -0
  95. package/src/sessions/reconcile.d.ts +22 -0
  96. package/src/sessions/registry.d.ts +24 -0
  97. package/src/shared-types-extra.d.ts +29 -0
  98. package/src/shared-types.d.ts +204 -38
  99. package/src/shared-types.ts +319 -16
  100. package/src/status/builders.d.ts +33 -0
  101. package/src/status/builders.ts +110 -54
  102. package/src/status/normalize.ts +54 -19
  103. package/src/status/reporter.d.ts +69 -0
  104. package/src/status/reporter.ts +104 -26
  105. package/src/status/snapshot.d.ts +58 -0
  106. package/src/status/snapshot.ts +79 -41
  107. package/src/system/host-memory.d.ts +19 -0
  108. package/src/types.d.ts +3 -7
  109. package/src/types.ts +1 -1
@@ -69,6 +69,192 @@ export interface AgentSessionStream {
69
69
  activeModal: { message: string; buttons: string[] } | null;
70
70
  }
71
71
 
72
+ export type ReadChatSyncMode = 'full' | 'append' | 'replace_tail' | 'noop';
73
+
74
+ export interface ReadChatCursor {
75
+ knownMessageCount?: number;
76
+ lastMessageSignature?: string;
77
+ tailLimit?: number;
78
+ }
79
+
80
+ export interface ReadChatSyncResult {
81
+ messages: ChatMessage[];
82
+ status: string;
83
+ title?: string;
84
+ activeModal?: { message: string; buttons: string[] } | null;
85
+ syncMode: ReadChatSyncMode;
86
+ replaceFrom: number;
87
+ totalMessages: number;
88
+ lastMessageSignature: string;
89
+ }
90
+
91
+ export interface SessionHostAttachedClient {
92
+ clientId: string;
93
+ type: string;
94
+ readOnly: boolean;
95
+ attachedAt: number;
96
+ lastSeenAt: number;
97
+ }
98
+
99
+ export interface SessionHostWriteOwner {
100
+ clientId: string;
101
+ ownerType: 'agent' | 'user';
102
+ acquiredAt: number;
103
+ }
104
+
105
+ export interface SessionHostRecord {
106
+ sessionId: string;
107
+ runtimeKey: string;
108
+ displayName: string;
109
+ workspaceLabel: string;
110
+ providerType: string;
111
+ workspace: string;
112
+ lifecycle: 'starting' | 'running' | 'stopping' | 'stopped' | 'failed' | 'interrupted';
113
+ writeOwner: SessionHostWriteOwner | null;
114
+ attachedClients: SessionHostAttachedClient[];
115
+ osPid?: number;
116
+ lastActivityAt: number;
117
+ createdAt: number;
118
+ startedAt?: number;
119
+ meta?: Record<string, unknown>;
120
+ }
121
+
122
+ export interface SessionHostLogEntry {
123
+ timestamp: number;
124
+ level: 'debug' | 'info' | 'warn' | 'error';
125
+ message: string;
126
+ sessionId?: string;
127
+ }
128
+
129
+ export interface SessionHostRequestTrace {
130
+ timestamp: number;
131
+ requestId: string;
132
+ type: string;
133
+ sessionId?: string;
134
+ clientId?: string;
135
+ success: boolean;
136
+ durationMs: number;
137
+ error?: string;
138
+ }
139
+
140
+ export interface SessionHostRuntimeTransition {
141
+ timestamp: number;
142
+ sessionId: string;
143
+ action: string;
144
+ lifecycle?: string;
145
+ detail?: string;
146
+ success?: boolean;
147
+ error?: string;
148
+ }
149
+
150
+ export interface SessionHostDiagnosticsSnapshot {
151
+ hostStartedAt: number;
152
+ endpoint: string;
153
+ runtimeCount: number;
154
+ sessions?: SessionHostRecord[];
155
+ recentLogs: SessionHostLogEntry[];
156
+ recentRequests: SessionHostRequestTrace[];
157
+ recentTransitions: SessionHostRuntimeTransition[];
158
+ }
159
+
160
+ export type TransportTopic = 'session.chat_tail' | 'machine.runtime' | 'session_host.diagnostics' | 'session.modal' | 'daemon.metadata';
161
+
162
+ export interface SessionChatTailSubscriptionParams extends ReadChatCursor {
163
+ targetSessionId: string;
164
+ historySessionId?: string;
165
+ }
166
+
167
+ export interface MachineRuntimeSubscriptionParams {
168
+ intervalMs?: number;
169
+ }
170
+
171
+ export interface SessionModalSubscriptionParams {
172
+ targetSessionId: string;
173
+ }
174
+
175
+ export interface DaemonMetadataSubscriptionParams {
176
+ includeSessions?: boolean;
177
+ }
178
+
179
+ export interface SessionHostDiagnosticsSubscriptionParams {
180
+ includeSessions?: boolean;
181
+ limit?: number;
182
+ intervalMs?: number;
183
+ }
184
+
185
+ export interface SessionChatTailUpdate extends ReadChatSyncResult {
186
+ topic: 'session.chat_tail';
187
+ key: string;
188
+ sessionId: string;
189
+ historySessionId?: string;
190
+ seq: number;
191
+ timestamp: number;
192
+ }
193
+
194
+ export interface MachineRuntimeUpdate {
195
+ topic: 'machine.runtime';
196
+ key: string;
197
+ machine: MachineInfo;
198
+ seq: number;
199
+ timestamp: number;
200
+ }
201
+
202
+ export interface SessionHostDiagnosticsUpdate {
203
+ topic: 'session_host.diagnostics';
204
+ key: string;
205
+ diagnostics: SessionHostDiagnosticsSnapshot;
206
+ seq: number;
207
+ timestamp: number;
208
+ }
209
+
210
+ export interface SessionModalUpdate {
211
+ topic: 'session.modal';
212
+ key: string;
213
+ sessionId: string;
214
+ status: string;
215
+ title?: string;
216
+ modalMessage?: string;
217
+ modalButtons?: string[];
218
+ seq: number;
219
+ timestamp: number;
220
+ }
221
+
222
+ export interface DaemonMetadataUpdate {
223
+ topic: 'daemon.metadata';
224
+ key: string;
225
+ daemonId: string;
226
+ status: StatusReportPayload;
227
+ userName?: string;
228
+ seq: number;
229
+ timestamp: number;
230
+ }
231
+
232
+ export interface TopicUpdateEnvelopeMap {
233
+ 'session.chat_tail': SessionChatTailUpdate;
234
+ 'machine.runtime': MachineRuntimeUpdate;
235
+ 'session_host.diagnostics': SessionHostDiagnosticsUpdate;
236
+ 'session.modal': SessionModalUpdate;
237
+ 'daemon.metadata': DaemonMetadataUpdate;
238
+ }
239
+
240
+ export type TopicUpdateEnvelope = TopicUpdateEnvelopeMap[TransportTopic];
241
+
242
+ export interface SubscribeRequestMap {
243
+ 'session.chat_tail': SessionChatTailSubscriptionParams;
244
+ 'machine.runtime': MachineRuntimeSubscriptionParams;
245
+ 'session_host.diagnostics': SessionHostDiagnosticsSubscriptionParams;
246
+ 'session.modal': SessionModalSubscriptionParams;
247
+ 'daemon.metadata': DaemonMetadataSubscriptionParams;
248
+ }
249
+
250
+ export type SubscribeRequest =
251
+ { [K in TransportTopic]: { type: 'subscribe'; topic: K; key: string; params: SubscribeRequestMap[K] } }[TransportTopic];
252
+
253
+ export type UnsubscribeRequest =
254
+ { [K in TransportTopic]: { type: 'unsubscribe'; topic: K; key: string } }[TransportTopic];
255
+
256
+ export type StandaloneWsStatusPayload = StatusReportPayload;
257
+
72
258
  export type SessionTransport = 'cdp-page' | 'cdp-webview' | 'pty' | 'acp';
73
259
 
74
260
  export type SessionKind = 'workspace' | 'agent';
@@ -93,13 +279,13 @@ export interface SessionEntry {
93
279
  id: string;
94
280
  parentId: string | null;
95
281
  providerType: string;
96
- providerName: string;
282
+ providerName?: string;
97
283
  providerSessionId?: string;
98
284
  kind: SessionKind;
99
285
  transport: SessionTransport;
100
286
  status: SessionStatus;
101
287
  title: string;
102
- workspace: string | null;
288
+ workspace?: string | null;
103
289
  runtimeKey?: string;
104
290
  runtimeDisplayName?: string;
105
291
  runtimeWorkspaceLabel?: string;
@@ -109,7 +295,7 @@ export interface SessionEntry {
109
295
  runtimeAttachedClients?: RuntimeAttachedClient[];
110
296
  resume?: ProviderResumeCapability;
111
297
  activeChat: _ActiveChatData | null;
112
- capabilities: SessionCapability[];
298
+ capabilities?: SessionCapability[];
113
299
  cdpConnected?: boolean;
114
300
  currentModel?: string;
115
301
  currentPlan?: string;
@@ -129,6 +315,26 @@ export interface SessionEntry {
129
315
  surfaceHidden?: boolean;
130
316
  }
131
317
 
318
+ /**
319
+ * Compact session metadata stored in UserSessionDO and reused by server-side
320
+ * status/convenience APIs. This intentionally excludes rich UI-only fields.
321
+ */
322
+ export interface CompactSessionEntry {
323
+ id: string;
324
+ parentId: string | null;
325
+ providerType: string;
326
+ providerName: string;
327
+ kind: SessionKind;
328
+ transport: SessionTransport;
329
+ status: SessionStatus;
330
+ title: string;
331
+ workspace: string | null;
332
+ cdpConnected?: boolean;
333
+ currentModel?: string;
334
+ currentPlan?: string;
335
+ currentAutoApprove?: string;
336
+ }
337
+
132
338
  /** Available provider information */
133
339
  export interface AvailableProviderInfo {
134
340
  type: string;
@@ -195,15 +401,15 @@ export interface ProviderControlSchema {
195
401
  export interface MachineInfo {
196
402
  hostname: string;
197
403
  platform: string;
198
- arch: string;
199
- cpus: number;
200
- totalMem: number;
201
- freeMem: number;
404
+ arch?: string;
405
+ cpus?: number;
406
+ totalMem?: number;
407
+ freeMem?: number;
202
408
  /** macOS: reclaimable-inclusive; prefer for UI used% */
203
409
  availableMem?: number;
204
- loadavg: number[];
205
- uptime: number;
206
- release: string;
410
+ loadavg?: number[];
411
+ uptime?: number;
412
+ release?: string;
207
413
  }
208
414
 
209
415
  /** Detected IDE on a machine */
@@ -231,24 +437,121 @@ export interface RecentLaunchEntry {
231
437
  lastLaunchedAt: number;
232
438
  }
233
439
 
440
+ /** Compact machine payload broadcast by UserSessionDO to cloud dashboards. */
441
+ export interface CompactDaemonEntry {
442
+ id: string;
443
+ type?: string;
444
+ machineId?: string;
445
+ platform?: string;
446
+ hostname?: string;
447
+ nickname?: string;
448
+ p2p?: StatusReportPayload['p2p'];
449
+ cdpConnected?: boolean;
450
+ timestamp?: number;
451
+ version?: string;
452
+ serverVersion?: string;
453
+ versionMismatch?: boolean;
454
+ terminalBackend?: TerminalBackendStatus;
455
+ detectedIdes?: DetectedIdeInfo[];
456
+ availableProviders?: AvailableProviderInfo[];
457
+ sessions?: CompactSessionEntry[];
458
+ }
459
+
460
+ /** Minimal daemon list payload returned by the cloud server REST API. */
461
+ export interface CloudDaemonSummaryEntry {
462
+ id: string;
463
+ type?: string;
464
+ machineId?: string;
465
+ platform?: string;
466
+ hostname?: string;
467
+ nickname?: string;
468
+ p2p?: StatusReportPayload['p2p'];
469
+ cdpConnected?: boolean;
470
+ timestamp?: number;
471
+ version?: string;
472
+ serverVersion?: string;
473
+ versionMismatch?: boolean;
474
+ terminalBackend?: TerminalBackendStatus;
475
+ }
476
+
477
+ /** Minimal daemon bootstrap payload used by dashboard WS to initiate P2P. */
478
+ export interface DashboardBootstrapDaemonEntry {
479
+ id: string;
480
+ p2p?: StatusReportPayload['p2p'];
481
+ timestamp?: number;
482
+ }
483
+
484
+ export type DaemonStatusEventName =
485
+ | 'agent:generating_started'
486
+ | 'agent:waiting_approval'
487
+ | 'agent:generating_completed'
488
+ | 'agent:stopped'
489
+ | 'monitor:long_generating';
490
+
491
+ /** Minimal daemon-originated event payload relayed through the server. */
492
+ export interface DaemonStatusEventPayload {
493
+ event: DaemonStatusEventName;
494
+ timestamp: number;
495
+ targetSessionId?: string;
496
+ providerType?: string;
497
+ duration?: number;
498
+ elapsedSec?: number;
499
+ modalMessage?: string;
500
+ modalButtons?: string[];
501
+ }
502
+
503
+ export type DashboardStatusEventName =
504
+ | DaemonStatusEventName
505
+ | 'daemon:disconnect'
506
+ | 'team:session_viewed'
507
+ | 'team:view_request'
508
+ | 'team:view_request_approved'
509
+ | 'team:view_request_rejected';
510
+
511
+ /** Sanitized event payload delivered to dashboard clients. */
512
+ export interface DashboardStatusEventPayload {
513
+ event: DashboardStatusEventName;
514
+ timestamp: number;
515
+ daemonId?: string;
516
+ providerType?: string;
517
+ targetSessionId?: string;
518
+ duration?: number;
519
+ elapsedSec?: number;
520
+ modalMessage?: string;
521
+ modalButtons?: string[];
522
+ requestId?: string;
523
+ requesterName?: string;
524
+ targetName?: string;
525
+ orgId?: string;
526
+ permission?: string;
527
+ shareUrl?: string;
528
+ shareToken?: string;
529
+ viewerName?: string;
530
+ }
531
+
532
+ /** Minimal daemon->cloud status payload used for routing, fallback, and server APIs. */
533
+ export interface CloudStatusReportPayload {
534
+ sessions: CompactSessionEntry[];
535
+ p2p?: StatusReportPayload['p2p'];
536
+ timestamp: number;
537
+ }
538
+
234
539
  // ─── Status Report Payload (daemon → server) ────────────────────────
235
540
  // Full payload shape sent via WebSocket status_report
236
541
 
237
542
  export interface StatusReportPayload {
238
543
  /** Unique daemon instance identifier */
239
544
  instanceId: string;
240
- /** Daemon version */
241
- version: string;
242
- /** Daemon mode flag */
243
- daemonMode: boolean;
545
+ /** Daemon version (metadata/full snapshots only) */
546
+ version?: string;
244
547
  /** Machine info */
245
548
  machine: MachineInfo;
246
549
  /** Machine nickname (user-set) */
247
550
  machineNickname?: string | null;
248
551
  /** Timestamp */
249
552
  timestamp: number;
250
- /** Detected IDEs on this machine */
251
- detectedIdes: DetectedIdeInfo[];
553
+ /** Detected IDEs on this machine (metadata snapshot only) */
554
+ detectedIdes?: DetectedIdeInfo[];
252
555
  /** P2P state */
253
556
  p2p?: { available: boolean; state: string; peers: number; screenshotActive?: boolean };
254
557
  /** Canonical daemon runtime sessions */
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Status Builders — shared conversion functions for ProviderState → ManagedEntry
3
+ *
4
+ * Used by:
5
+ * - daemon-standalone (StandaloneServer.getStatus)
6
+ * - DaemonStatusReporter
7
+ *
8
+ * Consolidates ProviderState→ManagedEntry mapping logic.
9
+ */
10
+ import type { DaemonCdpManager } from '../cdp/manager.js';
11
+ import type { SessionEntry } from '../shared-types.js';
12
+ import type { ProviderState } from '../providers/provider-instance.js';
13
+ /**
14
+ * Find a CDP manager by key, with prefix matching for multi-window support.
15
+ *
16
+ * Lookup order:
17
+ * 1. Exact match: cdpManagers.get(key)
18
+ * 2. Prefix match: key starts with `${ideType}_` (multi-window: "cursor_remote_vs")
19
+ * 3. null
20
+ *
21
+ * This replaces raw `cdpManagers.get(ideType)` calls that broke when
22
+ * multi-window keys like "cursor_remote_vs" were used.
23
+ */
24
+ export declare function findCdpManager(cdpManagers: Map<string, DaemonCdpManager>, key: string): DaemonCdpManager | null;
25
+ /**
26
+ * Check if any CDP manager matches the given key (exact or prefix).
27
+ */
28
+ export declare function hasCdpManager(cdpManagers: Map<string, DaemonCdpManager>, key: string): boolean;
29
+ /**
30
+ * Check if any CDP manager matching the key is connected.
31
+ */
32
+ export declare function isCdpConnected(cdpManagers: Map<string, DaemonCdpManager>, key: string): boolean;
33
+ export declare function buildSessionEntries(allStates: ProviderState[], cdpManagers: Map<string, DaemonCdpManager>): SessionEntry[];