Files
PaperClipAI/ui
DottaandPaperclip 538bbd5478 fix(ui): configure Grok Bot through its external connection (#16338)
## Thinking Path

Paperclip coordinates an external Grok Bot through its authenticated
agent connection and routine. The shared configuration form only
excluded OpenAI Dot from local runtime controls, so Grok Bot inherited a
model picker, local paths, an AI account picker, and a generic runtime
test. These controls cannot configure the external Bot and the generic
test is not evidence of its webhook-to-MCP connection. Extend the
existing external-provider presentation gates and retain the dedicated
connection verification workflow.

Related implementation: #16219 and #16305. Searched open Grok PRs and
issues; the remaining matches concern the separate coding runtime or
unrelated coverage.

## Linked Issues or Issue Description

**What happened?**
An existing Grok Bot agent's Runtime page shows local model and runtime
configuration alongside its actual external connection controls.

**Expected behavior**
Identify the harness as Grok Bot, show its connection and routine
controls, and use Verify connection for authenticated two-way readiness.
Omit inapplicable local-runtime controls and model catalog queries.

**Steps to reproduce**
Create a Grok Bot through Invite external agent, then open its Runtime
settings. Before this correction, the shared form renders a model
selector and Test your agent despite the Bot owning its runtime.

**Paperclip version/commit**
Master after #16219; reproduced against the shared form at
8ffc5748a2.

## What Changed

- Treat Grok Bot and Dot as external providers when resolving local
configuration and model catalog queries.
- Identify Grok Bot directly in the harness field and keep its dedicated
connection, routine, and verification controls.
- Hide the generic runtime test for Grok Bot, including compact feedback
and externally registered test actions.
- Add regressions for compact and inline configuration and production
ConfigurationTab stories for connected, disconnected, and mobile states.
- Isolate generated documentation previews in separate iframes; verified
connected and disconnected states remain distinct across polling.
- Document the Runtime management path.

## Verification

- New regression failed in both variants before the correction; the four
focused UI suites pass: 131 tests, including existing native-provider
configuration coverage.
- Repository typecheck, production build, and token gates pass.
Storybook builds successfully.
- Used the built production ConfigurationTab in the browser: connected
health, credential replacement fields, disconnected reconnect, and a
375-pixel mobile layout with no horizontal overflow. These are synthetic
connection fixtures, not live-provider qualification.
- A full local database-backed suite is unavailable because this Mac has
reached its SysV shared-memory limit. The earlier diagnostic fixture
confirmed that limitation; no unrelated databases were stopped. Full
repository CI passes on 60119f1ce1: 55
checks successful and two intentional skips.

- Fresh Greptile review is 5/5 on the final head, with the
preview-isolation finding addressed and its thread resolved.

## Risks

Low risk: shared form presentation and unnecessary model queries change;
no authorization, secret storage, Runner execution, schema, or transport
behavior changes. Existing stored configuration remains intact.
Native-provider form regressions run in the focused suite; full
repository CI passes on the final head.

## Model Used

OpenAI Codex, based on GPT-6, with repository inspection, code editing,
shell tests, and browser verification. The host does not expose a more
specific serving-model ID or context-window size.

## Checklist

- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have searched GitHub for duplicate or related PRs and linked
them above
- [x] I have either (a) linked existing issues with `Fixes: #` / `Closes
#` / `Refs #` OR (b) described the issue in-PR following the relevant
issue template
- [x] I have not referenced internal/instance-local Paperclip issues or
links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip`
URLs)
- [x] My branch name describes the change (e.g. `docs/...`, `fix/...`)
and contains no internal Paperclip ticket id or instance-derived details
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] All Paperclip CI gates are green
- [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups
- [x] I will address all Greptile and reviewer comments before
requesting merge

---------

Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-10-14 17:23:18 -05:00
..

@paperclipai/ui

Published static assets for the Paperclip board UI.

What gets published

The npm package contains the production build under dist/. It does not ship the UI source tree or workspace-only dependencies.

Storybook

Storybook config, stories, and fixtures live under ui/storybook/.

pnpm --filter @paperclipai/ui storybook
pnpm --filter @paperclipai/ui build-storybook

Typical use

Install the package, then serve or copy the built files from node_modules/@paperclipai/ui/dist.

Editor dependency identity

Keep the root and workspace overrides for @codemirror/state, @codemirror/view, and @lezer/common aligned. CodeMirror requires shared extension identity, while Lezer parsers and syntax highlighters require shared NodeProp IDs. Multiple Lezer copies can crash code-block highlighting with tags is not iterable. src/lib/codemirror-single-instance.test.ts checks the installed dependency graph and highlights sample code through the editor's real language dependencies. GitHub Actions owns regeneration of pnpm-lock.yaml.