Repository navigation
Publish the engine for harnesses: package sets, agents and skills - #196
Merged
Merged
Conversation
Stdlib names the packages an embedder offers: the core packages plus the optional ones it enables. Compiling, discovery, the capability catalog and host-function installation read the same set, so an optional package is either fully present or fully absent. The existing free functions keep their behavior through Stdlib::core(). No optional package exists yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Call-site derivation escaped only backslash and quote, so a literal holding
`${vars.` became a variable reference and control characters did not round
trip. filter_string_literal now matches the policy's canonical quoting, and
a value no literal can spell contributes no filter, with a warning.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two optional standard-library packages a harness enables through Stdlib and implements through a provider trait: AgentProvider runs sub-agents (agents.run<T>, typed like llm.call<T>, and list), SkillProvider serves skills (list, load, readFile). Both traits carry owned, serializable data so a harness can implement them over the wire. Neither package exists for the submilli CLI or server: importing one there reports it as not available in this harness, and discovery and the capability catalog list them only for a set that enables them. agent.run and skill.load are policy-gated like llm.call, and list() filters each candidate through the same rule. The typechecker's llm-only typed-call hook becomes a small registry so agents.run shares it; llm's diagnostics are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The permission rules, the filter language, session variables and auth-proxy injection move out of submilli-blueprint into a format-neutral crate, so an embedder that keeps policy outside a blueprint file evaluates it the same way. Auth-proxy secrets resolve by name through SecretResolver; the blueprint ties names to its secrets: block through DeclaredSecrets and the source-keyed SourceSecretResolver. Behind the engine feature, submilli_policy::host holds the adapters an embedder installs on a store: PolicyCheck over a Policy, PolicyAuthProxy and PolicySecretProvider. submilli-shared keeps the blueprint wiring on top of them. submilli-blueprint keeps the YAML format, its validation with YAML paths, and the diff and draft tooling, and re-exports the policy types under their existing names. A test in submilli-policy keeps the engine's filter-literal quoting in step with the policy parser's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es.io The interpreter crate compiles and runs programs, and its name was taken on crates.io; it is now submilli-engine. Dependents keep their `interpreter` key through `package = "submilli-engine"`, so their sources are unchanged; the engine's own tests, unit-test snapshot names, CI and the release skill use the new name. The directory stays crates/interpreter. submilli-engine and submilli-policy now publish, with descriptions and READMEs. The engine's package leaves out its tests and snapshots (2 MiB compressed). CI packages both with a publish dry run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Skill names are checked like paths before a provider sees them (one segment; `:` allowed for namespaced names), providers must match names byte for byte, and `load` refuses a skill answered under another name. Refusals before dispatch are recorded as the call's error, echoed input is truncated, and list() offers only loadable names. The typed agents.run documents SyntaxError for a non-JSON answer. Set-taking APIs share one `_for` suffix, the typechecker's schema-checked path loses its llm-only names, and the free policy functions are hidden behind the Policy methods. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ment The directory now matches the crate name. Resolve permission's doc comment had been stacked on resolve_permission_with_rule; it is back on its function. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Moving the directory touches every file in the crate, which buries the reviewable change; the move follows in its own PR. The doc comment fix stays. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The engine never depended on the blueprint crate, so extracting submilli-policy is not needed for this change. The blueprint, shared, server and CLI sources go back to main; only the engine rename in their manifests and the resolve_permission doc comment fix remain. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
The new Rust agents-server needs the engine from crates.io, and it needs sub-agents and skills inside programs.
Stdliblets an embedder enable optional packages. Compile, discovery, the capability catalog and host functions all follow it, so the CLI and server behave exactly as before.submilli:agentsandsubmilli:skills.run<T>(typed likellm.call<T>),list,loadandreadFile, backed byAgentProviderandSkillProvider, whose data can cross a wire. Gated asagent.runandskill.load; invisible unless a harness enables them. Skill names and paths are checked before a provider sees them.interpreteris nowsubmilli-engineand is ready to publish. Dependents keep theirinterpreterdependency key, and CI runs a publish dry run. The directory move follows in a separate PR.Tests: the full workspace suite, package tests (network skipped) and the publish dry run pass. No Linear issue was linked.
🤖 Generated with Claude Code