@cdoing/cli 0.1.0
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/.cdoing/permissions.json +8 -0
- package/dist/callbacks.d.ts +17 -0
- package/dist/callbacks.d.ts.map +1 -0
- package/dist/callbacks.js +265 -0
- package/dist/callbacks.js.map +1 -0
- package/dist/chat.d.ts +27 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +57 -0
- package/dist/chat.js.map +1 -0
- package/dist/commands.d.ts +22 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +452 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +84 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +427 -0
- package/dist/config.js.map +1 -0
- package/dist/help.d.ts +9 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +167 -0
- package/dist/help.js.map +1 -0
- package/dist/history.d.ts +51 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +207 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +220 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth.d.ts +13 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +182 -0
- package/dist/oauth.js.map +1 -0
- package/dist/review.d.ts +26 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +198 -0
- package/dist/review.js.map +1 -0
- package/dist/serve.d.ts +23 -0
- package/dist/serve.d.ts.map +1 -0
- package/dist/serve.js +293 -0
- package/dist/serve.js.map +1 -0
- package/dist/tools.d.ts +14 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +57 -0
- package/dist/tools.js.map +1 -0
- package/dist/ui/App.d.ts +24 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js +321 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/MessageList.d.ts +14 -0
- package/dist/ui/MessageList.d.ts.map +1 -0
- package/dist/ui/MessageList.js +147 -0
- package/dist/ui/MessageList.js.map +1 -0
- package/dist/ui/SessionBrowser.d.ts +18 -0
- package/dist/ui/SessionBrowser.d.ts.map +1 -0
- package/dist/ui/SessionBrowser.js +149 -0
- package/dist/ui/SessionBrowser.js.map +1 -0
- package/dist/ui/SetupWizard.d.ts +23 -0
- package/dist/ui/SetupWizard.d.ts.map +1 -0
- package/dist/ui/SetupWizard.js +402 -0
- package/dist/ui/SetupWizard.js.map +1 -0
- package/dist/ui/Spinner.d.ts +15 -0
- package/dist/ui/Spinner.d.ts.map +1 -0
- package/dist/ui/Spinner.js +111 -0
- package/dist/ui/Spinner.js.map +1 -0
- package/dist/ui/StatusBar.d.ts +16 -0
- package/dist/ui/StatusBar.d.ts.map +1 -0
- package/dist/ui/StatusBar.js +56 -0
- package/dist/ui/StatusBar.js.map +1 -0
- package/dist/ui/UserInput.d.ts +13 -0
- package/dist/ui/UserInput.d.ts.map +1 -0
- package/dist/ui/UserInput.js +872 -0
- package/dist/ui/UserInput.js.map +1 -0
- package/dist/ui/hooks/helpers.d.ts +55 -0
- package/dist/ui/hooks/helpers.d.ts.map +1 -0
- package/dist/ui/hooks/helpers.js +304 -0
- package/dist/ui/hooks/helpers.js.map +1 -0
- package/dist/ui/hooks/useAgent.d.ts +60 -0
- package/dist/ui/hooks/useAgent.d.ts.map +1 -0
- package/dist/ui/hooks/useAgent.js +213 -0
- package/dist/ui/hooks/useAgent.js.map +1 -0
- package/dist/ui/hooks/useChat.d.ts +74 -0
- package/dist/ui/hooks/useChat.d.ts.map +1 -0
- package/dist/ui/hooks/useChat.js +819 -0
- package/dist/ui/hooks/useChat.js.map +1 -0
- package/dist/ui/theme.d.ts +73 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +214 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/types.d.ts +37 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +3 -0
- package/dist/ui/types.js.map +1 -0
- package/package.json +33 -0
- package/src/callbacks.ts +294 -0
- package/src/chat.ts +72 -0
- package/src/commands.ts +425 -0
- package/src/config.ts +462 -0
- package/src/help.ts +182 -0
- package/src/history.ts +205 -0
- package/src/index.ts +248 -0
- package/src/oauth.ts +164 -0
- package/src/review.ts +233 -0
- package/src/serve.ts +290 -0
- package/src/tools.ts +104 -0
- package/src/ui/App.tsx +426 -0
- package/src/ui/MessageList.tsx +222 -0
- package/src/ui/SessionBrowser.tsx +161 -0
- package/src/ui/SetupWizard.tsx +412 -0
- package/src/ui/Spinner.tsx +103 -0
- package/src/ui/StatusBar.tsx +106 -0
- package/src/ui/UserInput.tsx +954 -0
- package/src/ui/hooks/helpers.ts +271 -0
- package/src/ui/hooks/useAgent.ts +270 -0
- package/src/ui/hooks/useChat.ts +943 -0
- package/src/ui/theme.ts +326 -0
- package/src/ui/types.ts +41 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import type { UsageInfo, ContextUsage } from "./types";
|
|
4
|
+
import { getTheme } from "./theme";
|
|
5
|
+
|
|
6
|
+
interface StatusBarProps {
|
|
7
|
+
provider: string;
|
|
8
|
+
model: string;
|
|
9
|
+
mode: string;
|
|
10
|
+
workingDir: string;
|
|
11
|
+
isProcessing: boolean;
|
|
12
|
+
lastUsage: UsageInfo | null;
|
|
13
|
+
queueLength: number;
|
|
14
|
+
contextUsage?: ContextUsage | null;
|
|
15
|
+
backgroundJobs?: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** Render a mini progress bar: ████░░ */
|
|
19
|
+
function contextBar(percent: number, width = 8): string {
|
|
20
|
+
const filled = Math.round((percent / 100) * width);
|
|
21
|
+
return "█".repeat(filled) + "░".repeat(width - filled);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function contextColor(percent: number): string {
|
|
25
|
+
if (percent >= 90) return "red";
|
|
26
|
+
if (percent >= 75) return "yellow";
|
|
27
|
+
return "green";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const StatusBar: React.FC<StatusBarProps> = ({
|
|
31
|
+
provider,
|
|
32
|
+
model,
|
|
33
|
+
mode,
|
|
34
|
+
workingDir,
|
|
35
|
+
isProcessing,
|
|
36
|
+
lastUsage,
|
|
37
|
+
queueLength,
|
|
38
|
+
contextUsage,
|
|
39
|
+
backgroundJobs = 0,
|
|
40
|
+
}) => {
|
|
41
|
+
const t = getTheme();
|
|
42
|
+
const dir = workingDir.replace(process.env.HOME || "", "~");
|
|
43
|
+
const modelDisplay = model || "(default)";
|
|
44
|
+
const modeColor =
|
|
45
|
+
mode === "auto" ? t.success : mode === "auto-edit" ? t.warning : t.info;
|
|
46
|
+
const hasUsage = !!lastUsage;
|
|
47
|
+
const usageText = hasUsage
|
|
48
|
+
? ` · ${lastUsage!.totalTokens.toLocaleString()} tokens` +
|
|
49
|
+
(lastUsage!.cost !== undefined ? ` · $${lastUsage!.cost.toFixed(4)}` : "")
|
|
50
|
+
: "";
|
|
51
|
+
|
|
52
|
+
const ctxPercent = contextUsage?.percent ?? null;
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<Box
|
|
56
|
+
borderStyle="single"
|
|
57
|
+
borderColor={t.border}
|
|
58
|
+
paddingLeft={1}
|
|
59
|
+
paddingRight={1}
|
|
60
|
+
justifyContent="space-between"
|
|
61
|
+
>
|
|
62
|
+
{/* Left side */}
|
|
63
|
+
<Box>
|
|
64
|
+
<Text color={t.provider}>{provider}</Text>
|
|
65
|
+
<Text color={t.separator}> · </Text>
|
|
66
|
+
<Text color={t.model}>{modelDisplay}</Text>
|
|
67
|
+
<Text color={t.separator}> · </Text>
|
|
68
|
+
<Text color={modeColor}>{mode}</Text>
|
|
69
|
+
|
|
70
|
+
{/* Context window usage bar */}
|
|
71
|
+
{ctxPercent !== null ? (
|
|
72
|
+
<>
|
|
73
|
+
<Text color={t.separator}> · </Text>
|
|
74
|
+
<Text color={contextColor(ctxPercent)}>
|
|
75
|
+
{contextBar(ctxPercent)}
|
|
76
|
+
</Text>
|
|
77
|
+
<Text color={contextColor(ctxPercent) as "red" | "yellow" | "green"}>
|
|
78
|
+
{` ${Math.round(ctxPercent)}%`}
|
|
79
|
+
</Text>
|
|
80
|
+
</>
|
|
81
|
+
) : null}
|
|
82
|
+
|
|
83
|
+
{/* Background jobs indicator */}
|
|
84
|
+
{backgroundJobs > 0 ? (
|
|
85
|
+
<Text color={t.bgJobs}>{` · ⚡${backgroundJobs} bg`}</Text>
|
|
86
|
+
) : null}
|
|
87
|
+
|
|
88
|
+
{queueLength > 0 ? (
|
|
89
|
+
<Text color={t.warning}> · {queueLength} queued</Text>
|
|
90
|
+
) : null}
|
|
91
|
+
</Box>
|
|
92
|
+
|
|
93
|
+
{/* Right side */}
|
|
94
|
+
<Box>
|
|
95
|
+
<Text color={t.textDim}>{dir}</Text>
|
|
96
|
+
{isProcessing ? (
|
|
97
|
+
<Text color={t.warning}> · processing…</Text>
|
|
98
|
+
) : null}
|
|
99
|
+
{hasUsage ? (
|
|
100
|
+
<Text color={t.textDim} dimColor={t.useDim}>{usageText}</Text>
|
|
101
|
+
) : null}
|
|
102
|
+
<Text color={t.textDim} dimColor={t.useDim}>{" ?=/help ESC=cancel ^C^C=exit"}</Text>
|
|
103
|
+
</Box>
|
|
104
|
+
</Box>
|
|
105
|
+
);
|
|
106
|
+
};
|