Skip to content

Artifacts reject hyphenated integration slugs as invalid tool paths #1882

Description

@GijungKim

Summary

Artifacts cannot call tools from integrations whose slug contains a hyphen. The artifact is accepted and saved, but its runtime remains behind the stage cover and logs Error: Invalid tool path.

Confirmed with the built-in cloudflare-bindings integration on Executor 1.6.7.

Reproduction

Create an artifact containing a normal declarative query:

function App() {
  const query = useQuery(
    tools["cloudflare-bindings"].d1_database_query.queryOptions({
      database_id: "example-database-id",
      sql: "SELECT 1",
    }),
  )

  if (query.isLoading) return <ArtifactLoading />
  if (query.error) return <ArtifactError error={query.error} />
  return <div>Loaded</div>
}

export { App }

The artifact saves, but opening it produces a blank artifact stage. Capturing the browser runtime exception shows:

Error: Invalid tool path.
    at hP (...executor-mcp-apps-shell...)

An otherwise equivalent artifact using tools.honeycomb.run_query renders and executes correctly.

Root cause observed in the shipped client

The shipped artifact shell validates every path segment as a JavaScript identifier and always emits dot notation:

var mP = /^[A-Za-z_$][\w$]*$/;
function hP(path, args, role) {
  if (path.length === 0) throw Error("Invalid tool path.");
  let segments = path.map(segment => {
    if (typeof segment !== "string" || !mP.test(segment)) {
      throw Error("Invalid tool path.");
    }
    return segment;
  });
  // Emits return await tools.${first}...${rest.join(".")}(...)
}

cloudflare-bindings necessarily fails that regex. Camel-casing it in artifact source is not a workaround because the actual integration slug remains cloudflare-bindings.

Expected behavior

Artifact tool calls should support every configured integration/tool slug accepted elsewhere by Executor, including hyphenated slugs.

One possible fix is to serialize non-identifier path segments with bracket notation rather than rejecting them, for example tools["cloudflare-bindings"].d1_database_query(...). Applying the same serialization to all path segments would also cover hyphenated tool names safely.

Environment

  • Executor 1.6.7
  • macOS 26.4, arm64
  • Local daemon/web app
  • Integration: built-in cloudflare-bindings

Metadata

Metadata

Assignees

No one assigned

    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