Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
4efd80d
chore(core): remove zero-reference deps and redirect_links domain (#5…
YellowSnnowmann Jul 21, 2026
bea380d
feat(bench): embedded-RSS benchmark harness + report-only CI (#5046) …
YellowSnnowmann Jul 21, 2026
4019a9a
feat(core): gate the desktop-automation cluster behind a default-ON f…
YellowSnnowmann Jul 21, 2026
fc0222f
perf(agent): share one Arc<Config> across per-build tool/provider/ref…
YellowSnnowmann Jul 21, 2026
9d14d91
chore(release): merge release v0.63.0 back into main
github-actions[bot] Jul 21, 2026
846db8a
feat(flows): render Workflow Copilot chat via the shared composer tra…
senamakel Jul 21, 2026
f92888a
feat(flows): add "Save & enable" to the Flow Canvas copilot proposal …
graycyrus Jul 21, 2026
7ec16e8
fix(agentbox): normalize GMI_MAAS_BASE_URL with trailing /v1 (#5091)
Horst1993 Jul 21, 2026
78949de
fix(conversations): stop the thread-goal footer text from auto-scroll…
jgentes Jul 21, 2026
86e1a4c
fix(approval): preserve replacement routes during cleanup (#4786)
samrusani Jul 21, 2026
e2f9014
fix(core): seed tool-execution timeout on the always-on boot path (#5…
oxoxDev Jul 21, 2026
dfa5738
fix(keyring): declare msg mutable for cfg(windows) push_str (E0596) (…
myi1 Jul 21, 2026
4b2d92c
fix(api): classify Atlas Cloud as inference provider (#4885)
binyangzhu000-sudo Jul 21, 2026
c309be8
fix(flows): show plain-language step labels in the workflow proposal …
graycyrus Jul 21, 2026
40852cd
feat(flows): let the copilot live test-run flows behind the approval …
graycyrus Jul 21, 2026
81f58ee
test(ci): exercise full validation suite (#5083)
senamakel Jul 22, 2026
1fb1538
fix(flows): live-refresh the runs rail when a run starts (B35) (#5099)
graycyrus Jul 22, 2026
31fca02
fix(inference): keep Claude CLI prompts out of Windows argv (#5103)
samrusani Jul 22, 2026
ddeee5b
feat(core): shed embedded deps behind inference/documents/crash-repor…
YellowSnnowmann Jul 22, 2026
06be00c
fix(tinyplace): wire handle transfer end-to-end (Closes #4929) (#4998)
M3gA-Mind Jul 22, 2026
f18414f
fix(voice): handle U16 sample format in the fallback capture path (#4…
mysma-9403 Jul 22, 2026
c5fea23
fix(mcp): hide raw registry errors (#4716)
samrusani Jul 22, 2026
63e4fe2
feat(security): opt-in auto-approve-all setting that bypasses the app…
graycyrus Jul 22, 2026
5fcde25
feat(dev): library-mode benchmark environment, fleet/budget gates, an…
senamakel Jul 22, 2026
0eeee12
feat(core): channels compile-time feature gate (#4801) — completes ep…
oxoxDev Jul 22, 2026
002530d
feat(flows): link to the saved workflow from the chat proposal card (…
graycyrus Jul 22, 2026
58494e1
fix(flows): shorter approval TTL for copilot live-run parks (#5112)
graycyrus Jul 22, 2026
9b72616
feat(flows): FlowRunFinished event — fully event-driven runs rail (co…
graycyrus Jul 22, 2026
41bad05
feat(flows): teach the workflow builder to pick specialist agents via…
graycyrus Jul 22, 2026
9e312b6
chore(deps): update vendored runtime crates (#5081)
senamakel Jul 22, 2026
353e07c
fix(embeddings): classify 403 'not an embeddings model' as model-inco…
M3gA-Mind Jul 22, 2026
f55376b
fix(react-ui): surface layered pipeline status in Data Sync (GH-4690)…
M3gA-Mind Jul 22, 2026
81ac128
fix(flows): reject an unknown agent_ref at author time instead of mid…
graycyrus Jul 22, 2026
5b8a9f2
fix(composio): drop non-existent Discord channel/message slugs from c…
YellowSnnowmann Jul 22, 2026
a8d13fa
fix(flows): repair main compile break from crossed PRs (#5128)
senamakel Jul 22, 2026
9bb59ca
feat(medulla_local): supervise a local medulla-serve child (Flavor A …
senamakel Jul 22, 2026
60a7618
feat(settings): add dismissible in-app GitHub star CTA (#5005) (#5110)
M3gA-Mind Jul 22, 2026
fb1f909
chore(release): merge release v0.63.1 back into main
github-actions[bot] Jul 22, 2026
c480e6d
fix(agents): run custom registry agents with their real tools (flows …
graycyrus Jul 22, 2026
2bcd344
refactor(memory): finish TinyCortex consolidation (#5140)
senamakel Jul 23, 2026
81d09b6
feat(tui): add logs-first tabbed CLI experience (#5131)
senamakel Jul 23, 2026
5041454
docs: Add CITATION.cff for software citation metadata (#5142)
mwakidenis Jul 23, 2026
08f28de
feat(profiles): hermes-style agent profile homes — per-profile SOUL.m…
senamakel Jul 23, 2026
87fe420
feat(runtime): pool node/python runtime processes across agents and s…
YellowSnnowmann Jul 23, 2026
49b5bb7
feat(conversations): unify agent activity into one live rail (#5141)
sanil-23 Jul 23, 2026
1c30d3f
chore(tinyagents): align v2.1 and reconcile migration plan (#5130)
senamakel Jul 23, 2026
e9686e4
fix(agents): fail clearly instead of silently dropping spawn_async_su…
graycyrus Jul 23, 2026
1fbd05f
fix(flows): live-run reliability — reconcile orphaned/cancelled runs …
graycyrus Jul 23, 2026
6459790
docs(contributing): fix Windows desktop setup (#5145)
NgoQuocViet2001 Jul 23, 2026
5199757
docs(install): fix macOS Homebrew install to use official cask (#5152)
senamakel Jul 23, 2026
21ec097
fix(approval): redact non-canonically-cased home paths in scrub_paths…
mysma-9403 Jul 23, 2026
d465096
fix(cron): stop one-shot At jobs from re-firing every poll (#5039)
mysma-9403 Jul 23, 2026
f0d21a2
perf(orchestration): batch the per-session unread_count into one quer…
mysma-9403 Jul 23, 2026
83d1dc3
feat(learning): surface facet provenance (cue_families, evidence_refs…
mysma-9403 Jul 23, 2026
c8ecb85
fix(flows): extract embedded JSON from prose text, preventing output_…
senamakel Jul 23, 2026
69196b4
fix(composio): add global auto-proceed safety net for re-delegated su…
senamakel Jul 23, 2026
e780277
refactor(runtime): un-bundle non-channel bootstrap jobs from ServiceS…
oxoxDev Jul 23, 2026
2525400
chore(core): slim the core — remove dead modules, move desktop featur…
senamakel Jul 24, 2026
d70e206
chore(fmt): rustfmt caps.rs + provider.rs to unblock the CI pipeline …
graycyrus Jul 24, 2026
dbf2d35
refactor(core): make spaCy opt-in + demand-gate the Python runtime (#…
graycyrus Jul 24, 2026
c9f2582
refactor(app): remove dead screen-intelligence UI remnants (#5056) (#…
graycyrus Jul 24, 2026
7aca0ea
refactor(app): remove orphaned frontend modules (#5056) (#5095)
graycyrus Jul 24, 2026
ef38f1c
fix(flows): stop the builder authoring memory steps that fabricate (#…
graycyrus Jul 24, 2026
7db104b
refactor(tinyagents): complete provider cutover and lifecycle consoli…
senamakel Jul 24, 2026
8261f34
ci: lint macOS-gated Rust in CI Full (#5181)
senamakel Jul 24, 2026
75e212c
fix(flows): make native `oh:` tool results usable and fail loudly, do…
graycyrus Jul 24, 2026
55d3ab5
fix: Sentry triage — resolve 16 actionable issues across tauri-react,…
senamakel Jul 24, 2026
2d6064c
feat(memory): expose compiled flavour profiles via a read-only memory…
graycyrus Jul 24, 2026
b9e0ce6
feat(flows): per-flow memory namespace + post-run digest (flow:<id>) …
graycyrus Jul 24, 2026
ca0e65f
chore(app): remove unused files and code with Knip (#5185)
senamakel Jul 25, 2026
79e2fc2
fix(appimage): anchor sharun library paths to AppDir (#5189)
senamakel Jul 25, 2026
1094472
refactor(ui): establish reusable React foundations (#5188)
senamakel Jul 25, 2026
9f22ae4
fix(config): heal and diagnose an unreadable config.toml instead of d…
YellowSnnowmann Jul 25, 2026
ee1fa76
refactor: remove screen awareness and capture surfaces (#5186)
senamakel Jul 25, 2026
fd04d37
chore(release): merge release v0.63.2 back into main
github-actions[bot] Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 19 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,25 @@ OPENHUMAN_SKILLS_WORKING_MEMORY_ENABLED=true
# [optional] Reserved cache directory for future managed CPython installs.
# OPENHUMAN_RUNTIME_PYTHON_CACHE_DIR=

# ---------------------------------------------------------------------------
# Shared language-runtime pool (#5106)
# ---------------------------------------------------------------------------
# Reuse a small, bounded set of warm node/python worker processes across skill
# runs and node_exec instead of forking one interpreter child per run. Full
# tuning lives in config.toml `[runtime_pool]`; these are the operator knobs.
# Node pooling is ON by default (each job runs in an isolated worker_thread).
# Python pooling is OFF by default (jobs share one interpreter, so reuse can
# leak globals across runs); opt in with `[runtime_pool.python] enabled = true`.
# [optional] Master kill switch. Default: true. `false` reverts every caller to
# the legacy per-call spawn (no behavioural change, just no reuse).
# OPENHUMAN_RUNTIME_POOL_ENABLED=true
# [optional] Max concurrently-resident node workers (default 2). Work beyond
# this queues rather than forking a new interpreter.
# OPENHUMAN_RUNTIME_POOL_NODE_MAX_WORKERS=2
# [optional] Max concurrently-resident python workers (default 2). Only takes
# effect when python pooling is explicitly enabled (see above).
# OPENHUMAN_RUNTIME_POOL_PYTHON_MAX_WORKERS=2

# ---------------------------------------------------------------------------
# TokenJuice — content-aware tool-output compaction (the content router)
# ---------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion .github/tauri-cef-expected-sha
Original file line number Diff line number Diff line change
@@ -1 +1 @@
11ef51edbeadcca4517b18a037fff858a5dfae0f
455b47debb9d1f5d0f1527266e48af1670ad4bc5
25 changes: 16 additions & 9 deletions .github/workflows/build-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ jobs:
rustup target add aarch64-apple-darwin x86_64-apple-darwin
- name: Install Tauri dependencies (ubuntu only)
if: startsWith(matrix.settings.platform, 'ubuntu-')
env:
MATRIX_TARGET: ${{ matrix.settings.target }}
run: |
sudo apt-get update
sudo apt-get install -y \
Expand All @@ -180,7 +182,12 @@ jobs:
libevdev-dev libssl-dev libclang-dev desktop-file-utils \
libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 \
libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 \
libgbm1 libpango-1.0-0 libcairo2 libatspi2.0-0 libxshmfence1 libu2f-udev
libgbm1 libpango-1.0-0 libcairo2 libatspi2.0-0 libxshmfence1 libu2f-udev \
xvfb
if [ "$MATRIX_TARGET" = "x86_64-unknown-linux-gnu" ] \
&& ! command -v apparmor_parser >/dev/null 2>&1; then
sudo apt-get install -y apparmor
fi
# NOTE: The post-build dump lives further down (after `cargo tauri build`)
# so the binary actually exists when ldd runs. Running it here pre-build
# silently no-op'd and gave us no signal during the
Expand Down Expand Up @@ -528,19 +535,19 @@ jobs:
done

# Strip host graphics libraries (Mesa/libdrm/libva/libgbm) that lib4bin
# ldd-walks into the AppImage. Those drivers must come from the user's
# host system — even on a current Ubuntu runner the bundled Mesa can
# fail to initialize newer GPUs (RDNA3, Intel Arc, Lovelace) and
# crashes CEF on launch because the bundled libs shadow the host's
# working ones on LD_LIBRARY_PATH. CEF's own SwiftShader subdir is
# untouched. Re-signs the AppImage + updater tarball when signing
# is enabled.
- name: Strip host graphics libs from AppImage
# ldd-walks into the AppImage. Final-artifact validation runs before
# re-signing: amd64 also gets a bounded Xvfb launch from a foreign CWD,
# while arm64 receives static validation in this change. CEF's own
# SwiftShader subdir is untouched, and updater archives are rebuilt only
# after the validated image is final.
- name: Strip host graphics libs and validate final AppImage
if: startsWith(matrix.settings.platform, 'ubuntu-')
shell: bash
env:
MATRIX_TARGET: ${{ matrix.settings.target }}
PROFILE: ${{ inputs.build_profile }}
APPIMAGE_RUNTIME_SMOKE: ${{ matrix.settings.target == 'x86_64-unknown-linux-gnu' && '1' || '0' }}
APPIMAGE_RUNTIME_APPARMOR_USERNS: ${{ matrix.settings.target == 'x86_64-unknown-linux-gnu' && '1' || '0' }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY || secrets.UPDATER_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD || secrets.UPDATER_PRIVATE_KEY_PASSWORD }}
run: |
Expand Down
12 changes: 10 additions & 2 deletions .github/workflows/ci-full.yml
Original file line number Diff line number Diff line change
Expand Up @@ -287,13 +287,21 @@ jobs:
mkdir -p "$OPENHUMAN_WORKSPACE"
bash scripts/ci-cancel-aware.sh bash app/scripts/e2e-web-session.sh

- name: Pack Playwright E2E failure artifacts
if: failure()
run: |
mkdir -p .ci/artifacts
tar -czf .ci/artifacts/openhuman-playwright-failure-logs.tar.gz \
-C "$OPENHUMAN_WORKSPACE" .
env:
OPENHUMAN_WORKSPACE: ${{ runner.temp }}/openhuman-playwright-workspace

- name: Upload Playwright E2E failure artifacts
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: e2e-playwright-failure-logs-${{ github.run_id }}
path: |
${{ runner.temp }}/openhuman-playwright-workspace/**
path: .ci/artifacts/openhuman-playwright-failure-logs.tar.gz
retention-days: 7
if-no-files-found: ignore

Expand Down
55 changes: 52 additions & 3 deletions .github/workflows/ci-lite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ jobs:
run: |
bash scripts/ci-cancel-aware.sh cargo test --manifest-path Cargo.toml \
--no-default-features --features tokenjuice-treesitter --lib -- \
core::all:: core::cli:: core::jsonrpc:: core::legacy_aliases:: agent_registry::agents::loader::
core::all:: core::cli:: core::jsonrpc:: core::legacy_aliases:: core::runtime:: agent_registry::agents::loader::

- name: Guard — new feature-gated test modules must be acknowledged
# Self-maintaining coverage: the set of source files that #[cfg]-gate a test on
Expand All @@ -446,6 +446,7 @@ jobs:
core/cli_tests.rs
core/jsonrpc_tests.rs
core/legacy_aliases.rs
core/runtime/services.rs
openhuman/agent/harness/builtin_definitions.rs
openhuman/agent/harness/definition_tests.rs
openhuman/agent/harness/session/tests.rs
Expand All @@ -462,14 +463,62 @@ jobs:
openhuman/x402/stub.rs
EOF
)
ACTUAL=$(grep -rlE '#\[cfg\((not\()?feature = "(voice|media|web3|meet|mcp|skills|flows)"' src --include='*.rs' \
ACTUAL=$(grep -rlE '#\[cfg\((not\()?feature = "(voice|media|web3|meet|mcp|skills|flows|channels)"' src --include='*.rs' \
| xargs grep -lE '#\[test\]|#\[tokio::test\]|fn .*_test' 2>/dev/null | sed 's|^src/||' | sort -u)
if ! diff <(echo "$EXPECTED" | sed 's/^ *//' | sort -u) <(echo "$ACTUAL"); then
echo "::error::Gated-test file set changed. Update the EXPECTED allowlist in the rust-feature-gate-smoke lane, and extend the scoped 'cargo test' filter if the new module can carry an ungated-assert regression (see #5022)."
exit 1
fi
echo "gate-contract test coverage allowlist is current"

# Report-only (#5046). Measures steady-state RSS of an embedded openhuman_core
# agent roster and uploads the raw samples + a human summary. Deliberately NOT
# in `pr-ci-gate.needs`, so it can never fail a PR — it exists to accrue a
# baseline and its runner variance before the 30 MiB gate is flipped to
# blocking in a follow-up (add this job to pr-ci-gate + a threshold step then).
rust-rss-bench:
name: Rust RSS Benchmark (report-only)
needs: [changes]
if: needs.changes.outputs['rust-core'] == 'true'
runs-on: ubuntu-22.04
timeout-minutes: 40
container:
image: ghcr.io/tinyhumansai/openhuman_ci:rust-1.93.0
env:
CARGO_INCREMENTAL: "0"
steps:
- name: Checkout code
uses: actions/checkout@v7
with:
fetch-depth: 1
persist-credentials: false
submodules: recursive

- name: Cache Rust build artifacts
uses: Swatinem/rust-cache@v2
with:
workspaces: |
. -> target
cache-on-failure: true
shared-key: pr-rust-rss-bench

# Fixture-contract signal: the gated bin's unit tests (build_roster,
# warm-up turn) never enter the default coverage lane, so run them here.
- name: Run rss-bench fixture tests
run: bash scripts/ci-cancel-aware.sh cargo test --features rss-bench --bin rss-bench

- name: Build stripped-release rss-bench
run: bash scripts/ci-cancel-aware.sh cargo build --release --features rss-bench --bin rss-bench

- name: Measure embedded RSS (5 fresh procs x {1,8} agents)
run: ./target/release/rss-bench --out bench-rss.json | tee -a "$GITHUB_STEP_SUMMARY"

- name: Upload raw RSS samples
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: rss-bench-report
path: bench-rss.json

rust-core-coverage:
name: Rust Core Coverage (cargo-llvm-cov)
needs: [changes, rust-quality]
Expand Down Expand Up @@ -806,7 +855,7 @@ jobs:
key: tinycortex

- name: Run TinyCortex engine and Composio sync tests
run: bash scripts/ci-cancel-aware.sh cargo test --manifest-path vendor/tinycortex/Cargo.toml --features git-diff,sync
run: bash scripts/ci-cancel-aware.sh cargo test --manifest-path vendor/tinycortex/Cargo.toml --features git-diff,sync,persona

pr-ci-gate:
name: PR CI Gate
Expand Down
17 changes: 14 additions & 3 deletions .github/workflows/e2e-playwright.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,10 @@ jobs:
runs-on: ubuntu-22.04
container:
image: ghcr.io/tinyhumansai/openhuman_ci:latest
timeout-minutes: 30
# The complete serial web suite currently takes about 45 minutes on the
# shared runner; keep the standalone diagnostic workflow aligned with the
# 90-minute budget used by CI Full.
timeout-minutes: 90
steps:
- name: Checkout code
uses: actions/checkout@v7
Expand Down Expand Up @@ -73,12 +76,20 @@ jobs:
mkdir -p "$OPENHUMAN_WORKSPACE"
bash scripts/ci-cancel-aware.sh bash app/scripts/e2e-web-session.sh

- name: Pack Playwright E2E failure artifacts
if: failure()
run: |
mkdir -p .ci/artifacts
tar -czf .ci/artifacts/openhuman-playwright-failure-logs.tar.gz \
-C "$OPENHUMAN_WORKSPACE" .
env:
OPENHUMAN_WORKSPACE: ${{ runner.temp }}/openhuman-playwright-workspace

- name: Upload Playwright E2E failure artifacts
if: failure()
uses: actions/upload-artifact@v7
with:
name: e2e-playwright-failure-logs-${{ github.run_id }}
path: |
${{ runner.temp }}/openhuman-playwright-workspace/**
path: .ci/artifacts/openhuman-playwright-failure-logs.tar.gz
retention-days: 7
if-no-files-found: ignore
12 changes: 9 additions & 3 deletions .github/workflows/e2e-reusable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,8 @@ jobs:
- { name: provider-web, suites: "provider-web" }
- { name: webhooks, suites: "webhooks" }
- { name: connectors, suites: "connectors" }
- { name: commerce, suites: "payments,settings" }
- { name: payments, suites: "payments" }
- { name: settings, suites: "settings" }
steps:
- name: Checkout code
uses: actions/checkout@v7
Expand Down Expand Up @@ -727,6 +728,9 @@ jobs:
- name: Build E2E app
run: bash scripts/ci-cancel-aware.sh pnpm --filter openhuman-app test:e2e:build

- name: Clippy (macOS-gated Rust)
run: bash scripts/ci-cancel-aware.sh pnpm rust:clippy

- name: Package build artifact
run: |
# Stage the same runner-visible layout Linux/Windows use. The .app is
Expand Down Expand Up @@ -765,7 +769,8 @@ jobs:
- { name: provider-web, suites: "provider-web" }
- { name: webhooks, suites: "webhooks" }
- { name: connectors, suites: "connectors" }
- { name: commerce, suites: "payments,settings" }
- { name: payments, suites: "payments" }
- { name: settings, suites: "settings" }
steps:
- name: Checkout code
uses: actions/checkout@v7
Expand Down Expand Up @@ -976,7 +981,8 @@ jobs:
- { name: provider-web, suites: "provider-web" }
- { name: webhooks, suites: "webhooks" }
- { name: connectors, suites: "connectors" }
- { name: commerce, suites: "payments,settings" }
- { name: payments, suites: "payments" }
- { name: settings, suites: "settings" }
steps:
- name: Checkout code
uses: actions/checkout@v7
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -133,3 +133,5 @@ distribution.cer
CHANGELOG.preview.md
*.profraw
*.diff

.claude/worktrees/
Loading
Loading