@adhdev/daemon-standalone 0.9.82-rc.310 → 0.9.82-rc.312

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-BvERTcmY.js"></script>
10
+ <script type="module" crossorigin src="/assets/index-jzEwV60L.js"></script>
11
11
  <link rel="modulepreload" crossorigin href="/assets/vendor-BHUMCOj6.js">
12
- <link rel="stylesheet" crossorigin href="/assets/index-D5P43B4N.css">
12
+ <link rel="stylesheet" crossorigin href="/assets/index-Cw4o3csc.css">
13
13
  </head>
14
14
  <body>
15
15
  <!-- Apply theme immediately to prevent FOIT (Flash of Incorrect Theme) -->
@@ -2404,6 +2404,21 @@ var MESH_GIT_STATUS_TOOL = {
2404
2404
  required: ["node_id"]
2405
2405
  }
2406
2406
  };
2407
+ var MESH_READ_NODE_LOGS_TOOL = {
2408
+ name: "mesh_read_node_logs",
2409
+ description: "Fetch a recent daemon LOG tail directly from a (possibly remote) mesh node over P2P \u2014 no session launch, no PowerShell/shell grep on the remote machine. Use this to debug a node's daemon: read its error/warn lines, grep for a pattern, or read since a timestamp. The reply is byte-bounded (\u2264128KB, default 64KB; truncated:true when the file was larger, newest lines kept) and secrets (API keys, machine secrets, bearer tokens, JWTs, TURN credentials) are redacted before transmission. This reads the DAEMON log, not an agent session transcript \u2014 for a session transcript use mesh_read_chat / mesh_read_debug.",
2410
+ inputSchema: {
2411
+ type: "object",
2412
+ properties: {
2413
+ node_id: { type: "string", description: "Target node ID (the daemon owning it serves its own log)." },
2414
+ grep: { type: "string", description: "Optional regex (case-insensitive) \u2014 only matching log lines are returned. Invalid regex falls back to a literal substring match." },
2415
+ since_ms: { type: "number", description: "Optional epoch-ms floor \u2014 only log lines at/after this time are returned (lines without a parseable timestamp are kept)." },
2416
+ tail_bytes: { type: "number", description: "Max bytes of log tail to read (default 65536, capped at 131072). Larger files are truncated to the newest tail_bytes." },
2417
+ date: { type: "string", description: "Optional YYYY-MM-DD log date (defaults to today). Falls back to the size-rotation backup when the active file is absent." }
2418
+ },
2419
+ required: ["node_id"]
2420
+ }
2421
+ };
2407
2422
  var MESH_FAST_FORWARD_NODE_TOOL = {
2408
2423
  name: "mesh_fast_forward_node",
2409
2424
  description: 'Safely dry-run or execute an obvious direct fast-forward for a mesh node without launching an agent session. mode="merge" (default) absorbs upstream commits into the local branch via git merge --ff-only (ahead=0, behind>0). mode="push" publishes local commits to origin via a strict ff-only push (HEAD must be a descendant of origin/<branch>). Defaults to dry-run; execution requires execute=true. Never force-pushes, rebases, resets, cleans, or checks out arbitrary revisions. When the merge path finds the branch ahead with nothing to merge, it returns code "ahead_needs_push" pointing at mode="push".',
@@ -2668,6 +2683,7 @@ var ALL_MESH_TOOLS = [
2668
2683
  MESH_READ_DEBUG_TOOL,
2669
2684
  MESH_LAUNCH_SESSION_TOOL,
2670
2685
  MESH_GIT_STATUS_TOOL,
2686
+ MESH_READ_NODE_LOGS_TOOL,
2671
2687
  MESH_FAST_FORWARD_NODE_TOOL,
2672
2688
  MESH_CHECKPOINT_TOOL,
2673
2689
  MESH_APPROVE_TOOL,
@@ -4146,6 +4162,28 @@ async function meshGitStatus(ctx, args) {
4146
4162
  }, null, 2);
4147
4163
  }
4148
4164
  }
4165
+ async function meshReadNodeLogs(ctx, args) {
4166
+ const node = await findNodeWithRefresh(ctx, args.node_id);
4167
+ try {
4168
+ const result = await commandForNode(ctx, node, "get_mesh_node_logs", {
4169
+ meshId: ctx.mesh.id,
4170
+ nodeId: args.node_id,
4171
+ ...typeof args.grep === "string" && args.grep.trim() ? { grep: args.grep.trim() } : {},
4172
+ ...Number.isFinite(args.since_ms) ? { sinceMs: args.since_ms } : {},
4173
+ ...Number.isFinite(args.tail_bytes) ? { tailBytes: args.tail_bytes } : {},
4174
+ ...typeof args.date === "string" && args.date.trim() ? { date: args.date.trim() } : {}
4175
+ });
4176
+ const payload = unwrapCommandPayload(result);
4177
+ return JSON.stringify(payload, null, 2);
4178
+ } catch (e) {
4179
+ const failure = buildCoordinatorP2pRelayFailure(e, {
4180
+ command: "get_mesh_node_logs",
4181
+ targetDaemonId: node.daemonId,
4182
+ nodeId: args.node_id
4183
+ });
4184
+ return JSON.stringify(failure, null, 2);
4185
+ }
4186
+ }
4149
4187
  async function meshFastForwardNode(ctx, args) {
4150
4188
  await refreshMeshFromDaemon(ctx);
4151
4189
  const node = await findNodeWithRefresh(ctx, args.node_id);
@@ -5557,6 +5595,9 @@ async function startMcpServer(opts) {
5557
5595
  case "mesh_git_status":
5558
5596
  text = await meshGitStatus(meshCtx, a);
5559
5597
  break;
5598
+ case "mesh_read_node_logs":
5599
+ text = await meshReadNodeLogs(meshCtx, a);
5600
+ break;
5560
5601
  case "mesh_fast_forward_node":
5561
5602
  text = await meshFastForwardNode(meshCtx, a);
5562
5603
  break;