agent-dag 1.35.12 → 1.35.13

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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ccdeck
4
4
 
5
- **A live canvas for your AI agents.** Watch Claude Code and OpenAI Codex fork subagents, call tools, and finish — all on one calm graph, in real time.
5
+ **A live canvas for your AI agents.** Watch Claude Code and OpenAI Codex call tools and finish — every Claude Code subagent on a node of its own — all on one calm graph, in real time.
6
6
 
7
7
  [![npm](https://img.shields.io/npm/v/ccdeck?color=cb3837&logo=npm&logoColor=white)](https://www.npmjs.com/package/ccdeck)
8
8
  [![npm downloads](https://img.shields.io/npm/dm/agents-deck?color=blue)](https://www.npmjs.com/package/agents-deck)
package/bin/deck.js CHANGED
@@ -10,7 +10,8 @@ import { existsSync, readFileSync } from "node:fs";
10
10
  import { dieOfSignal } from "../src/server/supervisor.mjs";
11
11
  import {
12
12
  CURSOR_HIDE, CURSOR_SHOW, colorProfile, fit, glyphs, labelColumn, link, motionOK, palette,
13
- pulseText, spinnerFrames, statusLine, supportsHyperlinks, termColumns, unicodeOK, wordmark,
13
+ pulseText, spinnerFrames, statusLine, supportsHyperlinks, termColumns, unicodeOK,
14
+ unregisteredDetail, wordmark,
14
15
  } from "../src/server/term.mjs";
15
16
  import { PRODUCT } from "../src/server/brand.mjs";
16
17
  import { invokedName, renameNotice } from "../src/server/invoked-as.mjs";
@@ -600,9 +601,13 @@ if (openBrowser && !RESPAWN) {
600
601
  if (MOTION) {
601
602
  let pi = 0;
602
603
  setInterval(() => {
603
- const text = pulseText({ registered, columns: cols(), unicode: UNICODE });
604
- const dot = pi++ % 2 === 0 ? (registered ? P.ok : P.warn) : P.muted;
605
- const tone = registered ? P.muted : P.warn;
604
+ // The colour follows the words. A Codex-only deck keeps saying "listening"
605
+ // when it is unregistered see pulseText and painting that sentence in
606
+ // the warning tone would restore the alarm the sentence just retired.
607
+ const alarm = !registered && wantClaude;
608
+ const text = pulseText({ registered, claude: wantClaude, columns: cols(), unicode: UNICODE });
609
+ const dot = pi++ % 2 === 0 ? (alarm ? P.warn : P.ok) : P.muted;
610
+ const tone = alarm ? P.warn : P.muted;
606
611
  write(`\r ${dot}${G.pulse}${P.reset} ${tone}${text}${P.reset}`);
607
612
  }, 800).unref();
608
613
  }
@@ -637,14 +642,17 @@ process.on("beforeExit", () => { discovery.stop(); removeDiscovery(discoveryFile
637
642
 
638
643
  // ── helpers ───────────────────────────────────────────────────────────────────
639
644
 
640
- // The deck is up and the hooks cannot see it. Said in full — the path, the
641
- // reason — because the alternative is what this replaced: an ordinary-looking
642
- // deck that simply never shows a session.
645
+ // The deck is up and the discovery file could not be written. Said in full —
646
+ // the path, the reason — because the alternative is what this replaced: an
647
+ // ordinary-looking deck that simply never shows a session.
648
+ //
649
+ // What that costs depends on which CLI this deck watches, so the sentence comes
650
+ // from term.mjs, where both answers are written down and tested.
643
651
  function reportUnregistered({ file, error }) {
644
652
  const why = error?.message ? ` ${G.dash} ${error.message}` : "";
645
653
  write(
646
654
  `\n ${P.warn}${G.warn}${P.reset} ${P.bold}not registered${P.reset}${P.muted}${why}${P.reset}\n` +
647
- ` ${P.muted}hooks find this deck through ${file}, so until that file exists no events arrive.${P.reset}\n`,
655
+ ` ${P.muted}${unregisteredDetail({ file, claude: wantClaude })}${P.reset}\n`,
648
656
  );
649
657
  }
650
658