@kolisachint/hoocode-agent 0.5.34 → 0.5.36

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 (54) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/dist/core/tools/read.d.ts.map +1 -1
  3. package/dist/core/tools/read.js +2 -2
  4. package/dist/core/tools/read.js.map +1 -1
  5. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  6. package/dist/modes/interactive/components/branch-summary-message.js +2 -2
  7. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  8. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  9. package/dist/modes/interactive/components/compaction-summary-message.js +2 -2
  10. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  11. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  12. package/dist/modes/interactive/components/custom-message.js +3 -2
  13. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  14. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  15. package/dist/modes/interactive/components/footer.js +5 -1
  16. package/dist/modes/interactive/components/footer.js.map +1 -1
  17. package/dist/modes/interactive/components/progress-bar.d.ts.map +1 -1
  18. package/dist/modes/interactive/components/progress-bar.js +1 -1
  19. package/dist/modes/interactive/components/progress-bar.js.map +1 -1
  20. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  21. package/dist/modes/interactive/components/skill-invocation-message.js +3 -3
  22. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  23. package/dist/modes/interactive/components/tool-chain.d.ts +11 -0
  24. package/dist/modes/interactive/components/tool-chain.d.ts.map +1 -1
  25. package/dist/modes/interactive/components/tool-chain.js +22 -2
  26. package/dist/modes/interactive/components/tool-chain.js.map +1 -1
  27. package/dist/modes/interactive/components/tool-execution.d.ts +8 -0
  28. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  29. package/dist/modes/interactive/components/tool-execution.js +15 -0
  30. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  31. package/dist/modes/interactive/components/tool-signal.d.ts +2 -0
  32. package/dist/modes/interactive/components/tool-signal.d.ts.map +1 -1
  33. package/dist/modes/interactive/components/tool-signal.js +6 -4
  34. package/dist/modes/interactive/components/tool-signal.js.map +1 -1
  35. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  36. package/dist/modes/interactive/components/user-message.js +2 -1
  37. package/dist/modes/interactive/components/user-message.js.map +1 -1
  38. package/dist/modes/interactive/interactive-mode.d.ts +4 -0
  39. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  40. package/dist/modes/interactive/interactive-mode.js +21 -1
  41. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  42. package/dist/modes/interactive/theme/theme-schema.json +28 -0
  43. package/dist/modes/interactive/theme/theme.d.ts +32 -3
  44. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  45. package/dist/modes/interactive/theme/theme.js +100 -1
  46. package/dist/modes/interactive/theme/theme.js.map +1 -1
  47. package/dist/modes/interactive/theme/vox-cutout-dark.json +117 -0
  48. package/dist/modes/interactive/theme/vox-cutout-light.json +116 -0
  49. package/docs/themes.md +111 -1
  50. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  51. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  52. package/examples/extensions/sandbox/package.json +1 -1
  53. package/examples/extensions/with-deps/package.json +1 -1
  54. package/package.json +4 -4
@@ -0,0 +1,116 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/kolisachint/hoocode/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
+ "name": "vox-cutout-light",
4
+ "description": "Paper cut-outs on a cream page: bold flat stocks, scissor-cut rules, tape-yellow highlight, AAA ink",
5
+ "vars": {
6
+ "ink": "#12100a",
7
+ "inkDark": "#241f15",
8
+ "press": "#3b3527",
9
+ "newsprint": "#4b442f",
10
+ "cut": "#332e22",
11
+ "cutMuted": "#4f4837",
12
+ "amber": "#5d4500",
13
+ "orange": "#743800",
14
+ "red": "#901709",
15
+ "green": "#035500",
16
+ "teal": "#0c514e",
17
+ "blue": "#0032ca",
18
+ "purple": "#70169d",
19
+ "magenta": "#93003d",
20
+ "steel": "#084c75",
21
+ "tapeYellow": "#ffe600",
22
+ "shadow": "#736a50",
23
+ "track": "#8a8064",
24
+ "sheetWhite": "#f7f9ff",
25
+ "stockYellow": "#ffe600",
26
+ "stockBlue": "#dfeafb",
27
+ "stockMint": "#d6efd9",
28
+ "stockBlush": "#fde0d7",
29
+ "stockLilac": "#ebe3f9",
30
+ "stockTape": "#fde3a2"
31
+ },
32
+ "colors": {
33
+ "accent": "amber",
34
+ "border": "cut",
35
+ "borderAccent": "amber",
36
+ "borderMuted": "cutMuted",
37
+ "success": "green",
38
+ "error": "red",
39
+ "warning": "orange",
40
+ "muted": "press",
41
+ "dim": "newsprint",
42
+ "text": "ink",
43
+ "thinkingText": "press",
44
+
45
+ "selectedBg": "stockYellow",
46
+ "userMessageBg": "sheetWhite",
47
+ "userMessageText": "ink",
48
+ "customMessageBg": "stockLilac",
49
+ "customMessageText": "ink",
50
+ "customMessageLabel": "purple",
51
+ "toolPendingBg": "stockBlue",
52
+ "toolSuccessBg": "stockMint",
53
+ "toolErrorBg": "stockBlush",
54
+ "warningBg": "stockTape",
55
+ "toolTitle": "ink",
56
+ "toolOutput": "press",
57
+
58
+ "mdHeading": "amber",
59
+ "mdLink": "blue",
60
+ "mdLinkUrl": "newsprint",
61
+ "mdCode": "teal",
62
+ "mdCodeBlock": "press",
63
+ "mdCodeBlockBorder": "cut",
64
+ "mdQuote": "press",
65
+ "mdQuoteBorder": "amber",
66
+ "mdHr": "cut",
67
+ "mdListBullet": "amber",
68
+
69
+ "toolDiffAdded": "green",
70
+ "toolDiffRemoved": "red",
71
+ "toolDiffContext": "newsprint",
72
+
73
+ "syntaxComment": "green",
74
+ "syntaxKeyword": "blue",
75
+ "syntaxFunction": "amber",
76
+ "syntaxVariable": "purple",
77
+ "syntaxString": "red",
78
+ "syntaxNumber": "magenta",
79
+ "syntaxType": "teal",
80
+ "syntaxOperator": "cut",
81
+ "syntaxPunctuation": "cut",
82
+
83
+ "thinkingOff": "cutMuted",
84
+ "thinkingMinimal": "inkDark",
85
+ "thinkingLow": "teal",
86
+ "thinkingMedium": "blue",
87
+ "thinkingHigh": "purple",
88
+ "thinkingXhigh": "magenta",
89
+
90
+ "bashMode": "green",
91
+
92
+ "agent1": "teal",
93
+ "agent2": "purple",
94
+ "agent3": "amber",
95
+ "agent4": "magenta",
96
+ "agent5": "green",
97
+ "agent6": "blue",
98
+ "mcp": "steel",
99
+
100
+ "brandBg": "ink",
101
+ "brandText": "tapeYellow",
102
+
103
+ "paperShadow": "shadow",
104
+ "halftone": "track",
105
+ "headlineBg": "ink",
106
+ "headlineText": "tapeYellow",
107
+ "tapeBg": "stockTape",
108
+ "tapeText": "ink",
109
+ "activeToolBg": "stockYellow"
110
+ },
111
+ "export": {
112
+ "pageBg": "#fdf6e3",
113
+ "cardBg": "#f7f9ff",
114
+ "infoBg": "#ffe600"
115
+ }
116
+ }
package/docs/themes.md CHANGED
@@ -42,9 +42,11 @@ Disable discovery with `--no-themes`.
42
42
  | `colorsafe-light` | white | Okabe-Ito hues, no red/green pairs |
43
43
  | `vox-dark` | newsprint black | Explanatory-journalism yellow; `warning` is orange |
44
44
  | `vox-light` | cream | Ink on paper; yellow survives as highlight and brand chip |
45
+ | `vox-cutout-light` | cream / Solarized Light | Paper cut-outs: bold flat stocks, cut edges, AAA ink |
46
+ | `vox-cutout-dark` | Solarized Dark | The same cut-outs on newsprint black; AAA ink |
45
47
 
46
48
  The six accessible themes are `high-contrast-*`, `warm-*`, and `colorsafe-*`; the
47
- `vox-*` pair is a style theme and is described separately below. The six are built
49
+ `vox-*` themes are style themes and are described separately below. The six are built
48
50
  for low vision. Every color they
49
51
  draw clears **WCAG AAA (7:1)** against every surface the TUI paints behind it —
50
52
  the page, selected rows, user messages, and all three tool-box states — and none
@@ -96,6 +98,53 @@ Two deliberate departures from the standard the default `light` theme is held to
96
98
  `brandBg`, never on a page surface, so measuring it against the page is
97
99
  meaningless. On its own chip it sits at 14.8:1.
98
100
 
101
+ ### The `vox-cutout-*` pair
102
+
103
+ The same explanatory-journalism voice cut for paper rather than newsprint: flat
104
+ stocks pasted onto the page, a scissor-cut rule around them, poster inks printed
105
+ on top. Unlike the `vox-*` pair it **is** AAA, and
106
+ `test/theme-contrast.test.ts` enforces it.
107
+
108
+ `vox-cutout-light` is cut for a cream page (Solarized Light, or anything near
109
+ `#fdf6e3`); `vox-cutout-dark` is cut for Solarized Dark. Two things separate
110
+ them from `vox-light`:
111
+
112
+ - **The surfaces are stock, not washes.** `vox-light` tints its backgrounds a
113
+ degree or two off white — on a cream terminal such as Solarized Light its user
114
+ message sits ΔE 1.0 from the page, which is to say invisible. Every surface
115
+ here is a flat colored sheet held at least ΔE 10 clear of both Solarized
116
+ grounds (`base3` `#fdf6e3` and `base2` `#eee8d5`), so a message block or tool
117
+ box reads as a piece of paper laid on the page rather than a faint tint of it.
118
+ The sheets carry the state: white for what you typed, blue for work in flight,
119
+ mint for done, blush for failed, lilac for an extension, masking-tape tan for a
120
+ warning notice, and flat vox yellow for the selected row.
121
+ - **The ink is capped by the loudest sheet.** Full-strength `#ffe600` under a
122
+ selected row is the brightest surface any text has to survive, and AAA on it
123
+ puts a hard ceiling on every foreground in the palette — each ink sits within a
124
+ hair of that ceiling at ~7.2:1, as dark as a printed ink and no darker. That
125
+ ceiling is why the accent is a deep gold rather than the amber `vox-light`
126
+ uses: an amber light enough to read as yellow cannot clear 7:1 on its own
127
+ highlight band. Bold flat color and AAA pull against each other, and this theme
128
+ spends the whole budget on flat color.
129
+
130
+ It keeps `vox-light`'s two departures — rules are neutral rather than saturated,
131
+ and `brandText` is measured only on its own chip — and adds the vox rule that
132
+ `warning` is orange, never yellow.
133
+
134
+ On the dark side the same rules run in reverse: AAA on a dark ground is a
135
+ *floor*, and Solarized's `base02` is the lighter of its two stops, so it is what
136
+ every ink has to clear. The stocks are dark coloured papers — navy in flight,
137
+ deep green done, maroon failed, aubergine for an extension, burnt umber for a
138
+ warning, olive-gold selected — and they all avoid the cyan the ground itself is
139
+ made of, because a stock in the ground's own hue cannot separate from it.
140
+
141
+ Point your terminal at the matching Solarized palette and the sheets land where
142
+ they were cut to land. On pure white or pure black the contrast floor still
143
+ holds; the sheets simply read a touch louder.
144
+
145
+ Both themes set the four cut-out token groups described under
146
+ [Optional Tokens](#optional-tokens).
147
+
99
148
  ## Selecting a Theme
100
149
 
101
150
  Select a theme via `/settings` or in `settings.json`:
@@ -320,6 +369,10 @@ themes keep working.
320
369
  | `brandBg` | Background of the footer brand chip | Brand mark renders as `accent`-colored text |
321
370
  | `brandText` | Text color of the footer brand chip | Brand mark renders as `accent`-colored text |
322
371
  | `warningBg` | Fill behind a warning notice (the billing caveat box) | Falls back to `customMessageBg` |
372
+ | `paperShadow` | Offset band under a filled message block | No shadow row is drawn |
373
+ | `halftone` | Unfilled remainder of a gauge or progress track | Falls back to `dim` |
374
+ | `headlineBg`/`headlineText` | Markdown heading chip | Headings stay `mdHeading`-coloured text |
375
+ | `tapeBg`/`tapeText` | Tape-strip message label | The label keeps `customMessageLabel` in brackets |
323
376
 
324
377
  `warningBg` is a surface, not text: `warning` renders the title on it and `muted`
325
378
  the body, so it wants a low-chroma tint of the theme's warning hue rather than the
@@ -327,6 +380,63 @@ warning color itself. Every built-in sets it, and all six accessible themes keep
327
380
  every foreground at AAA against it (`test/theme-contrast.test.ts` sweeps it with
328
381
  the other surfaces).
329
382
 
383
+ ### The cut-out tokens
384
+
385
+ Four groups that draw the paper-collage language rather than only colouring it.
386
+ Every one is optional with a defined fallback, so a theme that sets none of them
387
+ renders exactly as it did before they existed; `test/theme-cutout-tokens.test.ts`
388
+ exercises both sides of each. The `vox-cutout-*` pair is the only built-in that
389
+ sets them.
390
+
391
+ **`paperShadow`** draws an offset band under a filled message block — a user
392
+ message, an extension message, an error or warning notice — so the block reads
393
+ as a sheet laid on the page rather than a colour printed into it. A terminal has
394
+ no sub-pixel offsets and no blur, so the band is one extra row of `▀`: an upper
395
+ half-block, which paints solid colour across the top half of its cells and so
396
+ hugs the block's bottom edge, indented one column to give the offset. There is
397
+ no matching right-hand column, because these boxes render at the full terminal
398
+ width and a column past the last cell has nowhere to go.
399
+
400
+ Setting it also gives the block the rest of the paper treatment, because the
401
+ three are one decision rather than three. A block that runs from margin to
402
+ margin has no right edge to cut and nowhere to cast a shadow sideways — it is a
403
+ band of colour between two screen edges, not a sheet on a page. So a theme that
404
+ sets `paperShadow` also gets a three-column gutter of page at the block's right,
405
+ a shadow along that edge as well as under it, and an edge that is cut rather
406
+ than ruled: roughly one row in five gives up a single column, always out of
407
+ padding and never out of content, from a hash that is stable for the block so
408
+ the edge does not reshuffle between frames.
409
+
410
+ It is a shape, not text, so it answers to the 2.8:1 decorative floor rather than
411
+ a text-contrast one — and it has to stay ΔE-clear of every `*Bg` token as well,
412
+ or the shadow sinks into the sheet it is hugging. On a dark theme nothing can be
413
+ darker than the page, so the band is set *lighter* than the ground: it reads as a
414
+ cut edge rather than a shadow, which is the closest a dark canvas gets.
415
+
416
+ **`halftone`** colours the unfilled remainder of a gauge or progress track. Those
417
+ tracks used `dim`, which is body-weight text: a track drawn in it reads as
418
+ writing rather than as the space the fill has yet to reach. The floor is
419
+ inverted from the usual one — the track wants to stay *below* the filled bar so
420
+ the fill keeps carrying the signal, and above roughly 2.8:1 so it is visible at
421
+ all — and it has to separate from `dim` by ΔE 11, or it has bought nothing.
422
+
423
+ **`headlineBg`/`headlineText`** render markdown headings as a filled chip instead
424
+ of coloured text. This is how a light theme keeps a vivid brand hue: inside a
425
+ chip a colour can be far brighter than it could ever be as text on the page.
426
+ `vox-cutout-light` is the case in point — its AAA ceiling pushes `accent` from
427
+ vox amber down to a deep gold, and the chip gets full-strength `#ffe600` back at
428
+ 15:1.
429
+
430
+ **`tapeBg`/`tapeText`** render the `[branch]` / `[skill]` / `[extension]` tag that
431
+ heads a message block as a strip laid across it, rather than brackets set inside
432
+ it. Kept separate from `brandBg`/`brandText` so taping a label does not restyle
433
+ the footer's brand mark.
434
+
435
+ Both chip pairs are honored **only as a pair**, and both are exempt from the
436
+ surface sweep for the same reason `brandText` is: a chip ink never renders on a
437
+ page surface, so measuring it against one says nothing. Each is measured against
438
+ its own fill instead.
439
+
330
440
  `brandBg` and `brandText` are honored **only as a pair** — set both, or neither.
331
441
  They exist for light themes, where a brand hue vivid enough to be recognizable is
332
442
  usually illegible as text on a light canvas but reads well inside a filled chip.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kolisachint/hoocode-extension-custom-provider-anthropic",
3
3
  "private": true,
4
- "version": "0.3.34",
4
+ "version": "0.3.36",
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.34",
4
+ "version": "0.3.36",
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.34",
4
+ "version": "0.3.36",
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.34",
4
+ "version": "0.3.36",
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.34",
3
+ "version": "0.5.36",
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.34",
54
- "@kolisachint/hoocode-ai": "^0.5.34",
55
- "@kolisachint/hoocode-tui": "^0.5.34",
53
+ "@kolisachint/hoocode-agent-core": "^0.5.36",
54
+ "@kolisachint/hoocode-ai": "^0.5.36",
55
+ "@kolisachint/hoocode-tui": "^0.5.36",
56
56
  "@silvia-odwyer/photon-node": "^0.3.4",
57
57
  "chalk": "^5.5.0",
58
58
  "cli-highlight": "^2.1.11",