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 +1 -1
- package/dist/ui/app.js +3 -3
- package/dist/ui/app.js.map +1 -1
- package/dist/ui/app.test.js +3 -2
- package/dist/ui/app.test.js.map +1 -1
- package/dist/ui/components/chart.d.ts +14 -0
- package/dist/ui/components/chart.js +39 -0
- package/dist/ui/components/chart.js.map +1 -0
- package/dist/ui/dashboard-data.d.ts +23 -0
- package/dist/ui/dashboard-data.js +44 -0
- package/dist/ui/dashboard-data.js.map +1 -0
- package/dist/ui/screens/home.d.ts +5 -4
- package/dist/ui/screens/home.js +77 -18
- package/dist/ui/screens/home.js.map +1 -1
- package/dist/ui/theme.js +2 -0
- package/dist/ui/theme.js.map +1 -1
- package/package.json +1 -1
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.
|
|
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
|
-
//
|
|
27
|
-
const [route, setRoute] = useState(
|
|
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
|
|
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":
|
package/dist/ui/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/ui/app.tsx"],"names":[],"mappings":";AAAA,iBAAiB;AACjB,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAGhC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAWnD,8FAA8F;AAC9F,MAAM,aAAc,SAAQ,KAAK,CAAC,SAA2D;IAClF,KAAK,GAAsB,EAAE,CAAC;IACvC,MAAM,CAAC,wBAAwB,CAAC,KAAY;QAC1C,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IACQ,MAAM;QACb,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACrC,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,8CAA0B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAQ,EAC3E,KAAC,IAAI,IAAC,QAAQ,oFAAqE,IAC/E,CACP,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,UAAU,GAAG,CAAC,EAClB,QAAQ,EACR,aAAa,EACb,aAAa,GAKd;IACC,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/ui/app.tsx"],"names":[],"mappings":"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"}
|
package/dist/ui/app.test.js
CHANGED
|
@@ -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
|
|
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(), /
|
|
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
|
package/dist/ui/app.test.js.map
CHANGED
|
@@ -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,
|
|
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({
|
|
4
|
-
|
|
5
|
-
|
|
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;
|
package/dist/ui/screens/home.js
CHANGED
|
@@ -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
|
-
|
|
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: `${
|
|
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:
|
|
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, {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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":";
|
|
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] });
|
package/dist/ui/theme.js.map
CHANGED
|
@@ -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.
|
|
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": {
|