feat(portal): add AgentDetailPanel with core fields, inheritance badges, and dirty tracking#494
feat(portal): add AgentDetailPanel with core fields, inheritance badges, and dirty tracking#494sytone wants to merge 3 commits into
Conversation
…es, and dirty tracking Part of #407 (Phase 2 of 3)
|
CI: All checks passing (build-and-test, CodeQL, security scans) LGTM - ready to merge. |
…tDetailPanel Extends AgentDetailPanel (PR #494) with missing sections from #290: - Tools & Sub-Agents: tag-based add/remove lists for ToolIds and SubAgentIds - File Access: add/remove path lists for AllowedReadPaths, AllowedWritePaths, DeniedPaths - AgentFormModel: added 5 new list fields with deep Clone() and SequenceEqual Equals() - LoadAgentAsync: populates new fields from descriptor DTO - SaveAsync: includes toolIds, subAgentIds, fileAccess in PUT payload - FileAccessDto added to local DTOs for deserialization - 4 new bUnit tests: tool ids rendered, empty tool ids, sub-agent ids, file access paths - 12/12 AgentDetailPanelTests pass Part of #290
|
Updated this run: Added Tools & Sub-Agents and File Access sections (commit
CI will re-run. Still LGTM for #407 Phase 2. Partial progress on #290. |
|
CI: ✅ All checks passing LGTM — ready to merge. |
sytone
left a comment
There was a problem hiding this comment.
Farnsworth Review — PR #494
CI: ✅ All checks passing
Merge conflicts: ✅ Clean (MERGEABLE)
Conventional commit title: ✅ feat(portal): add AgentDetailPanel with core fields, inheritance badges, and dirty tracking
Test coverage:
- ✅ Core identity fields render
- ✅ Inheritance badge displays for world-default fields
- ✅ Dirty tracking triggers Save button
- ✅ Tools, SubAgentIds, file access path sections
- Full suite passes clean
Spec completeness vs #407 Phase 2 + #290: Comprehensive agent detail panel. Deep Clone() + SequenceEqual for dirty tracking is correct. Soul/Access Controls/Runtime sections deferred pending deeper scope clarification (appropriate).
LGTM. Ready to merge.
|
Closing as part of a planned hard-reset of the in-flight branch set so the new domain-model refactor can land on a clean trunk. Audit verdict: keep Rationale: Portal/UI; reads AgentDescriptor - minor adjustments at most when ICitizen is added. The new plan (in session state) reshapes core types: Citizen (User+Agent union), Vogen-generated value objects, ThreadId removed in favour of composite ChannelAddress, mark-not-delete compaction, centralised If this work is still wanted, refile as a new issue/PR against the post-refactor contracts. |
Part of #407 (Phase 2 of 3)
Changes
AgentDetailPanel.razor(new component)Full-width per-agent configuration panel with:
Sections:
Behaviours:
GET /api/agents/{agentId}to populate all fieldsGET /api/config/agents/{agentId}/effectiveto compute inheritance badgesEquals— Save button only enabled when form differs from original statePUT /api/agents/{agentId}, updates_originalFormon successDELETE /api/agents/{agentId}withOnDeletedcallback to parentAgents.razor(updated)@page "/agents/{AgentId}"routeAgentIdroute parameter — when set, rendersAgentDetailPanelinstead of the table viewHandleAgentDeletedcallback navigates to/agentsand reloads the listTests (8 tests)
Shows_loading_spinner_initiallyDisplays_agent_core_fields_after_loadShows_world_default_badge_for_inherited_fieldSave_button_disabled_when_form_is_cleanSave_button_enabled_after_changing_display_nameDelete_button_shows_confirmation_dialogShows_error_when_agent_not_foundValidation_prevents_save_with_empty_display_nameNote: Phase 3 (extension config blocks via
IAgentExtensionConfigSchema) remains open as #407 Phase 3.