@adhdev/daemon-core 0.9.34 → 0.9.35
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/cli-adapter-types.d.ts +1 -0
- package/dist/cli-adapters/provider-cli-adapter.d.ts +6 -0
- package/dist/index.js +64 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +64 -15
- package/dist/index.mjs.map +1 -1
- package/dist/providers/cli-provider-instance.d.ts +1 -0
- package/dist/providers/provider-instance-manager.d.ts +1 -0
- package/dist/providers/provider-instance.d.ts +3 -1
- package/node_modules/@adhdev/session-host-core/package.json +1 -1
- package/package.json +1 -1
- package/src/cli-adapter-types.ts +1 -0
- package/src/cli-adapters/provider-cli-adapter.ts +38 -0
- package/src/commands/handler.ts +10 -1
- package/src/daemon/dev-server.ts +3 -14
- package/src/providers/cli-provider-instance.ts +10 -0
- package/src/providers/provider-instance-manager.ts +15 -0
- package/src/providers/provider-instance.ts +3 -0
|
@@ -47,6 +47,7 @@ export interface CliAdapter {
|
|
|
47
47
|
isReady(): boolean;
|
|
48
48
|
setOnStatusChange(callback: () => void): void;
|
|
49
49
|
updateRuntimeSettings?(settings: Record<string, unknown>): void;
|
|
50
|
+
setCliScripts?(scripts: Record<string, unknown>): void;
|
|
50
51
|
setServerConn?(serverConn: unknown): void;
|
|
51
52
|
clearHistory?(): void;
|
|
52
53
|
resolveAction?(data: unknown): Promise<void>;
|
|
@@ -34,6 +34,8 @@ export declare class ProviderCliAdapter implements CliAdapter {
|
|
|
34
34
|
private messages;
|
|
35
35
|
private committedMessages;
|
|
36
36
|
private structuredMessages;
|
|
37
|
+
private committedMessagesActivitySignature;
|
|
38
|
+
private committedMessagesChangedAt;
|
|
37
39
|
private currentStatus;
|
|
38
40
|
private onStatusChange;
|
|
39
41
|
private responseBuffer;
|
|
@@ -107,7 +109,9 @@ export declare class ProviderCliAdapter implements CliAdapter {
|
|
|
107
109
|
private readonly providerResolutionMeta;
|
|
108
110
|
private static readonly FINISH_RETRY_DELAY_MS;
|
|
109
111
|
private static readonly MAX_FINISH_RETRIES;
|
|
112
|
+
private buildCommittedMessagesActivitySignature;
|
|
110
113
|
private syncMessageViews;
|
|
114
|
+
getLastCommittedMessageActivityAt(): number;
|
|
111
115
|
private readTerminalScreenText;
|
|
112
116
|
private shouldReadTerminalScreenSnapshot;
|
|
113
117
|
private resetTerminalScreen;
|
|
@@ -131,6 +135,8 @@ export declare class ProviderCliAdapter implements CliAdapter {
|
|
|
131
135
|
constructor(provider: CliProviderModule, workingDir: string, extraArgs?: string[], transportFactory?: PtyTransportFactory);
|
|
132
136
|
/** Inject CLI scripts after construction (e.g. when resolved by ProviderLoader) */
|
|
133
137
|
setCliScripts(scripts: CliScripts): void;
|
|
138
|
+
/** Refresh provider scripts/config used by this adapter without restarting the PTY runtime. */
|
|
139
|
+
refreshProviderDefinition(provider: CliProviderModule): void;
|
|
134
140
|
updateRuntimeSettings(settings: Record<string, any>): void;
|
|
135
141
|
setServerConn(serverConn: any): void;
|
|
136
142
|
setOnStatusChange(callback: () => void): void;
|
package/dist/index.js
CHANGED
|
@@ -2087,6 +2087,8 @@ var init_provider_cli_adapter = __esm({
|
|
|
2087
2087
|
messages = [];
|
|
2088
2088
|
committedMessages = [];
|
|
2089
2089
|
structuredMessages = [];
|
|
2090
|
+
committedMessagesActivitySignature = "";
|
|
2091
|
+
committedMessagesChangedAt = 0;
|
|
2090
2092
|
currentStatus = "starting";
|
|
2091
2093
|
onStatusChange = null;
|
|
2092
2094
|
responseBuffer = "";
|
|
@@ -2168,10 +2170,35 @@ var init_provider_cli_adapter = __esm({
|
|
|
2168
2170
|
providerResolutionMeta;
|
|
2169
2171
|
static FINISH_RETRY_DELAY_MS = 300;
|
|
2170
2172
|
static MAX_FINISH_RETRIES = 2;
|
|
2173
|
+
buildCommittedMessagesActivitySignature() {
|
|
2174
|
+
const last = this.committedMessages[this.committedMessages.length - 1];
|
|
2175
|
+
return [
|
|
2176
|
+
String(this.committedMessages.length),
|
|
2177
|
+
String(last?.role || ""),
|
|
2178
|
+
String(last?.kind || ""),
|
|
2179
|
+
String(last?.senderName || ""),
|
|
2180
|
+
String(last?.timestamp || ""),
|
|
2181
|
+
String(last?.receivedAt || ""),
|
|
2182
|
+
normalizeComparableMessageContent(last?.content || "").slice(-240)
|
|
2183
|
+
].join("|");
|
|
2184
|
+
}
|
|
2171
2185
|
syncMessageViews() {
|
|
2186
|
+
const signature = this.buildCommittedMessagesActivitySignature();
|
|
2187
|
+
if (signature !== this.committedMessagesActivitySignature) {
|
|
2188
|
+
this.committedMessagesActivitySignature = signature;
|
|
2189
|
+
this.committedMessagesChangedAt = Date.now();
|
|
2190
|
+
}
|
|
2172
2191
|
this.messages = [...this.committedMessages];
|
|
2173
2192
|
this.structuredMessages = [...this.committedMessages];
|
|
2174
2193
|
}
|
|
2194
|
+
getLastCommittedMessageActivityAt() {
|
|
2195
|
+
const last = this.committedMessages[this.committedMessages.length - 1];
|
|
2196
|
+
const messageTime = Math.max(
|
|
2197
|
+
typeof last?.receivedAt === "number" && Number.isFinite(last.receivedAt) ? last.receivedAt : 0,
|
|
2198
|
+
typeof last?.timestamp === "number" && Number.isFinite(last.timestamp) ? last.timestamp : 0
|
|
2199
|
+
);
|
|
2200
|
+
return Math.max(messageTime, this.committedMessagesChangedAt || 0);
|
|
2201
|
+
}
|
|
2175
2202
|
readTerminalScreenText(now = Date.now()) {
|
|
2176
2203
|
const screenText = this.terminalScreen.getText() || "";
|
|
2177
2204
|
this.lastScreenText = screenText;
|
|
@@ -2311,9 +2338,16 @@ var init_provider_cli_adapter = __esm({
|
|
|
2311
2338
|
/** Inject CLI scripts after construction (e.g. when resolved by ProviderLoader) */
|
|
2312
2339
|
setCliScripts(scripts) {
|
|
2313
2340
|
this.cliScripts = scripts;
|
|
2341
|
+
this.parsedStatusCache = null;
|
|
2342
|
+
this.parseErrorMessage = null;
|
|
2314
2343
|
const scriptNames = listCliScriptNames(scripts);
|
|
2315
2344
|
LOG.info("CLI", `[${this.cliType}] CLI scripts injected: [${scriptNames.join(", ")}]`);
|
|
2316
2345
|
}
|
|
2346
|
+
/** Refresh provider scripts/config used by this adapter without restarting the PTY runtime. */
|
|
2347
|
+
refreshProviderDefinition(provider) {
|
|
2348
|
+
this.provider = provider;
|
|
2349
|
+
this.setCliScripts(provider.scripts || {});
|
|
2350
|
+
}
|
|
2317
2351
|
updateRuntimeSettings(settings) {
|
|
2318
2352
|
this.runtimeSettings = { ...settings };
|
|
2319
2353
|
}
|
|
@@ -12978,7 +13012,14 @@ var DaemonCommandHandler = class {
|
|
|
12978
13012
|
await this._ctx.providerLoader.fetchLatest().catch(() => {
|
|
12979
13013
|
});
|
|
12980
13014
|
this._ctx.providerLoader.reload();
|
|
12981
|
-
|
|
13015
|
+
this._ctx.providerLoader.registerToDetector();
|
|
13016
|
+
const refreshedInstances = this._ctx.instanceManager ? this._ctx.instanceManager.refreshProviderDefinitions((providerType) => this._ctx.providerLoader.resolve(providerType)) : 0;
|
|
13017
|
+
const providers = this._ctx.providerLoader.getAll().map((provider) => ({
|
|
13018
|
+
type: provider.type,
|
|
13019
|
+
name: provider.name,
|
|
13020
|
+
category: provider.category
|
|
13021
|
+
}));
|
|
13022
|
+
return { success: true, refreshedInstances, providers };
|
|
12982
13023
|
}
|
|
12983
13024
|
return { success: false, error: "ProviderLoader not initialized" };
|
|
12984
13025
|
}
|
|
@@ -13233,6 +13274,11 @@ var CliProviderInstance = class {
|
|
|
13233
13274
|
launchMode;
|
|
13234
13275
|
startedAt = Date.now();
|
|
13235
13276
|
onProviderSessionResolved;
|
|
13277
|
+
refreshProviderDefinition(provider) {
|
|
13278
|
+
if (provider.type !== this.type || provider.category !== "cli") return;
|
|
13279
|
+
this.provider = provider;
|
|
13280
|
+
this.adapter.refreshProviderDefinition(provider);
|
|
13281
|
+
}
|
|
13236
13282
|
// ─── Lifecycle ─────────────────────────────────
|
|
13237
13283
|
async init(context) {
|
|
13238
13284
|
this.context = context;
|
|
@@ -13443,9 +13489,11 @@ var CliProviderInstance = class {
|
|
|
13443
13489
|
const autoApproveActive = adapterStatus.status === "waiting_approval" && this.shouldAutoApprove();
|
|
13444
13490
|
const visibleStatus = autoApproveActive ? "generating" : adapterStatus.status;
|
|
13445
13491
|
const runtime = this.adapter.getRuntimeMetadata();
|
|
13492
|
+
const lastCommittedMessageActivityAt = typeof this.adapter.getLastCommittedMessageActivityAt === "function" ? this.adapter.getLastCommittedMessageActivityAt() : 0;
|
|
13446
13493
|
return {
|
|
13447
13494
|
id: this.instanceId,
|
|
13448
13495
|
status: visibleStatus,
|
|
13496
|
+
lastMessageAt: lastCommittedMessageActivityAt || void 0,
|
|
13449
13497
|
runtimeLifecycle: runtime?.lifecycle ?? null,
|
|
13450
13498
|
runtimeSurfaceKind: runtime?.surfaceKind,
|
|
13451
13499
|
runtimeRestoredFromStorage: runtime?.restoredFromStorage === true,
|
|
@@ -20932,6 +20980,9 @@ function projectHotChatSessionStatesFromProviderState(state) {
|
|
|
20932
20980
|
const project = (item) => ({
|
|
20933
20981
|
id: item.instanceId,
|
|
20934
20982
|
status: item.activeChat?.status || item.status,
|
|
20983
|
+
unread: item.unread,
|
|
20984
|
+
inboxBucket: item.inboxBucket,
|
|
20985
|
+
lastMessageAt: item.lastMessageAt ?? item.activeChat?.lastMessageAt,
|
|
20935
20986
|
runtimeLifecycle: item.runtime?.lifecycle ?? null,
|
|
20936
20987
|
runtimeSurfaceKind: item.runtime?.surfaceKind,
|
|
20937
20988
|
runtimeRestoredFromStorage: item.runtime?.restoredFromStorage === true,
|
|
@@ -21139,6 +21190,17 @@ var ProviderInstanceManager = class {
|
|
|
21139
21190
|
}
|
|
21140
21191
|
return updated;
|
|
21141
21192
|
}
|
|
21193
|
+
refreshProviderDefinitions(resolveProvider) {
|
|
21194
|
+
let refreshed = 0;
|
|
21195
|
+
for (const instance of this.instances.values()) {
|
|
21196
|
+
if (typeof instance.refreshProviderDefinition !== "function") continue;
|
|
21197
|
+
const provider = resolveProvider(instance.type);
|
|
21198
|
+
if (!provider || typeof provider !== "object") continue;
|
|
21199
|
+
instance.refreshProviderDefinition(provider);
|
|
21200
|
+
refreshed += 1;
|
|
21201
|
+
}
|
|
21202
|
+
return refreshed;
|
|
21203
|
+
}
|
|
21142
21204
|
// ─── cleanup ──────────────────────────────────────
|
|
21143
21205
|
/**
|
|
21144
21206
|
* All terminate
|
|
@@ -25383,20 +25445,7 @@ var DevServer = class _DevServer {
|
|
|
25383
25445
|
async handleReload(_req, res) {
|
|
25384
25446
|
try {
|
|
25385
25447
|
this.providerLoader.reload();
|
|
25386
|
-
|
|
25387
|
-
if (this.instanceManager) {
|
|
25388
|
-
for (const id of this.instanceManager.listInstanceIds()) {
|
|
25389
|
-
const instance = this.instanceManager.getInstance(id);
|
|
25390
|
-
const providerType = typeof instance?.type === "string" ? instance.type : "";
|
|
25391
|
-
if (!providerType) continue;
|
|
25392
|
-
const resolved = this.providerLoader.resolve(providerType);
|
|
25393
|
-
if (!resolved) continue;
|
|
25394
|
-
if (instance && typeof instance === "object" && "provider" in instance) {
|
|
25395
|
-
instance.provider = resolved;
|
|
25396
|
-
refreshedInstances += 1;
|
|
25397
|
-
}
|
|
25398
|
-
}
|
|
25399
|
-
}
|
|
25448
|
+
const refreshedInstances = this.instanceManager ? this.instanceManager.refreshProviderDefinitions((providerType) => this.providerLoader.resolve(providerType)) : 0;
|
|
25400
25449
|
const providers = this.providerLoader.getAll().map((p) => ({
|
|
25401
25450
|
type: p.type,
|
|
25402
25451
|
name: p.name,
|