@carboncode/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/LICENSE +21 -0
- package/LICENSES/DeepSeek-Reasonix-MIT.txt +21 -0
- package/README.md +109 -0
- package/README.zh-CN.md +91 -0
- package/THIRD_PARTY_NOTICES.md +14 -0
- package/dashboard/app.css +3233 -0
- package/dashboard/dist/app.js +30444 -0
- package/dashboard/dist/app.js.map +1 -0
- package/dashboard/dist/vendor-hljs.css +10 -0
- package/dashboard/dist/vendor-uplot.css +1 -0
- package/dashboard/index.html +19 -0
- package/data/deepseek-tokenizer.json.gz +0 -0
- package/dist/cli/acp-35C4ME6Y.js +711 -0
- package/dist/cli/acp-35C4ME6Y.js.map +1 -0
- package/dist/cli/chat-A6UJDPGV.js +51 -0
- package/dist/cli/chat-A6UJDPGV.js.map +1 -0
- package/dist/cli/chunk-2425HK6U.js +54 -0
- package/dist/cli/chunk-2425HK6U.js.map +1 -0
- package/dist/cli/chunk-25T6CVUP.js +172 -0
- package/dist/cli/chunk-25T6CVUP.js.map +1 -0
- package/dist/cli/chunk-2UQP6H6T.js +31 -0
- package/dist/cli/chunk-2UQP6H6T.js.map +1 -0
- package/dist/cli/chunk-3OAR6NVL.js +96 -0
- package/dist/cli/chunk-3OAR6NVL.js.map +1 -0
- package/dist/cli/chunk-3T6VBZCL.js +54 -0
- package/dist/cli/chunk-3T6VBZCL.js.map +1 -0
- package/dist/cli/chunk-4IBIPQVB.js +153 -0
- package/dist/cli/chunk-4IBIPQVB.js.map +1 -0
- package/dist/cli/chunk-4MQ3VURH.js +3106 -0
- package/dist/cli/chunk-4MQ3VURH.js.map +1 -0
- package/dist/cli/chunk-4TVNJWMA.js +11619 -0
- package/dist/cli/chunk-4TVNJWMA.js.map +1 -0
- package/dist/cli/chunk-4VR6XF4P.js +341 -0
- package/dist/cli/chunk-4VR6XF4P.js.map +1 -0
- package/dist/cli/chunk-5QCB62C4.js +25319 -0
- package/dist/cli/chunk-5QCB62C4.js.map +1 -0
- package/dist/cli/chunk-6OWJV3YW.js +390 -0
- package/dist/cli/chunk-6OWJV3YW.js.map +1 -0
- package/dist/cli/chunk-7EO27TB3.js +130 -0
- package/dist/cli/chunk-7EO27TB3.js.map +1 -0
- package/dist/cli/chunk-7L2WTRNU.js +308 -0
- package/dist/cli/chunk-7L2WTRNU.js.map +1 -0
- package/dist/cli/chunk-BHTZFEYE.js +47 -0
- package/dist/cli/chunk-BHTZFEYE.js.map +1 -0
- package/dist/cli/chunk-BSGCXZQN.js +343 -0
- package/dist/cli/chunk-BSGCXZQN.js.map +1 -0
- package/dist/cli/chunk-BSINVTTL.js +464 -0
- package/dist/cli/chunk-BSINVTTL.js.map +1 -0
- package/dist/cli/chunk-CPKCNHRR.js +323 -0
- package/dist/cli/chunk-CPKCNHRR.js.map +1 -0
- package/dist/cli/chunk-CXVWUPA3.js +96 -0
- package/dist/cli/chunk-CXVWUPA3.js.map +1 -0
- package/dist/cli/chunk-D5NFKRGO.js +160 -0
- package/dist/cli/chunk-D5NFKRGO.js.map +1 -0
- package/dist/cli/chunk-ECHSFYOY.js +109 -0
- package/dist/cli/chunk-ECHSFYOY.js.map +1 -0
- package/dist/cli/chunk-FEZK652I.js +3644 -0
- package/dist/cli/chunk-FEZK652I.js.map +1 -0
- package/dist/cli/chunk-GALC45Q2.js +696 -0
- package/dist/cli/chunk-GALC45Q2.js.map +1 -0
- package/dist/cli/chunk-IAUOP25G.js +2984 -0
- package/dist/cli/chunk-IAUOP25G.js.map +1 -0
- package/dist/cli/chunk-ILJOIQ5W.js +163 -0
- package/dist/cli/chunk-ILJOIQ5W.js.map +1 -0
- package/dist/cli/chunk-IX6XI2RG.js +225 -0
- package/dist/cli/chunk-IX6XI2RG.js.map +1 -0
- package/dist/cli/chunk-J5BYPUB5.js +62795 -0
- package/dist/cli/chunk-J5BYPUB5.js.map +1 -0
- package/dist/cli/chunk-J5XJHLWM.js +55 -0
- package/dist/cli/chunk-J5XJHLWM.js.map +1 -0
- package/dist/cli/chunk-JKGYMRX5.js +101 -0
- package/dist/cli/chunk-JKGYMRX5.js.map +1 -0
- package/dist/cli/chunk-JMBMLOBP.js +26 -0
- package/dist/cli/chunk-JMBMLOBP.js.map +1 -0
- package/dist/cli/chunk-LN3B5PMX.js +128 -0
- package/dist/cli/chunk-LN3B5PMX.js.map +1 -0
- package/dist/cli/chunk-M2UFZUX3.js +635 -0
- package/dist/cli/chunk-M2UFZUX3.js.map +1 -0
- package/dist/cli/chunk-PJS34556.js +809 -0
- package/dist/cli/chunk-PJS34556.js.map +1 -0
- package/dist/cli/chunk-QJG7OF27.js +655 -0
- package/dist/cli/chunk-QJG7OF27.js.map +1 -0
- package/dist/cli/chunk-QVC75MR3.js +232 -0
- package/dist/cli/chunk-QVC75MR3.js.map +1 -0
- package/dist/cli/chunk-S2KIUQKQ.js +378 -0
- package/dist/cli/chunk-S2KIUQKQ.js.map +1 -0
- package/dist/cli/chunk-S4XVGLRW.js +499 -0
- package/dist/cli/chunk-S4XVGLRW.js.map +1 -0
- package/dist/cli/chunk-T5TQ4NDT.js +190 -0
- package/dist/cli/chunk-T5TQ4NDT.js.map +1 -0
- package/dist/cli/chunk-TH756VLN.js +1924 -0
- package/dist/cli/chunk-TH756VLN.js.map +1 -0
- package/dist/cli/chunk-TUK7OWJA.js +51 -0
- package/dist/cli/chunk-TUK7OWJA.js.map +1 -0
- package/dist/cli/chunk-U4IJVG32.js +363 -0
- package/dist/cli/chunk-U4IJVG32.js.map +1 -0
- package/dist/cli/chunk-UI66BH6D.js +624 -0
- package/dist/cli/chunk-UI66BH6D.js.map +1 -0
- package/dist/cli/chunk-VPMBGAND.js +53 -0
- package/dist/cli/chunk-VPMBGAND.js.map +1 -0
- package/dist/cli/chunk-WLHH3OSR.js +522 -0
- package/dist/cli/chunk-WLHH3OSR.js.map +1 -0
- package/dist/cli/chunk-WRN65TRD.js +908 -0
- package/dist/cli/chunk-WRN65TRD.js.map +1 -0
- package/dist/cli/chunk-X53B3JIX.js +34320 -0
- package/dist/cli/chunk-X53B3JIX.js.map +1 -0
- package/dist/cli/chunk-XJ5SRLKK.js +50 -0
- package/dist/cli/chunk-XJ5SRLKK.js.map +1 -0
- package/dist/cli/chunk-YZSXRGFH.js +54 -0
- package/dist/cli/chunk-YZSXRGFH.js.map +1 -0
- package/dist/cli/code-4TUTAGO5.js +163 -0
- package/dist/cli/code-4TUTAGO5.js.map +1 -0
- package/dist/cli/commands-KMOZEYCF.js +356 -0
- package/dist/cli/commands-KMOZEYCF.js.map +1 -0
- package/dist/cli/commit-DTFA56VQ.js +292 -0
- package/dist/cli/commit-DTFA56VQ.js.map +1 -0
- package/dist/cli/desktop-7N3MHNBD.js +1274 -0
- package/dist/cli/desktop-7N3MHNBD.js.map +1 -0
- package/dist/cli/devtools-HW3WDT3Q.js +91 -0
- package/dist/cli/devtools-HW3WDT3Q.js.map +1 -0
- package/dist/cli/diff-E5OWTF4C.js +165 -0
- package/dist/cli/diff-E5OWTF4C.js.map +1 -0
- package/dist/cli/doctor-IEJQRJMN.js +27 -0
- package/dist/cli/doctor-IEJQRJMN.js.map +1 -0
- package/dist/cli/events-4625EGXI.js +340 -0
- package/dist/cli/events-4625EGXI.js.map +1 -0
- package/dist/cli/index.js +3536 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/mcp-PDI2PDLG.js +277 -0
- package/dist/cli/mcp-PDI2PDLG.js.map +1 -0
- package/dist/cli/mcp-browse-OSPXOFPZ.js +178 -0
- package/dist/cli/mcp-browse-OSPXOFPZ.js.map +1 -0
- package/dist/cli/mcp-inspect-QRFVTHMF.js +148 -0
- package/dist/cli/mcp-inspect-QRFVTHMF.js.map +1 -0
- package/dist/cli/package.json +3 -0
- package/dist/cli/prompt-3CDII3UO.js +16 -0
- package/dist/cli/prompt-3CDII3UO.js.map +1 -0
- package/dist/cli/prune-sessions-KZX4SXKW.js +44 -0
- package/dist/cli/prune-sessions-KZX4SXKW.js.map +1 -0
- package/dist/cli/replay-HYOSRQIV.js +291 -0
- package/dist/cli/replay-HYOSRQIV.js.map +1 -0
- package/dist/cli/run-2ZHADOUP.js +220 -0
- package/dist/cli/run-2ZHADOUP.js.map +1 -0
- package/dist/cli/server-X75PAZG5.js +3572 -0
- package/dist/cli/server-X75PAZG5.js.map +1 -0
- package/dist/cli/sessions-POOZA5CQ.js +120 -0
- package/dist/cli/sessions-POOZA5CQ.js.map +1 -0
- package/dist/cli/setup-YLPFI3OH.js +618 -0
- package/dist/cli/setup-YLPFI3OH.js.map +1 -0
- package/dist/cli/stats-NXJ3TO2D.js +16 -0
- package/dist/cli/stats-NXJ3TO2D.js.map +1 -0
- package/dist/cli/update-ZUO5MKQ6.js +15 -0
- package/dist/cli/update-ZUO5MKQ6.js.map +1 -0
- package/dist/cli/version-NXXWE3WN.js +33 -0
- package/dist/cli/version-NXXWE3WN.js.map +1 -0
- package/dist/index.d.ts +2523 -0
- package/dist/index.js +15408 -0
- package/dist/index.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __cr } from 'node:module'; if (typeof globalThis.require === 'undefined') { globalThis.require = __cr(import.meta.url); }
|
|
3
|
+
import {
|
|
4
|
+
require_react
|
|
5
|
+
} from "./chunk-X53B3JIX.js";
|
|
6
|
+
import {
|
|
7
|
+
CARD,
|
|
8
|
+
DEFAULT_THEME_NAME,
|
|
9
|
+
FG,
|
|
10
|
+
SURFACE,
|
|
11
|
+
THEMES,
|
|
12
|
+
TONE,
|
|
13
|
+
TONE_ACTIVE,
|
|
14
|
+
resolveThemeName,
|
|
15
|
+
setActiveTheme
|
|
16
|
+
} from "./chunk-4MQ3VURH.js";
|
|
17
|
+
import {
|
|
18
|
+
__toESM
|
|
19
|
+
} from "./chunk-TUK7OWJA.js";
|
|
20
|
+
|
|
21
|
+
// src/cli/ui/theme/context.tsx
|
|
22
|
+
var import_react = __toESM(require_react(), 1);
|
|
23
|
+
var ThemeContext = import_react.default.createContext(THEMES[DEFAULT_THEME_NAME]);
|
|
24
|
+
function ThemeProvider({
|
|
25
|
+
children,
|
|
26
|
+
name
|
|
27
|
+
}) {
|
|
28
|
+
const theme = THEMES[resolveThemeName(name)];
|
|
29
|
+
const restoreActiveTheme = setActiveTheme(theme);
|
|
30
|
+
import_react.default.useLayoutEffect(() => restoreActiveTheme, [restoreActiveTheme]);
|
|
31
|
+
return /* @__PURE__ */ import_react.default.createElement(ThemeContext.Provider, { value: theme }, children);
|
|
32
|
+
}
|
|
33
|
+
function useThemeTokens() {
|
|
34
|
+
return import_react.default.useContext(ThemeContext);
|
|
35
|
+
}
|
|
36
|
+
function useTheme() {
|
|
37
|
+
return useThemeTokens();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// src/cli/ui/theme.ts
|
|
41
|
+
var import_react2 = __toESM(require_react(), 1);
|
|
42
|
+
function gradientFromTheme(theme) {
|
|
43
|
+
return [
|
|
44
|
+
theme.tone.ok,
|
|
45
|
+
theme.tone.brand,
|
|
46
|
+
theme.tone.info,
|
|
47
|
+
theme.toneActive.brand,
|
|
48
|
+
theme.toneActive.violet,
|
|
49
|
+
theme.tone.accent,
|
|
50
|
+
theme.toneActive.accent,
|
|
51
|
+
theme.tone.err
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
function colorFromTheme(theme) {
|
|
55
|
+
return {
|
|
56
|
+
primary: theme.tone.brand,
|
|
57
|
+
accent: theme.tone.accent,
|
|
58
|
+
brand: theme.tone.ok,
|
|
59
|
+
user: theme.tone.brand,
|
|
60
|
+
assistant: theme.tone.ok,
|
|
61
|
+
tool: theme.tone.warn,
|
|
62
|
+
toolErr: theme.tone.err,
|
|
63
|
+
info: theme.fg.sub,
|
|
64
|
+
warn: theme.tone.warn,
|
|
65
|
+
err: theme.tone.err,
|
|
66
|
+
ok: theme.tone.ok
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function surfaceFromTheme(theme) {
|
|
70
|
+
return {
|
|
71
|
+
canvas: theme.surface.bg,
|
|
72
|
+
shell: theme.surface.bgInput,
|
|
73
|
+
card: theme.surface.bgElev,
|
|
74
|
+
elev: theme.surface.bgElev,
|
|
75
|
+
sel: theme.surface.bgInput,
|
|
76
|
+
line: theme.fg.faint,
|
|
77
|
+
lineSoft: theme.fg.meta
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function fgFromTheme(theme) {
|
|
81
|
+
return {
|
|
82
|
+
strong: theme.fg.strong,
|
|
83
|
+
default: theme.fg.body,
|
|
84
|
+
dim: theme.fg.sub,
|
|
85
|
+
faint: theme.fg.meta,
|
|
86
|
+
ghost: theme.fg.faint
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function proxyThemeValue(build) {
|
|
90
|
+
const target = build();
|
|
91
|
+
return new Proxy(target, {
|
|
92
|
+
get(_target, prop) {
|
|
93
|
+
return build()[prop];
|
|
94
|
+
},
|
|
95
|
+
getOwnPropertyDescriptor(_target, prop) {
|
|
96
|
+
return Reflect.getOwnPropertyDescriptor(build(), prop);
|
|
97
|
+
},
|
|
98
|
+
has(_target, prop) {
|
|
99
|
+
return prop in build();
|
|
100
|
+
},
|
|
101
|
+
ownKeys() {
|
|
102
|
+
return Reflect.ownKeys(build());
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
function currentTheme() {
|
|
107
|
+
return {
|
|
108
|
+
fg: FG,
|
|
109
|
+
tone: TONE,
|
|
110
|
+
toneActive: TONE_ACTIVE,
|
|
111
|
+
surface: SURFACE,
|
|
112
|
+
card: CARD
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function useColor() {
|
|
116
|
+
const theme = useThemeTokens();
|
|
117
|
+
return import_react2.default.useMemo(() => colorFromTheme(theme), [theme]);
|
|
118
|
+
}
|
|
119
|
+
var GRADIENT = proxyThemeValue(() => gradientFromTheme(currentTheme()));
|
|
120
|
+
var COLOR = proxyThemeValue(() => colorFromTheme(currentTheme()));
|
|
121
|
+
var GLYPH = {
|
|
122
|
+
brand: "\u25CF",
|
|
123
|
+
user: "\u25CF",
|
|
124
|
+
assistant: "\u25CF",
|
|
125
|
+
toolOk: "\u2713",
|
|
126
|
+
toolErr: "\u2717",
|
|
127
|
+
warn: "\u26A0",
|
|
128
|
+
err: "\u2717",
|
|
129
|
+
arrow: "\u25B8",
|
|
130
|
+
bullet: "\xB7",
|
|
131
|
+
bar: "\u2502",
|
|
132
|
+
thinBar: "\u2502",
|
|
133
|
+
block: "\u2588",
|
|
134
|
+
shade1: "\u2591",
|
|
135
|
+
shade2: "\u2592",
|
|
136
|
+
shade3: "\u2593",
|
|
137
|
+
done: "\u2713",
|
|
138
|
+
cur: "\u25B8",
|
|
139
|
+
pending: "\u25CB",
|
|
140
|
+
fail: "\u2717",
|
|
141
|
+
running: "\u25CF",
|
|
142
|
+
branch: "\u251C",
|
|
143
|
+
branchEnd: "\u2514",
|
|
144
|
+
branchStub: "\u2502",
|
|
145
|
+
rule: "\u2500",
|
|
146
|
+
spinFrames: ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827"]
|
|
147
|
+
};
|
|
148
|
+
var SURFACE2 = proxyThemeValue(() => surfaceFromTheme(currentTheme()));
|
|
149
|
+
var FG2 = proxyThemeValue(() => fgFromTheme(currentTheme()));
|
|
150
|
+
|
|
151
|
+
export {
|
|
152
|
+
ThemeProvider,
|
|
153
|
+
useThemeTokens,
|
|
154
|
+
useTheme,
|
|
155
|
+
useColor,
|
|
156
|
+
GRADIENT,
|
|
157
|
+
COLOR,
|
|
158
|
+
GLYPH
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=chunk-D5NFKRGO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/ui/theme/context.tsx","../../src/cli/ui/theme.ts"],"sourcesContent":["import React from \"react\";\nimport {\n DEFAULT_THEME_NAME,\n THEMES,\n type ThemeName,\n type ThemeTokens,\n resolveThemeName,\n setActiveTheme,\n} from \"./tokens.js\";\n\nconst ThemeContext = React.createContext<ThemeTokens>(THEMES[DEFAULT_THEME_NAME]);\n\nexport function ThemeProvider({\n children,\n name,\n}: {\n children: React.ReactNode;\n name?: string | null;\n}): React.ReactElement {\n const theme = THEMES[resolveThemeName(name)];\n const restoreActiveTheme = setActiveTheme(theme);\n\n React.useLayoutEffect(() => restoreActiveTheme, [restoreActiveTheme]);\n\n return <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>;\n}\n\nexport function useThemeTokens(): ThemeTokens {\n return React.useContext(ThemeContext);\n}\n\nexport function useTheme(): ThemeTokens {\n return useThemeTokens();\n}\n\nexport type { ThemeName, ThemeTokens };\n","import React from \"react\";\nimport { useThemeTokens } from \"./theme/context.js\";\nimport {\n CARD,\n FG as TOKEN_FG,\n SURFACE as TOKEN_SURFACE,\n TONE,\n TONE_ACTIVE,\n type ThemeTokens,\n} from \"./theme/tokens.js\";\n\nexport type UiColor = ReturnType<typeof colorFromTheme>;\nexport type UiGradient = ReturnType<typeof gradientFromTheme>;\nexport type UiSurface = ReturnType<typeof surfaceFromTheme>;\nexport type UiFg = ReturnType<typeof fgFromTheme>;\n\nexport function gradientFromTheme(theme: ThemeTokens): ReadonlyArray<string> {\n return [\n theme.tone.ok,\n theme.tone.brand,\n theme.tone.info,\n theme.toneActive.brand,\n theme.toneActive.violet,\n theme.tone.accent,\n theme.toneActive.accent,\n theme.tone.err,\n ];\n}\n\nexport function colorFromTheme(theme: ThemeTokens) {\n return {\n primary: theme.tone.brand,\n accent: theme.tone.accent,\n brand: theme.tone.ok,\n\n user: theme.tone.brand,\n assistant: theme.tone.ok,\n tool: theme.tone.warn,\n toolErr: theme.tone.err,\n info: theme.fg.sub,\n warn: theme.tone.warn,\n err: theme.tone.err,\n ok: theme.tone.ok,\n } as const;\n}\n\nexport function surfaceFromTheme(theme: ThemeTokens) {\n return {\n canvas: theme.surface.bg,\n shell: theme.surface.bgInput,\n card: theme.surface.bgElev,\n elev: theme.surface.bgElev,\n sel: theme.surface.bgInput,\n line: theme.fg.faint,\n lineSoft: theme.fg.meta,\n } as const;\n}\n\nexport function fgFromTheme(theme: ThemeTokens) {\n return {\n strong: theme.fg.strong,\n default: theme.fg.body,\n dim: theme.fg.sub,\n faint: theme.fg.meta,\n ghost: theme.fg.faint,\n } as const;\n}\n\nfunction proxyThemeValue<T extends object>(build: () => T): T {\n const target = build();\n return new Proxy(target, {\n get(_target, prop: string | symbol) {\n return build()[prop as keyof T];\n },\n getOwnPropertyDescriptor(_target, prop: string | symbol) {\n return Reflect.getOwnPropertyDescriptor(build(), prop);\n },\n has(_target, prop: string | symbol) {\n return prop in build();\n },\n ownKeys() {\n return Reflect.ownKeys(build());\n },\n });\n}\n\nfunction currentTheme(): ThemeTokens {\n return {\n fg: TOKEN_FG,\n tone: TONE,\n toneActive: TONE_ACTIVE,\n surface: TOKEN_SURFACE,\n card: CARD,\n };\n}\n\nexport function useGradient(): UiGradient {\n const theme = useThemeTokens();\n return React.useMemo(() => gradientFromTheme(theme), [theme]);\n}\n\nexport function useColor(): UiColor {\n const theme = useThemeTokens();\n return React.useMemo(() => colorFromTheme(theme), [theme]);\n}\n\nexport function useUiSurface(): UiSurface {\n const theme = useThemeTokens();\n return React.useMemo(() => surfaceFromTheme(theme), [theme]);\n}\n\nexport function useUiFg(): UiFg {\n const theme = useThemeTokens();\n return React.useMemo(() => fgFromTheme(theme), [theme]);\n}\n\nexport const GRADIENT = proxyThemeValue(() => gradientFromTheme(currentTheme()));\nexport const COLOR = proxyThemeValue(() => colorFromTheme(currentTheme()));\n\nexport const GLYPH = {\n brand: \"●\",\n user: \"●\",\n assistant: \"●\",\n toolOk: \"✓\",\n toolErr: \"✗\",\n warn: \"⚠\",\n err: \"✗\",\n arrow: \"▸\",\n bullet: \"·\",\n bar: \"│\",\n thinBar: \"│\",\n block: \"█\",\n shade1: \"░\",\n shade2: \"▒\",\n shade3: \"▓\",\n\n done: \"✓\",\n cur: \"▸\",\n pending: \"○\",\n fail: \"✗\",\n running: \"●\",\n\n branch: \"├\",\n branchEnd: \"└\",\n branchStub: \"│\",\n rule: \"─\",\n\n spinFrames: [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\"] as readonly string[],\n} as const;\n\nexport const SURFACE = proxyThemeValue(() => surfaceFromTheme(currentTheme()));\nexport const FG = proxyThemeValue(() => fgFromTheme(currentTheme()));\n\nexport function gradientCells(\n width: number,\n glyph: string = GLYPH.block,\n gradient: ReadonlyArray<string> = GRADIENT,\n): Array<{ ch: string; color: string }> {\n const cells: Array<{ ch: string; color: string }> = [];\n if (width <= 0) return cells;\n const last = gradient.length - 1;\n for (let i = 0; i < width; i++) {\n if (last <= 0) {\n cells.push({ ch: glyph, color: gradient[0] ?? COLOR.primary });\n continue;\n }\n const t = width === 1 ? 0 : (i * last) / (width - 1);\n const lo = Math.floor(t);\n const hi = Math.min(last, lo + 1);\n const color = t - lo < 0.5 ? gradient[lo]! : gradient[hi]!;\n cells.push({ ch: glyph, color });\n }\n return cells;\n}\n"],"mappings":"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","names":["React","import_react","React","SURFACE","FG"]}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __cr } from 'node:module'; if (typeof globalThis.require === 'undefined') { globalThis.require = __cr(import.meta.url); }
|
|
3
|
+
|
|
4
|
+
// src/cli/cpu-prof.ts
|
|
5
|
+
import { writeFileSync } from "fs";
|
|
6
|
+
import { Session } from "inspector/promises";
|
|
7
|
+
import { resolve } from "path";
|
|
8
|
+
import { gzipSync } from "zlib";
|
|
9
|
+
var session = null;
|
|
10
|
+
var outPath = null;
|
|
11
|
+
var signalHandlerInstalled = false;
|
|
12
|
+
var stopping = false;
|
|
13
|
+
function defaultOutPath() {
|
|
14
|
+
const stamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").replace("Z", "");
|
|
15
|
+
return resolve(process.cwd(), `carboncode-cpu-${stamp}.cpuprofile`);
|
|
16
|
+
}
|
|
17
|
+
async function startCpuProfile(pathArg) {
|
|
18
|
+
if (session) return outPath ?? defaultOutPath();
|
|
19
|
+
outPath = typeof pathArg === "string" ? resolve(pathArg) : defaultOutPath();
|
|
20
|
+
session = new Session();
|
|
21
|
+
session.connect();
|
|
22
|
+
await session.post("Profiler.enable");
|
|
23
|
+
await session.post("Profiler.start");
|
|
24
|
+
process.stderr.write(`\u25B8 cpu profile recording \u2014 will save to ${outPath} on exit
|
|
25
|
+
`);
|
|
26
|
+
installSignalHandler();
|
|
27
|
+
return outPath;
|
|
28
|
+
}
|
|
29
|
+
async function stopAndSaveCpuProfile() {
|
|
30
|
+
if (!session || !outPath || stopping) return;
|
|
31
|
+
stopping = true;
|
|
32
|
+
const s = session;
|
|
33
|
+
const baseOut = outPath;
|
|
34
|
+
session = null;
|
|
35
|
+
try {
|
|
36
|
+
const { profile } = await s.post("Profiler.stop");
|
|
37
|
+
const json = JSON.stringify(profile);
|
|
38
|
+
const gz = gzipSync(json);
|
|
39
|
+
const gzPath = `${baseOut}.gz`;
|
|
40
|
+
writeFileSync(gzPath, gz);
|
|
41
|
+
const mb = (gz.length / (1024 * 1024)).toFixed(2);
|
|
42
|
+
process.stderr.write(
|
|
43
|
+
`\u25B8 cpu profile saved \u2192 ${gzPath} (${mb} MB gzipped)
|
|
44
|
+
drag into a GitHub issue comment, or:
|
|
45
|
+
gh issue comment <N> --repo Yapie0/carboncode -F "${gzPath}"
|
|
46
|
+
`
|
|
47
|
+
);
|
|
48
|
+
} catch (e) {
|
|
49
|
+
process.stderr.write(`\u25B2 cpu profile save failed: ${e.message}
|
|
50
|
+
`);
|
|
51
|
+
} finally {
|
|
52
|
+
try {
|
|
53
|
+
s.disconnect();
|
|
54
|
+
} catch {
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function installSignalHandler() {
|
|
59
|
+
if (signalHandlerInstalled) return;
|
|
60
|
+
signalHandlerInstalled = true;
|
|
61
|
+
for (const sig of ["SIGINT", "SIGTERM", "SIGHUP"]) {
|
|
62
|
+
process.on(sig, () => {
|
|
63
|
+
void (async () => {
|
|
64
|
+
await stopAndSaveCpuProfile();
|
|
65
|
+
process.exit(sig === "SIGINT" ? 130 : 0);
|
|
66
|
+
})();
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// src/cli/startup-profile.ts
|
|
72
|
+
import { performance } from "perf_hooks";
|
|
73
|
+
var marks = [];
|
|
74
|
+
var dumped = false;
|
|
75
|
+
function envFlag() {
|
|
76
|
+
const v = process.env.REASONIX_PROFILE_STARTUP;
|
|
77
|
+
return v === "1" || v === "true" || v === "yes";
|
|
78
|
+
}
|
|
79
|
+
function markPhase(name) {
|
|
80
|
+
if (!envFlag()) return;
|
|
81
|
+
marks.push({ name, t: performance.now() });
|
|
82
|
+
}
|
|
83
|
+
function dumpStartupProfile(stream = process.stderr) {
|
|
84
|
+
if (!envFlag() || dumped || marks.length === 0) return;
|
|
85
|
+
dumped = true;
|
|
86
|
+
const totalMs = marks[marks.length - 1].t;
|
|
87
|
+
const widest = String(Math.round(totalMs)).length;
|
|
88
|
+
const lines = ["[startup-profile]"];
|
|
89
|
+
let prev = 0;
|
|
90
|
+
for (const m of marks) {
|
|
91
|
+
const cum = Math.round(m.t).toString().padStart(widest);
|
|
92
|
+
const delta = Math.round(m.t - prev);
|
|
93
|
+
lines.push(` ${cum}ms ${m.name.padEnd(28)} (+${delta})`);
|
|
94
|
+
prev = m.t;
|
|
95
|
+
}
|
|
96
|
+
lines.push(
|
|
97
|
+
`\u2500\u2500\u2500 ${Math.round(totalMs)}ms total \xB7 last phase ${marks[marks.length - 1].name} \xB7 set REASONIX_PROFILE_STARTUP=0 to silence`
|
|
98
|
+
);
|
|
99
|
+
stream.write(`${lines.join("\n")}
|
|
100
|
+
`);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export {
|
|
104
|
+
startCpuProfile,
|
|
105
|
+
stopAndSaveCpuProfile,
|
|
106
|
+
markPhase,
|
|
107
|
+
dumpStartupProfile
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=chunk-ECHSFYOY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/cpu-prof.ts","../../src/cli/startup-profile.ts"],"sourcesContent":["import { writeFileSync } from \"node:fs\";\nimport { Session } from \"node:inspector/promises\";\nimport { resolve } from \"node:path\";\nimport { gzipSync } from \"node:zlib\";\n\nlet session: Session | null = null;\nlet outPath: string | null = null;\nlet signalHandlerInstalled = false;\nlet stopping = false;\n\nfunction defaultOutPath(): string {\n const stamp = new Date().toISOString().replace(/[:.]/g, \"-\").replace(\"Z\", \"\");\n return resolve(process.cwd(), `carboncode-cpu-${stamp}.cpuprofile`);\n}\n\nexport async function startCpuProfile(pathArg?: string | true): Promise<string> {\n if (session) return outPath ?? defaultOutPath();\n outPath = typeof pathArg === \"string\" ? resolve(pathArg) : defaultOutPath();\n session = new Session();\n session.connect();\n await session.post(\"Profiler.enable\");\n await session.post(\"Profiler.start\");\n process.stderr.write(`▸ cpu profile recording — will save to ${outPath} on exit\\n`);\n installSignalHandler();\n return outPath;\n}\n\nexport async function stopAndSaveCpuProfile(): Promise<void> {\n if (!session || !outPath || stopping) return;\n stopping = true;\n const s = session;\n const baseOut = outPath;\n session = null;\n try {\n const { profile } = (await s.post(\"Profiler.stop\")) as { profile: unknown };\n const json = JSON.stringify(profile);\n const gz = gzipSync(json);\n const gzPath = `${baseOut}.gz`;\n writeFileSync(gzPath, gz);\n const mb = (gz.length / (1024 * 1024)).toFixed(2);\n process.stderr.write(\n `▸ cpu profile saved → ${gzPath} (${mb} MB gzipped)\\n drag into a GitHub issue comment, or:\\n gh issue comment <N> --repo Yapie0/carboncode -F \"${gzPath}\"\\n`,\n );\n } catch (e) {\n process.stderr.write(`▲ cpu profile save failed: ${(e as Error).message}\\n`);\n } finally {\n try {\n s.disconnect();\n } catch {\n /* ignore */\n }\n }\n}\n\nfunction installSignalHandler(): void {\n if (signalHandlerInstalled) return;\n signalHandlerInstalled = true;\n for (const sig of [\"SIGINT\", \"SIGTERM\", \"SIGHUP\"] as const) {\n process.on(sig, () => {\n void (async () => {\n await stopAndSaveCpuProfile();\n process.exit(sig === \"SIGINT\" ? 130 : 0);\n })();\n });\n }\n}\n","import { performance } from \"node:perf_hooks\";\n\ninterface PhaseMark {\n name: string;\n t: number;\n}\n\nconst marks: PhaseMark[] = [];\nlet dumped = false;\n\nfunction envFlag(): boolean {\n const v = process.env.REASONIX_PROFILE_STARTUP;\n return v === \"1\" || v === \"true\" || v === \"yes\";\n}\n\nexport function isStartupProfileEnabled(): boolean {\n return envFlag();\n}\n\nexport function markPhase(name: string): void {\n if (!envFlag()) return;\n marks.push({ name, t: performance.now() });\n}\n\nexport function dumpStartupProfile(stream: NodeJS.WriteStream = process.stderr): void {\n if (!envFlag() || dumped || marks.length === 0) return;\n dumped = true;\n const totalMs = marks[marks.length - 1]!.t;\n const widest = String(Math.round(totalMs)).length;\n const lines: string[] = [\"[startup-profile]\"];\n let prev = 0;\n for (const m of marks) {\n const cum = Math.round(m.t).toString().padStart(widest);\n const delta = Math.round(m.t - prev);\n lines.push(` ${cum}ms ${m.name.padEnd(28)} (+${delta})`);\n prev = m.t;\n }\n lines.push(\n `─── ${Math.round(totalMs)}ms total · last phase ${marks[marks.length - 1]!.name} · set REASONIX_PROFILE_STARTUP=0 to silence`,\n );\n stream.write(`${lines.join(\"\\n\")}\\n`);\n}\n\nexport function _resetForTests(): void {\n marks.length = 0;\n dumped = false;\n}\n"],"mappings":"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","names":[]}
|