@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.
Files changed (118) hide show
  1. package/.cdoing/permissions.json +8 -0
  2. package/dist/callbacks.d.ts +17 -0
  3. package/dist/callbacks.d.ts.map +1 -0
  4. package/dist/callbacks.js +265 -0
  5. package/dist/callbacks.js.map +1 -0
  6. package/dist/chat.d.ts +27 -0
  7. package/dist/chat.d.ts.map +1 -0
  8. package/dist/chat.js +57 -0
  9. package/dist/chat.js.map +1 -0
  10. package/dist/commands.d.ts +22 -0
  11. package/dist/commands.d.ts.map +1 -0
  12. package/dist/commands.js +452 -0
  13. package/dist/commands.js.map +1 -0
  14. package/dist/config.d.ts +84 -0
  15. package/dist/config.d.ts.map +1 -0
  16. package/dist/config.js +427 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/help.d.ts +9 -0
  19. package/dist/help.d.ts.map +1 -0
  20. package/dist/help.js +167 -0
  21. package/dist/help.js.map +1 -0
  22. package/dist/history.d.ts +51 -0
  23. package/dist/history.d.ts.map +1 -0
  24. package/dist/history.js +207 -0
  25. package/dist/history.js.map +1 -0
  26. package/dist/index.d.ts +7 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +220 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/oauth.d.ts +13 -0
  31. package/dist/oauth.d.ts.map +1 -0
  32. package/dist/oauth.js +182 -0
  33. package/dist/oauth.js.map +1 -0
  34. package/dist/review.d.ts +26 -0
  35. package/dist/review.d.ts.map +1 -0
  36. package/dist/review.js +198 -0
  37. package/dist/review.js.map +1 -0
  38. package/dist/serve.d.ts +23 -0
  39. package/dist/serve.d.ts.map +1 -0
  40. package/dist/serve.js +293 -0
  41. package/dist/serve.js.map +1 -0
  42. package/dist/tools.d.ts +14 -0
  43. package/dist/tools.d.ts.map +1 -0
  44. package/dist/tools.js +57 -0
  45. package/dist/tools.js.map +1 -0
  46. package/dist/ui/App.d.ts +24 -0
  47. package/dist/ui/App.d.ts.map +1 -0
  48. package/dist/ui/App.js +321 -0
  49. package/dist/ui/App.js.map +1 -0
  50. package/dist/ui/MessageList.d.ts +14 -0
  51. package/dist/ui/MessageList.d.ts.map +1 -0
  52. package/dist/ui/MessageList.js +147 -0
  53. package/dist/ui/MessageList.js.map +1 -0
  54. package/dist/ui/SessionBrowser.d.ts +18 -0
  55. package/dist/ui/SessionBrowser.d.ts.map +1 -0
  56. package/dist/ui/SessionBrowser.js +149 -0
  57. package/dist/ui/SessionBrowser.js.map +1 -0
  58. package/dist/ui/SetupWizard.d.ts +23 -0
  59. package/dist/ui/SetupWizard.d.ts.map +1 -0
  60. package/dist/ui/SetupWizard.js +402 -0
  61. package/dist/ui/SetupWizard.js.map +1 -0
  62. package/dist/ui/Spinner.d.ts +15 -0
  63. package/dist/ui/Spinner.d.ts.map +1 -0
  64. package/dist/ui/Spinner.js +111 -0
  65. package/dist/ui/Spinner.js.map +1 -0
  66. package/dist/ui/StatusBar.d.ts +16 -0
  67. package/dist/ui/StatusBar.d.ts.map +1 -0
  68. package/dist/ui/StatusBar.js +56 -0
  69. package/dist/ui/StatusBar.js.map +1 -0
  70. package/dist/ui/UserInput.d.ts +13 -0
  71. package/dist/ui/UserInput.d.ts.map +1 -0
  72. package/dist/ui/UserInput.js +872 -0
  73. package/dist/ui/UserInput.js.map +1 -0
  74. package/dist/ui/hooks/helpers.d.ts +55 -0
  75. package/dist/ui/hooks/helpers.d.ts.map +1 -0
  76. package/dist/ui/hooks/helpers.js +304 -0
  77. package/dist/ui/hooks/helpers.js.map +1 -0
  78. package/dist/ui/hooks/useAgent.d.ts +60 -0
  79. package/dist/ui/hooks/useAgent.d.ts.map +1 -0
  80. package/dist/ui/hooks/useAgent.js +213 -0
  81. package/dist/ui/hooks/useAgent.js.map +1 -0
  82. package/dist/ui/hooks/useChat.d.ts +74 -0
  83. package/dist/ui/hooks/useChat.d.ts.map +1 -0
  84. package/dist/ui/hooks/useChat.js +819 -0
  85. package/dist/ui/hooks/useChat.js.map +1 -0
  86. package/dist/ui/theme.d.ts +73 -0
  87. package/dist/ui/theme.d.ts.map +1 -0
  88. package/dist/ui/theme.js +214 -0
  89. package/dist/ui/theme.js.map +1 -0
  90. package/dist/ui/types.d.ts +37 -0
  91. package/dist/ui/types.d.ts.map +1 -0
  92. package/dist/ui/types.js +3 -0
  93. package/dist/ui/types.js.map +1 -0
  94. package/package.json +33 -0
  95. package/src/callbacks.ts +294 -0
  96. package/src/chat.ts +72 -0
  97. package/src/commands.ts +425 -0
  98. package/src/config.ts +462 -0
  99. package/src/help.ts +182 -0
  100. package/src/history.ts +205 -0
  101. package/src/index.ts +248 -0
  102. package/src/oauth.ts +164 -0
  103. package/src/review.ts +233 -0
  104. package/src/serve.ts +290 -0
  105. package/src/tools.ts +104 -0
  106. package/src/ui/App.tsx +426 -0
  107. package/src/ui/MessageList.tsx +222 -0
  108. package/src/ui/SessionBrowser.tsx +161 -0
  109. package/src/ui/SetupWizard.tsx +412 -0
  110. package/src/ui/Spinner.tsx +103 -0
  111. package/src/ui/StatusBar.tsx +106 -0
  112. package/src/ui/UserInput.tsx +954 -0
  113. package/src/ui/hooks/helpers.ts +271 -0
  114. package/src/ui/hooks/useAgent.ts +270 -0
  115. package/src/ui/hooks/useChat.ts +943 -0
  116. package/src/ui/theme.ts +326 -0
  117. package/src/ui/types.ts +41 -0
  118. 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
+ };