Compare commits
2 changed files with 0 additions and 66 deletions
|
|
@ -67,10 +67,6 @@ parent's negative pull.
|
||||||
| `.tool-result-block.error` `<details>` | `Nl · headline` | red, body is text | long error `tool_result` (`is_error: true`); wrapper stripped | stream-json |
|
| `.tool-result-block.error` `<details>` | `Nl · headline` | red, body is text | long error `tool_result` (`is_error: true`); wrapper stripped | stream-json |
|
||||||
| `.tool-use` | `⌁ task <id> started · <desc> [type]` | cyan | claude Task-tool subagent start (dead path — `Task` omitted from agent allow-list) | `renderTaskEvent` |
|
| `.tool-use` | `⌁ task <id> started · <desc> [type]` | cyan | claude Task-tool subagent start (dead path — `Task` omitted from agent allow-list) | `renderTaskEvent` |
|
||||||
| `.turn-end-ok` / `.turn-end-fail` / `.tool-result` | `⌁ task <id> ✓/✗/◌ <status> · <desc> · → <output_file>` | green / red / muted | claude Task-tool result (dead path for agents) | `renderTaskEvent` |
|
| `.turn-end-ok` / `.turn-end-fail` / `.tool-result` | `⌁ task <id> ✓/✗/◌ <status> · <desc> · → <output_file>` | green / red / muted | claude Task-tool result (dead path for agents) | `renderTaskEvent` |
|
||||||
| `.note` | `· ⚙ plugin install · loading…` or `✓ done` | muted | `system/plugin_install` (`status` = started/completed) | stream-json |
|
|
||||||
| `.note` | `· ⚙ commands changed · N available` (expandable list of `/name` entries) | muted | `system/commands_changed` (slash-command set updated, usually post-plugin_install) | stream-json |
|
|
||||||
| `.note` | `· ⚙ compact · <trigger> · <pre>→<post> tokens · <dur>` | muted | `system/compact_boundary` (compaction completed; metadata includes pre/post token counts, duration, trigger) | stream-json |
|
|
||||||
| `.note` | `· ⚙ <subtype>` | muted | other `system` subtypes (context_window_exceeded, etc.) | stream-json catch-all |
|
|
||||||
| `.note` | `· <text>` | muted | harness chatter | `LiveEvent::Note` |
|
| `.note` | `· <text>` | muted | harness chatter | `LiveEvent::Note` |
|
||||||
| `.note.stderr` | `! stderr: <line>` | amber/orange | stderr lines off claude | `LiveEvent::Note` (`text` starts `stderr:`) |
|
| `.note.stderr` | `! stderr: <line>` | amber/orange | stderr lines off claude | `LiveEvent::Note` (`text` starts `stderr:`) |
|
||||||
| `.note.op` | `· operator: <text>` | mauve italic | operator-initiated notes (/cancel, /compact, /model, new-session) | `LiveEvent::Note` (`text` starts `operator:`) |
|
| `.note.op` | `· operator: <text>` | mauve italic | operator-initiated notes (/cancel, /compact, /model, new-session) | `LiveEvent::Note` (`text` starts `operator:`) |
|
||||||
|
|
@ -99,19 +95,6 @@ suffix, so the terminal degrades cleanly against older event shapes.
|
||||||
while it's still the last one rendered (`nextElementSibling ==
|
while it's still the last one rendered (`nextElementSibling ==
|
||||||
null`); any other event after it makes the next tick start a
|
null`); any other event after it makes the next tick start a
|
||||||
fresh row. Avoids a note-per-tick scrollback flood.
|
fresh row. Avoids a note-per-tick scrollback flood.
|
||||||
1b. `system/plugin_install` → muted note `⚙ plugin install · loading…`
|
|
||||||
(on `started`) or `⚙ plugin install · ✓ done` (on `completed`).
|
|
||||||
Emitted in pairs: started fires before the plugin loads, completed
|
|
||||||
fires when it's ready. The `uuid` links the pair.
|
|
||||||
1c. `system/commands_changed` → collapsible `.note` details row showing
|
|
||||||
the new slash-command count (`⚙ commands changed · N available`).
|
|
||||||
Expanding reveals each `/name` and its aliases. Fires after
|
|
||||||
`plugin_install` when a plugin registers new commands.
|
|
||||||
1d. `system/compact_boundary` → muted note showing compaction summary:
|
|
||||||
`⚙ compact · <trigger> · <pre>→<post> tokens · <dur>`. Fields are
|
|
||||||
guarded individually — a missing field is silently omitted. Trigger
|
|
||||||
is `"manual"` (operator `/compact`) or `"auto"`.
|
|
||||||
1e. Other `system/` subtypes → muted note `⚙ <subtype>`.
|
|
||||||
2. `subtype == "task_started" | "task_notification"` →
|
2. `subtype == "task_started" | "task_notification"` →
|
||||||
`renderTaskEvent` (subagent activity gets the `⌁` glyph).
|
`renderTaskEvent` (subagent activity gets the `⌁` glyph).
|
||||||
3. `type == "assistant"` → walk `message.content[]`:
|
3. `type == "assistant"` → walk `message.content[]`:
|
||||||
|
|
|
||||||
|
|
@ -1809,55 +1809,6 @@ window.marked = marked;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// plugin_install: claude is loading/finishing a plugin (MCP server or
|
|
||||||
// slash-command provider). Show the status so the operator knows when
|
|
||||||
// a fresh session is loading its toolset.
|
|
||||||
if (v.subtype === 'plugin_install') {
|
|
||||||
const status = v.status === 'completed' ? '✓ done'
|
|
||||||
: v.status === 'started' ? 'loading…'
|
|
||||||
: (v.status || '?');
|
|
||||||
api.row('note', '⚙ plugin install · ' + status);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// commands_changed: the set of available slash commands changed (usually
|
|
||||||
// right after plugin_install). Show the count in the summary; expand to
|
|
||||||
// see the full list.
|
|
||||||
if (v.subtype === 'commands_changed') {
|
|
||||||
const cmds = Array.isArray(v.commands) ? v.commands : [];
|
|
||||||
if (!cmds.length) {
|
|
||||||
api.row('note', '⚙ commands changed · (empty)');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const summary = '⚙ commands changed · ' + cmds.length + ' available';
|
|
||||||
const body = cmds.map((c) => {
|
|
||||||
const aliases = c.aliases && c.aliases.length
|
|
||||||
? ' [/' + c.aliases.join(', /') + ']' : '';
|
|
||||||
return '/' + c.name + aliases;
|
|
||||||
}).join('\n');
|
|
||||||
api.details('note', summary, body);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// compact_boundary: claude completed a compaction pass. The metadata
|
|
||||||
// carries pre/post token counts, duration, and the trigger (manual vs
|
|
||||||
// auto). Show a single summary line so the operator can gauge how much
|
|
||||||
// context was shed.
|
|
||||||
if (v.subtype === 'compact_boundary') {
|
|
||||||
const m = v.compact_metadata || {};
|
|
||||||
const parts = ['⚙ compact'];
|
|
||||||
if (m.trigger) parts.push(m.trigger);
|
|
||||||
if (m.pre_tokens != null && m.post_tokens != null) {
|
|
||||||
const fmtTok = (n) => n >= 1_000_000 ? (n / 1_000_000).toFixed(1) + 'M'
|
|
||||||
: n >= 1_000 ? Math.round(n / 1000) + 'k'
|
|
||||||
: String(n);
|
|
||||||
parts.push(fmtTok(m.pre_tokens) + '→' + fmtTok(m.post_tokens) + ' tokens');
|
|
||||||
}
|
|
||||||
if (m.duration_ms != null) {
|
|
||||||
const ms = m.duration_ms;
|
|
||||||
parts.push(ms < 1000 ? ms + 'ms' : (ms / 1000).toFixed(1) + 's');
|
|
||||||
}
|
|
||||||
api.row('note', parts.join(' · '));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Other system subtypes (context_window_exceeded, etc.) — render a
|
// Other system subtypes (context_window_exceeded, etc.) — render a
|
||||||
// muted note with the subtype label; reserve the loud orange `sys`
|
// muted note with the subtype label; reserve the loud orange `sys`
|
||||||
// catch-all for truly unrecognised top-level types.
|
// catch-all for truly unrecognised top-level types.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue