Skip to content

feat(ui): Settings › Credentials is its own pane, not a section of Storage (abilityai/trinity-enterprise#951) - #3877

Merged
dolho merged 2 commits into
devfrom
feature/ent951-credentials-pane
Oct 22, 2026
Merged

dolho merged 2 commits into
devfrom
feature/ent951-credentials-pane

Conversation

@dolho

@dolho dolho commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Credentials gets its own pane in the Settings rail, directly after General ("What secrets it runs with"). feat(ui): one Settings home for the agent — rail, General, Guardrails, Storage, People, one restart banner (ent#887, #888, #890, #891, #353) #3798 had made it one section of Storage. ?tab=settings&section=credentials opens it, and the legacy ?tab=credentials link now lands here instead of on Storage.
  • Storage loses the Credentials section and is otherwise unchanged. The credential search words ("credentials", "secrets", "env", …) move from Storage to the new pane.
  • The system agent gets Credentials back. The old Credentials tab was shown to it; folding the panel into Storage, which is hidden for the system agent, had removed it.
  • The file list only reports what it could actually read. On a stopped agent, all three rows said "Not present" because the panel could not read them. Now:
    • a stopped agent shows "The agent is stopped. Start it to see and change its credential files".
    • a failed first read shows LoadFailed with a retry. A failed refresh keeps the data already on screen.
    • an agent with no .env gets a next action: Quick Inject, or Add .env, which opens the editor on an empty .env. This is keyed on .env because every agent has a platform-written .mcp.json. A "no credential file at all" test would never fire on a real agent; the mocks hid this and the live run caught it.
  • Nothing reports to the restart banner from this pane. Credential changes need no restart: .env is re-read at every spawn, per the requirements. The acceptance criteria item about restart-required rows therefore has nothing to wire.
  • OSS-core, by operator decision: this relocates an existing OSS panel, so it is not entitlement-gated.

Changes

  • src/frontend/src/utils/agentSettings.js: the credentials section, LEGACY_TAB_SECTIONS.credentials, the system agent's panes, and keywords.
  • src/frontend/src/components/agent-settings/CredentialsPane.vue (new), wired into views/AgentDetail.vue. StoragePane.vue drops the section.
  • src/frontend/src/components/CredentialsPanel.vue: the stopped, failed and no-.env states (primitives only: LoadFailed, BaseButton).
  • src/frontend/raw-color-baseline.json: re-frozen in its own commit, with the growth named. CredentialsPanel.vue raw_gray goes from 65 to 69 because of two neutral-ink pairs for the new lines. No non-gray class or hex was added. Only that one entry changed; a full regeneration would have rewritten about 500 lines of unrelated drift.
  • Docs: docs/memory/requirements/core-agent.md §1.7 (FR-1, FR-2, FR-5, status), feature-flows/agent-settings-home.md, architecture/frontend.md.

Test Plan

  • npm run test:unit: 388 files, 6145 tests pass. That covers the raw-colour, loading-gate and source-text ratchets. npm run check:tokens is OK and vite build succeeds.
  • New tests/unit/credentialsPane.mount.spec.js (7 mounted cases): the pane hosts the panel; Storage does not; the no-.env next action, with Add .env opening the editor; a .env hides it; a stopped agent shows no rows; a failed read shows LoadFailed and the retry recovers.
  • agentSettingsHome.spec.js and agentSettingsHome.mount.spec.js are updated for the new pane order, the alias, the system agent's panes and search.
  • Live in a browser, light and dark: this branch's Vite server against a running local stack, with a throwaway agent that was deleted afterwards.
    • ?tab=credentials lands on Credentials, and the rail order is General, Credentials, Guardrails, People, Channels, Integrations, Storage.
    • Storage has no Credentials section, and the system agent's rail is General, Credentials, Guardrails, Integrations.
    • The running agent with no .env shows the next-action row; the stopped agent shows the stopped line and no fake "Not present" rows.
    • Screenshots are local only; none are committed.
  • Not touched, out of scope: on a stopped agent the footer still says "No encrypted backup", which is just as unknowable there.

Fixes abilityai/trinity-enterprise#951

🤖 Generated with Claude Code

dolho and others added 2 commits October 21, 2026 12:23
…orage (Abilityai/trinity-enterprise#951)

#3798 (ent#888) folded the Credentials tab into Settings › Storage, beside
repository, git sync and folders, and pointed ?tab=credentials at Storage.
Credentials answer a different question and are what an operator opens most
often after creating an agent, so they get their own pane again.

- utils/agentSettings.js: a `credentials` section directly after General
  ("What secrets it runs with"), the legacy ?tab=credentials alias lands on
  it, the credential search words move off Storage, and the system agent
  gets it back (it had the Credentials tab before #3798).
- CredentialsPane.vue hosts CredentialsPanel embedded; StoragePane drops it.
- CredentialsPanel's file list stops reporting "Not present" for files it
  could not read: a stopped agent says so, a failed first read shows
  LoadFailed with a retry (a failed refresh keeps the data on screen), and an
  agent with no .env gets a next action (Quick Inject, or Add .env). Keyed on
  .env because every agent has a platform-written .mcp.json.
- Credential changes need no restart (.env is re-read at every spawn), so the
  pane reports nothing to the restart banner.

OSS-core by operator decision: a relocation of an existing OSS panel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… gray) (Abilityai/trinity-enterprise#951)

Named increase, in its own commit as design-system-contract.md asks:
CredentialsPanel.vue raw_gray 65 -> 69. Two neutral-ink pairs
(text-gray-600 dark:text-gray-400) for the new stopped-agent line and the
no-.env empty row. No non-gray palette class and no hex were added; the
token layer has no semantic ink token to use instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dolho dolho added the ui PR touches the frontend UI — triggers Playwright e2e tests label Oct 21, 2026
@dolho
dolho requested a review from obasilakis October 22, 2026 09:04

@obasilakis obasilakis left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Design-system clean (gray only, increase named in the baseline, LoadFailed/BaseButton reused, no new loading gates), ?tab=credentials and the import wizard's goTo('credentials') land on the new pane, nothing gated leaks.

Minor:

  • src/frontend/src/utils/agentTabs.js:87 — comment still says Credentials is a section of Settings › Storage.

@dolho
dolho merged commit f049d67 into dev Oct 22, 2026
26 of 28 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ui PR touches the frontend UI — triggers Playwright e2e tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants