exempclaw 0.4.0 → 0.4.1

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/dist/index.js CHANGED
@@ -24,7 +24,7 @@ const program = new Command();
24
24
  program
25
25
  .name("exempclaw")
26
26
  .description("Build and run Claude-powered agents from a friendly terminal menu. Run with no arguments to open it.")
27
- .version("0.4.0");
27
+ .version("0.4.1");
28
28
  program
29
29
  .command("init")
30
30
  .description("Scaffold a new agent config JSON (interactive unless flags cover it).")
package/dist/ui/app.js CHANGED
@@ -23,8 +23,8 @@ class ErrorBoundary extends React.Component {
23
23
  }
24
24
  }
25
25
  export function App({ services, initialAgents, initialBroken, }) {
26
- // First run with zero agents goes straight into the create wizard.
27
- const [route, setRoute] = useState(initialAgents.length === 0 ? { name: "create" } : { name: "home" });
26
+ // Always open on the home dashboard; the user chooses "New agent" when ready.
27
+ const [route, setRoute] = useState({ name: "home" });
28
28
  const [agents, setAgents] = useState(initialAgents);
29
29
  const [broken, setBroken] = useState(initialBroken);
30
30
  useEffect(() => {
@@ -39,7 +39,7 @@ export function App({ services, initialAgents, initialBroken, }) {
39
39
  const screen = (() => {
40
40
  switch (route.name) {
41
41
  case "home":
42
- return (_jsx(HomeScreen, { agentCount: agents.length, pluginCount: services.plugins.plugins.length, pluginFailures: services.applied.failures.length, onNavigate: setRoute }));
42
+ return _jsx(HomeScreen, { services: services, agents: agents, onNavigate: setRoute });
43
43
  case "agents":
44
44
  return _jsx(AgentsScreen, { services: services, onNavigate: setRoute });
45
45
  case "agent":
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/ui/app.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/ui/app.tsx"],"names":[],"mappings":"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"}
@@ -40,8 +40,9 @@ test("home menu renders and navigates", async () => {
40
40
  await new Promise((r) => setImmediate(r));
41
41
  assert.match(lastFrame(), /New agent/);
42
42
  });
43
- test("zero agents starts on the create wizard", () => {
43
+ test("zero agents still opens on the home dashboard (not the wizard)", () => {
44
44
  const { lastFrame } = render(_jsx(App, { services: stubServices(), initialAgents: [], initialBroken: [] }));
45
- assert.match(lastFrame(), /New agent/);
45
+ assert.match(lastFrame(), /E X E M P C L A W/);
46
+ assert.match(lastFrame(), /0 configured/);
46
47
  });
47
48
  //# sourceMappingURL=app.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.test.js","sourceRoot":"","sources":["../../src/ui/app.test.tsx"],"names":[],"mappings":";AAAA,sBAAsB;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAiB,MAAM,eAAe,CAAC;AAE9D,SAAS,YAAY;IACnB,OAAO;QACL,MAAM,EAAE;YACN,YAAY,EAAE,iBAAiB;YAC/B,OAAO,EAAE,sBAAsB;YAC/B,QAAQ,EAAE,OAAO;YACjB,YAAY,EAAE,KAAK;YACnB,mBAAmB,EAAE,OAAO;SAC7B;QACD,SAAS,EAAE,wBAAwB;QACnC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACtC,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzC,SAAS,EAAE,IAAI,cAAc,EAAE;QAC/B,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACpD,eAAe,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAChF,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,GAAG,GAAG;IACV,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;CAC9F,CAAC;AAEF,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;IACjD,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,CACjC,KAAC,GAAG,IAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,CAAC,GAAY,CAAC,EAAE,aAAa,EAAE,EAAE,GAAI,CACpF,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,SAAS,EAAG,EAAE,mBAAmB,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,CAAC,SAAS,EAAG,EAAE,QAAQ,CAAC,CAAC;IACrC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAG,EAAE,cAAc,CAAC,CAAC;IAC3C,kDAAkD;IAClD,+EAA+E;IAC/E,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa;IACpC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;IAC3B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,CAAC,SAAS,EAAG,EAAE,WAAW,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACnD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,GAAG,IAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,GAAI,CAAC,CAAC;IACtG,MAAM,CAAC,KAAK,CAAC,SAAS,EAAG,EAAE,WAAW,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"app.test.js","sourceRoot":"","sources":["../../src/ui/app.test.tsx"],"names":[],"mappings":";AAAA,sBAAsB;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAiB,MAAM,eAAe,CAAC;AAE9D,SAAS,YAAY;IACnB,OAAO;QACL,MAAM,EAAE;YACN,YAAY,EAAE,iBAAiB;YAC/B,OAAO,EAAE,sBAAsB;YAC/B,QAAQ,EAAE,OAAO;YACjB,YAAY,EAAE,KAAK;YACnB,mBAAmB,EAAE,OAAO;SAC7B;QACD,SAAS,EAAE,wBAAwB;QACnC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACtC,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzC,SAAS,EAAE,IAAI,cAAc,EAAE;QAC/B,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACpD,eAAe,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAChF,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,GAAG,GAAG;IACV,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;CAC9F,CAAC;AAEF,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;IACjD,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,CACjC,KAAC,GAAG,IAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,CAAC,GAAY,CAAC,EAAE,aAAa,EAAE,EAAE,GAAI,CACpF,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,SAAS,EAAG,EAAE,mBAAmB,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,CAAC,SAAS,EAAG,EAAE,QAAQ,CAAC,CAAC;IACrC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAG,EAAE,cAAc,CAAC,CAAC;IAC3C,kDAAkD;IAClD,+EAA+E;IAC/E,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa;IACpC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;IAC3B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,CAAC,SAAS,EAAG,EAAE,WAAW,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gEAAgE,EAAE,GAAG,EAAE;IAC1E,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,GAAG,IAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,GAAI,CAAC,CAAC;IACtG,MAAM,CAAC,KAAK,CAAC,SAAS,EAAG,EAAE,mBAAmB,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,CAAC,SAAS,EAAG,EAAE,cAAc,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Tiny dependency-free chart primitives for the terminal dashboard.
3
+ * They return plain strings rendered inside ink <Text> with color applied
4
+ * by the caller — so they stay pure and unit-testable.
5
+ */
6
+ /**
7
+ * Renders a series as a unicode sparkline (one block char per value).
8
+ * Heights scale to the series max; an all-zero series renders as a flat floor.
9
+ */
10
+ export declare function sparkline(values: number[]): string;
11
+ /** A horizontal meter: filled blocks for `value/max`, light blocks for the rest. */
12
+ export declare function bar(value: number, max: number, width: number): string;
13
+ /** Compact money: $1.2k, $42.17, $0.00. */
14
+ export declare function money(usd: number): string;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Tiny dependency-free chart primitives for the terminal dashboard.
3
+ * They return plain strings rendered inside ink <Text> with color applied
4
+ * by the caller — so they stay pure and unit-testable.
5
+ */
6
+ const BLOCKS = ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"];
7
+ /**
8
+ * Renders a series as a unicode sparkline (one block char per value).
9
+ * Heights scale to the series max; an all-zero series renders as a flat floor.
10
+ */
11
+ export function sparkline(values) {
12
+ if (values.length === 0)
13
+ return "";
14
+ const max = Math.max(...values);
15
+ if (max <= 0)
16
+ return BLOCKS[0].repeat(values.length);
17
+ return values
18
+ .map((v) => {
19
+ const idx = Math.max(0, Math.min(BLOCKS.length - 1, Math.round((v / max) * (BLOCKS.length - 1))));
20
+ return BLOCKS[idx];
21
+ })
22
+ .join("");
23
+ }
24
+ /** A horizontal meter: filled blocks for `value/max`, light blocks for the rest. */
25
+ export function bar(value, max, width) {
26
+ if (width <= 0)
27
+ return "";
28
+ if (max <= 0)
29
+ return "░".repeat(width);
30
+ const filled = Math.max(0, Math.min(width, Math.round((value / max) * width)));
31
+ return "█".repeat(filled) + "░".repeat(width - filled);
32
+ }
33
+ /** Compact money: $1.2k, $42.17, $0.00. */
34
+ export function money(usd) {
35
+ if (usd >= 1000)
36
+ return `$${(usd / 1000).toFixed(1)}k`;
37
+ return `$${usd.toFixed(2)}`;
38
+ }
39
+ //# sourceMappingURL=chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.js","sourceRoot":"","sources":["../../../src/ui/components/chart.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAEjE;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,MAAgB;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAChC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClG,OAAO,MAAM,CAAC,GAAG,CAAE,CAAC;IACtB,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,KAAa;IAC3D,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/E,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACvD,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { RunRecord } from "../core/run-log.js";
2
+ export interface AgentSpend {
3
+ id: string;
4
+ spendUsd: number;
5
+ runs: number;
6
+ }
7
+ export interface FleetStats {
8
+ totalRuns: number;
9
+ totalSpendUsd: number;
10
+ spendTodayUsd: number;
11
+ /** Run counts for the last 7 days, oldest → newest (index 6 = today). */
12
+ runsPerDay: number[];
13
+ /** Per-agent spend, highest first. */
14
+ spendByAgent: AgentSpend[];
15
+ /** Most recent runs across the whole fleet, newest first. */
16
+ recent: RunRecord[];
17
+ }
18
+ /**
19
+ * Rolls every agent's run log up into the numbers the dashboard renders:
20
+ * totals, today's spend, a 7-day run histogram, per-agent spend, and a
21
+ * recent-activity slice. Empty/missing data dir yields all-zero stats.
22
+ */
23
+ export declare function loadFleetStats(dataDir: string, now?: number): Promise<FleetStats>;
@@ -0,0 +1,44 @@
1
+ import { loadFleetHistory } from "./history-data.js";
2
+ const DAY_MS = 86_400_000;
3
+ /**
4
+ * Rolls every agent's run log up into the numbers the dashboard renders:
5
+ * totals, today's spend, a 7-day run histogram, per-agent spend, and a
6
+ * recent-activity slice. Empty/missing data dir yields all-zero stats.
7
+ */
8
+ export async function loadFleetStats(dataDir, now = Date.now()) {
9
+ const runs = await loadFleetHistory(dataDir); // already newest-first
10
+ const startOfToday = new Date(now);
11
+ startOfToday.setHours(0, 0, 0, 0);
12
+ let totalSpendUsd = 0;
13
+ let spendTodayUsd = 0;
14
+ const byAgent = new Map();
15
+ const runsPerDay = new Array(7).fill(0);
16
+ for (const record of runs) {
17
+ const cost = record.costUsd ?? 0;
18
+ totalSpendUsd += cost;
19
+ const entry = byAgent.get(record.agentId) ?? { spendUsd: 0, runs: 0 };
20
+ entry.spendUsd += cost;
21
+ entry.runs += 1;
22
+ byAgent.set(record.agentId, entry);
23
+ const startedAt = Date.parse(record.startedAt);
24
+ if (Number.isFinite(startedAt)) {
25
+ if (startedAt >= startOfToday.getTime())
26
+ spendTodayUsd += cost;
27
+ const ageDays = Math.floor((now - startedAt) / DAY_MS);
28
+ if (ageDays >= 0 && ageDays < 7)
29
+ runsPerDay[6 - ageDays] += 1;
30
+ }
31
+ }
32
+ const spendByAgent = [...byAgent.entries()]
33
+ .map(([id, v]) => ({ id, spendUsd: v.spendUsd, runs: v.runs }))
34
+ .sort((a, b) => b.spendUsd - a.spendUsd || b.runs - a.runs);
35
+ return {
36
+ totalRuns: runs.length,
37
+ totalSpendUsd,
38
+ spendTodayUsd,
39
+ runsPerDay,
40
+ spendByAgent,
41
+ recent: runs.slice(0, 6),
42
+ };
43
+ }
44
+ //# sourceMappingURL=dashboard-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-data.js","sourceRoot":"","sources":["../../src/ui/dashboard-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAqBrD,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IAC5E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB;IACrE,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAElC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,IAAI,GAAG,EAA8C,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhD,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;QACjC,aAAa,IAAI,IAAI,CAAC;QAEtB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACtE,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC;QACvB,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,IAAI,SAAS,IAAI,YAAY,CAAC,OAAO,EAAE;gBAAE,aAAa,IAAI,IAAI,CAAC;YAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC;YACvD,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC;gBAAE,UAAU,CAAC,CAAC,GAAG,OAAO,CAAE,IAAI,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAiB,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;SACtD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SAC9D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAE9D,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,MAAM;QACtB,aAAa;QACb,aAAa;QACb,UAAU;QACV,YAAY;QACZ,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;KACzB,CAAC;AACJ,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import React from "react";
2
+ import type { Services } from "../services.js";
3
+ import type { RegisteredAgent } from "../../agents/registry.js";
2
4
  import type { Route } from "../app.js";
3
- export declare function HomeScreen({ agentCount, pluginCount, pluginFailures, onNavigate, }: {
4
- agentCount: number;
5
- pluginCount: number;
6
- pluginFailures: number;
5
+ export declare function HomeScreen({ services, agents, onNavigate, }: {
6
+ services: Services;
7
+ agents: RegisteredAgent[];
7
8
  onNavigate: (route: Route) => void;
8
9
  }): React.JSX.Element;
@@ -1,14 +1,69 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
2
3
  import { Box, Text, useApp } from "ink";
3
- import { Claw } from "../theme.js";
4
+ import { Claw, AMBER } from "../theme.js";
4
5
  import { MenuList } from "../components/menu.js";
5
6
  import { KeyHints } from "../components/key-hints.js";
6
- export function HomeScreen({ agentCount, pluginCount, pluginFailures, onNavigate, }) {
7
+ import { sparkline, bar, money } from "../components/chart.js";
8
+ import { loadFleetStats } from "../dashboard-data.js";
9
+ import { timeAgo } from "../agents-data.js";
10
+ const CYAN = "#36d3c8";
11
+ const GREEN = "#7CE38B";
12
+ const MAGENTA = "#c792ea";
13
+ const EMPTY_STATS = {
14
+ totalRuns: 0,
15
+ totalSpendUsd: 0,
16
+ spendTodayUsd: 0,
17
+ runsPerDay: [0, 0, 0, 0, 0, 0, 0],
18
+ spendByAgent: [],
19
+ recent: [],
20
+ };
21
+ /** Truncate/pad a label to a fixed width so columns line up. */
22
+ function fit(text, width) {
23
+ if (text.length === width)
24
+ return text;
25
+ if (text.length > width)
26
+ return `${text.slice(0, width - 1)}…`;
27
+ return text.padEnd(width);
28
+ }
29
+ function StatCard({ label, value, accent, spark, sub, }) {
30
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: accent, paddingX: 1, width: 18, children: [_jsx(Text, { dimColor: true, children: label }), _jsx(Text, { bold: true, color: accent, children: value }), spark ? _jsx(Text, { color: accent, children: spark }) : _jsx(Text, { dimColor: true, children: sub ?? " " })] }));
31
+ }
32
+ function Panel({ title, width, children, }) {
33
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, width: width, children: [_jsx(Text, { bold: true, dimColor: true, children: title }), children] }));
34
+ }
35
+ export function HomeScreen({ services, agents, onNavigate, }) {
7
36
  const { exit } = useApp();
37
+ const [stats, setStats] = useState(EMPTY_STATS);
38
+ const [frame, setFrame] = useState(0);
39
+ useEffect(() => {
40
+ let live = true;
41
+ void loadFleetStats(services.config.dataDir).then((s) => {
42
+ if (live)
43
+ setStats(s);
44
+ });
45
+ return () => {
46
+ live = false;
47
+ };
48
+ }, [services]);
49
+ // Drives the live clock + heartbeat pulse (the claw animates on its own timer).
50
+ useEffect(() => {
51
+ const timer = setInterval(() => setFrame((f) => f + 1), 500);
52
+ timer.unref?.();
53
+ return () => clearInterval(timer);
54
+ }, []);
55
+ const pluginCount = services.plugins.plugins.length;
56
+ const pluginFailures = services.applied.failures.length;
57
+ const toolCount = services.plugins.plugins.reduce((n, p) => n + (p.spec.tools?.length ?? 0), 0);
58
+ const channels = agents.reduce((n, a) => n + a.config.connectors.length, 0);
59
+ const names = new Map(agents.map((a) => [a.config.id, a.config.persona.name]));
60
+ const clock = new Date().toTimeString().slice(0, 8);
61
+ const pulseOn = frame % 2 === 0;
62
+ const maxSpend = Math.max(...stats.spendByAgent.map((a) => a.spendUsd), 0.000001);
8
63
  const items = [
9
- { value: "agents", label: "Agents", hint: `${agentCount} configured` },
64
+ { value: "agents", label: "Agents", hint: `${agents.length} configured` },
10
65
  { value: "create", label: "New agent", hint: "guided setup" },
11
- { value: "history", label: "History", hint: "all runs, all agents" },
66
+ { value: "history", label: "History", hint: `${stats.totalRuns} runs` },
12
67
  {
13
68
  value: "plugins",
14
69
  label: "Plugins",
@@ -17,19 +72,23 @@ export function HomeScreen({ agentCount, pluginCount, pluginFailures, onNavigate
17
72
  { value: "doctor", label: "Doctor", hint: "check my setup" },
18
73
  { value: "quit", label: "Quit" },
19
74
  ];
20
- return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsxs(Box, { gap: 1, marginBottom: 1, children: [_jsx(Claw, {}), _jsx(Text, { bold: true, color: "#ffaf00", children: "E X E M P C L A W" }), _jsx(Text, { dimColor: true, children: "fleet command" })] }), _jsx(MenuList, { items: items, onSelect: (value) => {
21
- if (value === "quit")
22
- exit();
23
- else if (value === "agents")
24
- onNavigate({ name: "agents" });
25
- else if (value === "create")
26
- onNavigate({ name: "create" });
27
- else if (value === "history")
28
- onNavigate({ name: "history" });
29
- else if (value === "plugins")
30
- onNavigate({ name: "plugins" });
31
- else if (value === "doctor")
32
- onNavigate({ name: "doctor" });
33
- }, onBack: () => exit() }), _jsx(KeyHints, { hints: ["↑↓ move", "enter select", "q quit"] })] }));
75
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsxs(Box, { justifyContent: "space-between", marginBottom: 1, children: [_jsxs(Box, { gap: 1, children: [_jsx(Claw, {}), _jsx(Text, { bold: true, color: AMBER, children: "E X E M P C L A W" }), _jsx(Text, { dimColor: true, children: "\u00B7 fleet command center" })] }), _jsxs(Box, { gap: 2, children: [_jsxs(Text, { color: pulseOn ? GREEN : "gray", children: [pulseOn ? "●" : "○", " live"] }), _jsxs(Text, { dimColor: true, children: ["\u25F7 ", clock] })] })] }), _jsxs(Box, { gap: 1, children: [_jsx(StatCard, { accent: CYAN, label: "AGENTS", value: String(agents.length), sub: `${channels} channel${channels === 1 ? "" : "s"}` }), _jsx(StatCard, { accent: AMBER, label: "RUNS \u00B7 7d", value: String(stats.totalRuns), spark: sparkline(stats.runsPerDay) }), _jsx(StatCard, { accent: GREEN, label: "SPEND", value: money(stats.totalSpendUsd), sub: `${money(stats.spendTodayUsd)} today` }), _jsx(StatCard, { accent: MAGENTA, label: "PLUGINS", value: String(pluginCount), sub: pluginFailures ? `${pluginFailures} broken` : `${toolCount} tool${toolCount === 1 ? "" : "s"}` })] }), _jsxs(Box, { gap: 1, marginTop: 1, children: [_jsx(Panel, { title: "TOP AGENTS", width: 37, children: stats.spendByAgent.length === 0 ? (_jsx(Text, { dimColor: true, children: "No runs yet \u2014 press \u21B5 on \u201CNew agent\u201D." })) : (stats.spendByAgent.slice(0, 4).map((a) => (_jsxs(Text, { children: [fit(names.get(a.id) ?? a.id, 9), " ", _jsx(Text, { color: AMBER, children: bar(a.spendUsd, maxSpend, 10) }), " ", _jsx(Text, { dimColor: true, children: money(a.spendUsd) })] }, a.id)))) }), _jsx(Panel, { title: "RECENT ACTIVITY", width: 37, children: stats.recent.length === 0 ? (_jsx(Text, { dimColor: true, children: "Quiet so far. Chat with an agent \u2192" })) : (stats.recent.slice(0, 4).map((r) => {
76
+ const mark = r.error ? "✗" : r.outwardActions.some((x) => x.approved) ? "" : "✓";
77
+ const markColor = r.error ? "red" : "green";
78
+ return (_jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: fit(timeAgo(r.startedAt), 7) }), " ", fit(names.get(r.agentId) ?? r.agentId, 8), " ", _jsx(Text, { dimColor: true, children: fit(r.trigger.kind, 6) }), " ", _jsx(Text, { color: markColor, children: mark })] }, r.runId + r.startedAt));
79
+ })) })] }), _jsx(Box, { marginTop: 1, children: _jsx(MenuList, { items: items, onSelect: (value) => {
80
+ if (value === "quit")
81
+ exit();
82
+ else if (value === "agents")
83
+ onNavigate({ name: "agents" });
84
+ else if (value === "create")
85
+ onNavigate({ name: "create" });
86
+ else if (value === "history")
87
+ onNavigate({ name: "history" });
88
+ else if (value === "plugins")
89
+ onNavigate({ name: "plugins" });
90
+ else if (value === "doctor")
91
+ onNavigate({ name: "doctor" });
92
+ }, onBack: () => exit() }) }), _jsx(KeyHints, { hints: ["↑↓ move", "enter select", "q quit"] })] }));
34
93
  }
35
94
  //# sourceMappingURL=home.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/ui/screens/home.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAGtD,MAAM,UAAU,UAAU,CAAC,EACzB,UAAU,EACV,WAAW,EACX,cAAc,EACd,UAAU,GAMX;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG;QACZ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,UAAU,aAAa,EAAE;QACtE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE;QAC7D,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,sBAAsB,EAAE;QACpE;YACE,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,GAAG,WAAW,aAAa,cAAc,CAAC,CAAC,CAAC,KAAK,cAAc,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;SACtF;QACD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE;QAC5D,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;KACjC,CAAC;IACF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACrC,MAAC,GAAG,IAAC,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,aAC1B,KAAC,IAAI,KAAG,EACR,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,SAAS,kCAAyB,EACnD,KAAC,IAAI,IAAC,QAAQ,oCAAqB,IAC/B,EACN,KAAC,QAAQ,IACP,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,IAAI,KAAK,KAAK,MAAM;wBAAE,IAAI,EAAE,CAAC;yBACxB,IAAI,KAAK,KAAK,QAAQ;wBAAE,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;yBACvD,IAAI,KAAK,KAAK,QAAQ;wBAAE,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;yBACvD,IAAI,KAAK,KAAK,SAAS;wBAAE,UAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;yBACzD,IAAI,KAAK,KAAK,SAAS;wBAAE,UAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;yBACzD,IAAI,KAAK,KAAK,QAAQ;wBAAE,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC9D,CAAC,EACD,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GACpB,EACF,KAAC,QAAQ,IAAC,KAAK,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,CAAC,GAAI,IACtD,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/ui/screens/home.tsx"],"names":[],"mappings":"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"}
package/dist/ui/theme.js CHANGED
@@ -10,6 +10,7 @@ export function Claw() {
10
10
  const [frame, setFrame] = useState(0);
11
11
  useEffect(() => {
12
12
  const timer = setInterval(() => setFrame((f) => (f + 1) % CLAW_FRAMES.length), 220);
13
+ timer.unref?.();
13
14
  return () => clearInterval(timer);
14
15
  }, []);
15
16
  return _jsx(Text, { color: AMBER, children: CLAW_FRAMES[frame] });
@@ -19,6 +20,7 @@ export function Spinner() {
19
20
  const [frame, setFrame] = useState(0);
20
21
  useEffect(() => {
21
22
  const timer = setInterval(() => setFrame((f) => (f + 1) % SPINNER_FRAMES.length), 90);
23
+ timer.unref?.();
22
24
  return () => clearInterval(timer);
23
25
  }, []);
24
26
  return _jsx(Text, { color: AMBER, children: SPINNER_FRAMES[frame] });
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/ui/theme.tsx"],"names":[],"mappings":";AAAA,mBAAmB;AACnB,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,8DAA8D;AAC9D,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC;AAE/B,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEzD,0CAA0C;AAC1C,MAAM,UAAU,IAAI;IAClB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QACpF,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YAAG,WAAW,CAAC,KAAK,CAAC,GAAQ,CAAC;AACzD,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE1E,MAAM,UAAU,OAAO;IACrB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACtF,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YAAG,cAAc,CAAC,KAAK,CAAC,GAAQ,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/ui/theme.tsx"],"names":[],"mappings":";AAAA,mBAAmB;AACnB,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,8DAA8D;AAC9D,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC;AAE/B,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEzD,0CAA0C;AAC1C,MAAM,UAAU,IAAI;IAClB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QACpF,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YAAG,WAAW,CAAC,KAAK,CAAC,GAAQ,CAAC;AACzD,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE1E,MAAM,UAAU,OAAO;IACrB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACtF,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YAAG,cAAc,CAAC,KAAK,CAAC,GAAQ,CAAC;AAC5D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exempclaw",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "A friendly terminal app for building and running Claude-powered agents that cover a role — with a menu-driven UI, a guided setup wizard, and an easy plugin system. Claude API only.",
5
5
  "type": "module",
6
6
  "engines": {