@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/index.mjs CHANGED
@@ -2084,6 +2084,8 @@ var init_provider_cli_adapter = __esm({
2084
2084
  messages = [];
2085
2085
  committedMessages = [];
2086
2086
  structuredMessages = [];
2087
+ committedMessagesActivitySignature = "";
2088
+ committedMessagesChangedAt = 0;
2087
2089
  currentStatus = "starting";
2088
2090
  onStatusChange = null;
2089
2091
  responseBuffer = "";
@@ -2165,10 +2167,35 @@ var init_provider_cli_adapter = __esm({
2165
2167
  providerResolutionMeta;
2166
2168
  static FINISH_RETRY_DELAY_MS = 300;
2167
2169
  static MAX_FINISH_RETRIES = 2;
2170
+ buildCommittedMessagesActivitySignature() {
2171
+ const last = this.committedMessages[this.committedMessages.length - 1];
2172
+ return [
2173
+ String(this.committedMessages.length),
2174
+ String(last?.role || ""),
2175
+ String(last?.kind || ""),
2176
+ String(last?.senderName || ""),
2177
+ String(last?.timestamp || ""),
2178
+ String(last?.receivedAt || ""),
2179
+ normalizeComparableMessageContent(last?.content || "").slice(-240)
2180
+ ].join("|");
2181
+ }
2168
2182
  syncMessageViews() {
2183
+ const signature = this.buildCommittedMessagesActivitySignature();
2184
+ if (signature !== this.committedMessagesActivitySignature) {
2185
+ this.committedMessagesActivitySignature = signature;
2186
+ this.committedMessagesChangedAt = Date.now();
2187
+ }
2169
2188
  this.messages = [...this.committedMessages];
2170
2189
  this.structuredMessages = [...this.committedMessages];
2171
2190
  }
2191
+ getLastCommittedMessageActivityAt() {
2192
+ const last = this.committedMessages[this.committedMessages.length - 1];
2193
+ const messageTime = Math.max(
2194
+ typeof last?.receivedAt === "number" && Number.isFinite(last.receivedAt) ? last.receivedAt : 0,
2195
+ typeof last?.timestamp === "number" && Number.isFinite(last.timestamp) ? last.timestamp : 0
2196
+ );
2197
+ return Math.max(messageTime, this.committedMessagesChangedAt || 0);
2198
+ }
2172
2199
  readTerminalScreenText(now = Date.now()) {
2173
2200
  const screenText = this.terminalScreen.getText() || "";
2174
2201
  this.lastScreenText = screenText;
@@ -2308,9 +2335,16 @@ var init_provider_cli_adapter = __esm({
2308
2335
  /** Inject CLI scripts after construction (e.g. when resolved by ProviderLoader) */
2309
2336
  setCliScripts(scripts) {
2310
2337
  this.cliScripts = scripts;
2338
+ this.parsedStatusCache = null;
2339
+ this.parseErrorMessage = null;
2311
2340
  const scriptNames = listCliScriptNames(scripts);
2312
2341
  LOG.info("CLI", `[${this.cliType}] CLI scripts injected: [${scriptNames.join(", ")}]`);
2313
2342
  }
2343
+ /** Refresh provider scripts/config used by this adapter without restarting the PTY runtime. */
2344
+ refreshProviderDefinition(provider) {
2345
+ this.provider = provider;
2346
+ this.setCliScripts(provider.scripts || {});
2347
+ }
2314
2348
  updateRuntimeSettings(settings) {
2315
2349
  this.runtimeSettings = { ...settings };
2316
2350
  }
@@ -12825,7 +12859,14 @@ var DaemonCommandHandler = class {
12825
12859
  await this._ctx.providerLoader.fetchLatest().catch(() => {
12826
12860
  });
12827
12861
  this._ctx.providerLoader.reload();
12828
- return { success: true };
12862
+ this._ctx.providerLoader.registerToDetector();
12863
+ const refreshedInstances = this._ctx.instanceManager ? this._ctx.instanceManager.refreshProviderDefinitions((providerType) => this._ctx.providerLoader.resolve(providerType)) : 0;
12864
+ const providers = this._ctx.providerLoader.getAll().map((provider) => ({
12865
+ type: provider.type,
12866
+ name: provider.name,
12867
+ category: provider.category
12868
+ }));
12869
+ return { success: true, refreshedInstances, providers };
12829
12870
  }
12830
12871
  return { success: false, error: "ProviderLoader not initialized" };
12831
12872
  }
@@ -13080,6 +13121,11 @@ var CliProviderInstance = class {
13080
13121
  launchMode;
13081
13122
  startedAt = Date.now();
13082
13123
  onProviderSessionResolved;
13124
+ refreshProviderDefinition(provider) {
13125
+ if (provider.type !== this.type || provider.category !== "cli") return;
13126
+ this.provider = provider;
13127
+ this.adapter.refreshProviderDefinition(provider);
13128
+ }
13083
13129
  // ─── Lifecycle ─────────────────────────────────
13084
13130
  async init(context) {
13085
13131
  this.context = context;
@@ -13290,9 +13336,11 @@ var CliProviderInstance = class {
13290
13336
  const autoApproveActive = adapterStatus.status === "waiting_approval" && this.shouldAutoApprove();
13291
13337
  const visibleStatus = autoApproveActive ? "generating" : adapterStatus.status;
13292
13338
  const runtime = this.adapter.getRuntimeMetadata();
13339
+ const lastCommittedMessageActivityAt = typeof this.adapter.getLastCommittedMessageActivityAt === "function" ? this.adapter.getLastCommittedMessageActivityAt() : 0;
13293
13340
  return {
13294
13341
  id: this.instanceId,
13295
13342
  status: visibleStatus,
13343
+ lastMessageAt: lastCommittedMessageActivityAt || void 0,
13296
13344
  runtimeLifecycle: runtime?.lifecycle ?? null,
13297
13345
  runtimeSurfaceKind: runtime?.surfaceKind,
13298
13346
  runtimeRestoredFromStorage: runtime?.restoredFromStorage === true,
@@ -20784,6 +20832,9 @@ function projectHotChatSessionStatesFromProviderState(state) {
20784
20832
  const project = (item) => ({
20785
20833
  id: item.instanceId,
20786
20834
  status: item.activeChat?.status || item.status,
20835
+ unread: item.unread,
20836
+ inboxBucket: item.inboxBucket,
20837
+ lastMessageAt: item.lastMessageAt ?? item.activeChat?.lastMessageAt,
20787
20838
  runtimeLifecycle: item.runtime?.lifecycle ?? null,
20788
20839
  runtimeSurfaceKind: item.runtime?.surfaceKind,
20789
20840
  runtimeRestoredFromStorage: item.runtime?.restoredFromStorage === true,
@@ -20991,6 +21042,17 @@ var ProviderInstanceManager = class {
20991
21042
  }
20992
21043
  return updated;
20993
21044
  }
21045
+ refreshProviderDefinitions(resolveProvider) {
21046
+ let refreshed = 0;
21047
+ for (const instance of this.instances.values()) {
21048
+ if (typeof instance.refreshProviderDefinition !== "function") continue;
21049
+ const provider = resolveProvider(instance.type);
21050
+ if (!provider || typeof provider !== "object") continue;
21051
+ instance.refreshProviderDefinition(provider);
21052
+ refreshed += 1;
21053
+ }
21054
+ return refreshed;
21055
+ }
20994
21056
  // ─── cleanup ──────────────────────────────────────
20995
21057
  /**
20996
21058
  * All terminate
@@ -25235,20 +25297,7 @@ var DevServer = class _DevServer {
25235
25297
  async handleReload(_req, res) {
25236
25298
  try {
25237
25299
  this.providerLoader.reload();
25238
- let refreshedInstances = 0;
25239
- if (this.instanceManager) {
25240
- for (const id of this.instanceManager.listInstanceIds()) {
25241
- const instance = this.instanceManager.getInstance(id);
25242
- const providerType = typeof instance?.type === "string" ? instance.type : "";
25243
- if (!providerType) continue;
25244
- const resolved = this.providerLoader.resolve(providerType);
25245
- if (!resolved) continue;
25246
- if (instance && typeof instance === "object" && "provider" in instance) {
25247
- instance.provider = resolved;
25248
- refreshedInstances += 1;
25249
- }
25250
- }
25251
- }
25300
+ const refreshedInstances = this.instanceManager ? this.instanceManager.refreshProviderDefinitions((providerType) => this.providerLoader.resolve(providerType)) : 0;
25252
25301
  const providers = this.providerLoader.getAll().map((p) => ({
25253
25302
  type: p.type,
25254
25303
  name: p.name,