@osovv/vv-opencode 1.1.0 → 1.1.1

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +25 -11
  3. package/dist/commands/doctor.js +7 -1
  4. package/dist/commands/doctor.js.map +1 -1
  5. package/dist/commands/init.js +14 -5
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/install.js +6 -3
  8. package/dist/commands/install.js.map +1 -1
  9. package/dist/commands/launch.d.ts +1 -0
  10. package/dist/commands/launch.js +20 -8
  11. package/dist/commands/launch.js.map +1 -1
  12. package/dist/commands/status.js +8 -2
  13. package/dist/commands/status.js.map +1 -1
  14. package/dist/commands/sync.js +6 -3
  15. package/dist/commands/sync.js.map +1 -1
  16. package/dist/lib/config-layers.d.ts +6 -0
  17. package/dist/lib/config-layers.js +65 -3
  18. package/dist/lib/config-layers.js.map +1 -1
  19. package/dist/lib/opencode.d.ts +16 -0
  20. package/dist/lib/opencode.js +144 -9
  21. package/dist/lib/opencode.js.map +1 -1
  22. package/dist/lib/plugin-toggle-config.d.ts +1 -1
  23. package/dist/lib/plugin-toggle-config.js +2 -0
  24. package/dist/lib/plugin-toggle-config.js.map +1 -1
  25. package/dist/tui/context/analyze.d.ts +4 -0
  26. package/dist/tui/context/analyze.js +256 -0
  27. package/dist/tui/context/analyze.js.map +1 -0
  28. package/dist/tui/context/collect.d.ts +3 -0
  29. package/dist/tui/context/collect.js +94 -0
  30. package/dist/tui/context/collect.js.map +1 -0
  31. package/dist/tui/context/estimate.d.ts +2 -0
  32. package/dist/tui/context/estimate.js +49 -0
  33. package/dist/tui/context/estimate.js.map +1 -0
  34. package/dist/tui/context/plugin.d.ts +10 -0
  35. package/dist/tui/context/plugin.js +91 -0
  36. package/dist/tui/context/plugin.js.map +1 -0
  37. package/dist/tui/context/types.d.ts +61 -0
  38. package/dist/tui/context/types.js +25 -0
  39. package/dist/tui/context/types.js.map +1 -0
  40. package/dist/tui/context/view.d.ts +3 -0
  41. package/dist/tui/context/view.js +45 -0
  42. package/dist/tui/context/view.js.map +1 -0
  43. package/dist/tui.d.ts +7 -0
  44. package/dist/tui.js +27 -0
  45. package/dist/tui.js.map +1 -0
  46. package/package.json +16 -4
  47. package/schemas/vvoc/v3.json +1 -1
@@ -1,8 +1,8 @@
1
1
  // FILE: src/lib/config-layers.ts
2
2
  // VERSION: 1.0.0
3
3
  // START_MODULE_CONTRACT
4
- // PURPOSE: Resolve vvoc and OpenCode config layers for global, project, and effective scopes.
5
- // SCOPE: Env override handling, ancestor project-root discovery, project write-root selection, global fallback paths, singleton runtime vvoc loading, and source metadata.
4
+ // PURPOSE: Resolve vvoc, OpenCode runtime, and OpenCode TUI config layers for global, project, and effective scopes.
5
+ // SCOPE: Env override handling, ancestor project-root discovery, project write-root selection, global fallback paths, dedicated TUI config selection, singleton runtime vvoc loading, and source metadata.
6
6
  // DEPENDS: [node:fs/promises, node:path, src/lib/vvoc-config.ts, src/lib/vvoc-paths.ts]
7
7
  // LINKS: [M-CONFIG-LAYERS, M-CLI-CONFIG]
8
8
  // ROLE: RUNTIME
@@ -12,6 +12,7 @@
12
12
  // START_MODULE_MAP
13
13
  // VVOC_CONFIG_ENV - Environment variable name for explicit vvoc config selection.
14
14
  // OPENCODE_CONFIG_ENV - Environment variable name for explicit OpenCode config selection.
15
+ // OPENCODE_TUI_CONFIG_ENV - Environment variable name for explicit OpenCode TUI config selection.
15
16
  // ConfigWriteScope - Supported write scopes for mutating commands.
16
17
  // ConfigReadScope - Supported read scopes for list/show/diagnostic commands.
17
18
  // ConfigSourceKind - Source kind labels for selected config sources.
@@ -25,6 +26,7 @@
25
26
  // resolveProjectOpenCodeConfigPath - Selects the canonical project .opencode/opencode.json(c) path.
26
27
  // resolveVvocConfigSource - Resolves vvoc source metadata for global, project, or effective reads.
27
28
  // resolveOpenCodeConfigSource - Resolves OpenCode source metadata for global, project, or effective reads.
29
+ // resolveOpenCodeTuiConfigSource - Resolves OpenCode TUI source metadata for global, project, or effective reads.
28
30
  // resolveConfigWriteTargets - Returns canonical global or project write paths.
29
31
  // loadVvocConfigForRead - Loads vvoc config for CLI read/list/show commands without creating files.
30
32
  // VvocConfigSnapshot - Immutable runtime vvoc config snapshot plus source metadata.
@@ -34,6 +36,7 @@
34
36
  // END_MODULE_MAP
35
37
  //
36
38
  // START_CHANGE_SUMMARY
39
+ // LAST_CHANGE: [C-CONTEXT-TUI-PLUGIN - Added layered dedicated tui.json(c) source and write-target resolution.]
37
40
  // LAST_CHANGE: [v1.1.0 - Replaced keyed runtime memoization with a single loadVvocConfig startup promise shared by all plugins.]
38
41
  // LAST_CHANGE: [v1.0.1 - Memoized loadEffectiveVvocConfigForRuntime to eliminate redundant ancestor discovery across multiple plugins during startup.]
39
42
  // LAST_CHANGE: [v1.0.0 - Added layered config source discovery, write target resolution, and runtime vvoc loading.]
@@ -44,21 +47,25 @@ import { createDefaultVvocConfig, parseVvocConfigText } from "./vvoc-config.js";
44
47
  import { getGlobalOpencodeDir, getGlobalVvocConfigPath, getGlobalVvocDir, getProjectOpencodeDir, getProjectVvocConfigPath, } from "./vvoc-paths.js";
45
48
  export const VVOC_CONFIG_ENV = "VVOC_CONFIG";
46
49
  export const OPENCODE_CONFIG_ENV = "OPENCODE_CONFIG";
50
+ export const OPENCODE_TUI_CONFIG_ENV = "OPENCODE_TUI_CONFIG";
47
51
  let runtimeConfigPromise;
48
52
  let runtimeConfigSignature;
49
53
  const OPENCODE_CONFIG_FILE_NAMES = ["opencode.json", "opencode.jsonc"];
54
+ const OPENCODE_TUI_CONFIG_FILE_NAMES = ["tui.json", "tui.jsonc"];
50
55
  // START_BLOCK_PROJECT_LAYER_DISCOVERY
51
56
  export async function findNearestProjectConfigRoot(cwd) {
52
57
  let currentDir = resolve(cwd);
53
58
  while (true) {
54
59
  const vvocConfigPath = getProjectVvocConfigPath(currentDir);
55
60
  const opencodeConfigPath = await findExistingProjectOpenCodeConfigPath(currentDir);
61
+ const opencodeTuiConfigPath = await findExistingProjectOpenCodeTuiConfigPath(currentDir);
56
62
  const hasVvocConfig = await pathExists(vvocConfigPath);
57
- if (hasVvocConfig || opencodeConfigPath) {
63
+ if (hasVvocConfig || opencodeConfigPath || opencodeTuiConfigPath) {
58
64
  return {
59
65
  rootDir: currentDir,
60
66
  vvocConfigPath: hasVvocConfig ? vvocConfigPath : undefined,
61
67
  opencodeConfigPath,
68
+ opencodeTuiConfigPath,
62
69
  };
63
70
  }
64
71
  const parentDir = dirname(currentDir);
@@ -118,6 +125,23 @@ export async function resolveOpenCodeConfigSource(options) {
118
125
  }
119
126
  return resolveGlobalOpenCodeSource(options.configDir);
120
127
  }
128
+ export async function resolveOpenCodeTuiConfigSource(options) {
129
+ if (options.scope === "global") {
130
+ return resolveGlobalOpenCodeTuiSource(options.configDir);
131
+ }
132
+ if (options.scope === "project") {
133
+ return resolveProjectOpenCodeTuiSource(options.cwd);
134
+ }
135
+ const envSource = readEnvConfigSource(options.env, OPENCODE_TUI_CONFIG_ENV);
136
+ if (envSource) {
137
+ return envSource;
138
+ }
139
+ const projectSource = await resolveProjectOpenCodeTuiSource(options.cwd);
140
+ if (projectSource.kind === "project") {
141
+ return projectSource;
142
+ }
143
+ return resolveGlobalOpenCodeTuiSource(options.configDir);
144
+ }
121
145
  export async function resolveConfigWriteTargets(options) {
122
146
  if (options.scope === "global") {
123
147
  const opencodeBaseDir = getGlobalOpencodeDir(options.configDir);
@@ -127,6 +151,7 @@ export async function resolveConfigWriteTargets(options) {
127
151
  opencodeBaseDir,
128
152
  vvocBaseDir: getGlobalVvocDir(options.configDir),
129
153
  opencodeConfigPath,
154
+ opencodeTuiConfigPath: await selectExistingPath(OPENCODE_TUI_CONFIG_FILE_NAMES.map((name) => join(opencodeBaseDir, name))),
130
155
  vvocConfigPath: getGlobalVvocConfigPath(options.configDir),
131
156
  };
132
157
  }
@@ -138,6 +163,8 @@ export async function resolveConfigWriteTargets(options) {
138
163
  opencodeBaseDir,
139
164
  vvocBaseDir: dirname(getProjectVvocConfigPath(projectRoot)),
140
165
  opencodeConfigPath: await resolveProjectOpenCodeConfigPath(projectRoot),
166
+ opencodeTuiConfigPath: (await findExistingProjectOpenCodeTuiConfigPath(projectRoot)) ??
167
+ join(opencodeBaseDir, "tui.json"),
141
168
  vvocConfigPath: getProjectVvocConfigPath(projectRoot),
142
169
  };
143
170
  }
@@ -274,6 +301,18 @@ async function resolveProjectOpenCodeSource(cwd) {
274
301
  reason: "project OpenCode config missing; run vvoc install --scope project",
275
302
  };
276
303
  }
304
+ async function resolveProjectOpenCodeTuiSource(cwd) {
305
+ const root = await findNearestProjectConfigRoot(cwd);
306
+ if (root?.opencodeTuiConfigPath) {
307
+ return { kind: "project", path: root.opencodeTuiConfigPath, rootDir: root.rootDir };
308
+ }
309
+ return {
310
+ kind: "missing",
311
+ path: root ? join(getProjectOpencodeDir(root.rootDir), "tui.json") : undefined,
312
+ rootDir: root?.rootDir,
313
+ reason: "project OpenCode TUI config missing; run vvoc install --scope project",
314
+ };
315
+ }
277
316
  async function resolveGlobalVvocSource(configDir) {
278
317
  const path = getGlobalVvocConfigPath(configDir);
279
318
  return (await pathExists(path))
@@ -291,6 +330,17 @@ async function resolveGlobalOpenCodeSource(configDir) {
291
330
  reason: "global OpenCode config missing",
292
331
  };
293
332
  }
333
+ async function resolveGlobalOpenCodeTuiSource(configDir) {
334
+ const baseDir = getGlobalOpencodeDir(configDir);
335
+ const path = await findExistingOpenCodeTuiConfigPath(baseDir);
336
+ return path
337
+ ? { kind: "global", path }
338
+ : {
339
+ kind: "missing",
340
+ path: join(baseDir, "tui.json"),
341
+ reason: "global OpenCode TUI config missing",
342
+ };
343
+ }
294
344
  function readEnvConfigSource(env, name) {
295
345
  const value = env ? env[name] : process.env[name];
296
346
  if (typeof value !== "string" || !value.trim()) {
@@ -301,6 +351,9 @@ function readEnvConfigSource(env, name) {
301
351
  async function findExistingProjectOpenCodeConfigPath(projectRoot) {
302
352
  return findExistingOpenCodeConfigPath(getProjectOpencodeDir(projectRoot));
303
353
  }
354
+ async function findExistingProjectOpenCodeTuiConfigPath(projectRoot) {
355
+ return findExistingOpenCodeTuiConfigPath(getProjectOpencodeDir(projectRoot));
356
+ }
304
357
  async function findExistingOpenCodeConfigPath(baseDir) {
305
358
  for (const name of OPENCODE_CONFIG_FILE_NAMES) {
306
359
  const candidate = join(baseDir, name);
@@ -310,6 +363,15 @@ async function findExistingOpenCodeConfigPath(baseDir) {
310
363
  }
311
364
  return undefined;
312
365
  }
366
+ async function findExistingOpenCodeTuiConfigPath(baseDir) {
367
+ for (const name of OPENCODE_TUI_CONFIG_FILE_NAMES) {
368
+ const candidate = join(baseDir, name);
369
+ if (await pathExists(candidate)) {
370
+ return candidate;
371
+ }
372
+ }
373
+ return undefined;
374
+ }
313
375
  async function selectExistingPath(candidates) {
314
376
  for (const candidate of candidates) {
315
377
  if (await pathExists(candidate)) {
@@ -1 +1 @@
1
- {"version":3,"file":"config-layers.js","sourceRoot":"","sources":["../../src/lib/config-layers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-layers.js","sourceRoot":"","sources":["../../src/lib/config-layers.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,10 @@ import { type ConfigReadScope, type ConfigSource } from "./config-layers.js";
6
6
  export declare const CLI_NAME = "vvoc";
7
7
  export { PACKAGE_NAME };
8
8
  export declare const OPENCODE_SCHEMA_URL = "https://opencode.ai/config.json";
9
+ export declare const OPENCODE_TUI_SCHEMA_URL = "https://opencode.ai/tui.json";
10
+ export declare const TUI_PACKAGE_SPECIFIER = "@osovv/vv-opencode/tui";
9
11
  type JsonObject = Record<string, unknown>;
12
+ export type TuiPluginEntry = string | [string, JsonObject];
10
13
  export type OpenCodeDefaultModelKey = "model" | "small_model";
11
14
  export type Scope = "global" | "project";
12
15
  export type ResolvedPaths = {
@@ -21,6 +24,8 @@ export type ResolvedPaths = {
21
24
  managedSkillsDirPath: string;
22
25
  opencodeConfigPath: string;
23
26
  opencodeAlternatePaths: string[];
27
+ opencodeTuiConfigPath: string;
28
+ opencodeTuiAlternatePaths: string[];
24
29
  };
25
30
  export type WriteResult = {
26
31
  action: "created" | "updated" | "kept" | "skipped";
@@ -42,6 +47,14 @@ export type InstallationInspection = {
42
47
  pluginConfigured: boolean;
43
48
  plugins: string[];
44
49
  };
50
+ tui: {
51
+ path: string;
52
+ exists: boolean;
53
+ alternates: string[];
54
+ parseError?: string;
55
+ pluginConfigured: boolean;
56
+ plugins: TuiPluginEntry[];
57
+ };
45
58
  vvoc: {
46
59
  path: string;
47
60
  exists: boolean;
@@ -79,6 +92,8 @@ export declare function resolvePaths(options: {
79
92
  configDir?: string;
80
93
  }): Promise<ResolvedPaths>;
81
94
  export declare function ensurePackageConfigText(text: string | undefined, packageSpecifier?: string): string;
95
+ export declare function ensureTuiPackageConfigText(text: string | undefined, packageSpecifier?: string): string;
96
+ export declare function ensureTuiPackageInstalled(paths: Pick<ResolvedPaths, "opencodeTuiConfigPath">): Promise<WriteResult>;
82
97
  export declare function ensureManagedAgentRegistrationsConfigText(text: string | undefined, paths: Pick<ResolvedPaths, "managedAgentsDirPath" | "managedSkillsDirPath" | "opencodeConfigPath">): string;
83
98
  export declare function syncManagedAgentRegistrations(paths: ResolvedPaths): Promise<{
84
99
  path: string;
@@ -135,6 +150,7 @@ export declare function inspectInstallationForScope(options: {
135
150
  configDir?: string;
136
151
  }): Promise<InstallationInspection & {
137
152
  opencodeSource: ConfigSource;
153
+ opencodeTuiSource: ConfigSource;
138
154
  vvocSource: ConfigSource;
139
155
  }>;
140
156
  export declare function describeWriteResult(result: WriteResult): string;
@@ -1,8 +1,8 @@
1
1
  // FILE: src/lib/opencode.ts
2
2
  // VERSION: 1.0.0
3
3
  // START_MODULE_CONTRACT
4
- // PURPOSE: Manage OpenCode config mutation, provider patching, and scoped vvoc.json config files.
5
- // SCOPE: Layer-aware path resolution, pinned plugin writes, managed OpenCode defaults, local skills path registration, provider patching, managed prompts/skills, strict vvoc rendering, and source-aware installation inspection including orchestration.
4
+ // PURPOSE: Manage OpenCode runtime/TUI config mutation, provider patching, and scoped vvoc.json config files.
5
+ // SCOPE: Layer-aware path resolution, pinned runtime and TUI plugin writes, managed OpenCode defaults, local skills path registration, provider patching, managed prompts/skills, strict vvoc rendering, and source-aware installation inspection including orchestration.
6
6
  // DEPENDS: [jsonc-parser, node:fs/promises, node:path, src/lib/config-layers.ts, src/lib/managed-agents.ts, src/lib/managed-skills.ts, src/lib/orchestration.ts, src/lib/package.ts, src/lib/vvoc-config.ts, src/lib/vvoc-paths.ts]
7
7
  // LINKS: [M-CLI-CONFIG, M-ORCHESTRATION-PROFILES]
8
8
  // ROLE: RUNTIME
@@ -13,13 +13,17 @@
13
13
  // CLI_NAME - Canonical vvoc CLI binary name.
14
14
  // PACKAGE_NAME - Canonical vvoc npm package name.
15
15
  // OPENCODE_SCHEMA_URL - OpenCode config schema URL.
16
+ // OPENCODE_TUI_SCHEMA_URL - OpenCode TUI config schema URL.
17
+ // TUI_PACKAGE_SPECIFIER - Stable package subpath registered in tui.json(c).
16
18
  // OpenCodeDefaultModelKey - Supported top-level OpenCode default model fields.
17
19
  // Scope - Supported installation scopes for vvoc config writes.
18
- // ResolvedPaths - Scope-aware path bundle for OpenCode and vvoc config locations.
20
+ // ResolvedPaths - Scope-aware path bundle for OpenCode runtime/TUI and vvoc config locations.
19
21
  // WriteResult - Result shape returned by managed config write operations.
20
- // InstallationInspection - Current OpenCode and vvoc installation status snapshot.
21
- // resolvePaths - Resolves OpenCode and vvoc config paths for global/project scopes.
22
+ // TuiPluginEntry - Supported TUI plugin string or tuple entry.
23
+ // InstallationInspection - Current OpenCode runtime/TUI and vvoc installation status snapshot.
24
+ // resolvePaths - Resolves OpenCode runtime/TUI and vvoc config paths for global/project scopes.
22
25
  // ensurePackageConfigText - Ensures OpenCode config contains the pinned vvoc plugin specifier.
26
+ // ensureTuiPackageConfigText - Ensures TUI config contains the vvoc TUI package subpath while preserving tuple options.
23
27
  // readOpenCodeDefaultModel - Reads a top-level OpenCode model or small_model override.
24
28
  // writeOpenCodeDefaultModel - Writes or removes a top-level OpenCode model or small_model override.
25
29
  // writeOpenCodeProviderObject - Writes or merges a provider.<id> object override.
@@ -27,6 +31,7 @@
27
31
  // ensureManagedAgentRegistrationsConfigText - Ensures OpenCode config contains the vvoc-managed default agent, agent registrations, and tool gating.
28
32
  // readVvocConfig - Loads the canonical vvoc.json document when present.
29
33
  // ensurePackageInstalled - Writes the pinned vvoc plugin specifier into OpenCode config.
34
+ // ensureTuiPackageInstalled - Writes the vvoc TUI package subpath into dedicated tui.json(c).
30
35
  // installVvocConfig - Creates or refreshes the canonical vvoc.json document.
31
36
  // syncVvocConfig - Rewrites the canonical vvoc.json document while preserving valid current values.
32
37
  // writeProviderBaseUrl - Writes a provider options.baseURL override into OpenCode config.
@@ -53,9 +58,9 @@
53
58
  // renderGuardianConfig - Render guardian section JSON.
54
59
  // GuardianConfigOverrides - Guardian config override type.
55
60
  // END_MODULE_MAP
56
- // END_MODULE_MAP
57
61
  //
58
62
  // START_CHANGE_SUMMARY
63
+ // LAST_CHANGE: [C-CONTEXT-TUI-PLUGIN - Added conservative dedicated TUI config mutation, path resolution, and installation inspection.]
59
64
  // LAST_CHANGE: [v1.3.0 - Removed old-name managed-agent and managed-command cleanup from syncManagedAgentRegistrations.]
60
65
  // LAST_CHANGE: [v1.2.0 - Switched vvoc config mutation paths to strict current-only parsing for existing vvoc.json files.]
61
66
  // LAST_CHANGE: [v1.1.1 - Fixed syncManagedSkillFiles to not sync references when parent skill is skipped (user-owned/custom). Added regression coverage.]
@@ -82,13 +87,16 @@ import { BUILTIN_ROLE_NAMES, getBuiltInRoleBindings, ROLE_REFERENCE_PREFIX, } fr
82
87
  import { resolveOrchestrationPolicy } from "./orchestration.js";
83
88
  import { createDefaultVvocConfig, createGuardianConfig, parseVvocConfigText, parseVersionedVvocConfigText, renderVvocConfig, } from "./vvoc-config.js";
84
89
  import { getPinnedPackageSpecifier, PACKAGE_NAME } from "./package.js";
85
- import { resolveConfigWriteTargets, resolveOpenCodeConfigSource, resolveVvocConfigSource, } from "./config-layers.js";
90
+ import { resolveConfigWriteTargets, resolveOpenCodeConfigSource, resolveOpenCodeTuiConfigSource, resolveVvocConfigSource, } from "./config-layers.js";
86
91
  import { getConfigHome, getGlobalOpencodeSkillsDir, getGlobalVvocDir, getVvocAgentsDir, getVvocSkillsDir, } from "./vvoc-paths.js";
87
92
  export const CLI_NAME = "vvoc";
88
93
  export { PACKAGE_NAME };
89
94
  export const OPENCODE_SCHEMA_URL = "https://opencode.ai/config.json";
95
+ export const OPENCODE_TUI_SCHEMA_URL = "https://opencode.ai/tui.json";
96
+ export const TUI_PACKAGE_SPECIFIER = `${PACKAGE_NAME}/tui`;
90
97
  const MANAGED_MARKER = "Managed by vvoc";
91
98
  const OPENCODE_CONFIG_FILE_NAMES = ["opencode.json", "opencode.jsonc"];
99
+ const OPENCODE_TUI_CONFIG_FILE_NAMES = ["tui.json", "tui.jsonc"];
92
100
  const MANAGED_DEFAULT_AGENT = "vv-controller";
93
101
  const JSON_FORMAT = {
94
102
  insertSpaces: true,
@@ -113,6 +121,8 @@ export async function resolvePaths(options) {
113
121
  managedSkillsDirPath,
114
122
  opencodeConfigPath: targets.opencodeConfigPath,
115
123
  opencodeAlternatePaths: await resolveOpenCodeAlternates(targets.opencodeBaseDir, targets.opencodeConfigPath),
124
+ opencodeTuiConfigPath: targets.opencodeTuiConfigPath,
125
+ opencodeTuiAlternatePaths: await resolveConfigAlternates(targets.opencodeBaseDir, targets.opencodeTuiConfigPath, OPENCODE_TUI_CONFIG_FILE_NAMES),
116
126
  };
117
127
  }
118
128
  // END_BLOCK_RESOLVE_CONFIG_PATHS
@@ -142,6 +152,44 @@ export function ensurePackageConfigText(text, packageSpecifier = PACKAGE_NAME) {
142
152
  return ensureTrailingNewline(applyEdits(nextText, format(nextText, undefined, JSON_FORMAT)));
143
153
  }
144
154
  // END_BLOCK_ENSURE_OPENCODE_PLUGIN_CONFIG
155
+ // START_BLOCK_ENSURE_TUI_PLUGIN_CONFIG
156
+ export function ensureTuiPackageConfigText(text, packageSpecifier = TUI_PACKAGE_SPECIFIER) {
157
+ if (!text?.trim()) {
158
+ return renderJson({
159
+ $schema: OPENCODE_TUI_SCHEMA_URL,
160
+ plugin: [packageSpecifier],
161
+ });
162
+ }
163
+ const document = parseObjectDocument(text, "OpenCode TUI config");
164
+ const currentPlugins = readTuiPluginList(document, "OpenCode TUI config");
165
+ let nextText = text;
166
+ if (!Object.hasOwn(document, "$schema")) {
167
+ nextText = applyEdits(nextText, modify(nextText, ["$schema"], OPENCODE_TUI_SCHEMA_URL, {
168
+ formattingOptions: JSON_FORMAT,
169
+ getInsertionIndex: () => 0,
170
+ }));
171
+ }
172
+ const nextPlugins = normalizeTuiPluginList(currentPlugins, packageSpecifier);
173
+ if (JSON.stringify(nextPlugins) !== JSON.stringify(currentPlugins)) {
174
+ nextText = applyEdits(nextText, modify(nextText, ["plugin"], nextPlugins, {
175
+ formattingOptions: JSON_FORMAT,
176
+ }));
177
+ }
178
+ return ensureTrailingNewline(applyEdits(nextText, format(nextText, undefined, JSON_FORMAT)));
179
+ }
180
+ export async function ensureTuiPackageInstalled(paths) {
181
+ const currentText = await readOptionalText(paths.opencodeTuiConfigPath);
182
+ const nextText = ensureTuiPackageConfigText(currentText);
183
+ if ((currentText ?? "") === nextText) {
184
+ return { action: "kept", path: paths.opencodeTuiConfigPath };
185
+ }
186
+ await writeText(paths.opencodeTuiConfigPath, nextText);
187
+ return {
188
+ action: currentText ? "updated" : "created",
189
+ path: paths.opencodeTuiConfigPath,
190
+ };
191
+ }
192
+ // END_BLOCK_ENSURE_TUI_PLUGIN_CONFIG
145
193
  // START_BLOCK_ENSURE_MANAGED_AGENT_CONFIG
146
194
  export function ensureManagedAgentRegistrationsConfigText(text, paths) {
147
195
  const builtInRoleBindings = getBuiltInRoleBindings();
@@ -585,6 +633,9 @@ export async function inspectInstallation(paths) {
585
633
  if (paths.opencodeAlternatePaths.length > 0) {
586
634
  warnings.push(`multiple OpenCode config files exist: ${[paths.opencodeConfigPath, ...paths.opencodeAlternatePaths].join(", ")}`);
587
635
  }
636
+ if (paths.opencodeTuiAlternatePaths.length > 0) {
637
+ warnings.push(`multiple OpenCode TUI config files exist: ${[paths.opencodeTuiConfigPath, ...paths.opencodeTuiAlternatePaths].join(", ")}`);
638
+ }
588
639
  const opencodeText = await readOptionalText(paths.opencodeConfigPath);
589
640
  let opencodeParseError;
590
641
  let plugins = [];
@@ -600,6 +651,21 @@ export async function inspectInstallation(paths) {
600
651
  problems.push(opencodeParseError);
601
652
  }
602
653
  }
654
+ const tuiText = await readOptionalText(paths.opencodeTuiConfigPath);
655
+ let tuiParseError;
656
+ let tuiPlugins = [];
657
+ let tuiPluginConfigured = false;
658
+ if (tuiText) {
659
+ try {
660
+ const document = parseObjectDocument(tuiText, paths.opencodeTuiConfigPath);
661
+ tuiPlugins = readTuiPluginList(document, paths.opencodeTuiConfigPath);
662
+ tuiPluginConfigured = tuiPlugins.some((entry) => isTuiPackageSpecifier(readTuiPluginName(entry)));
663
+ }
664
+ catch (error) {
665
+ tuiParseError = error instanceof Error ? error.message : String(error);
666
+ problems.push(tuiParseError);
667
+ }
668
+ }
603
669
  const vvocText = await readOptionalText(paths.vvocConfigPath);
604
670
  let vvocParseError;
605
671
  let vvocConfig;
@@ -628,6 +694,9 @@ export async function inspectInstallation(paths) {
628
694
  if (!pluginConfigured) {
629
695
  problems.push(`${PACKAGE_NAME} is not configured in ${paths.opencodeConfigPath}`);
630
696
  }
697
+ if (!tuiPluginConfigured) {
698
+ problems.push(`${TUI_PACKAGE_SPECIFIER} is not configured in ${paths.opencodeTuiConfigPath}`);
699
+ }
631
700
  if (!vvocText) {
632
701
  problems.push(`vvoc config is missing at ${paths.vvocConfigPath}`);
633
702
  }
@@ -641,6 +710,14 @@ export async function inspectInstallation(paths) {
641
710
  pluginConfigured,
642
711
  plugins,
643
712
  },
713
+ tui: {
714
+ path: paths.opencodeTuiConfigPath,
715
+ exists: Boolean(tuiText),
716
+ alternates: paths.opencodeTuiAlternatePaths,
717
+ parseError: tuiParseError,
718
+ pluginConfigured: tuiPluginConfigured,
719
+ plugins: tuiPlugins,
720
+ },
644
721
  vvoc: {
645
722
  path: paths.vvocConfigPath,
646
723
  exists: Boolean(vvocText),
@@ -666,12 +743,17 @@ export async function inspectInstallation(paths) {
666
743
  };
667
744
  }
668
745
  export async function inspectInstallationForScope(options) {
669
- const [opencodeSource, vvocSource] = await Promise.all([
746
+ const [opencodeSource, opencodeTuiSource, vvocSource] = await Promise.all([
670
747
  resolveOpenCodeConfigSource({
671
748
  scope: options.scope,
672
749
  cwd: options.cwd,
673
750
  configDir: options.configDir,
674
751
  }),
752
+ resolveOpenCodeTuiConfigSource({
753
+ scope: options.scope,
754
+ cwd: options.cwd,
755
+ configDir: options.configDir,
756
+ }),
675
757
  resolveVvocConfigSource({
676
758
  scope: options.scope,
677
759
  cwd: options.cwd,
@@ -691,14 +773,17 @@ export async function inspectInstallationForScope(options) {
691
773
  configDir: options.configDir,
692
774
  });
693
775
  const opencodeConfigPath = opencodeSource.path ?? fallbackPaths.opencodeConfigPath;
776
+ const opencodeTuiConfigPath = opencodeTuiSource.path ?? fallbackPaths.opencodeTuiConfigPath;
694
777
  const vvocConfigPath = vvocSource.path ?? fallbackPaths.vvocConfigPath;
695
778
  const scopedPaths = {
696
779
  ...fallbackPaths,
697
780
  opencodeBaseDir: dirname(opencodeConfigPath),
698
781
  vvocBaseDir: dirname(vvocConfigPath),
699
782
  opencodeConfigPath,
783
+ opencodeTuiConfigPath,
700
784
  vvocConfigPath,
701
785
  opencodeAlternatePaths: [],
786
+ opencodeTuiAlternatePaths: [],
702
787
  managedAgentsDirPath: getVvocAgentsDir(dirname(vvocConfigPath)),
703
788
  managedSkillsDirPath: getVvocSkillsDir(dirname(vvocConfigPath)),
704
789
  };
@@ -713,6 +798,7 @@ export async function inspectInstallationForScope(options) {
713
798
  },
714
799
  scope: options.scope,
715
800
  opencodeSource,
801
+ opencodeTuiSource,
716
802
  vvocSource,
717
803
  };
718
804
  }
@@ -760,6 +846,26 @@ function readPluginList(document, label) {
760
846
  }
761
847
  return raw.slice();
762
848
  }
849
+ function readTuiPluginList(document, label) {
850
+ const raw = document.plugin;
851
+ if (raw === undefined)
852
+ return [];
853
+ if (!Array.isArray(raw)) {
854
+ throw new Error(`${label}: expected "plugin" to be an array`);
855
+ }
856
+ return raw.map((entry, index) => {
857
+ if (typeof entry === "string") {
858
+ return entry;
859
+ }
860
+ if (Array.isArray(entry) &&
861
+ entry.length === 2 &&
862
+ typeof entry[0] === "string" &&
863
+ isJsonObject(entry[1])) {
864
+ return [entry[0], entry[1]];
865
+ }
866
+ throw new Error(`${label}: expected "plugin[${index}]" to be a string or [string, options] tuple`);
867
+ });
868
+ }
763
869
  function readStringArray(value, label) {
764
870
  if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) {
765
871
  throw new Error(`${label}: expected an array of strings`);
@@ -791,9 +897,35 @@ function normalizePluginList(currentPlugins, packageSpecifier) {
791
897
  }
792
898
  return nextPlugins;
793
899
  }
900
+ function normalizeTuiPluginList(currentPlugins, packageSpecifier) {
901
+ const nextPlugins = [];
902
+ let insertedPackage = false;
903
+ for (const entry of currentPlugins) {
904
+ if (!isTuiPackageSpecifier(readTuiPluginName(entry))) {
905
+ nextPlugins.push(entry);
906
+ continue;
907
+ }
908
+ if (insertedPackage) {
909
+ continue;
910
+ }
911
+ nextPlugins.push(typeof entry === "string" ? packageSpecifier : [packageSpecifier, entry[1]]);
912
+ insertedPackage = true;
913
+ }
914
+ if (!insertedPackage) {
915
+ nextPlugins.push(packageSpecifier);
916
+ }
917
+ return nextPlugins;
918
+ }
794
919
  function isPackagePluginSpecifier(value) {
795
920
  return value === PACKAGE_NAME || value.startsWith(`${PACKAGE_NAME}@`);
796
921
  }
922
+ function readTuiPluginName(entry) {
923
+ return typeof entry === "string" ? entry : entry[0];
924
+ }
925
+ function isTuiPackageSpecifier(value) {
926
+ return (value === TUI_PACKAGE_SPECIFIER ||
927
+ (value.startsWith(`${PACKAGE_NAME}@`) && value.endsWith("/tui")));
928
+ }
797
929
  // START_BLOCK_MANAGED_AGENT_HELPERS
798
930
  function readAgentMap(document, label) {
799
931
  const raw = document.agent;
@@ -1146,8 +1278,11 @@ async function writeText(path, text) {
1146
1278
  await writeFile(path, text, "utf8");
1147
1279
  }
1148
1280
  async function resolveOpenCodeAlternates(opencodeBaseDir, selectedPath) {
1281
+ return resolveConfigAlternates(opencodeBaseDir, selectedPath, OPENCODE_CONFIG_FILE_NAMES);
1282
+ }
1283
+ async function resolveConfigAlternates(baseDir, selectedPath, fileNames) {
1149
1284
  const alternates = [];
1150
- for (const candidate of OPENCODE_CONFIG_FILE_NAMES.map((name) => join(opencodeBaseDir, name))) {
1285
+ for (const candidate of fileNames.map((name) => join(baseDir, name))) {
1151
1286
  if (candidate !== selectedPath && (await readOptionalText(candidate)) !== undefined) {
1152
1287
  alternates.push(candidate);
1153
1288
  }