vibeostheog 0.24.32 → 0.25.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -18
- package/README.md +128 -149
- package/dist/assets/dashboard/index.html +14 -2
- package/dist/vibeOS.js +1122 -667
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,21 +1,26 @@
|
|
|
1
|
-
## 0.
|
|
2
|
-
-
|
|
3
|
-
-
|
|
4
|
-
-
|
|
5
|
-
- test: add
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Merge pull request #
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
Merge
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
## 0.25.2
|
|
2
|
+
- fix: keep the dashboard MCP server alive
|
|
3
|
+
- docs: README rewrite for Innocence v0.25.0 (UX + ML narrative)
|
|
4
|
+
- test: cover INIT footer icon in e2e
|
|
5
|
+
- test: production-proof regression suite — cleanup 37 dead files, add 11 real-world tests
|
|
6
|
+
Merge pull request #170 from DrunkkToys/codex/dashboard-watchdog
|
|
7
|
+
Fix dashboard local connectivity
|
|
8
|
+
Surface backend version in client status
|
|
9
|
+
Merge pull request #169 from DrunkkToys/codex/clean-production-claim
|
|
10
|
+
Add main-suite cascade regression
|
|
11
|
+
Use experiment router for qmax and ultrax
|
|
12
|
+
Split branded mode roots
|
|
13
|
+
Add production claim verification guard
|
|
14
|
+
Revert "Merge pull request #168 from DrunkkToys/codex/init-footer-icon-regression"
|
|
15
|
+
Merge pull request #168 from DrunkkToys/codex/init-footer-icon-regression
|
|
16
|
+
Refine footer cost storytelling
|
|
17
|
+
Add production claim verification guard
|
|
18
|
+
Strengthen cascade pipeline integration coverage (#167)
|
|
19
|
+
Strengthen cascade pipeline integration coverage
|
|
20
|
+
Merge pull request #166 from DrunkkToys/codex/init-footer-icon-regression
|
|
21
|
+
Clarify vibeqmax mode analysis
|
|
22
|
+
Merge pull request #165 from DrunkkToys/codex/init-footer-icon-regression
|
|
23
|
+
Merge remote-tracking branch 'origin/master' into codex/init-footer-icon-regression
|
|
19
24
|
|
|
20
25
|
|
|
21
26
|
## 0.24.31
|
package/README.md
CHANGED
|
@@ -1,18 +1,65 @@
|
|
|
1
|
-
# vibeOS for OpenCode
|
|
1
|
+
# vibeOS for OpenCode — Innocence v0.25.0
|
|
2
2
|
|
|
3
3
|
Cost-aware control plane for OpenCode Desktop.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
> Compact footer format: `🦠 brain | Deepseek | V4 Pro | $12.57 | VibeMaX ⚡ Budget`
|
|
7
|
-
> VibeMaX is now the default optimization mode. Model display names cleaned up (V4 Pro, Sonnet, 2.5 Flash).
|
|
8
|
-
> Install: `npx vibeostheog setup --project` or `npx vibeostheog setup`
|
|
9
|
-
> Keeps expensive models on strategy, routes implementation to cheaper tiers, surfaces savings in real time.
|
|
5
|
+
OpenCode Desktop gives you access to the most capable language models ever created — Opus, Sonnet, DeepSeek v4 Pro — but running them on every single turn adds up fast. Most users do not think about token costs until the bill arrives, and by then the damage is done. You should not have to choose between using the best model and staying within budget. That choice is a distraction from the work that matters.
|
|
10
6
|
|
|
11
|
-
|
|
7
|
+
Innocence is about removing that cognitive overhead entirely. vibeOS handles the economics behind the scenes — routing, cascading, deferring, and optimizing every turn so you never have to think about cost again. You code with innocence. The plugin earns its keep silently.
|
|
12
8
|
|
|
13
|
-
##
|
|
9
|
+
## How It Feels
|
|
14
10
|
|
|
15
|
-
|
|
11
|
+
The first thing you notice is the footer. A single line at the bottom of every assistant response, barely visible, shows you what model handled the turn and how much you have saved this session. It is not a warning. It is not a nag. It is reassurance.
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
- brain | Deepseek | V4 Pro | $12.57 | VibeMaX Budget
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
When you write code, the system routes implementation work to cheaper tiers automatically if the brain is reserved for strategy. You never see a block screen. You never get a cost warning interrupting your flow. The enforcement happens transparently — the work gets done, just on the right tier.
|
|
18
|
+
|
|
19
|
+
The VibeBoX decision engine watches how you work. Are you exploring a new codebase? It keeps the cheap model active and stays out of your way. Are you converging on a solution? It quietly upgrades to full quality mode with strict enforcement. Are you stuck in a loop fixing the same test? It detects the frustration pattern and escalates before you ask. You never configure any of this. It just adapts.
|
|
20
|
+
|
|
21
|
+
The stress detector reads your messages for signs of frustration — repeated failures, urgency, abrupt tone. When it senses stress above a threshold, it upgrades your model tier automatically. You get the best possible assistance while you are in the weeds, and you never had to ask.
|
|
22
|
+
|
|
23
|
+
You forget vibeOS is even running. That is the point.
|
|
24
|
+
|
|
25
|
+
## The ML Engine
|
|
26
|
+
|
|
27
|
+
vibeOS is not a collection of static rules. It is a learning system that patterns your work style and adapts the control plane in real time.
|
|
28
|
+
|
|
29
|
+
### VibeUltraX Cascade
|
|
30
|
+
|
|
31
|
+
The flagship routing strategy. Every turn passes through a three-stage cascade:
|
|
32
|
+
|
|
33
|
+
1. **Local proposal** — MagicCoder:7b (Ollama) generates an initial response at zero cost.
|
|
34
|
+
2. **Flash review** — DeepSeek v4 Flash critiques and refines the proposal.
|
|
35
|
+
3. **Pro polish** — DeepSeek v4 Pro applies final quality pass on complex sections.
|
|
36
|
+
|
|
37
|
+
Benchmarked at **107% of raw brain quality at 58% of cost**. Local inference is free; only the Flash and Pro stages incur API costs. This is the first routing strategy that Pareto-dominates the raw brain baseline — better quality, lower cost.
|
|
38
|
+
|
|
39
|
+
### VibeBoX Decision Engine
|
|
40
|
+
|
|
41
|
+
At the core of vibeOS is a real-time decision engine that classifies every user turn into one of seven sub-regimes:
|
|
42
|
+
|
|
43
|
+
- **INIT / DIVERGENT / EXPLORING** — You are learning the codebase, asking questions, browsing. cheap model, relaxed enforcement. Stay out of your way.
|
|
44
|
+
- **REFINING** — You are iterating on a solution. Default mode: VibeMaX, auto-escalate on complexity.
|
|
45
|
+
- **CONVERGING / CLOSED** — You are finalizing. Full quality mode, brain tier, strict enforcement and flow checks.
|
|
46
|
+
- **LOOPING** — You are stuck. Speed mode, medium tier, cycle-breaking interventions.
|
|
47
|
+
|
|
48
|
+
Classification uses 11 derived features per turn: message length, code block density, question ratio, urgency signals, sentiment, complexity estimate, repetition, instruction density, and more. Four escalating intervention levels prevent infinite loops. PIVOT/SWITCH detection recognizes context changes and injects scope-confirmation directives.
|
|
49
|
+
|
|
50
|
+
When the VibeBoX is disabled, a lightweight `classifyTurnSimple` fallback distinguishes Q&A from implementation intent using regex patterns.
|
|
51
|
+
|
|
52
|
+
### Stress-Aware Routing
|
|
53
|
+
|
|
54
|
+
A real-time stress scoring pipeline analyzes user messages for frustration signals. When stress exceeds 1.5 (on a 0–3 scale), any regime is escalated to quality mode. The stress gauge renders in the footer as a subtle indicator. Inoculation directives are injected into system prompts to adjust the assistant's tone — slower, more structured, more thorough.
|
|
55
|
+
|
|
56
|
+
### Pattern Learner
|
|
57
|
+
|
|
58
|
+
Per-project friction and routine tracking. The pattern learner observes which tools you use, what errors recur, and where you spend most of your time. Over time, it surfaces optimization suggestions and learns struggle/tech co-occurrence mappings. Cross-project patterns are stored in `global-learning.json` and inform pricing hints and routing hints.
|
|
59
|
+
|
|
60
|
+
## The Numbers
|
|
61
|
+
|
|
62
|
+
The savings are real and measurable. Every write/edit on the brain tier is intercepted, cost-estimated, and routed to a cheaper tier. A single blocked brain-tier write saves at least $0.026 over Opus-to-Sonnet delegation.
|
|
16
63
|
|
|
17
64
|
### Savings per Delegation
|
|
18
65
|
|
|
@@ -22,26 +69,22 @@ Every `write`/`edit`/`notebookedit` on the **brain tier** is intercepted, cost-e
|
|
|
22
69
|
| Opus -> Sonnet | $0.0264 | $0.26 | $2.64 | $26.40 |
|
|
23
70
|
| Sonnet -> Haiku | $0.0044 | $0.04 | $0.44 | $4.40 |
|
|
24
71
|
|
|
25
|
-
|
|
72
|
+
The running total is persisted in `~/.claude/delegation-state.json` and displayed in the live footer. Cache savings are tracked separately under `cache_savings_usd`.
|
|
26
73
|
|
|
27
|
-
|
|
74
|
+
### Model Tiers
|
|
28
75
|
|
|
29
76
|
Benchmarked on the DeepSeek v4 family. Prices based on 700 input + 300 output tokens per turn.
|
|
30
77
|
|
|
31
|
-
> DeepSeek Chat costs $0/turn when routed through the Direct DeepSeek provider (no OpenRouter markup).
|
|
32
|
-
|
|
33
78
|
| Slot | Model | API ID | Per Turn | Per 1K Turns | Tier |
|
|
34
79
|
|------|-------|--------|----------|--------------|------|
|
|
35
80
|
| brain | v4 Pro | `deepseek/deepseek-v4-pro` | $0.00057 | $0.58 | high |
|
|
36
81
|
| medium | v4 Flash | `deepseek/deepseek-v4-flash` | $0.000182 | $0.18 | mid |
|
|
37
82
|
| cheap | DeepSeek Chat | `deepseek/deepseek-chat` | $0.00 | $0.00 | budget |
|
|
38
|
-
| cheap (local) | MagicCoder:7b | `
|
|
39
|
-
|
|
40
|
-
*Source: `src/lib/pricing.ts`. Conservative estimates — savings are always understated.*
|
|
83
|
+
| cheap (local) | MagicCoder:7b | `magiccoder:7b` (Ollama) | $0.00 | $0.00 | budget |
|
|
41
84
|
|
|
42
|
-
|
|
85
|
+
DeepSeek Chat costs $0/turn when routed through the Direct DeepSeek provider (no OpenRouter markup).
|
|
43
86
|
|
|
44
|
-
###
|
|
87
|
+
### Optimization Modes
|
|
45
88
|
|
|
46
89
|
| Policy | Quality vs Brain | Cost vs Brain | Savings | Method |
|
|
47
90
|
|--------|-----------------|--------------|---------|--------|
|
|
@@ -51,32 +94,15 @@ Benchmarked on the DeepSeek v4 family. Prices based on 700 input + 300 output to
|
|
|
51
94
|
| VibeMaX | ~75% | 0.18x | 82% | trained cascade (conservative escalate) |
|
|
52
95
|
| Budget | ~40% | 0.00x | 100% | direct routing |
|
|
53
96
|
|
|
54
|
-
**VibeUltraX** —
|
|
55
|
-
|
|
56
|
-
**VibeQMaX (Quality Max)** — Routes strategic turns through v4 Pro with full thinking, strict enforcement, strict flow checks, and quality TDD. Write/edit turns delegated to cheaper tiers per enforcement rules. Effective blended cost ~$0.00029/turn (50% of Raw Brain).
|
|
97
|
+
**VibeUltraX** — Local Ollama proposes, v4 Flash reviews, v4 Pro refines. 107% quality at 58% cost.
|
|
57
98
|
|
|
58
|
-
**
|
|
99
|
+
**VibeQMaX** — Routes strategic turns through v4 Pro with full thinking, strict enforcement, strict flow checks, and quality TDD. Write/edit delegated per enforcement rules. Blended cost ~$0.00029/turn (50% of brain baseline).
|
|
59
100
|
|
|
60
|
-
**VibeMaX
|
|
101
|
+
**VibeMaX** — ML-optimized default. Routes through v4 Flash with a random forest classifier (29 trees, gini-split, trained on telemetry) that decides each turn. ~75% quality at 18% cost.
|
|
61
102
|
|
|
62
|
-
**Budget** — DeepSeek Chat. Direct routing. ~40% quality at
|
|
103
|
+
**Budget** — DeepSeek Chat. Direct routing. ~40% quality at zero cost.
|
|
63
104
|
|
|
64
|
-
###
|
|
65
|
-
|
|
66
|
-
```
|
|
67
|
-
Quality
|
|
68
|
-
baseline . Raw Brain . VibeQMaX
|
|
69
|
-
107% | . VibeUltraX
|
|
70
|
-
~75% | . VibeMaX (default)
|
|
71
|
-
~55% | . Speed
|
|
72
|
-
~40% | . Budget
|
|
73
|
-
|
|
|
74
|
-
+--------------------------------
|
|
75
|
-
1.0x 0.50x 0.32x 0.18x 0.00x
|
|
76
|
-
Cost Multiplier
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### Configuration Per Mode
|
|
105
|
+
### Mode Configuration
|
|
80
106
|
|
|
81
107
|
| Mode | Model | Thinking | Enforcement | Flow | TDD |
|
|
82
108
|
|------|-------|----------|-------------|------|-----|
|
|
@@ -87,68 +113,40 @@ Quality
|
|
|
87
113
|
| Speed | v4 Flash | off | relaxed | audit | lazy |
|
|
88
114
|
| Budget | DeepSeek Chat | off | relaxed | audit | lazy |
|
|
89
115
|
|
|
90
|
-
###
|
|
116
|
+
### Auto-Mode Behavior
|
|
91
117
|
|
|
92
|
-
|
|
118
|
+
When auto-mode is active, the VibeBoX control vector is the authority. `syncControlSettings()` writes enforcement, flow, TDD, and thinking mode to `model-tiers.json` every turn:
|
|
93
119
|
|
|
94
|
-
|
|
120
|
+
| Regime | Mode | Enforce | Flow | TDD | Tier | Think |
|
|
121
|
+
|--------|------|---------|------|-----|------|-------|
|
|
122
|
+
| INIT / DIVERGENT / EXPLORING / REFINING | VibeMaX | relaxed | audit | lazy | cheap | off |
|
|
123
|
+
| CONVERGING / CLOSED | quality | strict | strict | quality | brain | full |
|
|
124
|
+
| LOOPING | speed | relaxed | audit | lazy | medium | off |
|
|
95
125
|
|
|
96
|
-
|
|
126
|
+
Stress > 1.5 escalates any regime to quality mode regardless of the above mapping.
|
|
127
|
+
|
|
128
|
+
## What You Get
|
|
97
129
|
|
|
98
130
|
| Feature | What it does |
|
|
99
131
|
|---------|-------------|
|
|
100
|
-
|
|
|
101
|
-
|
|
|
102
|
-
|
|
|
103
|
-
|
|
|
104
|
-
|
|
|
105
|
-
|
|
|
106
|
-
|
|
|
107
|
-
|
|
|
108
|
-
|
|
|
109
|
-
|
|
|
110
|
-
|
|
|
111
|
-
|
|
|
112
|
-
|
|
|
113
|
-
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
| Hook | Purpose |
|
|
120
|
-
|------|---------|
|
|
121
|
-
| `experimental.text.complete` | Appends footer to assistant responses |
|
|
122
|
-
| `experimental.chat.messages.transform` | Injects delegation protocol content |
|
|
123
|
-
| `experimental.chat.system.transform` | Injects cost optimization, stress inoculation, enforcement directives |
|
|
124
|
-
| `tool.execute.before` | Blocks write/edit on brain tier |
|
|
125
|
-
| `tool.execute.after` | Injects delegation UI notes |
|
|
126
|
-
| `message.updated` | Fallback footer for versions without text.complete |
|
|
127
|
-
| `experimental.session.compacting` | Preserves savings state |
|
|
128
|
-
| `shell.env` | Injects OPENCODE_MODEL_TIER and OPENCODE_MODEL |
|
|
129
|
-
|
|
130
|
-
## Local Models (Ollama)
|
|
131
|
-
|
|
132
|
-
To use **MagicCoder:7b** or other local models with vibeOS and OpenCode Desktop:
|
|
133
|
-
|
|
134
|
-
### Setup
|
|
135
|
-
|
|
136
|
-
1. Install Ollama — `curl -fsSL https://ollama.ai/install.sh | sh`
|
|
137
|
-
2. Pull MagicCoder — `ollama pull magicoder:7b`
|
|
138
|
-
3. Add provider — In OpenCode settings, add an Ollama provider (default: http://localhost:11434)
|
|
139
|
-
4. Detect — Run `trinity rebuild` — MagicCoder:7b appears in the model dropdown
|
|
140
|
-
5. Assign slot — `trinity set cheap magicoder:7b`
|
|
141
|
-
|
|
142
|
-
### Minimum Hardware
|
|
143
|
-
|
|
144
|
-
| Component | Minimum |
|
|
145
|
-
|-----------|---------|
|
|
146
|
-
| CPU | Apple Silicon (M1+) or x86_64 with AVX2 |
|
|
147
|
-
| RAM | **16 GB** (MagicCoder:7b @ Q4_K_M uses ~5 GB + context overhead) |
|
|
148
|
-
| GPU | Integrated (M1 16GB unified memory) or NVIDIA 6GB+ VRAM |
|
|
149
|
-
| Storage | 4 GB free for model weights |
|
|
150
|
-
|
|
151
|
-
> **Note**: Local models run entirely on your machine. vibeOS treats them as any other OpenCode provider — pricing shows $0.00/turn.
|
|
132
|
+
| Delegation enforcement | Blocks write/edit on brain tier, routes to cheaper tiers transparently |
|
|
133
|
+
| Live savings footer | Tier, provider, model name, total savings, mode — one line of reassurance |
|
|
134
|
+
| Web dashboard | SolidJS SPA with SSE real-time push for model split, savings, session history, controls |
|
|
135
|
+
| Trinity runtime | Switch tiers mid-session, change optimization mode, toggle subsystems live |
|
|
136
|
+
| Flow enforcer | Pattern-rule checks on write/edit. Extracts TODO/FIXME into append-only queue. |
|
|
137
|
+
| TDD enforcer | Auto-creates test skeletons for changed source. Strict mode fails TODO tests. |
|
|
138
|
+
| Pattern learner | Tracks recurring struggle/routine patterns per project, cross-project too |
|
|
139
|
+
| VibeBoX | 7 sub-regimes, 11 features per turn, loop intervention, PIVOT/SWITCH detection |
|
|
140
|
+
| Stress-aware routing | Real-time stress scoring, auto-escalation, system prompt inoculation |
|
|
141
|
+
| Cache savings | Separate cache_savings_usd tracking for scratchpad cache hits |
|
|
142
|
+
| Report tools | report-save, report-list, report-read, research-audit |
|
|
143
|
+
| MCP server | Extended tool capabilities + dashboard serving + SSE push endpoint |
|
|
144
|
+
| Remote API | Fastify server at api.vibetheog.com with token auth and seat management |
|
|
145
|
+
| Session lock | trinity lock on|off — freezes model at session start |
|
|
146
|
+
| Model locking | Per-session lock that skips auto-reconcile with OpenCode config changes |
|
|
147
|
+
| Blackbox decision engine | Dialogue trajectory tracking, loop prevention, outcome calibration |
|
|
148
|
+
| TensorTAG routing | WBP protocol synthesizes delegated task output in assistant chat |
|
|
149
|
+
| Pattern learner runtime | trinity patterns and trinity patterns clear |
|
|
152
150
|
|
|
153
151
|
## Install
|
|
154
152
|
|
|
@@ -158,7 +156,7 @@ npx vibeostheog setup # global ~/.config/opencode/
|
|
|
158
156
|
npx vibeostheog setup --help # full usage
|
|
159
157
|
```
|
|
160
158
|
|
|
161
|
-
One
|
|
159
|
+
One command. Deploys plugin files and registers in opencode.json. Restart OpenCode Desktop.
|
|
162
160
|
|
|
163
161
|
Local dev checkout:
|
|
164
162
|
|
|
@@ -175,7 +173,7 @@ Local dev checkout:
|
|
|
175
173
|
| Command | Effect |
|
|
176
174
|
|---------|--------|
|
|
177
175
|
| `trinity status` | Tier, enforcement, savings, stress, lock state |
|
|
178
|
-
| `trinity set brain\|medium\|cheap [model=<model_id>]` | Switch active model tier or override
|
|
176
|
+
| `trinity set brain\|medium\|cheap [model=<model_id>]` | Switch active model tier or override slot |
|
|
179
177
|
| `trinity brain\|medium\|cheap` | Shorthand tier switch |
|
|
180
178
|
| `trinity enable\|disable` | Toggle plugin on/off |
|
|
181
179
|
| `trinity mode budget\|quality\|speed\|longrun\|auto` | Set optimization mode |
|
|
@@ -197,68 +195,50 @@ Local dev checkout:
|
|
|
197
195
|
|
|
198
196
|
**Report commands**: report-save, report-list, report-read, research-audit
|
|
199
197
|
|
|
200
|
-
##
|
|
201
|
-
|
|
202
|
-
```
|
|
203
|
-
— 🦠 brain | Deepseek | V4 Pro | $12.57 | VibeMaX ⚡ Budget
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
Tier icon + lowercase quality (🦠 brain / ⚙ medium / ⚡ cheap), provider label, cleaned model name, total savings, VibeBrand + flash icon + mode. Persisted in ~/.claude/delegation-state.json.
|
|
198
|
+
## Under the Hood
|
|
207
199
|
|
|
208
|
-
|
|
200
|
+
### Architecture
|
|
209
201
|
|
|
210
|
-
|
|
202
|
+
vibeOS hooks into OpenCode Desktop through 8 extension points:
|
|
211
203
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
### State Files (~/.claude/)
|
|
215
|
-
|
|
216
|
-
| File | Purpose |
|
|
204
|
+
| Hook | Purpose |
|
|
217
205
|
|------|---------|
|
|
218
|
-
|
|
|
219
|
-
|
|
|
220
|
-
|
|
|
221
|
-
|
|
|
222
|
-
|
|
|
223
|
-
|
|
|
224
|
-
|
|
|
225
|
-
|
|
|
226
|
-
| blackbox-state.json | Per-project resolution tracker, session outcomes |
|
|
227
|
-
| .flow-todo-queue.jsonl | Flow enforcer TODO queue |
|
|
228
|
-
| .flow-dedup-keys.json | Deduplication set for flow TODO |
|
|
229
|
-
| .enforcement-cooldown.jsonl | Per-tool cooldown for warn coalescing |
|
|
230
|
-
|
|
231
|
-
### Local vs Remote
|
|
232
|
-
|
|
233
|
-
**Fully functional locally:** Model tier classification, static pricing, stress scoring, context budget, turn classification, TDD skeleton generation, flow enforcement, savings ledger, session metrics, reports, footer, dashboard, smart cache, VibeBoX fallback.
|
|
234
|
-
|
|
235
|
-
**Requires remote API (api-token):** Bootstrap token exchange, advanced VibeBoX with full session history, dynamic per-prompt delegation, cross-session calibration, live pricing fetch beyond static map, learned subagent routing.
|
|
236
|
-
|
|
237
|
-
When the remote API is unreachable, the plugin degrades gracefully to rule-based local algorithms. Core enforcement features continue working.
|
|
206
|
+
| `experimental.text.complete` | Appends footer to assistant responses |
|
|
207
|
+
| `experimental.chat.messages.transform` | Injects delegation protocol content |
|
|
208
|
+
| `experimental.chat.system.transform` | Injects cost optimization, stress inoculation, enforcement directives |
|
|
209
|
+
| `tool.execute.before` | Blocks write/edit on brain tier |
|
|
210
|
+
| `tool.execute.after` | Injects delegation UI notes |
|
|
211
|
+
| `message.updated` | Fallback footer for versions without text.complete |
|
|
212
|
+
| `experimental.session.compacting` | Preserves savings state |
|
|
213
|
+
| `shell.env` | Injects OPENCODE_MODEL_TIER and OPENCODE_MODEL |
|
|
238
214
|
|
|
239
|
-
###
|
|
215
|
+
### State Files (~/.claude/)
|
|
240
216
|
|
|
241
|
-
|
|
217
|
+
The plugin persists state to `~/.claude/` for cross-session continuity:
|
|
242
218
|
|
|
243
|
-
|
|
219
|
+
- **delegation-state.json** — Sessions, warns, cache hits, lifetime totals
|
|
220
|
+
- **model-tiers.json** — Brain/medium/cheap model IDs
|
|
221
|
+
- **project-states.json** — Per-project memory, analytics, report references
|
|
222
|
+
- **blackbox-state.json** — Per-project resolution tracker, session outcomes
|
|
223
|
+
- **savings-ledger.jsonl** — Append-only savings event log
|
|
224
|
+
- **global-learning.json** — Cross-project pattern learning
|
|
225
|
+
- **active-jobs.json** — In-flight delegation records
|
|
244
226
|
|
|
245
|
-
|
|
246
|
-
|--------|------|---------|------|-----|------|-------|
|
|
247
|
-
| INIT / DIVERGENT / EXPLORING / REFINING | vibemax (default) | relaxed | audit | lazy | cheap | off |
|
|
248
|
-
| CONVERGING / CLOSED | quality | strict | strict | quality | brain | full |
|
|
249
|
-
| LOOPING | speed | relaxed | audit | lazy | medium | off |
|
|
227
|
+
### Local vs Remote
|
|
250
228
|
|
|
251
|
-
|
|
229
|
+
Core features work fully offline: model tier classification, static pricing, stress scoring, context budget, VibeBoX fallback, TDD skeletons, flow enforcement, savings ledger, session metrics, reports, footer, dashboard.
|
|
252
230
|
|
|
253
|
-
|
|
231
|
+
Remote API (api.vibetheog.com) enables: bootstrap token exchange, advanced VibeBoX with full session history, dynamic per-prompt delegation, cross-session calibration, live pricing fetch, learned subagent routing. Falls back gracefully when unreachable.
|
|
254
232
|
|
|
255
|
-
|
|
233
|
+
### Live Footer
|
|
256
234
|
|
|
257
|
-
|
|
235
|
+
```
|
|
236
|
+
- brain | Deepseek | V4 Pro | $12.57 | VibeMaX Budget
|
|
237
|
+
```
|
|
258
238
|
|
|
259
|
-
|
|
239
|
+
Format: tier label, provider, short model name, total savings this session, VibeBrand + mode. Updates every turn. Persisted in `~/.claude/delegation-state.json`.
|
|
260
240
|
|
|
261
|
-
|
|
241
|
+
### Environment Variables
|
|
262
242
|
|
|
263
243
|
| Variable | Default | Effect |
|
|
264
244
|
|----------|---------|--------|
|
|
@@ -268,15 +248,14 @@ SolidJS SPA at `src/dashboard/`. Build: `npm run build:dashboard` (vite). Served
|
|
|
268
248
|
| VIBEOS_API_BOOTSTRAP_TOKEN | unset | Bootstrap exchange |
|
|
269
249
|
| VIBEOS_API_ENABLED | true | Set false for local-only |
|
|
270
250
|
| CLAUDE_CREDIT_PERCENT | 100 | Credit override |
|
|
271
|
-
| CLAUDE_CONTEXT7_AVAILABLE | unset | Context7 optimization |
|
|
272
251
|
| VIBEOS_MCP_PORT | 3001 | MCP server port |
|
|
273
252
|
|
|
274
|
-
|
|
253
|
+
### Troubleshooting
|
|
275
254
|
|
|
276
255
|
| Symptom | Fix |
|
|
277
256
|
|---------|-----|
|
|
278
257
|
| Plugin not loading | Check opencode.json entry. Restart Desktop. |
|
|
279
|
-
| Model won't switch | `trinity rebuild` then `trinity set brain
|
|
258
|
+
| Model won't switch | `trinity rebuild` then `trinity set brain\|medium\|cheap` |
|
|
280
259
|
| Writes/edits blocked | Enforcement active — delegate to cheap tier |
|
|
281
260
|
| No footer visible | Verify plugin enabled, completions running |
|
|
282
261
|
| Dashboard blank | `npm run build` then restart |
|
|
@@ -208,7 +208,17 @@ textarea{min-height:80px;resize:vertical}
|
|
|
208
208
|
<div class="last-update" id="lastUpdate"></div>
|
|
209
209
|
|
|
210
210
|
<script>
|
|
211
|
-
|
|
211
|
+
function resolveBase() {
|
|
212
|
+
const params = new URLSearchParams(location.search);
|
|
213
|
+
const paramBase = params.get('base');
|
|
214
|
+
if (paramBase) return paramBase.replace(/\/$/, '');
|
|
215
|
+
try {
|
|
216
|
+
const stored = localStorage.getItem('vibeos-dashboard-base');
|
|
217
|
+
if (stored) return stored.replace(/\/$/, '');
|
|
218
|
+
} catch (_) {}
|
|
219
|
+
return location.protocol === 'file:' ? 'http://127.0.0.1:3001' : '';
|
|
220
|
+
}
|
|
221
|
+
const BASE = resolveBase();
|
|
212
222
|
let lastStatus = null;
|
|
213
223
|
let lastSavings = null;
|
|
214
224
|
|
|
@@ -248,6 +258,7 @@ async function refreshAll() {
|
|
|
248
258
|
renderStatus(status);
|
|
249
259
|
renderSavings(savings);
|
|
250
260
|
renderModelInfo(status);
|
|
261
|
+
renderBackendInfo(status);
|
|
251
262
|
setConnection(status);
|
|
252
263
|
document.getElementById('lastUpdate').textContent = 'Last updated: ' + new Date().toLocaleTimeString();
|
|
253
264
|
} catch (e) {
|
|
@@ -305,6 +316,7 @@ function renderBackendInfo(s) {
|
|
|
305
316
|
const el = document.getElementById('backendInfo');
|
|
306
317
|
el.innerHTML = `
|
|
307
318
|
<div class="row"><span class="label">Connected</span><span class="value ${s.backend_connected ? 'green' : 'red'}">${s.backend_connected ? 'Yes' : 'No'}</span></div>
|
|
319
|
+
<div class="row"><span class="label">Backend Version</span><span class="value">${s.backend_version || '-'}</span></div>
|
|
308
320
|
<div class="row"><span class="label">Health URL</span><span class="value" style="font-size:12px">${s.backend_health_url || '-'}</span></div>
|
|
309
321
|
`;
|
|
310
322
|
}
|
|
@@ -470,7 +482,7 @@ setInterval(refreshAll, 10000);
|
|
|
470
482
|
setInterval(fetchBlackbox, 15000);
|
|
471
483
|
async function fetchBlackbox() {
|
|
472
484
|
try {
|
|
473
|
-
const resp = await fetch('/blackbox');
|
|
485
|
+
const resp = await fetch(BASE + '/blackbox');
|
|
474
486
|
if (!resp.ok) return;
|
|
475
487
|
const data = await resp.json();
|
|
476
488
|
updateBlackboxPanel(data);
|