Repository navigation
Agent manifest parameters: launchpad UI, parameter substitution, session persistence #72
Description
Summary
Agent manifests should be able to declare typed parameters that callers supply at session-creation time. A first-class UI collects those values before creating the session, and the agent-session entity persists them so sessions can be reconstructed correctly after restart.
Motivation
Manifests targeting github-copilot need a working-directory per invocation. In future, every manifest will accept a trust-profile parameter. These values cannot be baked into the manifest file.
Design
See docs/design/agent-manifest-parameters.md for the full design.
Scope
Backend (Phantom.Workspaces.Llm.Core)
AgentDefinitionParameterSubstitutor— validates supplied values againstAgentManifest.Parameters, applies defaults, substitutes${name}placeholders inmodel.optionsstring values.CreateAgentChatRequest.ModelParameters— newIReadOnlyDictionary<string, string>?property;AgentFactorycalls the substitutor beforeCreateChatClient.
Entity schema
agent-session.json: addparameter-values(object, string-valued); renameagent-definition-entity-id→agent-source-entity-id.
UI (Phantom.Workspaces)
AgentManifestLaunchpadViewModel— shown when opening anagent-manifestoragent-definitionentity; parameter-entry form with Start Session and Edit Manifest buttons.AgentManifestParameterRowViewModel— one row per declared parameter; bindableValue; directory-picker affordance forworking-directory-style parameters.AgentManifestEditorViewModel— manifest JSON editor; exposes Clone, Save, and Start Session (save-then-open-launchpad) commands; Clone is prominently surfaced.OpenAgentManifestShortcutHandler/OpenAgentDefinitionShortcutHandler— replaced to open the Launchpad tab instead of directly starting a session. If the manifest declares no parameters the Launchpad auto-starts immediately (zero-friction path).EditAgentManifestShortcutHandler— new; handlesShortcut.Editonagent-manifest.OpenAgentSessionShortcutHandler— readsparameter-valuesfrom the session entity on resume.- Views:
AgentManifestLaunchpadView.axaml,AgentManifestEditorView.axaml.
Tests
AgentDefinitionParameterSubstitutorTests— required param missing, default applied, placeholder substitution, unknown param ignored.
Parameters of note
working-directory(Copilot) — Launchpad row shows a directory-picker button.trust-profile(future, all manifests) — Launchpad row will be a dropdown bound to availablellm-trust-profileentities. Out of scope here; mechanism is intentionally general.
Parameter typing
AgentManifest.Parameters (PropertySchema from AgentSchema) already models parameters with Name, Kind, Description, Required, Default. Deeper type-aware UI (e.g. integer spinners, boolean toggles) is deferred; all values are collected as strings in this iteration.
Activity
Fix #72: agent manifest parameters, launchpad UI, parameter substitut…
JoshuaRowePhantom commentedon Jun 29, 2026
❌ Verification Failed
Three criteria violations were found during code review of commit c303a06.
1. Missing test: \Substitute_UnknownParamIgnored\
The issue scope explicitly requires:
The test file covers the first three cases but there is no test that passes a parameter key not declared in the manifest and verifies it is silently ignored (no exception, resolved dict contains only declared params).
2. Launchpad does not auto-start for zero-parameter manifests
The issue design states:
AgentManifestLaunchpadViewModel sets CanStart = true when Parameters.Count == 0, but there is no code that automatically calls StartSessionAsync() on construction/attachment when the parameter list is empty. Users are still presented with a UI form they must manually confirm.
3. No directory-picker affordance in the Launchpad parameter row
The issue design states:
AgentManifestParameterRowViewModel exposes no \Kind/\ParameterKind\ property, and AgentManifestLaunchpadView.axaml renders every parameter as a plain \TextBox\ with no browse button.
JoshuaRowePhantom commentedon Jun 29, 2026
Copilot: Be sure to update this bug with expected tests and designs before implementing.