feat(skills): add search-citation skill for web search guidance#219
Merged
Conversation
…ource attribution Adds a new system skill that guides the agent on when to use web search vs. training data and requires source URLs for all specific factual claims. Includes progressive disclosure reference files for local search, travel, and product search verticals. Bumps capability-reference to v1.1.0 with cross-reference to the new skill.
4 tasks
Aaronontheweb
added a commit
to Aaronontheweb/netclaw
that referenced
this pull request
May 24, 2026
The outer Input panel's HeightAuto(max) constraint was captured once at first navigation and never updated on terminal resize. Even though the inner DynamicLayoutNode re-evaluated body width and expanded-body caps on resize, the outer panel's frozen max prevented the layout from actually growing when the terminal got taller. Termina 0.10.0 adds ReactivePage.InvalidateLayout() which discards the cached layout tree and rebuilds via BuildLayout() with fresh state. Now the resize handler calls InvalidateLayout() so the panel cap follows _terminal.Height changes — completing the dynamic scaling fix for netclaw-dev#1132. Ref: Termina PR netclaw-dev#219 (ResizeEvent forwarding), PR netclaw-dev#220 (InvalidateLayout)
4 tasks
Aaronontheweb
added a commit
that referenced
this pull request
May 24, 2026
) * fix(tui): keep approval controls visible for long prompts (#1132) Long shell_execute approval bodies in `netclaw chat` wrapped over many lines inside the Input panel and pushed the selection list and `[Enter] Confirm` hint past the panel cap, leaving the user unable to respond. Render a one-line summary plus a single-line truncated body with a `[Ctrl+V to view full]` affordance by default; Ctrl+V expands the body to a 5-row cap (with full text always available in the chat history pane above) while keeping all selection options on-screen. The wire-level `DisplayText` is untouched so non-TUI surfaces still see the full prompt. Adds headless ChatPageTests using Termina's VirtualTerminal and commits ASCII frame snapshots under tests/Tui/__snapshots__/ as the visual regression artifact for the issue. * fix(tui): scale approval layout to terminal size Address scaling issues flagged in code review of the initial #1132 fix. Previously the body width (76 cols), expanded body cap (5 rows), Input panel cap (14 rows), and status bar text were all hardcoded, producing clipped affordances on narrow terminals, clipped tails for >5-line bodies, and a layout that hit the cap exactly with the 5-option production approval set. - Inject IAnsiTerminal into ChatPage; read live width/height in the DynamicLayoutNode callback so body width, expanded body cap, and panel cap all scale with the actual terminal size. - Expanded body cap derives from terminal height and live option count: panelMax = max(8, height/2); bodyMax = panelMax - (4 + optionCount). - Status bar text now picks short/medium/full key-hint variants based on width and includes UiVersion in CombineLatest so resize re-emits. - Subscribe to ResizeEvent in OnBound and bump UiVersion to trigger a layout re-evaluation on terminal resize. - Restore the [PgUp/PgDn] Scroll hint to the pending-interaction key string (the design's stated escape hatch for >cap bodies). Adds four new headless tests covering 60-col narrow terminal, the 5-option production set in expanded mode, a 16-row small terminal (chat history must stay visible), and a terminal-resize round-trip. * fix(tui): use InvalidateLayout on resize for dynamic panel cap The outer Input panel's HeightAuto(max) constraint was captured once at first navigation and never updated on terminal resize. Even though the inner DynamicLayoutNode re-evaluated body width and expanded-body caps on resize, the outer panel's frozen max prevented the layout from actually growing when the terminal got taller. Termina 0.10.0 adds ReactivePage.InvalidateLayout() which discards the cached layout tree and rebuilds via BuildLayout() with fresh state. Now the resize handler calls InvalidateLayout() so the panel cap follows _terminal.Height changes — completing the dynamic scaling fix for #1132. Ref: Termina PR #219 (ResizeEvent forwarding), PR #220 (InvalidateLayout)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
search-citationsystem skill (v1.0.0) that guides the agent on when to useweb_searchvs. training data and requires source URLs for all specific factual claimswebgrant not enabled, empty search results, unlinkable content (screenshot fallback via browser automation)capability-referenceto v1.1.0 with cross-reference to the new skillsearch-citationrow to CLAUDE.md system skills sync tableTest plan
./feeds/scripts/generate-skill-manifest.shruns clean and produces 7 skillssearch-citationwith 3 reference files infiles[]arraysrc/Netclaw.Daemon/BuiltInSkills/match feed versions byte-for-byte