@kolisachint/hoocode-agent 0.5.39 → 0.5.41

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 (58) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/dist/core/agent-session.d.ts +10 -0
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +18 -1
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/footer-data-provider.d.ts.map +1 -1
  7. package/dist/core/footer-data-provider.js +6 -67
  8. package/dist/core/footer-data-provider.js.map +1 -1
  9. package/dist/core/git-branch.d.ts +35 -0
  10. package/dist/core/git-branch.d.ts.map +1 -0
  11. package/dist/core/git-branch.js +88 -0
  12. package/dist/core/git-branch.js.map +1 -0
  13. package/dist/core/session-identity.d.ts +25 -0
  14. package/dist/core/session-identity.d.ts.map +1 -0
  15. package/dist/core/session-identity.js +137 -0
  16. package/dist/core/session-identity.js.map +1 -0
  17. package/dist/core/session-manager.d.ts +38 -4
  18. package/dist/core/session-manager.d.ts.map +1 -1
  19. package/dist/core/session-manager.js +62 -10
  20. package/dist/core/session-manager.js.map +1 -1
  21. package/dist/core/slash-commands.d.ts.map +1 -1
  22. package/dist/core/slash-commands.js +1 -0
  23. package/dist/core/slash-commands.js.map +1 -1
  24. package/dist/modes/interactive/command-executor.d.ts +8 -0
  25. package/dist/modes/interactive/command-executor.d.ts.map +1 -1
  26. package/dist/modes/interactive/command-executor.js +39 -11
  27. package/dist/modes/interactive/command-executor.js.map +1 -1
  28. package/dist/modes/interactive/components/footer.d.ts +7 -0
  29. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  30. package/dist/modes/interactive/components/footer.js +14 -1
  31. package/dist/modes/interactive/components/footer.js.map +1 -1
  32. package/dist/modes/interactive/components/session-chip.d.ts +25 -0
  33. package/dist/modes/interactive/components/session-chip.d.ts.map +1 -0
  34. package/dist/modes/interactive/components/session-chip.js +62 -0
  35. package/dist/modes/interactive/components/session-chip.js.map +1 -0
  36. package/dist/modes/interactive/components/session-color-selector.d.ts +14 -0
  37. package/dist/modes/interactive/components/session-color-selector.d.ts.map +1 -0
  38. package/dist/modes/interactive/components/session-color-selector.js +54 -0
  39. package/dist/modes/interactive/components/session-color-selector.js.map +1 -0
  40. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  41. package/dist/modes/interactive/components/session-selector.js +32 -3
  42. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  43. package/dist/modes/interactive/interactive-mode.d.ts +18 -0
  44. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  45. package/dist/modes/interactive/interactive-mode.js +75 -4
  46. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  47. package/dist/modes/interactive/theme/solarized-dark.json +107 -0
  48. package/dist/modes/interactive/theme/solarized-light.json +110 -0
  49. package/dist/modes/interactive/theme/theme.d.ts +24 -0
  50. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  51. package/dist/modes/interactive/theme/theme.js +72 -11
  52. package/dist/modes/interactive/theme/theme.js.map +1 -1
  53. package/docs/themes.md +53 -1
  54. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  55. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  56. package/examples/extensions/sandbox/package.json +1 -1
  57. package/examples/extensions/with-deps/package.json +1 -1
  58. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,103 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.5.41] - 2026-08-31
4
+
5
+ ### Added
6
+
7
+ - Sessions record the git branch they started on, and the resume list shows it.
8
+
9
+ A session you never named, that opened with "look at this", was unfindable in
10
+ the list — the first message said nothing and there was nothing else to go on.
11
+ The branch usually says exactly what the work was, and it is the rare piece of
12
+ meaning that can be written down safely: unlike a derived title it is a fact,
13
+ so it is still true a month later.
14
+
15
+ It has to be recorded rather than derived, because by the time anyone reads the
16
+ list the working tree has moved on. One optional field on the session header,
17
+ read from `.git/HEAD` at session creation — a walk up to the repo and one file
18
+ read, no subprocess outside the reftable case, sharing the footer's
19
+ implementation so the branch a session remembers is the string the footer was
20
+ showing at the time.
21
+
22
+ Shown in the picker only where it adds something: a session with a chosen name
23
+ already says what it is, and `main` names no particular work. Also in
24
+ `/session`. Sessions recorded before this simply have no branch and read as
25
+ they did.
26
+
27
+ - A session chip: the session's name, filled with its colour, laid into the
28
+ top-right of the input box.
29
+
30
+ The name used to live at the tail of the footer's busiest line — after the
31
+ brand mark, the mode, the path and the git branch, in `dim`, the quietest
32
+ colour a theme has. It answered *which session is this*, and it was the least
33
+ visible thing on screen. The chip puts the same fact where the cursor already
34
+ is, and gives it a colour so it can be recognised rather than read.
35
+
36
+ Every session now carries a name and a colour without anyone setting one. Both
37
+ are pure functions of the session id: a two-word slug from a 32x32 vocabulary
38
+ (`amber-harbor`), and a slot in the six-colour identity palette the agent tags
39
+ already use. Because they derive from the id, a resumed session comes back
40
+ wearing the same chip and a fork gets its own, with nothing to store. `/name`
41
+ and the new `/color` override either, and those choices are written to the
42
+ session's `session_info` entry, which now resolves its two fields
43
+ independently — setting a colour cannot clear a name, and renaming keeps the
44
+ colour you have already learned. `/color` on its own opens a swatch picker
45
+ that repaints the live chip as you move through it.
46
+
47
+ The chip is laid into border cells the box was already drawing, so it costs no
48
+ screen row, and it yields where it should: to the `↑ N more` scroll indicator
49
+ on the same border, and to the box itself below 48 columns, where the footer
50
+ takes the name back rather than leaving it nowhere. The editor's border colour
51
+ is untouched — it still carries thinking level and bash mode, so identity and
52
+ agent state never fight for the same pixels.
53
+
54
+ The fill's ink is picked from its own luminance, which is what lets one code
55
+ path render on a dark theme's bright hues and a light theme's deep inks alike.
56
+ `theme.fill()` is the new primitive for that: the palette lives on the
57
+ foreground side, where `theme.bg()` could not reach it.
58
+
59
+ The session picker shows the same colour as a swatch per row, and the slug for
60
+ sessions nobody has named, so a session recognised by its chip is found the
61
+ same way in the list.
62
+
63
+ ## [0.5.40] - 2026-08-30
64
+
65
+ ### Added
66
+
67
+ - A `solarized-light` / `solarized-dark` pair: Ethan Schoonover's palette kept
68
+ as it was designed rather than corrected to a contrast floor.
69
+
70
+ Solarized is one palette read from both ends — eight monotones on a symmetric
71
+ CIELAB lightness ramp, and eight accents that are the *same hex* on either
72
+ ground. The two themes are that ramp with the roles mirrored (`base03`↔`base3`
73
+ for the page, `base02`↔`base2` for the highlight, `base01`↔`base1` for
74
+ comments, `base00`↔`base0` for body), and nothing is retuned per mode:
75
+ `success` is `green` `#859900` and `error` is `red` `#dc322f` on cream and on
76
+ slate alike. `test/theme-contrast.test.ts` checks the two files against each
77
+ other for exactly that, because a theme that drifts an accent between modes
78
+ has stopped being this palette.
79
+
80
+ Each mode has three content tones rather than a ramp of grays, and the tokens
81
+ are mapped onto them: `text`/`toolTitle` emphasized, `muted`/`toolOutput`
82
+ body, `dim` and the quotes, rules and syntax comments in the comment tone at
83
+ 2.0-2.8:1. That is where Solarized puts its comments, so this pair is neither
84
+ AAA like the accessible themes nor AA like `vox-*` — it holds the contrast
85
+ Solarized actually has, tier by tier (content 3.2:1, accents 2.3:1, comments
86
+ 1.9:1), on every surface it paints and on both Solarized terminal stops.
87
+ Anyone who needs a guaranteed floor still wants `warm-*`, `colorsafe-*` or
88
+ `high-contrast-*`, and the theme docs say so.
89
+
90
+ Two things the TUI needs that sixteen colors do not cover. The transcript
91
+ wants a surface per tool state where Solarized ships two background stops, so
92
+ each sheet is mixed from the accent that already means that state and then
93
+ pulled back to the highlight's own lightness — a state reads through hue
94
+ instead of by getting louder, which is what keeps the ink on a tool box at the
95
+ contrast it has on the page. And position gets no hue at all: `selectedBg` and
96
+ the radar mark are neutrals on the `base03`→`base01` axis, one step off the
97
+ page. Those surfaces are the only colors in either file that are not
98
+ canonical, and they are named in `vars`; the test rejects a non-canonical
99
+ *ink*.
100
+
3
101
  ## [0.5.39] - 2026-08-28
4
102
 
5
103
  ### Fixed
@@ -272,6 +272,10 @@ export declare class AgentSession {
272
272
  get sessionId(): string;
273
273
  /** Current session display name, if set */
274
274
  get sessionName(): string | undefined;
275
+ /** What to show for this session: the chosen name, else its auto-assigned slug */
276
+ get displayName(): string;
277
+ /** The session's colour slot (1-6), chosen or auto-assigned */
278
+ get sessionColorSlot(): number;
275
279
  /** Scoped models for cycling (from --models flag) */
276
280
  get scopedModels(): ReadonlyArray<{
277
281
  model: Model<any>;
@@ -519,6 +523,12 @@ export declare class AgentSession {
519
523
  * Set a display name for the current session.
520
524
  */
521
525
  setSessionName(name: string): void;
526
+ /**
527
+ * Set the colour slot (1-6) the session's chip is filled with. Written as its
528
+ * own field so it survives a later rename, and so setting it never disturbs
529
+ * the name.
530
+ */
531
+ setSessionColor(slot: number): void;
522
532
  /**
523
533
  * Navigate to a different node in the session tree.
524
534
  * Unlike fork() which creates a new session file, this stays in the same file.