@adhdev/daemon-standalone 0.9.82-rc.172 → 0.9.82-rc.173

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/public/index.html CHANGED
@@ -7,9 +7,9 @@
7
7
  <meta name="description" content="ADHDev self-hosted dashboard for controlling AI agents" />
8
8
  <link rel="icon" href="/otter-logo.png" />
9
9
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet" />
10
- <script type="module" crossorigin src="/assets/index-hxj4PXgC.js"></script>
10
+ <script type="module" crossorigin src="/assets/index-DcGt6j-i.js"></script>
11
11
  <link rel="modulepreload" crossorigin href="/assets/vendor-DNk1FT1R.js">
12
- <link rel="stylesheet" crossorigin href="/assets/index-xCZFA0tp.css">
12
+ <link rel="stylesheet" crossorigin href="/assets/index-BSeeeP5M.css">
13
13
  </head>
14
14
  <body>
15
15
  <!-- Apply theme immediately to prevent FOIT (Flash of Incorrect Theme) -->
@@ -1724,7 +1724,9 @@ var MESH_ENQUEUE_TASK_TOOL = {
1724
1724
  properties: {
1725
1725
  message: { type: "string", description: "The task instruction for the agent." },
1726
1726
  task_mode: { type: "string", enum: ["code_change", "validation", "live_debug_readonly", "launch_app", "convergence"], description: "Optional task-mode contract. live_debug_readonly rejects obvious write/commit/push/deploy/destructive instructions before dispatch." },
1727
- taskMode: { type: "string", enum: ["code_change", "validation", "live_debug_readonly", "launch_app", "convergence"], description: "CamelCase alias for task_mode." }
1727
+ taskMode: { type: "string", enum: ["code_change", "validation", "live_debug_readonly", "launch_app", "convergence"], description: "CamelCase alias for task_mode." },
1728
+ requiredTags: { type: "array", items: { type: "string" }, description: "Optional capability tags that every eligible node must have, e.g. os=darwin, provider=codex-cli, gpu." },
1729
+ required_tags: { type: "array", items: { type: "string" }, description: "Snake_case alias for requiredTags." }
1728
1730
  },
1729
1731
  required: ["message"]
1730
1732
  }
@@ -2364,12 +2366,13 @@ async function meshListNodes(ctx) {
2364
2366
  }
2365
2367
  async function meshEnqueueTask(ctx, args) {
2366
2368
  const taskMode = readString(args.task_mode) || readString(args.taskMode);
2369
+ const requiredTags = (0, import_daemon_core.normalizeMeshCapabilityTags)(Array.isArray(args.requiredTags) ? args.requiredTags : args.required_tags);
2367
2370
  try {
2368
- const task = (0, import_daemon_core.enqueueTask)(ctx.mesh.id, args.message, { taskMode });
2371
+ const task = (0, import_daemon_core.enqueueTask)(ctx.mesh.id, args.message, { taskMode, requiredTags });
2369
2372
  if (isLocalTransport(ctx.transport) && !(ctx.transport instanceof IpcTransport)) {
2370
2373
  ctx.transport.command("trigger_mesh_queue", { meshId: ctx.mesh.id }).catch(() => {
2371
2374
  });
2372
- return JSON.stringify({ success: true, source: "queue", taskId: task.id, status: task.status, taskMode: task.taskMode });
2375
+ return JSON.stringify({ success: true, source: "queue", taskId: task.id, status: task.status, taskMode: task.taskMode, requiredTags: task.requiredTags });
2373
2376
  }
2374
2377
  if (ctx.transport instanceof IpcTransport) {
2375
2378
  ctx.transport.command("trigger_mesh_queue", { meshId: ctx.mesh.id }).catch(() => {
@@ -2378,6 +2381,7 @@ async function meshEnqueueTask(ctx, args) {
2378
2381
  for (const node of ctx.mesh.nodes) {
2379
2382
  const isLocalNode = isLocalControlPlaneNode(ctx, node);
2380
2383
  if (isLocalNode || !node.daemonId) continue;
2384
+ if (!(0, import_daemon_core.nodeSatisfiesRequiredTags)(requiredTags, (0, import_daemon_core.buildMeshNodeCapabilityTags)(node))) continue;
2381
2385
  dispatchPromises.push(
2382
2386
  ipcDispatchToRemoteAgent(ctx, node, { message: args.message }).then((result) => {
2383
2387
  if (result.success) {
@@ -2424,9 +2428,9 @@ async function meshEnqueueTask(ctx, args) {
2424
2428
  }
2425
2429
  Promise.all(dispatchPromises).catch(() => {
2426
2430
  });
2427
- return JSON.stringify({ success: true, source: "queue", taskId: task.id, status: task.status, taskMode: task.taskMode });
2431
+ return JSON.stringify({ success: true, source: "queue", taskId: task.id, status: task.status, taskMode: task.taskMode, requiredTags: task.requiredTags });
2428
2432
  }
2429
- return JSON.stringify({ success: true, source: "queue", taskId: task.id, status: task.status, taskMode: task.taskMode });
2433
+ return JSON.stringify({ success: true, source: "queue", taskId: task.id, status: task.status, taskMode: task.taskMode, requiredTags: task.requiredTags });
2430
2434
  } catch (e) {
2431
2435
  const message = e?.message || String(e);
2432
2436
  if (message.includes("live_debug_readonly_guardrail_violation")) {