@adhdev/daemon-standalone 0.9.77-rc.31 → 0.9.77-rc.33

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adhdev/daemon-standalone",
3
- "version": "0.9.77-rc.31",
3
+ "version": "0.9.77-rc.33",
4
4
  "description": "ADHDev standalone daemon — embedded HTTP/WS server for local dashboard",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -26047,6 +26047,8 @@ function getQueue(meshId, opts) {
26047
26047
  }
26048
26048
  function claimNextTask(meshId, nodeId, sessionId) {
26049
26049
  const queue = readQueue(meshId);
26050
+ const hasActiveAssignment = queue.some((q) => q.status === "assigned" && (q.assignedSessionId === sessionId || q.assignedNodeId === nodeId));
26051
+ if (hasActiveAssignment) return null;
26050
26052
  let targetIdx = queue.findIndex((q) => q.status === "pending" && q.targetSessionId === sessionId);
26051
26053
  if (targetIdx === -1) {
26052
26054
  targetIdx = queue.findIndex((q) => q.status === "pending" && q.targetNodeId === nodeId && !q.targetSessionId);
@@ -26249,6 +26251,9 @@ function drainPendingMeshCoordinatorEvents() {
26249
26251
  function readNonEmptyString(value) {
26250
26252
  return typeof value === "string" && value.trim() ? value.trim() : "";
26251
26253
  }
26254
+ function resolveEventSessionId(event, fallback) {
26255
+ return readNonEmptyString(event.targetSessionId) || readNonEmptyString(event.sessionId) || readNonEmptyString(event.instanceId) || readNonEmptyString(fallback);
26256
+ }
26252
26257
  function isMeshCoordinatorEvent(eventName) {
26253
26258
  return typeof eventName === "string" && MESH_COORDINATOR_EVENTS.has(eventName);
26254
26259
  }
@@ -26307,10 +26312,12 @@ function triggerMeshQueue(components, meshId) {
26307
26312
  const state = inst.getState();
26308
26313
  const settings = state.settings || {};
26309
26314
  const instMeshId = readNonEmptyString(settings.meshNodeFor);
26310
- if (instMeshId !== meshId && !settings.launchedByCoordinator) continue;
26315
+ if (instMeshId !== meshId) continue;
26311
26316
  const nodeId = readNonEmptyString(settings.meshNodeId) || readNonEmptyString(settings.nodeId);
26312
26317
  if (!nodeId) continue;
26313
- if (state.status !== "idle" && state.status !== "stopped" && state.activeChat?.status !== "waiting_input") continue;
26318
+ const status = readNonEmptyString(state.status).toLowerCase();
26319
+ if (["stopped", "failed", "terminated", "exited", "closed"].includes(status)) continue;
26320
+ if (status !== "idle" && state.activeChat?.status !== "waiting_input") continue;
26314
26321
  const sessionId = state.instanceId;
26315
26322
  const providerType = state.type || readNonEmptyString(settings.providerType);
26316
26323
  if (providerType) {
@@ -26373,7 +26380,7 @@ Do NOT retry on this node. Consider reassigning to a different node or asking th
26373
26380
  }
26374
26381
  function injectMeshSystemMessage(components, args) {
26375
26382
  if (args.event === "agent:generating_completed") {
26376
- const sessionId = readNonEmptyString(args.metadataEvent.targetSessionId);
26383
+ const sessionId = resolveEventSessionId(args.metadataEvent, args.sourceInstanceId);
26377
26384
  const nodeId = readNonEmptyString(args.nodeId) || readNonEmptyString(args.metadataEvent.meshNodeId);
26378
26385
  const providerType = readNonEmptyString(args.metadataEvent.providerType);
26379
26386
  if (sessionId) {
@@ -26385,9 +26392,29 @@ function injectMeshSystemMessage(components, args) {
26385
26392
  }
26386
26393
  }
26387
26394
  } else if (args.event === "agent:ready") {
26388
- const sessionId = readNonEmptyString(args.metadataEvent.targetSessionId);
26395
+ const sessionId = resolveEventSessionId(args.metadataEvent, args.sourceInstanceId);
26389
26396
  const nodeId = readNonEmptyString(args.nodeId) || readNonEmptyString(args.metadataEvent.meshNodeId);
26390
26397
  const providerType = readNonEmptyString(args.metadataEvent.providerType);
26398
+ const completedTask = sessionId ? updateSessionTaskStatus(args.meshId, sessionId, "completed") : null;
26399
+ if (completedTask) {
26400
+ try {
26401
+ appendLedgerEntry(args.meshId, {
26402
+ kind: "task_completed",
26403
+ nodeId: nodeId || void 0,
26404
+ sessionId,
26405
+ providerType: providerType || void 0,
26406
+ payload: {
26407
+ event: args.event,
26408
+ nodeLabel: args.nodeLabel,
26409
+ taskId: completedTask.id,
26410
+ completedViaReady: true,
26411
+ providerSessionId: readNonEmptyString(args.metadataEvent.providerSessionId) || void 0
26412
+ }
26413
+ });
26414
+ } catch (e) {
26415
+ LOG.warn("MeshLedger", `Failed to record task_completed from ready: ${e?.message || e}`);
26416
+ }
26417
+ }
26391
26418
  if (sessionId && nodeId && providerType) {
26392
26419
  remoteIdleSessions.set(`${nodeId}:${sessionId}`, { nodeId, sessionId, providerType });
26393
26420
  setTimeout(() => {
@@ -26398,13 +26425,13 @@ function injectMeshSystemMessage(components, args) {
26398
26425
  }, 500);
26399
26426
  }
26400
26427
  } else if (args.event === "agent:generating_started") {
26401
- const sessionId = readNonEmptyString(args.metadataEvent.targetSessionId);
26428
+ const sessionId = resolveEventSessionId(args.metadataEvent, args.sourceInstanceId);
26402
26429
  const nodeId = readNonEmptyString(args.nodeId) || readNonEmptyString(args.metadataEvent.meshNodeId);
26403
26430
  if (sessionId && nodeId) {
26404
26431
  remoteIdleSessions.delete(`${nodeId}:${sessionId}`);
26405
26432
  }
26406
26433
  } else if (args.event === "agent:stopped") {
26407
- const sessionId = readNonEmptyString(args.metadataEvent.targetSessionId);
26434
+ const sessionId = resolveEventSessionId(args.metadataEvent, args.sourceInstanceId);
26408
26435
  const nodeId = readNonEmptyString(args.nodeId) || readNonEmptyString(args.metadataEvent.meshNodeId);
26409
26436
  if (sessionId && nodeId) {
26410
26437
  remoteIdleSessions.delete(`${nodeId}:${sessionId}`);
@@ -26419,7 +26446,7 @@ function injectMeshSystemMessage(components, args) {
26419
26446
  appendLedgerEntry(args.meshId, {
26420
26447
  kind: ledgerKind,
26421
26448
  nodeId: readNonEmptyString(args.nodeId) || readNonEmptyString(args.metadataEvent.meshNodeId) || void 0,
26422
- sessionId: readNonEmptyString(args.metadataEvent.targetSessionId) || void 0,
26449
+ sessionId: resolveEventSessionId(args.metadataEvent, args.sourceInstanceId) || void 0,
26423
26450
  providerType: readNonEmptyString(args.metadataEvent.providerType) || void 0,
26424
26451
  payload: {
26425
26452
  event: args.event,
@@ -26437,7 +26464,7 @@ function injectMeshSystemMessage(components, args) {
26437
26464
  const mesh = getMesh(args.meshId);
26438
26465
  const maxRetries = mesh?.policy?.maxTaskRetries ?? 1;
26439
26466
  recoveryContext = getSessionRecoveryContext(args.meshId, {
26440
- sessionId: readNonEmptyString(args.metadataEvent.targetSessionId) || void 0,
26467
+ sessionId: resolveEventSessionId(args.metadataEvent, args.sourceInstanceId) || void 0,
26441
26468
  nodeId: readNonEmptyString(args.nodeId) || readNonEmptyString(args.metadataEvent.meshNodeId) || void 0,
26442
26469
  maxRetries
26443
26470
  });
@@ -26537,7 +26564,7 @@ function handleMeshForwardEvent(components, payload) {
26537
26564
  nodeLabel,
26538
26565
  event: eventName,
26539
26566
  metadataEvent: {
26540
- targetSessionId: readNonEmptyString(payload.targetSessionId) || readNonEmptyString(payload.sessionId),
26567
+ targetSessionId: readNonEmptyString(payload.targetSessionId) || readNonEmptyString(payload.sessionId) || readNonEmptyString(payload.instanceId),
26541
26568
  providerType: readNonEmptyString(payload.providerType),
26542
26569
  providerSessionId: readNonEmptyString(payload.providerSessionId)
26543
26570
  }
@@ -40988,7 +41015,7 @@ async function shutdownDaemonComponents(components) {
40988
41015
  }
40989
41016
  cdpManagers.clear();
40990
41017
  }
40991
- var path4, import_promises4, import_fs3, import_child_process, import_util3, import_os2, import_path, import_fs4, import_crypto2, import_fs5, import_path2, import_crypto3, import_fs6, import_path3, import_crypto4, import_events2, import_fs7, import_path4, import_crypto5, fs2, path8, os22, os8, os9, path14, import_child_process2, os10, path15, os11, import_child_process3, import_fs8, import_promises5, path, import_util4, import_promises6, path22, path32, fs, os4, path5, import_crypto6, path6, path7, import_fs9, import_path5, import_child_process4, import_fs10, import_os3, path9, import_child_process5, os32, path10, import_fs11, os42, import_child_process6, http, crypto2, fs3, path11, os5, fs4, os6, path12, import_crypto7, fs5, path13, os7, os13, path18, crypto4, import_fs12, import_child_process7, os12, path16, crypto3, fs6, import_module, path17, import_stream2, import_child_process8, import_child_process9, net2, os15, path20, fs7, path19, os14, fs8, path21, os16, import_child_process10, import_crypto8, import_fs13, import_module2, os17, import_path6, os18, import_child_process11, import_child_process12, fs9, os19, path222, import_os4, import_path7, fs10, fs11, path23, os20, import_child_process13, import_os5, http2, fs15, path27, fs12, path24, fs13, path25, fs14, path26, os21, import_child_process14, __defProp2, __getOwnPropDesc2, __getOwnPropNames2, __hasOwnProp2, __require2, __esm2, __export2, __copyProps2, __toCommonJS2, DEFAULT_MESH_POLICY, init_repo_mesh_types, git_worktree_exports, execFileAsync2, WORKTREE_DIR_NAME, GIT_TIMEOUT_MS, GIT_MAX_BUFFER, init_git_worktree, config_exports, DEFAULT_CONFIG, MACHINE_ID_PREFIX, init_config, mesh_config_exports, SESSION_CLEANUP_MODES, SPAWNED_SESSION_VISIBILITY_MODES, init_mesh_config, coordinator_prompt_exports, TOOLS_SECTION, TOOL_EXPOSURE_PREFLIGHT_SECTION, WORKFLOW_SECTION, init_coordinator_prompt, mesh_ledger_exports, LEDGER_DIR_NAME, MAX_FILE_SIZE_BYTES, RECENT_FAILURE_WINDOW_MS, meshLedgerEvents, init_mesh_ledger, init_mesh_work_queue, LEVEL_NUM, LEVEL_LABEL, currentLevel, LOG_DIR, MAX_LOG_SIZE, MAX_LOG_DAYS, currentDate, currentLogFile, writeCount, RING_BUFFER_SIZE, ringBuffer, origConsoleLog, origConsoleError, origConsoleWarn, LOG, interceptorInstalled, LOG_PATH, init_logger, mesh_events_exports, remoteIdleSessions, MAX_PENDING_EVENTS, pendingMeshCoordinatorEvents, MESH_COORDINATOR_EVENTS, EVENT_TO_LEDGER_KIND, init_mesh_events, NORMAL_TRACE_BUFFER_SIZE, DEV_TRACE_BUFFER_SIZE, DEFAULT_CONFIG2, currentConfig, init_debug_config, DEFAULT_BINDING_CANDIDATES, cachedBinding, cachedBindingError, GhosttyVtTerminalBackend, init_ghostty_vt_backend, TerminalCtor, XtermTerminalBackend, init_xterm_backend, DEFAULT_SCROLLBACK, loggedTerminalBackends, TerminalScreen, init_terminal_screen, init_spawn_env, cachedPty, NodePtyRuntimeTransport, NodePtyTransportFactory, init_pty_transport, TerminalTranscriptAccumulator, buildCliSpawnEnv, init_provider_cli_shared, init_provider_cli_parse, init_provider_cli_config, init_provider_cli_runtime, provider_cli_adapter_exports, ProviderCliAdapter, init_provider_cli_adapter, execFileAsync, DEFAULT_TIMEOUT_MS, DEFAULT_MAX_BUFFER, GitCommandError, DEFAULT_MAX_FILES, DEFAULT_MAX_BYTES, summarizeGitStatus, InMemoryGitSnapshotStore, DEFAULT_GIT_WORKSPACE_POLL_INTERVAL_MS, MIN_GIT_WORKSPACE_POLL_INTERVAL_MS, GitWorkspaceMonitor, GIT_COMMAND_NAMES, SNAPSHOT_REASONS, FAILURE_REASONS, defaultSnapshotStore, defaultGitCommandServices, BUSY_STATUSES, TERMINAL_STATUSES, TurnSnapshotTracker, MAX_WORKSPACES, MAX_ACTIVITY, MAX_SAVED_SESSIONS, DEFAULT_STATE, BUILTIN_IDE_DEFINITIONS, registeredIDEs, LIVE_LIFECYCLES, DEFAULT_ACTIVE_CHAT_POLL_STATUSES, DEFAULT_CHAT_TAIL_RECENT_MESSAGE_GRACE_MS, LIVE_RUNTIME_LIFECYCLES, DaemonCdpManager, CdpDomHandlers, DEFAULT_MONITOR_CONFIG, StatusMonitor, BUILTIN_CHAT_MESSAGE_KINDS, CHAT_MESSAGE_VISIBILITIES, CHAT_MESSAGE_TRANSCRIPT_VISIBILITIES, CHAT_MESSAGE_AUDIENCES, CHAT_MESSAGE_SOURCES, CHAT_MESSAGE_ACTIVITY_SOURCES, CHAT_MESSAGE_INTERNAL_SOURCES, KNOWN_CHAT_MESSAGE_KINDS, CHAT_MESSAGE_KIND_ALIASES, EXPLICIT_HIDDEN_VISIBILITIES, EXPLICIT_VISIBLE_VISIBILITIES, HIDDEN_AUDIENCES, ACTIVITY_SOURCE_SET, INTERNAL_SOURCE_SET, HISTORY_DIR, RETAIN_DAYS, SAVED_HISTORY_INDEX_VERSION, SAVED_HISTORY_INDEX_FILE, SAVED_HISTORY_INDEX_LOCK_SUFFIX, SAVED_HISTORY_INDEX_LOCK_WAIT_MS, SAVED_HISTORY_INDEX_LOCK_STALE_MS, SAVED_HISTORY_INDEX_LOCK_POLL_MS, SAVED_HISTORY_ROLLUP_THRESHOLD_BYTES, savedHistorySessionCache, savedHistoryFileSummaryCache, savedHistoryBackgroundRefresh, savedHistoryRollupInFlight, ChatHistoryWriter, IDE_PROVIDER_SESSION_CAPABILITIES_BASE, EXTENSION_PROVIDER_SESSION_CAPABILITIES_BASE, ExtensionProviderInstance, VALID_STATUSES, VALID_ROLES, VALID_BUBBLE_STATES, VALID_TURN_STATUSES, DEFAULT_APPROVAL_POSITIVE_HINTS, IdeProviderInstance, DEFAULT_CDP_SCAN_INTERVAL_MS, DEFAULT_CDP_DISCOVERY_INTERVAL_MS, DEFAULT_STATUS_INITIAL_REPORT_DELAY_MS, DEFAULT_STATUS_SERVER_REPORT_INTERVAL_MS, DEFAULT_STATUS_P2P_REPORT_INTERVAL_MS, MIN_MACHINE_RUNTIME_SUBSCRIPTION_INTERVAL_MS, DEFAULT_MACHINE_RUNTIME_SUBSCRIPTION_INTERVAL_MS, MIN_SESSION_HOST_DIAGNOSTICS_SUBSCRIPTION_INTERVAL_MS, DEFAULT_SESSION_HOST_DIAGNOSTICS_SUBSCRIPTION_INTERVAL_MS, DEFAULT_SESSION_HOST_READY_TIMEOUT_MS, STANDALONE_CDP_SCAN_INTERVAL_MS, DaemonCdpScanner, DaemonCdpInitializer, WORKING_STATUSES, FULL_STATUS_ACTIVE_CHAT_OPTIONS, LIVE_STATUS_ACTIVE_CHAT_OPTIONS, STATUS_MODAL_MESSAGE_LIMIT, STATUS_MODAL_BUTTON_LIMIT, VALID_INPUT_MEDIA_TYPES, VALID_INPUT_STRATEGIES, TEXT_ONLY_MESSAGE_INPUT_SUPPORT, IDE_SESSION_CAPABILITIES, EXTENSION_SESSION_CAPABILITIES, PTY_SESSION_CAPABILITIES, CLI_CHAT_SESSION_CAPABILITIES, ACP_SESSION_CAPABILITIES, globalStore, RECENT_SEND_WINDOW_MS, READ_CHAT_PROVIDER_EVAL_TIMEOUT_MS, HERMES_CLI_STARTING_SEND_SETTLE_MS, recentSendByTarget, DEFAULT_DEBUG_SANITIZE_OPTIONS, SECRET_KEY_PATTERN, KEY_TO_VK, COMMAND_DEBUG_LEVELS, DaemonCommandHandler, IMAGE_MIME_EXTENSIONS, MATERIALIZED_IMAGE_MAX_AGE_MS, MATERIALIZED_IMAGE_CLEANUP_INTERVAL_MS, lastMaterializedImageCleanupAt, CachedDatabaseSync, CliProviderInstance, AcpProviderInstance, chalkModule, chalkApi, COORDINATOR_DELEGATED_ENV_UNSETS, DaemonCliManager, VALID_CAPABILITY_MEDIA_TYPES, VALID_INPUT_STRATEGIES2, KNOWN_PROVIDER_FIELDS, VALUE_CONTROL_TYPES, ProviderLoader, _providerLoader, LOG_DIR2, MAX_FILE_SIZE, MAX_DAYS, SENSITIVE_KEYS, currentDate2, currentFile, writeCount2, SKIP_COMMANDS, DEFAULT_SERVER_NAME, DEFAULT_ADHDEV_MCP_COMMAND, HERMES_CLI_TYPE, HERMES_MCP_CONFIG_PATH, READ_DEBUG_ENABLED, recentReadDebugSignatureBySession, UPGRADE_HELPER_ENV, CHANNEL_NPM_TAG, CHANNEL_SERVER_URL, CHAT_COMMANDS, READ_DEBUG_ENABLED2, DaemonCommandRouter, DaemonStatusReporter, DEFAULT_DAEMON_PORT, DAEMON_WS_PATH, ProviderStreamAdapter, DaemonAgentStreamManager, AgentStreamPoller, ProviderInstanceManager, ARCHIVE_PATH, MAX_ENTRIES_PER_PROVIDER, VersionArchive, DEV_SERVER_PORT, DevServer, SessionHostRuntimeTransport, SessionHostPtyTransportFactory, DEFAULT_SESSION_HOST_APP_NAME, DEFAULT_STANDALONE_SESSION_HOST_APP_NAME, STARTUP_TIMEOUT_MS, STARTUP_POLL_MS, SessionHostCompatibilityError, EXTENSION_CATALOG, SessionRegistry;
41018
+ var path4, import_promises4, import_fs3, import_child_process, import_util3, import_os2, import_path, import_fs4, import_crypto2, import_fs5, import_path2, import_crypto3, import_fs6, import_path3, import_crypto4, import_events2, import_fs7, import_path4, import_crypto5, fs2, path8, os22, os8, os9, path14, import_child_process2, os10, path15, os11, import_child_process3, import_fs8, import_promises5, path, import_util4, import_promises6, path22, path32, fs, os4, path5, import_crypto6, path6, path7, import_fs9, import_path5, import_child_process4, import_fs10, import_os3, path9, import_child_process5, os32, path10, import_fs11, os42, import_child_process6, http, crypto2, fs3, path11, os5, fs4, os6, path12, import_crypto7, fs5, path13, os7, os13, path18, crypto4, import_fs12, import_child_process7, os12, path16, crypto3, fs6, import_module, path17, import_stream2, import_child_process8, import_child_process9, net2, os15, path20, fs7, path19, os14, fs8, path21, os16, import_child_process10, import_crypto8, import_fs13, import_module2, os17, import_path6, os18, import_child_process11, import_child_process12, fs9, os19, path222, import_os4, import_path7, fs10, fs11, path23, os20, import_child_process13, import_os5, http2, fs15, path27, fs12, path24, fs13, path25, fs14, path26, os21, import_child_process14, __defProp2, __getOwnPropDesc2, __getOwnPropNames2, __hasOwnProp2, __require2, __esm2, __export2, __copyProps2, __toCommonJS2, DEFAULT_MESH_POLICY, init_repo_mesh_types, git_worktree_exports, execFileAsync2, WORKTREE_DIR_NAME, GIT_TIMEOUT_MS, GIT_MAX_BUFFER, init_git_worktree, config_exports, DEFAULT_CONFIG, MACHINE_ID_PREFIX, init_config, mesh_config_exports, SESSION_CLEANUP_MODES, SPAWNED_SESSION_VISIBILITY_MODES, init_mesh_config, coordinator_prompt_exports, TOOLS_SECTION, TOOL_EXPOSURE_PREFLIGHT_SECTION, WORKFLOW_SECTION, init_coordinator_prompt, mesh_ledger_exports, LEDGER_DIR_NAME, MAX_FILE_SIZE_BYTES, RECENT_FAILURE_WINDOW_MS, meshLedgerEvents, init_mesh_ledger, mesh_work_queue_exports, init_mesh_work_queue, LEVEL_NUM, LEVEL_LABEL, currentLevel, LOG_DIR, MAX_LOG_SIZE, MAX_LOG_DAYS, currentDate, currentLogFile, writeCount, RING_BUFFER_SIZE, ringBuffer, origConsoleLog, origConsoleError, origConsoleWarn, LOG, interceptorInstalled, LOG_PATH, init_logger, mesh_events_exports, remoteIdleSessions, MAX_PENDING_EVENTS, pendingMeshCoordinatorEvents, MESH_COORDINATOR_EVENTS, EVENT_TO_LEDGER_KIND, init_mesh_events, NORMAL_TRACE_BUFFER_SIZE, DEV_TRACE_BUFFER_SIZE, DEFAULT_CONFIG2, currentConfig, init_debug_config, DEFAULT_BINDING_CANDIDATES, cachedBinding, cachedBindingError, GhosttyVtTerminalBackend, init_ghostty_vt_backend, TerminalCtor, XtermTerminalBackend, init_xterm_backend, DEFAULT_SCROLLBACK, loggedTerminalBackends, TerminalScreen, init_terminal_screen, init_spawn_env, cachedPty, NodePtyRuntimeTransport, NodePtyTransportFactory, init_pty_transport, TerminalTranscriptAccumulator, buildCliSpawnEnv, init_provider_cli_shared, init_provider_cli_parse, init_provider_cli_config, init_provider_cli_runtime, provider_cli_adapter_exports, ProviderCliAdapter, init_provider_cli_adapter, execFileAsync, DEFAULT_TIMEOUT_MS, DEFAULT_MAX_BUFFER, GitCommandError, DEFAULT_MAX_FILES, DEFAULT_MAX_BYTES, summarizeGitStatus, InMemoryGitSnapshotStore, DEFAULT_GIT_WORKSPACE_POLL_INTERVAL_MS, MIN_GIT_WORKSPACE_POLL_INTERVAL_MS, GitWorkspaceMonitor, GIT_COMMAND_NAMES, SNAPSHOT_REASONS, FAILURE_REASONS, defaultSnapshotStore, defaultGitCommandServices, BUSY_STATUSES, TERMINAL_STATUSES, TurnSnapshotTracker, MAX_WORKSPACES, MAX_ACTIVITY, MAX_SAVED_SESSIONS, DEFAULT_STATE, BUILTIN_IDE_DEFINITIONS, registeredIDEs, LIVE_LIFECYCLES, DEFAULT_ACTIVE_CHAT_POLL_STATUSES, DEFAULT_CHAT_TAIL_RECENT_MESSAGE_GRACE_MS, LIVE_RUNTIME_LIFECYCLES, DaemonCdpManager, CdpDomHandlers, DEFAULT_MONITOR_CONFIG, StatusMonitor, BUILTIN_CHAT_MESSAGE_KINDS, CHAT_MESSAGE_VISIBILITIES, CHAT_MESSAGE_TRANSCRIPT_VISIBILITIES, CHAT_MESSAGE_AUDIENCES, CHAT_MESSAGE_SOURCES, CHAT_MESSAGE_ACTIVITY_SOURCES, CHAT_MESSAGE_INTERNAL_SOURCES, KNOWN_CHAT_MESSAGE_KINDS, CHAT_MESSAGE_KIND_ALIASES, EXPLICIT_HIDDEN_VISIBILITIES, EXPLICIT_VISIBLE_VISIBILITIES, HIDDEN_AUDIENCES, ACTIVITY_SOURCE_SET, INTERNAL_SOURCE_SET, HISTORY_DIR, RETAIN_DAYS, SAVED_HISTORY_INDEX_VERSION, SAVED_HISTORY_INDEX_FILE, SAVED_HISTORY_INDEX_LOCK_SUFFIX, SAVED_HISTORY_INDEX_LOCK_WAIT_MS, SAVED_HISTORY_INDEX_LOCK_STALE_MS, SAVED_HISTORY_INDEX_LOCK_POLL_MS, SAVED_HISTORY_ROLLUP_THRESHOLD_BYTES, savedHistorySessionCache, savedHistoryFileSummaryCache, savedHistoryBackgroundRefresh, savedHistoryRollupInFlight, ChatHistoryWriter, IDE_PROVIDER_SESSION_CAPABILITIES_BASE, EXTENSION_PROVIDER_SESSION_CAPABILITIES_BASE, ExtensionProviderInstance, VALID_STATUSES, VALID_ROLES, VALID_BUBBLE_STATES, VALID_TURN_STATUSES, DEFAULT_APPROVAL_POSITIVE_HINTS, IdeProviderInstance, DEFAULT_CDP_SCAN_INTERVAL_MS, DEFAULT_CDP_DISCOVERY_INTERVAL_MS, DEFAULT_STATUS_INITIAL_REPORT_DELAY_MS, DEFAULT_STATUS_SERVER_REPORT_INTERVAL_MS, DEFAULT_STATUS_P2P_REPORT_INTERVAL_MS, MIN_MACHINE_RUNTIME_SUBSCRIPTION_INTERVAL_MS, DEFAULT_MACHINE_RUNTIME_SUBSCRIPTION_INTERVAL_MS, MIN_SESSION_HOST_DIAGNOSTICS_SUBSCRIPTION_INTERVAL_MS, DEFAULT_SESSION_HOST_DIAGNOSTICS_SUBSCRIPTION_INTERVAL_MS, DEFAULT_SESSION_HOST_READY_TIMEOUT_MS, STANDALONE_CDP_SCAN_INTERVAL_MS, DaemonCdpScanner, DaemonCdpInitializer, WORKING_STATUSES, FULL_STATUS_ACTIVE_CHAT_OPTIONS, LIVE_STATUS_ACTIVE_CHAT_OPTIONS, STATUS_MODAL_MESSAGE_LIMIT, STATUS_MODAL_BUTTON_LIMIT, VALID_INPUT_MEDIA_TYPES, VALID_INPUT_STRATEGIES, TEXT_ONLY_MESSAGE_INPUT_SUPPORT, IDE_SESSION_CAPABILITIES, EXTENSION_SESSION_CAPABILITIES, PTY_SESSION_CAPABILITIES, CLI_CHAT_SESSION_CAPABILITIES, ACP_SESSION_CAPABILITIES, globalStore, RECENT_SEND_WINDOW_MS, READ_CHAT_PROVIDER_EVAL_TIMEOUT_MS, HERMES_CLI_STARTING_SEND_SETTLE_MS, recentSendByTarget, DEFAULT_DEBUG_SANITIZE_OPTIONS, SECRET_KEY_PATTERN, KEY_TO_VK, COMMAND_DEBUG_LEVELS, DaemonCommandHandler, IMAGE_MIME_EXTENSIONS, MATERIALIZED_IMAGE_MAX_AGE_MS, MATERIALIZED_IMAGE_CLEANUP_INTERVAL_MS, lastMaterializedImageCleanupAt, CachedDatabaseSync, CliProviderInstance, AcpProviderInstance, chalkModule, chalkApi, COORDINATOR_DELEGATED_ENV_UNSETS, DaemonCliManager, VALID_CAPABILITY_MEDIA_TYPES, VALID_INPUT_STRATEGIES2, KNOWN_PROVIDER_FIELDS, VALUE_CONTROL_TYPES, ProviderLoader, _providerLoader, LOG_DIR2, MAX_FILE_SIZE, MAX_DAYS, SENSITIVE_KEYS, currentDate2, currentFile, writeCount2, SKIP_COMMANDS, DEFAULT_SERVER_NAME, DEFAULT_ADHDEV_MCP_COMMAND, HERMES_CLI_TYPE, HERMES_MCP_CONFIG_PATH, READ_DEBUG_ENABLED, recentReadDebugSignatureBySession, UPGRADE_HELPER_ENV, CHANNEL_NPM_TAG, CHANNEL_SERVER_URL, CHAT_COMMANDS, READ_DEBUG_ENABLED2, DaemonCommandRouter, DaemonStatusReporter, DEFAULT_DAEMON_PORT, DAEMON_WS_PATH, ProviderStreamAdapter, DaemonAgentStreamManager, AgentStreamPoller, ProviderInstanceManager, ARCHIVE_PATH, MAX_ENTRIES_PER_PROVIDER, VersionArchive, DEV_SERVER_PORT, DevServer, SessionHostRuntimeTransport, SessionHostPtyTransportFactory, DEFAULT_SESSION_HOST_APP_NAME, DEFAULT_STANDALONE_SESSION_HOST_APP_NAME, STARTUP_TIMEOUT_MS, STARTUP_POLL_MS, SessionHostCompatibilityError, EXTENSION_CATALOG, SessionRegistry;
40992
41019
  var init_dist2 = __esm({
40993
41020
  "../daemon-core/dist/index.mjs"() {
40994
41021
  "use strict";
@@ -41321,6 +41348,15 @@ Follow these recovery rules:
41321
41348
  meshLedgerEvents = new import_events2.EventEmitter();
41322
41349
  }
41323
41350
  });
41351
+ mesh_work_queue_exports = {};
41352
+ __export2(mesh_work_queue_exports, {
41353
+ claimNextTask: () => claimNextTask,
41354
+ enqueueTask: () => enqueueTask,
41355
+ getMeshQueueStats: () => getMeshQueueStats,
41356
+ getQueue: () => getQueue,
41357
+ updateSessionTaskStatus: () => updateSessionTaskStatus,
41358
+ updateTaskStatus: () => updateTaskStatus
41359
+ });
41324
41360
  init_mesh_work_queue = __esm2({
41325
41361
  "src/mesh/mesh-work-queue.ts"() {
41326
41362
  "use strict";
@@ -41404,6 +41440,7 @@ Follow these recovery rules:
41404
41440
  MAX_PENDING_EVENTS = 50;
41405
41441
  pendingMeshCoordinatorEvents = [];
41406
41442
  MESH_COORDINATOR_EVENTS = /* @__PURE__ */ new Set([
41443
+ "agent:generating_started",
41407
41444
  "agent:generating_completed",
41408
41445
  "agent:waiting_approval",
41409
41446
  "agent:stopped",
@@ -53097,6 +53134,18 @@ Run 'adhdev doctor' for detailed diagnostics.`
53097
53134
  return { success: false, error: e.message };
53098
53135
  }
53099
53136
  }
53137
+ case "get_mesh_queue": {
53138
+ const meshId = typeof args?.meshId === "string" ? args.meshId.trim() : "";
53139
+ if (!meshId) return { success: false, error: "meshId required" };
53140
+ try {
53141
+ const { getQueue: getQueue2 } = await Promise.resolve().then(() => (init_mesh_work_queue(), mesh_work_queue_exports));
53142
+ const status = Array.isArray(args?.status) ? args.status.map((s) => typeof s === "string" ? s.trim() : "").filter(Boolean) : void 0;
53143
+ const queue = getQueue2(meshId, { status });
53144
+ return { success: true, queue };
53145
+ } catch (e) {
53146
+ return { success: false, error: e.message };
53147
+ }
53148
+ }
53100
53149
  case "add_mesh_node": {
53101
53150
  const meshId = typeof args?.meshId === "string" ? args.meshId.trim() : "";
53102
53151
  const workspace = typeof args?.workspace === "string" ? args.workspace.trim() : "";
@@ -57442,6 +57491,26 @@ function unwrapCommandPayload(value) {
57442
57491
  }
57443
57492
  return current;
57444
57493
  }
57494
+ function isTerminalSessionRecord(session) {
57495
+ const status = typeof session?.status === "string" ? session.status.toLowerCase() : "";
57496
+ const lifecycle = typeof session?.lifecycle === "string" ? session.lifecycle.toLowerCase() : "";
57497
+ const state = typeof session?.state === "string" ? session.state.toLowerCase() : "";
57498
+ return [status, lifecycle, state].some((value) => ["stopped", "failed", "terminated", "exited", "closed"].includes(value));
57499
+ }
57500
+ function isIdleSessionRecord(session) {
57501
+ if (isTerminalSessionRecord(session)) return false;
57502
+ const status = typeof session?.status === "string" ? session.status.toLowerCase() : "";
57503
+ const chatStatus = typeof session?.activeChat?.status === "string" ? session.activeChat.status.toLowerCase() : "";
57504
+ return status === "idle" || chatStatus === "waiting_input";
57505
+ }
57506
+ function chooseDispatchableSession(sessions, providerType, meshId, nodeId) {
57507
+ const live = sessions.filter((session) => !isTerminalSessionRecord(session));
57508
+ const matchingProvider = (session) => !providerType || session?.providerType === providerType || session?.cliType === providerType;
57509
+ const meshSessions = live.filter(
57510
+ (session) => session?.settings?.meshNodeFor === meshId || session?.settings?.meshNodeId === nodeId
57511
+ );
57512
+ return meshSessions.find((session) => isIdleSessionRecord(session) && matchingProvider(session)) || meshSessions.find(matchingProvider) || live.find((session) => isIdleSessionRecord(session) && matchingProvider(session)) || live.find(matchingProvider) || live.find(isIdleSessionRecord) || live[0];
57513
+ }
57445
57514
  function findNestedPayload(value, predicate) {
57446
57515
  const seen = /* @__PURE__ */ new Set();
57447
57516
  const stack = [{ payload: value, depth: 0 }];
@@ -57482,18 +57551,12 @@ async function ipcDispatchToRemoteAgent(ctx, node, args) {
57482
57551
  const innerResult = relayResult?.result ?? relayResult;
57483
57552
  const statusObj = innerResult?.status ?? innerResult;
57484
57553
  const sessions = Array.isArray(statusObj?.sessions) ? statusObj.sessions : [];
57485
- const meshSessions = sessions.filter(
57486
- (s) => s?.settings?.meshNodeFor === ctx.mesh.id || s?.settings?.meshNodeId === node.id || s?.settings?.launchedByCoordinator === true
57487
- );
57488
- const targetSession = meshSessions[0] || sessions.find(
57489
- (s) => !resolvedProviderType || s?.providerType === resolvedProviderType || s?.cliType === resolvedProviderType
57490
- ) || sessions[0];
57554
+ const targetSession = chooseDispatchableSession(sessions, resolvedProviderType, ctx.mesh.id, node.id);
57491
57555
  if (targetSession?.id || targetSession?.sessionId) {
57492
57556
  sessionId = targetSession.id || targetSession.sessionId;
57493
57557
  if (!resolvedProviderType) {
57494
57558
  resolvedProviderType = targetSession.providerType || targetSession.cliType || "";
57495
57559
  }
57496
- } else {
57497
57560
  }
57498
57561
  } catch (e) {
57499
57562
  }
@@ -57502,13 +57565,17 @@ async function ipcDispatchToRemoteAgent(ctx, node, args) {
57502
57565
  return { success: false, error: `Cannot dispatch to remote node '${node.id}': providerType unknown. Set providerPriority on the node policy or call mesh_launch_session first.` };
57503
57566
  }
57504
57567
  try {
57505
- await transport.meshCommand(daemonId, "agent_command", {
57568
+ const dispatchResult = await transport.meshCommand(daemonId, "agent_command", {
57506
57569
  ...sessionId ? { targetSessionId: sessionId } : {},
57507
57570
  agentType: resolvedProviderType,
57508
57571
  cliType: resolvedProviderType,
57509
57572
  action: "send_chat",
57510
57573
  message: args.message
57511
57574
  });
57575
+ const dispatchPayload = unwrapCommandPayload(dispatchResult);
57576
+ if (dispatchPayload?.success === false || dispatchResult?.success === false) {
57577
+ return { success: false, error: `P2P dispatch failed: ${dispatchPayload?.error || dispatchResult?.error || "agent_command rejected the task"}` };
57578
+ }
57512
57579
  return { success: true, dispatched: true, sessionId: sessionId || resolvedProviderType };
57513
57580
  } catch (e) {
57514
57581
  return { success: false, error: `P2P dispatch failed: ${e?.message || String(e)}` };
@@ -58052,6 +58119,35 @@ async function meshSendTask(ctx, args) {
58052
58119
  }
58053
58120
  return JSON.stringify({ ...result, nodeId: args.node_id });
58054
58121
  }
58122
+ if (args.session_id && isLocalTransport(ctx.transport)) {
58123
+ const cached2 = meshSessionProviderMetadata.get(meshSessionCacheKey(args.node_id, args.session_id));
58124
+ const dispatchResult = await commandForNode(ctx, node, "agent_command", {
58125
+ targetSessionId: args.session_id,
58126
+ ...cached2?.providerType ? { agentType: cached2.providerType, cliType: cached2.providerType, providerType: cached2.providerType } : {},
58127
+ action: "send_chat",
58128
+ message: args.message
58129
+ });
58130
+ const dispatchPayload = unwrapCommandPayload(dispatchResult);
58131
+ if (dispatchPayload?.success === false || dispatchResult?.success === false) {
58132
+ return JSON.stringify({
58133
+ success: false,
58134
+ nodeId: args.node_id,
58135
+ sessionId: args.session_id,
58136
+ error: dispatchPayload?.error || dispatchResult?.error || "agent_command rejected the task"
58137
+ });
58138
+ }
58139
+ try {
58140
+ appendLedgerEntry(ctx.mesh.id, {
58141
+ kind: "task_dispatched",
58142
+ nodeId: args.node_id,
58143
+ sessionId: args.session_id,
58144
+ providerType: cached2?.providerType,
58145
+ payload: { message: args.message, via: "local_direct" }
58146
+ });
58147
+ } catch {
58148
+ }
58149
+ return JSON.stringify({ success: true, dispatched: true, nodeId: args.node_id, sessionId: args.session_id });
58150
+ }
58055
58151
  const task = enqueueTask(ctx.mesh.id, args.message, {
58056
58152
  targetNodeId: args.node_id,
58057
58153
  targetSessionId: args.session_id