Repository navigation
refactor(cron): move the scheduler-gate decision into tinymemory-api - #6807
Merged
senamakel merged 77 commits intoSep 30, 2026
Merged
Conversation
…deck useUnroutedApprovals treated a polled pending row as unrouted whenever its request_id was not *currently* in pendingApprovalByThread. Deciding from a chat card clears that entry at once, while the polled rows keep the park until the next poll (up to 15 s), so the answered park was rendered again above the composer and its decide failed with "already decided or expired". Remember every request id a chat card has shown and keep excluding it: a chat-owned park is never unrouted. Closes tinyhumansai#6799
Updated the pinned commit for the tinyagents subproject to include the latest changes from its upstream repository. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the pinned commits for the tinyagents, tinybox, and tinyflows vendored dependencies to incorporate upstream changes. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the pinned commits for the tinybox and tinyvoice vendor dependencies to their latest versions. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the pinned commit for the tinymemory vendored dependency to incorporate upstream fixes or improvements. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the pinned commit for the tinymemory vendored dependency to incorporate upstream changes. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the pinned commits for the tinyagents and tinyvoice vendor dependencies to incorporate upstream changes. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the pinned commits for the tinychannels and tinymemory vendor submodules to their latest versions. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the pinned commit of the tinyjuice vendored dependency to incorporate upstream fixes or improvements. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Updated the pinned commit for the tinymcp submodule to incorporate upstream changes. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the pinned commit for the tinymemory vendored dependency to incorporate upstream changes. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the lock file to reflect upgraded versions of tinytools, wacore, waproto, and whatsapp-rust crates, along with the addition of new dependencies such as bon, buffa, and compact_str. The arrayref and typed-builder crates have been removed as they are no longer required. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Updated the pinned commit for the tinyconnectors vendored dependency to incorporate upstream fixes or improvements. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Record the instant when a file read operation starts and pass it to the file state recording function, enabling future tracking of read duration. Also update the network tools to extract the validated URL from the new structured validation result instead of returning the entire object, ensuring downstream code receives the expected string type. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the pinned commit for the tinyruntime vendored dependency to include recent upstream changes. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Advance the pinned commits for the tinydocs and tinyruntime vendor submodules to incorporate upstream fixes and improvements. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Updated the pinned commit for the vendor/tinycomputer subproject to include recent changes, as indicated by the new commit hash. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
The test was calling `res.text()` to retrieve the response body for error reporting and JSON parsing, but the correct method for accessing the response output is `output()`. This change fixes the test to use the proper accessor, ensuring the assertion message and payload parsing work correctly. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
This change adds the tinycomputer library as a vendored dependency to ensure consistent builds and avoid reliance on external package availability during development and deployment. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Updated the pinned commit for the vendored tinysearch dependency to incorporate upstream changes. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Updated the pinned commit of the tinyskills vendor dependency to include recent changes. The submodule now points to a dirty commit reflecting local modifications. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the pinned commit for the tinyskills vendor dependency to a newer revision, incorporating upstream changes. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Updated the pinned commit for the vendor/tinyhosts submodule to a newer revision, incorporating upstream changes from the dependency. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Updated the pinned commit for the tinymemory vendored dependency to include recent changes. The new commit hash reflects the latest upstream state, ensuring the project uses an up-to-date version of the library. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
…eToolCall Removed the locally defined ToolCall struct from the provider types module and replaced all usages with the NativeToolCall type from the tinytools_agent dialect crate. This eliminates duplicated type definitions and aligns the codebase with the shared tool-call representation used across the agent system, reducing maintenance overhead and ensuring consistent serialization behavior. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Introduce a new scheduler gate module that provides policy-based access control and signal handling for the cron subsystem. The gate enforces scheduling policies and manages signal propagation, enabling more flexible and secure cron job management. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
…pi decision logic The README now reflects that the `Policy` and `Signals` types live in the vendored `tinymemory-api` crate rather than local modules, and the import order in `gate.rs` is adjusted accordingly. The CI pin-exemption entry is updated to cover the new `host::scheduler_gate_decide` module added on top of the existing v1.17.0 pin. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Removed a duplicate `reason` field from the tinymemory module pin exemption entry in the module-pin-exemptions.json file. The entry had two identical reason strings explaining why the pin was acceptable, and the second one was redundant. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Removed a trailing comma from the reason field in the tinymemory exemption entry to fix a JSON formatting inconsistency. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
…red-result test(goals): read structured goal tool results via output()
refactor(tools): move the filesystem tools into tinytools-std behind an FsGate seam
Updated the pinned commit for the tinyagents vendored subproject to incorporate upstream changes. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
…l-card fix(approvals): keep an answered chat approval out of the background deck
…ments Update the lockfile to reflect bumped crate versions across the workspace, including tinybox-core, tinybox-jail, tinychannels, and several others, along with a shift from windows-sys 0.60.2 to 0.61.2 for multiple dependencies. A downgrade of windows-core from 0.62.2 to 0.58.0 and itertools from 0.14.0 to 0.13.0 is also applied, and tinychannels-runtime gains a new thiserror dependency. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
The harness context ladder module was inadvertently removed during a previous refactor, breaking the agent's ability to manage context progression. This change restores the module and its integration with the ops module, ensuring the agent can correctly handle context ladder operations. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
…e for wrap-up detection The wrap-up fired flag was previously stored as a raw `AtomicBool`, which made it impossible to correlate the flag with the specific run instance that set it. This change replaces the `AtomicBool` with a `FinalCallWrapUpMiddleware` that tracks the run instance ID, and passes the instance ID through to `finalize_turn_outcome` so it can check whether the wrap-up was fired for the correct run rather than using a global atomic load. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Reordered import statements in 33 files to follow the convention of grouping external crate imports before internal crate imports, and moved `#[cfg(test)]` attributes to appear directly before the items they guard. This is a purely cosmetic change that standardises import ordering without altering any runtime behaviour. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update several internal crates to their latest versions, including tinytools from 0.4.1 to 0.5.0 and its dependent crates, along with various windows-sys dependency adjustments. Also add fs2 and tokio dependencies to tinybox-core and update base64 from 0.22.1 to 0.23.1 across tinychannels crates. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Several functions in the audio capture, always-on capture, and hotkey listener modules were returning non-string error types that could not be propagated through the existing `Result<_, String>` signatures. This change wraps those errors with `.map_err(|e| e.to_string())` so that all error paths consistently produce a human-readable string, matching the expected interface and preventing compilation failures when the underlying library changes its error type. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Co-authored-by: Medulla <medulla@tinyhumans.ai>
chore(vendor): repoint all vendor modules to their merged upstream main
park_for_approval turned GateOutcome::Deny into Prompted { approved: false },
which carries no reason, so the harness told the model only "tool call was
not approved". After a Deny the model asked the user to approve again, or
reached the same result through shell.
The GateOutcome -> GateDecision mapping moves into decision_for_outcome. A
refusal is now a Deny whose text names no human and no timeout and rules out
other routes. Approvals and the audit id are unchanged; the middleware path
and the gate's own reason text are untouched.
Closes tinyhumansai#6808
gate_decision allows every command class while [autonomy] enabled = false, the default; it is not tied to the full tier.
…lass The [policy-denied] marker classifies as a policy failure with a zero recovery budget in repeated_failure, which pauses the turn before the model can answer. approval_gate_deny_flow and approval_gate_timeout caught it: the turn ended with the no-progress summary instead of the model's reply. The unmarked text classifies as Unknown, as the harness fallback did, so the model gets the reason and still answers this turn.
…ason approval_gate_deny_flow and approval_gate_timeout checked only the turn's final text, which a scripted model produces whatever it was sent. They now also assert the follow-up request carries the gate's refusal and not the reason-less "tool call was not approved" fallback.
…et its pins - Warn band: files past 725 lines are listed (without failing) so the margin shows in the author's own PR log. - Scope: drop the name-based prune of `api`/`bin`/`core`/`lib.rs`/`main.rs`/ `rpc` at the top of `crates/openhuman-core/src`. Only `core/` and `lib.rs` still exist; the eight oversized `core/` files are pinned at their current size instead of being skipped. - Ratchet: a pinned file below its pin fails with the value to lower it to, or asks for the entry to be removed once it fits the 750-line limit. Pins are lowered to today's sizes and the three that already fit are removed. - Duplicate pins: `subagent_host/lifecycle.rs` (1304, 1318) and `subagent_host/ops/runner.rs` (1793 twice) were each listed twice; a Map keeps the last one. Each is now listed once and the gate fails on a repeat. Closes tinyhumansai#6310
…umansai#6313) mcp_registry_list_tools reported every failure as "not connected; connect it first via mcp_clients_connect". Three things were wrong with that: - mcp_clients_connect is an RPC method. An agent's connect tool is mcp_registry_connect, so the remedy was an instruction the model could not follow. - tinymcp answers NotConnected for any id without a live connection, so a registry qualified name passed as server_id, or an id that was never installed, was reported as "not connected" too. The model then tried to connect a server that was already connected, or did not exist. - Every other error class was discarded in favour of the same text. On NotConnected, read the installs back through status(). An installed id reports its real status and last error. A qualified name installed once resolves to that install's server_id. An unknown id is refused as unknown and points at the status call. The remedy is chosen by caller: the agent tool names mcp_registry_connect/mcp_registry_status, while the RPC keeps mcp_clients_*. Any other error passes through verbatim. The host-side read-back works around a tinymcp defect (list_tools does not distinguish UnknownServer from NotConnected); filed as tinyhumansai#6815. Closes tinyhumansai#6313
tinyhumansai#6313) The tinyhumansai#6313 case itself: the server is connected and the caller passes its registry qualified name. Served by OpenHuman's own MCP endpoint on an ephemeral loopback port, so nothing leaves the machine. On the unfixed code it fails with the reported message: "is not connected; connect it first via mcp_clients_connect".
…nsai#6313) The read-only planner carries mcp_registry_list_tools and mcp_registry_status but not mcp_registry_connect, so naming the connect tool in an agent refusal repeated tinyhumansai#6313 for the planner: an instruction it cannot follow. The agent refusal now says the server has to be connected and names only mcp_registry_status, which every belt that lists tools carries. The RPC surface still names mcp_clients_connect. refusals_name_only_tools_on_every_listing_belt pins this against the built-in agent definitions: every mcp_* name an agent refusal contains must be on the belt of every agent with mcp_registry_list_tools. With the connect tool put back it fails for the planner.
…-messages refactor(agent): adopt tinytools NativeToolCall in place of the host ToolCall shim
…l fix) Picks up tinyhumansai/tinyskills#15: a catalog GitHub blob sourceUrl naming any .md other than SKILL.md now resolves to the SKILL.md in the same directory instead of installing that file. Gitlink-only; tinyskills stays 0.2.4 with no dependency change, so neither Cargo.lock changes. Closes tinyhumansai#6309
…s-6313 fix(mcp): make list_tools refusals name what the caller can do (tinyhumansai#6313)
…ills-6309 chore(vendor): bump tinyskills to d59fdd6 (non-SKILL.md blob sourceUrl fix)
fix(ci): make the Rust layout gate warn early, cover core/, and ratchet its pins
…eaches-model fix(security_gate): give a refused approval a reason the model can read
…main Co-authored-by: Medulla <medulla@tinyhumans.ai>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This is part of the Wave 3 leftovers. It moves the pure scheduler-gate
decidefunction intotinymemory-api, next to the types it operates on. Net change: −380 lines (24 added, 404 deleted).Scheduler gate
decide→tinymemory_api::host(tinymemory#172)SchedulerGateConfig,PolicyandPauseReasonalready live intinymemory-api.Signalsbecomes a plain data struct there, anddecidemoves beside them.signals::sample().policy.rsand its 24 decision tests move upstream.oh-scheduler-gate-decide-on-v1.17.0, which is the previous pin0c754584plus two commits. The tinymemory exemption now expectsv1.17.0-6-gea7dee88. fix: unwrap API envelope in memory tauriCommands and fix file path scope #172 is based on tinymemorymain(v1.18.0), where [Bug] Memory Workspace UI broken after controller registry migration #170 has already merged.Evaluated and not moved
platform/cost/catalog.rs: it is OpenHuman's routed-model table. It is tied toModelRegistryEntry, includes a product special case (tieredminimax-m3pricing), and would have to be reconciled with tinyagents-registry's own seed table without changing any cost numbers.platform/proc_metrics: it samples host-process RSS/PSS for therss-benchandlibrary_profilebins. No vendor crate is a clear owner.repeated_failure.rs: the generic escalation ladder is already upstream (NoProgressTracker). What remains is OpenHuman's recovery-policy table and its host markers.security/{pii,prompt_injection}: pure code, but documented as application threat-model policy, so it stays.Verification
cargo check --tests -p openhuman -p openhuman-cli --features "$(bash scripts/ci/product-features.sh)"is clean, as are the app manifest and embed/tinyhumans.tinymemory-api: 128 tests pass, 24 of them for the scheduler gate. fmt andclippy -D warningsare clean.check-submodule-monotonic(tinymemory moved forward),check-feature-forwardingandcheck-gated-test-allowlistpass.check-module-pinspasses tinymemory through its updated exemption.Failures that are already on
mainThese reproduce on
main, and every one of them was also checked at an earlier baseline:agent::goals::tools::tests::set_persists_to_the_workspace_store_and_answers_goal_and_text, fixed in test(goals): read structured goal tool results via output() #6803.raw_coverage_all: the MCP testtool_registry_entries_include_connected_mcp_client_tools.agent_harness_e2e:orchestrator_advertises_direct_mcp_tools,orchestrator_cannot_install_a_skill_through_the_raw_registry_toolandorchestrator_hands_skill_installs_to_skill_setup_directly. These fail identically ate80051674e, the test: drop 45 quarantined raw-coverage files, dedupe vendor-covered tests, repoint vendor pins #6781 merge, which is before any of the vendor-extraction PRs.rust:layout:runtime_session.rsis 1994 lines against a limit of 1990.openhuman_backend_model{,_tests}.rsare 759 and 761 against 750.check-agent-runtime-boundary: the existing violations inopenhuman_backend_model.rs,json_schema/ops.rsandtools/impl/meta/mod.rs.check-module-pins: tinychannels.Summary by CodeRabbit