zot/packages/agent/extensions
Raymond Gasper 2d46ef9b09 feat(panels): spontaneous open_panel frame for human-in-the-loop tool gates (#19)
Allow extensions to emit an open_panel frame at any time, not just as
the action of a command_response. This makes it possible to build
approval gates, secret collection, and freeform user-input prompts
directly inside tool handlers.

Changes:
- extproto: add OpenPanelFromExt wire type
- extensions/manager: route spontaneous open_panel frames to hooks.OpenPanel
- ext/ext.go: add Extension.OpenPanel() SDK method
- tests: TestSpontaneousOpenPanel (manager), TestOpenPanelEmitsCorrectFrame,
  TestBlockingToolWaitsForPanelKey, TestBlockingToolDenied (SDK)
- docs/plans: add spontaneous-panel.md design doc

The blocking tool pattern (open panel → block on channel → key event →
tool_result) requires no additional wire changes; it falls out of
standard Go concurrency on the extension side.

Part 3 (intercept timeout for built-in tool gating) is out of scope
and tracked separately.
2026-06-08 12:13:55 -04:00
..
base64.go refactor: split source into packages/{provider,core,tui,agent} 2026-05-27 09:07:15 +02:00
events.go refactor: split source into packages/{provider,core,tui,agent} 2026-05-27 09:07:15 +02:00
intercept_test.go refactor: split source into packages/{provider,core,tui,agent} 2026-05-27 09:07:15 +02:00
manager.go feat(panels): spontaneous open_panel frame for human-in-the-loop tool gates (#19) 2026-06-08 12:13:55 -04:00
manager_test.go feat(panels): spontaneous open_panel frame for human-in-the-loop tool gates (#19) 2026-06-08 12:13:55 -04:00
tool.go refactor: split source into packages/{provider,core,tui,agent} 2026-05-27 09:07:15 +02:00
tool_test.go refactor: split source into packages/{provider,core,tui,agent} 2026-05-27 09:07:15 +02:00