Programs source categories

The Programs sidebar separates immutable code-source categories from editable tool profiles. Source categories describe where a callable is registered; profiles describe which callables a user wants available together.

Functions

Selecting a fixed category filters the existing catalog. It does not edit profile membership and is not a drag-and-drop target.

source-derived read-only existing row style existing card style

Verified current implementation and gap

Current boundaryVerified behaviorGap
GET /api/toolsReturns regular non-agentic tools registered from the functions layer.The sidebar has no fixed Functions filter and the All Programs count omits these tools.
GET /api/programsReturns agentic entries with category="agentic" and application entries with category="app".Both are shown under the same All Programs/profile filter.
GET /api/tool-profilesReturns immutable and user-defined named tool sets.Profile rows are visually separated, but the rows above them do not describe source types.

Classification contract

Sidebar rowCanonical evidenceItems shownMutation
All Programs/api/tools + /api/programsAll regular tools, agentic functions, and applications.None
Functions/api/toolsRegular non-agentic tools from programs/functions/.Global enable switch remains available on each card.
Agentic Functions/api/programs category=agenticAgentic functions from programs/agentic_functions/.Existing favorite, icon, edit, and profile actions remain available.
Applications/api/programs category=appInstalled programs from programs/applications/.Existing program actions remain available.
Favoritesprograms/meta favoritesFavorited agentic functions and applications.Existing favorite action.
UncategorizedProfile membershipCatalog entries absent from every stored profile.Existing profile assignment actions.
Rows below divider/api/tool-profilesNamed tool profiles such as FULL, BUILT-IN, and research.Create, rename, delete, and membership actions remain unchanged.

Reference comparison and decisions

ReferenceRelevant modelDecision here
OpenProgram registryRegular functions and agentic functions register into one callable surface while retaining source-layer metadata.Adopt the unified runtime catalog; add read-only source filters only in the management UI.
Hermes toolsetsNamed toolsets represent selection, not source ownership.Keep tool profiles separate from source categories.
Claude Code and OpenClaw referencesRegistration and policy decide callable availability; neither reference exposes OpenProgram's three-directory source tree as a Programs sidebar.Do not infer source categories from policy, permissions, enabled state, or profile membership.

Adopted: three fixed rows derived from the two existing endpoints and the existing program category. Modified: All Programs includes both endpoint result sets. Rejected: a new persisted category field, a user-editable category configuration system, source labels inside every card, nested directory rows, and a new tab layout.

Behavior, compatibility, and failures

Task brief and gate manifest

Production files: web/components/functions/functions-page.tsx and its existing shared types/presentational files only when required. Test file: one runnable Programs category check under web/scripts/. Excluded: registry changes, new API fields, profile storage migration, card restyling, tabs, per-directory nested filters, dependencies, and release operations.

Acceptance: the Programs page renders All Programs, Functions, Agentic Functions, Applications, Favorites, and Uncategorized above the existing divider; counts use live data; each fixed category shows only its defined source class; All Programs includes regular tools; profiles remain below the divider and retain mutation behavior; source rows cannot receive drops.

Verification: focused category check in RED and GREEN; TypeScript compile; full npm run check; production build; documentation link check; git diff --check; independent specification review; independent quality review.

Implementation status

Implemented in the Programs page with one shared pure filtering module and one runnable acceptance check. The focused RED failed because the fixed Functions source row was absent. The reviewed implementation passes the focused category check, TypeScript compilation, the full frontend check, production build, documentation link check, and diff check. Independent specification and quality reviews both passed after their confirmed test-integrity and reserved-name compatibility findings were repaired.