← Back to Kontasks
gvShell Architecture Diagram (Simplified)
Simplified Mermaid diagram with 4 subgraphs for reliable rendering
Output
gvShell Architecture
github.com/greatvibe/gvshell • Go 1.23 • 647 tests • 93 files
Loading diagram...
Layer Details
Shell Layer
| main.go | Entry, init, graceful shutdown |
| repl/engine | Input loop, routing, $ref expansion |
| readline | History, tab completion |
| commands/* | /help /models /session /context |
AI Providers
| registry | @prefix routing, aliases |
| claude | Anthropic API + CLI subprocess |
| openai | GPT-4/O1/O3 API + Codex CLI |
| gemini | Google AI API |
| ollama | Local LLM server |
Infrastructure
| hub/client | WebSocket, streaming, work queue |
| auth | OAuth device flow, token mgmt |
| config | YAML + env overrides |
| system | Hub-proxied ops, secrets |
Data Layer
| session/store | SQLite CRUD, 45 tests |
| journal | JSONL append-only, 17 event types |
| response | $1 $claude refs, .code subfields |
| context | Auto-context, file watching |
Package Statistics
| Package | Tests | Key Files |
|---|---|---|
| repl | 12 | engine.go, engine_test.go |
| providers | 142 | registry, claude, openai, gemini, ollama |
| commands | 262 | help, models, session, context, project |
| hub | 43 | client, protocol, streaming, workqueue |
| auth | 32 | device_flow, token_manager, token_store |
| core/session | 45 | store.go, session.go, schema.sql |
| core/journal | 27 | writer.go, reader.go, events.go |
| response | 63 | store, subfield, history |
Build Progress
66%
33 of 50 steps complete
Phase 8 Complete
Next: Phase 9 Remote Execution
What's Next?
Choose an action:
Quick Actions
Original Request
No layout configured
Details
Type
General
Status
Completed
Scope
vibetools
Tags
gvshellarchitecturego
Created
7 Jan 2026, 11:21 pm
Updated
7 Jan 2026, 11:21 pm
Timing
⏱️ 95.7s
0 tools
● TTFE 0%
● Thinking 100%
● Tools 0%
Created By
claude
Raw Data
{
"id": "144018dd-eaa7-4a4b-a7e0-327ff182e52a",
"type": "general",
"status": "completed",
"title": "gvShell Architecture Diagram (Simplified)",
"description": "Simplified Mermaid diagram with 4 subgraphs for reliable rendering",
"context": {
"output": "<div style=\"background:#1e1e1e;color:#e0e0e0;padding:20px;border-radius:8px;font-family:system-ui,-apple-system,sans-serif;\">\n<h2 style=\"color:#fff;margin:0 0 8px 0;\">gvShell Architecture</h2>\n<p style=\"color:#7f848e;margin:0 0 20px 0;\">github.com/greatvibe/gvshell • Go 1.23 • 647 tests • 93 files</p>\n\n<div id=\"arch-diagram\" style=\"background:#2d2d2d;padding:16px;border-radius:8px;margin-bottom:20px;min-height:300px;\">\n<div style=\"color:#888;\">Loading diagram...</div>\n</div>\n<script>\n(function() {\n const definition = `%%{init: {'theme': 'dark'}}%%\nflowchart TB\n subgraph Shell[\"Shell Layer\"]\n MAIN[main.go]\n REPL[repl/engine]\n RL[readline]\n end\n\n subgraph AI[\"AI Providers\"]\n REG[registry]\n CLAUDE[claude]\n OPENAI[openai]\n GEMINI[gemini]\n OLLAMA[ollama]\n end\n\n subgraph Infra[\"Infrastructure\"]\n HUB[hub/client]\n AUTH[auth/tokens]\n CFG[config]\n end\n\n subgraph Data[\"Data Layer\"]\n SESS[session/store]\n JOUR[journal]\n RESP[response]\n end\n\n MAIN --> REPL\n REPL --> RL\n REPL --> REG\n REPL --> RESP\n REPL --> HUB\n\n REG --> CLAUDE\n REG --> OPENAI\n REG --> GEMINI\n REG --> OLLAMA\n\n HUB --> AUTH\n AUTH --> CFG\n\n RESP --> SESS\n SESS --> JOUR\n\n style Shell fill:#3b82f6,stroke:#2563eb,color:#fff\n style AI fill:#8b5cf6,stroke:#7c3aed,color:#fff\n style Infra fill:#ec4899,stroke:#db2777,color:#fff\n style Data fill:#06b6d4,stroke:#0891b2,color:#fff`;\n window.renderMermaidDiagram('arch-diagram', definition);\n})();\n</script>\n\n<h3 style=\"color:#fff;margin:20px 0 12px 0;\">Layer Details</h3>\n\n<div style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:20px;\">\n\n<div style=\"background:#3b82f6;padding:16px;border-radius:6px;\">\n<h4 style=\"color:#fff;margin:0 0 8px 0;\">Shell Layer</h4>\n<table style=\"width:100%;font-size:0.85rem;\">\n<tr><td style=\"color:#bfdbfe;padding:2px 0;\">main.go</td><td style=\"color:#dbeafe;\">Entry, init, graceful shutdown</td></tr>\n<tr><td style=\"color:#bfdbfe;padding:2px 0;\">repl/engine</td><td style=\"color:#dbeafe;\">Input loop, routing, $ref expansion</td></tr>\n<tr><td style=\"color:#bfdbfe;padding:2px 0;\">readline</td><td style=\"color:#dbeafe;\">History, tab completion</td></tr>\n<tr><td style=\"color:#bfdbfe;padding:2px 0;\">commands/*</td><td style=\"color:#dbeafe;\">/help /models /session /context</td></tr>\n</table>\n</div>\n\n<div style=\"background:#8b5cf6;padding:16px;border-radius:6px;\">\n<h4 style=\"color:#fff;margin:0 0 8px 0;\">AI Providers</h4>\n<table style=\"width:100%;font-size:0.85rem;\">\n<tr><td style=\"color:#ddd6fe;padding:2px 0;\">registry</td><td style=\"color:#ede9fe;\">@prefix routing, aliases</td></tr>\n<tr><td style=\"color:#ddd6fe;padding:2px 0;\">claude</td><td style=\"color:#ede9fe;\">Anthropic API + CLI subprocess</td></tr>\n<tr><td style=\"color:#ddd6fe;padding:2px 0;\">openai</td><td style=\"color:#ede9fe;\">GPT-4/O1/O3 API + Codex CLI</td></tr>\n<tr><td style=\"color:#ddd6fe;padding:2px 0;\">gemini</td><td style=\"color:#ede9fe;\">Google AI API</td></tr>\n<tr><td style=\"color:#ddd6fe;padding:2px 0;\">ollama</td><td style=\"color:#ede9fe;\">Local LLM server</td></tr>\n</table>\n</div>\n\n<div style=\"background:#ec4899;padding:16px;border-radius:6px;\">\n<h4 style=\"color:#fff;margin:0 0 8px 0;\">Infrastructure</h4>\n<table style=\"width:100%;font-size:0.85rem;\">\n<tr><td style=\"color:#fbcfe8;padding:2px 0;\">hub/client</td><td style=\"color:#fce7f3;\">WebSocket, streaming, work queue</td></tr>\n<tr><td style=\"color:#fbcfe8;padding:2px 0;\">auth</td><td style=\"color:#fce7f3;\">OAuth device flow, token mgmt</td></tr>\n<tr><td style=\"color:#fbcfe8;padding:2px 0;\">config</td><td style=\"color:#fce7f3;\">YAML + env overrides</td></tr>\n<tr><td style=\"color:#fbcfe8;padding:2px 0;\">system</td><td style=\"color:#fce7f3;\">Hub-proxied ops, secrets</td></tr>\n</table>\n</div>\n\n<div style=\"background:#06b6d4;padding:16px;border-radius:6px;\">\n<h4 style=\"color:#000;margin:0 0 8px 0;\">Data Layer</h4>\n<table style=\"width:100%;font-size:0.85rem;\">\n<tr><td style=\"color:#155e75;padding:2px 0;\">session/store</td><td style=\"color:#164e63;\">SQLite CRUD, 45 tests</td></tr>\n<tr><td style=\"color:#155e75;padding:2px 0;\">journal</td><td style=\"color:#164e63;\">JSONL append-only, 17 event types</td></tr>\n<tr><td style=\"color:#155e75;padding:2px 0;\">response</td><td style=\"color:#164e63;\">$1 $claude refs, .code subfields</td></tr>\n<tr><td style=\"color:#155e75;padding:2px 0;\">context</td><td style=\"color:#164e63;\">Auto-context, file watching</td></tr>\n</table>\n</div>\n\n</div>\n\n<h3 style=\"color:#fff;margin:20px 0 12px 0;\">Package Statistics</h3>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<table style=\"width:100%;font-size:0.9rem;border-collapse:collapse;\">\n<tr style=\"border-bottom:1px solid #4b5563;\">\n<th style=\"text-align:left;padding:8px;color:#9ca3af;\">Package</th>\n<th style=\"text-align:right;padding:8px;color:#9ca3af;\">Tests</th>\n<th style=\"text-align:left;padding:8px;color:#9ca3af;\">Key Files</th>\n</tr>\n<tr style=\"border-bottom:1px solid #3b3b3b;\">\n<td style=\"padding:8px;color:#3b82f6;\">repl</td>\n<td style=\"padding:8px;text-align:right;color:#22c55e;\">12</td>\n<td style=\"padding:8px;color:#7f848e;\">engine.go, engine_test.go</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3b3b3b;\">\n<td style=\"padding:8px;color:#8b5cf6;\">providers</td>\n<td style=\"padding:8px;text-align:right;color:#22c55e;\">142</td>\n<td style=\"padding:8px;color:#7f848e;\">registry, claude, openai, gemini, ollama</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3b3b3b;\">\n<td style=\"padding:8px;color:#f59e0b;\">commands</td>\n<td style=\"padding:8px;text-align:right;color:#22c55e;\">262</td>\n<td style=\"padding:8px;color:#7f848e;\">help, models, session, context, project</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3b3b3b;\">\n<td style=\"padding:8px;color:#ec4899;\">hub</td>\n<td style=\"padding:8px;text-align:right;color:#22c55e;\">43</td>\n<td style=\"padding:8px;color:#7f848e;\">client, protocol, streaming, workqueue</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3b3b3b;\">\n<td style=\"padding:8px;color:#ef4444;\">auth</td>\n<td style=\"padding:8px;text-align:right;color:#22c55e;\">32</td>\n<td style=\"padding:8px;color:#7f848e;\">device_flow, token_manager, token_store</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3b3b3b;\">\n<td style=\"padding:8px;color:#06b6d4;\">core/session</td>\n<td style=\"padding:8px;text-align:right;color:#22c55e;\">45</td>\n<td style=\"padding:8px;color:#7f848e;\">store.go, session.go, schema.sql</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3b3b3b;\">\n<td style=\"padding:8px;color:#06b6d4;\">core/journal</td>\n<td style=\"padding:8px;text-align:right;color:#22c55e;\">27</td>\n<td style=\"padding:8px;color:#7f848e;\">writer.go, reader.go, events.go</td>\n</tr>\n<tr>\n<td style=\"padding:8px;color:#a855f7;\">response</td>\n<td style=\"padding:8px;text-align:right;color:#22c55e;\">63</td>\n<td style=\"padding:8px;color:#7f848e;\">store, subfield, history</td>\n</tr>\n</table>\n</div>\n\n<div style=\"background:#1e3a5f;padding:16px;border-radius:6px;border:1px solid #3b82f6;\">\n<h4 style=\"color:#fff;margin:0 0 8px 0;\">Build Progress</h4>\n<div style=\"display:flex;justify-content:space-between;align-items:center;\">\n<div>\n<span style=\"color:#22c55e;font-size:2rem;font-weight:bold;\">66%</span>\n<span style=\"color:#7f848e;margin-left:8px;\">33 of 50 steps complete</span>\n</div>\n<div style=\"text-align:right;\">\n<div style=\"color:#f59e0b;\">Phase 8 Complete</div>\n<div style=\"color:#7f848e;font-size:0.85rem;\">Next: Phase 9 Remote Execution</div>\n</div>\n</div>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-top:16px;\">\n<h4 style=\"margin:0 0 8px 0;color:#fff;\">What's Next?</h4>\n<p style=\"color:#9ca3af;margin:0;\">Choose an action:</p>\n</div>\n</div>",
"choices": [
{
"label": "Hub Protocol",
"value": "Show me the hub WebSocket protocol message types and payloads in detail",
"primary": true
},
{
"label": "Provider Interface",
"value": "Show me the Provider interface and how multi-provider routing works"
},
{
"label": "Phase 9 Plan",
"value": "What does Phase 9 Remote Execution look like?"
}
],
"requestedAt": "2026-01-07T07:45:00Z",
"requestId": "fc4d100d-8671-4e04-ae86-fca126531d16",
"turnTiming": {
"totalMs": 95700,
"ttfeMs": 55,
"thinkingMs": 95645,
"toolExecutionMs": 0,
"toolCallCount": 0,
"thinkingPct": 100,
"toolsPct": 0,
"ttfePct": 0
}
},
"createdBy": "claude",
"createdAt": "2026-01-07T13:21:07.613Z",
"updatedAt": "2026-01-07T13:21:58.624Z",
"requestId": "fc4d100d-8671-4e04-ae86-fca126531d16",
"scope": "vibetools",
"tags": [
"gvshell",
"architecture",
"go"
],
"targetUser": "claude"
}