-
Notifications
You must be signed in to change notification settings - Fork 3.3k
feat(orchestrator): wire generate_presentation + require grounding (#2780) #3029
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
graycyrus
merged 32 commits into
tinyhumansai:main
from
oxoxDev:feat/2780-orchestrator-presentation-wiring
Jun 3, 2026
Merged
Changes from all commits
Commits
Show all changes
32 commits
Select commit
Hold shift + click to select a range
2d58123
feat(artifacts): add create/finalize/fail helpers + error field (#2778)
oxoxDev 82e8fa9
feat(runtime_python): add run + venv helpers for Python-backed tools …
oxoxDev 026fe48
feat(tools): add generate_presentation tool backed by python-pptx (#2…
oxoxDev 63310f5
test(presentation): end-to-end integration + CI python-pptx provision…
oxoxDev aa1469c
feat(agent/orchestrator): add generate_presentation to named tool lis…
oxoxDev 471d181
fix(presentation): validate theme length with MAX_TEXT_CHARS cap (#2778)
oxoxDev 2f51f8c
fix(presentation): redact title from logs + fail artifact on setup er…
oxoxDev bec8888
fix(presentation): harden temp script write against symlink/clobber (…
oxoxDev 4511a74
fix(presentation): enforce absolute --output path at runtime (#2778)
oxoxDev d81b59f
fix(runtime_python): bound stdin write+shutdown by the deadline (#2778)
oxoxDev 17c57b6
fix(runtime_python): redact requirements + bound venv creation (#2778)
oxoxDev 69c5e5a
test(presentation): pin preflight to one resolved python binary (#2778)
oxoxDev f577c9c
test(playwright): force-remove lingering joyride portal in dismiss he…
oxoxDev f03565e
fix(runtime_python): drain stdout/stderr concurrently with stdin writ…
oxoxDev 4a3c1ae
test(playwright): install MutationObserver to scrub re-mounted joyrid…
oxoxDev c5866e4
fix(runtime_python): reject pre-release Python versions in selector (…
oxoxDev 687940f
chore(fmt): apply pre-push auto-fixes (#2778)
oxoxDev 866c091
feat(presentation): add UnsupportedFileType error variant
oxoxDev ad1f720
feat(orchestrator): require grounding before generate_presentation
oxoxDev 897c5bd
test(orchestrator): pin generate_presentation wiring contract
oxoxDev 0cc9785
fix(orchestrator): align grounding rule with researcher delegate_name…
oxoxDev ca4a1b4
test(presentation): align python probe with runtime_python resolver (…
oxoxDev 3b6b7bc
Merge remote-tracking branch 'upstream/main' into feat/2780-orchestra…
oxoxDev e89393c
Merge remote-tracking branch 'upstream/main' into feat/2780-orchestra…
oxoxDev d642c80
Merge remote-tracking branch 'upstream/main' into pr/3029
senamakel ce8d232
fix(tools/ops): use root_config.workspace_dir post-#3074 refactor
oxoxDev a8169bb
test(orchestrator): pin all 4 grounding-rule waiver cases (#2780)
oxoxDev 5218a14
Merge remote-tracking branch 'upstream/main' into feat/2780-orchestra…
oxoxDev 3908bc8
Merge remote-tracking branch 'upstream/main' into feat/2780-orchestra…
oxoxDev 6284d07
docs(orchestrator): drop stale python-pptx + dead memory_tree mode re…
oxoxDev 4707b94
chore: restore version 0.57.12 (drop merge regression)
oxoxDev 491fdad
Merge remote-tracking branch 'upstream/main' into feat/2780-orchestra…
oxoxDev File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
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
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
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
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,58 @@ | ||
| //! Pins the orchestrator's `generate_presentation` wiring contract | ||
| //! (#2780 — companion to the tool itself shipped in #2778). | ||
| //! | ||
| //! Two invariants: | ||
| //! | ||
| //! 1. The orchestrator's `agent.toml` MUST list `generate_presentation` | ||
| //! in `[tools].named`. Without this entry the orchestrator's | ||
| //! function-calling schema does not include the tool and the | ||
| //! "create slides" routing case from parent epic #1535 silently | ||
| //! falls back to refusing the request. | ||
| //! | ||
| //! 2. The `code_executor` agent MUST NOT list `generate_presentation`. | ||
| //! Presentation rendering is not a code-exec task: it runs in-process | ||
| //! via the native Rust `ppt-rs` engine (no Python, no subprocess, | ||
| //! distinct from code_executor's `node_exec` / shell surface), and | ||
| //! exposing the tool to code_executor would create a second, | ||
| //! duplicate dispatch path that bypasses the orchestrator's | ||
| //! grounding-rule prompt. | ||
| //! | ||
| //! Exact-line matching (not substring) so commented-out entries or | ||
| //! prefixed names (`generate_presentation_v2`, `generate_presentation_legacy`) | ||
| //! cannot satisfy the assertion accidentally. | ||
|
|
||
| const ORCHESTRATOR_TOML: &str = | ||
| include_str!("../src/openhuman/agent_registry/agents/orchestrator/agent.toml"); | ||
|
|
||
| const CODE_EXECUTOR_TOML: &str = | ||
| include_str!("../src/openhuman/agent_registry/agents/code_executor/agent.toml"); | ||
|
|
||
| const TOOL_NAME: &str = "generate_presentation"; | ||
|
|
||
| fn lists_named_tool(toml: &str, name: &str) -> bool { | ||
| let bare = format!("\"{name}\""); | ||
| let trailing = format!("\"{name}\","); | ||
| toml.lines() | ||
| .map(str::trim) | ||
| .any(|line| line == bare || line == trailing) | ||
| } | ||
|
|
||
| #[test] | ||
| fn orchestrator_lists_generate_presentation() { | ||
| assert!( | ||
| lists_named_tool(ORCHESTRATOR_TOML, TOOL_NAME), | ||
| "orchestrator agent.toml must list '{TOOL_NAME}' as a named tool entry — \ | ||
| removing it silently disables the 'create slides' routing case (#1535)" | ||
| ); | ||
| } | ||
|
|
||
| #[test] | ||
| fn code_executor_does_not_list_generate_presentation() { | ||
| assert!( | ||
| !lists_named_tool(CODE_EXECUTOR_TOML, TOOL_NAME), | ||
| "code_executor agent.toml must NOT list '{TOOL_NAME}' — pptx rendering \ | ||
| is not a code-exec task; it runs in-process via the native Rust ppt-rs \ | ||
| engine and adding it here would bypass the orchestrator grounding-rule \ | ||
| prompt (#2780)" | ||
| ); | ||
| } |
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.