Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
f576247
feat(image-resize): migrate to iii-sdk 0.22.0-alpha.2 with namespace …
guibeira Jul 25, 2026
fd98b5c
feat(claude-code): migrate to iii-sdk 0.22.0-alpha.2 with namespace s…
guibeira Jul 25, 2026
0e7ff06
feat(hermes): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
04cfd80
feat(acp): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
7303f53
feat(opencode): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
89ed65c
feat(pi): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
3a262f7
feat(scrapling): migrate to iii-sdk 0.22.0-alpha.2 with namespace sup…
guibeira Jul 25, 2026
3e22abf
feat(approval-gate): migrate to iii-sdk 0.22.0-alpha.2 with namespace…
guibeira Jul 25, 2026
cbb0a5a
feat(bridge): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
bd94121
feat(browser): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
f438980
feat(codex): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
742af0f
feat(context-manager): migrate to iii-sdk 0.22.0-alpha.2 with namespa…
guibeira Jul 25, 2026
8252f41
feat(cron): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
c684768
feat(database): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
41fa35a
feat(devin): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
9ff231c
feat(fp): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
677d7e0
feat(github): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
1974021
feat(grok): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
87989a5
feat(harness): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
c878e7e
feat(http): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
4f42343
feat(iii-directory): migrate to iii-sdk 0.22.0-alpha.2 with namespace…
guibeira Jul 25, 2026
4b9d9a1
feat(llm-router): migrate to iii-sdk 0.22.0-alpha.2 with namespace su…
guibeira Jul 25, 2026
fad21a1
feat(mcp): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
cbcfd96
feat(memory): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
fabda5c
feat(memory-consolidate): migrate to iii-sdk 0.22.0-alpha.2 with name…
guibeira Jul 25, 2026
b904aed
feat(provider-anthropic): migrate to iii-sdk 0.22.0-alpha.2 with name…
guibeira Jul 25, 2026
d5c8281
feat(provider-kimi): migrate to iii-sdk 0.22.0-alpha.2 with namespace…
guibeira Jul 25, 2026
c0d51ed
feat(provider-llamacpp): migrate to iii-sdk 0.22.0-alpha.2 with names…
guibeira Jul 25, 2026
14eb8a9
feat(provider-openai): migrate to iii-sdk 0.22.0-alpha.2 with namespa…
guibeira Jul 25, 2026
b685650
feat(provider-openai-codex): migrate to iii-sdk 0.22.0-alpha.2 with n…
guibeira Jul 25, 2026
e43ab66
feat(provider-xai): migrate to iii-sdk 0.22.0-alpha.2 with namespace …
guibeira Jul 25, 2026
5562d12
feat(provider-zai): migrate to iii-sdk 0.22.0-alpha.2 with namespace …
guibeira Jul 25, 2026
7758e44
feat(pubsub): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
fcdb040
feat(queue): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
6686749
feat(rbac-proxy): migrate to iii-sdk 0.22.0-alpha.2 with namespace su…
guibeira Jul 25, 2026
634fdc7
feat(session-manager): migrate to iii-sdk 0.22.0-alpha.2 with namespa…
guibeira Jul 25, 2026
27074e4
feat(shell): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
cd6e231
feat(slack): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
cb4a2ed
feat(state): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
6e9606e
feat(storage): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
f75ece6
feat(telegram-bot): migrate to iii-sdk 0.22.0-alpha.2 with namespace …
guibeira Jul 25, 2026
ecd483f
feat(web): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
fce1517
feat(workflow): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
04e1cc3
feat(worktree): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
5318d60
feat(console): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
d4067f3
feat(email): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
dea786b
feat(lsp): migrate to iii-sdk 0.22.0-alpha.2 with namespace support
guibeira Jul 25, 2026
9f7c2f4
fix(llm-router): route provider->router calls to the worker's namespace
guibeira Jul 25, 2026
043c255
fix(provider-kimi): route router calls to the worker's namespace
guibeira Jul 25, 2026
4928610
fix(approval-gate): route cross-worker calls to the worker's namespace
guibeira Jul 26, 2026
fd422ae
fix(context-manager): route cross-worker calls to the worker's namespace
guibeira Jul 26, 2026
3ffc65d
fix(email): route cross-worker calls to the worker's namespace
guibeira Jul 26, 2026
bff1506
fix(harness): route cross-worker calls to the worker's namespace
guibeira Jul 26, 2026
d65b1fd
fix(iii-directory): route cross-worker calls to the worker's namespace
guibeira Jul 26, 2026
cf29170
fix(memory): route cross-worker calls to the worker's namespace
guibeira Jul 26, 2026
14f48a5
fix(memory-consolidate): route cross-worker calls to the worker's nam…
guibeira Jul 26, 2026
6dd884c
fix(slack): route cross-worker calls to the worker's namespace
guibeira Jul 26, 2026
492e5e8
fix(telegram-bot): route cross-worker calls to the worker's namespace
guibeira Jul 26, 2026
aa7d685
fix(workflow): route cross-worker calls to the worker's namespace
guibeira Jul 26, 2026
00dc786
fix(worktree): route cross-worker calls to the worker's namespace
guibeira Jul 26, 2026
94ae50c
fix(harness): gate dynamic fan-out namespacing on the builtin check
guibeira Jul 26, 2026
434d792
fix(email): gate dynamic fan-out namespacing on the builtin check
guibeira Jul 26, 2026
26314e3
fix(workflow): gate dynamic fan-out namespacing on the builtin check
guibeira Jul 26, 2026
19d1734
fix(worktree): gate dynamic fan-out namespacing on the builtin check
guibeira Jul 26, 2026
e6a691c
fix(memory): gate dynamic fan-out namespacing on the builtin check
guibeira Jul 26, 2026
a374608
fix(approval-gate): gate dynamic fan-out namespacing on the builtin c…
guibeira Jul 26, 2026
bcde0ec
fix(iii-directory): gate dynamic fan-out namespacing on the builtin c…
guibeira Jul 26, 2026
cb55cef
chore(state): bump iii-sdk and iii-helpers to 0.22.0-alpha.3
guibeira Jul 26, 2026
dc68984
chore(http): bump iii-sdk and iii-helpers to 0.22.0-alpha.3
guibeira Jul 26, 2026
5886926
chore(pubsub): bump iii-sdk and iii-helpers to 0.22.0-alpha.3
guibeira Jul 27, 2026
0b04537
chore(cron): bump iii-sdk and iii-helpers to 0.22.0-alpha.3
guibeira Jul 27, 2026
7c751a7
chore(queue): bump iii-sdk and iii-helpers to 0.22.0-alpha.3
guibeira Jul 27, 2026
af371d4
chore: bump iii-sdk dependencies to 0.22.0-alpha.3
guibeira Jul 27, 2026
8b60e96
fix: add namespaces to trigger test fixtures
guibeira Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions acp/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion acp/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ name = "iii-acp"
path = "src/main.rs"

[dependencies]
iii-sdk = "=0.21.6"
iii-sdk = "=0.22.0-alpha.3"
tokio = { version = "1", features = ["macros", "rt-multi-thread", "io-std", "io-util", "sync", "time", "signal"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
Expand Down
3 changes: 3 additions & 0 deletions acp/src/handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -704,6 +704,9 @@ fn register_event_subscriber(
function_id: fn_id,
config: json!({ "stream_name": AGENT_EVENTS_STREAM }),
metadata: None,
// Resolve the trigger's target in this worker's namespace so it matches
// where the function was registered (None => engine default).
namespace: iii.namespace(),
}) {
Ok(t) => Some(t),
Err(e) => {
Expand Down
8 changes: 4 additions & 4 deletions approval-gate/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion approval-gate/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ name = "approval_gate"
path = "src/lib.rs"

[dependencies]
iii-sdk = "=0.21.6"
iii-sdk = "=0.22.0-alpha.2"
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "signal", "time"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
Expand Down
3 changes: 3 additions & 0 deletions approval-gate/src/configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ pub fn bind_hook(iii: &IIIClient) {
"on_error": HOOK_ON_ERROR,
}),
metadata: None,
namespace: iii.namespace(),
}) {
Ok(_) => tracing::info!(
trigger_type = "harness::hook::pre-trigger",
Expand Down Expand Up @@ -157,6 +158,7 @@ pub fn bind_filesystem_access_watch_hook(iii: &IIIClient) {
"on_error": FILESYSTEM_ACCESS_WATCH_ON_ERROR,
}),
metadata: None,
namespace: iii.namespace(),
}) {
Ok(_) => tracing::info!(
trigger_type = "harness::hook::post-trigger",
Expand Down Expand Up @@ -262,6 +264,7 @@ pub fn register_config_trigger(iii: &IIIClient, cell: ConfigCell) -> Result<(),
"event_types": ["configuration:updated"],
}),
metadata: None,
namespace: iii.namespace(),
})?;
Ok(())
}
Expand Down
40 changes: 31 additions & 9 deletions approval-gate/src/events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -253,15 +253,36 @@ impl Emitter {
) {
for binding in set.snapshot() {
if binding_matches(&binding.filter, session_id, session_metadata) {
let res = self
.iii
.trigger(TriggerRequest {
function_id: binding.function_id.clone(),
payload: payload.clone(),
action: Some(TriggerAction::Void),
timeout_ms: None,
})
.await;
let request = TriggerRequest {
function_id: binding.function_id.clone(),
payload: payload.clone(),
action: Some(TriggerAction::Void),
timeout_ms: None,
};
let route_ns = self.iii.namespace().filter(|_| {
!matches!(
binding.function_id.split("::").next(),
Some(
"state"
| "stream"
| "queue"
| "pubsub"
| "configuration"
| "cron"
| "http"
| "engine"
| "sandbox"
| "log"
| "secret"
| "kv"
| "iii"
)
)
});
let res = match route_ns {
Some(ns) => self.iii.trigger(request.namespace(ns)).await,
None => self.iii.trigger(request).await,
};
if let Err(e) = res {
tracing::warn!(
function_id = %binding.function_id,
Expand Down Expand Up @@ -314,6 +335,7 @@ mod tests {
function_id: function_id.into(),
config,
metadata: None,
namespace: None,
}
}

Expand Down
45 changes: 26 additions & 19 deletions approval-gate/src/harness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,16 @@ use iii_sdk::IIIClient;
use serde_json::{json, Value};

pub async fn function_resolve(iii: &IIIClient, payload: Value) -> Result<Value, Error> {
iii.trigger(TriggerRequest {
let request = TriggerRequest {
function_id: "harness::function::resolve".into(),
payload,
action: None,
timeout_ms: None,
})
.await
};
match iii.namespace() {
Some(ns) => iii.trigger(request.namespace(ns)).await,
None => iii.trigger(request).await,
}
}

fn parse_roots(reply: &Value) -> Vec<String> {
Expand All @@ -36,14 +39,16 @@ fn parse_roots(reply: &Value) -> Vec<String> {
/// error on "no grants" — only on transport/RPC failure, e.g. an older
/// harness that doesn't implement this control plane yet).
pub async fn filesystem_grants(iii: &IIIClient, session_id: &str) -> Result<Vec<String>, Error> {
let reply = iii
.trigger(TriggerRequest {
function_id: "harness::filesystem::grants".into(),
payload: json!({ "session_id": session_id }),
action: None,
timeout_ms: None,
})
.await?;
let request = TriggerRequest {
function_id: "harness::filesystem::grants".into(),
payload: json!({ "session_id": session_id }),
action: None,
timeout_ms: None,
};
let reply = match iii.namespace() {
Some(ns) => iii.trigger(request.namespace(ns)).await?,
None => iii.trigger(request).await?,
};
Ok(parse_roots(&reply))
}

Expand All @@ -55,13 +60,15 @@ pub async fn filesystem_grant(
session_id: &str,
root: &str,
) -> Result<Vec<String>, Error> {
let reply = iii
.trigger(TriggerRequest {
function_id: "harness::filesystem::grant".into(),
payload: json!({ "session_id": session_id, "root": root }),
action: None,
timeout_ms: None,
})
.await?;
let request = TriggerRequest {
function_id: "harness::filesystem::grant".into(),
payload: json!({ "session_id": session_id, "root": root }),
action: None,
timeout_ms: None,
};
let reply = match iii.namespace() {
Some(ns) => iii.trigger(request.namespace(ns)).await?,
None => iii.trigger(request).await?,
};
Ok(parse_roots(&reply))
}
1 change: 1 addition & 0 deletions approval-gate/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ fn bind_best_effort(
function_id: function_id.to_string(),
config,
metadata: None,
namespace: iii.namespace(),
});
match res {
Ok(_) => tracing::info!(trigger_type, function_id, "trigger binding requested"),
Expand Down
9 changes: 6 additions & 3 deletions approval-gate/src/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@ use iii_sdk::IIIClient;
use serde_json::{json, Value};

pub async fn get(iii: &IIIClient, session_id: &str) -> Result<Value, Error> {
iii.trigger(TriggerRequest {
let request = TriggerRequest {
function_id: "session::get".into(),
payload: json!({ "session_id": session_id }),
action: None,
timeout_ms: None,
})
.await
};
match iii.namespace() {
Some(ns) => iii.trigger(request.namespace(ns)).await,
None => iii.trigger(request).await,
}
}
2 changes: 2 additions & 0 deletions approval-gate/src/testkit/engine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -459,13 +459,15 @@ pub async fn boot(engine: &Engine, opts: BootOpts) -> TestStack {
function_id: "recorder::on_created".to_string(),
config: json!({}),
metadata: None,
namespace: iii.namespace(),
})
.expect("bind pending_created");
iii.register_trigger(RegisterTriggerInput {
trigger_type: PENDING_RESOLVED.to_string(),
function_id: "recorder::on_resolved".to_string(),
config: json!({}),
metadata: None,
namespace: iii.namespace(),
})
.expect("bind pending_resolved");

Expand Down
8 changes: 4 additions & 4 deletions bridge/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion bridge/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ name = "bridge"
path = "src/main.rs"

[dependencies]
iii-sdk = "=0.21.6"
iii-sdk = "=0.22.0-alpha.3"
async-trait = "0.1"
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "signal", "time"] }
serde = { version = "1", features = ["derive"] }
Expand Down
40 changes: 17 additions & 23 deletions bridge/src/boot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ pub async fn start(iii: Arc<IIIClient>, config: BridgeConfig) -> anyhow::Result<
/// `bridge.invoke` + `bridge.invoke_async` on the local engine — exact
/// function ids and descriptions from the builtin (mod.rs:96-191).
///
/// Both use `new_async_with_bad_request` with the typed [`functions::
/// Both use `new_async` with the typed [`functions::
/// InvokeInput`]: the SDK auto-extracts a real request schema instead of the
/// permissive `AnyValue` a `Value` closure param would emit, while
/// [`functions::invoke_bad_request`] keeps owning the `deserialization_error`
Expand All @@ -133,33 +133,27 @@ pub fn register_bridge_functions(iii: &Arc<IIIClient>, remote: RemoteCell) {
let caller = caller.clone();
iii.register_function(
functions::INVOKE_FN,
RegisterFunction::new_async_with_bad_request(
move |req: functions::InvokeInput| {
let caller = caller.clone();
async move {
functions::handle_invoke_typed(caller.as_ref(), req)
.await
.map_err(Error::from)
}
},
functions::invoke_bad_request,
)
.description("Invoke a function on the remote III instance"),
);
}
iii.register_function(
functions::INVOKE_ASYNC_FN,
RegisterFunction::new_async_with_bad_request(
move |req: functions::InvokeInput| {
RegisterFunction::new_async(move |req: functions::InvokeInput| {
let caller = caller.clone();
async move {
functions::handle_invoke_async_typed(caller.as_ref(), req)
functions::handle_invoke_typed(caller.as_ref(), req)
.await
.map_err(Error::from)
}
},
functions::invoke_bad_request,
)
})
.description("Invoke a function on the remote III instance"),
);
}
iii.register_function(
functions::INVOKE_ASYNC_FN,
RegisterFunction::new_async(move |req: functions::InvokeInput| {
let caller = caller.clone();
async move {
functions::handle_invoke_async_typed(caller.as_ref(), req)
.await
.map_err(Error::from)
}
})
.description("Fire-and-forget invoke on the remote III instance"),
);
}
Expand Down
1 change: 1 addition & 0 deletions bridge/src/configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ pub async fn register_config_trigger(iii: &Arc<IIIClient>, boot: &BootHandle) ->
"event_types": ["configuration:updated"],
}),
metadata: None,
namespace: iii.namespace(),
})?;
Ok(())
}
Expand Down
8 changes: 4 additions & 4 deletions browser/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion browser/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ name = "browser"
path = "src/lib.rs"

[dependencies]
iii-sdk = "=0.21.6"
iii-sdk = "=0.22.0-alpha.3"
iii-console-ui = { path = "../crates/console-ui" }
arc-swap = "1"
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "signal", "time", "process"] }
Expand Down
Loading
Loading