Skip to content

Merge current TinyAgents owner changes - #175

Merged
senamakel merged 405 commits into
epic/8092-inference-outfrom
epic-8092-owner-current-union
Oct 22, 2026
Merged

senamakel merged 405 commits into
epic/8092-inference-outfrom
epic-8092-owner-current-union

Conversation

@senamakel

Copy link
Copy Markdown
Owner

Merge the TinyAgents epic work with canonical main so the epic inherits the current harness APIs and its required TinyInference and TinyTools versions.

This preserves epic-native oneshot, registry, metadata, and routing behavior while taking canonical progress, inspection auth, native harness-tools/goals/todos, and TinyTools 0.6. The inspection entry points include ClaudeAgentSdkInspectionAuth and ClaudeAgentSdkProvider::for_inspection. TinyInference is pinned to merged epic commit 766829095d0730cd7c3cc7de1b589749bda979f0; TinyTools is pinned to canonical 3a01641f8ebd8a55656cd212f9a90638d958a447.

The integration adapts TinyInference 0.5.0 usage metadata, including the new nanodollar field. Claude Code CLI usage does not report a nanodollar charge, so that conversion remains None. The strict clippy lint on the public SteeringCommand::InjectMessage(Message) variant is narrowly allowed to preserve the public Rust constructor type.

Validation on the owner source: cargo fmt --all -- --check, cargo check --workspace --all-targets, cargo clippy --workspace --all-targets -- -D warnings, and cargo test --workspace --no-fail-fast (5,813 passed, 0 failed, 35 ignored across 135 result blocks). Full gate receipts and raw logs are maintained outside the target worktree.

Refs senamakel/openhuman#256
Part of tinyhumansai/openhuman#8092

Acquire the notifications lock in the runtime path and the per-thread lock in the store path so that concurrent turn accounting cannot interleave with notification delivery. This prevents races where goal updates and notifications could be observed in an inconsistent order.

Auto-committed-on: dragonfly
Adjust the test import to reference tinyinference_llm through the tinyagents_harness re-export so the tests resolve against the intended dependency path.

Auto-committed-on: dragonfly
Drops the approval-gated rule tool fixture and the packed rule tool
struct from the tool rules tests, along with the unused cancellation
and lane helpers on the subagent job registry. The goals module
documentation now describes the runtime surface and the harness-level
counterpart of OpenHuman's thread_goals.

Auto-committed-on: dragonfly
Introduces a named type alias for the binding closure so the field type in ToolCallBinding is easier to read, and documents the generic binding contract exposed through the erased host extension.

Auto-committed-on: dragonfly
Relocated the Binder type alias so it sits directly above the
ToolCallBinding struct it belongs to, keeping the doc comment attached to
the struct it describes. No behaviour change.

Auto-committed-on: dragonfly
Add a test that verifies PerCallTool delegates host call extensions and
presentation metadata to the tool built for each call. This guards against
regressions where the per-call wrapper drops the prototype's spec, labels,
or return-direct flag.

Auto-committed-on: dragonfly
PerCallTool now delegates host_call_extension, spec, display_label,
display_detail, and return_direct to the wrapped prototype so per-call
wrappers expose the same metadata and display behaviour as the tool they
wrap.

Auto-committed-on: dragonfly
The canonical_json module is only used by the skills tool, so it is now
compiled behind the skills feature to avoid dead code in builds without
it. A goals_and_todos example was registered with its required features,
and the dependency boundary test now asserts that the subagent inference
and task dependencies are declared as optional.

Auto-committed-on: dragonfly
Replace the handle_of lookup with a bound_with_handle helper that hands
back the PackRegistryHandle alongside the tool list, so tests no longer
depend on the host extension carrying the handle. The rebind assertion now
checks for ToolCallBinding, matching what the extension actually holds.

Auto-committed-on: dragonfly
Reinstates tests covering require_approval deferral and auto_approve
waivers, hosted definition rule stacking, approval rules on rewrite
targets, re-checking repaired arguments against rules, and rules that
withhold tool_search itself. Also reformats a few assertions in the
skills tests.

Auto-committed-on: dragonfly
Adds a test asserting that a run policy's tool rules are enforced against
the tool selected through a packed skill binding, not just the binding
itself. This guards against rules silently bypassing the resolved target.

Auto-committed-on: dragonfly
Auto-committed-on: dragonfly
Register the jobs_tests and test_helpers modules under cfg(test) so the new subagent job tests are compiled and run.

Auto-committed-on: dragonfly
Test-only cleanup: RunPolicy is now referenced by its full path instead of
being imported, and an unused tools binding is prefixed with an underscore so
the test module compiles without warnings. No test behaviour changes.

Auto-committed-on: dragonfly
Adjust the skills tests to pass the handle by reference and to mark
unused tool bindings with an underscore, matching the updated
render_pack_filtered signature.

Auto-committed-on: dragonfly
The subagent tools module no longer declares the jobs_tests and
test_helpers test modules, dropping the associated test wiring from
this crate.

Auto-committed-on: dragonfly
Adds tests asserting that registry lock failures surface as registry errors rather than recoverable selector denials, that cancelled jobs cannot return to running, and that settled jobs release their cancellation tokens. Also covers a budget overrun racing an owner cancel, which must settle as cancelled without output.

Auto-committed-on: dragonfly
Adds a test asserting that a leaf subagent whose harness exposes
delegation tools refuses to spawn and reports the leaf restriction, while
a leaf without such tools still runs. This guards the policy that leaves
must not delegate.

Auto-committed-on: dragonfly
Add tests asserting that the jobs tool treats a null action as a query and
that the moved message shell rejects request ids longer than the allowed
limit. Also simplify an existing skills binding test to use the shared
scripted model helpers.

Auto-committed-on: dragonfly
Rename the unused tools binding to _tools so the filtered listing test no longer warns about an unused variable.

Auto-committed-on: dragonfly
…nt tests

The skill binding test now asserts the specific "not permitted" message instead of accepting either "denied" or "refused", and the oversized request id test unwraps the error explicitly so a missing rejection fails with a clear message rather than a generic panic.

Auto-committed-on: dragonfly
The oversized request id test now reads the id of the job registered by
background execution instead of hardcoding a task id, so the rejection
path is exercised against a real job.

Auto-committed-on: dragonfly
Extend the cancellation test to verify that cancelling an already
settled job key returns a terminal error rather than succeeding. This
locks in the expected behaviour for repeated cancellation attempts.

Auto-committed-on: dragonfly
Extend the driver alias registry test to send a message with a request_id and assert the first call reports message_queued while a repeat with the same id is flagged as a duplicate. Add a registry test that fills the per-job request-id window past its capacity and confirms the oldest id ages out and can be delivered again.

Auto-committed-on: dragonfly
Adds a test asserting that cancelling the parent run context settles a
background driver subagent job as cancelled and leaves the driver invoked
exactly once.

Auto-committed-on: dragonfly
The subagent job-control tests and their shared helpers have been deleted, so the module no longer carries coverage for per-job cancellation, parent-cancel cascade, panic safety, message deduplication, or alias configuration.

Auto-committed-on: dragonfly
…cascade

Adds a case asserting that a fixed query alias rejects a null configured
identifier with an error naming the field. Also switches the cancel tool
setup to use the identifier field helper and adds a test verifying that
cancelling the parent run settles a running background driver job as
cancelled.

Auto-committed-on: dragonfly
The file contained two identical copies of the parent cancellation cascade test, so the redundant copy was dropped to keep the suite free of duplicate coverage.

Auto-committed-on: dragonfly
senamakel and others added 29 commits October 21, 2026 17:26
The call to ledger::record_result was passing a reference to output where the function now expects the value itself, so the borrow was dropped to match the updated signature.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
ToolRulePolicy now carries an optional permission ceiling that ToolGate
checks before applying rules, refusing calls whose argument-sensitive
permission level exceeds the session limit. A test fixture covers the
argument-aware dispatch path.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
… test

The test built the gate from a temporary policy that was dropped at the end of the statement, so the policy is now bound to a local first and passed by reference. This keeps the test valid under borrow rules without changing what it asserts.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Reformatted the argument-aware permission test and its helper to satisfy rustfmt line width, and removed a redundant blank line in the policy type. No behaviour changes.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The policy's is_permissive check now also requires that no permission
ceiling is set, so a policy with a ceiling is no longer reported as
admitting every tool. A test asserts the new behaviour.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Add a test that runs a packed dangerous tool through the harness under a
read-only permission ceiling and asserts the tool never executes, with the
refusal surfaced back to the model as a tool error.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
A middleware error from after_tool_output_screened previously propagated
without recording a terminal event, leaving the tool call stuck in a
started state. The failure is now reported through fail_tool_call before
the error is returned. The after_model_rewrite hooks also run in
registration order so restored request state stays final.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The ledger now receives the screened model-facing output rather than the raw
tool result, so redactions are reflected in the state block. Patch path
extraction is limited to patch tools, and the state block is stripped by its
header so a truncated copy is still replaced. Paused goals now get a context
block telling the model to resume, set a new goal, or leave it paused.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Paused goals now receive a context block containing goal_resume, so the
turn preparation test asserts the block is present instead of absent and
the related test name and doc comment were updated to match.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The README now describes the context block returned by prepare_turn as
optional rather than naming the active_goal_context_block field, and explains
that active and budget-limited goals receive their usual context while paused
goals get guidance to resume, set a new goal, or stay paused.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Reformatted assertions and call chains across the goals runtime and
state block test suites so they match rustfmt's line-width and
indentation rules. No test behaviour or coverage changed.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The screening test now feeds a tool result whose canonical content holds a
secret but whose markdown summary is safe, and asserts the ledger keeps the
summary while dropping both secrets. This checks that screening uses the
model-facing output rather than the raw canonical content.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The test now builds ToolRulePolicy with a struct literal setting permission_ceiling directly, since the with_permission_ceiling builder method is no longer available.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Replace the struct literal with the ToolRulePolicy builder when setting the
read-only permission ceiling, keeping the test aligned with the current
construction API.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The prepared goal test now checks that a paused goal's context block is
present and mentions goal_resume, instead of asserting it is absent. This
matches the behaviour where paused goals surface resume context to the
host turn.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
feat(state_block): a request-only run-state block with the goal, the plan and tool-call facts
…channel-identity

feat(harness): add generic turn runner and progress types
…ked-permissions-finish-evidence-20261018

Fix packed-call minimum permissions and observe actual tool execution
Update the vendored tinyinference submodule to the latest upstream commit.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the vendored tinyinference submodule to the latest upstream commit.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the vendored tinytools submodule to a newer revision.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
…nt-union

# Conflicts:
#	crates/tinyagents-harness/src/lib.rs
#	crates/tinyagents-hooks/Cargo.toml
#	crates/tinyagents-registry/Cargo.toml
#	vendor/tinytools
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the locked versions of the tinyinference workspace crates from 0.4.1 to 0.5.0 to match the new release.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The model response construction was missing the charged_amount_nanos field, so it is now set to None alongside the existing charged_amount to keep the struct fully initialized.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The cost estimation tests now set the new charged_amount_nanos field to None in their usage structs, keeping the fixtures in sync with the extended usage type.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Add a clippy allow attribute to the steering command enum so the public
command payload stays ergonomic and its serde shape is preserved.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Reworded the comment on SteeringCommand to explain that the large_enum_variant allow exists to keep InjectMessage(Message) source-compatible, since boxing the payload would change the public constructor's type.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
@senamakel
senamakel merged commit 7ed3f3e into epic/8092-inference-out Oct 22, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants