feat(apps): consolidate Apps workspace and navigation experience - #471
Merged
Conversation
…ware API
Implements the backend of the HUF Apps MVP (Tracks/HufApp/HUF_APPS_MVP.md):
- New 'HUF App' DocType: synchronized registry record with provenance
(source_app/source_file), manifest_hash drift detection, sync_status,
sync_error. System Manager only; ordinary users go through guarded APIs.
- Discovery: extends app_seeding LOAD_ORDER with ('apps', upsert_huf_app)
loading last; scans flat *.json under provider app's huf/apps/ dir.
- Validation: manifest_version, app_id grammar, site-local route/icon rules
(rejects external/protocol-relative/data URLs), launch_mode, unknown
top-level fields rejected, permission_method resolves to callable in an
installed app, provenance fields never trusted from JSON.
- Sync lifecycle: hash-skip upserts, per-provider-app commit isolation,
duplicate app_id collision protection (no silent overwrite), orphan
cleanup deletes removed/uninstalled registrations, after_app_uninstall
hook, after_migrate sync.
- APIs (huf.ai.apps_api): get_huf_apps / get_huf_app (permission-filtered,
safe fields only) and sync_huf_apps (System Manager). Visibility via
huf.permissions.has_capability(user, 'agent.use') or permission_method.
- Tests: 12 tests covering valid/invalid/duplicate/removed manifests and
permission filtering.
- AppsPage: card grid of permitted HUF Apps (icon, title, description, category) with loading skeleton, error+retry, and empty states. - Cards navigate full-page to the registered site-local route (window.location.assign, site-local guard); no iframe/microfrontend. - appsApi service wrapping huf.ai.apps_api.get_huf_apps. - 'Apps' entry in a new 'Use' sidebar group above the 'Build' group, gated on the agent.use capability.
Self-contained /assets/huf/js/huf-app-badge.js any HUF App can include with one script tag: subtle fixed pill linking back to /huf/apps, overridable via data-position/label/href/new-tab/theme, no deps.
Cards are <a href> now (cmd/middle-click opens new tab natively), with a subtle ExternalLink icon button per card; site-local route guard kept.
- set_huf_app_enabled (System Manager): admin disable/enable; sync preserves manual disable (manifest enabled applies only on insert). - exposed_tables manifest field: provider DocTypes opt-in for HUF visibility, validated (exists + owned by provider module), stored read-only, exposed via get_huf_app detail + SM list. - Categories: 8 documented defaults + free-form custom (<=30 chars, no HTML); non-standard categories noted at sync, never rejected. - enabled/exposed_tables only exposed to System Managers in APIs. - 11 new tests covering all rules.
CSS vars extracted from the design system (paper/ink/steel/signal, 2px radii, IBM Plex fonts) + scoped base classes (.huf-card/.huf-btn/ .huf-badge/.huf-input/...). Apps opt in with one <link>; light-only per the design system.
… tables - Help '?' in the Apps header opens a modal explaining what HUF Apps are, where they come from, and why the list is permission-filtered. - Search + category chips appear only at >=8 installed apps; chips from the 8 defaults plus any custom categories present. - System-Manager overflow action to disable/enable apps (driven by the SM-only enabled field); disabled cards greyed, badged, blocked. - /huf/data gains an App Tables section linking provider-exposed DocTypes to their desk lists.
Backend returns exposed_tables as a list; the service accepted only a comma-joined string. Tokens asset gains --huf-on-accent for text placed on accent backgrounds.
…sers under Settings Takes the interaction idea from PR #283 (single-open accordion + collapsed-rail flyout popovers) and applies it to develop's Build/Operate grouping instead of the old UI structure: - Build: Agents, Agent Prompts, Flows (Data/Knowledge moved out) - Knowledge (new collapsible group): Tables (/data), Documents (/knowledge) - Operate: Chat, Executions, Artifacts (unchanged) - Settings (collapsible): existing items + Users (People group removed; user management is an admin task, not a daily destination) - New NavCollapsibleGroup component: accordion section when expanded, DropdownMenu flyout when the rail is collapsed; active route auto-opens its group; capability gating preserved per item
…s to Sources - KNOW is now a flat label group (Tables, Sources) matching Build/Operate — always visible, no expand click; only Settings stays collapsible - 'Documents' renamed to 'Sources': it is any vector/FTS-backed retrieval store (Chroma, sqlite-vec, pgvector), and the name scales to future source types (Files, Repos, Drives) nesting under KNOW
esafwan
force-pushed
the
consolidation/apps-workspace-navigation
branch
from
July 26, 2026 19:39
afd1cbe to
1b36781
Compare
This was referenced Jul 26, 2026
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
Consolidates the shared navigation-surface work from:
/huf/apps, app tables, app design tokens, and provider-app badge assets.Hub #243 and Chat/PWA #260/#261 are intentionally excluded.
Included Scope
Apps registry and workspace launcher (#432)
HUF AppDocType registry with manifest/provenance/sync fields.huf/apps/*.jsonin installed provider apps.huf.ai.apps_api:get_huf_apps,get_huf_app, and System Manager-onlysync_huf_apps./huf/appslauncher UI with loading/error/empty states, filters/help, launch controls, and permission-gated Apps nav entry.AppTablesSection.huf/public/css/huf-tokens.cssandhuf/public/js/huf-app-badge.js.Navigation taxonomy (#433)
Usebecause it is the end-user launcher surface.Know: Tables (/data) and Sources (/knowledge).NavCollapsibleGroupfor expanded accordion behavior and collapsed-rail flyout behavior.docs/pr-assets/sidebar-nav-v2/sidebar-expanded-know-group.pngdocs/pr-assets/sidebar-nav-v2/sidebar-collapsed-rail-flyout.pngConsolidation fixes
frontend/src/components/app-sidebar.tsxby combining the AppsUseentry with the newer navigation taxonomy and reusable Settings flyout.frontend/src/pages/DataPage.tsxby preserving grouped data-table UX, addingAppTablesSection, and restoring agent-access modal state/count loading.Validation
Local checks run on
consolidation/apps-workspace-navigation:python3 -m py_compile huf/ai/app_seeding/apps_loader.py huf/ai/app_seeding/seeder.py huf/ai/apps_api.py huf/huf/doctype/huf_app/huf_app.py huf/install.py huf/ai/app_seeding/tests/test_apps_sync.py— pass.npm run typecheckfromfrontend/— pass.npm run buildfromfrontend/— pass.Notes:
npm ciwas required because this fresh worktree had nonode_modules.darkModeand large chunk warnings, but completed successfully.npm cireported dependency audit findings already present in the dependency graph; no tracked dependency files changed.Source PR Handling
Do not merge this umbrella PR into
developor close #432/#433 until parent approval is explicit.