@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 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 below. The six are built
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`:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kolisachint/hoocode-extension-custom-provider-anthropic",
3
3
  "private": true,
4
- "version": "0.3.39",
4
+ "version": "0.3.40",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "bun": ">=1.0.0"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kolisachint/hoocode-extension-custom-provider-gitlab-duo",
3
3
  "private": true,
4
- "version": "0.3.39",
4
+ "version": "0.3.40",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "bun": ">=1.0.0"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kolisachint/hoocode-extension-sandbox",
3
3
  "private": true,
4
- "version": "0.3.39",
4
+ "version": "0.3.40",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "bun": ">=1.0.0"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kolisachint/hoocode-extension-with-deps",
3
3
  "private": true,
4
- "version": "0.3.39",
4
+ "version": "0.3.40",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "bun": ">=1.0.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolisachint/hoocode-agent",
3
- "version": "0.5.39",
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.39",
54
- "@kolisachint/hoocode-ai": "^0.5.39",
55
- "@kolisachint/hoocode-tui": "^0.5.39",
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",