Skip to content

feat: migrate all workers to iii-sdk 0.22.0-alpha.5 with namespace support - #604

Draft
guibeira wants to merge 74 commits into
mainfrom
feat/new-sdk-migration
Draft

feat: migrate all workers to iii-sdk 0.22.0-alpha.5 with namespace support#604
guibeira wants to merge 74 commits into
mainfrom
feat/new-sdk-migration

Conversation

@guibeira

@guibeira guibeira commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

Migrates the workers to iii-sdk 0.22.0-alpha.5 with end-to-end namespace support. A worker running with III_NAMESPACE registers its functions and routes cross-worker calls in that namespace; engine builtins continue to use default. Without a namespace, existing behaviour is unchanged.

This branch also incorporates the latest main updates, including the injectable console UI work.

What changed

SDK upgrade

  • Updates Rust workers and direct iii-helpers dependencies to 0.22.0-alpha.5.
  • Updates the claude-code, opencode, and pi workers to iii-sdk@0.22.0-alpha.5.
  • Regenerates Cargo and pnpm lockfiles for the new release.

Namespace adoption

  • Trigger registrations pass each worker's resolved namespace so registrations target the correct worker namespace.
  • Cross-worker calls route to the worker namespace, while engine builtins (state::, stream::, queue::, pubsub::, configuration::, cron::, http::, engine::, sandbox::, log::, secret::, kv::, and iii::) remain in default.
  • Dynamic fan-out keeps builtin-aware routing: worker targets are namespaced and builtin targets remain in default.
  • The provider-to-router registration path is namespaced so providers and the router can operate together outside the default namespace.

Main integration

  • Integrates the latest main release and console UI changes.
  • Resolves manifest conflicts by retaining the console UI path dependencies while pinning them to iii-sdk = 0.22.0-alpha.5.
  • Resolves the harness reaction conflict using the current subagent spawning path, preserving reactive-child policy inheritance and ownership lineage.

Validation

  • cargo fmt --check on the affected Rust crates.
  • cargo check --locked for iii-console-ui and harness.
  • Type checks for claude-code, opencode, and pi with their updated pnpm lockfiles.
  • Confirmed no remaining 0.22.0-alpha.3 references in tracked dependency manifests or lockfiles.

Notes

  • The browser, GitHub, memory, and worktree workers now retain their console UI path dependencies while using the updated SDK pin.

@vercel

vercel Bot commented Jul 26, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
workers Ready Ready Preview Jul 31, 2026 11:24pm
workers-tech-spec Ready Ready Preview Jul 31, 2026 11:24pm

Request Review

@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3c64edb1-b0b3-4e0f-9001-30a3c0f65e2c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/new-sdk-migration

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

skill-check — worker

0 verified, 51 skipped (no docs/).

Layer Result
structure
vale
ai
render

Four for four. Nicely done.

@guibeira guibeira changed the title feat: migrate all workers to iii-sdk 0.22.0-alpha.2 with namespace support feat: migrate all workers to iii-sdk 0.22.0-alpha.3 with namespace support Jul 27, 2026
@guibeira guibeira added the no-ticket PR deliberately has no Linear ticket (bump/typo/CI-only) label Jul 27, 2026
@guibeira guibeira changed the title feat: migrate all workers to iii-sdk 0.22.0-alpha.3 with namespace support feat: migrate all workers to iii-sdk 0.22.0-alpha.5 with namespace support Jul 29, 2026
guibeira added 2 commits July 31, 2026 20:12
…support

Bump iii-sdk to the 0.22.0-alpha.2 namespace release and adopt namespace
registration: a --namespace flag (III_NAMESPACE env fallback) is threaded into
InitOptions so the worker can register under a namespace. Absent, it keeps the
engine's default namespace, so existing deploys are unchanged. Verified at
runtime: the worker connects and image_resize::resize resolves in the declared
namespace via engine::functions::list.
…upport

Bump iii-sdk to the 0.22.0-alpha.2 namespace release and pass III_NAMESPACE
through registerWorker so claude::* register under a namespace when one is set
(the SDK also resolves the env; passed explicitly for visibility). Absent, the
engine's default namespace is used. Verified at runtime: all six claude::*
functions resolve in the declared namespace via engine::functions::list.
guibeira added 27 commits July 31, 2026 20:19
The provider_scaffold router client issued router::provider::register (and resolve/reconcile/models_get) on a TriggerRequest with no namespace, so a provider running in a namespace called the router in default and never registered. Route the call to the worker's own namespace via iii.namespace() (None => engine default). Verified with a multi-worker smoke: llm-router + provider run in the same namespace and the provider's surface registers there.
provider-kimi has its own copy of the scaffold call() helper; apply the same namespace routing so its router::provider::register reaches llm-router in the worker's namespace instead of default. Multi-worker smoke-verified.
Non-builtin cross-worker trigger calls (e.g. router::/harness::/approval::/session::/context::/shell::/workflow:: and this worker's own functions) issued a TriggerRequest with no namespace, so a worker running in a namespace called those targets in default and missed them. Route each to the worker's namespace via iii.namespace() (None => engine default). Builtin targets (state::/stream::/queue::/pubsub::/configuration::/cron::/http::/engine::/...) intentionally stay in default.
Non-builtin cross-worker trigger calls (e.g. router::/harness::/approval::/session::/context::/shell::/workflow:: and this worker's own functions) issued a TriggerRequest with no namespace, so a worker running in a namespace called those targets in default and missed them. Route each to the worker's namespace via iii.namespace() (None => engine default). Builtin targets (state::/stream::/queue::/pubsub::/configuration::/cron::/http::/engine::/...) intentionally stay in default.
Non-builtin cross-worker trigger calls (e.g. router::/harness::/approval::/session::/context::/shell::/workflow:: and this worker's own functions) issued a TriggerRequest with no namespace, so a worker running in a namespace called those targets in default and missed them. Route each to the worker's namespace via iii.namespace() (None => engine default). Builtin targets (state::/stream::/queue::/pubsub::/configuration::/cron::/http::/engine::/...) intentionally stay in default.
Non-builtin cross-worker trigger calls (e.g. router::/harness::/approval::/session::/context::/shell::/workflow:: and this worker's own functions) issued a TriggerRequest with no namespace, so a worker running in a namespace called those targets in default and missed them. Route each to the worker's namespace via iii.namespace() (None => engine default). Builtin targets (state::/stream::/queue::/pubsub::/configuration::/cron::/http::/engine::/...) intentionally stay in default.
Non-builtin cross-worker trigger calls (e.g. router::/harness::/approval::/session::/context::/shell::/workflow:: and this worker's own functions) issued a TriggerRequest with no namespace, so a worker running in a namespace called those targets in default and missed them. Route each to the worker's namespace via iii.namespace() (None => engine default). Builtin targets (state::/stream::/queue::/pubsub::/configuration::/cron::/http::/engine::/...) intentionally stay in default.
Non-builtin cross-worker trigger calls (e.g. router::/harness::/approval::/session::/context::/shell::/workflow:: and this worker's own functions) issued a TriggerRequest with no namespace, so a worker running in a namespace called those targets in default and missed them. Route each to the worker's namespace via iii.namespace() (None => engine default). Builtin targets (state::/stream::/queue::/pubsub::/configuration::/cron::/http::/engine::/...) intentionally stay in default.
…espace

Non-builtin cross-worker trigger calls (e.g. router::/harness::/approval::/session::/context::/shell::/workflow:: and this worker's own functions) issued a TriggerRequest with no namespace, so a worker running in a namespace called those targets in default and missed them. Route each to the worker's namespace via iii.namespace() (None => engine default). Builtin targets (state::/stream::/queue::/pubsub::/configuration::/cron::/http::/engine::/...) intentionally stay in default.
Non-builtin cross-worker trigger calls (e.g. router::/harness::/approval::/session::/context::/shell::/workflow:: and this worker's own functions) issued a TriggerRequest with no namespace, so a worker running in a namespace called those targets in default and missed them. Route each to the worker's namespace via iii.namespace() (None => engine default). Builtin targets (state::/stream::/queue::/pubsub::/configuration::/cron::/http::/engine::/...) intentionally stay in default.
Non-builtin cross-worker trigger calls (e.g. router::/harness::/approval::/session::/context::/shell::/workflow:: and this worker's own functions) issued a TriggerRequest with no namespace, so a worker running in a namespace called those targets in default and missed them. Route each to the worker's namespace via iii.namespace() (None => engine default). Builtin targets (state::/stream::/queue::/pubsub::/configuration::/cron::/http::/engine::/...) intentionally stay in default.
Non-builtin cross-worker trigger calls (e.g. router::/harness::/approval::/session::/context::/shell::/workflow:: and this worker's own functions) issued a TriggerRequest with no namespace, so a worker running in a namespace called those targets in default and missed them. Route each to the worker's namespace via iii.namespace() (None => engine default). Builtin targets (state::/stream::/queue::/pubsub::/configuration::/cron::/http::/engine::/...) intentionally stay in default.
Non-builtin cross-worker trigger calls (e.g. router::/harness::/approval::/session::/context::/shell::/workflow:: and this worker's own functions) issued a TriggerRequest with no namespace, so a worker running in a namespace called those targets in default and missed them. Route each to the worker's namespace via iii.namespace() (None => engine default). Builtin targets (state::/stream::/queue::/pubsub::/configuration::/cron::/http::/engine::/...) intentionally stay in default.
Dynamic subscriber/hook/notify targets carry a runtime function_id that can be either a builtin (e.g. state::set) or another worker's function. Route these to the worker's namespace ONLY when the target is NOT a builtin prefix; builtins keep default routing so a builtin subscribed to an event still resolves. Literal cross-worker targets are unchanged.
Dynamic subscriber/hook/notify targets carry a runtime function_id that can be either a builtin (e.g. state::set) or another worker's function. Route these to the worker's namespace ONLY when the target is NOT a builtin prefix; builtins keep default routing so a builtin subscribed to an event still resolves. Literal cross-worker targets are unchanged.
Dynamic subscriber/hook/notify targets carry a runtime function_id that can be either a builtin (e.g. state::set) or another worker's function. Route these to the worker's namespace ONLY when the target is NOT a builtin prefix; builtins keep default routing so a builtin subscribed to an event still resolves. Literal cross-worker targets are unchanged.
Dynamic subscriber/hook/notify targets carry a runtime function_id that can be either a builtin (e.g. state::set) or another worker's function. Route these to the worker's namespace ONLY when the target is NOT a builtin prefix; builtins keep default routing so a builtin subscribed to an event still resolves. Literal cross-worker targets are unchanged.
Dynamic subscriber/hook/notify targets carry a runtime function_id that can be either a builtin (e.g. state::set) or another worker's function. Route these to the worker's namespace ONLY when the target is NOT a builtin prefix; builtins keep default routing so a builtin subscribed to an event still resolves. Literal cross-worker targets are unchanged.
…heck

Dynamic subscriber/hook/notify targets carry a runtime function_id that can be either a builtin (e.g. state::set) or another worker's function. Route these to the worker's namespace ONLY when the target is NOT a builtin prefix; builtins keep default routing so a builtin subscribed to an event still resolves. Literal cross-worker targets are unchanged.
…heck

Dynamic subscriber/hook/notify targets carry a runtime function_id that can be either a builtin (e.g. state::set) or another worker's function. Route these to the worker's namespace ONLY when the target is NOT a builtin prefix; builtins keep default routing so a builtin subscribed to an event still resolves. Literal cross-worker targets are unchanged.
Picks up the namespace review fixes shipped in the 0.22.0-alpha.3 SDK release. Build-verified against the published crates.
Picks up the namespace review fixes shipped in the 0.22.0-alpha.3 SDK release. Build-verified against the published crates.
Picks up the namespace review fixes in the 0.22.0-alpha.3 SDK release.
Picks up the namespace review fixes in the 0.22.0-alpha.3 SDK release.
Picks up the namespace review fixes in the 0.22.0-alpha.3 SDK release.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-ticket PR deliberately has no Linear ticket (bump/typo/CI-only)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant