diff --git a/bun.lock b/bun.lock
index 53c0b6a..acf27cf 100644
--- a/bun.lock
+++ b/bun.lock
@@ -3806,7 +3806,7 @@
"get-tsconfig": ["get-tsconfig@4.14.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA=="],
- "ghostty-web": ["ghostty-web@github:anomalyco/ghostty-web#513463a", {}, "anomalyco-ghostty-web-513463a"],
+ "ghostty-web": ["ghostty-web@github:anomalyco/ghostty-web#513463a", {}, "anomalyco-ghostty-web-513463a", "sha512-GZR8LSmgGzViWnBJrqRI8MpAZRCJxhcr1Hi9Tyeh7YRooHZQjK9J97FQRD3tbBaM2wjq05gzGY2UEsG+JtZeBw=="],
"giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="],
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index 35bd2e0..56f8a9a 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -434,26 +434,30 @@ const layer = Layer.effect(
yield* ensureGitignore(dir).pipe(Effect.orDie)
- const dep = yield* npmSvc
- .install(dir, {
- add: [
- {
- name: "@opencode-ai/plugin",
- version: InstallationLocal ? undefined : InstallationVersion,
- },
- ],
- })
- .pipe(
- Effect.exit,
- Effect.tap((exit) =>
- Exit.isFailure(exit)
- ? Effect.logWarning("background dependency install failed", { dir, error: String(exit.cause) })
- : Effect.void,
- ),
- Effect.asVoid,
- Effect.forkDetach,
- )
- deps.push(dep)
+ if (Flag.OPENCODE_PURE) {
+ yield* Effect.logDebug("skipping background dependency install in pure mode", { dir })
+ } else {
+ const dep = yield* npmSvc
+ .install(dir, {
+ add: [
+ {
+ name: "@opencode-ai/plugin",
+ version: InstallationLocal ? undefined : InstallationVersion,
+ },
+ ],
+ })
+ .pipe(
+ Effect.exit,
+ Effect.tap((exit) =>
+ Exit.isFailure(exit)
+ ? Effect.logWarning("background dependency install failed", { dir, error: String(exit.cause) })
+ : Effect.void,
+ ),
+ Effect.asVoid,
+ Effect.forkDetach,
+ )
+ deps.push(dep)
+ }
result.command = mergeDeep(result.command ?? {}, yield* Effect.promise(() => ConfigCommand.load(dir)))
result.agent = mergeDeep(result.agent ?? {}, yield* Effect.promise(() => ConfigAgent.load(dir)))
diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts
index a99f8ac..bcc2829 100644
--- a/packages/opencode/src/session/llm.ts
+++ b/packages/opencode/src/session/llm.ts
@@ -294,13 +294,33 @@ const live: Layer.Layer<
// Copilot returns the authoritative billed amount only in provider-specific response fields.
includeRawChunks: input.model.providerID.includes("github-copilot"),
async experimental_repairToolCall(failed) {
- const lower = failed.toolCall.toolName.toLowerCase()
- if (lower !== failed.toolCall.toolName && prepared.tools[lower]) {
+ const name = failed.toolCall.toolName
+ const lower = name.toLowerCase()
+ if (lower !== name && prepared.tools[lower]) {
return {
...failed.toolCall,
toolName: lower,
}
}
+ // Normalize common local-LLM / MCP naming drift before giving up.
+ const normalized = name
+ .replaceAll("findevil_mcp_", "findevil-mcp_")
+ .replaceAll("findevil_agent_mcp_", "findevil-agent-mcp_")
+ .replaceAll("findevil-mcp-agent-mcp_", "findevil-agent-mcp_")
+ if (normalized !== name && prepared.tools[normalized]) {
+ return {
+ ...failed.toolCall,
+ toolName: normalized,
+ }
+ }
+ if (prepared.tools[lower.replaceAll("_", "-")]) {
+ return {
+ ...failed.toolCall,
+ toolName: lower.replaceAll("_", "-"),
+ }
+ }
+ // Keep toolName "invalid" so InvalidTool can return a structured error.
+ // activeTools MUST include "invalid" or the SDK reports "unavailable tool 'invalid'".
return {
...failed.toolCall,
input: JSON.stringify({
@@ -314,7 +334,8 @@ const live: Layer.Layer<
topP: prepared.params.topP,
topK: prepared.params.topK,
providerOptions: ProviderTransform.providerOptions(input.model, prepared.params.options),
- activeTools: Object.keys(prepared.tools).filter((x) => x !== "invalid"),
+ // Include "invalid" so experimental_repairToolCall can execute; description says do not use.
+ activeTools: Object.keys(prepared.tools),
tools: prepared.tools,
toolChoice: input.toolChoice,
maxOutputTokens: prepared.params.maxOutputTokens,
diff --git a/packages/opencode/src/tool/invalid.ts b/packages/opencode/src/tool/invalid.ts
index b8d145d..134233f 100644
--- a/packages/opencode/src/tool/invalid.ts
+++ b/packages/opencode/src/tool/invalid.ts
@@ -9,12 +9,16 @@ export const Parameters = Schema.Struct({
export const InvalidTool = Tool.define(
"invalid",
Effect.succeed({
- description: "Do not use",
+ description:
+ "Internal repair only — models must never choose this tool. Use exact findevil-mcp_* / findevil-agent-mcp_* names.",
parameters: Parameters,
execute: (params: { tool: string; error: string }) =>
Effect.succeed({
title: "Invalid Tool",
- output: `The arguments provided to the tool are invalid: ${params.error}`,
+ output:
+ `Tool call failed for '${params.tool}': ${params.error}. ` +
+ `Retry with an exact available tool name (findevil-mcp_* or findevil-agent-mcp_* only). ` +
+ `Do not call a tool named invalid.`,
metadata: {},
}),
}),
diff --git a/packages/storybook/debug-storybook.log b/packages/storybook/debug-storybook.log
deleted file mode 100644
index e13d40c..0000000
--- a/packages/storybook/debug-storybook.log
+++ /dev/null
@@ -1,307 +0,0 @@
-[14:25:48.462] [INFO] storybook v10.2.10
-[14:25:48.749] [DEBUG] Getting package.json info for /Users/davidhill/Documents/Local/opencode/packages/storybook/package.json...
-[14:25:48.997] [INFO] Starting...
-[14:25:49.095] [DEBUG] Starting preview..
-[14:25:49.098] [WARN] 🚨 Unable to index files:
-- ./../ui/src/components/accordion.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/accordion.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/app-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/app-icon.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/avatar.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/avatar.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/basic-tool.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/basic-tool.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/checkbox.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/checkbox.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/code.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/code.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/collapsible.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/collapsible.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/context-menu.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/context-menu.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/dialog.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/dialog.stories.tsx (line 10, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/diff-changes.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/diff-changes.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/diff-ssr.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/diff-ssr.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/diff.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/diff.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/dock-prompt.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/dock-prompt.stories.tsx (line 15, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/dropdown-menu.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/dropdown-menu.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/favicon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/favicon.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/file-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/file-icon.stories.tsx (line 13, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/font.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/font.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/hover-card.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/hover-card.stories.tsx (line 13, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/icon-button.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/icon-button.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/icon.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/image-preview.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/image-preview.stories.tsx (line 13, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/inline-input.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/inline-input.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/keybind.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/keybind.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/line-comment.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/line-comment.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/list.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/list.stories.tsx (line 15, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/logo.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/logo.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/markdown.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/markdown.stories.tsx (line 12, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/message-nav.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/message-nav.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/message-part.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/message-part.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/popover.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/popover.stories.tsx (line 16, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/progress-circle.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/progress-circle.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/progress.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/progress.stories.tsx (line 15, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/provider-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/provider-icon.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/radio-group.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/radio-group.stories.tsx (line 13, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/resize-handle.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/resize-handle.stories.tsx (line 17, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/select.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/select.stories.tsx (line 16, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/session-review.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/session-review.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/session-turn.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/session-turn.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/spinner.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/spinner.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/sticky-accordion-header.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/sticky-accordion-header.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/switch.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/switch.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/tabs.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/tabs.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/tag.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/tag.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/text-field.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/text-field.stories.tsx (line 14, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/text-shimmer.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/text-shimmer.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/toast.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/toast.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/tooltip.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/tooltip.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/typewriter.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/typewriter.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-[14:25:49.109] [ERROR] Failed to build the preview
-[14:25:49.110] [ERROR] Error: [38;2;241;97;97mUnable to index files:
-- ./../ui/src/components/accordion.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/accordion.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/app-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/app-icon.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/avatar.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/avatar.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/basic-tool.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/basic-tool.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/checkbox.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/checkbox.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/code.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/code.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/collapsible.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/collapsible.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/context-menu.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/context-menu.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/dialog.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/dialog.stories.tsx (line 10, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/diff-changes.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/diff-changes.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/diff-ssr.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/diff-ssr.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/diff.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/diff.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/dock-prompt.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/dock-prompt.stories.tsx (line 15, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/dropdown-menu.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/dropdown-menu.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/favicon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/favicon.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/file-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/file-icon.stories.tsx (line 13, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/font.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/font.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/hover-card.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/hover-card.stories.tsx (line 13, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/icon-button.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/icon-button.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/icon.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/image-preview.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/image-preview.stories.tsx (line 13, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/inline-input.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/inline-input.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/keybind.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/keybind.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/line-comment.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/line-comment.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/list.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/list.stories.tsx (line 15, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/logo.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/logo.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/markdown.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/markdown.stories.tsx (line 12, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/message-nav.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/message-nav.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/message-part.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/message-part.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/popover.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/popover.stories.tsx (line 16, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/progress-circle.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/progress-circle.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/progress.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/progress.stories.tsx (line 15, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/provider-icon.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/provider-icon.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/radio-group.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/radio-group.stories.tsx (line 13, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/resize-handle.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/resize-handle.stories.tsx (line 17, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/select.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/select.stories.tsx (line 16, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/session-review.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/session-review.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/session-turn.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/session-turn.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/spinner.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/spinner.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/sticky-accordion-header.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/sticky-accordion-header.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/switch.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/switch.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/tabs.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/tabs.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/tag.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/tag.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/text-field.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/text-field.stories.tsx (line 14, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/text-shimmer.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/text-shimmer.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/toast.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/toast.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/tooltip.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/tooltip.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export
-- ./../ui/src/components/typewriter.stories.tsx: CSF: default export must be an object /Users/davidhill/Documents/Local/opencode/packages/ui/src/components/typewriter.stories.tsx (line 6, col 0)
-
-More info: https://storybook.js.org/docs/writing-stories?ref=error#default-export[39m
- at _StoryIndexGenerator.getIndexAndStats (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:6085:15)
- at async _StoryIndexGenerator.getIndex (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:6074:13)
- at async getOptimizeDeps (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/@storybook+builder-vite@10.2.10+a2a25316dbcddd7f/node_modules/@storybook/builder-vite/dist/index.js:1862:15)
- at async createViteServer (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/@storybook+builder-vite@10.2.10+a2a25316dbcddd7f/node_modules/@storybook/builder-vite/dist/index.js:1888:19)
- at async Module.start (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/@storybook+builder-vite@10.2.10+a2a25316dbcddd7f/node_modules/@storybook/builder-vite/dist/index.js:1923:17)
- at async storybookDevServer (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:7241:83)
- at async buildOrThrow (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:4504:12)
- at async buildDevStandalone (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/core-server/index.js:7611:66)
- at async withTelemetry (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/_node-chunks/chunk-S3MWHNYJ.js:218:12)
- at async dev (file:///Users/davidhill/Documents/Local/opencode/node_modules/.bun/storybook@10.2.10+4edd68b244e756bb/node_modules/storybook/dist/bin/core.js:2734:3)
-[14:25:49.118] [WARN] Broken build, fix the error above.
-You may need to refresh the browser.
\ No newline at end of file
diff --git a/packages/tui/src/feature-plugins/home/tips-view.tsx b/packages/tui/src/feature-plugins/home/tips-view.tsx
index 8c5ca71..8a7e21b 100644
--- a/packages/tui/src/feature-plugins/home/tips-view.tsx
+++ b/packages/tui/src/feature-plugins/home/tips-view.tsx
@@ -234,19 +234,19 @@ const TIPS: Tip[] = [
"Add {highlight}.ts{/highlight} files to {highlight}.opencode/plugins/{/highlight} for event hooks",
"Use plugins to send OS notifications when sessions complete",
"Create a plugin to prevent VERDICT from reading sensitive files",
- "Use {highlight}opencode run{/highlight} for non-interactive scripting",
- "Use {highlight}opencode --continue{/highlight} to resume the last session",
- "Use {highlight}opencode run -f file.ts{/highlight} to attach files via CLI",
+ "Use {highlight}verdict run{/highlight} for non-interactive scripting",
+ "Use {highlight}verdict --continue{/highlight} to resume the last session",
+ "Use {highlight}verdict run -f file.ts{/highlight} to attach files via CLI",
"Use {highlight}--format json{/highlight} for machine-readable output in scripts",
- "Run {highlight}opencode serve{/highlight} for headless API access to VERDICT",
- "Use {highlight}opencode run --attach{/highlight} to connect to a running server",
- "Run {highlight}opencode upgrade{/highlight} to update to the latest version",
- "Run {highlight}opencode auth list{/highlight} to see all configured providers",
- "Run {highlight}opencode agent create{/highlight} for guided agent creation",
- "Use {highlight}/opencode{/highlight} in GitHub issues/PRs to trigger AI actions",
- "Run {highlight}opencode github install{/highlight} to set up the GitHub workflow",
- "Comment {highlight}/opencode fix this{/highlight} on issues to auto-create PRs",
- "Comment {highlight}/oc{/highlight} on PR code lines for targeted code reviews",
+ "Run {highlight}verdict serve{/highlight} for headless API access to VERDICT",
+ "Use {highlight}verdict run --attach{/highlight} to connect to a running server",
+ "Run {highlight}verdict upgrade{/highlight} to update to the latest version",
+ "Run {highlight}verdict auth list{/highlight} to see all configured providers",
+ "Run {highlight}verdict agent create{/highlight} for guided agent creation",
+ "Use {highlight}/evtx{/highlight} to examine Windows Event Logs with FindEvil",
+ "Use {highlight}/triage{/highlight} to collect an initial DFIR summary",
+ "Use {highlight}/status{/highlight} before a case to confirm MCP tools are connected",
+ "Keep evidence paths absolute when working through a remote desktop session",
'Use {highlight}"theme": "system"{/highlight} to match your terminal\'s colors',
"Create JSON theme files in {highlight}.opencode/themes/{/highlight} directory",
"Themes support dark/light variants for both modes",
@@ -264,7 +264,7 @@ const TIPS: Tip[] = [
"Run {highlight}/unshare{/highlight} to remove a session from public access",
"Permission {highlight}doom_loop{/highlight} prevents infinite tool call loops",
"Permission {highlight}external_directory{/highlight} protects files outside project",
- "Run {highlight}opencode debug config{/highlight} to troubleshoot configuration",
+ "Run {highlight}verdict debug config{/highlight} to troubleshoot configuration",
"Use {highlight}--print-logs{/highlight} flag to see detailed logs in stderr",
(shortcuts) => `Use ${commandText("/timeline", shortcuts.sessionTimeline())} to jump to specific messages`,
(shortcuts) => press(shortcuts.messagesToggleConceal(), "to toggle code block visibility in messages"),
@@ -274,8 +274,8 @@ const TIPS: Tip[] = [
shortcuts.commandList()
? `Toggle username display in chat via the command palette (${shortcutText(shortcuts.commandList())})`
: "Toggle username display in chat via the command palette",
- "Run {highlight}docker run -it --rm ghcr.io/anomalyco/opencode{/highlight} for containerized use",
- "Use {highlight}/connect{/highlight} with OpenCode Zen for curated, tested models",
+ "Run {highlight}verdict doctor{/highlight} to verify local model and MCP readiness",
+ "Use {highlight}/status{/highlight} to confirm VERDICT Local before evidence triage",
"Commit your project's {highlight}AGENTS.md{/highlight} file to Git for team sharing",
"Use {highlight}/review{/highlight} to review uncommitted changes, branches, or PRs",
(shortcuts) => `Use ${commandText("/help", shortcuts.helpShow())} to show the help dialog`,
diff --git a/packages/tui/src/feature-plugins/sidebar/footer.tsx b/packages/tui/src/feature-plugins/sidebar/footer.tsx
index 284b57b..2d4ff98 100644
--- a/packages/tui/src/feature-plugins/sidebar/footer.tsx
+++ b/packages/tui/src/feature-plugins/sidebar/footer.tsx
@@ -69,10 +69,7 @@ function View(props: { api: TuiPluginApi; sessionID: string }) {
{path().name}
- • Open
-
- Code
- {" "}
+ • VERDICT{" "}
{props.api.app.version}
diff --git a/packages/tui/src/routes/session/sidebar.tsx b/packages/tui/src/routes/session/sidebar.tsx
index 0c5d2b3..29a07c2 100644
--- a/packages/tui/src/routes/session/sidebar.tsx
+++ b/packages/tui/src/routes/session/sidebar.tsx
@@ -89,10 +89,7 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) {
- • Open
-
- Code
- {" "}
+ • VERDICT{" "}
{InstallationVersion}
diff --git a/packages/tui/src/util/presentation.ts b/packages/tui/src/util/presentation.ts
index cf432bf..dcb2521 100644
--- a/packages/tui/src/util/presentation.ts
+++ b/packages/tui/src/util/presentation.ts
@@ -32,7 +32,7 @@ export function sessionEpilogue(input: { title: string; sessionID?: string }) {
...wordmark(" "),
"",
` ${weak("Session")}${bold}${input.title}${reset}`,
- ` ${weak("Continue")}${bold}opencode -s ${input.sessionID}${reset}`,
+ ` ${weak("Continue")}${bold}verdict -s ${input.sessionID}${reset}`,
"",
].join("\n")
}