@adhdev/daemon-core 0.8.57 → 0.8.59
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/dist/agent-stream/types.d.ts +3 -4
- package/dist/boot/daemon-lifecycle.d.ts +1 -0
- package/dist/commands/handler.d.ts +1 -0
- package/dist/commands/router.d.ts +1 -0
- package/dist/commands/stream-commands.d.ts +3 -0
- package/dist/config/chat-history.d.ts +3 -0
- package/dist/config/config.d.ts +3 -0
- package/dist/config/provider-source-config.d.ts +23 -0
- package/dist/config/recent-activity.d.ts +2 -1
- package/dist/config/saved-sessions.d.ts +2 -1
- package/dist/daemon/dev-server-types.d.ts +1 -0
- package/dist/daemon/dev-server.d.ts +4 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +876 -337
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +875 -337
- package/dist/index.mjs.map +1 -1
- package/dist/providers/acp-provider-instance.d.ts +8 -2
- package/dist/providers/cli-provider-instance.d.ts +10 -0
- package/dist/providers/contracts.d.ts +4 -2
- package/dist/providers/extension-provider-instance.d.ts +1 -2
- package/dist/providers/provider-instance.d.ts +3 -4
- package/dist/providers/provider-loader.d.ts +14 -1
- package/dist/providers/provider-patch-state.d.ts +23 -0
- package/dist/providers/summary-metadata.d.ts +22 -0
- package/dist/shared-types.d.ts +15 -9
- package/dist/status/snapshot.d.ts +16 -1
- package/node_modules/@adhdev/session-host-core/package.json +1 -1
- package/package.json +1 -1
- package/src/agent-stream/forward.ts +1 -2
- package/src/agent-stream/manager.ts +2 -1
- package/src/agent-stream/provider-adapter.ts +7 -3
- package/src/agent-stream/types.d.ts +3 -4
- package/src/agent-stream/types.ts +3 -4
- package/src/boot/daemon-lifecycle.ts +13 -3
- package/src/commands/cli-manager.ts +10 -5
- package/src/commands/handler.ts +3 -0
- package/src/commands/router.ts +160 -26
- package/src/commands/stream-commands.ts +60 -2
- package/src/config/chat-history.ts +39 -0
- package/src/config/config.d.ts +3 -0
- package/src/config/config.ts +19 -3
- package/src/config/provider-source-config.ts +42 -0
- package/src/config/recent-activity.d.ts +2 -1
- package/src/config/recent-activity.ts +12 -1
- package/src/config/saved-sessions.d.ts +2 -1
- package/src/config/saved-sessions.ts +12 -2
- package/src/daemon/dev-auto-implement.ts +1 -14
- package/src/daemon/dev-cli-debug.ts +0 -1
- package/src/daemon/dev-server-types.ts +1 -0
- package/src/daemon/dev-server.ts +46 -21
- package/src/daemon/scaffold-template.ts +8 -1
- package/src/index.d.ts +1 -1
- package/src/index.ts +4 -0
- package/src/providers/acp-provider-instance.d.ts +8 -2
- package/src/providers/acp-provider-instance.ts +80 -23
- package/src/providers/cli-provider-instance.ts +42 -22
- package/src/providers/contracts.d.ts +3 -2
- package/src/providers/contracts.ts +7 -4
- package/src/providers/control-effects.ts +3 -4
- package/src/providers/extension-provider-instance.d.ts +1 -2
- package/src/providers/extension-provider-instance.ts +26 -14
- package/src/providers/ide-provider-instance.ts +28 -15
- package/src/providers/provider-instance.d.ts +3 -4
- package/src/providers/provider-instance.ts +6 -7
- package/src/providers/provider-loader.d.ts +4 -1
- package/src/providers/provider-loader.ts +61 -23
- package/src/providers/provider-patch-state.ts +91 -0
- package/src/providers/provider-schema.ts +3 -0
- package/src/providers/summary-metadata.ts +118 -0
- package/src/shared-types.d.ts +15 -9
- package/src/shared-types.ts +17 -9
- package/src/status/builders.ts +18 -13
- package/src/status/reporter.ts +2 -4
- package/src/status/snapshot.ts +60 -2
|
@@ -35,8 +35,7 @@ export declare class AcpProviderInstance implements ProviderInstance {
|
|
|
35
35
|
private lastStatus;
|
|
36
36
|
private generatingStartedAt;
|
|
37
37
|
private agentCapabilities;
|
|
38
|
-
private
|
|
39
|
-
private currentMode;
|
|
38
|
+
private currentSelections;
|
|
40
39
|
private activeToolCalls;
|
|
41
40
|
private stopReason;
|
|
42
41
|
private partialContent;
|
|
@@ -62,6 +61,13 @@ export declare class AcpProviderInstance implements ProviderInstance {
|
|
|
62
61
|
getState(): AcpProviderState;
|
|
63
62
|
onEvent(event: string, data?: any): void;
|
|
64
63
|
getInstanceId(): string;
|
|
64
|
+
private resolveConfigOptionLabel;
|
|
65
|
+
private resolveModeLabel;
|
|
66
|
+
private getCurrentSelection;
|
|
67
|
+
private setCurrentSelection;
|
|
68
|
+
private getSelectionControlValues;
|
|
69
|
+
private resolveSelectionLabel;
|
|
70
|
+
private buildSelectionSummaryMetadata;
|
|
65
71
|
private parseConfigOptions;
|
|
66
72
|
private parseModes;
|
|
67
73
|
setConfigOption(category: string, value: string): Promise<void>;
|
|
@@ -9,6 +9,15 @@ import type { ProviderInstance, ProviderState, InstanceContext } from './provide
|
|
|
9
9
|
import { ProviderCliAdapter } from '../cli-adapters/provider-cli-adapter.js';
|
|
10
10
|
import type { PtyTransportFactory } from '../cli-adapters/pty-transport.js';
|
|
11
11
|
export declare function getForcedNewSessionScriptName(provider: ProviderModule | undefined, launchMode: 'new' | 'resume' | 'manual'): string | null;
|
|
12
|
+
export declare function waitForCliAdapterReady(adapter: {
|
|
13
|
+
isReady?: () => boolean;
|
|
14
|
+
getStatus?: () => {
|
|
15
|
+
status?: string;
|
|
16
|
+
};
|
|
17
|
+
}, options?: {
|
|
18
|
+
timeoutMs?: number;
|
|
19
|
+
pollMs?: number;
|
|
20
|
+
}): Promise<void>;
|
|
12
21
|
export declare class CliProviderInstance implements ProviderInstance {
|
|
13
22
|
private provider;
|
|
14
23
|
private workingDir;
|
|
@@ -26,6 +35,7 @@ export declare class CliProviderInstance implements ProviderInstance {
|
|
|
26
35
|
private generatingDebouncePending;
|
|
27
36
|
private lastApprovalEventAt;
|
|
28
37
|
private controlValues;
|
|
38
|
+
private summaryMetadata;
|
|
29
39
|
private appliedEffectKeys;
|
|
30
40
|
private historyWriter;
|
|
31
41
|
private runtimeMessages;
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* - Common across all categories (cli, ide, extension)
|
|
7
7
|
* - User custom providers use the same contracts
|
|
8
8
|
*/
|
|
9
|
+
import type { ProviderSummaryMetadata } from '../shared-types.js';
|
|
9
10
|
export interface ReadChatResult {
|
|
10
11
|
messages: ChatMessage[];
|
|
11
12
|
status: AgentStatus;
|
|
@@ -21,10 +22,10 @@ export interface ReadChatResult {
|
|
|
21
22
|
isVisible?: boolean;
|
|
22
23
|
isWelcomeScreen?: boolean;
|
|
23
24
|
inputContent?: string;
|
|
24
|
-
model?: string;
|
|
25
|
-
autoApprove?: string;
|
|
26
25
|
/** Explicit dynamic control values returned by the provider */
|
|
27
26
|
controlValues?: Record<string, string | number | boolean>;
|
|
27
|
+
/** Flexible always-visible metadata for compact/live surfaces. */
|
|
28
|
+
summaryMetadata?: ProviderSummaryMetadata;
|
|
28
29
|
/** Provider-driven UI effects derived from chat state */
|
|
29
30
|
effects?: ProviderEffect[];
|
|
30
31
|
}
|
|
@@ -328,6 +329,7 @@ export interface ProviderModule {
|
|
|
328
329
|
/** How the CLI adapter decides when to submit typed input */
|
|
329
330
|
submitStrategy?: 'wait_for_echo' | 'immediate';
|
|
330
331
|
/** Keep this provider out of the upstream auto-updated bundle */
|
|
332
|
+
/** @deprecated Machine-level provider source policy now lives in config.providerSourceMode. Local overrides shadow upstream by root precedence and should not rely on provider-level disableUpstream. */
|
|
331
333
|
disableUpstream?: boolean;
|
|
332
334
|
approvalKeys?: Record<number, string>;
|
|
333
335
|
patterns?: {
|
|
@@ -18,9 +18,8 @@ export declare class ExtensionProviderInstance implements ProviderInstance {
|
|
|
18
18
|
private messages;
|
|
19
19
|
private prevMessageHashes;
|
|
20
20
|
private activeModal;
|
|
21
|
-
private currentModel;
|
|
22
|
-
private currentMode;
|
|
23
21
|
private controlValues;
|
|
22
|
+
private summaryMetadata;
|
|
24
23
|
private appliedEffectKeys;
|
|
25
24
|
private runtimeMessages;
|
|
26
25
|
private lastAgentStatus;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Each Instance manages its own status.
|
|
9
9
|
*/
|
|
10
10
|
import type { ProviderResumeCapability } from './contracts.js';
|
|
11
|
-
import type { AcpConfigOption, AcpMode, ProviderControlSchema } from '../shared-types.js';
|
|
11
|
+
import type { AcpConfigOption, AcpMode, ProviderControlSchema, ProviderSummaryMetadata } from '../shared-types.js';
|
|
12
12
|
import type { ChatMessage } from '../types.js';
|
|
13
13
|
export type ProviderStatus = 'idle' | 'generating' | 'waiting_approval' | 'error' | 'stopped' | 'starting';
|
|
14
14
|
export interface ProviderRuntimeWriteOwner {
|
|
@@ -54,8 +54,6 @@ interface ProviderStateBase {
|
|
|
54
54
|
/** Workspace — project path or name (all categories) */
|
|
55
55
|
workspace?: string | null;
|
|
56
56
|
/** Runtime info (real-time detection) */
|
|
57
|
-
currentModel?: string;
|
|
58
|
-
currentPlan?: string;
|
|
59
57
|
/** Error details (when status === 'error') */
|
|
60
58
|
errorMessage?: string;
|
|
61
59
|
errorReason?: ProviderErrorReason;
|
|
@@ -72,6 +70,8 @@ interface ProviderStateBase {
|
|
|
72
70
|
controlValues?: Record<string, string | number | boolean>;
|
|
73
71
|
/** Provider-declared controls schema (from provider.controls) */
|
|
74
72
|
providerControls?: ProviderControlSchema[];
|
|
73
|
+
/** Flexible always-visible metadata for compact/live surfaces. */
|
|
74
|
+
summaryMetadata?: ProviderSummaryMetadata;
|
|
75
75
|
}
|
|
76
76
|
/** IDE provider state */
|
|
77
77
|
export interface IdeProviderState extends ProviderStateBase {
|
|
@@ -79,7 +79,6 @@ export interface IdeProviderState extends ProviderStateBase {
|
|
|
79
79
|
cdpConnected: boolean;
|
|
80
80
|
/** IDE child Extension Instance status */
|
|
81
81
|
extensions: ProviderState[];
|
|
82
|
-
currentAutoApprove?: string;
|
|
83
82
|
}
|
|
84
83
|
/** CLI provider state */
|
|
85
84
|
export interface CliProviderState extends ProviderStateBase {
|
|
@@ -14,11 +14,16 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { VersionArchive } from './version-archive.js';
|
|
16
16
|
import type { ProviderModule, ProviderCategory, ProviderSettingSchema, ResolvedProvider } from './contracts.js';
|
|
17
|
+
import type { ProviderSourceMode } from '../config/config.js';
|
|
18
|
+
import type { ProviderSourceConfigSnapshot } from '../config/provider-source-config.js';
|
|
17
19
|
export declare class ProviderLoader {
|
|
18
20
|
private providers;
|
|
19
21
|
private providerAvailability;
|
|
22
|
+
private defaultProvidersDir;
|
|
23
|
+
private explicitProviderDir;
|
|
20
24
|
private userDir;
|
|
21
25
|
private upstreamDir;
|
|
26
|
+
private sourceMode;
|
|
22
27
|
private disableUpstream;
|
|
23
28
|
private watchers;
|
|
24
29
|
private logFn;
|
|
@@ -31,7 +36,9 @@ export declare class ProviderLoader {
|
|
|
31
36
|
constructor(options?: {
|
|
32
37
|
userDir?: string;
|
|
33
38
|
logFn?: (msg: string) => void;
|
|
34
|
-
/**
|
|
39
|
+
/** Explicit machine-level provider source policy */
|
|
40
|
+
sourceMode?: ProviderSourceMode;
|
|
41
|
+
/** Deprecated alias for sourceMode='no-upstream' */
|
|
35
42
|
disableUpstream?: boolean;
|
|
36
43
|
});
|
|
37
44
|
private log;
|
|
@@ -48,6 +55,12 @@ export declare class ProviderLoader {
|
|
|
48
55
|
* Highest-priority editable overrides come first.
|
|
49
56
|
*/
|
|
50
57
|
getProviderRoots(): string[];
|
|
58
|
+
getSourceConfig(): ProviderSourceConfigSnapshot;
|
|
59
|
+
applySourceConfig(options?: {
|
|
60
|
+
userDir?: string;
|
|
61
|
+
sourceMode?: ProviderSourceMode;
|
|
62
|
+
disableUpstream?: boolean;
|
|
63
|
+
}): ProviderSourceConfigSnapshot;
|
|
51
64
|
/**
|
|
52
65
|
* Canonical provider directory shape for a given root.
|
|
53
66
|
*/
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ProviderControlDef } from './contracts.js';
|
|
2
|
+
export type ProviderControlValue = string | number | boolean;
|
|
3
|
+
export type ProviderControlValueMap = Record<string, ProviderControlValue>;
|
|
4
|
+
export declare function mergeProviderPatchState(params: {
|
|
5
|
+
providerControls?: ProviderControlDef[];
|
|
6
|
+
data: any;
|
|
7
|
+
currentControlValues?: ProviderControlValueMap;
|
|
8
|
+
currentSummaryMetadata?: unknown;
|
|
9
|
+
mergeWithCurrent?: boolean;
|
|
10
|
+
}): {
|
|
11
|
+
controlValues: ProviderControlValueMap;
|
|
12
|
+
summaryMetadata: unknown;
|
|
13
|
+
};
|
|
14
|
+
export declare function normalizeProviderStateControlValues(controlValues: ProviderControlValueMap | undefined): ProviderControlValueMap | undefined;
|
|
15
|
+
export declare function resolveProviderStateSurface(params: {
|
|
16
|
+
controlValues?: ProviderControlValueMap;
|
|
17
|
+
summaryMetadata?: unknown;
|
|
18
|
+
modelLabel?: string | null;
|
|
19
|
+
modeLabel?: string | null;
|
|
20
|
+
}): {
|
|
21
|
+
controlValues: ProviderControlValueMap | undefined;
|
|
22
|
+
summaryMetadata: unknown;
|
|
23
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ProviderSummaryItem, ProviderSummaryMetadata } from '../shared-types.js';
|
|
2
|
+
export declare function normalizeProviderSummaryMetadata(summary: ProviderSummaryMetadata | null | undefined): ProviderSummaryMetadata | undefined;
|
|
3
|
+
export declare function buildProviderSummaryMetadata(items: Array<ProviderSummaryItem | null | undefined>): ProviderSummaryMetadata | undefined;
|
|
4
|
+
export declare function getProviderSummaryItem(summary: ProviderSummaryMetadata | null | undefined, id: string): ProviderSummaryItem | undefined;
|
|
5
|
+
export declare function getProviderSummaryValue(summary: ProviderSummaryMetadata | null | undefined, id: string, options?: {
|
|
6
|
+
preferShortValue?: boolean;
|
|
7
|
+
}): string | undefined;
|
|
8
|
+
export declare function buildLegacyModelModeSummaryMetadata(params: {
|
|
9
|
+
model?: string | null;
|
|
10
|
+
mode?: string | null;
|
|
11
|
+
modelLabel?: string | null;
|
|
12
|
+
modeLabel?: string | null;
|
|
13
|
+
}): ProviderSummaryMetadata | undefined;
|
|
14
|
+
export declare function resolveProviderStateSummaryMetadata(params: {
|
|
15
|
+
summaryMetadata?: ProviderSummaryMetadata | null;
|
|
16
|
+
controlValues?: Record<string, string | number | boolean> | null;
|
|
17
|
+
modelLabel?: string | null;
|
|
18
|
+
modeLabel?: string | null;
|
|
19
|
+
}): ProviderSummaryMetadata | undefined;
|
|
20
|
+
export declare function normalizePersistedSummaryMetadata(params: {
|
|
21
|
+
summaryMetadata?: ProviderSummaryMetadata | null;
|
|
22
|
+
}): ProviderSummaryMetadata | undefined;
|
package/dist/shared-types.d.ts
CHANGED
|
@@ -52,6 +52,17 @@ export interface ReadChatSyncResult {
|
|
|
52
52
|
totalMessages: number;
|
|
53
53
|
lastMessageSignature: string;
|
|
54
54
|
}
|
|
55
|
+
export interface ProviderSummaryItem {
|
|
56
|
+
id: string;
|
|
57
|
+
value: string;
|
|
58
|
+
label?: string;
|
|
59
|
+
shortValue?: string;
|
|
60
|
+
icon?: string;
|
|
61
|
+
order?: number;
|
|
62
|
+
}
|
|
63
|
+
export interface ProviderSummaryMetadata {
|
|
64
|
+
items: ProviderSummaryItem[];
|
|
65
|
+
}
|
|
55
66
|
export interface SessionHostAttachedClient {
|
|
56
67
|
clientId: string;
|
|
57
68
|
type: string;
|
|
@@ -239,15 +250,12 @@ export interface SessionEntry {
|
|
|
239
250
|
activeChat: _ActiveChatData | null;
|
|
240
251
|
capabilities?: SessionCapability[];
|
|
241
252
|
cdpConnected?: boolean;
|
|
242
|
-
currentModel?: string;
|
|
243
|
-
currentPlan?: string;
|
|
244
|
-
currentAutoApprove?: string;
|
|
245
|
-
acpConfigOptions?: AcpConfigOption[];
|
|
246
|
-
acpModes?: AcpMode[];
|
|
247
253
|
/** Dynamic control current values (generic key-value) */
|
|
248
254
|
controlValues?: Record<string, string | number | boolean>;
|
|
249
255
|
/** Provider-declared controls schema (transmitted once, cached by frontend) */
|
|
250
256
|
providerControls?: ProviderControlSchema[];
|
|
257
|
+
/** Flexible always-visible metadata for compact/live surfaces. */
|
|
258
|
+
summaryMetadata?: ProviderSummaryMetadata;
|
|
251
259
|
errorMessage?: string;
|
|
252
260
|
errorReason?: _ProviderErrorReason;
|
|
253
261
|
lastMessagePreview?: string;
|
|
@@ -275,9 +283,7 @@ export interface CompactSessionEntry {
|
|
|
275
283
|
title: string;
|
|
276
284
|
workspace: string | null;
|
|
277
285
|
cdpConnected?: boolean;
|
|
278
|
-
|
|
279
|
-
currentPlan?: string;
|
|
280
|
-
currentAutoApprove?: string;
|
|
286
|
+
summaryMetadata?: ProviderSummaryMetadata;
|
|
281
287
|
}
|
|
282
288
|
export type VersionUpdateReason = 'force_update_below' | 'major_minor_mismatch' | 'patch_mismatch' | 'daemon_ahead';
|
|
283
289
|
/** Available provider information */
|
|
@@ -384,7 +390,7 @@ export interface RecentLaunchEntry {
|
|
|
384
390
|
providerSessionId?: string;
|
|
385
391
|
title?: string;
|
|
386
392
|
workspace?: string | null;
|
|
387
|
-
|
|
393
|
+
summaryMetadata?: ProviderSummaryMetadata;
|
|
388
394
|
lastLaunchedAt: number;
|
|
389
395
|
}
|
|
390
396
|
/** Compact machine payload broadcast by UserSessionDO to cloud dashboards. */
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import type { DaemonCdpManager } from '../cdp/manager.js';
|
|
9
9
|
import { type SessionEntryProfile } from './builders.js';
|
|
10
10
|
import type { ProviderState } from '../providers/provider-instance.js';
|
|
11
|
-
import type { MachineInfo, StatusReportPayload } from '../shared-types.js';
|
|
11
|
+
import type { MachineInfo, RecentSessionBucket, StatusReportPayload } from '../shared-types.js';
|
|
12
12
|
export interface StatusSnapshotOptions {
|
|
13
13
|
allStates: ProviderState[];
|
|
14
14
|
cdpManagers: Map<string, DaemonCdpManager>;
|
|
@@ -43,6 +43,21 @@ export interface StatusSnapshotOptions {
|
|
|
43
43
|
profile?: SessionEntryProfile;
|
|
44
44
|
}
|
|
45
45
|
export type StatusSnapshot = StatusReportPayload;
|
|
46
|
+
export interface RecentReadDebugSnapshot {
|
|
47
|
+
sessionId: string;
|
|
48
|
+
providerType: string;
|
|
49
|
+
status: string;
|
|
50
|
+
inboxBucket: RecentSessionBucket;
|
|
51
|
+
unread: boolean;
|
|
52
|
+
lastSeenAt: number;
|
|
53
|
+
completionMarker: string;
|
|
54
|
+
seenCompletionMarker: string;
|
|
55
|
+
lastUpdated: number;
|
|
56
|
+
lastUsedAt: number;
|
|
57
|
+
lastRole: string;
|
|
58
|
+
messageUpdatedAt: number;
|
|
59
|
+
}
|
|
60
|
+
export declare function shouldEmitRecentReadDebugLog(cache: Map<string, string>, snapshot: RecentReadDebugSnapshot): boolean;
|
|
46
61
|
export declare function buildMachineInfo(profile?: 'full' | 'live' | 'metadata'): MachineInfo;
|
|
47
62
|
export declare function getSessionCompletionMarker(session: {
|
|
48
63
|
activeChat?: {
|
package/package.json
CHANGED
|
@@ -30,9 +30,8 @@ export function forwardAgentStreamsToIdeInstance(
|
|
|
30
30
|
messages: stream.messages || [],
|
|
31
31
|
status: stream.status || 'idle',
|
|
32
32
|
activeModal: stream.activeModal || null,
|
|
33
|
-
model: stream.model || undefined,
|
|
34
|
-
mode: stream.mode || undefined,
|
|
35
33
|
controlValues: stream.controlValues || undefined,
|
|
34
|
+
summaryMetadata: stream.summaryMetadata || undefined,
|
|
36
35
|
effects: stream.effects || undefined,
|
|
37
36
|
sessionId: stream.sessionId || stream.instanceId || undefined,
|
|
38
37
|
title: stream.title || stream.agentName || undefined,
|
|
@@ -201,7 +201,8 @@ export class DaemonAgentStreamManager {
|
|
|
201
201
|
cdp.evaluateInSessionFrame(agent.cdpSessionId, expr, timeout);
|
|
202
202
|
const state = await agent.adapter.readChat(evaluate);
|
|
203
203
|
const stateError = this.getStateError(state);
|
|
204
|
-
|
|
204
|
+
const selectedModelValue = typeof state.controlValues?.model === 'string' ? state.controlValues.model : '';
|
|
205
|
+
LOG.debug('AgentStream', `[AgentStream] readChat(${type}) result: status=${state.status} msgs=${state.messages?.length || 0} model=${selectedModelValue}${state.status === 'error' ? ' error=' + JSON.stringify(stateError) : ''}`);
|
|
205
206
|
if (state.status === 'error' && this.isRecoverableSessionError(stateError)) {
|
|
206
207
|
throw new Error(stateError);
|
|
207
208
|
}
|
|
@@ -13,6 +13,7 @@ import type {
|
|
|
13
13
|
} from './types.js';
|
|
14
14
|
import type { ProviderModule, ProviderScripts } from '../providers/contracts.js';
|
|
15
15
|
import { extractProviderControlValues, normalizeProviderEffects } from '../providers/control-effects.js';
|
|
16
|
+
import { resolveProviderStateSurface } from '../providers/provider-patch-state.js';
|
|
16
17
|
|
|
17
18
|
export class ProviderStreamAdapter implements IAgentStreamAdapter {
|
|
18
19
|
readonly agentType: string;
|
|
@@ -154,15 +155,18 @@ export class ProviderStreamAdapter implements IAgentStreamAdapter {
|
|
|
154
155
|
status: data.status || 'idle',
|
|
155
156
|
messages: data.messages || [],
|
|
156
157
|
inputContent: data.inputContent || '',
|
|
157
|
-
model: data.model,
|
|
158
|
-
mode: data.mode,
|
|
159
158
|
activeModal: data.activeModal,
|
|
160
159
|
};
|
|
161
160
|
if (typeof data.title === 'string' && data.title.trim()) {
|
|
162
161
|
state.title = data.title.trim();
|
|
163
162
|
}
|
|
164
163
|
const controlValues = extractProviderControlValues(this.provider.controls, data);
|
|
165
|
-
|
|
164
|
+
const surface = resolveProviderStateSurface({
|
|
165
|
+
controlValues,
|
|
166
|
+
summaryMetadata: data.summaryMetadata,
|
|
167
|
+
});
|
|
168
|
+
if (surface.controlValues) state.controlValues = surface.controlValues;
|
|
169
|
+
if (surface.summaryMetadata) state.summaryMetadata = surface.summaryMetadata as any;
|
|
166
170
|
const effects = normalizeProviderEffects(data);
|
|
167
171
|
if (effects.length > 0) state.effects = effects;
|
|
168
172
|
if (state.messages.length > 0) {
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* No vscode dependency — can be used as-is.
|
|
6
6
|
*/
|
|
7
7
|
import type { ProviderEffect } from '../providers/contracts.js';
|
|
8
|
+
import type { ProviderSummaryMetadata } from '../shared-types.js';
|
|
8
9
|
/** Agent chat message */
|
|
9
10
|
export interface AgentChatMessage {
|
|
10
11
|
role: 'user' | 'assistant' | 'system';
|
|
@@ -28,10 +29,6 @@ export interface AgentStreamState {
|
|
|
28
29
|
messages: AgentChatMessage[];
|
|
29
30
|
inputContent: string;
|
|
30
31
|
title?: string;
|
|
31
|
-
/** @deprecated Use controlValues['model'] — kept for backward compatibility */
|
|
32
|
-
model?: string;
|
|
33
|
-
/** @deprecated Use controlValues['mode'] — kept for backward compatibility */
|
|
34
|
-
mode?: string;
|
|
35
32
|
activeModal?: {
|
|
36
33
|
message: string;
|
|
37
34
|
buttons: string[];
|
|
@@ -40,6 +37,8 @@ export interface AgentStreamState {
|
|
|
40
37
|
_error?: string;
|
|
41
38
|
/** Dynamic control current values (populated from readChat + provider controls schema) */
|
|
42
39
|
controlValues?: Record<string, string | number | boolean>;
|
|
40
|
+
/** Flexible compact/live summary metadata from readChat */
|
|
41
|
+
summaryMetadata?: ProviderSummaryMetadata;
|
|
43
42
|
/** Provider-driven UI effects from readChat */
|
|
44
43
|
effects?: ProviderEffect[];
|
|
45
44
|
}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import type { ProviderEffect } from '../providers/contracts.js';
|
|
9
|
+
import type { ProviderSummaryMetadata } from '../shared-types.js';
|
|
9
10
|
|
|
10
11
|
/** Agent chat message */
|
|
11
12
|
export interface AgentChatMessage {
|
|
@@ -32,15 +33,13 @@ export interface AgentStreamState {
|
|
|
32
33
|
messages: AgentChatMessage[];
|
|
33
34
|
inputContent: string;
|
|
34
35
|
title?: string;
|
|
35
|
-
/** @deprecated Use controlValues['model'] — kept for backward compatibility */
|
|
36
|
-
model?: string;
|
|
37
|
-
/** @deprecated Use controlValues['mode'] — kept for backward compatibility */
|
|
38
|
-
mode?: string;
|
|
39
36
|
activeModal?: { message: string; buttons: string[] };
|
|
40
37
|
error?: string;
|
|
41
38
|
_error?: string;
|
|
42
39
|
/** Dynamic control current values (populated from readChat + provider controls schema) */
|
|
43
40
|
controlValues?: Record<string, string | number | boolean>;
|
|
41
|
+
/** Flexible compact/live summary metadata from readChat */
|
|
42
|
+
summaryMetadata?: ProviderSummaryMetadata;
|
|
44
43
|
/** Provider-driven UI effects from readChat */
|
|
45
44
|
effects?: ProviderEffect[];
|
|
46
45
|
}
|
|
@@ -90,6 +90,7 @@ export interface DaemonComponents {
|
|
|
90
90
|
cdpManagers: Map<string, DaemonCdpManager>;
|
|
91
91
|
sessionRegistry: SessionRegistry;
|
|
92
92
|
detectedIdes: { value: IDEInfo[] };
|
|
93
|
+
refreshProviderAvailability: (providerType?: string) => Promise<void>;
|
|
93
94
|
}
|
|
94
95
|
|
|
95
96
|
export interface DaemonDevSupportOptions {
|
|
@@ -116,12 +117,13 @@ export async function initDaemonComponents(config: DaemonInitConfig): Promise<Da
|
|
|
116
117
|
// 1. Global log interceptor
|
|
117
118
|
installGlobalInterceptor();
|
|
118
119
|
|
|
119
|
-
// 2. ProviderLoader (
|
|
120
|
+
// 2. ProviderLoader (provider source mode from config.json)
|
|
120
121
|
const appConfig = loadConfig();
|
|
121
|
-
const
|
|
122
|
+
const providerSourceMode = appConfig.providerSourceMode || 'normal';
|
|
123
|
+
const disableUpstream = providerSourceMode === 'no-upstream';
|
|
122
124
|
const providerLoader = new ProviderLoader({
|
|
123
125
|
logFn: config.providerLogFn,
|
|
124
|
-
|
|
126
|
+
sourceMode: providerSourceMode,
|
|
125
127
|
userDir: appConfig.providerDir,
|
|
126
128
|
});
|
|
127
129
|
|
|
@@ -253,6 +255,10 @@ export async function initDaemonComponents(config: DaemonInitConfig): Promise<Da
|
|
|
253
255
|
await refreshProviderAvailability(providerType);
|
|
254
256
|
config.onStatusChange?.();
|
|
255
257
|
},
|
|
258
|
+
onProviderSourceConfigChanged: async () => {
|
|
259
|
+
await refreshProviderAvailability();
|
|
260
|
+
config.onStatusChange?.();
|
|
261
|
+
},
|
|
256
262
|
});
|
|
257
263
|
|
|
258
264
|
// 8. AgentStreamManager
|
|
@@ -312,6 +318,7 @@ export async function initDaemonComponents(config: DaemonInitConfig): Promise<Da
|
|
|
312
318
|
cdpManagers,
|
|
313
319
|
sessionRegistry,
|
|
314
320
|
detectedIdes: detectedIdesRef,
|
|
321
|
+
refreshProviderAvailability,
|
|
315
322
|
};
|
|
316
323
|
}
|
|
317
324
|
|
|
@@ -327,6 +334,9 @@ export async function startDaemonDevSupport(options: DaemonDevSupportOptions): P
|
|
|
327
334
|
instanceManager: options.components.instanceManager,
|
|
328
335
|
cliManager: options.components.cliManager,
|
|
329
336
|
logFn: options.logFn,
|
|
337
|
+
onProviderSourceConfigChanged: async () => {
|
|
338
|
+
await options.components.refreshProviderAvailability();
|
|
339
|
+
},
|
|
330
340
|
});
|
|
331
341
|
await devServer.start();
|
|
332
342
|
options.components.providerLoader.watch();
|
|
@@ -17,6 +17,7 @@ import { loadState, saveState } from '../config/state-store.js';
|
|
|
17
17
|
import { getWorkspaceState, resolveLaunchDirectory } from '../config/workspaces.js';
|
|
18
18
|
import { appendRecentActivity } from '../config/recent-activity.js';
|
|
19
19
|
import { upsertSavedProviderSession } from '../config/saved-sessions.js';
|
|
20
|
+
import { buildLegacyModelModeSummaryMetadata, normalizeProviderSummaryMetadata } from '../providers/summary-metadata.js';
|
|
20
21
|
import { CliProviderInstance } from '../providers/cli-provider-instance.js';
|
|
21
22
|
import { AcpProviderInstance } from '../providers/acp-provider-instance.js';
|
|
22
23
|
import type { ProviderInstanceManager } from '../providers/provider-instance-manager.js';
|
|
@@ -273,12 +274,16 @@ export class DaemonCliManager {
|
|
|
273
274
|
providerName: string;
|
|
274
275
|
providerSessionId?: string;
|
|
275
276
|
workspace?: string;
|
|
276
|
-
|
|
277
|
+
summaryMetadata?: unknown;
|
|
277
278
|
sessionId?: string;
|
|
278
279
|
title?: string;
|
|
279
280
|
}): void {
|
|
280
281
|
try {
|
|
281
|
-
|
|
282
|
+
const summaryMetadata = normalizeProviderSummaryMetadata(entry.summaryMetadata as any);
|
|
283
|
+
let nextState = appendRecentActivity(loadState(), {
|
|
284
|
+
...entry,
|
|
285
|
+
summaryMetadata,
|
|
286
|
+
});
|
|
282
287
|
if (entry.providerSessionId && (entry.kind === 'cli' || entry.kind === 'acp')) {
|
|
283
288
|
nextState = upsertSavedProviderSession(nextState, {
|
|
284
289
|
kind: entry.kind,
|
|
@@ -286,7 +291,7 @@ export class DaemonCliManager {
|
|
|
286
291
|
providerName: entry.providerName,
|
|
287
292
|
providerSessionId: entry.providerSessionId,
|
|
288
293
|
workspace: entry.workspace,
|
|
289
|
-
|
|
294
|
+
summaryMetadata,
|
|
290
295
|
title: entry.title,
|
|
291
296
|
});
|
|
292
297
|
}
|
|
@@ -534,7 +539,7 @@ export class DaemonCliManager {
|
|
|
534
539
|
providerType: normalizedType,
|
|
535
540
|
providerName: provider.displayName || provider.name || normalizedType,
|
|
536
541
|
workspace: resolvedDir,
|
|
537
|
-
|
|
542
|
+
summaryMetadata: buildLegacyModelModeSummaryMetadata({ model: initialModel }),
|
|
538
543
|
sessionId,
|
|
539
544
|
title: provider.displayName || provider.name || normalizedType,
|
|
540
545
|
});
|
|
@@ -646,7 +651,7 @@ export class DaemonCliManager {
|
|
|
646
651
|
providerName: provider?.displayName || provider?.name || normalizedType,
|
|
647
652
|
providerSessionId: sessionBinding.providerSessionId,
|
|
648
653
|
workspace: resolvedDir,
|
|
649
|
-
|
|
654
|
+
summaryMetadata: buildLegacyModelModeSummaryMetadata({ model: initialModel }),
|
|
650
655
|
sessionId: key,
|
|
651
656
|
title: provider?.displayName || provider?.name || normalizedType,
|
|
652
657
|
});
|
package/src/commands/handler.ts
CHANGED
|
@@ -46,6 +46,7 @@ export interface CommandContext {
|
|
|
46
46
|
instanceManager?: ProviderInstanceManager;
|
|
47
47
|
sessionRegistry?: SessionRegistry;
|
|
48
48
|
onProviderSettingChanged?: (providerType: string, key: string, value: any) => Promise<void> | void;
|
|
49
|
+
onProviderSourceConfigChanged?: () => Promise<void> | void;
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
/**
|
|
@@ -502,6 +503,8 @@ export class DaemonCommandHandler implements CommandHelpers {
|
|
|
502
503
|
// ─── Provider Settings (stream-commands.ts) ──────────
|
|
503
504
|
case 'get_provider_settings': return Stream.handleGetProviderSettings(this, args);
|
|
504
505
|
case 'set_provider_setting': return Stream.handleSetProviderSetting(this, args);
|
|
506
|
+
case 'get_provider_source_config': return Stream.handleGetProviderSourceConfig(this, args);
|
|
507
|
+
case 'set_provider_source_config': return Stream.handleSetProviderSourceConfig(this, args);
|
|
505
508
|
|
|
506
509
|
// ─── IDE Extension Settings (stream-commands.ts) ──────────
|
|
507
510
|
case 'get_ide_extensions': return Stream.handleGetIdeExtensions(this, args);
|