agent-dag 1.33.57 → 1.33.59

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.
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
6
  <title>agents-deck</title>
7
7
  <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ctext y='84' font-size='84'%3E%E2%97%89%3C/text%3E%3C/svg%3E" />
8
- <script type="module" crossorigin src="/assets/index-BMwi5hcI.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-BQcrqBmU.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-CF2yG9oG.css">
10
10
  </head>
11
11
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-dag",
3
- "version": "1.33.57",
3
+ "version": "1.33.59",
4
4
  "description": "Live deck of Claude Code and Codex agents — watch parallel subagents fork, call tools, and return on one calm canvas. Also available as npx ccdeck and npx agent-dag.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1440,6 +1440,23 @@ function originMatchesHost(origin, host) {
1440
1440
  return fromOrigin !== "" && fromOrigin === fromHost;
1441
1441
  }
1442
1442
 
1443
+ // A request handler rejected. Two audiences, two different amounts of detail:
1444
+ // the operator, who needs the whole error — stack included — to find the bug,
1445
+ // and the HTTP client, which needs to know only that the request failed.
1446
+ //
1447
+ // They used to get the same string, on the theory that this server binds
1448
+ // 127.0.0.1 and its only client is the user's own tab. A DNS-rebound page
1449
+ // reaches a loopback server as same-origin and can read the body, and the
1450
+ // errors that land here carry absolute paths out of the user's home directory
1451
+ // — a failed rename of ~/.claude/settings.json, an ENOENT from an import. So
1452
+ // stderr keeps every byte and the response body carries none of it; nothing is
1453
+ // swallowed, it just stops travelling over the wire.
1454
+ export function sendInternalError(res, err, log = console.error) {
1455
+ log("agents-deck: request handler failed:", err);
1456
+ if (!res.headersSent) send(res, 500, { error: "internal error" });
1457
+ else res.end();
1458
+ }
1459
+
1443
1460
  async function tryListen(server, port, host) {
1444
1461
  return new Promise((res, rej) => {
1445
1462
  server.once("error", rej);
@@ -1479,17 +1496,7 @@ export async function startServer({ port = 4317, host = "127.0.0.1", persist = n
1479
1496
  // default for an unhandled rejection is to kill the process, which would
1480
1497
  // take the whole deck down — SSE stream, hook ingest and all — because one
1481
1498
  // background quota poll hit a network error. Answer the request instead.
1482
- const guard = (p, res) => Promise.resolve(p).catch(err => {
1483
- console.error("agents-deck: request handler failed:", err?.message ?? err);
1484
- // The message goes to the browser too. This server binds 127.0.0.1 and its
1485
- // only client is the user's own tab, so the usual reason to withhold it
1486
- // does not apply — while withholding it is how a ReferenceError in the
1487
- // import path spent a release looking like a rejected share.
1488
- if (!res.headersSent) {
1489
- send(res, 500, { error: "internal error", detail: String(err?.message ?? err).slice(0, 300) });
1490
- }
1491
- else res.end();
1492
- });
1499
+ const guard = (p, res) => Promise.resolve(p).catch(err => sendInternalError(res, err));
1493
1500
 
1494
1501
  const server = createServer((req, res) => {
1495
1502
  const url = requestUrl(req.url);