Skip to content

Improve dashboard UX clarity for channel settings and dependencies#2

Open
builtbyrobben wants to merge 9 commits intomainfrom
agent/mac-jeremydjohnson/ui-adaptation-gateway-stability
Open

Improve dashboard UX clarity for channel settings and dependencies#2
builtbyrobben wants to merge 9 commits intomainfrom
agent/mac-jeremydjohnson/ui-adaptation-gateway-stability

Conversation

@builtbyrobben
Copy link
Owner

@builtbyrobben builtbyrobben commented Feb 7, 2026

Summary\n- add clearer config help/docs for ambiguous channel fields (Allow Bots, Block Streaming, Capabilities, DM policy)\n- add dynamic dependency/risk notices with quick-fix actions for common channel misconfigurations\n- improve +Add UX for arrays/maps with contextual labels and key guidance\n- add Channels health callout recommending openclaw doctor and channels status --probe\n\n## Validation\n- pnpm --dir ui test src/ui/config-form.browser.test.ts src/ui/views/channels.config.test.ts src/ui/views/channels.shared.test.ts\n- pnpm exec vitest run src/config/schema.test.ts\n- pnpm --dir ui build\n- pnpm build\n- pnpm lint\n- pnpm test\n\n## Notes\n- pnpm check still has a pre-existing unrelated type error in src/telegram/bot.ts

Greptile Summary

Improved dashboard UX by adding comprehensive help text, dependency warnings, and contextual guidance for channel configuration. The changes introduce a robust impact tracking system that validates config dependencies and provides quick-fix actions for common misconfigurations.

Key improvements:

  • Added 100+ field help entries with clear explanations for ambiguous settings (allowBots, blockStreaming, capabilities, DM policies)
  • Implemented dynamic dependency/risk notices with actionable quick-fixes (e.g., open DM policy requiring allowFrom: ["*"])
  • Enhanced array/map field UX with contextual labels and platform-specific placeholders (Discord guild IDs, Slack channel IDs)
  • Added "Channels health" callout recommending openclaw doctor and openclaw channels status --probe
  • Standardized channel headers with docs links derived from channel metadata
  • Lazy-loaded LanceDB to prevent crashes on platforms without native module support

Test coverage:

  • Added comprehensive browser tests for map guidance, fallback hints, and impact rendering
  • New test suites for channel header rendering and config form validation
  • Schema tests validate UI hint impacts and dependency logic

The PR successfully addresses configuration clarity issues while maintaining backward compatibility.

Confidence Score: 4/5

  • Safe to merge with one workflow condition issue noted
  • Well-tested UX improvements with comprehensive test coverage. The only concern is the labeler workflow condition checking secrets.GH_APP_PRIVATE_KEY in the if statement, which won't work as expected. Otherwise, the changes are clean, well-structured, and thoroughly validated.
  • .github/workflows/labeler.yml requires fix for secret availability check

Important Files Changed

Filename Overview
src/config/schema.ts Added comprehensive field help text, UI hints for channel config, and impact/dependency tracking system for config validation
ui/src/ui/views/config-form.shared.ts Implemented fallback UI hints, impact resolution logic, and dynamic dependency checking for channel configurations
ui/src/ui/views/config-form.node.ts Enhanced map field guidance, array item labels, and contextual placeholders for channel-specific config fields
ui/src/ui/views/channels.shared.ts Added channel metadata resolution helpers and standardized channel header rendering with docs links
ui/src/ui/views/channels.ts Added health callout with doctor/probe recommendations, collapsed raw data behind details, improved header layout
extensions/memory-lancedb/index.ts Lazy-loaded LanceDB import to prevent missing native module errors on unsupported platforms
.github/workflows/labeler.yml Updated job conditions to check secret availability before execution
ui/src/styles/config.css Added styles for impact callouts, section headers, config field docs links, and improved form layout

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[User edits config field] --> B[hintForPath resolves UI hints]
    B --> C{Fallback hints exist?}
    C -->|Yes| D[Merge backend + fallback hints]
    C -->|No| E[Use backend hints only]
    D --> F[resolveConfigImpacts]
    E --> F
    F --> G{Check impact conditions}
    G -->|when=truthy/equals/etc| H{Source value matches?}
    H -->|Yes| I{Has target path?}
    H -->|No| K[Skip impact]
    I -->|Yes| J{Check target value}
    I -->|No| L[Render risk notice]
    J -->|Mismatch| M[Render requires/conflicts notice]
    J -->|Match| K
    L --> N[Display with quick-fix button]
    M --> N
    N --> O{User clicks fix?}
    O -->|Yes| P[onPatch with fixValue]
    O -->|No| Q[User manually edits]
    P --> R[Config updated]
    Q --> R
Loading

Last reviewed commit: 9506db5

builtbyrobben and others added 7 commits January 31, 2026 20:55
This workflow:
- Triggers only when @claude is mentioned in issues or issue comments
- Does NOT perform automatic code reviews on PRs
- Uses CLAUDE_CODE_OAUTH_TOKEN for Claude Max/Pro subscription (no API key needed)

To use:
1. Generate OAuth token: Run 'claude setup-token' in Claude Code CLI
2. Add token to repo secrets as CLAUDE_CODE_OAUTH_TOKEN
3. Install Claude GitHub App: https://github.com/apps/claude
4. Tag @claude in any issue to test
…ng, safe JSON parsing, cron model fallback

- Increase shutdown timeout from 5s to 15s to prevent incomplete cleanup (run-loop.ts)
- Add ThrottleInterval=10 to launchd plist to prevent crash-loop respawning (launchd-plist.ts)
- Replace silent .catch(() => {}) with logged warnings in gateway cleanup (server-close.ts)
- Wrap JSON.parse in try-catch for Signal RPC responses (signal/client.ts)
- Consolidate and safeguard JSON.parse in Feishu media download (feishu/download.ts)
- Cron model override: warn and fall back to default instead of hard-failing the job (isolated-agent/run.ts)
- Update test to match new warn-and-fallback behavior

Co-Authored-By: Claude Opus 4.6 <[email protected]>
…dashboard features

uiHints enrichment:
- Add 75+ FIELD_HELP entries covering tools, diagnostics, UI, browser, talk, skills, channels
- Add 12 FIELD_PLACEHOLDERS for token/key inputs
- Add 3 new FIELD_LABELS for gateway settings

CSS restyling:
- Nested config objects use left-border accent instead of full border
- Reduced padding and title prominence for deeply nested forms
- Add log severity row tinting (warn=yellow, error/fatal=red)
- Add clickable stat card hover styles

Missing features:
- Cron job remove confirmation dialog
- Token count formatting (200000 → "200K tokens")
- Channel raw JSON wrapped in collapsible <details>
- Overview stat cards link to their detail tabs
- Nodes: security/ask mode descriptions, agent scope pill search/filter
- Logs: severity-based row coloring

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Cron form:
- Add dynamic help text below Session, Wake mode, Payload, and Delivery dropdowns
- Descriptions update when the selected option changes

Sessions table:
- Remove confusing "(explicit)" suffix from verbose "off" option
- Add title tooltips to Thinking/Verbose/Reasoning dropdowns explaining "inherit"
- Add title tooltips to column headers explaining Kind, Tokens, Thinking, Verbose, Reasoning

Overview:
- Rename "Tick Interval" to "Poll Interval" and hide when n/a
- Replace "sessions.patch" internal RPC reference with user-facing language

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@builtbyrobben builtbyrobben force-pushed the agent/mac-jeremydjohnson/ui-adaptation-gateway-stability branch from 2ed98c5 to bc2822b Compare February 7, 2026 04:56
Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile


jobs:
label:
if: github.repository_owner == 'openclaw' && secrets.GH_APP_PRIVATE_KEY != ''
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

secrets.GH_APP_PRIVATE_KEY reference won't work in if condition

Suggested change
if: github.repository_owner == 'openclaw' && secrets.GH_APP_PRIVATE_KEY != ''
if: github.repository_owner == 'openclaw'
Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/labeler.yml
Line: 13:13

Comment:
`secrets.GH_APP_PRIVATE_KEY` reference won't work in `if` condition

```suggestion
    if: github.repository_owner == 'openclaw'
```

How can I resolve this? If you propose a fix, please make it concise.

Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

48 files reviewed, 2 comments

Edit Code Review Agent Settings | Greptile


jobs:
label:
if: github.repository_owner == 'openclaw' && secrets.GH_APP_PRIVATE_KEY != ''
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Condition won't work as intended. Secrets aren't available in if conditions — they're always empty strings in workflow expressions. This check will always evaluate to false on forks.

Suggested change
if: github.repository_owner == 'openclaw' && secrets.GH_APP_PRIVATE_KEY != ''
if: github.repository_owner == 'openclaw'

The secret availability will be enforced when the step tries to use it.

Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/labeler.yml
Line: 13

Comment:
Condition won't work as intended. Secrets aren't available in `if` conditions — they're always empty strings in workflow expressions. This check will always evaluate to false on forks.

```suggestion
    if: github.repository_owner == 'openclaw'
```

The secret availability will be enforced when the step tries to use it.

How can I resolve this? If you propose a fix, please make it concise.

});

label-issues:
if: github.repository_owner == 'openclaw' && secrets.GH_APP_PRIVATE_KEY != ''
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same issue — secret check in if won't work.

Suggested change
if: github.repository_owner == 'openclaw' && secrets.GH_APP_PRIVATE_KEY != ''
if: github.repository_owner == 'openclaw'
Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/labeler.yml
Line: 52

Comment:
Same issue — secret check in `if` won't work.

```suggestion
    if: github.repository_owner == 'openclaw'
```

How can I resolve this? If you propose a fix, please make it concise.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant