Skip to content

Tool files that fail to load crash the whole session/registry instead of being skipped #42258

Description

@DatScreamer

Description

When a project has a .opencode/tool/*.{js,ts} file that fails to load (for example, it imports a package that couldn't be installed), the failure dies the entire tool registry — and with it, every session run in that project. A single bad tool file makes the project unusable.

The tool registry in packages/opencode/src/tool/registry.ts globs {tool,tools}/*.{js,ts} and dynamically import()s each file with no error handling around the import. If the file throws (e.g. ResolveMessage: Cannot find package ...), the defect propagates and kills the registry's state effect, so the whole run fails. Any valid tool files in the same project never get a chance to load.

Steps to reproduce

  1. Create a project with a broken custom tool:
    // .opencode/tool/broken.ts
    import { tool } from "@opencode-ai/plugin"
    import { something } from "@opencode-ai/definitely-not-a-real-package"
    export default tool({ description: "broken", args: { x: tool.schema.string() }, async execute() { return "" } })
  2. Open that project in the web UI and send any prompt.
  3. Observed: the whole run dies with the ResolveMessage stack instead of answering.

Expected

A failing tool file should be skipped with a warning, and the rest of the tool registry (including valid sibling tool files) should still load so the session can proceed.

Notes

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions