Skip to content

feat: add ai_search_namespaces and ai_search binding types#13027

Open
G4brym wants to merge 1 commit intocloudflare:mainfrom
G4brym:gmassadas/ai-search-binding-wrangler
Open

feat: add ai_search_namespaces and ai_search binding types#13027
G4brym wants to merge 1 commit intocloudflare:mainfrom
G4brym:gmassadas/ai-search-binding-wrangler

Conversation

@G4brym
Copy link
Member

@G4brym G4brym commented Mar 23, 2026

Summary

Adds two new AI Search binding types to Wrangler, Miniflare, and workers-utils, enabling Workers to bind directly to AI Search instances via the standalone AI Search binding (replacing env.AI.autorag()).

  • ai_search_namespaces — namespace binding: scoped to a namespace, supports dynamic instance CRUD
  • ai_search — single instance binding: bound to one specific instance within a namespace

Both bindings are remote-only in local dev (like the AI binding) — no local simulation. Namespace auto-creation follows the R2 bucket provisioning pattern.

Type generation will be added in a follow-up PR once the TypeScript type definitions land in workerd.

Wrangler config

// Namespace binding (plural key, singular EWC kind)
"ai_search_namespaces": [
    { "binding": "AI_SEARCH", "namespace": "production" }
]

// Single instance binding
"ai_search": [
    { "binding": "BLOG_SEARCH", "instance_name": "blog", "namespace": "production" }
]
// namespace defaults to "default" if omitted

Changes across 3 packages (19 files)

@cloudflare/workers-utils (6 files)

  • Config schema (environment.ts): ai_search_namespaces + ai_search fields
  • Runtime types (worker.ts): CfAISearchNamespace + CfAISearch interfaces
  • Metadata/Binding unions (types.ts): ai_search_namespace + ai_search variants
  • Validation (validation.ts): validators, friendly names, notInheritable calls, safe bindings
  • Default config (config.ts): [] defaults
  • Reverse mapping (map-worker-metadata-bindings.ts): metadata → config

wrangler (8 files, 1 new)

  • NEW API helpers (ai-search.ts): createAISearchNamespace, getAISearchNamespace
  • Upload form (create-worker-upload-form.ts): extract + push both types with INHERIT_SYMBOL + dryRun handling
  • Provisioning (bindings.ts): AISearchNamespaceHandler extending ProvisionResourceHandler (R2 bucket pattern for namespace auto-creation)
  • Print bindings, config diffs, secrets check, dev utils: standard binding registration
  • Miniflare mapping (miniflare/index.ts): remote-only with remoteProxyConnectionString

miniflare (2 files, 1 new)

  • NEW AI Search plugin (plugins/ai-search/index.ts): minimal schema-only plugin, remote proxy for local dev
  • Plugin registration (plugins/index.ts)

Tests

Tests are included in this PR:

  • Validation (workers-utils): 12 tests for ai_search_namespaces + ai_search — invalid types, missing fields, valid configs, additional properties, optional namespace
  • Upload form (wrangler): 10 tests — pass-through for both types, default namespace, explicit namespace, namespace binding, INHERIT_SYMBOL handling, dryRun fallback, missing field errors
  • Print bindings (wrangler): 3 tests — namespace binding, instance binding with explicit/default namespace

Documentation

No user-facing documentation is required at this stage. This PR adds internal Wrangler/Miniflare support for the AI Search binding types. External developer documentation will be published when the full binding stack is GA (config-api endpoints, EWC binding kinds, workerd types, and this Wrangler support all need to be deployed together). The documentation PR will be opened against cloudflare-docs at that time.

Design decisions

Decision Choice
Local dev Remote-only (like AI binding)
Pages support Not supported
Provisioning Namespace binding only (R2 bucket pattern). Instance binding requires pre-existing instance.
Type generation Follow-up PR (blocked by workerd type definitions)
OAuth scopes Already registered (ai-search:write, ai-search:run)

@changeset-bot
Copy link

changeset-bot bot commented Mar 23, 2026

🦋 Changeset detected

Latest commit: f3cfb67

The changes in this PR will be included in the next version bump.

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@pkg-pr-new
Copy link

pkg-pr-new bot commented Mar 23, 2026

create-cloudflare

npm i https://pkg.pr.new/create-cloudflare@13027

@cloudflare/kv-asset-handler

npm i https://pkg.pr.new/@cloudflare/kv-asset-handler@13027

miniflare

npm i https://pkg.pr.new/miniflare@13027

@cloudflare/pages-shared

npm i https://pkg.pr.new/@cloudflare/pages-shared@13027

@cloudflare/unenv-preset

npm i https://pkg.pr.new/@cloudflare/unenv-preset@13027

@cloudflare/vite-plugin

npm i https://pkg.pr.new/@cloudflare/vite-plugin@13027

@cloudflare/vitest-pool-workers

npm i https://pkg.pr.new/@cloudflare/vitest-pool-workers@13027

@cloudflare/workers-editor-shared

npm i https://pkg.pr.new/@cloudflare/workers-editor-shared@13027

wrangler

npm i https://pkg.pr.new/wrangler@13027

commit: f3cfb67

@G4brym G4brym force-pushed the gmassadas/ai-search-binding-wrangler branch from 092ea72 to 4425684 Compare March 23, 2026 18:53
@G4brym G4brym marked this pull request as ready for review March 23, 2026 19:08
@G4brym G4brym requested a review from a team as a code owner March 23, 2026 19:08
@workers-devprod
Copy link
Contributor

workers-devprod commented Mar 23, 2026

Codeowners approval required for this PR:

  • @cloudflare/wrangler
Show detailed file reviewers
  • packages/miniflare/src/plugins/ai-search/index.ts: [@cloudflare/wrangler]
  • packages/miniflare/src/plugins/index.ts: [@cloudflare/wrangler]
  • packages/workers-utils/src/config/config.ts: [@cloudflare/wrangler]
  • packages/workers-utils/src/config/environment.ts: [@cloudflare/wrangler]
  • packages/workers-utils/src/config/validation.ts: [@cloudflare/wrangler]
  • packages/workers-utils/src/map-worker-metadata-bindings.ts: [@cloudflare/wrangler]
  • packages/workers-utils/src/types.ts: [@cloudflare/wrangler]
  • packages/workers-utils/src/worker.ts: [@cloudflare/wrangler]
  • packages/workers-utils/tests/config/validation/normalize-and-validate-config.test.ts: [@cloudflare/wrangler]
  • packages/wrangler/src/tests/create-worker-upload-form/bindings.test.ts: [@cloudflare/wrangler]
  • packages/wrangler/src/tests/print-bindings.test.ts: [@cloudflare/wrangler]
  • packages/wrangler/src/tests/type-generation.test.ts: [@cloudflare/wrangler]
  • packages/wrangler/src/ai-search.ts: [@cloudflare/wrangler]
  • packages/wrangler/src/api/startDevWorker/utils.ts: [@cloudflare/wrangler]
  • packages/wrangler/src/deploy/check-remote-secrets-override.ts: [@cloudflare/wrangler]
  • packages/wrangler/src/deploy/config-diffs.ts: [@cloudflare/wrangler]
  • packages/wrangler/src/deployment-bundle/bindings.ts: [@cloudflare/wrangler]
  • packages/wrangler/src/deployment-bundle/create-worker-upload-form.ts: [@cloudflare/wrangler]
  • packages/wrangler/src/dev/miniflare/index.ts: [@cloudflare/wrangler]
  • packages/wrangler/src/utils/print-bindings.ts: [@cloudflare/wrangler]

devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@G4brym G4brym force-pushed the gmassadas/ai-search-binding-wrangler branch 3 times, most recently from 78ed937 to 45ee84b Compare March 23, 2026 20:33
devin-ai-integration[bot]

This comment was marked as resolved.

@G4brym G4brym force-pushed the gmassadas/ai-search-binding-wrangler branch from 45ee84b to 64e7ded Compare March 23, 2026 21:47
devin-ai-integration[bot]

This comment was marked as resolved.

@G4brym G4brym force-pushed the gmassadas/ai-search-binding-wrangler branch 6 times, most recently from 1315e92 to 52a0d3b Compare March 23, 2026 22:49
devin-ai-integration[bot]

This comment was marked as resolved.

@G4brym G4brym force-pushed the gmassadas/ai-search-binding-wrangler branch from 52a0d3b to 9be3ffc Compare March 23, 2026 23:08
Add two new AI Search binding types to Wrangler, Miniflare, and workers-utils:

- ai_search_namespaces: namespace binding with dynamic instance CRUD
- ai_search: single instance binding bound to one instance in a namespace

Both are remote-only in local dev. Namespace auto-creation during deploy
follows the R2 bucket provisioning pattern. The namespace field on ai_search
defaults to 'default' if omitted.

Changes across 3 packages:
- workers-utils: config schema, runtime types, metadata/binding unions,
  validation, defaults, reverse mapping
- wrangler: upload form with INHERIT_SYMBOL/dryRun handling, provisioning
  handler, API helpers, print bindings, config diffs, dev utils, miniflare mapping
- miniflare: schema-only plugin with remote proxy for local dev
@G4brym G4brym force-pushed the gmassadas/ai-search-binding-wrangler branch from 9be3ffc to f3cfb67 Compare March 23, 2026 23:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Untriaged

Development

Successfully merging this pull request may close these issues.

2 participants