43 lines
1.7 KiB
Markdown
43 lines
1.7 KiB
Markdown
# Sidebar
|
|
|
|
**Status:** Implemented · **Code:** `Scripts/sidebar.js`
|
|
|
|
Four TreeView sections under one sidebar (`claude`). Sections are declared in
|
|
`extension.json`; each is backed by a `TreeDataProvider` whose identifier matches
|
|
the section id.
|
|
|
|
| Section | Rows |
|
|
| --- | --- |
|
|
| `claude.session` | Status, Account, Model, Permissions, Usage |
|
|
| `claude.approvals` | Pending requests, each **expanded** with its choices as child rows |
|
|
| `claude.activity` | Tool calls, newest first, capped at 120 |
|
|
| `claude.changes` | Files Claude actually modified |
|
|
|
|
## Approvals are hierarchical
|
|
|
|
The parent row is the request; children are the actions from
|
|
`actionsFor(approval)` in `permissions.js`. Selecting a child and activating it
|
|
runs `claudenova.approvalAction`, which reads `approvalsView.selection[0]` and
|
|
calls `broker.decide(row.approval, row.id)`.
|
|
|
|
This is what makes a decision possible without any panel being open — dismissing
|
|
a notification never strands the session.
|
|
|
|
Action rows are generated, so they follow state: a plan shows
|
|
`Write Feedback…` until a feedback tab exists, then `Send Feedback`.
|
|
|
|
## Row plumbing
|
|
|
|
- `TreeItem.command` fires on **double-click**, not single click. Context menus
|
|
in `extension.json` mirror the same commands, gated on `contextValue`.
|
|
- `TreeItem.path` gives a file row its filetype icon and reveal behaviour.
|
|
- `getParent()` must return the parent for `reveal()` to work; action rows
|
|
return their approval.
|
|
- Reloads are throttled to 200ms — every streamed token changes the session.
|
|
|
|
## Labels
|
|
|
|
`friendlyToolName()` renames the interaction-surface tools: `ExitPlanMode` →
|
|
`Plan`, `AskUserQuestion` → `Question`. `modeLabel()` maps permission modes;
|
|
note the CLI reports `default` for the mode its own flag calls `manual`.
|