Brooklyn Nicholson
036c577c86
fix(desktop): surface staged skill-write review on the desktop and TUI
...
With skills.write_approval on, every skill write is staged to the
file-backed pending store, but no non-CLI surface could review it:
the desktop resolver marked the whole /skills family as the sidebar's
(desktop="settings") and discarded the subcommand token, and
tui_gateway command.dispatch had no route for /skills or /memory —
a failed slash worker turned both into the routing refusal, so staged
writes accumulated silently (#98330 , #123315 , #118812 ).
- hermes_cli/commands.py: new CommandDef.desktop_subcommands field;
/skills declares its write-approval review slice
(pending/approve/reject/diff/approval) and drops desktop="settings".
command_desktop_meta serializes the allowlist (empty tuple = deny
all); gateway contract regenerated.
- apps/desktop: the resolver threads the typed arg —
desktopSubcommandAllowlist, an exec gate
(desktopSubcommandUnavailableMessage) that renders an actionable
refusal for hub mutations instead of forwarding them, completion
filtering so the popover never suggests a dead end, and the
isDesktopSlashCommand(name, arg) threading at the runExec gate.
An explicit /skills spec keeps a current Desktop able to review
staged writes even against an older backend catalog.
- tui_gateway command.dispatch: _cmd_skills answers only the
registry-declared review slice under _session_home_scope (an
unlisted subcommand keeps the 4018 routing refusal); _cmd_memory
routes the shared handler with the live agent's store or a fresh
on-disk one and a profile-scoped config setter. Gate-off still
answers while staged writes exist (gateway parity, never stranded).
- tools/write_approval: _staged()'s review hint is surface-aware —
slash-capable surfaces (CLI/TUI/desktop/chat gateway) keep
"<command> pending"; headless contexts (cron, kanban, api_server,
webhook delivery) get the pending directory path instead of a
command nobody can deliver.
Batch skill writes also rendered "(batch on ...)" for /skills diff —
skill_pending_diff had no action='batch' case; ops now diff in order
against what earlier ops of the same batch left (finn763's #123861 ).
Supersedes #98794 (registry-driven desktop_subcommands + resolver
allowlist), #105773 , #118821 (command.dispatch handlers + arg
threading), #123861 (batch diff renderer). #107799 is superseded by
the same subcommand-aware resolution.
Co-authored-by: foma-agent <foma@bokonon.ai >
Co-authored-by: Jason Havenaar <35441875+jasonHav@users.noreply.github.com >
Co-authored-by: finn763 <165816600+finn763@users.noreply.github.com >
Co-authored-by: chelsealong <chelsealong@126.com >
2026-09-30 23:05:43 -05:00
..
2026-09-28 10:21:41 -07:00
2026-09-29 18:49:58 -05:00
2026-09-29 15:58:55 +05:30
2026-09-29 21:48:25 -05:00
2026-09-30 12:01:29 -05:00
2026-09-24 14:47:06 -04:00
2026-09-29 20:57:17 -05:00
2026-09-29 14:36:55 +05:30
2026-09-29 16:47:48 +05:30
2026-09-25 17:57:38 -05:00
2026-09-23 11:41:01 -04:00
2026-09-29 18:49:58 -05:00
2026-09-27 02:55:39 -07:00
2026-09-28 10:21:41 -07:00
2026-09-29 20:24:19 -04:00
2026-09-29 07:44:13 +00:00
2026-09-28 03:37:09 -07:00
2026-09-23 11:41:01 -04:00
2026-09-24 18:06:48 +05:30
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-29 18:47:44 -05:00
2026-09-27 18:37:01 +05:30
2026-09-29 20:24:19 -04:00
2026-09-26 21:38:28 +05:30
2026-09-29 20:58:24 -05:00
2026-09-29 07:44:13 +00:00
2026-09-25 14:22:12 -04:00
2026-09-28 10:21:41 -07:00
2026-09-24 01:40:31 -04:00
2026-09-28 10:21:41 -07:00
2026-09-25 12:07:32 -05:00
2026-09-28 10:21:41 -07:00
2026-09-27 18:19:17 +05:30
2026-09-29 23:54:34 +05:30
2026-09-24 01:55:51 -04:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-30 22:24:00 -05:00
2026-09-29 23:54:34 +05:30
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-29 18:33:44 +05:30
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-26 22:19:53 -05:00
2026-09-28 14:16:18 -07:00
2026-09-23 10:05:40 -07:00
2026-09-29 07:44:13 +00:00
2026-09-30 14:23:52 -05:00
2026-09-30 22:30:35 -04:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-29 18:33:44 +05:30
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-25 21:27:06 +05:30
2026-09-28 14:16:18 -07:00
2026-09-30 23:05:43 -05:00
2026-09-29 20:34:45 +05:30
2026-09-29 22:56:15 -04:00
2026-09-23 19:51:34 -04:00
2026-09-28 02:00:41 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 13:08:49 -07:00
2026-09-23 15:05:44 -07:00
2026-09-29 20:24:19 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 04:04:23 -07:00
2026-09-29 20:24:19 -04:00
2026-09-28 13:30:57 -07:00
2026-09-27 02:33:57 +05:30
2026-09-28 10:21:41 -07:00
2026-09-28 04:44:29 -07:00
2026-09-29 21:48:25 -05:00
2026-09-29 19:49:52 -05:00
2026-09-26 21:43:07 -05:00
2026-09-28 10:21:41 -07:00
2026-09-29 20:24:19 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 06:42:00 -07:00
2026-09-24 01:55:51 -04:00
2026-09-27 22:04:26 -07:00
2026-09-29 12:16:43 -04:00
2026-09-29 05:59:25 -04:00
2026-09-29 22:57:48 -04:00
2026-09-23 10:42:18 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-29 07:44:13 +00:00
2026-09-27 01:04:39 +05:30
2026-09-28 04:04:23 -07:00
2026-09-28 13:30:57 -07:00
2026-09-23 10:58:15 -07:00
2026-09-28 13:30:57 -07:00
2026-09-23 07:48:32 -07:00
2026-09-27 02:57:28 -07:00
2026-09-29 18:49:58 -05:00
2026-09-29 18:49:58 -05:00
2026-09-29 18:09:20 -05:00
2026-09-29 02:37:33 +05:30
2026-09-28 10:21:41 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 10:56:47 -05:00
2026-09-28 10:21:41 -07:00
2026-09-28 14:16:18 -07:00
2026-09-27 18:29:18 +05:30
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-27 18:29:18 +05:30
2026-09-28 03:37:09 -07:00
2026-09-28 03:37:09 -07:00
2026-09-23 08:09:47 -07:00
2026-09-23 11:41:01 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 12:24:52 -05:00
2026-09-29 21:48:25 -05:00
2026-09-25 14:22:12 -04:00
2026-09-25 14:22:12 -04:00
2026-09-28 04:44:29 -07:00
2026-09-25 16:28:14 -05:00
2026-09-29 19:49:52 -05:00
2026-09-28 06:42:00 -07:00
2026-09-24 01:55:51 -04:00
2026-09-29 15:45:52 +05:30
2026-09-28 14:16:18 -07:00
2026-09-29 16:47:48 +05:30
2026-09-23 15:26:34 -04:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-26 17:04:25 -05:00
2026-09-24 11:50:30 -04:00
2026-09-23 07:49:35 -07:00
2026-09-23 10:52:20 -04:00
2026-09-24 14:08:21 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 05:37:55 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-29 12:55:46 -07:00
2026-09-29 20:57:57 -05:00
2026-09-29 12:55:46 -07:00
2026-09-24 09:40:41 -04:00
2026-09-30 14:23:51 -04:00
2026-09-23 06:46:02 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-29 18:33:44 +05:30
2026-09-28 10:21:41 -07:00
2026-09-30 22:30:18 -05:00
2026-09-28 10:21:41 -07:00
2026-09-24 02:03:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-24 05:10:12 -04:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-24 14:08:21 -04:00
2026-09-24 11:50:29 -04:00
2026-09-30 22:30:18 -05:00
2026-09-24 11:50:29 -04:00
2026-09-28 12:43:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-24 11:50:29 -04:00
2026-09-25 21:19:04 +05:30
2026-09-27 01:42:52 +05:30
2026-09-28 12:18:42 -07:00
2026-09-28 09:22:11 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-25 14:22:12 -04:00
2026-09-27 01:42:52 +05:30
2026-09-25 14:22:12 -04:00
2026-09-29 22:57:48 -04:00
2026-09-24 16:17:16 -04:00
2026-09-27 06:26:52 -05:00
2026-09-27 21:29:39 -07:00
2026-09-29 20:24:19 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 04:04:23 -07:00
2026-09-28 10:21:41 -07:00
2026-09-29 20:57:57 -05:00
2026-09-28 04:59:38 -07:00
2026-09-28 12:43:03 -07:00
2026-09-27 03:41:42 -07:00
2026-09-27 00:56:11 +05:30
2026-09-28 10:21:41 -07:00
2026-09-28 04:44:29 -07:00
2026-09-28 03:34:07 -07:00
2026-09-28 10:21:41 -07:00
2026-09-24 11:50:30 -04:00
2026-09-24 12:30:00 -04:00
2026-09-23 22:22:32 +05:30
2026-09-26 20:40:40 -05:00
2026-09-23 15:43:51 -07:00
2026-09-25 10:46:54 -05:00
2026-09-28 15:54:01 +05:30
2026-09-28 21:03:09 -04:00
2026-09-27 20:49:04 +05:30
2026-09-24 18:08:24 +05:30
2026-09-27 20:49:04 +05:30
2026-09-23 10:43:45 -04:00
2026-09-28 08:33:43 +00:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:33:01 -07:00
2026-09-28 12:43:03 -07:00
2026-09-28 12:43:03 -07:00
2026-09-25 20:00:57 -05:00
2026-09-28 10:21:41 -07:00
2026-09-28 14:16:18 -07:00
2026-09-29 19:49:52 -05:00
2026-09-28 21:02:35 -04:00
2026-09-27 02:54:03 -07:00
2026-09-24 14:23:48 -04:00
2026-09-23 22:05:57 -04:00
2026-09-25 14:22:12 -04:00
2026-09-28 10:21:41 -07:00
2026-09-29 15:28:19 -05:00
2026-09-23 18:29:35 -05:00
2026-09-27 07:43:23 -05:00
2026-09-28 12:33:01 -07:00
2026-09-28 19:02:20 +05:30
2026-09-24 11:12:27 -04:00
2026-09-28 10:21:41 -07:00
2026-09-28 14:16:18 -07:00
2026-09-26 17:09:16 -05:00
2026-09-27 23:53:40 -07:00
2026-09-24 16:17:16 -04:00
2026-09-28 10:21:41 -07:00
2026-09-29 20:34:45 +05:30
2026-09-26 21:00:12 -04:00
2026-09-27 14:09:15 -05:00
2026-09-29 18:49:58 -05:00
2026-09-29 20:58:24 -05:00
2026-09-26 20:07:47 +05:30
2026-09-25 14:22:12 -04:00
2026-09-23 18:48:33 -05:00
2026-09-29 21:50:16 -05:00
2026-09-29 18:49:58 -05:00
2026-09-28 10:21:41 -07:00
2026-09-28 05:33:25 -07:00
2026-09-28 04:44:29 -07:00
2026-09-28 12:43:03 -07:00
2026-09-29 18:49:58 -05:00
2026-09-28 12:43:03 -07:00
2026-09-24 14:08:22 -04:00
2026-09-23 11:41:01 -04:00
2026-09-27 02:57:28 -07:00
2026-09-23 06:51:47 -07:00
2026-09-28 04:44:29 -07:00
2026-09-29 21:50:16 -05:00
2026-09-29 20:58:59 -05:00
2026-09-28 05:33:25 -07:00
2026-09-28 21:02:29 -04:00
2026-09-27 14:09:15 -05:00
2026-09-29 20:57:51 -05:00
2026-09-28 12:43:03 -07:00
2026-09-28 10:21:41 -07:00
2026-09-28 16:23:22 +05:30
2026-09-29 11:40:36 -05:00
2026-09-29 21:39:17 -05:00
2026-09-28 12:33:01 -07:00
2026-09-23 15:26:34 -04:00
2026-09-28 05:37:55 -07:00
2026-09-28 12:18:58 -07:00
2026-09-29 19:06:35 -05:00
2026-09-23 06:46:02 -07:00
2026-09-23 11:41:01 -04:00
2026-09-28 12:18:58 -07:00
2026-09-28 12:18:58 -07:00
2026-09-25 12:09:37 -05:00
2026-09-29 20:57:23 -05:00
2026-09-28 10:21:41 -07:00
2026-09-28 10:21:41 -07:00
2026-09-29 15:24:15 +05:30
2026-09-24 15:38:22 +05:30
2026-09-23 19:51:34 -04:00