@kolisachint/hoocode-agent 0.5.39 → 0.5.40
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/CHANGELOG.md +38 -0
- package/dist/modes/interactive/theme/solarized-dark.json +107 -0
- package/dist/modes/interactive/theme/solarized-light.json +110 -0
- package/docs/themes.md +53 -1
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.40] - 2026-08-30
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- A `solarized-light` / `solarized-dark` pair: Ethan Schoonover's palette kept
|
|
8
|
+
as it was designed rather than corrected to a contrast floor.
|
|
9
|
+
|
|
10
|
+
Solarized is one palette read from both ends — eight monotones on a symmetric
|
|
11
|
+
CIELAB lightness ramp, and eight accents that are the *same hex* on either
|
|
12
|
+
ground. The two themes are that ramp with the roles mirrored (`base03`↔`base3`
|
|
13
|
+
for the page, `base02`↔`base2` for the highlight, `base01`↔`base1` for
|
|
14
|
+
comments, `base00`↔`base0` for body), and nothing is retuned per mode:
|
|
15
|
+
`success` is `green` `#859900` and `error` is `red` `#dc322f` on cream and on
|
|
16
|
+
slate alike. `test/theme-contrast.test.ts` checks the two files against each
|
|
17
|
+
other for exactly that, because a theme that drifts an accent between modes
|
|
18
|
+
has stopped being this palette.
|
|
19
|
+
|
|
20
|
+
Each mode has three content tones rather than a ramp of grays, and the tokens
|
|
21
|
+
are mapped onto them: `text`/`toolTitle` emphasized, `muted`/`toolOutput`
|
|
22
|
+
body, `dim` and the quotes, rules and syntax comments in the comment tone at
|
|
23
|
+
2.0-2.8:1. That is where Solarized puts its comments, so this pair is neither
|
|
24
|
+
AAA like the accessible themes nor AA like `vox-*` — it holds the contrast
|
|
25
|
+
Solarized actually has, tier by tier (content 3.2:1, accents 2.3:1, comments
|
|
26
|
+
1.9:1), on every surface it paints and on both Solarized terminal stops.
|
|
27
|
+
Anyone who needs a guaranteed floor still wants `warm-*`, `colorsafe-*` or
|
|
28
|
+
`high-contrast-*`, and the theme docs say so.
|
|
29
|
+
|
|
30
|
+
Two things the TUI needs that sixteen colors do not cover. The transcript
|
|
31
|
+
wants a surface per tool state where Solarized ships two background stops, so
|
|
32
|
+
each sheet is mixed from the accent that already means that state and then
|
|
33
|
+
pulled back to the highlight's own lightness — a state reads through hue
|
|
34
|
+
instead of by getting louder, which is what keeps the ink on a tool box at the
|
|
35
|
+
contrast it has on the page. And position gets no hue at all: `selectedBg` and
|
|
36
|
+
the radar mark are neutrals on the `base03`→`base01` axis, one step off the
|
|
37
|
+
page. Those surfaces are the only colors in either file that are not
|
|
38
|
+
canonical, and they are named in `vars`; the test rejects a non-canonical
|
|
39
|
+
*ink*.
|
|
40
|
+
|
|
3
41
|
## [0.5.39] - 2026-08-28
|
|
4
42
|
|
|
5
43
|
### Fixed
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/kolisachint/hoocode/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
|
3
|
+
"name": "solarized-dark",
|
|
4
|
+
"description": "Solarized: the sixteen canonical colors, dark ground, low selective contrast",
|
|
5
|
+
"vars": {
|
|
6
|
+
"base03": "#002b36",
|
|
7
|
+
"base02": "#073642",
|
|
8
|
+
"base01": "#586e75",
|
|
9
|
+
"base00": "#657b83",
|
|
10
|
+
"base0": "#839496",
|
|
11
|
+
"base1": "#93a1a1",
|
|
12
|
+
"base2": "#eee8d5",
|
|
13
|
+
"base3": "#fdf6e3",
|
|
14
|
+
"yellow": "#b58900",
|
|
15
|
+
"orange": "#cb4b16",
|
|
16
|
+
"red": "#dc322f",
|
|
17
|
+
"magenta": "#d33682",
|
|
18
|
+
"violet": "#6c71c4",
|
|
19
|
+
"blue": "#268bd2",
|
|
20
|
+
"cyan": "#2aa198",
|
|
21
|
+
"green": "#859900",
|
|
22
|
+
"selectedBg": "#2e3c41",
|
|
23
|
+
"toolPendingBg": "#073450",
|
|
24
|
+
"toolSuccessBg": "#2a3514",
|
|
25
|
+
"toolErrorBg": "#5a1c20",
|
|
26
|
+
"customMsgBg": "#272f52",
|
|
27
|
+
"warningBg": "#3c2f14",
|
|
28
|
+
"activeToolBg": "#04313d",
|
|
29
|
+
"track": "#37494e"
|
|
30
|
+
},
|
|
31
|
+
"colors": {
|
|
32
|
+
"accent": "cyan",
|
|
33
|
+
"border": "blue",
|
|
34
|
+
"borderAccent": "cyan",
|
|
35
|
+
"borderMuted": "base01",
|
|
36
|
+
"success": "green",
|
|
37
|
+
"error": "red",
|
|
38
|
+
"warning": "yellow",
|
|
39
|
+
"muted": "base0",
|
|
40
|
+
"dim": "base01",
|
|
41
|
+
"text": "base1",
|
|
42
|
+
"thinkingText": "base01",
|
|
43
|
+
|
|
44
|
+
"selectedBg": "selectedBg",
|
|
45
|
+
"userMessageBg": "base02",
|
|
46
|
+
"userMessageText": "base1",
|
|
47
|
+
"customMessageBg": "customMsgBg",
|
|
48
|
+
"customMessageText": "base1",
|
|
49
|
+
"customMessageLabel": "violet",
|
|
50
|
+
"toolPendingBg": "toolPendingBg",
|
|
51
|
+
"toolSuccessBg": "toolSuccessBg",
|
|
52
|
+
"toolErrorBg": "toolErrorBg",
|
|
53
|
+
"warningBg": "warningBg",
|
|
54
|
+
"toolTitle": "base1",
|
|
55
|
+
"toolOutput": "base0",
|
|
56
|
+
|
|
57
|
+
"mdHeading": "orange",
|
|
58
|
+
"mdLink": "blue",
|
|
59
|
+
"mdLinkUrl": "base01",
|
|
60
|
+
"mdCode": "cyan",
|
|
61
|
+
"mdCodeBlock": "base0",
|
|
62
|
+
"mdCodeBlockBorder": "base01",
|
|
63
|
+
"mdQuote": "base01",
|
|
64
|
+
"mdQuoteBorder": "cyan",
|
|
65
|
+
"mdHr": "base01",
|
|
66
|
+
"mdListBullet": "cyan",
|
|
67
|
+
|
|
68
|
+
"toolDiffAdded": "green",
|
|
69
|
+
"toolDiffRemoved": "red",
|
|
70
|
+
"toolDiffContext": "base01",
|
|
71
|
+
|
|
72
|
+
"syntaxComment": "base01",
|
|
73
|
+
"syntaxKeyword": "green",
|
|
74
|
+
"syntaxFunction": "blue",
|
|
75
|
+
"syntaxVariable": "violet",
|
|
76
|
+
"syntaxString": "cyan",
|
|
77
|
+
"syntaxNumber": "magenta",
|
|
78
|
+
"syntaxType": "yellow",
|
|
79
|
+
"syntaxOperator": "base0",
|
|
80
|
+
"syntaxPunctuation": "base0",
|
|
81
|
+
|
|
82
|
+
"thinkingOff": "base01",
|
|
83
|
+
"thinkingMinimal": "base0",
|
|
84
|
+
"thinkingLow": "blue",
|
|
85
|
+
"thinkingMedium": "cyan",
|
|
86
|
+
"thinkingHigh": "violet",
|
|
87
|
+
"thinkingXhigh": "magenta",
|
|
88
|
+
|
|
89
|
+
"bashMode": "green",
|
|
90
|
+
|
|
91
|
+
"agent1": "cyan",
|
|
92
|
+
"agent2": "violet",
|
|
93
|
+
"agent3": "yellow",
|
|
94
|
+
"agent4": "magenta",
|
|
95
|
+
"agent5": "green",
|
|
96
|
+
"agent6": "blue",
|
|
97
|
+
"mcp": "orange",
|
|
98
|
+
|
|
99
|
+
"halftone": "track",
|
|
100
|
+
"activeToolBg": "activeToolBg"
|
|
101
|
+
},
|
|
102
|
+
"export": {
|
|
103
|
+
"pageBg": "#002b36",
|
|
104
|
+
"cardBg": "#073642",
|
|
105
|
+
"infoBg": "#3c2f14"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/kolisachint/hoocode/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
|
3
|
+
"name": "solarized-light",
|
|
4
|
+
"description": "Solarized: the same sixteen colors, light ground, low selective contrast",
|
|
5
|
+
"vars": {
|
|
6
|
+
"base03": "#002b36",
|
|
7
|
+
"base02": "#073642",
|
|
8
|
+
"base01": "#586e75",
|
|
9
|
+
"base00": "#657b83",
|
|
10
|
+
"base0": "#839496",
|
|
11
|
+
"base1": "#93a1a1",
|
|
12
|
+
"base2": "#eee8d5",
|
|
13
|
+
"base3": "#fdf6e3",
|
|
14
|
+
"yellow": "#b58900",
|
|
15
|
+
"orange": "#cb4b16",
|
|
16
|
+
"red": "#dc322f",
|
|
17
|
+
"magenta": "#d33682",
|
|
18
|
+
"violet": "#6c71c4",
|
|
19
|
+
"blue": "#268bd2",
|
|
20
|
+
"cyan": "#2aa198",
|
|
21
|
+
"green": "#859900",
|
|
22
|
+
"selectedBg": "#d9dfd6",
|
|
23
|
+
"toolPendingBg": "#daeafd",
|
|
24
|
+
"toolSuccessBg": "#eaebbf",
|
|
25
|
+
"toolErrorBg": "#ffdac8",
|
|
26
|
+
"customMsgBg": "#e9e6fa",
|
|
27
|
+
"warningBg": "#fce5bf",
|
|
28
|
+
"activeToolBg": "#f5efdc",
|
|
29
|
+
"track": "#cacdc4"
|
|
30
|
+
},
|
|
31
|
+
"colors": {
|
|
32
|
+
"accent": "cyan",
|
|
33
|
+
"border": "blue",
|
|
34
|
+
"borderAccent": "cyan",
|
|
35
|
+
"borderMuted": "base1",
|
|
36
|
+
"success": "green",
|
|
37
|
+
"error": "red",
|
|
38
|
+
"warning": "yellow",
|
|
39
|
+
"muted": "base00",
|
|
40
|
+
"dim": "base1",
|
|
41
|
+
"text": "base01",
|
|
42
|
+
"thinkingText": "base1",
|
|
43
|
+
|
|
44
|
+
"selectedBg": "selectedBg",
|
|
45
|
+
"userMessageBg": "base2",
|
|
46
|
+
"userMessageText": "base01",
|
|
47
|
+
"customMessageBg": "customMsgBg",
|
|
48
|
+
"customMessageText": "base01",
|
|
49
|
+
"customMessageLabel": "violet",
|
|
50
|
+
"toolPendingBg": "toolPendingBg",
|
|
51
|
+
"toolSuccessBg": "toolSuccessBg",
|
|
52
|
+
"toolErrorBg": "toolErrorBg",
|
|
53
|
+
"warningBg": "warningBg",
|
|
54
|
+
"toolTitle": "base01",
|
|
55
|
+
"toolOutput": "base00",
|
|
56
|
+
|
|
57
|
+
"mdHeading": "orange",
|
|
58
|
+
"mdLink": "blue",
|
|
59
|
+
"mdLinkUrl": "base1",
|
|
60
|
+
"mdCode": "cyan",
|
|
61
|
+
"mdCodeBlock": "base00",
|
|
62
|
+
"mdCodeBlockBorder": "base1",
|
|
63
|
+
"mdQuote": "base1",
|
|
64
|
+
"mdQuoteBorder": "cyan",
|
|
65
|
+
"mdHr": "base1",
|
|
66
|
+
"mdListBullet": "cyan",
|
|
67
|
+
|
|
68
|
+
"toolDiffAdded": "green",
|
|
69
|
+
"toolDiffRemoved": "red",
|
|
70
|
+
"toolDiffContext": "base1",
|
|
71
|
+
|
|
72
|
+
"syntaxComment": "base1",
|
|
73
|
+
"syntaxKeyword": "green",
|
|
74
|
+
"syntaxFunction": "blue",
|
|
75
|
+
"syntaxVariable": "violet",
|
|
76
|
+
"syntaxString": "cyan",
|
|
77
|
+
"syntaxNumber": "magenta",
|
|
78
|
+
"syntaxType": "yellow",
|
|
79
|
+
"syntaxOperator": "base00",
|
|
80
|
+
"syntaxPunctuation": "base00",
|
|
81
|
+
|
|
82
|
+
"thinkingOff": "base1",
|
|
83
|
+
"thinkingMinimal": "base00",
|
|
84
|
+
"thinkingLow": "blue",
|
|
85
|
+
"thinkingMedium": "cyan",
|
|
86
|
+
"thinkingHigh": "violet",
|
|
87
|
+
"thinkingXhigh": "magenta",
|
|
88
|
+
|
|
89
|
+
"bashMode": "green",
|
|
90
|
+
|
|
91
|
+
"agent1": "cyan",
|
|
92
|
+
"agent2": "violet",
|
|
93
|
+
"agent3": "yellow",
|
|
94
|
+
"agent4": "magenta",
|
|
95
|
+
"agent5": "green",
|
|
96
|
+
"agent6": "blue",
|
|
97
|
+
"mcp": "orange",
|
|
98
|
+
|
|
99
|
+
"brandBg": "base02",
|
|
100
|
+
"brandText": "base3",
|
|
101
|
+
|
|
102
|
+
"halftone": "track",
|
|
103
|
+
"activeToolBg": "activeToolBg"
|
|
104
|
+
},
|
|
105
|
+
"export": {
|
|
106
|
+
"pageBg": "#fdf6e3",
|
|
107
|
+
"cardBg": "#eee8d5",
|
|
108
|
+
"infoBg": "#fce5bf"
|
|
109
|
+
}
|
|
110
|
+
}
|
package/docs/themes.md
CHANGED
|
@@ -44,9 +44,12 @@ Disable discovery with `--no-themes`.
|
|
|
44
44
|
| `vox-light` | cream | Ink on paper; yellow survives as highlight and brand chip |
|
|
45
45
|
| `vox-cutout-light` | cream / Solarized Light | Paper cut-outs: bold flat stocks, cut edges, AAA ink |
|
|
46
46
|
| `vox-cutout-dark` | Solarized Dark | The same cut-outs on newsprint black; AAA ink |
|
|
47
|
+
| `solarized-light` | Solarized Light | The canonical sixteen colors on `base3`; low, selective contrast |
|
|
48
|
+
| `solarized-dark` | Solarized Dark | The same sixteen on `base03`; the accents do not change |
|
|
47
49
|
|
|
48
50
|
The six accessible themes are `high-contrast-*`, `warm-*`, and `colorsafe-*`; the
|
|
49
|
-
`vox-*` themes are style themes and are described separately
|
|
51
|
+
`vox-*` and `solarized-*` themes are style themes and are described separately
|
|
52
|
+
below. The six are built
|
|
50
53
|
for low vision. Every color they
|
|
51
54
|
draw clears **WCAG AAA (7:1)** against every surface the TUI paints behind it —
|
|
52
55
|
the page, selected rows, user messages, and all three tool-box states — and none
|
|
@@ -145,6 +148,55 @@ holds; the sheets simply read a touch louder.
|
|
|
145
148
|
Both themes set the four cut-out token groups described under
|
|
146
149
|
[Optional Tokens](#optional-tokens).
|
|
147
150
|
|
|
151
|
+
### The `solarized-*` pair
|
|
152
|
+
|
|
153
|
+
Ethan Schoonover's Solarized, kept as it was designed rather than corrected. Two
|
|
154
|
+
things define it, and both are enforced by `test/theme-contrast.test.ts`.
|
|
155
|
+
|
|
156
|
+
**One palette, read from both ends.** Solarized is sixteen colors: eight
|
|
157
|
+
monotones on a symmetric CIELAB lightness ramp, and eight accents. The two
|
|
158
|
+
themes are the same ramp with the roles mirrored — `base03`↔`base3` for the
|
|
159
|
+
page, `base02`↔`base2` for the highlight, `base01`↔`base1` for comments and
|
|
160
|
+
tertiary chrome, `base00`↔`base0` for body text — and the eight accents are the
|
|
161
|
+
*same hex* on both grounds. Nothing is retuned per mode: `success` is `green`
|
|
162
|
+
`#859900` and `error` is `red` `#dc322f` whether you are on cream or on slate.
|
|
163
|
+
That is the palette's whole claim, so the pair is checked against each other
|
|
164
|
+
rather than only against their own surfaces.
|
|
165
|
+
|
|
166
|
+
**Low contrast, spent selectively.** Those tones sit well below maximum contrast
|
|
167
|
+
on purpose, and each mode has three content tones rather than a ramp of grays:
|
|
168
|
+
emphasized, body, comment. `text` and `toolTitle` take the emphasized tone (5.6:1
|
|
169
|
+
on `base03`, 5.0:1 on `base3`), `muted` and `toolOutput` the body tone (4.8:1 and
|
|
170
|
+
4.1:1), and `dim` — with quotes, rules and syntax comments — the comment tone, at
|
|
171
|
+
2.0-2.8:1, which is exactly where Solarized puts its comments. Holding this pair
|
|
172
|
+
to the 7:1 floor the accessible themes clear would mean shipping something that
|
|
173
|
+
is not Solarized, so what the tests enforce is the contrast Solarized actually
|
|
174
|
+
has, tier by tier:
|
|
175
|
+
**content inks 3.2:1, accents 2.3:1, the comment tone 1.9:1**, on every surface
|
|
176
|
+
either theme paints *and* on both Solarized terminal stops. If you want a
|
|
177
|
+
guaranteed floor rather than the original, use one of the six accessible themes.
|
|
178
|
+
|
|
179
|
+
Two places where the TUI needs more than the palette ships:
|
|
180
|
+
|
|
181
|
+
- **A sheet per tool state.** Solarized has two background stops and the
|
|
182
|
+
transcript needs one for each of pending, done, failed, extension and notice.
|
|
183
|
+
Each is mixed from the accent that already means that thing and then pulled
|
|
184
|
+
back to the highlight's own lightness, so a state reads through hue and not
|
|
185
|
+
through getting louder — which is what keeps the ink on a tool box at the same
|
|
186
|
+
contrast it has on the page. They are named in `vars` and are the only colors
|
|
187
|
+
in either file that are not canonical.
|
|
188
|
+
- **A neutral for position.** `selectedBg` and the radar mark are neutrals on
|
|
189
|
+
the `base03`→`base01` axis (`base3`→`base1` on the light side), one step off
|
|
190
|
+
the page. Hue carries meaning in these themes; position does not get a hue.
|
|
191
|
+
|
|
192
|
+
`solarized-light` sets `brandBg`/`brandText` so the footer's brand mark reads as
|
|
193
|
+
a `base02` chip — a cyan bright enough to be the accent is not legible as text on
|
|
194
|
+
cream. Neither theme sets the cut-out tokens: paper shadows and headline chips
|
|
195
|
+
are the `vox-cutout-*` voice, and Solarized's is restraint.
|
|
196
|
+
|
|
197
|
+
Point your terminal at the matching Solarized background and the themes sit on
|
|
198
|
+
their own page; on pure white or pure black every floor above still holds.
|
|
199
|
+
|
|
148
200
|
## Selecting a Theme
|
|
149
201
|
|
|
150
202
|
Select a theme via `/settings` or in `settings.json`:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolisachint/hoocode-agent",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.40",
|
|
4
4
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"hoocodeConfig": {
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
"prepublishOnly": "npm run clean && npm run build"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@kolisachint/hoocode-agent-core": "^0.5.
|
|
54
|
-
"@kolisachint/hoocode-ai": "^0.5.
|
|
55
|
-
"@kolisachint/hoocode-tui": "^0.5.
|
|
53
|
+
"@kolisachint/hoocode-agent-core": "^0.5.40",
|
|
54
|
+
"@kolisachint/hoocode-ai": "^0.5.40",
|
|
55
|
+
"@kolisachint/hoocode-tui": "^0.5.40",
|
|
56
56
|
"@silvia-odwyer/photon-node": "^0.3.4",
|
|
57
57
|
"chalk": "^5.5.0",
|
|
58
58
|
"cli-highlight": "^2.1.11",
|