@adhdev/daemon-core 0.6.40 → 0.6.42

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.d.ts CHANGED
@@ -659,6 +659,7 @@ interface ProviderScripts {
659
659
  setMode?: (params?: Record<string, any>) => string;
660
660
  /** params: { action: 'approve'|'reject'|'custom', button?: string } */
661
661
  resolveAction?: (params?: Record<string, any>) => string;
662
+ webviewResolveAction?: (params?: Record<string, any>) => string;
662
663
  listNotifications?: (params?: Record<string, any>) => string;
663
664
  dismissNotification?: (params?: Record<string, any>) => string;
664
665
  [scriptName: string]: ((params?: Record<string, any>) => string) | undefined;
@@ -1269,6 +1270,7 @@ declare class DaemonCdpManager {
1269
1270
  private _targetId;
1270
1271
  private _pageTitle;
1271
1272
  private _targetFilter;
1273
+ private _lastDiscoveredTargets?;
1272
1274
  constructor(port?: number, logFn?: (msg: string) => void, targetId?: string, targetFilter?: CdpTargetFilter);
1273
1275
  /** Set target filter (can be updated after construction) */
1274
1276
  setTargetFilter(filter: CdpTargetFilter): void;
@@ -2834,6 +2836,7 @@ declare class DevServer {
2834
2836
  private handleSource;
2835
2837
  private handleSave;
2836
2838
  private handleTypeAndSend;
2839
+ private handleTypeAndSendAt;
2837
2840
  private handleScriptHints;
2838
2841
  private handleValidate;
2839
2842
  private handleAcpChat;
package/dist/index.js CHANGED
@@ -1547,6 +1547,7 @@ var DaemonCdpManager = class {
1547
1547
  // Connected page title
1548
1548
  _targetFilter;
1549
1549
  // Provider-configurable target selection
1550
+ _lastDiscoveredTargets;
1550
1551
  constructor(port = 9333, logFn, targetId, targetFilter) {
1551
1552
  this.port = port;
1552
1553
  this._targetId = targetId || null;
@@ -2267,11 +2268,14 @@ var DaemonCdpManager = class {
2267
2268
  agentType: known.agentType,
2268
2269
  url
2269
2270
  });
2270
- this.log(`[CDP] Found agent: ${known.agentType} (${target.targetId})`);
2271
+ if (!this._lastDiscoveredTargets?.has(target.targetId)) {
2272
+ this.log(`[CDP] Found agent: ${known.agentType} (${target.targetId})`);
2273
+ }
2271
2274
  break;
2272
2275
  }
2273
2276
  }
2274
2277
  }
2278
+ this._lastDiscoveredTargets = new Set(agents.map((a) => a.targetId));
2275
2279
  return agents;
2276
2280
  } catch (e) {
2277
2281
  this.log(`[CDP] discoverAgentWebviews error: ${e.message}`);
@@ -6531,14 +6535,22 @@ var ProviderLoader = class _ProviderLoader {
6531
6535
  } else {
6532
6536
  v = JSON.stringify(v);
6533
6537
  }
6534
- content = content.replace(new RegExp(`\\$\\{${key}\\}`, "g"), String(v));
6538
+ const re = new RegExp(`\\$\\{\\s*${key}\\s*\\}`, "g");
6539
+ content = content.replace(re, String(v));
6535
6540
  }
6541
+ } else if (typeof args[0] === "string") {
6542
+ const re = new RegExp(`\\$\\{\\s*MESSAGE\\s*\\}`, "g");
6543
+ let v = args[0];
6544
+ if (!v.startsWith('"') && !v.startsWith("'") && !v.startsWith("`")) {
6545
+ v = JSON.stringify(v);
6546
+ }
6547
+ content = content.replace(re, String(v));
6536
6548
  } else if (args[0] !== void 0) {
6537
6549
  let v = String(args[0]);
6538
6550
  if (!v.startsWith('"') && !v.startsWith("'") && !v.startsWith("`")) {
6539
6551
  v = JSON.stringify(v);
6540
6552
  }
6541
- content = content.replace(/\$\{MESSAGE\}/g, v);
6553
+ content = content.replace(new RegExp(`\\$\\{\\s*MESSAGE\\s*\\}`, "g"), v);
6542
6554
  }
6543
6555
  return content;
6544
6556
  } catch {
@@ -7533,14 +7545,14 @@ var DaemonStatusReporter = class {
7533
7545
  const cliSummary = cliStates.map((s) => `${s.type}(${s.status})`).join(", ");
7534
7546
  const acpSummary = acpStates.map((s) => `${s.type}(${s.status})`).join(", ");
7535
7547
  const logLevel = opts?.p2pOnly ? "debug" : "info";
7536
- const summary = `\u2192${target} IDE: ${ideStates.length} [${ideSummary}] CLI: ${cliStates.length} [${cliSummary}] ACP: ${acpStates.length} [${acpSummary}]`;
7537
- const summaryChanged = summary !== this.lastStatusSummary;
7548
+ const baseSummary = `IDE: ${ideStates.length} [${ideSummary}] CLI: ${cliStates.length} [${cliSummary}] ACP: ${acpStates.length} [${acpSummary}]`;
7549
+ const summaryChanged = baseSummary !== this.lastStatusSummary;
7538
7550
  if (summaryChanged) {
7539
- this.lastStatusSummary = summary;
7551
+ this.lastStatusSummary = baseSummary;
7540
7552
  if (logLevel === "debug") {
7541
- LOG.debug("StatusReport", summary);
7553
+ LOG.debug("StatusReport", `\u2192${target} ${baseSummary}`);
7542
7554
  } else {
7543
- LOG.info("StatusReport", summary);
7555
+ LOG.info("StatusReport", `\u2192${target} ${baseSummary}`);
7544
7556
  }
7545
7557
  }
7546
7558
  const { managedIdes, managedClis, managedAcps } = buildAllManagedEntries(
@@ -9371,7 +9383,7 @@ var DaemonAgentStreamManager = class {
9371
9383
  try {
9372
9384
  const evaluate = (expr, timeout) => cdp.evaluateInSessionFrame(agent.sessionId, expr, timeout);
9373
9385
  const state = await agent.adapter.readChat(evaluate);
9374
- this.logFn(`[AgentStream] readChat(${type}) result: status=${state.status} msgs=${state.messages?.length || 0} model=${state.model || ""}${state.status === "error" ? " error=" + JSON.stringify(state.error || state._error || "unknown") : ""}`);
9386
+ LOG.debug("AgentStream", `[AgentStream] readChat(${type}) result: status=${state.status} msgs=${state.messages?.length || 0} model=${state.model || ""}${state.status === "error" ? " error=" + JSON.stringify(state.error || state._error || "unknown") : ""}`);
9375
9387
  agent.lastState = state;
9376
9388
  agent.lastError = null;
9377
9389
  if (state.status === "panel_hidden") {
@@ -10349,6 +10361,7 @@ var DevServer = class _DevServer {
10349
10361
  { method: "GET", pattern: /^\/api\/providers\/([^/]+)\/source$/, handler: (q, s, p) => this.handleSource(p[0], q, s) },
10350
10362
  { method: "POST", pattern: /^\/api\/providers\/([^/]+)\/save$/, handler: (q, s, p) => this.handleSave(p[0], q, s) },
10351
10363
  { method: "POST", pattern: /^\/api\/providers\/([^/]+)\/typeAndSend$/, handler: (q, s, p) => this.handleTypeAndSend(p[0], q, s) },
10364
+ { method: "POST", pattern: /^\/api\/providers\/([^/]+)\/typeAndSendAt$/, handler: (q, s, p) => this.handleTypeAndSendAt(p[0], q, s) },
10352
10365
  { method: "GET", pattern: /^\/api\/providers\/([^/]+)\/config$/, handler: (q, s, p) => this.handleProviderConfig(p[0], q, s) },
10353
10366
  { method: "POST", pattern: /^\/api\/providers\/([^/]+)\/dom-context$/, handler: (q, s, p) => this.handleDomContext(p[0], q, s) },
10354
10367
  { method: "POST", pattern: /^\/api\/providers\/([^/]+)\/auto-implement$/, handler: (q, s, p) => this.handleAutoImplement(p[0], q, s) },
@@ -11090,6 +11103,25 @@ var DevServer = class _DevServer {
11090
11103
  this.json(res, 500, { error: e.message });
11091
11104
  }
11092
11105
  }
11106
+ async handleTypeAndSendAt(type, req, res) {
11107
+ const body = await this.readBody(req);
11108
+ const { x, y, text } = body;
11109
+ if (typeof x !== "number" || typeof y !== "number" || !text || typeof text !== "string") {
11110
+ this.json(res, 400, { error: "x, y numbers and text string required" });
11111
+ return;
11112
+ }
11113
+ const cdp = this.getCdp(type);
11114
+ if (!cdp) {
11115
+ this.json(res, 503, { error: `CDP not connected for '${type}'` });
11116
+ return;
11117
+ }
11118
+ try {
11119
+ const sent = await cdp.typeAndSendAt(x, y, text);
11120
+ this.json(res, 200, { sent });
11121
+ } catch (e) {
11122
+ this.json(res, 500, { error: e.message });
11123
+ }
11124
+ }
11093
11125
  async handleScriptHints(type, _req, res) {
11094
11126
  const dir = this.findProviderDir(type);
11095
11127
  if (!dir) {