Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
50b0014
Add stale devglide-* MCP cleanup to teardown
DannyNs Mar 20, 2026
b40f628
Assorted UI and TTS fixes
DannyNs Mar 20, 2026
027e527
Phase 1: quick wins from codex scan
DannyNs Mar 20, 2026
1156db5
Phase 2: security hardening from codex scan
DannyNs Mar 20, 2026
57ba7a5
Phase 3: domain consistency from codex scan
DannyNs Mar 20, 2026
08afd48
Phase 4: architecture improvements from codex scan
DannyNs Mar 20, 2026
96551fd
Follow-up: Zod validation and type discipline for kanban routes
DannyNs Mar 20, 2026
d098e42
Follow-up: shell dedup, Zod validation, and type cleanup
DannyNs Mar 20, 2026
22d4718
Codex scan review fixes: type safety, validation, architecture, security
DannyNs Mar 20, 2026
6348903
Add multi-LLM chat module with @mention messaging and PTY delivery
DannyNs Mar 21, 2026
a3d7177
Add broadcast delivery, rules of engagement, detach/reclaim, and topi…
DannyNs Mar 22, 2026
2da7833
Standardize app structure with shared-ui package and fix chat naming/…
DannyNs Mar 22, 2026
e15d9d0
Add search and sort to kanban feature list screen
DannyNs Mar 22, 2026
a3cad95
Fix feature search to match board search pattern
DannyNs Mar 22, 2026
20793fd
Wire keyboard shortcut (/) to feature-list search input
DannyNs Mar 22, 2026
3b545ac
Remove sort dropdown and match board search exactly
DannyNs Mar 22, 2026
74009e6
Migrate Phase 4 apps to shared-ui and sort chat members alphabetically
DannyNs Mar 22, 2026
87875d2
Replace claim-based chat coordination with server-assigned auto-dispatch
DannyNs Mar 22, 2026
33c9e9a
Revert "Replace claim-based chat coordination with server-assigned au…
DannyNs Mar 22, 2026
b01ed74
Replace chat rules with planning/execution model
DannyNs Mar 22, 2026
f4027b5
Scope chat participants and messages by project ID
DannyNs Mar 22, 2026
763a62b
Add chat markdown/Mermaid rendering and kanban enhancements
DannyNs Mar 23, 2026
c15532a
Fix kanban timestamp collisions and cross-feature move order
DannyNs Mar 23, 2026
488e8e4
Fix PTY auto-enter for long messages with chunked delivery
DannyNs Mar 23, 2026
fa1a991
Add discussion-to-execution boundary rule in chat rules of engagement
DannyNs Mar 23, 2026
62e87bd
Add PTY-driven participant status detection (working, awaiting-user)
DannyNs Mar 23, 2026
c16df04
Rewrite chat rules of engagement and simplify member tag display
DannyNs Mar 23, 2026
5a590f1
Remove reviewing status and detect user-directed questions as awaitin…
DannyNs Mar 23, 2026
db66619
Fix stale chat-rules test, remove dead topic test, and fix kanban ord…
DannyNs Mar 23, 2026
eca1188
Add structure enforcement script and migrate legacy apps to canonical…
DannyNs Mar 23, 2026
35a632d
Refine chat participant status handling
DannyNs Mar 23, 2026
b0e459b
Revert chunked PTY chat delivery
DannyNs Mar 23, 2026
1b8f767
Add PTY delivery status tracking, graceful pane loss, and smart retry
DannyNs Mar 23, 2026
b908cc6
Add paneId auto-resolution and structured join diagnostics to chat
DannyNs Mar 23, 2026
cbc01db
Add chat_status MCP tool and REST endpoint for connection diagnostics
DannyNs Mar 23, 2026
968965e
Add auto-rejoin participant persistence after server restart
DannyNs Mar 23, 2026
61bc26e
Remove delivery status UI and clean up dead code in chat module
DannyNs Mar 23, 2026
292594f
Fix cross-platform path handling in structure check
Mar 23, 2026
e18bf2c
Make chat participant colors pane-based
Mar 24, 2026
b5d184f
Remove dead artifacts, consolidate shared helpers, fix chat multiline…
Mar 24, 2026
4239937
Auto-focus chat input on mount and increase PTY submit delay
Mar 24, 2026
dff3bad
Add documentation MCP server for operational guidance
Mar 24, 2026
a1de52d
Add chat pipes, mention suggestions, and Mermaid rendering
Mar 25, 2026
8ba26a9
Improve chat invite UI, member list, custom tooltips, and fix black t…
Mar 25, 2026
2027e88
Replace shell invite sleep with readiness detection, proxy shell MCP …
Mar 26, 2026
c1b7957
Unify REST and MCP chat sessions, add per-pipe storage, and update docs
Mar 26, 2026
55ec420
Add joinedVia field to chat participants, require chat_send for respo…
Mar 26, 2026
46a6a2d
Add @user reply rule to chat rules of engagement, improve test portab…
Mar 26, 2026
21effc8
Pre-register invited agents via REST fallback, improve chat UI colors…
Mar 26, 2026
127f6cf
Add brainstorm store, pipe UI events, and expand pipe modes with expl…
Mar 27, 2026
9f732eb
Fix REST→MCP session adoption announcing "reconnected" instead of "se…
Mar 27, 2026
580d936
Update codex auto-accept flag to --dangerously-bypass-approvals-and-s…
Apr 1, 2026
8832e16
Add pipe reliability: stage deadlines, liveness watchdog, event-sourc…
Apr 1, 2026
be7c1e6
Fix review findings: wire recovery into startup, restore emission sta…
Apr 1, 2026
75f718b
Fix watchdog cleanup to iterate all projects, not just active one
Apr 1, 2026
364143e
Add durable assignment model and payload storage for pipe-upgrade
Apr 1, 2026
90d8970
Fix review findings: lossy recovery and missing superseded producer
Apr 1, 2026
c569038
Add lease-aware authorization, assignment queries, and deadline enfor…
Apr 1, 2026
991dd83
Fix review finding: deduplicate assignment queries
Apr 1, 2026
6bf78ee
Wire lease-aware auth into shared files: read guard, MCP tools, REST …
Apr 1, 2026
fc87249
fix(chat): resolve cursor cli fallback for invites
Apr 3, 2026
ef625b4
Upgrade pipe assignment model
Apr 3, 2026
b5a9bc6
Merge branch 'feature/pipe-upgrade-assignment-model' into develop
Apr 3, 2026
8a2065b
Codex reverted run command
Apr 3, 2026
7bd76c6
feat(chat): add mobile pipe drawer, extract codex config, remove PTY …
Apr 3, 2026
4089ac7
fix(chat): address review feedback on mobile pipe drawer
Apr 3, 2026
8c604cc
feat(ui): visual polish and micro-interaction layer for dashboard
Apr 3, 2026
8d3f4bb
refactor(chat): remove mobile pipe drawer FAB and bottom sheet
Apr 3, 2026
7565f48
feat(chat): add invite agent popup, restyle rules modal to design system
Apr 3, 2026
f39e90c
fix(chat): use --dangerously-bypass-approvals-and-sandbox for codex a…
Apr 3, 2026
7e7913e
refactor(chat,shell): move agent invite to shell, fix mount boot order
Apr 3, 2026
31aa280
feat(ui): deepen dark palette, swap accent to sky blue, add aurora ba…
Apr 3, 2026
b233c39
Removed padding from terminal
Apr 3, 2026
19f1dce
Changed UI to be less glossy
Apr 3, 2026
5157089
feat(chat): targeted PTY delivery + unresolved-target warning
Apr 3, 2026
cea5065
test(chat): add targeted PTY delivery unit and integration tests
Apr 3, 2026
3191917
feat(chat): team orchestration v2 — roles, playbooks, member manageme…
Apr 4, 2026
d7ed8e8
feat(chat): UI polish + disband team fixes
Apr 4, 2026
ba6afc1
feat(chat): replace team orchestration with capability-based roles
Apr 4, 2026
769ef50
chore: checkpoint WIP before role-removal strip
Apr 6, 2026
a9a15f4
chore(chat): remove role/team orchestration surface
Apr 6, 2026
c752310
wip(kb): checkpoint untracked KB module before removal
Apr 8, 2026
d8e61e1
feat(kb): remove knowledge base module
Apr 8, 2026
56aa982
Merge pull request #34 from DannyNsITServices/feature/implement-pipe
DannyNs May 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,12 @@ src/apps/voice/data/stats.json
src/apps/voice/data/config.json
src/apps/test/data/scenarios.json

# Environment-specific project settings
.claude/settings.json
# Claude Code project state
.claude/

# Articles (drafts, images, exports)
articles/

# Local dev scripts
reinstall.sh
reinstall.cmd
44 changes: 0 additions & 44 deletions .mcp.json

This file was deleted.

30 changes: 28 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,28 @@ Monorepo managed with **pnpm workspaces** and **Turborepo**.
All apps/features render within it. It is the container, not an app itself.
- **Shell** — the MCP server for terminal pane management (`shell_create_pane`,
`shell_run_command`, etc.). Panes are ephemeral and in-memory.
- **Apps** — individual features (kanban, voice, test, workflow, etc.) that each
- **Apps** — individual features (kanban, voice, test, workflow, chat, etc.) that each
expose both REST routes (mounted by the dashboard) and an MCP server (stdio).
- **Chat** — the MCP server for multi-LLM communication (`chat_join`,
`chat_send`, etc.). Participants and message delivery are in-memory;
message history is persisted per-project as JSONL; pipe messages are
additionally dual-written to per-pipe JSONL files (`pipes/{pipeId}.jsonl`)
for efficient scoped reads. `chat_join` requires an explicit `paneId`,
which should be read from `DEVGLIDE_PANE_ID` in the shell session. REST
and MCP joins share session state — a REST join with `mcp-session-id`
header binds to the MCP session, and MCP tools can adopt REST-joined
participants by `paneId`. Pane collisions preserve the existing session
(409 `PANE_ALREADY_BOUND`). Chat REST endpoints accept scoped `projectId`
overrides, and `POST /api/chat/messages` accepts `projectId` in the body
so the dashboard can target a non-active project explicitly. The effective
chat rules of engagement are returned on join and can be overridden per
project.
- **Documentation** — the MCP server for operational guidance on DevGlide
tools (`docs_list`, `docs_match`, `docs_context`, etc.). Provides tool
guides, workflows, examples, troubleshooting entries, and project
overrides. Hybrid-scoped: global docs in `~/.devglide/documentation/`,
project overrides in `projects/{id}/documentation/`. Seed content is
auto-installed on first use.

## MCP Server Pattern

Expand Down Expand Up @@ -66,12 +86,16 @@ All runtime state lives in `~/.devglide/`. The directory structure:
│ ├── logs/ # project log files
│ ├── workflows/ # project-scoped workflows
│ ├── vocabulary/ # project-scoped vocabulary
│ └── prompts/ # project-scoped prompts
│ ├── prompts/ # project-scoped prompts
│ ├── chat/ # chat message history (messages.jsonl)
│ │ └── pipes/ # per-pipe JSONL files ({pipeId}.jsonl)
│ └── documentation/ # project-scoped documentation overrides
├── voice/ # global voice config, history, stats
│ └── config.json
├── workflows/ # global workflows
├── vocabulary/ # global vocabulary
├── prompts/ # global prompts
├── documentation/ # global documentation (tool guides, workflows, etc.)
├── logs/ # server logs
└── pids/ # daemon PID files
```
Expand All @@ -93,13 +117,15 @@ These rules are intentional — do not change an app's scoping without discussio
| **Test** | `projects/{id}/scenarios.json` | Saved test scenarios |
| **Log** | `projects/{id}/logs/` | Log file tailing scoped to active project |
| **Shell** | In-memory | Panes belong to a project session, no disk persistence |
| **Chat** | `projects/{id}/chat/` | Message history (`messages.jsonl`) and rules override (`rules.md`) per project; participants are in-memory |

### Hybrid (global + per-project overlay; per-project takes precedence)
| App | Path | Notes |
|-----|------|-------|
| **Workflow** | `~/.devglide/workflows/` + `projects/{id}/workflows/` | Project workflows override global |
| **Vocabulary** | `~/.devglide/vocabulary/` + `projects/{id}/vocabulary/` | Project terms overlay global |
| **Prompts** | `~/.devglide/prompts/` + `projects/{id}/prompts/` | Project prompts overlay global |
| **Documentation** | `~/.devglide/documentation/` + `projects/{id}/documentation/` | Project docs override global by ID; seed content auto-installed |

## Platform Notes

Expand Down
36 changes: 27 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@
</p>

<p align="center">
<img src="https://img.shields.io/badge/MCP_Tools-56-22c55e" alt="56 MCP Tools" />
<img src="https://img.shields.io/badge/MCP_Servers-8-3b82f6" alt="8 MCP Servers" />
<img src="https://img.shields.io/badge/App_Modules-10-f59e0b" alt="10 App Modules" />
<img src="https://img.shields.io/badge/MCP_Tools-61-22c55e" alt="61 MCP Tools" />
<img src="https://img.shields.io/badge/MCP_Servers-9-3b82f6" alt="9 MCP Servers" />
<img src="https://img.shields.io/badge/App_Modules-11-f59e0b" alt="11 App Modules" />
<img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License" />
<img src="https://img.shields.io/badge/node-%3E%3D22-brightgreen" alt="Node.js >= 22" />
</p>
Expand Down Expand Up @@ -51,15 +51,15 @@ devglide setup
devglide dev
```

Open **http://localhost:7000** — that's it. Claude Code can now use all 56 MCP tools.
Open **http://localhost:7000** — that's it. Claude Code can now use all 61 MCP tools.

> **Requirements:** Node.js >= 22, [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI
>
> **Platforms:** Linux, macOS, and Windows (native, WSL, or Git Bash).

## Modules

DevGlide ships 10 integrated modules. Eight expose MCP servers that Claude Code calls directly; two are dashboard-only tools.
DevGlide ships 11 integrated modules. Nine expose MCP servers that Claude Code calls directly; two are dashboard-only tools.

### Kanban — Task Management

Expand Down Expand Up @@ -103,6 +103,10 @@ Product docs and guides served directly in the dashboard with navigation, module

<img src="assets/screenshots/documentation.png" alt="Documentation viewer with module cards" width="800" />

### Chat — Multi-LLM Communication

Shared chat room where the user and multiple LLM instances (Claude Code, Cursor, Codex, etc.) communicate via @mention addressing. The server assigns each participant a unique memorable name. Messages are delivered to LLMs via PTY injection into their shell panes.

### And More

| Module | Type | What it does |
Expand All @@ -124,9 +128,9 @@ Product docs and guides served directly in the dashboard with navigation, module
│ stdio (MCP) │ stdio (MCP)
▼ ▼
┌────────────────────────────────────────────────────────┐
│ DevGlide MCP Servers (x8) │
│ DevGlide MCP Servers (x9) │
│ │
│ kanban shell test workflow vocab voice log prompts │
│ kanban shell test workflow vocab voice log prompts chat
└────────────────────────┬───────────────────────────────┘
shared state
Expand All @@ -149,11 +153,11 @@ Product docs and guides served directly in the dashboard with navigation, module
└────────────────────────────────────────────────────────┘
```

**How it works:** `devglide setup` registers 8 MCP servers with Claude Code. Each server runs as an isolated stdio process. The same tools are also available via HTTP on the unified server, so the browser dashboard and Claude Code always share the same state.
**How it works:** `devglide setup` registers 9 MCP servers with Claude Code. Each server runs as an isolated stdio process. The same tools are also available via HTTP on the unified server, so the browser dashboard and Claude Code always share the same state.

## MCP Tools

56 tools across 8 servers. Expand each section for the full reference.
61 tools across 9 servers. Expand each section for the full reference.

<details>
<summary><strong>Kanban</strong> — 15 tools</summary>
Expand Down Expand Up @@ -275,6 +279,19 @@ Product docs and guides served directly in the dashboard with navigation, module

</details>

<details>
<summary><strong>Chat</strong> — 5 tools</summary>

| Tool | Description |
|------|-------------|
| `chat_join` | Join the chat room; pass a live `paneId` from `DEVGLIDE_PANE_ID` with `submitKey: "cr"` (default, correct for all known clients) |
| `chat_leave` | Leave the chat room |
| `chat_send` | Send a message (use @mentions to target recipients) |
| `chat_read` | Read message history with limit, since, and topic filters |
| `chat_members` | List active participants with pane link status |

</details>

## CLI Reference

```bash
Expand Down Expand Up @@ -320,6 +337,7 @@ devglide/
│ │ ├── voice/ # Speech-to-text
│ │ ├── log/ # Console capture
│ │ ├── prompts/ # Prompt templates
│ │ ├── chat/ # Multi-LLM chat room
│ │ ├── coder/ # In-browser editor
│ │ └── keymap/ # Keyboard shortcuts
│ └── packages/
Expand Down
44 changes: 43 additions & 1 deletion bin/claude-md-template.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Managed CLAUDE.md section for DevGlide onboarding instructions.
// Installed by `devglide setup`, removed by `devglide teardown`.

const VERSION = "0.4.0";
const VERSION = "0.6.0";
const BEGIN = `<!-- DEVGLIDE:BEGIN v${VERSION} -->`;
const END = "<!-- DEVGLIDE:END -->";

Expand Down Expand Up @@ -94,11 +94,53 @@ Describe what to test in natural language and scenarios are generated automatica
- Config: \`GET /config\` · \`GET /config/providers\` · \`PUT /config\` · \`POST /config/test\` · \`GET /config/check-ffmpeg\`
- Stats: \`GET /config/stats\` · \`DELETE /config/stats\`

### devglide-chat — Multi-LLM chat room
Shared chat room where user and multiple LLM instances communicate via @mention addressing.
Messages are delivered to LLMs via PTY injection when linked to a shell pane.
- \`chat_join\` — register as a chat participant (requires explicit \`paneId\`)
- \`chat_leave\` — leave the chat room
- \`chat_send\` — send a message (delivery goes to recipients resolved from \`to\` plus body @mentions; use \`@all\` to broadcast; LLM messages with no recipients in either field are persisted but not PTY-delivered)
- \`chat_read\` — read message history (supports \`limit\`, \`since\` filters)
- \`chat_members\` — list active participants with pane link status
- **Name assignment:** The server derives your chat alias from \`name\` + pane number (e.g. "claude-1" for name "claude" on pane 1). The \`name\` param is the stable identity base — use a consistent agent label, not the backend model. Always use the \`name\` returned by \`chat_join\`.
- **Targeted PTY delivery:** Delivery recipients are resolved from the \`to\` param plus any body @mentions. Use \`@all\` as an explicit broadcast token. LLM messages with no recipients in either \`to\` or body @mentions are persisted in history but not PTY-delivered to any agent terminal.
- **Rules of Engagement:** On \`chat_join\`, you receive a \`rules\` field (markdown) defining when to respond vs. stay silent. **Follow these rules exactly.** Default: reply if @mentioned, or on a global user request only after your claim has been explicitly confirmed by the other active LLM participants. Do not let multiple LLMs answer the same global request uncoordinated. Rules can be customized per project.
- **\`submitKey\`:** Use \`"cr"\` (default) for all known clients including Claude Code and Codex. The submit key is sent after a short delay to avoid paste-burst detection in TUI frameworks. Only use \`"lf"\` if you have verified a specific client requires it.
- **Pane collision:** If your \`paneId\` collides with another participant, the **existing session is preserved** and the newcomer receives a 409 error with \`code: "PANE_ALREADY_BOUND"\`. The newcomer must use a different pane or wait for the existing participant to leave.
- **Pane linking:** A valid \`paneId\` is required to receive messages. Read \`DEVGLIDE_PANE_ID\` from your shell session and pass it explicitly to \`chat_join\` every time. The pane must also be live and routable by the shell backend or \`chat_join\` will fail. If the env var is unavailable, chat cannot be used from that session. If your pane closes, you are removed from chat.
- **Session unification:** REST and MCP joins share the same session state. A REST join with an \`mcp-session-id\` header automatically binds to the MCP session. MCP tools (\`chat_send\`, \`pipe_submit\`, \`chat_leave\`) can also adopt a REST-joined participant by passing \`paneId\`.
- **Limitations:** You cannot message yourself; participants are in-memory (rejoin after server restart); only same-project participants see each other.
- **REST API** (base: \`/api/chat\`):
- Join: \`POST /join\` body \`{ name, model?, paneId, submitKey? }\`
- Leave: \`POST /leave\` body \`{ name }\`
- Send: \`POST /send\` body \`{ from, message, to? }\`
- Members: \`GET /members\`
- Messages: \`GET /messages?limit=&since=\`
- Status: \`GET /status\` · \`GET /status?name=\` · \`GET /status?paneId=\`
- Pipes: \`POST /pipes/:id/submit\` body \`{ from, content }\` · \`POST /pipes/:id/cancel\` (no body; cancels by pipe ID within active project)
- Invite: \`POST /invite\` body \`{ cli, mode?, cols?, rows? }\`
- Panes: \`GET /panes\`
- Rules: \`GET /rules\` | \`PUT /rules\` body \`{ rules }\` | \`DELETE /rules\`
- Clear: \`DELETE /messages\`

### devglide-log — Structured logging
- \`log_write\` — write a structured log entry
- \`log_read\` — read log entries
- \`log_clear\`, \`log_clear_all\` — clear logs

### devglide-documentation — Operational guidance for DevGlide tools
Provides tool guides, workflows, examples, troubleshooting, and project overrides.
Helps LLMs correctly use devglide-test + devglide-log for UI verification.
- \`docs_list\` — browse available documentation (filter by type, tool name, tag)
- \`docs_match\` — search documentation by keyword query (ranked results)
- \`docs_get_tool_guide\` — get the full operational guide for a tool
- \`docs_get_workflow\` — get a step-by-step workflow by name
- \`docs_get_troubleshooting\` — find troubleshooting by tool + symptom
- \`docs_context\` — get compiled markdown for a task query (best for context injection)
- \`docs_add\`, \`docs_update\`, \`docs_remove\` — manage documentation entries
- **When to use:** Before using devglide-test for verification, call \`docs_context\` with your task.
When a tool run fails with a known symptom, call \`docs_get_troubleshooting\` or \`docs_match\`.

## Common Patterns

### Creating a feature
Expand Down
22 changes: 22 additions & 0 deletions bin/codex-config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* Remove all DevGlide MCP sections from Codex TOML content.
* This includes the current devglide-* registrations and the legacy bare
* [mcp_servers.devglide] HTTP entry.
*/
export function removeDevglideSectionsFromToml(toml) {
const lines = toml.split('\n');
const result = [];
let skipping = false;

for (const line of lines) {
if (/^\[/.test(line)) {
skipping = /^\[mcp_servers\.devglide(?:\]|[.-])/.test(line);
}

if (!skipping) {
result.push(line);
}
}

return result.join('\n').replace(/\n{3,}/g, '\n\n').replace(/\n+$/, '\n');
}
51 changes: 51 additions & 0 deletions bin/codex-config.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { describe, expect, it } from "vitest";

import { removeDevglideSectionsFromToml } from "./codex-config.js";

describe("removeDevglideSectionsFromToml", () => {
it("removes the legacy bare devglide HTTP section", () => {
const toml = [
'[windows]',
'sandbox = "unelevated"',
'',
'[mcp_servers.devglide]',
'url = "http://localhost:7000/mcp"',
'',
'[mcp_servers.other]',
'url = "http://example.com/mcp"',
'',
].join('\n');

expect(removeDevglideSectionsFromToml(toml)).toBe([
'[windows]',
'sandbox = "unelevated"',
'',
'[mcp_servers.other]',
'url = "http://example.com/mcp"',
'',
].join('\n'));
});

it("removes devglide server sections together with nested tool overrides", () => {
const toml = [
'[mcp_servers.devglide-shell]',
'command = "node"',
'',
'[mcp_servers.devglide-shell.tools.shell_run_command]',
'approval_mode = "approve"',
'',
'[mcp_servers.devglide-chat]',
'command = "node"',
'',
'[mcp_servers.keep]',
'command = "node"',
'',
].join('\n');

expect(removeDevglideSectionsFromToml(toml)).toBe([
'[mcp_servers.keep]',
'command = "node"',
'',
].join('\n'));
});
});
Loading
Loading