Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
f8cd087
feat(observability): scaffold iii-observability rust crate
guibeira May 21, 2026
df26992
feat(observability): move OtelConfig + ReconnectionConfig to rust crate
guibeira May 21, 2026
fe95671
feat(observability): move context + baggage helpers to rust crate
guibeira May 21, 2026
3e87462
feat(observability): move payload + span ops + baggage processor
guibeira May 21, 2026
b4b7207
feat(observability): move init/shutdown/flush/with_span/execute_trace…
guibeira May 21, 2026
26a4065
feat(observability): move Logger to rust crate
guibeira May 21, 2026
9a0b529
refactor(sdk-rust): depend on iii-observability + re-export for back-…
guibeira May 21, 2026
0c41cfe
fix(observability): add version to workspace dep for crates.io packaging
guibeira May 21, 2026
efe9662
feat(observability): scaffold @iii-dev/observability node package
guibeira May 21, 2026
fdee953
feat(observability): align tsdown config with monorepo conventions
guibeira May 21, 2026
911d5fd
feat(observability): move telemetry-system + worker-metrics + otel-wo…
guibeira May 21, 2026
7046c1d
fix(observability): add forceFlush to EngineLogExporter for consisten…
guibeira May 21, 2026
c6a22c0
feat(observability): add Logger + executeTracedRequest + flushOtel
guibeira May 21, 2026
86cc771
feat(observability): expose full node public surface
guibeira May 22, 2026
6fa73da
refactor(sdk-node): depend on @iii-dev/observability + re-export for …
guibeira May 22, 2026
609ccb9
fix(sdk-node): update tests to import from @iii-dev/observability aft…
guibeira May 22, 2026
f65590c
fix(sdk-node): restore logger test mocking after observability packag…
guibeira May 22, 2026
95d64ee
fix(sdk-node): resolve @iii-dev/observability source in vitest + fix …
guibeira May 22, 2026
76335e2
fix(observability): add files field to exclude src from npm tarball
guibeira May 22, 2026
19e56b9
fix(observability): drain exporter queues when connection enters fail…
guibeira May 22, 2026
6076cd1
feat(observability): scaffold iii-observability python package
guibeira May 22, 2026
5ac7e66
feat(observability): move telemetry + logger + ReconnectionConfig to …
guibeira May 22, 2026
26ed0d3
feat(observability): add execute_traced_request + flush_otel to pytho…
guibeira May 22, 2026
24b6248
feat(observability): expose full python public surface
guibeira May 22, 2026
b59f7e5
refactor(sdk-python): depend on iii-observability + re-export for bac…
guibeira May 22, 2026
f2be516
fix(sdk-python): export all telemetry functions from iii_observability
guibeira May 22, 2026
d50bb9b
fix(sdk-python): update test_telemetry_types to import OtelConfig fro…
guibeira May 22, 2026
43620ee
ci(release): publish @iii-dev/observability to npm
guibeira May 22, 2026
a6595ab
ci(release): publish iii-observability to pypi
guibeira May 22, 2026
3e10d85
ci(release): publish iii-observability to crates.io
guibeira May 22, 2026
4d2d8fc
ci(release): order SDK publishes after observability publishes
guibeira May 22, 2026
0cb3fa2
ci(release): include observability publishes in completion summary
guibeira May 22, 2026
d30bcd0
style(sdk-rust): apply cargo fmt to satisfy CI fmt check
guibeira May 22, 2026
b3571c4
ci(sdk-node): build @iii-dev/observability before iii-sdk type check
guibeira May 22, 2026
4b333e1
fix(sdk-python): resolve iii-observability via local path + add py.typed
guibeira May 22, 2026
97531b0
style(sdk-python): ruff sort imports after iii_observability move
guibeira May 22, 2026
1c17dc7
test(sdk-python): retarget telemetry tests at iii_observability after…
guibeira May 22, 2026
433fdf6
test(sdk-python): repoint monkeypatch targets at iii_observability
guibeira May 22, 2026
fbc462b
fix(observability): address PR review findings
guibeira May 22, 2026
5aa8e6d
refactor(observability): drop back-compat re-exports; migrate callers…
guibeira May 22, 2026
158ddaf
fix(py-example): use trigger_async inside async handlers + import Log…
guibeira May 23, 2026
23878ec
chore: auto-render skill artifacts
github-actions[bot] May 25, 2026
0d62a76
docs(changelog): record iii-observability split + revert 0.11 archive…
guibeira May 25, 2026
aa1baed
docs(changelog): drop 0.13 observability entry; moves to PR #1686 (do…
guibeira May 25, 2026
9c08d59
docs(rust-sdk): align register_function reshape across SDK docs and s…
guibeira May 25, 2026
84704fc
docs(changelog): move align-rust register_function entry to 0.14, add…
guibeira May 25, 2026
03903d8
docs: revert auto-rendered skill artifact; doc updates live in PR #1686
guibeira May 25, 2026
4b25b7d
docs: revert all doc changes from this PR
guibeira May 25, 2026
f03bbdf
fix(observability): address PR review batch 2
guibeira May 25, 2026
1070db9
fix(skills/rust): iii-sdk has no otel feature; install iii-observabil…
guibeira May 25, 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
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,9 @@ jobs:
#- name: Lint
# run: npx @biomejs/biome check sdk/packages/node

- name: Build observability (prerequisite for type check)
run: pnpm --filter @iii-dev/observability build

- name: Type check
run: pnpm --filter iii-sdk exec tsc --noEmit

Expand Down
66 changes: 61 additions & 5 deletions .github/workflows/release-iii.yml
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,7 @@ jobs:

sdk-npm:
name: SDK Node Publish
needs: [setup, create-iii-release]
needs: [setup, create-iii-release, observability-npm]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_npm.yml
with:
Expand All @@ -410,7 +410,7 @@ jobs:

sdk-npm-browser:
name: SDK Browser Publish
needs: [setup, create-iii-release]
needs: [setup, create-iii-release, observability-npm]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_npm.yml
with:
Expand All @@ -425,9 +425,26 @@ jobs:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}

observability-npm:
name: Observability Node Publish
needs: [setup, create-iii-release]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_npm.yml
with:
package_path: sdk/packages/node/observability
npm_tag: ${{ needs.setup.outputs.npm_tag }}
build_filter: "@iii-dev/observability"
dry_run: ${{ needs.setup.outputs.dry_run == 'true' }}
slack_thread_ts: ${{ needs.setup.outputs.slack_ts }}
slack_label: Observability Node (npm)
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}

sdk-py:
name: SDK Python Publish
needs: [setup, create-iii-release]
needs: [setup, create-iii-release, observability-py]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_py.yml
with:
Expand All @@ -440,9 +457,24 @@ jobs:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}

observability-py:
name: Observability Python Publish
needs: [setup, create-iii-release]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_py.yml
with:
package_path: sdk/packages/python/observability
dry_run: ${{ needs.setup.outputs.dry_run == 'true' }}
slack_thread_ts: ${{ needs.setup.outputs.slack_ts }}
slack_label: Observability Python (pypi)
secrets:
PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}

sdk-rust:
name: SDK Rust Publish
needs: [setup, create-iii-release]
needs: [setup, create-iii-release, observability-rust]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_rust-cargo.yml
with:
Expand All @@ -455,6 +487,21 @@ jobs:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}

observability-rust:
name: Observability Rust Publish
needs: [setup, create-iii-release]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_rust-cargo.yml
with:
package_path: sdk/packages/rust/observability
dry_run: ${{ needs.setup.outputs.dry_run == 'true' }}
slack_thread_ts: ${{ needs.setup.outputs.slack_ts }}
slack_label: Observability Rust (cargo)
secrets:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}

# ──────────────────────────────────────────────────────────────
# Docker
# ──────────────────────────────────────────────────────────────
Expand Down Expand Up @@ -589,6 +636,9 @@ jobs:
- sdk-npm-browser
- sdk-py
- sdk-rust
- observability-npm
- observability-py
- observability-rust
- docker-engine
- homebrew-engine
- homebrew-console
Expand All @@ -612,6 +662,9 @@ jobs:
SDK_NPM_BROWSER_RESULT: ${{ needs.sdk-npm-browser.result }}
SDK_PY_RESULT: ${{ needs.sdk-py.result }}
SDK_RUST_RESULT: ${{ needs.sdk-rust.result }}
OBS_NPM_RESULT: ${{ needs.observability-npm.result }}
OBS_PY_RESULT: ${{ needs.observability-py.result }}
OBS_RUST_RESULT: ${{ needs.observability-rust.result }}
DOCKER_RESULT: ${{ needs.docker-engine.result }}
BREW_ENGINE_RESULT: ${{ needs.homebrew-engine.result }}
BREW_CONSOLE_RESULT: ${{ needs.homebrew-console.result }}
Expand All @@ -638,6 +691,9 @@ jobs:
LINES="$LINES$(icon "$SDK_NPM_BROWSER_RESULT") SDK Browser\n"
LINES="$LINES$(icon "$SDK_PY_RESULT") SDK Python\n"
LINES="$LINES$(icon "$SDK_RUST_RESULT") SDK Rust\n"
LINES="$LINES$(icon "$OBS_NPM_RESULT") Observability Node\n"
LINES="$LINES$(icon "$OBS_PY_RESULT") Observability Python\n"
LINES="$LINES$(icon "$OBS_RUST_RESULT") Observability Rust\n"
LINES="$LINES$(icon "$BUILTIN_WORKERS_RESULT") Builtin Workers Registry\n"
LINES="$LINES$(icon "$WORKER_SKILLS_RESULT") Worker Skills Registry\n"

Expand All @@ -647,7 +703,7 @@ jobs:
LINES="$LINES$(icon "$BREW_CONSOLE_RESULT") Homebrew (iii-console)\n"
fi

for r in "$INIT_RESULT" "$FIRMWARE_RESULT" "$ENGINE_RESULT" "$WORKER_RESULT" "$CONSOLE_RESULT" "$SDK_NPM_RESULT" "$SDK_NPM_BROWSER_RESULT" "$SDK_PY_RESULT" "$SDK_RUST_RESULT" "$BUILTIN_WORKERS_RESULT" "$WORKER_SKILLS_RESULT"; do
for r in "$INIT_RESULT" "$FIRMWARE_RESULT" "$ENGINE_RESULT" "$WORKER_RESULT" "$CONSOLE_RESULT" "$SDK_NPM_RESULT" "$SDK_NPM_BROWSER_RESULT" "$SDK_PY_RESULT" "$SDK_RUST_RESULT" "$OBS_NPM_RESULT" "$OBS_PY_RESULT" "$OBS_RUST_RESULT" "$BUILTIN_WORKERS_RESULT" "$WORKER_SKILLS_RESULT"; do
[[ "$r" != "success" && "$r" != "skipped" ]] && OVERALL="failure"
done

Expand Down
33 changes: 29 additions & 4 deletions Cargo.lock

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

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ members = [
"engine/function-macros",
"sdk/packages/rust/iii",
"sdk/packages/rust/iii-example",
"sdk/packages/rust/observability",
"console/packages/console-rust",
"crates/iii-init",
"crates/iii-filesystem",
Expand All @@ -26,6 +27,7 @@ homepage = "https://iii.dev"

[workspace.dependencies]
iii-sdk = { path = "sdk/packages/rust/iii" }
iii-observability = { path = "sdk/packages/rust/observability", version = "0.13.0-next.1" }
scaffolder-core = { path = "crates/scaffolder-core" }

# Shared dependencies used by tooling crates
Expand Down
1 change: 1 addition & 0 deletions console/packages/console-rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ tokio-tungstenite = "0.28"
futures-util = { version = "0.3", default-features = false, features = ["sink"] }
tower-http = { version = "0.6.8", features = ["cors"] }
iii-sdk = { workspace = true }
iii-observability = { workspace = true }

# Async runtime
tokio = { version = "1", features = ["full"] }
Expand Down
2 changes: 1 addition & 1 deletion console/packages/console-rust/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ async fn main() -> Result<()> {
"OpenTelemetry enabled (service: {})",
args.otel_service_name
);
Some(iii_sdk::OtelConfig {
Some(iii_observability::OtelConfig {
enabled: Some(true),
service_name: Some(args.otel_service_name),
service_version: Some(env!("CARGO_PKG_VERSION").to_string()),
Expand Down
1 change: 1 addition & 0 deletions crates/iii-worker/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ iii-filesystem = { path = "../iii-filesystem" }
iii-network = { path = "../iii-network" }
# TODO: switch to crates.io pin before shipping; path dep for co-development
iii-sdk = { path = "../../sdk/packages/rust/iii" }
iii-observability = { workspace = true }
iii-shell-client = { path = "../iii-shell-client" }
iii-shell-proto = { path = "../iii-shell-proto" }
iii-supervisor = { path = "../iii-supervisor" }
Expand Down
4 changes: 2 additions & 2 deletions crates/iii-worker/src/cli/worker_manager_daemon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ use crate::core::{
list as core_list, remove as core_remove, start as core_start, stop as core_stop,
update as core_update,
};
use iii_observability::OtelConfig;
use iii_sdk::{
III, InitOptions, OtelConfig, RegisterFunction, RegisterTriggerType, WorkerMetadata,
register_worker,
III, InitOptions, RegisterFunction, RegisterTriggerType, WorkerMetadata, register_worker,
};
use schemars::{JsonSchema, schema_for};
use serde_json::Value;
Expand Down
3 changes: 2 additions & 1 deletion crates/iii-worker/src/sandbox_daemon/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ pub use registry::SandboxRegistry;

use std::sync::Arc;

use iii_sdk::{InitOptions, OtelConfig, RegisterFunction, WorkerMetadata, register_worker};
use iii_observability::OtelConfig;
use iii_sdk::{InitOptions, RegisterFunction, WorkerMetadata, register_worker};

use crate::sandbox_daemon::config::SandboxConfig;
use crate::sandbox_daemon::errors::SandboxErrorWire;
Expand Down
1 change: 1 addition & 0 deletions engine/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ rabbitmq = ["lapin"]
[dependencies]
function-macros = { path = "function-macros" }
iii-sdk = { workspace = true }
iii-observability = { workspace = true }
scaffolder-core = { workspace = true }
console = { workspace = true }
ctrlc = { workspace = true }
Expand Down
9 changes: 5 additions & 4 deletions engine/src/workers/observability/otel.rs
Original file line number Diff line number Diff line change
Expand Up @@ -739,7 +739,7 @@ where
let _ = IN_MEMORY_STORAGE.set(memory_storage);

SdkTracerProvider::builder()
.with_span_processor(iii_sdk::BaggageSpanProcessor::default())
.with_span_processor(iii_observability::BaggageSpanProcessor::default())
.with_batch_exporter(exporter)
.with_sampler(sampler)
.with_id_generator(RandomIdGenerator::default())
Expand All @@ -758,7 +758,7 @@ where
config.service_name.clone(),
);
SdkTracerProvider::builder()
.with_span_processor(iii_sdk::BaggageSpanProcessor::default())
.with_span_processor(iii_observability::BaggageSpanProcessor::default())
.with_simple_exporter(exporter)
.with_sampler(sampler)
.with_id_generator(RandomIdGenerator::default())
Expand All @@ -772,7 +772,7 @@ where
InMemorySpanExporter::new(config.memory_max_spans, config.service_name.clone());

SdkTracerProvider::builder()
.with_span_processor(iii_sdk::BaggageSpanProcessor::default())
.with_span_processor(iii_observability::BaggageSpanProcessor::default())
.with_simple_exporter(exporter)
.with_sampler(sampler)
.with_id_generator(RandomIdGenerator::default())
Expand Down Expand Up @@ -803,6 +803,7 @@ where
);

SdkTracerProvider::builder()
.with_span_processor(iii_observability::BaggageSpanProcessor::default())
.with_batch_exporter(tee_exporter)
.with_sampler(sampler)
.with_id_generator(RandomIdGenerator::default())
Expand All @@ -821,7 +822,7 @@ where
config.service_name.clone(),
);
SdkTracerProvider::builder()
.with_span_processor(iii_sdk::BaggageSpanProcessor::default())
.with_span_processor(iii_observability::BaggageSpanProcessor::default())
.with_simple_exporter(exporter)
Comment thread
coderabbitai[bot] marked this conversation as resolved.
.with_sampler(sampler)
.with_id_generator(RandomIdGenerator::default())
Expand Down
Loading
Loading