codebase-cli 2.0.0-pre.1 → 2.0.0-pre.11
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/agent/agent.js +16 -1
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/config.js +71 -9
- package/dist/agent/config.js.map +1 -1
- package/dist/app-server/protocol.js +7 -0
- package/dist/app-server/protocol.js.map +1 -0
- package/dist/app-server/server.js +241 -0
- package/dist/app-server/server.js.map +1 -0
- package/dist/auth/flow.js +174 -41
- package/dist/auth/flow.js.map +1 -1
- package/dist/cli.js +60 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/builtins.js +272 -1
- package/dist/commands/builtins.js.map +1 -1
- package/dist/config/store.js +125 -0
- package/dist/config/store.js.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/headless/run.js +129 -21
- package/dist/headless/run.js.map +1 -1
- package/dist/permissions/store.js +105 -3
- package/dist/permissions/store.js.map +1 -1
- package/dist/projects/cli.js +92 -0
- package/dist/projects/cli.js.map +1 -0
- package/dist/projects/client.js +120 -0
- package/dist/projects/client.js.map +1 -0
- package/dist/projects/types.js +2 -0
- package/dist/projects/types.js.map +1 -0
- package/dist/skills/platform-loader.js +133 -38
- package/dist/skills/platform-loader.js.map +1 -1
- package/dist/tools/config.js +74 -0
- package/dist/tools/config.js.map +1 -0
- package/dist/tools/dispatch-agent.js +16 -0
- package/dist/tools/dispatch-agent.js.map +1 -1
- package/dist/tools/registry.js +4 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/ui/App.js +1 -1
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/FirstRunSetup.js +92 -15
- package/dist/ui/FirstRunSetup.js.map +1 -1
- package/dist/ui/Message.js +80 -1
- package/dist/ui/Message.js.map +1 -1
- package/dist/ui/PixelC.js +40 -0
- package/dist/ui/PixelC.js.map +1 -0
- package/dist/ui/Status.js +13 -2
- package/dist/ui/Status.js.map +1 -1
- package/dist/ui/Throbber.js +11 -7
- package/dist/ui/Throbber.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
/**
|
|
5
|
+
* Animated pixel-C brand mark. Mirrors `web/public/favicon.svg`:
|
|
6
|
+
* 5-row × 4-col grid, 9 filled pixels (3 top + 3 left + 3 bottom).
|
|
7
|
+
* Each SVG pixel renders as two block chars wide so the C reads
|
|
8
|
+
* proportionally in a 1:2 cell-ratio terminal.
|
|
9
|
+
*
|
|
10
|
+
* When `animate` is false, renders a static cyan C — used in the
|
|
11
|
+
* wizard header and OAuth-running screen as a brand mark.
|
|
12
|
+
*
|
|
13
|
+
* When `animate` is true, scans a "bright" row top → bottom through
|
|
14
|
+
* the C every cycle. Subtle but unmistakably alive — gives the agent
|
|
15
|
+
* a heartbeat during long thinking turns without burning attention.
|
|
16
|
+
*/
|
|
17
|
+
const FILL = "██";
|
|
18
|
+
const GAP = " ";
|
|
19
|
+
const ROWS = [
|
|
20
|
+
{ text: `${GAP}${FILL}${FILL}${FILL}`, step: 0 },
|
|
21
|
+
{ text: FILL, step: 1 },
|
|
22
|
+
{ text: FILL, step: 2 },
|
|
23
|
+
{ text: FILL, step: 3 },
|
|
24
|
+
{ text: `${GAP}${FILL}${FILL}${FILL}`, step: 4 },
|
|
25
|
+
];
|
|
26
|
+
const STEPS = ROWS.length;
|
|
27
|
+
export function PixelC({ animate = false, color = "cyan", dimColor = "gray", intervalMs = 180 }) {
|
|
28
|
+
const [activeStep, setActiveStep] = useState(0);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (!animate)
|
|
31
|
+
return;
|
|
32
|
+
const id = setInterval(() => setActiveStep((s) => (s + 1) % STEPS), intervalMs);
|
|
33
|
+
return () => clearInterval(id);
|
|
34
|
+
}, [animate, intervalMs]);
|
|
35
|
+
return (_jsx(Box, { flexDirection: "column", children: ROWS.map((row) => {
|
|
36
|
+
const rowColor = !animate ? color : row.step === activeStep ? color : dimColor;
|
|
37
|
+
return (_jsx(Text, { bold: true, color: rowColor, children: row.text }, `pixc-${row.step}`));
|
|
38
|
+
}) }));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=PixelC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PixelC.js","sourceRoot":"","sources":["../../src/ui/PixelC.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C;;;;;;;;;;;;GAYG;AAEH,MAAM,IAAI,GAAG,IAAI,CAAC;AAClB,MAAM,GAAG,GAAG,IAAI,CAAC;AAgBjB,MAAM,IAAI,GAAuB;IAChC,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IAChD,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE;IACvB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE;IACvB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE;IACvB,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;CAChD,CAAC;AACF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;AAE1B,MAAM,UAAU,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAE,UAAU,GAAG,GAAG,EAAe;IAC3G,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;QAChF,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAE1B,OAAO,CACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACzB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACjB,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC/E,OAAO,CACN,KAAC,IAAI,IAA0B,IAAI,QAAC,KAAK,EAAE,QAAQ,YACjD,GAAG,CAAC,IAAI,IADC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAEtB,CACP,CAAC;QACH,CAAC,CAAC,GACG,CACN,CAAC;AACH,CAAC"}
|
package/dist/ui/Status.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { basename } from "node:path";
|
|
2
3
|
import { Box, Text } from "ink";
|
|
3
4
|
import { Throbber } from "./Throbber.js";
|
|
4
5
|
const STATUS_LABEL = {
|
|
@@ -17,12 +18,22 @@ const STATUS_COLOR = {
|
|
|
17
18
|
aborted: "red",
|
|
18
19
|
error: "red",
|
|
19
20
|
};
|
|
20
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Bottom status line — matches Claude Code's pattern: spinner + state
|
|
23
|
+
* on the left, model + cwd + context % + cost on the right. Stays on
|
|
24
|
+
* one row in normal terminal widths; the cwd basename is the only
|
|
25
|
+
* dynamic-length piece so we always show what matters.
|
|
26
|
+
*/
|
|
27
|
+
export function Status({ state, cwd, contextWindow = 200_000 }) {
|
|
21
28
|
const busy = state.status === "thinking" || state.status === "streaming" || state.status === "tool";
|
|
22
29
|
const label = STATUS_LABEL[state.status];
|
|
23
30
|
const color = STATUS_COLOR[state.status];
|
|
24
31
|
const u = state.usage;
|
|
25
|
-
|
|
32
|
+
const usedTokens = u.input + u.cacheRead;
|
|
33
|
+
const ctxPct = contextWindow > 0 ? Math.min(100, Math.round((usedTokens / contextWindow) * 100)) : 0;
|
|
34
|
+
const cwdLabel = cwd ? basename(cwd) || "/" : "";
|
|
35
|
+
const modelLabel = state.model.name || state.model.id;
|
|
36
|
+
return (_jsxs(Box, { flexDirection: "column", children: [state.error ? (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { color: "red", children: ["! ", state.error] }) })) : null, _jsxs(Box, { paddingX: 1, justifyContent: "space-between", children: [_jsxs(Box, { children: [busy ? (_jsxs(_Fragment, { children: [_jsx(Throbber, { color: color }), _jsx(Text, { children: " " })] })) : null, _jsx(Text, { color: color, children: label })] }), _jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [modelLabel, cwdLabel ? ` · ${cwdLabel}` : "", " \u00B7 ", ctxPct, "% ctx \u00B7 $", formatCost(u.cost.total)] }) })] })] }));
|
|
26
37
|
}
|
|
27
38
|
function formatCost(value) {
|
|
28
39
|
if (value === 0)
|
package/dist/ui/Status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Status.js","sourceRoot":"","sources":["../../src/ui/Status.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Status.js","sourceRoot":"","sources":["../../src/ui/Status.tsx"],"names":[],"mappings":"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"}
|
package/dist/ui/Throbber.js
CHANGED
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Text } from "ink";
|
|
3
3
|
import { useEffect, useState } from "react";
|
|
4
|
-
const FRAMES = ["⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"];
|
|
5
4
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* 8-frame pulse cycle — the codebase pixel-C "scanning" through brightness
|
|
6
|
+
* levels. The compact (1-char) variant cycles a single block-glyph: ░▒▓█▓▒░.
|
|
7
|
+
* The full pixel-C variant scans a highlight row across the C shape.
|
|
8
|
+
*
|
|
9
|
+
* Self-throttling: owns its own interval so the parent's reducer state
|
|
10
|
+
* doesn't tick on every frame. A hot message_update stream + a 100ms
|
|
11
|
+
* spinner would otherwise compound into full re-renders 10× a second.
|
|
9
12
|
*/
|
|
10
|
-
|
|
13
|
+
const COMPACT_FRAMES = ["░", "▒", "▓", "█", "█", "▓", "▒", "░"];
|
|
14
|
+
export function Throbber({ color = "cyan", intervalMs = 90 }) {
|
|
11
15
|
const [frame, setFrame] = useState(0);
|
|
12
16
|
useEffect(() => {
|
|
13
17
|
const id = setInterval(() => {
|
|
14
|
-
setFrame((f) => (f + 1) %
|
|
18
|
+
setFrame((f) => (f + 1) % COMPACT_FRAMES.length);
|
|
15
19
|
}, intervalMs);
|
|
16
20
|
return () => clearInterval(id);
|
|
17
21
|
}, [intervalMs]);
|
|
18
|
-
return _jsx(Text, { color: color, children:
|
|
22
|
+
return _jsx(Text, { color: color, children: COMPACT_FRAMES[frame] });
|
|
19
23
|
}
|
|
20
24
|
//# sourceMappingURL=Throbber.js.map
|
package/dist/ui/Throbber.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Throbber.js","sourceRoot":"","sources":["../../src/ui/Throbber.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,
|
|
1
|
+
{"version":3,"file":"Throbber.js","sourceRoot":"","sources":["../../src/ui/Throbber.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C;;;;;;;;GAQG;AAEH,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAOhE,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,UAAU,GAAG,EAAE,EAAiB;IAC1E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC3B,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC,EAAE,UAAU,CAAC,CAAC;QACf,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YAAG,cAAc,CAAC,KAAK,CAAC,GAAQ,CAAC;AAC3D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codebase-cli",
|
|
3
|
-
"version": "2.0.0-pre.
|
|
3
|
+
"version": "2.0.0-pre.11",
|
|
4
4
|
"description": "Codebase CLI — a TypeScript coding agent on the pi-mono runtime. OAuth-aware, any LLM provider, single install.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -52,6 +52,8 @@
|
|
|
52
52
|
"test": "vitest --run",
|
|
53
53
|
"test:watch": "vitest",
|
|
54
54
|
"check": "npm run typecheck && npm run lint && npm test",
|
|
55
|
+
"bench": "node bench/run.mjs",
|
|
56
|
+
"bench:report": "node bench/aggregate.mjs",
|
|
55
57
|
"prepublishOnly": "npm run clean && npm run check && npm run build",
|
|
56
58
|
"prepack": "npm run build"
|
|
57
59
|
},
|