rote-cli 0.15.0__tar.gz → 0.17.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rote_cli-0.15.0 → rote_cli-0.17.0}/LICENSE +12 -11
- rote_cli-0.15.0/README.md → rote_cli-0.17.0/PKG-INFO +169 -39
- rote_cli-0.15.0/PKG-INFO → rote_cli-0.17.0/README.md +105 -96
- rote_cli-0.17.0/examples/docs-digest/README.md +98 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/backend.json +4 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/compile-metrics.json +17 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/compile-report.md +60 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/declared-tools.json +134 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/eval.yaml +40 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/extracted/pick_reading_list.py +21 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/extracted/read_repo_outline.py +19 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/extracted/search_microsoft_learn.py +56 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/extracted/write_digest.py +21 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/pipeline.yaml +204 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/provenance.json +33 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/system1/brief.md +18 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/system1/decisions.json +189 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/system1/enforcement.json +4 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/system1/interface.json +95 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/system1/skeleton.yaml +98 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/system1/text.yaml +122 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/tests/test_pick_reading_list.py +43 -0
- rote_cli-0.17.0/examples/docs-digest/compiled/tests/test_write_digest.py +35 -0
- rote_cli-0.17.0/examples/docs-digest/reference.json +212 -0
- rote_cli-0.17.0/examples/docs-digest/skill/SKILL.md +43 -0
- rote_cli-0.17.0/examples/docs-digest/skill/input.json +1 -0
- rote_cli-0.17.0/examples/docs-digest/skill/mcp-tools.json +107 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/README.md +19 -9
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/expected/extracted/audit.py +4 -2
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/expected/extracted/report.py +22 -11
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/expected/pipeline-draft.yaml +1 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/expected/pipeline.yaml +10 -2
- rote_cli-0.17.0/examples/expense-audit/fidelity/cases.yaml +68 -0
- rote_cli-0.17.0/examples/expense-audit/fidelity/reference.json +903 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/runs/2026-10-18-first-agent-run/eval.yaml +1 -1
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/runs/2026-10-18-first-agent-run/pipeline.yaml +5 -1
- rote_cli-0.17.0/examples/expense-audit/skill/sample-input.json +25 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/pyproject.toml +48 -10
- rote_cli-0.17.0/skills/rote-compile/GENERATE.md +186 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/skills/rote-compile/SKILL.md +92 -35
- rote_cli-0.17.0/skills/rote-compile/SYSTEM1.md +110 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/skills/rote-compile/references/crystallization-heuristics.md +9 -8
- {rote_cli-0.15.0 → rote_cli-0.17.0}/skills/rote-compile/references/implementation.md +124 -41
- {rote_cli-0.15.0 → rote_cli-0.17.0}/skills/rote-compile/references/ir-schema.md +53 -1
- {rote_cli-0.15.0 → rote_cli-0.17.0}/skills/rote-compile/references/llm-judge-extraction.md +54 -6
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/__init__.py +1 -1
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/__main__.py +1 -1
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/adapters/__init__.py +18 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/adapters/_common.py +210 -31
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/adapters/_py_common.py +191 -17
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/adapters/_ts_common.py +927 -154
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/adapters/cloudflare.py +26 -9
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/adapters/dbos.py +74 -13
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/adapters/dbos_ts.py +31 -4
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/adapters/inngest.py +12 -4
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/adapters/python.py +29 -36
- rote_cli-0.17.0/src/rote/adapters/skill.py +779 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/adapters/temporal.py +25 -8
- rote_cli-0.17.0/src/rote/app_registry.py +136 -0
- rote_cli-0.17.0/src/rote/bench/__init__.py +13 -0
- rote_cli-0.17.0/src/rote/bench/collect.py +375 -0
- rote_cli-0.17.0/src/rote/bench/fidelity.py +984 -0
- rote_cli-0.17.0/src/rote/bench/fidelity_score.py +710 -0
- rote_cli-0.17.0/src/rote/bench/fixture_mcp.py +138 -0
- rote_cli-0.17.0/src/rote/bench/http_fixtures.py +186 -0
- rote_cli-0.17.0/src/rote/bench/report.py +281 -0
- rote_cli-0.17.0/src/rote/bench/runner.py +786 -0
- rote_cli-0.17.0/src/rote/bench/score.py +805 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/cli.py +2467 -241
- rote_cli-0.17.0/src/rote/clients/__init__.py +89 -0
- rote_cli-0.17.0/src/rote/clients/amp.py +244 -0
- rote_cli-0.17.0/src/rote/clients/base.py +326 -0
- rote_cli-0.17.0/src/rote/clients/claude_code.py +574 -0
- rote_cli-0.17.0/src/rote/clients/claude_desktop.py +93 -0
- rote_cli-0.17.0/src/rote/clients/codex.py +236 -0
- rote_cli-0.17.0/src/rote/clients/collisions.py +81 -0
- rote_cli-0.17.0/src/rote/clients/common.py +399 -0
- rote_cli-0.17.0/src/rote/clients/copilot.py +200 -0
- rote_cli-0.17.0/src/rote/clients/cursor.py +139 -0
- rote_cli-0.17.0/src/rote/clients/gemini.py +337 -0
- rote_cli-0.17.0/src/rote/clients/goose.py +188 -0
- rote_cli-0.17.0/src/rote/clients/normalize.py +309 -0
- rote_cli-0.17.0/src/rote/clients/opencode.py +209 -0
- rote_cli-0.17.0/src/rote/clients/vscode.py +202 -0
- rote_cli-0.17.0/src/rote/clients/windsurf.py +159 -0
- rote_cli-0.17.0/src/rote/clients/zed.py +148 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/cloud_auth.py +2 -3
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/cloud_compile.py +2 -1
- rote_cli-0.17.0/src/rote/compiler/__init__.py +1611 -0
- rote_cli-0.17.0/src/rote/compiler/_prefix_runner.py +329 -0
- rote_cli-0.17.0/src/rote/compiler/api_docs.py +432 -0
- rote_cli-0.17.0/src/rote/compiler/backend.py +59 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/compiler/drivers/__init__.py +59 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/compiler/drivers/_fs_tools.py +77 -31
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/compiler/drivers/anthropic_api.py +398 -36
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/compiler/drivers/claude.py +179 -16
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/compiler/drivers/codex.py +105 -3
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/compiler/drivers/openai_api.py +122 -34
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/compiler/events.py +4 -0
- rote_cli-0.17.0/src/rote/compiler/grounding.py +740 -0
- rote_cli-0.17.0/src/rote/compiler/prefix.py +382 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/compiler/provenance.py +203 -56
- rote_cli-0.17.0/src/rote/compiler/replay.py +71 -0
- rote_cli-0.17.0/src/rote/compiler/report.py +282 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/compiler/sandbox.py +14 -5
- rote_cli-0.17.0/src/rote/compiler/system1/__init__.py +413 -0
- rote_cli-0.17.0/src/rote/compiler/system1/checker.py +110 -0
- rote_cli-0.17.0/src/rote/compiler/system1/decide.py +1137 -0
- rote_cli-0.17.0/src/rote/compiler/system1/decision_model.py +500 -0
- rote_cli-0.17.0/src/rote/compiler/system1/enforce.py +332 -0
- rote_cli-0.17.0/src/rote/compiler/system1/evidence.py +117 -0
- rote_cli-0.17.0/src/rote/compiler/system1/generate.py +1914 -0
- rote_cli-0.17.0/src/rote/compiler/system1/lane_call.py +238 -0
- rote_cli-0.17.0/src/rote/compiler/system1/parse.py +656 -0
- rote_cli-0.17.0/src/rote/compiler/system1/skeleton.py +448 -0
- rote_cli-0.17.0/src/rote/compiler/system1/structure.py +2256 -0
- rote_cli-0.17.0/src/rote/compiler/system1/tiebreak.py +430 -0
- rote_cli-0.17.0/src/rote/compiler/tool_grounding.py +970 -0
- rote_cli-0.17.0/src/rote/compiler/verify.py +1245 -0
- rote_cli-0.17.0/src/rote/compiler/worth.py +68 -0
- rote_cli-0.17.0/src/rote/config.py +510 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/contracts.py +56 -20
- rote_cli-0.17.0/src/rote/demo.py +338 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/deploy.py +8 -0
- rote_cli-0.17.0/src/rote/entry.py +44 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/eval/baseline.py +154 -54
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/eval/empirical.py +249 -43
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/eval/estimate.py +7 -2
- rote_cli-0.17.0/src/rote/eval/gate_server.py +143 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/eval/pricing.py +83 -3
- rote_cli-0.17.0/src/rote/eval/skill_ab.py +1497 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/examples.py +38 -4
- rote_cli-0.17.0/src/rote/extras.py +528 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/inference/__init__.py +10 -0
- rote_cli-0.17.0/src/rote/inference/_runtime_helper.py +2441 -0
- rote_cli-0.17.0/src/rote/init_wizard.py +328 -0
- rote_cli-0.17.0/src/rote/interact/__init__.py +7 -0
- rote_cli-0.17.0/src/rote/interact/agents.py +124 -0
- rote_cli-0.17.0/src/rote/interact/mode.py +145 -0
- rote_cli-0.17.0/src/rote/interact/output.py +81 -0
- rote_cli-0.17.0/src/rote/interact/plan.py +480 -0
- rote_cli-0.17.0/src/rote/interact/prompter.py +421 -0
- rote_cli-0.17.0/src/rote/interact/report.py +150 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/ir.py +488 -7
- rote_cli-0.17.0/src/rote/isolation.py +82 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/mcp/__init__.py +1 -1
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/mcp/_runtime_helper.py +257 -23
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/mcp/auth.py +105 -13
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/mcp/live_tools.py +22 -17
- rote_cli-0.17.0/src/rote/mcp/pending_login.py +624 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/mcp/registry.py +64 -8
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/mcp/release.py +4 -6
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/mcp/tokens.py +2 -3
- rote_cli-0.17.0/src/rote/plan/__init__.py +505 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/probe.py +29 -6
- rote_cli-0.17.0/src/rote/proof.py +363 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/runners/__init__.py +154 -34
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/runners/cloudflare.py +14 -1
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/runners/dbos_ts.py +9 -6
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/serve/__init__.py +1 -1
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/serve/backends.py +8 -17
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/serve/registry.py +81 -3
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/serve/server.py +298 -25
- rote_cli-0.17.0/src/rote/setup/__init__.py +126 -0
- rote_cli-0.17.0/src/rote/setup/first_run.py +1294 -0
- rote_cli-0.17.0/src/rote/setup/install_extra.py +178 -0
- rote_cli-0.17.0/src/rote/setup/mcp_import.py +983 -0
- rote_cli-0.17.0/src/rote/setup/mcp_login.py +83 -0
- rote_cli-0.17.0/src/rote/setup/try_skill.py +1010 -0
- rote_cli-0.17.0/src/rote/skill_files.py +121 -0
- rote_cli-0.17.0/src/rote/skill_target/__init__.py +100 -0
- rote_cli-0.17.0/src/rote/skill_target/_driver.py +2439 -0
- rote_cli-0.17.0/src/rote/skill_target/allow_rule.py +140 -0
- rote_cli-0.17.0/src/rote/skill_target/commands.py +636 -0
- rote_cli-0.17.0/src/rote/skill_target/launch.py +336 -0
- rote_cli-0.17.0/src/rote/skill_target/next_steps.py +72 -0
- rote_cli-0.17.0/src/rote/skill_target/trust.py +703 -0
- rote_cli-0.17.0/src/rote/skills/__init__.py +26 -0
- rote_cli-0.17.0/src/rote/skills/discovery.py +475 -0
- rote_cli-0.17.0/src/rote/tool_schema.py +202 -0
- rote_cli-0.17.0/src/rote/vendor_specs/__init__.py +23 -0
- rote_cli-0.17.0/src/rote/vendor_specs/check.py +995 -0
- rote_cli-0.17.0/src/rote/vendor_specs/deps.py +210 -0
- rote_cli-0.17.0/src/rote/vendor_specs/docs.py +223 -0
- rote_cli-0.17.0/src/rote/vendor_specs/extract.py +1012 -0
- rote_cli-0.17.0/src/rote/vendor_specs/fake.py +208 -0
- rote_cli-0.17.0/src/rote/vendor_specs/fixture_store.py +91 -0
- rote_cli-0.17.0/src/rote/vendor_specs/fixtures.py +127 -0
- rote_cli-0.17.0/src/rote/vendor_specs/google.py +249 -0
- rote_cli-0.17.0/src/rote/vendor_specs/graphql.py +385 -0
- rote_cli-0.17.0/src/rote/vendor_specs/intercept/sitecustomize.py +219 -0
- rote_cli-0.17.0/src/rote/vendor_specs/live.py +880 -0
- rote_cli-0.17.0/src/rote/vendor_specs/model.py +203 -0
- rote_cli-0.17.0/src/rote/vendor_specs/openapi.py +380 -0
- rote_cli-0.17.0/src/rote/vendor_specs/psl.py +90 -0
- rote_cli-0.17.0/src/rote/vendor_specs/public_suffix_list.dat +16559 -0
- rote_cli-0.17.0/src/rote/vendor_specs/schema.py +80 -0
- rote_cli-0.17.0/src/rote/vendor_specs/store.py +274 -0
- rote_cli-0.17.0/src/rote/xdg.py +39 -0
- rote_cli-0.15.0/src/rote/app_registry.py +0 -85
- rote_cli-0.15.0/src/rote/compiler/__init__.py +0 -901
- rote_cli-0.15.0/src/rote/compiler/verify.py +0 -636
- rote_cli-0.15.0/src/rote/config.py +0 -237
- rote_cli-0.15.0/src/rote/extras.py +0 -138
- rote_cli-0.15.0/src/rote/inference/_runtime_helper.py +0 -1299
- rote_cli-0.15.0/src/rote/init_wizard.py +0 -169
- {rote_cli-0.15.0 → rote_cli-0.17.0}/.gitignore +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/eval-input.json +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/expected/eval.yaml +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/expected/extracted/checks.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/expected/extracted/fx.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/input.json +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/runs/2026-10-18-first-agent-run/compile-metrics.json +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/runs/2026-10-18-first-agent-run/compile-report.md +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/runs/2026-10-18-first-agent-run/extracted/checks.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/runs/2026-10-18-first-agent-run/extracted/fx.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/runs/2026-10-18-first-agent-run/extracted/policy.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/runs/2026-10-18-first-agent-run/extracted/report.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/runs/2026-10-18-first-agent-run/extracted/save.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/runs/2026-10-18-first-agent-run/provenance.json +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/scorecard.md +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/skill/SKILL.md +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/skill/references/expense-policy.md +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/skill/references/fx-rates.md +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/examples/expense-audit/skill/references/report-format.md +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/skills/rote-compile/references/eval-estimates.md +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/skills/rote-compile/references/node-kinds.md +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/_dbos.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/compiler/drivers/_heartbeat.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/compiler/update.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/deploy_rote_cloud.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/eval/__init__.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/eval/infra_pricing.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/eval/priors.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/eval/scorecard.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/eval/sidecar.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/eval/tokens.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/mcp/client_metadata.json +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/mcp/learned.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/mcp/parked.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/py.typed +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/runners/_node.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/runners/inngest.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/runners/temporal.py +0 -0
- {rote_cli-0.15.0 → rote_cli-0.17.0}/src/rote/skill_source.py +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
|
|
1
2
|
Apache License
|
|
2
3
|
Version 2.0, January 2004
|
|
3
4
|
http://www.apache.org/licenses/
|
|
@@ -137,8 +138,8 @@
|
|
|
137
138
|
|
|
138
139
|
6. Trademarks. This License does not grant permission to use the trade
|
|
139
140
|
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
-
except as required for
|
|
141
|
-
reproducing the content of the NOTICE file.
|
|
141
|
+
except as required for reasonable and customary use in describing the
|
|
142
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
143
|
|
|
143
144
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
145
|
agreed to in writing, Licensor provides the Work (and each
|
|
@@ -163,15 +164,15 @@
|
|
|
163
164
|
has been advised of the possibility of such damages.
|
|
164
165
|
|
|
165
166
|
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
-
the Work or Derivative Works thereof, You may
|
|
167
|
-
fee for acceptance of support, warranty, indemnity,
|
|
168
|
-
obligations and/or rights consistent with this
|
|
169
|
-
accepting such obligations, You may act only
|
|
170
|
-
Your sole responsibility, not on behalf
|
|
171
|
-
only if You agree to indemnify,
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
additional liability.
|
|
167
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
168
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
169
|
+
or other liability obligations and/or rights consistent with this
|
|
170
|
+
License. However, in accepting such obligations, You may act only
|
|
171
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
172
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
173
|
+
defend, and hold each Contributor harmless for any liability
|
|
174
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
175
|
+
of your accepting any such warranty or additional liability.
|
|
175
176
|
|
|
176
177
|
END OF TERMS AND CONDITIONS
|
|
177
178
|
|
|
@@ -1,3 +1,67 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: rote-cli
|
|
3
|
+
Version: 0.17.0
|
|
4
|
+
Summary: Compile AI agent skills into cheap, fast, deterministic pipelines that run without an LLM in the loop
|
|
5
|
+
Project-URL: Homepage, https://roteskills.com
|
|
6
|
+
Project-URL: Repository, https://github.com/trevhud/rote
|
|
7
|
+
Project-URL: Documentation, https://github.com/trevhud/rote#readme
|
|
8
|
+
Project-URL: Changelog, https://github.com/trevhud/rote/blob/main/CHANGELOG.md
|
|
9
|
+
Project-URL: Issues, https://github.com/trevhud/rote/issues
|
|
10
|
+
Author-email: Trevor Hudson <trevhud@gmail.com>
|
|
11
|
+
License-Expression: Apache-2.0
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Keywords: agent,agent-skills,agent-workflow,ai,anthropic,claude,claude-code,claude-skills,cloudflare,compilation,compiler,dbos,deterministic,dspy,durable-execution,inngest,llm,mcp,pipeline,skill,temporal,token-cost,workflow
|
|
14
|
+
Classifier: Development Status :: 4 - Beta
|
|
15
|
+
Classifier: Environment :: Console
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
23
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
24
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
|
+
Classifier: Typing :: Typed
|
|
26
|
+
Requires-Python: >=3.11
|
|
27
|
+
Requires-Dist: fastmcp-slim[client]<5,>=4.1.3
|
|
28
|
+
Requires-Dist: graphql-core<4,>=3.3
|
|
29
|
+
Requires-Dist: httpx>=0.28
|
|
30
|
+
Requires-Dist: json5<1,>=0.17.3
|
|
31
|
+
Requires-Dist: pydantic>=2.7
|
|
32
|
+
Requires-Dist: pytest<10,>=9.0
|
|
33
|
+
Requires-Dist: pyyaml>=6.0
|
|
34
|
+
Requires-Dist: questionary<3,>=2.1.1
|
|
35
|
+
Requires-Dist: rich<16,>=15.0.0
|
|
36
|
+
Provides-Extra: api
|
|
37
|
+
Requires-Dist: anthropic>=1.15; extra == 'api'
|
|
38
|
+
Provides-Extra: dbos
|
|
39
|
+
Requires-Dist: dbos<4,>=3.3; extra == 'dbos'
|
|
40
|
+
Provides-Extra: dev
|
|
41
|
+
Requires-Dist: anthropic>=1.15; extra == 'dev'
|
|
42
|
+
Requires-Dist: dbos<4,>=3.3; extra == 'dev'
|
|
43
|
+
Requires-Dist: fastmcp<5,>=4.1.3; extra == 'dev'
|
|
44
|
+
Requires-Dist: google-api-python-client>=2.201.0; extra == 'dev'
|
|
45
|
+
Requires-Dist: google-auth-httplib2>=0.4.4; extra == 'dev'
|
|
46
|
+
Requires-Dist: google-auth>=2.62.0; extra == 'dev'
|
|
47
|
+
Requires-Dist: httplib2>=0.32.0; extra == 'dev'
|
|
48
|
+
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
49
|
+
Requires-Dist: openai>=2.45; extra == 'dev'
|
|
50
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
51
|
+
Requires-Dist: requests>=2.34.2; extra == 'dev'
|
|
52
|
+
Requires-Dist: ruff>=0.6; extra == 'dev'
|
|
53
|
+
Requires-Dist: temporalio>=1.7; extra == 'dev'
|
|
54
|
+
Requires-Dist: trustme>=1.2.1; extra == 'dev'
|
|
55
|
+
Requires-Dist: types-pyyaml; extra == 'dev'
|
|
56
|
+
Provides-Extra: mcp
|
|
57
|
+
Provides-Extra: openai-api
|
|
58
|
+
Requires-Dist: openai>=2.45; extra == 'openai-api'
|
|
59
|
+
Provides-Extra: serve
|
|
60
|
+
Requires-Dist: fastmcp<5,>=4.1.3; extra == 'serve'
|
|
61
|
+
Provides-Extra: temporal
|
|
62
|
+
Requires-Dist: temporalio>=1.7; extra == 'temporal'
|
|
63
|
+
Description-Content-Type: text/markdown
|
|
64
|
+
|
|
1
65
|
# rote
|
|
2
66
|
|
|
3
67
|
**Compile AI agent skills into cheap, fast, deterministic pipelines that
|
|
@@ -28,7 +92,8 @@ inside the package, so you can emit it and run it before you compile
|
|
|
28
92
|
anything of your own:
|
|
29
93
|
|
|
30
94
|
```sh
|
|
31
|
-
uv tool install
|
|
95
|
+
uv tool install rote-cli # or: python3 -m venv .venv && . .venv/bin/activate && pip install rote-cli
|
|
96
|
+
# (the first dbos run offers to add the dbos extra; you confirm it)
|
|
32
97
|
rote example expense-audit # copies the skill, IR, code and sample input to ./expense-audit
|
|
33
98
|
# (zero-install: uvx --from rote-cli rote example expense-audit)
|
|
34
99
|
|
|
@@ -51,12 +116,12 @@ rote run (python): succeeded
|
|
|
51
116
|
"status": "draft",
|
|
52
117
|
"reviewer": null,
|
|
53
118
|
"reimbursable_usd": 2395.59,
|
|
54
|
-
"pending_usd":
|
|
55
|
-
"returned_usd":
|
|
119
|
+
"pending_usd": 18.75,
|
|
120
|
+
"returned_usd": 889.81,
|
|
56
121
|
"batch_total_usd": 3304.15,
|
|
57
122
|
"auto_approved": ["Dev Patel", "Emi Tanaka"],
|
|
58
|
-
"review_items":
|
|
59
|
-
"blocked_items":
|
|
123
|
+
"review_items": 1,
|
|
124
|
+
"blocked_items": 5
|
|
60
125
|
}
|
|
61
126
|
}
|
|
62
127
|
```
|
|
@@ -71,7 +136,7 @@ runtime:
|
|
|
71
136
|
rote emit expense-audit/expected/pipeline.yaml --runtime dbos --out expense-audit/app-dbos
|
|
72
137
|
rote run expense-audit/app-dbos --input expense-audit/input.json \
|
|
73
138
|
--signal controller_review='{"reviewer": "Priya Shah", "approved_ids": ["EXP-2403", "EXP-2413", "EXP-2420"], "rejected_ids": ["EXP-2410"]}'
|
|
74
|
-
# ... "status": "final", "reimbursable_usd":
|
|
139
|
+
# ... "status": "final", "reimbursable_usd": 2414.34, "returned_usd": 889.81
|
|
75
140
|
```
|
|
76
141
|
|
|
77
142
|
What compiling it bought, measured: we ran the same batch twice each way
|
|
@@ -109,18 +174,49 @@ pip install rote-cli # or zero-install: uvx --from rote-cli rote ...
|
|
|
109
174
|
|
|
110
175
|
# `rote compile` runs an LLM agent, so it needs a driver: Claude Code
|
|
111
176
|
# (`claude`) or Codex (`codex`) installed and authed, or ANTHROPIC_API_KEY
|
|
112
|
-
# for the in-process `api` driver.
|
|
113
|
-
|
|
177
|
+
# for the in-process `api` driver. (`rote emit` needs no LLM; see below.)
|
|
178
|
+
|
|
179
|
+
# Default target is a compiled skill: the same skill name and trigger,
|
|
180
|
+
# with its fixed steps in code, run by the agent you already use:
|
|
181
|
+
rote compile ./examples/docs-digest/skill --out ./compiled/
|
|
182
|
+
# rote compile: ✓ docs-digest v...
|
|
183
|
+
# next: rote skill install .../compiled/runtime/skill/docs-digest
|
|
184
|
+
# then swap it in for the original docs-digest skill (Claude Code:
|
|
185
|
+
# ln -s .../runtime/skill/docs-digest ~/.claude/skills/docs-digest)
|
|
186
|
+
# or see it give the original's answer first: rote try ./examples/docs-digest/skill
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
rote checks `~/.claude/skills/<name>` before it prints the link. When your
|
|
190
|
+
original skill is already there, `ln -s` would nest the link inside it
|
|
191
|
+
(and exit 0), so rote prints the swap with the original moved aside
|
|
192
|
+
instead, plus the undo. Nothing is deleted, and rote runs none of it:
|
|
114
193
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
194
|
+
```
|
|
195
|
+
then, for Claude Code: your original docs-digest skill is at ~/.claude/skills/docs-digest.
|
|
196
|
+
To use the compiled one instead, move the original out of the skills folder (nothing is
|
|
197
|
+
deleted): mv ~/.claude/skills/docs-digest ~/docs-digest.original && ln -s .../runtime/skill/docs-digest ~/.claude/skills/docs-digest
|
|
198
|
+
undo: rm ~/.claude/skills/docs-digest && mv ~/docs-digest.original ~/.claude/skills/docs-digest
|
|
199
|
+
```
|
|
118
200
|
|
|
119
|
-
|
|
120
|
-
|
|
201
|
+
```sh
|
|
202
|
+
# Or emit a background workflow instead (see the table below):
|
|
203
|
+
rote compile ./examples/bdr-outreach/skill --runtime dbos --out ./compiled/
|
|
121
204
|
rote compile ./examples/bdr-outreach/skill --runtime cloudflare --out ./compiled/
|
|
122
205
|
```
|
|
123
206
|
|
|
207
|
+
Measured on claude-sonnet-4-6, original skill against its compiled skill,
|
|
208
|
+
with every compared field matching within the original's own run-to-run
|
|
209
|
+
noise:
|
|
210
|
+
|
|
211
|
+
| Skill | Original | Compiled skill |
|
|
212
|
+
| --- | --- | --- |
|
|
213
|
+
| expense-audit | 154 s, $0.34 | 43 s, $0.13 |
|
|
214
|
+
| ops-report | 55 s, $0.13 | 42 s, $0.12 |
|
|
215
|
+
| docs-digest | 17.9 s, $0.093 | 16.3 s, $0.049 |
|
|
216
|
+
|
|
217
|
+
`rote try <skill>` runs that comparison on a skill of yours: it compiles,
|
|
218
|
+
installs, and runs both sides on the same input, after showing the cost.
|
|
219
|
+
|
|
124
220
|
The name comes from *rote learning*: doing something so many times, so
|
|
125
221
|
reliably, that it becomes mechanical. That's what compilation does to a
|
|
126
222
|
skill.
|
|
@@ -181,13 +277,27 @@ and want to run a thousand more, unattended.
|
|
|
181
277
|
|
|
182
278
|
## How it works
|
|
183
279
|
|
|
184
|
-
One `rote compile` run does the whole thing.
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
280
|
+
One `rote compile` run does the whole thing. First rote decides the
|
|
281
|
+
pipeline's structure: which nodes exist and of which kind, how they are
|
|
282
|
+
wired, which run once per item, which are mandatory, where a person must
|
|
283
|
+
approve, and which constants they carry (System-1, see
|
|
284
|
+
[`docs/design/system1-compile.md`](docs/design/system1-compile.md)). One
|
|
285
|
+
Claude Haiku call reads the whole skill and proposes that structure, and
|
|
286
|
+
rote checks every node against the skill's text, its tools' schemas and
|
|
287
|
+
the sample input before accepting it. `--structure rules` decides it with
|
|
288
|
+
rules over the skill's text instead, with no model call.
|
|
289
|
+
Then an LLM agent (itself defined as a skill) writes only the text those
|
|
290
|
+
decisions need: the extracted Python modules for the deterministic
|
|
291
|
+
parts, their tests, and the typed signatures and prompts for the
|
|
292
|
+
LLM-judge parts. rote holds the agent to its decisions, and emits a
|
|
293
|
+
runtime-agnostic intermediate representation (`pipeline.yaml`) plus
|
|
189
294
|
runnable code for the durable execution engine of your choice.
|
|
190
295
|
|
|
296
|
+
`--no-system1` runs the original path instead, where the agent applies
|
|
297
|
+
the full compilation rubric and decides the structure too. `--update`
|
|
298
|
+
always uses that path, because System-1 does not support incremental
|
|
299
|
+
re-compilation yet.
|
|
300
|
+
|
|
191
301
|
The agent implements the deterministic `pure_function` steps the skill
|
|
192
302
|
spells out and writes tests for them. Before the compile reports
|
|
193
303
|
success, rote checks what the agent wrote and runs those tests, and any
|
|
@@ -249,6 +359,12 @@ touching Python tooling:
|
|
|
249
359
|
/plugin install rote@rote
|
|
250
360
|
```
|
|
251
361
|
|
|
362
|
+
New here? Run `/rote:setup`, or `uvx --from rote-cli rote setup` in a
|
|
363
|
+
terminal. It imports the MCP servers you already use, compiles one of your
|
|
364
|
+
skills, and shows that the compiled skill gives the same answer, with time
|
|
365
|
+
and cost on each side. It asks before every step and shows the cost before
|
|
366
|
+
anything is spent.
|
|
367
|
+
|
|
252
368
|
Then say "compile this skill" (or run `/rote:compile`). It confirms the
|
|
253
369
|
source directory, asks which runtime you want, runs the CLI via
|
|
254
370
|
[uv](https://docs.astral.sh/uv/) in the background, and reports the
|
|
@@ -261,16 +377,17 @@ pipelines up as MCP tools so Claude can trigger the deployed workflows
|
|
|
261
377
|
Prefer a terminal? The same thing is one `uvx` command:
|
|
262
378
|
|
|
263
379
|
```sh
|
|
264
|
-
uvx --from rote-cli rote compile ./my-skill --
|
|
380
|
+
uvx --from rote-cli rote compile ./my-skill --out ./compiled
|
|
265
381
|
```
|
|
266
382
|
|
|
267
383
|
**Hosted platform:** [roteskills.com](https://roteskills.com) is the
|
|
268
384
|
project site (concepts, benchmarks methodology, worked examples).
|
|
269
385
|
[app.roteskills.com](https://app.roteskills.com) is Rote Cloud, a
|
|
270
386
|
managed path for teams that would rather not operate a runtime: run
|
|
271
|
-
`rote login
|
|
272
|
-
|
|
273
|
-
this README still
|
|
387
|
+
`rote login`, then `rote compile --cloud` (or set `deploy: rote-cloud`
|
|
388
|
+
with `rote init`) runs server-side, streams progress back, auto-deploys,
|
|
389
|
+
and downloads the artifacts locally. Everything in this README still
|
|
390
|
+
works logged out.
|
|
274
391
|
|
|
275
392
|
> **Naming note:** the `rote` package on PyPI is an unrelated
|
|
276
393
|
> memoization library that also installs `import rote`, so the two can't
|
|
@@ -363,30 +480,33 @@ through your API credentials.
|
|
|
363
480
|
(over SSH, `--device` prints the code + URL instead), you click
|
|
364
481
|
Approve, and the CLI stores a tenant API key at
|
|
365
482
|
`~/.local/share/rote/cloud.json` (mode 0600). Once logged in,
|
|
366
|
-
`rote compile` runs **on rote cloud
|
|
483
|
+
`rote compile --cloud` runs **on rote cloud**, and so does a compile
|
|
484
|
+
whose runtime is `cloudflare` or whose `deploy` is `rote-cloud`
|
|
485
|
+
(flag, env or config). A flagless compile stays local and emits a
|
|
486
|
+
compiled skill, logged in or not. On rote cloud the skill bundle
|
|
367
487
|
syncs up (sha-diffed, so unchanged files don't re-upload), the
|
|
368
488
|
platform runs the compilation server-side, live progress streams back
|
|
369
489
|
through the same renderer as a local run, the result auto-deploys,
|
|
370
490
|
and the artifacts download into your `--out` directory in the exact
|
|
371
|
-
local layout. `--local` keeps the compilation on your machine (
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
even where config says otherwise. Logged out, everything works
|
|
376
|
-
locally exactly as before. `rote whoami` shows the account (verified
|
|
491
|
+
local layout. `--local` keeps the compilation on your machine (a
|
|
492
|
+
cloudflare compile then emits locally and auto-deploys), `--no-deploy`
|
|
493
|
+
or `deploy: none` keeps everything local; `--cloud` forces the server
|
|
494
|
+
even where config says otherwise. `rote whoami` shows the account (verified
|
|
377
495
|
live); `rote logout` revokes the key server-side and clears the store.
|
|
378
|
-
- **`rote init`**: one-time
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
driver
|
|
382
|
-
|
|
496
|
+
- **`rote init`**: one-time onboarding: pick where compiled pipelines
|
|
497
|
+
run (locally, with `skill` first and recommended, or rote cloud, with
|
|
498
|
+
login offered), which
|
|
499
|
+
compiler driver and model do the work, and who decides a local
|
|
500
|
+
compile's structure. It shows what it will write and asks before
|
|
501
|
+
writing. Answers are saved to `~/.config/rote/config.yaml`
|
|
383
502
|
(`--project` writes a `./rote.yaml` that overrides it per-repo) and
|
|
384
|
-
every later command reads them.
|
|
385
|
-
|
|
503
|
+
every later command reads them. Every question has a flag, so CI and
|
|
504
|
+
agents run it with flags and `--yes`; it never prompts without a
|
|
505
|
+
person at a terminal.
|
|
386
506
|
- **`rote config`**: print every configurable default with its
|
|
387
507
|
effective value *and the layer that set it*. Resolution everywhere is
|
|
388
508
|
`flag > ROTE_* env (ROTE_RUNTIME, ROTE_DEPLOY, ROTE_AGENT,
|
|
389
|
-
ROTE_MODEL) > project rote.yaml > user config > built-in`. Config
|
|
509
|
+
ROTE_MODEL, ROTE_EFFORT) > project rote.yaml > user config > built-in`. Config
|
|
390
510
|
files are strict: a typo'd key or value is a loud error, never a
|
|
391
511
|
silent fallback. `--json` for automation.
|
|
392
512
|
- **`rote eval <compiled>`**: render the before/after scorecard (wall
|
|
@@ -394,7 +514,11 @@ through your API credentials.
|
|
|
394
514
|
much of the run is still LLM-decided). `rote compile` writes this to
|
|
395
515
|
`compiled/scorecard.md` automatically. Add `--run` to *measure*
|
|
396
516
|
instead of estimate: it executes both sides for real and appends
|
|
397
|
-
measured cost, turns, and output agreement across trials.
|
|
517
|
+
measured cost, turns, and output agreement across trials. With
|
|
518
|
+
`--run --runtime skill` the after side is the compiled skill, run by
|
|
519
|
+
an agent through `rote skill run`, so both sides are agents and the
|
|
520
|
+
table compares context, tokens, time, cost and field fidelity
|
|
521
|
+
(`--budget` is required).
|
|
398
522
|
- **Per-node inference**: emitted judges read `ROTE_MODEL_<ID>` and
|
|
399
523
|
`ROTE_BASE_URL_<ID>` at runtime, so you can swap the model or point at
|
|
400
524
|
any OpenAI-compatible endpoint (Ollama, vLLM, a gateway) without
|
|
@@ -427,13 +551,19 @@ way, prefer the more deterministic kind.
|
|
|
427
551
|
Pick with `--runtime`; the same IR drives all of them. Under
|
|
428
552
|
`--backend api`, none of the emitted code references MCP: the
|
|
429
553
|
crystallization step replaces tool calls with direct vendor API calls.
|
|
554
|
+
The compiler agent gets web search and fetch tools for that, writes each
|
|
555
|
+
call from the vendor's current reference page, and cites the page as
|
|
556
|
+
`# docs: <url>`; `compile-report.md` lists every cited page beside
|
|
557
|
+
whether the agent fetched it during the compile. The api backend's calls
|
|
558
|
+
are Python, so it needs a Python runtime (`dbos`, `python`, `temporal`).
|
|
430
559
|
Under the default `--backend mcp`, tool-using nodes emit a working MCP
|
|
431
560
|
client call (with durable park-on-auth on every MCP-capable runtime);
|
|
432
561
|
see [`docs/mcp-client.md`](docs/mcp-client.md).
|
|
433
562
|
|
|
434
563
|
| Runtime | `--runtime` | Language | Shape | Notes |
|
|
435
564
|
| --- | --- | --- | --- | --- |
|
|
436
|
-
| **
|
|
565
|
+
| **Compiled skill** (default) | `skill` | Python driver + SKILL.md | a skill dir: the original's name and description, `scripts/` runs the fixed steps, the agent answers only judges and gates | Install with `rote skill install`; runs in Claude Code, Codex and other skill clients through `rote skill run` |
|
|
566
|
+
| DBOS | `dbos` | Python | `main.py` with `@DBOS.workflow` + `@DBOS.step` per node | No orchestrator to deploy; SQLite (dev) / Postgres (prod) |
|
|
437
567
|
| Temporal | `temporal` | Python | `workflow.py` + `activities.py` | Signal handlers for HITL gates |
|
|
438
568
|
| Plain Python | `python` | Python | single `main.py` script | Max legibility, stdlib only; refuses HITL-gate pipelines |
|
|
439
569
|
| Cloudflare Workflows | `cloudflare` | TypeScript | `WorkflowEntrypoint` + `wrangler.jsonc` | `wrangler deploy`-ready |
|