Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
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
29 changes: 24 additions & 5 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.13.0-next.1"
iii-sdk = "=0.16.0-next.2"
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
14 changes: 7 additions & 7 deletions acp/src/handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::sync::Arc;
use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};

use dashmap::{DashMap, DashSet};
use iii_sdk::{FunctionRef, III, RegisterFunctionMessage, RegisterTriggerInput};
use iii_sdk::{FunctionRef, III, RegisterFunction, RegisterTriggerInput};
use serde_json::{Value, json};
use uuid::Uuid;

Expand Down Expand Up @@ -681,10 +681,9 @@ fn register_event_subscriber(
let iii_inner = iii.clone();
let owned_inner = owned_sessions.clone();
let locks_inner = history_locks.clone();
let function = iii.register_function((
RegisterFunctionMessage::with_id(fn_id.clone())
.with_description("ACP agent::events → stdout fan-in".into()),
move |payload: Value| {
let function = iii.register_function(
fn_id.clone(),
RegisterFunction::new_async(move |payload: Value| {
let outbound = outbound_inner.clone();
let seq = seq_inner.clone();
let iii = iii_inner.clone();
Expand All @@ -694,8 +693,9 @@ fn register_event_subscriber(
forward_agent_event(&iii, &outbound, &seq, &owned, &locks, payload).await;
Ok(json!({ "ok": true }))
}
},
));
})
.description("ACP agent::events → stdout fan-in"),
);

let trigger = match iii.register_trigger(RegisterTriggerInput {
trigger_type: "stream".into(),
Expand Down
31 changes: 25 additions & 6 deletions coder/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 coder/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ path = "src/main.rs"
path = "src/lib.rs"

[dependencies]
iii-sdk = "=0.13.0-next.1"
iii-sdk = "=0.16.0-next.2"
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "signal", "time", "fs", "io-util"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
Expand Down
99 changes: 61 additions & 38 deletions coder/src/functions/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ pub mod update_file;

use std::sync::Arc;

use iii_sdk::{RegisterFunction, III};
use iii_sdk::{IIIError, RegisterFunction, III};

use crate::config::CoderConfig;
use crate::path::PathResolver;
Expand All @@ -32,10 +32,15 @@ pub fn register_all(iii: &III, resolver: Arc<PathResolver>, cfg: Arc<CoderConfig

fn register_read_file(iii: &III, resolver: Arc<PathResolver>, cfg: Arc<CoderConfig>) {
iii.register_function(
RegisterFunction::new_async("coder::read-file", move |req: read_file::ReadFileInput| {
"coder::read-file",
RegisterFunction::new_async(move |req: read_file::ReadFileInput| {
let resolver = resolver.clone();
let cfg = cfg.clone();
async move { read_file::handle(resolver, cfg, req).await }
async move {
read_file::handle(resolver, cfg, req)
.await
.map_err(IIIError::from)
}
})
.description(
"Read a file relative to base_path. Returns content plus \
Expand All @@ -47,10 +52,15 @@ fn register_read_file(iii: &III, resolver: Arc<PathResolver>, cfg: Arc<CoderConf

fn register_search(iii: &III, resolver: Arc<PathResolver>, cfg: Arc<CoderConfig>) {
iii.register_function(
RegisterFunction::new_async("coder::search", move |req: search::SearchInput| {
"coder::search",
RegisterFunction::new_async(move |req: search::SearchInput| {
let resolver = resolver.clone();
let cfg = cfg.clone();
async move { search::handle(resolver, cfg, req).await }
async move {
search::handle(resolver, cfg, req)
.await
.map_err(IIIError::from)
}
})
.description(
"Search file contents and/or paths under base_path. Supports \
Expand All @@ -63,14 +73,16 @@ fn register_search(iii: &III, resolver: Arc<PathResolver>, cfg: Arc<CoderConfig>

fn register_update_file(iii: &III, resolver: Arc<PathResolver>, cfg: Arc<CoderConfig>) {
iii.register_function(
RegisterFunction::new_async(
"coder::update-file",
move |req: update_file::UpdateFileInput| {
let resolver = resolver.clone();
let cfg = cfg.clone();
async move { update_file::handle(resolver, cfg, req).await }
},
)
"coder::update-file",
RegisterFunction::new_async(move |req: update_file::UpdateFileInput| {
let resolver = resolver.clone();
let cfg = cfg.clone();
async move {
update_file::handle(resolver, cfg, req)
.await
.map_err(IIIError::from)
}
})
.description(
"Apply batched line-oriented and regex edits across one or more \
files. Line ops: { op: 'insert', at_line, content } | \
Expand All @@ -85,14 +97,16 @@ fn register_update_file(iii: &III, resolver: Arc<PathResolver>, cfg: Arc<CoderCo

fn register_create_file(iii: &III, resolver: Arc<PathResolver>, cfg: Arc<CoderConfig>) {
iii.register_function(
RegisterFunction::new_async(
"coder::create-file",
move |req: create_file::CreateFileInput| {
let resolver = resolver.clone();
let cfg = cfg.clone();
async move { create_file::handle(resolver, cfg, req).await }
},
)
"coder::create-file",
RegisterFunction::new_async(move |req: create_file::CreateFileInput| {
let resolver = resolver.clone();
let cfg = cfg.clone();
async move {
create_file::handle(resolver, cfg, req)
.await
.map_err(IIIError::from)
}
})
.description(
"Create one or more files. Per-file `overwrite` and `parents` \
flags; non-accessible paths return C211.",
Expand All @@ -102,13 +116,15 @@ fn register_create_file(iii: &III, resolver: Arc<PathResolver>, cfg: Arc<CoderCo

fn register_delete_file(iii: &III, resolver: Arc<PathResolver>) {
iii.register_function(
RegisterFunction::new_async(
"coder::delete-file",
move |req: delete_file::DeleteFileInput| {
let resolver = resolver.clone();
async move { delete_file::handle(resolver, req).await }
},
)
"coder::delete-file",
RegisterFunction::new_async(move |req: delete_file::DeleteFileInput| {
let resolver = resolver.clone();
async move {
delete_file::handle(resolver, req)
.await
.map_err(IIIError::from)
}
})
.description(
"Remove one or more paths. Directories need `recursive: true`; \
missing paths are idempotent successes; recursive removal \
Expand All @@ -119,14 +135,16 @@ fn register_delete_file(iii: &III, resolver: Arc<PathResolver>) {

fn register_list_folder(iii: &III, resolver: Arc<PathResolver>, cfg: Arc<CoderConfig>) {
iii.register_function(
RegisterFunction::new_async(
"coder::list-folder",
move |req: list_folder::ListFolderInput| {
let resolver = resolver.clone();
let cfg = cfg.clone();
async move { list_folder::handle(resolver, cfg, req).await }
},
)
"coder::list-folder",
RegisterFunction::new_async(move |req: list_folder::ListFolderInput| {
let resolver = resolver.clone();
let cfg = cfg.clone();
async move {
list_folder::handle(resolver, cfg, req)
.await
.map_err(IIIError::from)
}
})
.description(
"Paginated single-folder listing, sorted by name. \
Non-accessible entries are still listed with a \
Expand All @@ -137,10 +155,15 @@ fn register_list_folder(iii: &III, resolver: Arc<PathResolver>, cfg: Arc<CoderCo

fn register_tree(iii: &III, resolver: Arc<PathResolver>, cfg: Arc<CoderConfig>) {
iii.register_function(
RegisterFunction::new_async("coder::tree", move |req: tree::TreeInput| {
"coder::tree",
RegisterFunction::new_async(move |req: tree::TreeInput| {
let resolver = resolver.clone();
let cfg = cfg.clone();
async move { tree::handle(resolver, cfg, req).await }
async move {
tree::handle(resolver, cfg, req)
.await
.map_err(IIIError::from)
}
})
.description(
"Recursive directory snapshot bounded by `max_depth` and a \
Expand Down
3 changes: 1 addition & 2 deletions coder/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::sync::Arc;

use anyhow::Result;
use clap::Parser;
use iii_sdk::{register_worker, InitOptions, OtelConfig, WorkerMetadata};
use iii_sdk::{register_worker, InitOptions, WorkerMetadata};

use coder::config;
use coder::functions;
Expand Down Expand Up @@ -83,7 +83,6 @@ async fn main() -> Result<()> {
let iii = register_worker(
&cli.url,
InitOptions {
otel: Some(OtelConfig::default()),
metadata: Some(WorkerMetadata {
runtime: "rust".to_string(),
version: env!("CARGO_PKG_VERSION").to_string(),
Expand Down
Loading
Loading