@osovv/vv-opencode 1.1.3 → 1.1.6
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 +27 -0
- package/README.md +46 -14
- package/dist/tui/context/analyze.d.ts +9 -1
- package/dist/tui/context/analyze.js +204 -22
- package/dist/tui/context/analyze.js.map +1 -1
- package/dist/tui/context/collect.js +10 -3
- package/dist/tui/context/collect.js.map +1 -1
- package/dist/tui/context/types.d.ts +56 -3
- package/dist/tui/context/types.js +13 -4
- package/dist/tui/context/types.js.map +1 -1
- package/dist/tui/context/view.d.ts +20 -0
- package/dist/tui/context/view.js +159 -14
- package/dist/tui/context/view.js.map +1 -1
- package/package.json +5 -2
- package/schemas/vvoc/v3.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
## <small>1.1.6 (2026-07-17)</small>
|
|
2
|
+
|
|
3
|
+
### Summary
|
|
4
|
+
|
|
5
|
+
This release hardens the release automation pipeline by fixing tag identity configuration in CI and moving tag and GitHub Release finalization to the authenticated local process after successful npm publication. Previously, the CI workflow attempted to create release tags using the GITHUB_TOKEN, which cannot tag commits containing workflow changes; now the local release wrapper waits for CI to publish the package, retries npm metadata propagation to verify the published gitHead matches the exact release commit, and only then creates the annotated tag and GitHub Release using the maintainer's authenticated git and gh clients. This ensures verification-before-tagging while avoiding GitHub App token restrictions, and uses bounded retries with exponential backoff to handle delayed npm metadata propagation.
|
|
6
|
+
|
|
7
|
+
* fix(release): configure CI tag identity ([cae54af](https://github.com/osovv/vv-opencode/commit/cae54af))
|
|
8
|
+
* fix(release): finalize tags after CI publication ([707170e](https://github.com/osovv/vv-opencode/commit/707170e))
|
|
9
|
+
|
|
10
|
+
## <small>1.1.5 (2026-07-16)</small>
|
|
11
|
+
|
|
12
|
+
### Summary
|
|
13
|
+
|
|
14
|
+
Release automation was hardened to require explicit GitHub Actions dispatch with an exact version and commit SHA, replacing the previous tag-push trigger so that all CI gates—typecheck, lint, format, tests, build, pack validation, and release consistency checks—complete successfully before npm publication, remote tag creation, and GitHub Release creation, preventing accidental or premature publishing and enabling safe reruns for tag recovery.
|
|
15
|
+
|
|
16
|
+
* fix(release): gate publishing and tags behind CI ([55908c5](https://github.com/osovv/vv-opencode/commit/55908c5))
|
|
17
|
+
|
|
18
|
+
## <small>1.1.4 (2026-07-16)</small>
|
|
19
|
+
|
|
20
|
+
### Summary
|
|
21
|
+
|
|
22
|
+
This release delivers a major upgrade to the `/context` TUI dialog, transforming it from a single aggregate view into a detailed three-tabbed inspector with Overview, Tools, and MCP panels that show per-tool schema and active-history estimates, context-window percentages derived only from the model's positive context limit, and deterministic MCP server attribution through longest-prefix naming. Connected MCP schema catalogs unavailable through OpenCode's public APIs are now explicitly marked as such rather than incorrectly shown as zero, and the dialog content is vertically centered within the host window. A new `tui:local` script enables pre-release smoke testing by building and launching the local TUI export through an isolated temporary config without modifying the user's selected OpenCode, TUI, or vvoc configuration files.
|
|
23
|
+
|
|
24
|
+
* fix(tui): mark unavailable MCP schemas ([b5b7dd6](https://github.com/osovv/vv-opencode/commit/b5b7dd6))
|
|
25
|
+
* feat(tui): add detailed context attribution ([c7bc1c8](https://github.com/osovv/vv-opencode/commit/c7bc1c8))
|
|
26
|
+
* feat(tui): add local testing and center context dialog ([0d9f587](https://github.com/osovv/vv-opencode/commit/0d9f587))
|
|
27
|
+
|
|
1
28
|
## <small>1.1.3 (2026-07-16)</small>
|
|
2
29
|
|
|
3
30
|
### Summary
|
package/README.md
CHANGED
|
@@ -164,7 +164,7 @@ OpenCode is a strong, flexible base for agentic coding, but it intentionally lea
|
|
|
164
164
|
| **Model Roles** | Put roles like `vv-role:smart` or `vv-role:fast` in shared agents and skills instead of hardcoded model IDs, then choose provider/model mappings per environment |
|
|
165
165
|
| **Orchestration Profiles** | Select a concrete work policy — single-session, balanced, or orchestrated — to control how vv-controller delegates. Built-in presets pick a sensible default and status reports the effective profile. |
|
|
166
166
|
| **Workflow Tracking** | Replace free-form multi-agent chaos with explicit work items, bounded review rounds, reviewer result collection, and hard stops when more context is needed |
|
|
167
|
-
| **Context Inspector** | Run `/context` in an active OpenCode TUI session
|
|
167
|
+
| **Context Inspector** | Run `/context` in an active OpenCode TUI session for Overview, Tools, and MCP tabs with provider-reported usage, approximate context-window percentages, active post-compaction tool history, and deterministic source attribution |
|
|
168
168
|
|
|
169
169
|
---
|
|
170
170
|
|
|
@@ -178,7 +178,7 @@ OpenCode is a strong, flexible base for agentic coding, but it intentionally lea
|
|
|
178
178
|
| **HashlineEditPlugin** | Make agent edits safer by tying changes to fresh `read` output, reducing wrong-line and stale-context edits. |
|
|
179
179
|
| **SystemContextInjectionPlugin** | Inject universal primary guidance plus one startup-resolved orchestration policy into vv-controller, with skill discovery and subagent-only explore worker prompts. |
|
|
180
180
|
| **SecretsRedactionPlugin** | Reduce accidental secret leakage by redacting tokens, keys, emails, and other sensitive values before messages are sent to the model. |
|
|
181
|
-
| **ContextTuiPlugin** | Add a native `/context` dialog
|
|
181
|
+
| **ContextTuiPlugin** | Add a native scrollable `/context` dialog with measured usage plus detailed observable per-tool and per-MCP schema/history estimates, explicitly marking data that OpenCode does not expose. |
|
|
182
182
|
|
|
183
183
|
Workflow work items are opened with explicit intent. For implementation loops, controllers use:
|
|
184
184
|
|
|
@@ -199,9 +199,15 @@ For review-only reports, use `"mode": "review_only"`. In review-only mode, revie
|
|
|
199
199
|
|
|
200
200
|
### `/context` accuracy
|
|
201
201
|
|
|
202
|
-
Run `/context` inside an active session.
|
|
202
|
+
Run `/context` inside an active session. Its bounded host-owned dialog has three tabs: **Overview**, **Tools**, and **MCP**. Use left/right arrows or `1`, `2`, and `3` to switch tabs and up/down to scroll long detail. The measured header remains visible on every tab. Top-line used/remaining values come from the latest assistant turn's provider-reported input, cache-read, and output token counts when OpenCode exposes them.
|
|
203
203
|
|
|
204
|
-
|
|
204
|
+
Overview category rows remain provider-neutral estimates derived from observable TUI/SDK state: system instructions, skill catalog, loaded skills, tool schemas, user and assistant messages, tool calls and results, files, and the latest compaction summary. Percentages are always `estimated tokens / current model contextLimit`; if OpenCode does not expose a positive current limit, the percentage is shown as an em dash rather than using another denominator. Numeric percentages may exceed 100% when estimates drift, while visual bars clamp only their fill at 100%.
|
|
205
|
+
|
|
206
|
+
The Tools tab separates each observable current tool's persistent **schema** estimate from its active **history** estimate, call count, combined total, source, and percentages. When a schema catalog is unavailable, the row says `schema unavailable` and labels the history-only subtotal as `known total` rather than presenting a false zero. History includes only tool parts in the active context: the latest compaction summary and subsequent turns. Pending and running calls include observable input; completed calls include output and failed calls include errors. The `skill` tool remains visible in detail, but its history continues to belong to Overview's `Loaded skill results` category so it is not double-counted as `Tool calls and results`.
|
|
207
|
+
|
|
208
|
+
The MCP tab aggregates observable current schema and retained active history by server and nests the attributed tools. OpenCode 1.18.x does not expose connected MCP tool definitions through its public TUI/SDK tool catalog, so connected servers show `current tools unavailable` and `schema unavailable`; their `known total` includes retained history only, while the unexposed schema overhead remains in `Unknown/provider-only`. `disabled`, `failed`, `needs_auth`, and `needs_client_registration` servers have a known zero current schema, while matching call history can remain visible until compaction removes it. Attribution follows OpenCode's sanitized `<server>_<tool>` naming contract with unique longest-prefix matching. Sanitized collisions or other ambiguous ownership fail closed under **Other external/plugin** with a bounded warning instead of being guessed.
|
|
209
|
+
|
|
210
|
+
The plugin does **not** claim to reconstruct the exact final provider request or provide provider-exact tokenization. Hidden provider transformations, plugin-added data, or otherwise unattributable content appears as `Unknown/provider-only`; when visible estimates exceed provider usage, the dialog reports estimation drift instead of forcing totals to match. Collection reuses OpenCode's existing tool catalog, active parts, model metadata, and MCP status snapshot without issuing extra MCP requests.
|
|
205
211
|
|
|
206
212
|
The `context` vvoc plugin toggle defaults to enabled. Disable it with `vvoc plugin disable context`, then restart OpenCode.
|
|
207
213
|
|
|
@@ -357,7 +363,9 @@ Session handoff notes → ./.vvoc/handoff/YYYY-MM-DD-<session-slug>/handoff.xm
|
|
|
357
363
|
|
|
358
364
|
Schema is versioned and published with the package — source of truth at `schemas/vvoc/v3.json`. The current config contract is strict: `vvoc.json` must be canonical version 3 and include required sections such as `plugins`. Existing v1/v2/pre-role, incomplete, malformed, or otherwise invalid config files fail instead of being migrated or repaired. `vvoc install` and `vvoc sync` may create a fresh canonical config when no config exists, but they refuse to rewrite an invalid existing `vvoc.json`; fix the file manually and rerun `vvoc sync`.
|
|
359
365
|
|
|
360
|
-
|
|
366
|
+
OpenCode intentionally keeps server/runtime plugins and native terminal UI plugins in separate configuration surfaces. `opencode.json(c)` is loaded by the core/server plugin runtime and activates vvoc features such as model roles, Guardian, workflow, hashline edit, and redaction. `tui.json(c)` is loaded by the terminal UI process and activates the package's `./tui` module, currently the `/context` inspector. The same pinned package version appears in both files, but OpenCode selects a different public export for each process; headless/server launches therefore do not need to load the Solid/OpenTUI UI module.
|
|
367
|
+
|
|
368
|
+
`vvoc install`, `vvoc init`, and `vvoc sync` conservatively add the pinned base package specifier (for example `@osovv/vv-opencode@X.Y.Z`) to dedicated `tui.json(c)`; OpenCode then selects the package's public `./tui` export. Sync migrates the broken legacy `@osovv/vv-opencode/tui` form and older managed pins. Existing comments, unrelated settings, unrelated plugin entries, and `[specifier, options]` tuples are preserved; malformed plugin entries fail without rewrite.
|
|
361
369
|
|
|
362
370
|
`vvoc status` and `vvoc doctor` are diagnostic exceptions: they report the installed OpenCode version, the `1.18.2` TUI minimum, selected runtime/TUI/vvoc config paths, and validation problems without normalizing or rewriting the files. `vvoc upgrade` can still finish the package installation when the follow-up `vvoc sync` fails; in that case it reports a partial upgrade, leaves config unchanged, and tells you to fix the invalid config manually before rerunning `vvoc sync`.
|
|
363
371
|
|
|
@@ -376,6 +384,18 @@ vvoc launch --scope project -- run "hello"
|
|
|
376
384
|
|
|
377
385
|
`vvoc launch --scope project` is strict and non-mutating: if `.opencode/opencode.json` or `.vvoc/vvoc.json` is missing, it fails with a hint to run `vvoc install --scope project`. When the selected `.opencode/tui.json(c)` exists, launch also sets `OPENCODE_TUI_CONFIG`; a missing TUI file is not synthesized during launch. `--scope effective` follows the layered lookup order, and `--scope global` uses the global config paths.
|
|
378
386
|
|
|
387
|
+
### Test the local TUI before release
|
|
388
|
+
|
|
389
|
+
From this repository, launch OpenCode against the freshly built local `dist/tui.js` without publishing or rewriting your selected configs:
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
bun run tui:local
|
|
393
|
+
bun run tui:local -- -s <session-id>
|
|
394
|
+
bun run tui:local -- --scope project
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
The command defaults to `effective` config resolution. It builds the package, copies the selected `tui.json(c)` into a temporary isolated config home, replaces only the managed vv-opencode TUI entry with a local `file://` URL, preserves unrelated TUI settings and tuple options, and forwards remaining arguments to OpenCode. The original OpenCode, TUI, and vvoc config files are not modified, and the temporary config is removed after OpenCode exits. Restart the command after source changes because runtime plugins do not live reload.
|
|
398
|
+
|
|
379
399
|
---
|
|
380
400
|
|
|
381
401
|
## Managed Agents
|
|
@@ -448,7 +468,7 @@ bun run pack:check
|
|
|
448
468
|
---
|
|
449
469
|
## Publishing
|
|
450
470
|
|
|
451
|
-
The release flow is automated via a local wrapper and
|
|
471
|
+
The release flow is automated via a local wrapper and an exact-commit, CI-gated GitHub Actions workflow.
|
|
452
472
|
|
|
453
473
|
### Local bump
|
|
454
474
|
|
|
@@ -463,19 +483,31 @@ This will:
|
|
|
463
483
|
4. Prepend a `### Summary` section plus conventional commit details to `CHANGELOG.md`
|
|
464
484
|
5. Update `schemas/vvoc/v3.json` `$id` to the new version
|
|
465
485
|
6. Run `release:check` for consistency
|
|
466
|
-
7. Create a release commit
|
|
467
|
-
8. Push the current branch
|
|
486
|
+
7. Create a release commit without creating a tag
|
|
487
|
+
8. Push only the current branch to `origin`
|
|
488
|
+
9. Dispatch `publish.yml` through `gh` with the exact package version and release commit SHA
|
|
489
|
+
10. Wait for the dispatched CI run to finish successfully
|
|
490
|
+
11. Retry npm metadata propagation, then verify that npm reports the exact release commit as the published `gitHead`
|
|
491
|
+
12. Create and push the annotated tag locally, then create the GitHub Release through `gh`
|
|
468
492
|
|
|
469
493
|
Required local release prerequisite:
|
|
470
494
|
- `opencode` must be available from `PATH`.
|
|
495
|
+
- `gh` must be installed and authenticated with permission to dispatch/watch workflows and create releases in the repository.
|
|
496
|
+
- `gh run watch` does not support fine-grained PAT authentication; use a supported `gh` login such as OAuth or a classic token.
|
|
471
497
|
- The summary model defaults to `deepseek/deepseek-v4-flash`.
|
|
472
498
|
- Override with `VVOC_RELEASE_SUMMARY_MODEL=provider/model`.
|
|
473
499
|
- Override the per-attempt timeout with `VVOC_RELEASE_SUMMARY_TIMEOUT_MS=120000`.
|
|
474
|
-
Run `release:bump` from a checked-out branch with push access to `origin`.
|
|
475
|
-
|
|
476
|
-
The GitHub Actions workflow
|
|
477
|
-
`package.json
|
|
478
|
-
check, `release:check`)
|
|
500
|
+
Run `release:bump` from a checked-out branch with branch and tag push access to `origin`. A normal branch push never publishes by itself; the wrapper explicitly dispatches the workflow for the exact pushed commit.
|
|
501
|
+
|
|
502
|
+
The GitHub Actions workflow checks out the requested commit SHA, verifies that its
|
|
503
|
+
`package.json` version matches the dispatch input, and runs full validation
|
|
504
|
+
(typecheck, lint, fmt check, tests, build, pack check, and `release:check`). Only
|
|
505
|
+
after every gate passes does it publish to npm with provenance. The local wrapper
|
|
506
|
+
waits for that CI result, retries registry metadata propagation, verifies npm
|
|
507
|
+
`gitHead`, and only then uses the maintainer's authenticated `git` and `gh` clients
|
|
508
|
+
to create the annotated `vX.Y.Z` tag and GitHub Release. This avoids GitHub App
|
|
509
|
+
token restrictions on tagging commits that contain workflow changes while preserving
|
|
510
|
+
verification-before-tagging.
|
|
479
511
|
|
|
480
512
|
### Checking consistency manually
|
|
481
513
|
|
|
@@ -488,7 +520,7 @@ config format version are all consistent. Run it independently anytime.
|
|
|
488
520
|
|
|
489
521
|
### CI publish workflow
|
|
490
522
|
|
|
491
|
-
The workflow uses npm provenance/trusted publishing (`id-token: write`) and
|
|
523
|
+
The workflow uses npm provenance/trusted publishing (`id-token: write`) and read-only repository contents access. It can only publish through an explicit `workflow_dispatch` request; normal branch and tag pushes do not publish. Tag and GitHub Release creation happen locally only after the workflow succeeds. Configure npm trusted publishing for this GitHub repository/package, or adapt the publish step to use an `NPM_TOKEN` secret if token-based publishing is required.
|
|
492
524
|
|
|
493
525
|
---
|
|
494
526
|
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { Message } from "@opencode-ai/sdk/v2";
|
|
2
|
-
import type { ContextAnalysis, ContextAnalysisInput } from "./types.js";
|
|
2
|
+
import type { ContextAnalysis, ContextAnalysisInput, ContextMcpServer, ContextTokenMetric, ContextToolSource, ContextToolUsage } from "./types.js";
|
|
3
|
+
export type ContextToolClassification = {
|
|
4
|
+
source: ContextToolSource;
|
|
5
|
+
ambiguousServers?: string[];
|
|
6
|
+
};
|
|
3
7
|
export declare function analyzeContext(input: ContextAnalysisInput): ContextAnalysis;
|
|
4
8
|
export declare function selectActiveMessages(messages: readonly Message[]): readonly Message[];
|
|
9
|
+
export declare function createTokenMetric(estimatedTokens: number, contextLimit: number | undefined): ContextTokenMetric;
|
|
10
|
+
export declare function sanitizeMcpName(value: string): string;
|
|
11
|
+
export declare function classifyToolSource(toolID: string, mcpServers: readonly ContextMcpServer[]): ContextToolClassification;
|
|
12
|
+
export declare function compareToolUsage(left: ContextToolUsage, right: ContextToolUsage): number;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// FILE: src/tui/context/analyze.ts
|
|
2
2
|
// VERSION: 1.0.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE: Derive
|
|
5
|
-
// SCOPE: Compaction cutoff, provider usage baseline,
|
|
4
|
+
// PURPOSE: Derive measured usage plus reconciled category, per-tool, and per-MCP active context attribution from observable OpenCode session data.
|
|
5
|
+
// SCOPE: Compaction cutoff, provider usage baseline, context-limit percentages, skill/tool/message categorization, deterministic MCP ownership, explicit schema observability, residual unknown context, and sorted detail aggregates.
|
|
6
6
|
// DEPENDS: [@opencode-ai/sdk/v2, src/tui/context/estimate.ts, src/tui/context/types.ts]
|
|
7
7
|
// LINKS: [M-PLUGIN-CONTEXT-TUI, DF-CONTEXT-INSPECTION, V-M-PLUGIN-CONTEXT-TUI]
|
|
8
8
|
// ROLE: CORE_LOGIC
|
|
@@ -10,12 +10,17 @@
|
|
|
10
10
|
// END_MODULE_CONTRACT
|
|
11
11
|
//
|
|
12
12
|
// START_MODULE_MAP
|
|
13
|
-
// analyzeContext - Produce the complete context analysis rendered by the TUI plugin.
|
|
13
|
+
// analyzeContext - Produce the complete overview and detailed context analysis rendered by the TUI plugin.
|
|
14
14
|
// selectActiveMessages - Keep only the latest compaction summary and subsequent turns.
|
|
15
|
+
// createTokenMetric - Pair estimated tokens with a percentage only when a positive context limit exists.
|
|
16
|
+
// sanitizeMcpName - Mirror OpenCode's MCP name sanitization contract.
|
|
17
|
+
// classifyToolSource - Classify known tools and uniquely matched MCP prefixes without guessing.
|
|
18
|
+
// ContextToolClassification - Source result plus explicit ambiguous MCP candidates.
|
|
19
|
+
// compareToolUsage - Sort tool detail by combined total descending and ID ascending.
|
|
15
20
|
// END_MODULE_MAP
|
|
16
21
|
//
|
|
17
22
|
// START_CHANGE_SUMMARY
|
|
18
|
-
// LAST_CHANGE: [
|
|
23
|
+
// LAST_CHANGE: [DIRECT-FIX - Preserved unknown connected MCP schemas as unavailable rather than estimating them as zero.]
|
|
19
24
|
// END_CHANGE_SUMMARY
|
|
20
25
|
import { estimateTextTokens, estimateValueTokens } from "./estimate.js";
|
|
21
26
|
const BUILTIN_TOOL_IDS = new Set([
|
|
@@ -32,6 +37,7 @@ const BUILTIN_TOOL_IDS = new Set([
|
|
|
32
37
|
"write",
|
|
33
38
|
]);
|
|
34
39
|
const VVOC_TOOL_IDS = new Set(["edit", "work_item_open", "work_item_list", "work_item_close"]);
|
|
40
|
+
const MAX_ATTRIBUTION_WARNINGS = 3;
|
|
35
41
|
const CATEGORY_LABELS = {
|
|
36
42
|
system: "Agent/system instructions",
|
|
37
43
|
"skill-catalog": "Skill catalog",
|
|
@@ -65,18 +71,42 @@ export function analyzeContext(input) {
|
|
|
65
71
|
location: skill.location,
|
|
66
72
|
});
|
|
67
73
|
}
|
|
74
|
+
const toolDrafts = new Map();
|
|
68
75
|
for (const tool of input.tools) {
|
|
69
|
-
|
|
76
|
+
const draft = getToolDraft(toolDrafts, tool.id);
|
|
77
|
+
draft.schemaListed = true;
|
|
78
|
+
draft.schemaTokens = estimateValueTokens({
|
|
70
79
|
id: tool.id,
|
|
71
80
|
description: tool.description,
|
|
72
81
|
parameters: tool.parameters,
|
|
73
82
|
});
|
|
74
83
|
}
|
|
75
84
|
const messageByID = new Map(activeMessages.map((message) => [message.id, message]));
|
|
85
|
+
const toolPartsByCall = new Map();
|
|
76
86
|
for (const part of activeParts) {
|
|
87
|
+
if (part.type === "tool") {
|
|
88
|
+
toolPartsByCall.set(`${part.tool}\u0000${part.callID}`, part);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
77
91
|
countPart(part, messageByID.get(part.messageID), counters);
|
|
78
92
|
}
|
|
79
|
-
const
|
|
93
|
+
for (const part of toolPartsByCall.values()) {
|
|
94
|
+
const historyTokens = countToolPart(part, counters);
|
|
95
|
+
const draft = getToolDraft(toolDrafts, part.tool);
|
|
96
|
+
draft.calls += 1;
|
|
97
|
+
draft.historyTokens += historyTokens;
|
|
98
|
+
}
|
|
99
|
+
const contextLimit = normalizeContextLimit(input.model?.contextLimit);
|
|
100
|
+
const detail = buildToolAttribution(toolDrafts, input.mcpServers, contextLimit, input.mcpSchemaCatalogAvailable ?? false);
|
|
101
|
+
counters["builtin-tool-schemas"] =
|
|
102
|
+
detail.attribution.reconciliation.schema.builtin.estimatedTokens;
|
|
103
|
+
counters["vvoc-tool-schemas"] = detail.attribution.reconciliation.schema.vvoc.estimatedTokens;
|
|
104
|
+
counters["external-tool-schemas"] =
|
|
105
|
+
detail.attribution.reconciliation.schema.external.estimatedTokens;
|
|
106
|
+
counters["tool-results"] = detail.attribution.reconciliation.history.toolResults.estimatedTokens;
|
|
107
|
+
counters["loaded-skills"] =
|
|
108
|
+
detail.attribution.reconciliation.history.loadedSkills.estimatedTokens;
|
|
109
|
+
const categories = buildKnownCategories(counters, contextLimit);
|
|
80
110
|
const estimatedKnownTokens = categories.reduce((total, category) => total + category.estimatedTokens, 0);
|
|
81
111
|
const measured = latestAssistant
|
|
82
112
|
? createMeasuredUsage(latestAssistant, input.model?.contextLimit)
|
|
@@ -89,7 +119,7 @@ export function analyzeContext(input) {
|
|
|
89
119
|
categories.push({
|
|
90
120
|
id: "provider-only",
|
|
91
121
|
label: CATEGORY_LABELS["provider-only"],
|
|
92
|
-
|
|
122
|
+
...createTokenMetric(providerOnlyTokens, contextLimit),
|
|
93
123
|
detail: "Measured provider usage not attributable through public TUI/SDK data",
|
|
94
124
|
source: "provider-residual",
|
|
95
125
|
});
|
|
@@ -106,7 +136,8 @@ export function analyzeContext(input) {
|
|
|
106
136
|
compacted: activeMessages.length < input.messages.length,
|
|
107
137
|
activeMessageCount: activeMessages.length,
|
|
108
138
|
mcpServers: [...input.mcpServers],
|
|
109
|
-
|
|
139
|
+
toolAttribution: detail.attribution,
|
|
140
|
+
warnings: [...(input.warnings ?? []), ...detail.warnings],
|
|
110
141
|
};
|
|
111
142
|
}
|
|
112
143
|
export function selectActiveMessages(messages) {
|
|
@@ -121,6 +152,160 @@ export function selectActiveMessages(messages) {
|
|
|
121
152
|
return summaryIndex >= 0 ? messages.slice(summaryIndex) : messages;
|
|
122
153
|
}
|
|
123
154
|
// END_BLOCK_CONTEXT_ANALYSIS
|
|
155
|
+
// START_BLOCK_DETAILED_ATTRIBUTION
|
|
156
|
+
export function createTokenMetric(estimatedTokens, contextLimit) {
|
|
157
|
+
const tokens = Number.isFinite(estimatedTokens) ? Math.max(0, estimatedTokens) : 0;
|
|
158
|
+
const limit = normalizeContextLimit(contextLimit);
|
|
159
|
+
if (limit === undefined)
|
|
160
|
+
return { estimatedTokens: tokens };
|
|
161
|
+
return { estimatedTokens: tokens, percent: (tokens / limit) * 100 };
|
|
162
|
+
}
|
|
163
|
+
export function sanitizeMcpName(value) {
|
|
164
|
+
return value.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
165
|
+
}
|
|
166
|
+
export function classifyToolSource(toolID, mcpServers) {
|
|
167
|
+
if (VVOC_TOOL_IDS.has(toolID))
|
|
168
|
+
return { source: { kind: "vvoc" } };
|
|
169
|
+
if (BUILTIN_TOOL_IDS.has(toolID))
|
|
170
|
+
return { source: { kind: "builtin" } };
|
|
171
|
+
const uniqueServers = new Map(mcpServers.map((server) => [server.name, server]));
|
|
172
|
+
const candidates = [...uniqueServers.values()]
|
|
173
|
+
.map((server) => ({ name: server.name, prefix: `${sanitizeMcpName(server.name)}_` }))
|
|
174
|
+
.filter((candidate) => toolID.startsWith(candidate.prefix));
|
|
175
|
+
if (candidates.length === 0)
|
|
176
|
+
return { source: { kind: "other" } };
|
|
177
|
+
const longestLength = Math.max(...candidates.map((candidate) => candidate.prefix.length));
|
|
178
|
+
const longest = candidates
|
|
179
|
+
.filter((candidate) => candidate.prefix.length === longestLength)
|
|
180
|
+
.sort((left, right) => compareText(left.name, right.name));
|
|
181
|
+
if (longest.length !== 1) {
|
|
182
|
+
return {
|
|
183
|
+
source: { kind: "other" },
|
|
184
|
+
ambiguousServers: longest.map((candidate) => candidate.name),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
return { source: { kind: "mcp", server: longest[0].name } };
|
|
188
|
+
}
|
|
189
|
+
export function compareToolUsage(left, right) {
|
|
190
|
+
const totalDelta = right.total.estimatedTokens - left.total.estimatedTokens;
|
|
191
|
+
return totalDelta || compareText(left.id, right.id);
|
|
192
|
+
}
|
|
193
|
+
function buildToolAttribution(drafts, mcpServers, contextLimit, mcpSchemaCatalogAvailable) {
|
|
194
|
+
const serverByName = new Map(mcpServers.map((server) => [server.name, server]));
|
|
195
|
+
const ambiguities = new Map();
|
|
196
|
+
const tools = [...drafts.values()]
|
|
197
|
+
.map((draft) => {
|
|
198
|
+
const classification = classifyToolSource(draft.id, mcpServers);
|
|
199
|
+
if (classification.ambiguousServers) {
|
|
200
|
+
ambiguities.set(draft.id, classification.ambiguousServers);
|
|
201
|
+
}
|
|
202
|
+
const server = classification.source.kind === "mcp"
|
|
203
|
+
? serverByName.get(classification.source.server)
|
|
204
|
+
: undefined;
|
|
205
|
+
const schema = resolveToolSchema(draft, classification.source, server, mcpSchemaCatalogAvailable);
|
|
206
|
+
return {
|
|
207
|
+
id: draft.id,
|
|
208
|
+
source: classification.source,
|
|
209
|
+
calls: draft.calls,
|
|
210
|
+
schemaKnown: schema.known,
|
|
211
|
+
schema: createTokenMetric(schema.tokens, contextLimit),
|
|
212
|
+
history: createTokenMetric(draft.historyTokens, contextLimit),
|
|
213
|
+
total: createTokenMetric(schema.tokens + draft.historyTokens, contextLimit),
|
|
214
|
+
};
|
|
215
|
+
})
|
|
216
|
+
.sort(compareToolUsage);
|
|
217
|
+
const schemaBuiltin = sumTools(tools, (tool) => tool.source.kind === "builtin", "schema");
|
|
218
|
+
const schemaVvoc = sumTools(tools, (tool) => tool.source.kind === "vvoc", "schema");
|
|
219
|
+
const schemaExternal = sumTools(tools, (tool) => tool.source.kind === "mcp" || tool.source.kind === "other", "schema");
|
|
220
|
+
const historyToolResults = sumTools(tools, (tool) => tool.id !== "skill", "history");
|
|
221
|
+
const historyLoadedSkills = sumTools(tools, (tool) => tool.id === "skill", "history");
|
|
222
|
+
const uniqueServers = [...serverByName.values()];
|
|
223
|
+
const mcpUsage = uniqueServers
|
|
224
|
+
.map((server) => {
|
|
225
|
+
const serverTools = tools.filter((tool) => tool.source.kind === "mcp" && tool.source.server === server.name);
|
|
226
|
+
const schemaKnown = server.status !== "connected" || mcpSchemaCatalogAvailable;
|
|
227
|
+
const schemaTokens = schemaKnown ? sumTools(serverTools, () => true, "schema") : 0;
|
|
228
|
+
const historyTokens = sumTools(serverTools, () => true, "history");
|
|
229
|
+
return {
|
|
230
|
+
...server,
|
|
231
|
+
toolCount: schemaKnown
|
|
232
|
+
? serverTools.filter((tool) => tool.schema.estimatedTokens > 0).length
|
|
233
|
+
: undefined,
|
|
234
|
+
schemaKnown,
|
|
235
|
+
schema: createTokenMetric(schemaTokens, contextLimit),
|
|
236
|
+
history: createTokenMetric(historyTokens, contextLimit),
|
|
237
|
+
total: createTokenMetric(schemaTokens + historyTokens, contextLimit),
|
|
238
|
+
tools: serverTools,
|
|
239
|
+
};
|
|
240
|
+
})
|
|
241
|
+
.sort(compareMcpUsage);
|
|
242
|
+
return {
|
|
243
|
+
attribution: {
|
|
244
|
+
tools,
|
|
245
|
+
mcpServers: mcpUsage,
|
|
246
|
+
otherTools: tools.filter((tool) => tool.source.kind === "other"),
|
|
247
|
+
reconciliation: {
|
|
248
|
+
schema: {
|
|
249
|
+
builtin: createTokenMetric(schemaBuiltin, contextLimit),
|
|
250
|
+
vvoc: createTokenMetric(schemaVvoc, contextLimit),
|
|
251
|
+
external: createTokenMetric(schemaExternal, contextLimit),
|
|
252
|
+
total: createTokenMetric(schemaBuiltin + schemaVvoc + schemaExternal, contextLimit),
|
|
253
|
+
},
|
|
254
|
+
history: {
|
|
255
|
+
toolResults: createTokenMetric(historyToolResults, contextLimit),
|
|
256
|
+
loadedSkills: createTokenMetric(historyLoadedSkills, contextLimit),
|
|
257
|
+
total: createTokenMetric(historyToolResults + historyLoadedSkills, contextLimit),
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
warnings: buildAmbiguityWarnings(ambiguities),
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function getToolDraft(drafts, id) {
|
|
265
|
+
const current = drafts.get(id);
|
|
266
|
+
if (current)
|
|
267
|
+
return current;
|
|
268
|
+
const created = { id, schemaListed: false, schemaTokens: 0, historyTokens: 0, calls: 0 };
|
|
269
|
+
drafts.set(id, created);
|
|
270
|
+
return created;
|
|
271
|
+
}
|
|
272
|
+
function resolveToolSchema(draft, source, server, mcpSchemaCatalogAvailable) {
|
|
273
|
+
if (source.kind !== "mcp") {
|
|
274
|
+
return { known: draft.schemaListed, tokens: draft.schemaTokens };
|
|
275
|
+
}
|
|
276
|
+
if (!server)
|
|
277
|
+
return { known: false, tokens: 0 };
|
|
278
|
+
if (server.status !== "connected")
|
|
279
|
+
return { known: true, tokens: 0 };
|
|
280
|
+
if (!mcpSchemaCatalogAvailable)
|
|
281
|
+
return { known: false, tokens: 0 };
|
|
282
|
+
return { known: true, tokens: draft.schemaListed ? draft.schemaTokens : 0 };
|
|
283
|
+
}
|
|
284
|
+
function sumTools(tools, include, metric) {
|
|
285
|
+
return tools.reduce((total, tool) => total + (include(tool) ? tool[metric].estimatedTokens : 0), 0);
|
|
286
|
+
}
|
|
287
|
+
function compareMcpUsage(left, right) {
|
|
288
|
+
const totalDelta = right.total.estimatedTokens - left.total.estimatedTokens;
|
|
289
|
+
return totalDelta || compareText(left.name, right.name);
|
|
290
|
+
}
|
|
291
|
+
function compareText(left, right) {
|
|
292
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
293
|
+
}
|
|
294
|
+
function buildAmbiguityWarnings(ambiguities) {
|
|
295
|
+
const entries = [...ambiguities.entries()].sort(([left], [right]) => compareText(left, right));
|
|
296
|
+
const visible = entries.length > MAX_ATTRIBUTION_WARNINGS
|
|
297
|
+
? entries.slice(0, MAX_ATTRIBUTION_WARNINGS - 1)
|
|
298
|
+
: entries;
|
|
299
|
+
const warnings = visible.map(([toolID, servers]) => boundWarning(`MCP attribution ambiguous for "${toolID}": matches ${servers.join(", ")}; grouped under Other external/plugin.`));
|
|
300
|
+
if (entries.length > MAX_ATTRIBUTION_WARNINGS) {
|
|
301
|
+
warnings.push(`MCP attribution ambiguous for ${entries.length - visible.length} additional tool IDs; grouped under Other external/plugin.`);
|
|
302
|
+
}
|
|
303
|
+
return warnings;
|
|
304
|
+
}
|
|
305
|
+
function boundWarning(value) {
|
|
306
|
+
return value.length > 180 ? `${value.slice(0, 177)}...` : value;
|
|
307
|
+
}
|
|
308
|
+
// END_BLOCK_DETAILED_ATTRIBUTION
|
|
124
309
|
// START_BLOCK_CATEGORY_COUNTING
|
|
125
310
|
function createCategoryCounter() {
|
|
126
311
|
return {
|
|
@@ -137,13 +322,6 @@ function createCategoryCounter() {
|
|
|
137
322
|
"compacted-summary": 0,
|
|
138
323
|
};
|
|
139
324
|
}
|
|
140
|
-
function classifyToolSchema(tool) {
|
|
141
|
-
if (VVOC_TOOL_IDS.has(tool.id))
|
|
142
|
-
return "vvoc-tool-schemas";
|
|
143
|
-
if (BUILTIN_TOOL_IDS.has(tool.id))
|
|
144
|
-
return "builtin-tool-schemas";
|
|
145
|
-
return "external-tool-schemas";
|
|
146
|
-
}
|
|
147
325
|
function countPart(part, message, counters) {
|
|
148
326
|
switch (part.type) {
|
|
149
327
|
case "text": {
|
|
@@ -184,9 +362,6 @@ function countPart(part, message, counters) {
|
|
|
184
362
|
url: part.url.startsWith("data:") ? undefined : part.url,
|
|
185
363
|
});
|
|
186
364
|
return;
|
|
187
|
-
case "tool":
|
|
188
|
-
countToolPart(part, counters);
|
|
189
|
-
return;
|
|
190
365
|
default:
|
|
191
366
|
return;
|
|
192
367
|
}
|
|
@@ -200,7 +375,8 @@ function countToolPart(part, counters) {
|
|
|
200
375
|
error: state.status === "error" ? state.error : undefined,
|
|
201
376
|
};
|
|
202
377
|
const target = part.tool === "skill" ? "loaded-skills" : "tool-results";
|
|
203
|
-
|
|
378
|
+
const historyTokens = estimateValueTokens(payload);
|
|
379
|
+
counters[target] += historyTokens;
|
|
204
380
|
if (state.status === "completed") {
|
|
205
381
|
for (const attachment of state.attachments ?? []) {
|
|
206
382
|
counters.files += estimateValueTokens({
|
|
@@ -210,14 +386,15 @@ function countToolPart(part, counters) {
|
|
|
210
386
|
});
|
|
211
387
|
}
|
|
212
388
|
}
|
|
389
|
+
return historyTokens;
|
|
213
390
|
}
|
|
214
|
-
function buildKnownCategories(counters) {
|
|
391
|
+
function buildKnownCategories(counters, contextLimit) {
|
|
215
392
|
return Object.entries(counters)
|
|
216
393
|
.filter(([, estimatedTokens]) => estimatedTokens > 0)
|
|
217
394
|
.map(([id, estimatedTokens]) => ({
|
|
218
395
|
id,
|
|
219
396
|
label: CATEGORY_LABELS[id],
|
|
220
|
-
estimatedTokens,
|
|
397
|
+
...createTokenMetric(estimatedTokens, contextLimit),
|
|
221
398
|
source: "estimated",
|
|
222
399
|
}));
|
|
223
400
|
}
|
|
@@ -225,7 +402,7 @@ function buildKnownCategories(counters) {
|
|
|
225
402
|
// START_BLOCK_MEASURED_USAGE
|
|
226
403
|
function createMeasuredUsage(message, contextLimit) {
|
|
227
404
|
const usedTokens = message.tokens.input + message.tokens.cache.read + message.tokens.output;
|
|
228
|
-
const normalizedLimit = contextLimit
|
|
405
|
+
const normalizedLimit = normalizeContextLimit(contextLimit);
|
|
229
406
|
return {
|
|
230
407
|
usedTokens,
|
|
231
408
|
contextLimit: normalizedLimit,
|
|
@@ -236,6 +413,11 @@ function createMeasuredUsage(message, contextLimit) {
|
|
|
236
413
|
outputTokens: message.tokens.output,
|
|
237
414
|
};
|
|
238
415
|
}
|
|
416
|
+
function normalizeContextLimit(contextLimit) {
|
|
417
|
+
return contextLimit !== undefined && Number.isFinite(contextLimit) && contextLimit > 0
|
|
418
|
+
? contextLimit
|
|
419
|
+
: undefined;
|
|
420
|
+
}
|
|
239
421
|
function findLatestAssistant(messages) {
|
|
240
422
|
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
241
423
|
const message = messages[index];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/tui/context/analyze.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/tui/context/analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// VERSION: 1.0.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
4
|
// PURPOSE: Collect bounded observable session, skill, agent, tool, model, and MCP data from the OpenCode TUI API.
|
|
5
|
-
// SCOPE: Active session snapshots, safe SDK lookups, provider/model limit resolution, and bounded warning capture.
|
|
5
|
+
// SCOPE: Active session snapshots, safe SDK lookups, provider/model limit resolution, explicit MCP schema-catalog availability, and bounded warning capture.
|
|
6
6
|
// DEPENDS: [@opencode-ai/plugin/tui, @opencode-ai/sdk/v2, src/tui/context/analyze.ts, src/tui/context/types.ts]
|
|
7
7
|
// LINKS: [M-PLUGIN-CONTEXT-TUI, DF-CONTEXT-INSPECTION, V-M-PLUGIN-CONTEXT-TUI]
|
|
8
8
|
// ROLE: INTEGRATION
|
|
@@ -10,13 +10,19 @@
|
|
|
10
10
|
// END_MODULE_CONTRACT
|
|
11
11
|
//
|
|
12
12
|
// START_MODULE_MAP
|
|
13
|
-
// collectContextAnalysis - Read current TUI state and SDK catalogs, then invoke the pure analyzer.
|
|
13
|
+
// collectContextAnalysis - Read current TUI state and supported SDK catalogs, mark unavailable MCP schema data, then invoke the pure analyzer.
|
|
14
14
|
// END_MODULE_MAP
|
|
15
15
|
//
|
|
16
16
|
// START_CHANGE_SUMMARY
|
|
17
|
-
// LAST_CHANGE: [
|
|
17
|
+
// LAST_CHANGE: [DIRECT-FIX - Marked the unsupported public MCP schema catalog as unavailable instead of zero.]
|
|
18
18
|
// END_CHANGE_SUMMARY
|
|
19
19
|
import { analyzeContext } from "./analyze.js";
|
|
20
|
+
// KNOWN LIMITATION (related upstream request: https://github.com/anomalyco/opencode/issues/1142):
|
|
21
|
+
// OpenCode 1.18.x serves /experimental/tool from ToolRegistry, then appends MCP tools later
|
|
22
|
+
// while constructing a session. Public TUI/SDK state exposes MCP status but no MCP schema
|
|
23
|
+
// catalog. Keep this false until OpenCode exposes a supported catalog; absence is unavailable,
|
|
24
|
+
// not a zero-token schema. Reconnecting to MCP servers here would duplicate host processes/auth.
|
|
25
|
+
const OPENCODE_MCP_SCHEMA_CATALOG_AVAILABLE = false;
|
|
20
26
|
// START_BLOCK_CONTEXT_COLLECTION
|
|
21
27
|
export async function collectContextAnalysis(api, sessionID) {
|
|
22
28
|
const messages = [...api.state.session.messages(sessionID)];
|
|
@@ -46,6 +52,7 @@ export async function collectContextAnalysis(api, sessionID) {
|
|
|
46
52
|
agents,
|
|
47
53
|
skills,
|
|
48
54
|
tools,
|
|
55
|
+
mcpSchemaCatalogAvailable: OPENCODE_MCP_SCHEMA_CATALOG_AVAILABLE,
|
|
49
56
|
mcpServers: api.state.mcp().map((server) => ({
|
|
50
57
|
name: server.name,
|
|
51
58
|
status: server.status,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collect.js","sourceRoot":"","sources":["../../../src/tui/context/collect.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,iBAAiB;AACjB,wBAAwB;AACxB,oHAAoH;AACpH
|
|
1
|
+
{"version":3,"file":"collect.js","sourceRoot":"","sources":["../../../src/tui/context/collect.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,10 @@ export type ContextSkill = {
|
|
|
5
5
|
location: string;
|
|
6
6
|
content: string;
|
|
7
7
|
};
|
|
8
|
+
export type ContextMcpStatus = "connected" | "disabled" | "failed" | "needs_auth" | "needs_client_registration";
|
|
8
9
|
export type ContextMcpServer = {
|
|
9
10
|
name: string;
|
|
10
|
-
status:
|
|
11
|
+
status: ContextMcpStatus;
|
|
11
12
|
error?: string;
|
|
12
13
|
};
|
|
13
14
|
export type ContextModel = {
|
|
@@ -24,18 +25,69 @@ export type ContextAnalysisInput = {
|
|
|
24
25
|
agents: readonly Agent[];
|
|
25
26
|
skills: readonly ContextSkill[];
|
|
26
27
|
tools: readonly ToolListItem[];
|
|
28
|
+
/** Whether tools contains the complete connected MCP schema catalog. Defaults to false. */
|
|
29
|
+
mcpSchemaCatalogAvailable?: boolean;
|
|
27
30
|
mcpServers: readonly ContextMcpServer[];
|
|
28
31
|
model?: ContextModel;
|
|
29
32
|
warnings?: readonly string[];
|
|
30
33
|
};
|
|
31
34
|
export type ContextCategoryId = "system" | "skill-catalog" | "loaded-skills" | "builtin-tool-schemas" | "vvoc-tool-schemas" | "external-tool-schemas" | "user-messages" | "assistant-messages" | "tool-results" | "files" | "compacted-summary" | "provider-only";
|
|
32
|
-
export type
|
|
35
|
+
export type ContextTokenMetric = {
|
|
36
|
+
estimatedTokens: number;
|
|
37
|
+
percent?: number;
|
|
38
|
+
};
|
|
39
|
+
export type ContextCategory = ContextTokenMetric & {
|
|
33
40
|
id: ContextCategoryId;
|
|
34
41
|
label: string;
|
|
35
|
-
estimatedTokens: number;
|
|
36
42
|
detail?: string;
|
|
37
43
|
source: "estimated" | "provider-residual";
|
|
38
44
|
};
|
|
45
|
+
export type ContextToolSource = {
|
|
46
|
+
kind: "builtin";
|
|
47
|
+
} | {
|
|
48
|
+
kind: "vvoc";
|
|
49
|
+
} | {
|
|
50
|
+
kind: "mcp";
|
|
51
|
+
server: string;
|
|
52
|
+
} | {
|
|
53
|
+
kind: "other";
|
|
54
|
+
};
|
|
55
|
+
export type ContextToolUsage = {
|
|
56
|
+
id: string;
|
|
57
|
+
source: ContextToolSource;
|
|
58
|
+
calls: number;
|
|
59
|
+
schemaKnown: boolean;
|
|
60
|
+
schema: ContextTokenMetric;
|
|
61
|
+
history: ContextTokenMetric;
|
|
62
|
+
total: ContextTokenMetric;
|
|
63
|
+
};
|
|
64
|
+
export type ContextMcpUsage = ContextMcpServer & {
|
|
65
|
+
toolCount?: number;
|
|
66
|
+
schemaKnown: boolean;
|
|
67
|
+
schema: ContextTokenMetric;
|
|
68
|
+
history: ContextTokenMetric;
|
|
69
|
+
total: ContextTokenMetric;
|
|
70
|
+
tools: ContextToolUsage[];
|
|
71
|
+
};
|
|
72
|
+
export type ContextToolReconciliation = {
|
|
73
|
+
schema: {
|
|
74
|
+
builtin: ContextTokenMetric;
|
|
75
|
+
vvoc: ContextTokenMetric;
|
|
76
|
+
external: ContextTokenMetric;
|
|
77
|
+
total: ContextTokenMetric;
|
|
78
|
+
};
|
|
79
|
+
history: {
|
|
80
|
+
toolResults: ContextTokenMetric;
|
|
81
|
+
loadedSkills: ContextTokenMetric;
|
|
82
|
+
total: ContextTokenMetric;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
export type ContextToolAttribution = {
|
|
86
|
+
tools: ContextToolUsage[];
|
|
87
|
+
mcpServers: ContextMcpUsage[];
|
|
88
|
+
otherTools: ContextToolUsage[];
|
|
89
|
+
reconciliation: ContextToolReconciliation;
|
|
90
|
+
};
|
|
39
91
|
export type ContextMeasuredUsage = {
|
|
40
92
|
usedTokens: number;
|
|
41
93
|
contextLimit?: number;
|
|
@@ -57,5 +109,6 @@ export type ContextAnalysis = {
|
|
|
57
109
|
compacted: boolean;
|
|
58
110
|
activeMessageCount: number;
|
|
59
111
|
mcpServers: ContextMcpServer[];
|
|
112
|
+
toolAttribution?: ContextToolAttribution;
|
|
60
113
|
warnings: string[];
|
|
61
114
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// FILE: src/tui/context/types.ts
|
|
2
2
|
// VERSION: 1.0.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE: Define bounded input and output shapes for the context TUI collector, analyzer, and view.
|
|
5
|
-
// SCOPE: Context categories,
|
|
4
|
+
// PURPOSE: Define bounded input and output shapes for the context TUI collector, detailed analyzer, and tabbed view.
|
|
5
|
+
// SCOPE: Context categories, reusable token metrics, schema observability, per-tool and per-MCP attribution, model metadata, warnings, and analysis input/output types.
|
|
6
6
|
// DEPENDS: [@opencode-ai/sdk/v2]
|
|
7
7
|
// LINKS: [M-PLUGIN-CONTEXT-TUI, V-M-PLUGIN-CONTEXT-TUI]
|
|
8
8
|
// ROLE: TYPES
|
|
@@ -11,15 +11,24 @@
|
|
|
11
11
|
//
|
|
12
12
|
// START_MODULE_MAP
|
|
13
13
|
// ContextSkill - Observable skill catalog entry.
|
|
14
|
+
// ContextMcpStatus - Canonical MCP status values exposed by OpenCode.
|
|
14
15
|
// ContextMcpServer - MCP name/status snapshot exposed by the TUI state.
|
|
15
16
|
// ContextModel - Current provider/model metadata and limits.
|
|
16
17
|
// ContextAnalysisInput - Raw bounded data accepted by the pure analyzer.
|
|
18
|
+
// ContextCategoryId - Stable overview category identifiers.
|
|
19
|
+
// ContextTokenMetric - Estimated token count and optional model-context percentage.
|
|
17
20
|
// ContextCategory - One estimated context category row.
|
|
18
|
-
//
|
|
21
|
+
// ContextToolSource - Deterministic built-in, vvoc, MCP, or other tool ownership.
|
|
22
|
+
// ContextToolUsage - Per-tool observable schema and active-history attribution, including whether schema data is known.
|
|
23
|
+
// ContextMcpUsage - Per-server aggregate with nested attributed tools and explicit schema-catalog availability.
|
|
24
|
+
// ContextToolReconciliation - Detailed schema and history subtotals aligned with overview categories.
|
|
25
|
+
// ContextToolAttribution - Sorted detailed tool, MCP, other, and reconciliation model.
|
|
26
|
+
// ContextMeasuredUsage - Latest provider-reported usage and model-capacity values.
|
|
27
|
+
// ContextAnalysis - Measured usage, estimated categories, detailed attribution, warnings, and metadata rendered by the dialog.
|
|
19
28
|
// END_MODULE_MAP
|
|
20
29
|
//
|
|
21
30
|
// START_CHANGE_SUMMARY
|
|
22
|
-
// LAST_CHANGE: [
|
|
31
|
+
// LAST_CHANGE: [DIRECT-FIX - Distinguished unavailable MCP schema catalogs from measured zero-token schemas.]
|
|
23
32
|
// END_CHANGE_SUMMARY
|
|
24
33
|
export {};
|
|
25
34
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tui/context/types.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,iBAAiB;AACjB,wBAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tui/context/types.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,iBAAiB;AACjB,wBAAwB;AACxB,uHAAuH;AACvH,0KAA0K;AAC1K,mCAAmC;AACnC,0DAA0D;AAC1D,gBAAgB;AAChB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,mDAAmD;AACnD,wEAAwE;AACxE,0EAA0E;AAC1E,+DAA+D;AAC/D,2EAA2E;AAC3E,8DAA8D;AAC9D,sFAAsF;AACtF,0DAA0D;AAC1D,oFAAoF;AACpF,0HAA0H;AAC1H,kHAAkH;AAClH,wGAAwG;AACxG,yFAAyF;AACzF,qFAAqF;AACrF,iIAAiI;AACjI,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,gHAAgH;AAChH,qBAAqB"}
|
|
@@ -1,3 +1,23 @@
|
|
|
1
1
|
import type { TuiPluginApi } from "@opencode-ai/plugin/tui";
|
|
2
|
+
import type { RGBA } from "@opentui/core";
|
|
2
3
|
import type { ContextAnalysis } from "./types.js";
|
|
4
|
+
type Color = RGBA | string;
|
|
5
|
+
type ContextTheme = {
|
|
6
|
+
text: Color;
|
|
7
|
+
textMuted: Color;
|
|
8
|
+
primary: Color;
|
|
9
|
+
warning: Color;
|
|
10
|
+
};
|
|
11
|
+
declare const CONTEXT_TABS: readonly ["overview", "tools", "mcp"];
|
|
12
|
+
export type ContextTab = (typeof CONTEXT_TABS)[number];
|
|
3
13
|
export declare function openContextDialog(api: TuiPluginApi, analysis: ContextAnalysis): void;
|
|
14
|
+
export declare function ContextDialogContent(props: {
|
|
15
|
+
analysis: ContextAnalysis;
|
|
16
|
+
keymap?: TuiPluginApi["keymap"];
|
|
17
|
+
theme: ContextTheme;
|
|
18
|
+
}): any;
|
|
19
|
+
export declare function selectContextTabForKey(current: ContextTab, keyName: string): ContextTab | undefined;
|
|
20
|
+
export declare function registerContextDialogKeymap(keymap: TuiPluginApi["keymap"], select: (keyName: string) => void): () => void;
|
|
21
|
+
export declare function calculateContextBodyHeight(terminalHeight: number): number;
|
|
22
|
+
export declare function renderMetricBar(percent: number | undefined, width?: number): string;
|
|
23
|
+
export {};
|
package/dist/tui/context/view.js
CHANGED
|
@@ -1,26 +1,171 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
|
|
2
|
+
import { useKeyboard, useTerminalDimensions } from "@opentui/solid";
|
|
3
|
+
import { createMemo, createSignal, onCleanup } from "solid-js";
|
|
4
|
+
const CONTEXT_TABS = ["overview", "tools", "mcp"];
|
|
5
|
+
const CONTEXT_DIALOG_MAX_BODY_HEIGHT = 16;
|
|
6
|
+
const CONTEXT_DIALOG_RESERVED_ROWS = 13;
|
|
2
7
|
// START_BLOCK_CONTEXT_DIALOG
|
|
3
8
|
export function openContextDialog(api, analysis) {
|
|
4
9
|
const theme = api.theme.current;
|
|
5
|
-
api.ui.dialog.replace(() => (
|
|
10
|
+
api.ui.dialog.replace(() => (_jsx(ContextDialogContent, { analysis: analysis, keymap: api.keymap, theme: {
|
|
11
|
+
text: theme.text,
|
|
12
|
+
textMuted: theme.textMuted,
|
|
13
|
+
primary: theme.primary,
|
|
14
|
+
warning: theme.warning,
|
|
15
|
+
} })));
|
|
6
16
|
api.ui.dialog.setSize("xlarge");
|
|
7
17
|
}
|
|
18
|
+
export function ContextDialogContent(props) {
|
|
19
|
+
const [tab, setTab] = createSignal("overview");
|
|
20
|
+
const dimensions = useTerminalDimensions();
|
|
21
|
+
const narrow = createMemo(() => dimensions().width < 72);
|
|
22
|
+
const bodyHeight = createMemo(() => calculateContextBodyHeight(dimensions().height));
|
|
23
|
+
const barWidth = createMemo(() => calculateMetricBarWidth(dimensions().width));
|
|
24
|
+
if (props.keymap) {
|
|
25
|
+
onCleanup(registerContextDialogKeymap(props.keymap, (keyName) => {
|
|
26
|
+
const selected = selectContextTabForKey(tab(), keyName);
|
|
27
|
+
if (selected !== undefined)
|
|
28
|
+
setTab(selected);
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
useKeyboard((event) => {
|
|
33
|
+
const selected = selectContextTabForKey(tab(), event.name);
|
|
34
|
+
if (selected === undefined)
|
|
35
|
+
return;
|
|
36
|
+
event.preventDefault();
|
|
37
|
+
event.stopPropagation();
|
|
38
|
+
setTab(selected);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return (_jsxs("box", { flexDirection: "column", gap: 1, paddingLeft: 1, paddingRight: 1, children: [_jsx("text", { fg: props.theme.text, wrapMode: "word", children: `Context usage\n${formatModel(props.analysis)}` }), _jsx(UsageSummary, { analysis: props.analysis, primary: props.theme.primary, muted: props.theme.textMuted, barWidth: barWidth() }), _jsx(TabBar, { tab: tab, theme: props.theme }), _jsx("scrollbox", { focused: true, height: bodyHeight(), scrollX: false, scrollY: true, viewportCulling: true, children: _jsx("box", { flexDirection: "column", gap: 1, width: "100%", children: () => tab() === "overview" ? (_jsx(OverviewTab, { analysis: props.analysis, theme: props.theme, narrow: narrow(), barWidth: barWidth() })) : tab() === "tools" ? (_jsx(ToolsTab, { analysis: props.analysis, theme: props.theme, narrow: narrow() })) : (_jsx(McpTab, { analysis: props.analysis, theme: props.theme, narrow: narrow() })) }) }), _jsx("text", { fg: props.theme.textMuted, wrapMode: "word", children: "Measured = latest provider usage. ~ = provider-neutral estimate. Percentages use only the current model context limit." })] }));
|
|
42
|
+
}
|
|
8
43
|
// END_BLOCK_CONTEXT_DIALOG
|
|
44
|
+
// START_BLOCK_TAB_NAVIGATION
|
|
45
|
+
export function selectContextTabForKey(current, keyName) {
|
|
46
|
+
if (keyName === "1")
|
|
47
|
+
return "overview";
|
|
48
|
+
if (keyName === "2")
|
|
49
|
+
return "tools";
|
|
50
|
+
if (keyName === "3")
|
|
51
|
+
return "mcp";
|
|
52
|
+
if (keyName !== "left" && keyName !== "right")
|
|
53
|
+
return undefined;
|
|
54
|
+
const index = CONTEXT_TABS.indexOf(current);
|
|
55
|
+
const delta = keyName === "left" ? -1 : 1;
|
|
56
|
+
return CONTEXT_TABS[(index + delta + CONTEXT_TABS.length) % CONTEXT_TABS.length];
|
|
57
|
+
}
|
|
58
|
+
export function registerContextDialogKeymap(keymap, select) {
|
|
59
|
+
const commands = [
|
|
60
|
+
{ name: "vvoc.context.tab.left", key: "left", title: "Previous context tab" },
|
|
61
|
+
{ name: "vvoc.context.tab.right", key: "right", title: "Next context tab" },
|
|
62
|
+
{ name: "vvoc.context.tab.overview", key: "1", title: "Show context Overview" },
|
|
63
|
+
{ name: "vvoc.context.tab.tools", key: "2", title: "Show context Tools" },
|
|
64
|
+
{ name: "vvoc.context.tab.mcp", key: "3", title: "Show context MCP" },
|
|
65
|
+
];
|
|
66
|
+
return keymap.registerLayer({
|
|
67
|
+
mode: "modal",
|
|
68
|
+
commands: commands.map((command) => ({
|
|
69
|
+
name: command.name,
|
|
70
|
+
title: command.title,
|
|
71
|
+
run() {
|
|
72
|
+
select(command.key);
|
|
73
|
+
},
|
|
74
|
+
})),
|
|
75
|
+
bindings: commands.map((command) => ({
|
|
76
|
+
key: command.key,
|
|
77
|
+
cmd: command.name,
|
|
78
|
+
desc: command.title,
|
|
79
|
+
})),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
export function calculateContextBodyHeight(terminalHeight) {
|
|
83
|
+
const normalized = Number.isFinite(terminalHeight) ? Math.floor(terminalHeight) : 34;
|
|
84
|
+
const hostTopOffset = Math.floor(normalized / 4);
|
|
85
|
+
const centeredPanelHeight = normalized - hostTopOffset * 2;
|
|
86
|
+
const available = centeredPanelHeight - CONTEXT_DIALOG_RESERVED_ROWS;
|
|
87
|
+
return Math.max(1, Math.min(CONTEXT_DIALOG_MAX_BODY_HEIGHT, available));
|
|
88
|
+
}
|
|
89
|
+
function calculateMetricBarWidth(terminalWidth) {
|
|
90
|
+
const normalized = Number.isFinite(terminalWidth) ? Math.floor(terminalWidth) : 80;
|
|
91
|
+
return Math.max(8, Math.min(28, normalized - 34));
|
|
92
|
+
}
|
|
93
|
+
// END_BLOCK_TAB_NAVIGATION
|
|
94
|
+
// START_BLOCK_OVERVIEW_TAB
|
|
95
|
+
function OverviewTab(props) {
|
|
96
|
+
return (_jsxs("box", { flexDirection: "column", gap: 1, children: [_jsx("text", { fg: props.theme.text, children: "Approximate breakdown" }), props.analysis.categories.map((category) => (_jsx(MetricRow, { label: category.source === "estimated" ? `~ ${category.label}` : category.label, metric: category, color: category.source === "provider-residual" ? props.theme.warning : props.theme.textMuted, valueColor: props.theme.text, barColor: category.source === "provider-residual" ? props.theme.warning : props.theme.primary, narrow: props.narrow, barWidth: props.barWidth }))), _jsxs("box", { flexDirection: props.narrow ? "column" : "row", justifyContent: props.narrow ? "flex-start" : "space-between", children: [_jsx("text", { fg: props.theme.textMuted, children: "Active messages" }), _jsxs("text", { fg: props.theme.text, children: [props.analysis.activeMessageCount, props.analysis.compacted ? " (after compaction)" : ""] })] }), props.analysis.estimationDriftTokens > 0 ? (_jsxs("text", { fg: props.theme.warning, wrapMode: "word", children: ["Estimate drift: +", formatTokens(props.analysis.estimationDriftTokens), " above provider usage"] })) : null, props.analysis.warnings.slice(0, 3).map((warning) => (_jsxs("text", { fg: props.theme.warning, wrapMode: "word", children: ["Warning: ", warning] })))] }));
|
|
97
|
+
}
|
|
98
|
+
function MetricRow(props) {
|
|
99
|
+
return (_jsxs("box", { flexDirection: "column", children: [_jsxs("box", { flexDirection: props.narrow ? "column" : "row", justifyContent: props.narrow ? "flex-start" : "space-between", children: [_jsx("text", { fg: props.color, wrapMode: "word", children: props.label }), _jsx("text", { fg: props.valueColor, children: formatMetric(props.metric) })] }), _jsx("text", { fg: props.barColor, children: renderMetricBar(props.metric.percent, props.barWidth) })] }));
|
|
100
|
+
}
|
|
101
|
+
// END_BLOCK_OVERVIEW_TAB
|
|
102
|
+
// START_BLOCK_TOOLS_TAB
|
|
103
|
+
function ToolsTab(props) {
|
|
104
|
+
const tools = props.analysis.toolAttribution?.tools ?? [];
|
|
105
|
+
if (!props.analysis.toolAttribution) {
|
|
106
|
+
return _jsx("text", { fg: props.theme.warning, children: "Detailed tool attribution is unavailable." });
|
|
107
|
+
}
|
|
108
|
+
if (tools.length === 0) {
|
|
109
|
+
return _jsx("text", { fg: props.theme.textMuted, children: "No current tool schemas or active tool history." });
|
|
110
|
+
}
|
|
111
|
+
return (_jsxs("box", { flexDirection: "column", gap: 1, children: [_jsx("text", { fg: props.theme.text, children: "Tools \u00B7 schema + active post-compaction history" }), tools.map((tool) => (_jsx(ToolCard, { tool: tool, theme: props.theme, narrow: props.narrow })))] }));
|
|
112
|
+
}
|
|
113
|
+
function ToolCard(props) {
|
|
114
|
+
return (_jsxs("box", { flexDirection: "column", paddingLeft: props.nested ? 2 : 0, children: [_jsxs("box", { flexDirection: props.narrow ? "column" : "row", justifyContent: props.narrow ? "flex-start" : "space-between", children: [_jsx("text", { fg: props.theme.text, wrapMode: "char", children: props.tool.id }), _jsx("text", { fg: props.theme.textMuted, children: formatToolSource(props.tool.source) })] }), _jsxs("text", { fg: props.theme.textMuted, children: ["active calls ", props.tool.calls] }), _jsxs("text", { fg: props.theme.textMuted, wrapMode: "word", children: ["schema ", formatKnownMetric(props.tool.schema, props.tool.schemaKnown), " \u00B7 history", " ", formatMetric(props.tool.history)] }), _jsxs("text", { fg: props.theme.primary, children: [props.tool.schemaKnown ? "total" : "known total", " ", formatMetric(props.tool.total)] })] }));
|
|
115
|
+
}
|
|
116
|
+
// END_BLOCK_TOOLS_TAB
|
|
117
|
+
// START_BLOCK_MCP_TAB
|
|
118
|
+
function McpTab(props) {
|
|
119
|
+
const attribution = props.analysis.toolAttribution;
|
|
120
|
+
if (!attribution) {
|
|
121
|
+
return (_jsxs("box", { flexDirection: "column", gap: 1, children: [_jsx("text", { fg: props.theme.warning, children: "Detailed MCP attribution is unavailable." }), props.analysis.mcpServers.map((server) => (_jsxs("text", { fg: props.theme.textMuted, wrapMode: "word", children: [server.name, " \u00B7 ", server.status] })))] }));
|
|
122
|
+
}
|
|
123
|
+
return (_jsxs("box", { flexDirection: "column", gap: 1, children: [_jsx("text", { fg: props.theme.text, children: "MCP servers \u00B7 observable schemas + retained active history" }), attribution.mcpServers.length === 0 ? (_jsx("text", { fg: props.theme.textMuted, children: "No MCP servers reported." })) : (attribution.mcpServers.map((server) => (_jsx(McpServerCard, { server: server, theme: props.theme, narrow: props.narrow })))), _jsx("text", { fg: props.theme.text, children: "Other external/plugin" }), attribution.otherTools.length === 0 ? (_jsx("text", { fg: props.theme.textMuted, children: "No unattributed external or plugin tools." })) : (attribution.otherTools.map((tool) => (_jsx(ToolCard, { tool: tool, theme: props.theme, narrow: props.narrow, nested: true }))))] }));
|
|
124
|
+
}
|
|
125
|
+
function McpServerCard(props) {
|
|
126
|
+
return (_jsxs("box", { flexDirection: "column", children: [_jsxs("box", { flexDirection: props.narrow ? "column" : "row", justifyContent: props.narrow ? "flex-start" : "space-between", children: [_jsx("text", { fg: props.theme.text, wrapMode: "word", children: props.server.name }), _jsx("text", { fg: props.server.status === "connected" ? props.theme.primary : props.theme.warning, children: props.server.status })] }), _jsxs("text", { fg: props.theme.textMuted, children: ["current tools ", props.server.toolCount ?? "unavailable"] }), _jsxs("text", { fg: props.theme.textMuted, wrapMode: "word", children: ["schema ", formatKnownMetric(props.server.schema, props.server.schemaKnown), " \u00B7 history", " ", formatMetric(props.server.history)] }), _jsxs("text", { fg: props.theme.primary, children: [props.server.schemaKnown ? "total" : "known total", " ", formatMetric(props.server.total)] }), !props.server.schemaKnown && props.server.status === "connected" ? (_jsx("text", { fg: props.theme.textMuted, wrapMode: "word", children: "OpenCode API does not expose this MCP schema catalog." })) : null, props.server.error ? (_jsx("text", { fg: props.theme.warning, wrapMode: "word", children: props.server.error })) : null, props.server.tools.length === 0 ? (_jsx("text", { fg: props.theme.textMuted, wrapMode: "word", children: props.server.schemaKnown
|
|
127
|
+
? "No attributed current schemas or active history."
|
|
128
|
+
: "No attributed active history; current schemas are unavailable." })) : (props.server.tools.map((tool) => (_jsx(ToolCard, { tool: tool, theme: props.theme, narrow: props.narrow, nested: true }))))] }));
|
|
129
|
+
}
|
|
130
|
+
// END_BLOCK_MCP_TAB
|
|
131
|
+
function TabBar(props) {
|
|
132
|
+
return (_jsx("text", { fg: props.theme.primary, wrapMode: "word", children: () => `${formatTabBar(props.tab())}\n←/→ tabs · 1/2/3 select · ↑/↓ scroll · Esc close` }));
|
|
133
|
+
}
|
|
9
134
|
function UsageSummary(props) {
|
|
10
135
|
const measured = props.analysis.measured;
|
|
11
136
|
if (!measured) {
|
|
12
|
-
return (_jsx("text", { fg: props.muted, children: "Provider usage is not available until the session has an assistant turn." }));
|
|
137
|
+
return (_jsx("text", { fg: props.muted, wrapMode: "word", children: "Provider usage is not available until the session has an assistant turn." }));
|
|
13
138
|
}
|
|
14
139
|
const percent = measured.percentUsed;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
140
|
+
const usageLine = `${renderMetricBar(percent, props.barWidth)} ${formatTokens(measured.usedTokens)}${measured.contextLimit ? ` / ${formatTokens(measured.contextLimit)}` : ""}${percent === undefined ? "" : ` (${percent.toFixed(1)}%)`}`;
|
|
141
|
+
const tokenLine = `input ${formatTokens(measured.inputTokens)} · cache read ${formatTokens(measured.cacheReadTokens)} · output ${formatTokens(measured.outputTokens)}${measured.remainingTokens === undefined
|
|
142
|
+
? ""
|
|
143
|
+
: ` · remaining ${formatTokens(measured.remainingTokens)}`}`;
|
|
144
|
+
return (_jsx("text", { fg: props.primary, wrapMode: "word", children: `${usageLine}\n${tokenLine}` }));
|
|
18
145
|
}
|
|
19
|
-
function
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return
|
|
146
|
+
function formatTabBar(active) {
|
|
147
|
+
return CONTEXT_TABS.map((tab, index) => active === tab ? `[${index + 1} ${formatTabName(tab)}]` : `${index + 1} ${formatTabName(tab)}`).join(" ");
|
|
148
|
+
}
|
|
149
|
+
function formatTabName(tab) {
|
|
150
|
+
return tab === "mcp" ? "MCP" : tab[0].toUpperCase() + tab.slice(1);
|
|
151
|
+
}
|
|
152
|
+
function formatToolSource(source) {
|
|
153
|
+
if (source.kind === "builtin")
|
|
154
|
+
return "Built-in";
|
|
155
|
+
if (source.kind === "vvoc")
|
|
156
|
+
return "vvoc";
|
|
157
|
+
if (source.kind === "mcp")
|
|
158
|
+
return `MCP · ${source.server}`;
|
|
159
|
+
return "Other external/plugin";
|
|
160
|
+
}
|
|
161
|
+
function formatMetric(metric) {
|
|
162
|
+
return `${formatTokens(metric.estimatedTokens)} · ${formatPercent(metric.percent)}`;
|
|
163
|
+
}
|
|
164
|
+
function formatKnownMetric(metric, known) {
|
|
165
|
+
return known ? formatMetric(metric) : "unavailable";
|
|
166
|
+
}
|
|
167
|
+
function formatPercent(percent) {
|
|
168
|
+
return percent === undefined ? "—" : `${percent.toFixed(1)}%`;
|
|
24
169
|
}
|
|
25
170
|
function formatModel(analysis) {
|
|
26
171
|
if (!analysis.model)
|
|
@@ -35,10 +180,10 @@ function formatTokens(tokens) {
|
|
|
35
180
|
return `${(tokens / 1_000).toFixed(tokens >= 100_000 ? 0 : 1)}k`;
|
|
36
181
|
return String(tokens);
|
|
37
182
|
}
|
|
38
|
-
function
|
|
39
|
-
const
|
|
183
|
+
export function renderMetricBar(percent, width = 28) {
|
|
184
|
+
const safeWidth = Number.isFinite(width) ? Math.max(1, Math.floor(width)) : 28;
|
|
40
185
|
const normalized = percent === undefined ? 0 : Math.min(100, Math.max(0, percent));
|
|
41
|
-
const filled = Math.round((normalized / 100) *
|
|
42
|
-
return `[${"█".repeat(filled)}${"░".repeat(
|
|
186
|
+
const filled = Math.round((normalized / 100) * safeWidth);
|
|
187
|
+
return `[${"█".repeat(filled)}${"░".repeat(safeWidth - filled)}]`;
|
|
43
188
|
}
|
|
44
189
|
//# sourceMappingURL=view.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/tui/context/view.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/tui/context/view.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@osovv/vv-opencode",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.6",
|
|
4
4
|
"description": "A curated, opinionated set of OpenCode plugins for spec-first, review-driven, safer agentic development.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
"test": "bun test",
|
|
82
82
|
"check": "bun run typecheck && bun run lint && bun run fmt:check && bun test",
|
|
83
83
|
"pack:check": "bun run build && bun -e \"const root = await import('./dist/index.js'); if (!('GuardianPlugin' in root)) throw new Error('dist root export missing GuardianPlugin'); if (!('HashlineEditPlugin' in root)) throw new Error('dist root export missing HashlineEditPlugin'); if (!('ModelRolesPlugin' in root)) throw new Error('dist root export missing ModelRolesPlugin'); if (!('SystemContextInjectionPlugin' in root)) throw new Error('dist root export missing SystemContextInjectionPlugin'); if (!('WorkflowPlugin' in root)) throw new Error('dist root export missing WorkflowPlugin'); if (!('SecretsRedactionPlugin' in root)) throw new Error('dist root export missing SecretsRedactionPlugin'); const tui = await import('./dist/tui.js'); if (!tui.default || typeof tui.default.tui !== 'function') throw new Error('dist TUI export missing default tui module'); await import('./dist/plugins/guardian/index.js'); await import('./dist/plugins/hashline-edit/index.js'); await import('./dist/plugins/model-roles/index.js'); await import('./dist/plugins/system-context-injection/index.js'); await import('./dist/plugins/workflow/index.js'); await import('./dist/plugins/secrets-redaction/index.js')\" && npm pack --dry-run",
|
|
84
|
+
"tui:local": "bun scripts/tui-local.ts",
|
|
84
85
|
"release:check": "bun scripts/release-check.ts",
|
|
85
86
|
"release:bump": "bun scripts/release-bump.ts",
|
|
86
87
|
"prepare": "lefthook install --force"
|
|
@@ -102,6 +103,7 @@
|
|
|
102
103
|
"lefthook": "2.1.5",
|
|
103
104
|
"oxfmt": "0.43.0",
|
|
104
105
|
"oxlint": "1.58.0",
|
|
106
|
+
"solid-js": "1.9.12",
|
|
105
107
|
"typescript": "5.8.2",
|
|
106
108
|
"conventional-changelog-cli": "^5.0.0",
|
|
107
109
|
"@commitlint/cli": "^19.0.0",
|
|
@@ -110,7 +112,8 @@
|
|
|
110
112
|
"peerDependencies": {
|
|
111
113
|
"@opentui/core": ">=0.4.3",
|
|
112
114
|
"@opentui/keymap": ">=0.4.3",
|
|
113
|
-
"@opentui/solid": ">=0.4.3"
|
|
115
|
+
"@opentui/solid": ">=0.4.3",
|
|
116
|
+
"solid-js": ">=1.9.12"
|
|
114
117
|
},
|
|
115
118
|
"engines": {
|
|
116
119
|
"bun": ">=1.3.8",
|
package/schemas/vvoc/v3.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://cdn.jsdelivr.net/npm/@osovv/vv-opencode@1.1.
|
|
3
|
+
"$id": "https://cdn.jsdelivr.net/npm/@osovv/vv-opencode@1.1.6/schemas/vvoc/v3.json",
|
|
4
4
|
"title": "vvoc config",
|
|
5
5
|
"description": "Canonical vvoc configuration document.",
|
|
6
6
|
"type": "object",
|