@kolisachint/hoocode-agent 0.5.57 → 0.5.58

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 (45) hide show
  1. package/CHANGELOG.md +163 -0
  2. package/dist/core/agent-session.d.ts +2 -2
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +4 -3
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/extensions/runner.d.ts.map +1 -1
  7. package/dist/core/extensions/runner.js +4 -1
  8. package/dist/core/extensions/runner.js.map +1 -1
  9. package/dist/core/keybindings.d.ts +162 -98
  10. package/dist/core/keybindings.d.ts.map +1 -1
  11. package/dist/core/keybindings.js +222 -106
  12. package/dist/core/keybindings.js.map +1 -1
  13. package/dist/modes/interactive/command-executor.d.ts.map +1 -1
  14. package/dist/modes/interactive/command-executor.js +95 -62
  15. package/dist/modes/interactive/command-executor.js.map +1 -1
  16. package/dist/modes/interactive/components/ask-options.d.ts +20 -6
  17. package/dist/modes/interactive/components/ask-options.d.ts.map +1 -1
  18. package/dist/modes/interactive/components/ask-options.js +35 -13
  19. package/dist/modes/interactive/components/ask-options.js.map +1 -1
  20. package/dist/modes/interactive/components/keybinding-hints.d.ts +9 -0
  21. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  22. package/dist/modes/interactive/components/keybinding-hints.js +12 -0
  23. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  24. package/dist/modes/interactive/components/task-panel.d.ts +2 -2
  25. package/dist/modes/interactive/components/task-panel.d.ts.map +1 -1
  26. package/dist/modes/interactive/components/task-panel.js +24 -11
  27. package/dist/modes/interactive/components/task-panel.js.map +1 -1
  28. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  29. package/dist/modes/interactive/components/tree-selector.js +29 -12
  30. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  31. package/dist/modes/interactive/interactive-mode.d.ts +17 -0
  32. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  33. package/dist/modes/interactive/interactive-mode.js +85 -31
  34. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  35. package/dist/modes/interactive/model-controller.d.ts +3 -0
  36. package/dist/modes/interactive/model-controller.d.ts.map +1 -1
  37. package/dist/modes/interactive/model-controller.js +1 -1
  38. package/dist/modes/interactive/model-controller.js.map +1 -1
  39. package/docs/keybindings.md +247 -80
  40. package/docs/terminal-setup.md +8 -3
  41. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  42. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  43. package/examples/extensions/sandbox/package.json +1 -1
  44. package/examples/extensions/with-deps/package.json +1 -1
  45. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,168 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.5.58] - 2026-09-04
4
+
5
+ ### Changed
6
+
7
+ - **The keyboard map is grouped by intention, not by mechanism.** Sorting the
8
+ bindings by what the widget is — everything that cycles together — made a list
9
+ that was tidy on the page and useless at the keyboard, because "it cycles" is
10
+ not what anyone is thinking when they reach for a key. Sixty bindings is not a
11
+ thing anyone holds; five groups of at most five is.
12
+
13
+ The groups are the five things you are ever doing here, in the order the loop
14
+ runs:
15
+
16
+ | group | what it is | keys |
17
+ | --- | --- | --- |
18
+ | **Compose** | the message in your hands | `alt+e` `alt+r` `ctrl+v` `alt+enter` `alt+↑` |
19
+ | **Steer** | what the agent is before it runs | `alt+a` `alt+m` `alt+t` |
20
+ | **Read** | what you see of what it did | `alt+o` `alt+l` `ctrl+o` `ctrl+t` |
21
+ | **Go** | sessions and places | `alt+h` `alt+w` `alt+c` `alt+s` `alt+k` |
22
+ | **Flow** | getting out, getting back | `esc` `ctrl+c` `ctrl+d` `ctrl+z` |
23
+
24
+ Two of them cost nothing: **Flow** is what every terminal program already
25
+ taught you, and the overlays — pickers, the tree, the options pane — print
26
+ their own keys on their own hint lines, so they are read rather than recalled.
27
+ That leaves three groups to genuinely know.
28
+
29
+ No key moved. The grouping is now the source's own declaration order, which
30
+ matters beyond the file: `orderKeybindingsConfig` writes `keybindings.json` in
31
+ that order, so the file you open to rebind something is grouped the same way.
32
+ The startup banner, `/hotkeys` and `docs/keybindings.md` all lead with the same
33
+ five groups in the same order, instead of three different organisations.
34
+
35
+ - **A dial names the key that steps it back, once.** The instant after you move a
36
+ dial is the one moment you are primed to learn its other half — you have used
37
+ one direction and can feel the missing one — so the reverse rides along with
38
+ the first step of each dial in a session and never again. A hint that repeats
39
+ forever stops being read, and its cost falls on the people who already know it.
40
+
41
+ - **The task panel advertises the roster key.** It already printed `alt+l cycle`
42
+ in its header; on the teams lens it now prints the focus key too. That is what
43
+ lets `alt+n` stay: it is the one letter in the set that names nothing, and it
44
+ survives on the fallback every unmemorable key needs — being read off the
45
+ screen instead of remembered.
46
+
47
+ - The layout test now holds the grouping as well as the keys: every binding
48
+ belongs to exactly one family, families are declared contiguously and in order,
49
+ and no learned family exceeds five subjects that carry a key. That last one
50
+ caught **Go** at eight before the count was corrected to ignore actions that
51
+ ship unbound — an action with no key costs no memory.
52
+
53
+ - **Every dial is now `alt+<letter>`, and `shift+alt+<letter>` steps it back.**
54
+ The thinking level came off `shift+tab` and the task ledger off `ctrl+n`, so the
55
+ six most-pressed keys in the app share one modifier, one shape, and six letters
56
+ that each name their dial:
57
+
58
+ | dial | forward | back |
59
+ | --- | --- | --- |
60
+ | **a**gent mode | `alt+a` | `shift+alt+a` |
61
+ | **m**odel | `alt+m` | `shift+alt+m` |
62
+ | **t**hinking level | `alt+t` | `shift+alt+t` |
63
+ | tool **o**utput | `alt+o` | `shift+alt+o` |
64
+ | task **l**edger | `alt+l` | `shift+alt+l` |
65
+ | session **c**olor | `alt+c` | `shift+alt+c` |
66
+
67
+ `alt+t` also buys the pairing that `alt+o` already had: same letter on both
68
+ rings, `alt` walking the dial and saving where it lands, `ctrl` acting on what
69
+ is drawn right now. `alt+o` sets how much tool output there ever is and
70
+ `ctrl+o` jumps to all of it and back; `alt+t` sets how much thinking there ever
71
+ is and `ctrl+t` shows or hides what you have. Those two are all that is left on
72
+ the `ctrl` ring besides the flow keys.
73
+
74
+ The task ledger gains the reverse it could never have had on `ctrl`, where
75
+ `shift+ctrl+n` is Windows Terminal's "new window". `alt+l` names the pane's own
76
+ word for itself — the task ledger — where `ctrl+n` named nothing.
77
+
78
+ `shift+tab` still steps the thinking level as a second key. It is the only dial
79
+ with no slash command and the only one whose setting changes what the agent
80
+ does, so it keeps a way in on a terminal that does not send `alt`.
81
+
82
+ `app.session.tree` gave `alt+t` to the thinking dial and ships unbound; `/tree`
83
+ opens it, the same trade `app.model.select` makes for `/model`. `ctrl+n`,
84
+ `ctrl+p` and `shift+ctrl+p` are all free now, so the emacs config in
85
+ `docs/keybindings.md` collides with nothing.
86
+
87
+ `app.tasks.cycleView` became `app.tasks.cycleForward`; existing
88
+ `keybindings.json` files are migrated on startup.
89
+
90
+ - **The six dials now work the same way.** Everything on screen with an ordered
91
+ set of stops — agent mode, model, thinking level, tool output, session colour,
92
+ the task panel's lens — is stepped with a key, and until now those six keys had
93
+ four different shapes between them (`alt+`, `ctrl+`, `shift+ctrl+`, `shift+tab`)
94
+ and only three could step backward at all. Nothing told you which was which, so
95
+ each one had to be memorised on its own.
96
+
97
+ They share one rule now: **a dial steps forward on its key and back with one
98
+ more modifier held, the letter names the dial, and the slash command picks a
99
+ stop outright.**
100
+
101
+ What moved: the model dial from `ctrl+p`/`shift+ctrl+p` to `alt+m`, because the
102
+ model is a cockpit dial — what the agent *is*, not what is on screen — and `p`
103
+ named nothing. Agent mode and thinking level gained the reverse halves they
104
+ never had.
105
+
106
+ `app.thinking.cycle` and `app.mode.cycle` became `…cycleForward` so every
107
+ two-direction dial reads the same; existing `keybindings.json` files are
108
+ migrated on startup.
109
+
110
+ - **`app.model.select` ships unbound; `/model` opens the picker.** Its key went to
111
+ the dial that steps the model, on the principle the colour dial already
112
+ followed: the key steps, the slash command chooses. `/mode`, `/model` and
113
+ `/color` are the three pickers behind the dials.
114
+
115
+ - **The startup banner, `/hotkeys` and `docs/keybindings.md` lead with the
116
+ dials.** `/hotkeys` gained a Dials table naming what each one steps through and
117
+ where to see its state, and spells out the ctrl/alt pairing: `ctrl+o` opens the
118
+ tool bodies you have and `alt+o` sets how much they ever show; `ctrl+t` shows
119
+ the thinking you have and `shift+tab` sets how much there ever is.
120
+
121
+ ### Fixed
122
+
123
+ - **Searching the session tree no longer fires its verbs.** The tree's two
124
+ label keys were the last verbs left on `shift+<letter>`, and outside the
125
+ Kitty keyboard protocol that is not a chord at all — the terminal sends the
126
+ plain uppercase letter. The tree takes every printable key into its search
127
+ query, so typing `TODO` or `Logger` toggled label timestamps and opened the
128
+ label editor instead of searching. They move to `alt+l` ("label") and `alt+t`
129
+ ("time"), which is where every other picker verb already lives, and a layout
130
+ test now refuses a bare `shift+<letter>` outright.
131
+
132
+ - **The options pane gave its arrow keys to the step, never to the text.** On
133
+ the free-text row `←` stepped back to the previous question — which clears
134
+ the field — so a cursor key could throw away a half-typed answer, and `→`
135
+ submitted rather than moving right. The text now gets first refusal and the
136
+ step takes what is left at the ends: `→` commits from the end of the answer
137
+ (an empty field is already at its end, so the plain custom row still
138
+ advances), `←` stays out while there is an answer to lose, and `enter`
139
+ commits from anywhere.
140
+
141
+ ### Changed
142
+
143
+ - **`alt+a` cycles the agent mode**, replacing `alt+g`, which stood for
144
+ nothing. Mode and model are one letter apart and `alt+m` is the model
145
+ selector, so the letter has to carry the meaning: `a` for agent mode.
146
+
147
+ - **The session tree's hint line is readable.** It printed every alias of every
148
+ key — `ctrl+left/alt+left/ctrl+right/alt+right` for one fold verb, five
149
+ spelled-out filter keys — in a style no other hint line used. It is now the
150
+ house style (dim key, muted description, `·` separated), one key per verb,
151
+ with the five lenses shown as the range `alt+1…alt+5`. The header chip that
152
+ said `[+label time]` says `[timestamps]`.
153
+
154
+ - **`docs/keybindings.md` documents the keys that exist.** It still listed the
155
+ layout from before the cockpit rings: `ctrl+l` for the model selector,
156
+ `ctrl+g` for the external editor, the picker verbs on the `ctrl` letters they
157
+ were moved off, the session tree and `/resume` as unbound, and no mention at
158
+ all of the view dial, the mode cycle, voice, settings, `/cd`, the team roster
159
+ or the options pane. Rewritten from the definitions, grouped by ring, and it
160
+ now leads with the rule that decides which ring a key is in.
161
+
162
+ - `app.options.next` and `app.options.back` are registered keybinding ids like
163
+ every other action, instead of being defined but missing from the type map
164
+ and reached through a cast. The layout test now checks that every id belongs
165
+ to a scope, so the next one cannot slip through unchecked.
3
166
  ## [0.5.57] - 2026-09-04
4
167
 
5
168
  ### Changed
@@ -400,10 +400,10 @@ export declare class AgentSession {
400
400
  */
401
401
  setThinkingLevel(level: ThinkingLevel): void;
402
402
  /**
403
- * Cycle to next thinking level.
403
+ * Step the thinking level one stop, wrapping at both ends.
404
404
  * @returns New level, or undefined if model doesn't support thinking
405
405
  */
406
- cycleThinkingLevel(): ThinkingLevel | undefined;
406
+ cycleThinkingLevel(direction?: "forward" | "backward"): ThinkingLevel | undefined;
407
407
  /**
408
408
  * Get available thinking levels for current model.
409
409
  * The provider will clamp to what the specific model supports internally.