adhdev 0.9.34 → 0.9.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.
- package/dist/cli/index.js +515 -386
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +153 -38
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/vendor/session-host-daemon/index.js +8 -1
- package/vendor/session-host-daemon/index.js.map +1 -1
- package/vendor/session-host-daemon/index.mjs +8 -1
- package/vendor/session-host-daemon/index.mjs.map +1 -1
package/dist/index.js
CHANGED
|
@@ -9954,7 +9954,14 @@ var init_handler = __esm({
|
|
|
9954
9954
|
await this._ctx.providerLoader.fetchLatest().catch(() => {
|
|
9955
9955
|
});
|
|
9956
9956
|
this._ctx.providerLoader.reload();
|
|
9957
|
-
|
|
9957
|
+
this._ctx.providerLoader.registerToDetector();
|
|
9958
|
+
const refreshedInstances = this._ctx.instanceManager ? this._ctx.instanceManager.refreshProviderDefinitions((providerType) => this._ctx.providerLoader.resolve(providerType)) : 0;
|
|
9959
|
+
const providers = this._ctx.providerLoader.getAll().map((provider) => ({
|
|
9960
|
+
type: provider.type,
|
|
9961
|
+
name: provider.name,
|
|
9962
|
+
category: provider.category
|
|
9963
|
+
}));
|
|
9964
|
+
return { success: true, refreshedInstances, providers };
|
|
9958
9965
|
}
|
|
9959
9966
|
return { success: false, error: "ProviderLoader not initialized" };
|
|
9960
9967
|
}
|
|
@@ -11810,6 +11817,8 @@ var init_provider_cli_adapter = __esm({
|
|
|
11810
11817
|
messages = [];
|
|
11811
11818
|
committedMessages = [];
|
|
11812
11819
|
structuredMessages = [];
|
|
11820
|
+
committedMessagesActivitySignature = "";
|
|
11821
|
+
committedMessagesChangedAt = 0;
|
|
11813
11822
|
currentStatus = "starting";
|
|
11814
11823
|
onStatusChange = null;
|
|
11815
11824
|
responseBuffer = "";
|
|
@@ -11891,10 +11900,35 @@ var init_provider_cli_adapter = __esm({
|
|
|
11891
11900
|
providerResolutionMeta;
|
|
11892
11901
|
static FINISH_RETRY_DELAY_MS = 300;
|
|
11893
11902
|
static MAX_FINISH_RETRIES = 2;
|
|
11903
|
+
buildCommittedMessagesActivitySignature() {
|
|
11904
|
+
const last = this.committedMessages[this.committedMessages.length - 1];
|
|
11905
|
+
return [
|
|
11906
|
+
String(this.committedMessages.length),
|
|
11907
|
+
String(last?.role || ""),
|
|
11908
|
+
String(last?.kind || ""),
|
|
11909
|
+
String(last?.senderName || ""),
|
|
11910
|
+
String(last?.timestamp || ""),
|
|
11911
|
+
String(last?.receivedAt || ""),
|
|
11912
|
+
normalizeComparableMessageContent(last?.content || "").slice(-240)
|
|
11913
|
+
].join("|");
|
|
11914
|
+
}
|
|
11894
11915
|
syncMessageViews() {
|
|
11916
|
+
const signature = this.buildCommittedMessagesActivitySignature();
|
|
11917
|
+
if (signature !== this.committedMessagesActivitySignature) {
|
|
11918
|
+
this.committedMessagesActivitySignature = signature;
|
|
11919
|
+
this.committedMessagesChangedAt = Date.now();
|
|
11920
|
+
}
|
|
11895
11921
|
this.messages = [...this.committedMessages];
|
|
11896
11922
|
this.structuredMessages = [...this.committedMessages];
|
|
11897
11923
|
}
|
|
11924
|
+
getLastCommittedMessageActivityAt() {
|
|
11925
|
+
const last = this.committedMessages[this.committedMessages.length - 1];
|
|
11926
|
+
const messageTime = Math.max(
|
|
11927
|
+
typeof last?.receivedAt === "number" && Number.isFinite(last.receivedAt) ? last.receivedAt : 0,
|
|
11928
|
+
typeof last?.timestamp === "number" && Number.isFinite(last.timestamp) ? last.timestamp : 0
|
|
11929
|
+
);
|
|
11930
|
+
return Math.max(messageTime, this.committedMessagesChangedAt || 0);
|
|
11931
|
+
}
|
|
11898
11932
|
readTerminalScreenText(now = Date.now()) {
|
|
11899
11933
|
const screenText = this.terminalScreen.getText() || "";
|
|
11900
11934
|
this.lastScreenText = screenText;
|
|
@@ -11923,7 +11957,16 @@ var init_provider_cli_adapter = __esm({
|
|
|
11923
11957
|
if (baseMessages.length <= _ProviderCliAdapter.PARSE_MESSAGE_TAIL_LIMIT) return baseMessages;
|
|
11924
11958
|
return baseMessages.slice(-_ProviderCliAdapter.PARSE_MESSAGE_TAIL_LIMIT);
|
|
11925
11959
|
}
|
|
11960
|
+
messagesShareStableIdentity(left2, right2) {
|
|
11961
|
+
if (left2 === right2) return true;
|
|
11962
|
+
if (!left2 || !right2) return false;
|
|
11963
|
+
if ((left2.role || "") !== (right2.role || "")) return false;
|
|
11964
|
+
if (left2.id && right2.id && String(left2.id) === String(right2.id)) return true;
|
|
11965
|
+
if (typeof left2.index === "number" && typeof right2.index === "number" && left2.index === right2.index) return true;
|
|
11966
|
+
return false;
|
|
11967
|
+
}
|
|
11926
11968
|
messagesComparable(left2, right2) {
|
|
11969
|
+
if (this.messagesShareStableIdentity(left2, right2)) return true;
|
|
11927
11970
|
if (!left2 || !right2) return false;
|
|
11928
11971
|
if ((left2.role || "") !== (right2.role || "")) return false;
|
|
11929
11972
|
const leftText = normalizeComparableTranscriptText(left2.content);
|
|
@@ -12034,9 +12077,16 @@ var init_provider_cli_adapter = __esm({
|
|
|
12034
12077
|
/** Inject CLI scripts after construction (e.g. when resolved by ProviderLoader) */
|
|
12035
12078
|
setCliScripts(scripts) {
|
|
12036
12079
|
this.cliScripts = scripts;
|
|
12080
|
+
this.parsedStatusCache = null;
|
|
12081
|
+
this.parseErrorMessage = null;
|
|
12037
12082
|
const scriptNames = listCliScriptNames(scripts);
|
|
12038
12083
|
LOG.info("CLI", `[${this.cliType}] CLI scripts injected: [${scriptNames.join(", ")}]`);
|
|
12039
12084
|
}
|
|
12085
|
+
/** Refresh provider scripts/config used by this adapter without restarting the PTY runtime. */
|
|
12086
|
+
refreshProviderDefinition(provider) {
|
|
12087
|
+
this.provider = provider;
|
|
12088
|
+
this.setCliScripts(provider.scripts || {});
|
|
12089
|
+
}
|
|
12040
12090
|
updateRuntimeSettings(settings) {
|
|
12041
12091
|
this.runtimeSettings = { ...settings };
|
|
12042
12092
|
}
|
|
@@ -13067,6 +13117,69 @@ var init_provider_cli_adapter = __esm({
|
|
|
13067
13117
|
this.committedMessages = normalized;
|
|
13068
13118
|
this.syncMessageViews();
|
|
13069
13119
|
}
|
|
13120
|
+
getSharedCommittedPrefixLength(parsedMessages) {
|
|
13121
|
+
const committedMessages = this.committedMessages;
|
|
13122
|
+
const max = Math.min(parsedMessages.length, committedMessages.length);
|
|
13123
|
+
let index = 0;
|
|
13124
|
+
while (index < max && this.messagesShareStableIdentity(parsedMessages[index], committedMessages[index])) {
|
|
13125
|
+
index += 1;
|
|
13126
|
+
}
|
|
13127
|
+
return index;
|
|
13128
|
+
}
|
|
13129
|
+
hydrateCommittedPrefixForParsedStatus(parsedMessages) {
|
|
13130
|
+
const sharedPrefixLength = this.getSharedCommittedPrefixLength(parsedMessages);
|
|
13131
|
+
if (sharedPrefixLength !== this.committedMessages.length) return null;
|
|
13132
|
+
const committedHydratedMessages = this.committedMessages.map((message, index) => {
|
|
13133
|
+
const timestamp = typeof message.timestamp === "number" && Number.isFinite(message.timestamp) ? message.timestamp : this.lastOutputAt || this.currentTurnScope?.startedAt || Date.now();
|
|
13134
|
+
const contentValue = message.content;
|
|
13135
|
+
return {
|
|
13136
|
+
role: message.role,
|
|
13137
|
+
content: typeof contentValue === "string" ? contentValue : String(contentValue || ""),
|
|
13138
|
+
timestamp,
|
|
13139
|
+
receivedAt: typeof message.receivedAt === "number" && Number.isFinite(message.receivedAt) ? message.receivedAt : timestamp,
|
|
13140
|
+
kind: message.kind,
|
|
13141
|
+
id: message.id || `msg_${index}`,
|
|
13142
|
+
index: typeof message.index === "number" ? message.index : index,
|
|
13143
|
+
meta: message.meta,
|
|
13144
|
+
senderName: message.senderName
|
|
13145
|
+
};
|
|
13146
|
+
});
|
|
13147
|
+
const extraMessages = parsedMessages.slice(sharedPrefixLength);
|
|
13148
|
+
if (extraMessages.length === 0) return committedHydratedMessages;
|
|
13149
|
+
const extraHydratedMessages = hydrateCliParsedMessages(extraMessages, {
|
|
13150
|
+
committedMessages: [],
|
|
13151
|
+
scope: this.currentTurnScope,
|
|
13152
|
+
lastOutputAt: this.lastOutputAt
|
|
13153
|
+
}).map((message, offset) => ({
|
|
13154
|
+
...message,
|
|
13155
|
+
id: message.id || `msg_${sharedPrefixLength + offset}`,
|
|
13156
|
+
index: typeof message.index === "number" ? message.index : sharedPrefixLength + offset
|
|
13157
|
+
}));
|
|
13158
|
+
return [...committedHydratedMessages, ...extraHydratedMessages];
|
|
13159
|
+
}
|
|
13160
|
+
hydrateParsedMessagesForStatus(parsedMessages) {
|
|
13161
|
+
return this.hydrateCommittedPrefixForParsedStatus(parsedMessages) || hydrateCliParsedMessages(parsedMessages, {
|
|
13162
|
+
committedMessages: this.committedMessages,
|
|
13163
|
+
scope: this.currentTurnScope,
|
|
13164
|
+
lastOutputAt: this.lastOutputAt
|
|
13165
|
+
});
|
|
13166
|
+
}
|
|
13167
|
+
buildCommittedChatMessages() {
|
|
13168
|
+
return this.committedMessages.map((message, index) => {
|
|
13169
|
+
const contentValue = message.content;
|
|
13170
|
+
return buildChatMessage({
|
|
13171
|
+
role: message.role,
|
|
13172
|
+
content: typeof contentValue === "string" ? contentValue : String(contentValue || ""),
|
|
13173
|
+
timestamp: message.timestamp,
|
|
13174
|
+
kind: message.kind,
|
|
13175
|
+
meta: message.meta,
|
|
13176
|
+
senderName: message.senderName,
|
|
13177
|
+
id: message.id || `msg_${index}`,
|
|
13178
|
+
index: typeof message.index === "number" ? message.index : index,
|
|
13179
|
+
receivedAt: typeof message.receivedAt === "number" ? message.receivedAt : message.timestamp
|
|
13180
|
+
});
|
|
13181
|
+
});
|
|
13182
|
+
}
|
|
13070
13183
|
/**
|
|
13071
13184
|
* Script-based full parse — returns ReadChatResult.
|
|
13072
13185
|
* Called by command handler / dashboard for rich content rendering.
|
|
@@ -13092,7 +13205,7 @@ var init_provider_cli_adapter = __esm({
|
|
|
13092
13205
|
this.onStatusChange?.();
|
|
13093
13206
|
}
|
|
13094
13207
|
}
|
|
13095
|
-
if (parsed && Array.isArray(parsed.messages)) {
|
|
13208
|
+
if (parsed && Array.isArray(parsed.messages) && this.provider.allowInputDuringGeneration === true) {
|
|
13096
13209
|
const hydratedForCommit = normalizeCliParsedMessages(parsed.messages, {
|
|
13097
13210
|
committedMessages: this.committedMessages,
|
|
13098
13211
|
scope: this.currentTurnScope,
|
|
@@ -13111,21 +13224,21 @@ var init_provider_cli_adapter = __esm({
|
|
|
13111
13224
|
const shouldPreferCommittedMessages = !this.currentTurnScope && !this.activeModal && this.currentStatus === "idle";
|
|
13112
13225
|
let result;
|
|
13113
13226
|
if (parsed && Array.isArray(parsed.messages)) {
|
|
13114
|
-
const parsedHydratedMessages =
|
|
13115
|
-
committedMessages: this.committedMessages,
|
|
13116
|
-
scope: this.currentTurnScope,
|
|
13117
|
-
lastOutputAt: this.lastOutputAt
|
|
13118
|
-
});
|
|
13119
|
-
const committedHydratedMessages = this.committedMessages.map((message, index) => buildChatMessage({
|
|
13120
|
-
...message,
|
|
13121
|
-
id: message.id || `msg_${index}`,
|
|
13122
|
-
index: typeof message.index === "number" ? message.index : index,
|
|
13123
|
-
receivedAt: typeof message.receivedAt === "number" ? message.receivedAt : message.timestamp
|
|
13124
|
-
}));
|
|
13227
|
+
const parsedHydratedMessages = this.hydrateParsedMessagesForStatus(parsed.messages);
|
|
13125
13228
|
const parsedLastAssistant = [...parsedHydratedMessages].reverse().find((message) => message.role === "assistant" && typeof message.content === "string" && message.content.trim());
|
|
13126
|
-
const shouldAdoptParsedIdleReplay = !this.currentTurnScope && !this.activeModal && !!parsedLastAssistant && parsedTranscriptIsRicherThanCommitted(parsedHydratedMessages,
|
|
13229
|
+
const shouldAdoptParsedIdleReplay = !this.currentTurnScope && !this.activeModal && !!parsedLastAssistant && parsedTranscriptIsRicherThanCommitted(parsedHydratedMessages, this.committedMessages) && (this.currentStatus === "idle" || this.currentStatus === "generating" && this.isWaitingForResponse && parsed.status === "idle" && this.runDetectStatus(this.recentOutputBuffer) === "idle");
|
|
13127
13230
|
if (shouldAdoptParsedIdleReplay) {
|
|
13128
|
-
this.committedMessages =
|
|
13231
|
+
this.committedMessages = this.getSharedCommittedPrefixLength(parsed.messages) === this.committedMessages.length ? parsedHydratedMessages.map((message) => ({
|
|
13232
|
+
role: message.role,
|
|
13233
|
+
content: typeof message.content === "string" ? message.content : String(message.content || ""),
|
|
13234
|
+
timestamp: message.timestamp,
|
|
13235
|
+
receivedAt: message.receivedAt,
|
|
13236
|
+
kind: message.kind,
|
|
13237
|
+
id: message.id,
|
|
13238
|
+
index: message.index,
|
|
13239
|
+
meta: message.meta,
|
|
13240
|
+
senderName: message.senderName
|
|
13241
|
+
})) : normalizeCliParsedMessages(parsed.messages, {
|
|
13129
13242
|
committedMessages: this.committedMessages,
|
|
13130
13243
|
scope: this.currentTurnScope,
|
|
13131
13244
|
lastOutputAt: this.lastOutputAt
|
|
@@ -13144,15 +13257,9 @@ var init_provider_cli_adapter = __esm({
|
|
|
13144
13257
|
this.onStatusChange?.();
|
|
13145
13258
|
}
|
|
13146
13259
|
}
|
|
13147
|
-
const
|
|
13148
|
-
...message,
|
|
13149
|
-
id: message.id || `msg_${index}`,
|
|
13150
|
-
index: typeof message.index === "number" ? message.index : index,
|
|
13151
|
-
receivedAt: typeof message.receivedAt === "number" ? message.receivedAt : message.timestamp
|
|
13152
|
-
})) : committedHydratedMessages;
|
|
13153
|
-
const shouldPreferCommittedHistoryReplay = !this.currentTurnScope && !this.activeModal && effectiveCommittedHydratedMessages.length > parsedHydratedMessages.length;
|
|
13260
|
+
const shouldPreferCommittedHistoryReplay = !this.currentTurnScope && !this.activeModal && this.committedMessages.length > parsedHydratedMessages.length;
|
|
13154
13261
|
const shouldPreferCommittedIdleReplay = shouldPreferCommittedMessages && !shouldAdoptParsedIdleReplay;
|
|
13155
|
-
const hydratedMessages = shouldPreferCommittedIdleReplay || shouldPreferCommittedHistoryReplay ?
|
|
13262
|
+
const hydratedMessages = shouldPreferCommittedIdleReplay || shouldPreferCommittedHistoryReplay ? this.buildCommittedChatMessages() : parsedHydratedMessages;
|
|
13156
13263
|
result = {
|
|
13157
13264
|
id: parsed.id || "cli_session",
|
|
13158
13265
|
status: parsed.status || this.currentStatus,
|
|
@@ -14058,6 +14165,11 @@ var init_cli_provider_instance = __esm({
|
|
|
14058
14165
|
launchMode;
|
|
14059
14166
|
startedAt = Date.now();
|
|
14060
14167
|
onProviderSessionResolved;
|
|
14168
|
+
refreshProviderDefinition(provider) {
|
|
14169
|
+
if (provider.type !== this.type || provider.category !== "cli") return;
|
|
14170
|
+
this.provider = provider;
|
|
14171
|
+
this.adapter.refreshProviderDefinition(provider);
|
|
14172
|
+
}
|
|
14061
14173
|
// ─── Lifecycle ─────────────────────────────────
|
|
14062
14174
|
async init(context) {
|
|
14063
14175
|
this.context = context;
|
|
@@ -14268,9 +14380,11 @@ var init_cli_provider_instance = __esm({
|
|
|
14268
14380
|
const autoApproveActive = adapterStatus.status === "waiting_approval" && this.shouldAutoApprove();
|
|
14269
14381
|
const visibleStatus = autoApproveActive ? "generating" : adapterStatus.status;
|
|
14270
14382
|
const runtime = this.adapter.getRuntimeMetadata();
|
|
14383
|
+
const lastCommittedMessageActivityAt = typeof this.adapter.getLastCommittedMessageActivityAt === "function" ? this.adapter.getLastCommittedMessageActivityAt() : 0;
|
|
14271
14384
|
return {
|
|
14272
14385
|
id: this.instanceId,
|
|
14273
14386
|
status: visibleStatus,
|
|
14387
|
+
lastMessageAt: lastCommittedMessageActivityAt || void 0,
|
|
14274
14388
|
runtimeLifecycle: runtime?.lifecycle ?? null,
|
|
14275
14389
|
runtimeSurfaceKind: runtime?.surfaceKind,
|
|
14276
14390
|
runtimeRestoredFromStorage: runtime?.restoredFromStorage === true,
|
|
@@ -39977,6 +40091,9 @@ function projectHotChatSessionStatesFromProviderState(state) {
|
|
|
39977
40091
|
const project = (item) => ({
|
|
39978
40092
|
id: item.instanceId,
|
|
39979
40093
|
status: item.activeChat?.status || item.status,
|
|
40094
|
+
unread: item.unread,
|
|
40095
|
+
inboxBucket: item.inboxBucket,
|
|
40096
|
+
lastMessageAt: item.lastMessageAt ?? item.activeChat?.lastMessageAt,
|
|
39980
40097
|
runtimeLifecycle: item.runtime?.lifecycle ?? null,
|
|
39981
40098
|
runtimeSurfaceKind: item.runtime?.surfaceKind,
|
|
39982
40099
|
runtimeRestoredFromStorage: item.runtime?.restoredFromStorage === true,
|
|
@@ -40189,6 +40306,17 @@ var init_provider_instance_manager = __esm({
|
|
|
40189
40306
|
}
|
|
40190
40307
|
return updated;
|
|
40191
40308
|
}
|
|
40309
|
+
refreshProviderDefinitions(resolveProvider) {
|
|
40310
|
+
let refreshed = 0;
|
|
40311
|
+
for (const instance of this.instances.values()) {
|
|
40312
|
+
if (typeof instance.refreshProviderDefinition !== "function") continue;
|
|
40313
|
+
const provider = resolveProvider(instance.type);
|
|
40314
|
+
if (!provider || typeof provider !== "object") continue;
|
|
40315
|
+
instance.refreshProviderDefinition(provider);
|
|
40316
|
+
refreshed += 1;
|
|
40317
|
+
}
|
|
40318
|
+
return refreshed;
|
|
40319
|
+
}
|
|
40192
40320
|
// ─── cleanup ──────────────────────────────────────
|
|
40193
40321
|
/**
|
|
40194
40322
|
* All terminate
|
|
@@ -44471,20 +44599,7 @@ var init_dev_server = __esm({
|
|
|
44471
44599
|
async handleReload(_req, res) {
|
|
44472
44600
|
try {
|
|
44473
44601
|
this.providerLoader.reload();
|
|
44474
|
-
|
|
44475
|
-
if (this.instanceManager) {
|
|
44476
|
-
for (const id of this.instanceManager.listInstanceIds()) {
|
|
44477
|
-
const instance = this.instanceManager.getInstance(id);
|
|
44478
|
-
const providerType = typeof instance?.type === "string" ? instance.type : "";
|
|
44479
|
-
if (!providerType) continue;
|
|
44480
|
-
const resolved = this.providerLoader.resolve(providerType);
|
|
44481
|
-
if (!resolved) continue;
|
|
44482
|
-
if (instance && typeof instance === "object" && "provider" in instance) {
|
|
44483
|
-
instance.provider = resolved;
|
|
44484
|
-
refreshedInstances += 1;
|
|
44485
|
-
}
|
|
44486
|
-
}
|
|
44487
|
-
}
|
|
44602
|
+
const refreshedInstances = this.instanceManager ? this.instanceManager.refreshProviderDefinitions((providerType) => this.providerLoader.resolve(providerType)) : 0;
|
|
44488
44603
|
const providers = this.providerLoader.getAll().map((p) => ({
|
|
44489
44604
|
type: p.type,
|
|
44490
44605
|
name: p.name,
|
|
@@ -56400,7 +56515,7 @@ var init_adhdev_daemon = __esm({
|
|
|
56400
56515
|
init_version();
|
|
56401
56516
|
init_src();
|
|
56402
56517
|
init_runtime_defaults();
|
|
56403
|
-
pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.
|
|
56518
|
+
pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.36" });
|
|
56404
56519
|
AdhdevDaemon = class _AdhdevDaemon {
|
|
56405
56520
|
localHttpServer = null;
|
|
56406
56521
|
localWss = null;
|