dreadnode 2.0.14__tar.gz → 2.0.15__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.
- {dreadnode-2.0.14 → dreadnode-2.0.15}/PKG-INFO +1 -1
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/api/client.py +128 -6
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/api/models.py +90 -9
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/optimize.py +175 -23
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/client/managed_client.py +4 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/client/models.py +122 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/client/runtime_client.py +154 -7
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/app.py +311 -4
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/prompt.py +12 -12
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/worker_manager.py +12 -4
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/app.py +1 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/dreadnode.tcss +8 -1
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/capabilities.py +139 -104
- dreadnode-2.0.15/dreadnode/app/tui/screens/sessions.py +652 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/tool_format.py +76 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/MAINTAINING.md +71 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/builtin_capabilities/dreadnode/agents/dreadnode.md +16 -6
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/SKILL.md +175 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/capability-improvement.md +60 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/promoting-capabilities.md +54 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/INDEX.md +28 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/agents.md +124 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/dependencies-and-checks.md +96 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/env-vars.md +172 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/events.md +87 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/flags.md +128 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/installing.md +97 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/manifest.md +240 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/mcp-servers.md +174 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/overview.md +68 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/publishing.md +117 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/quickstart.md +107 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/skills.md +80 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/tools.md +189 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/workers-reference.md +165 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/workers.md +329 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/writing-skills.md +139 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/guides/capability-optimization-loop.md +127 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/sdk/agents.md +2041 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/sdk/capabilities.md +1658 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/tui/default-tools.md +99 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/runtime-default-capability.md +66 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/SKILL.md +83 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/INDEX.md +22 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/airt.md +356 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/capability.md +260 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/dataset.md +161 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/evaluation.md +239 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/main.md +79 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/model.md +217 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/optimize.md +174 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/overview.md +91 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/runtime.md +94 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/sandbox.md +100 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/task.md +236 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/train.md +204 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/worlds.md +363 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/getting-started/authentication.md +218 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/SKILL.md +74 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/INDEX.md +30 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/capabilities/installing.md +97 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/capabilities/overview.md +68 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/getting-started/authentication.md +218 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/getting-started/overview.md +32 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/getting-started/quickstart.md +117 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/chat-models.md +82 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/credits.md +129 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/organizations.md +109 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/overview.md +68 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/projects.md +113 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/secrets.md +94 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/settings.md +151 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/users.md +89 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/workspaces.md +86 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/configuration.md +200 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/managing.md +83 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/manifest-reference.md +161 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/overview.md +58 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/quickstart.md +86 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/serve.md +107 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/sandboxes/inspecting.md +108 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/sandboxes/overview.md +86 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/dreadnode/skills/research-capabilities/SKILL.md +44 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/.gitignore +2 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/capability.yaml +29 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/hooks/observer.py +93 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/self_improvement_lib/classifier.py +66 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/self_improvement_lib/reflector_goal.py +36 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/self_improvement_lib/skill_io.py +100 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/skills-proposed/.gitkeep +0 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/tools/__init__.py +0 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/tools/reflector.py +12 -0
- dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/tools/skill_stats.py +12 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/capabilities/worker.py +9 -1
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/__init__.py +2 -0
- dreadnode-2.0.15/dreadnode/core/environment.py +498 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/util.py +2 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/generator/litellm_.py +32 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/message.py +18 -1
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/__init__.py +2 -1
- dreadnode-2.0.15/dreadnode/optimization/adapters/__init__.py +4 -0
- dreadnode-2.0.15/dreadnode/optimization/adapters/env.py +276 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/jobs.py +167 -32
- dreadnode-2.0.15/dreadnode/packaging/__init__.py +0 -0
- dreadnode-2.0.15/dreadnode/py.typed +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/__init__.py +4 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/fetch.py +65 -6
- dreadnode-2.0.15/dreadnode/tools/web_extract.py +176 -0
- dreadnode-2.0.15/dreadnode/tools/web_search.py +541 -0
- dreadnode-2.0.15/dreadnode/tracing/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/etl/__init__.py +4 -0
- dreadnode-2.0.15/dreadnode/training/etl/sft.py +335 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/jobs.py +32 -2
- {dreadnode-2.0.14 → dreadnode-2.0.15}/pyproject.toml +2 -2
- dreadnode-2.0.14/dreadnode/app/tui/screens/sessions.py +0 -384
- dreadnode-2.0.14/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/SKILL.md +0 -160
- dreadnode-2.0.14/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/capability-components.md +0 -111
- dreadnode-2.0.14/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/capability-improvement.md +0 -339
- dreadnode-2.0.14/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/runtime-default-capability.md +0 -262
- dreadnode-2.0.14/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/SKILL.md +0 -109
- dreadnode-2.0.14/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/command-groups.md +0 -224
- dreadnode-2.0.14/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/tui-crosswalk.md +0 -27
- dreadnode-2.0.14/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-runtime-reference/SKILL.md +0 -76
- dreadnode-2.0.14/dreadnode/builtin_capabilities/dreadnode/system-prompt.md +0 -7
- dreadnode-2.0.14/dreadnode/core/environment.py +0 -254
- dreadnode-2.0.14/dreadnode/optimization/adapters/__init__.py +0 -3
- dreadnode-2.0.14/dreadnode/tools/web_search.py +0 -170
- dreadnode-2.0.14/dreadnode/training/etl/sft.py +0 -102
- {dreadnode-2.0.14 → dreadnode-2.0.15}/.gitignore +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/LICENSE +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/README.md +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/__main__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/agent.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/events.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/exceptions.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/format.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/hooks.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/mcp/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/mcp/auth.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/mcp/client.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/mcp/config.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/mcp/server.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/reactions.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/skills.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/stopping.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/subagent.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/tool_resolution.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/tools.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/agents/trajectory.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/adversarial_reasoning.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/advpromptier.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/alignment_faking.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/analogy_escalation.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/analytics/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/analytics/aggregator.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/analytics/classifier.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/analytics/compliance.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/analytics/engine.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/analytics/recommendations.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/analytics/types.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/aprt_progressive.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/assessment.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/attention_shifting.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/autodan_turbo.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/autoredteamer.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/beast.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/compliance/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/compliance/atlas.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/compliance/nist.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/compliance/owasp.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/compliance/owasp_agentic.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/compliance/saif.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/constants.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/cot_jailbreak.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/crescendo.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/assets/audio/adversarial_query.mp3 +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/assets/image/bomb.jpg +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/assets/image/meth.png +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/prompts/adversarial_benchmark_subset.csv +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/prompts/ai_safety.csv +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/rubrics/data_exfiltration.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/rubrics/goal_hijacking.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/rubrics/memory_poisoning.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/rubrics/privilege_escalation.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/rubrics/rce.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/rubrics/scope_creep.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/rubrics/tool_chaining.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/rubrics/tool_selection_safety.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/rubrics/unbounded_agency.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/rubrics/web_chatbot_security.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/templates/crescendo/variant_1.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/templates/crescendo/variant_2.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/templates/crescendo/variant_3.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/templates/crescendo/variant_4.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/data/templates/crescendo/variant_5.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/deep_inception.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/drattack.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/echo_chamber.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/events.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/genetic_persona.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/goat.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/goat_v2.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/gptfuzzer.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/humor_bypass.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/image.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/j2_meta.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/jbdistill.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/jbfuzz.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/lrm_autonomous.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/mapf.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/multimodal.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/nexus.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/pair.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/persona_hijack.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/prompt.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/quantization_safety.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/rainbow.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/refusal_aware.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/renellm.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/reporting/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/reporting/json_report.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/reporting/llm_summary.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/reporting/markdown.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/reward_hacking.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/salami_slicing.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/self_persuasion.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/siren.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/tap.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/templatefuzz.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/tmap_trajectory.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/trojail.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/airt/watermark_removal.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/api/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/airt.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/args.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/capability.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/dataset.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/environment.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/evaluation.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/main.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/model.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/runtime.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/sandbox.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/shared.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/task.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/templates/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/templates/init/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/templates/init/challenge/Dockerfile +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/templates/init/docker-compose.yaml +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/templates/init/provision.sh +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/templates/init/solution.sh +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/templates/init/task-remote.yaml.tmpl +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/templates/init/task.yaml.tmpl +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/templates/init/teardown.sh +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/templates/init/verify.sh +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/train.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/cli/worlds.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/client/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/client/interactive.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/client/transports.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/config.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/env.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/main.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/model_catalog.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/paths.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/print_mode.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/auth.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/capability_manager.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/model_resolution.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/prompt_registry.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/runtime_events.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/session_hydrator.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/session_persistence.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/session_policy.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/turn_coordinator.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/utils.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/server/websocket.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/auth_flow.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/capabilities_manager.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/command_dispatcher.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/commands.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/connection.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/error_handler.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/model_manager.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/model_variants.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/profile_manager.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/runtime_cache.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screen_router.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/auth.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/base.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/capability_docs.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/connection_error.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/console.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/environments.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/evaluations.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/model_picker.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/models.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/raw_spans.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/runtimes.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/sandboxes.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/secrets.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/services.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/theme_showcase.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/traces.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/screens/workspaces.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/sessions_manager.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/spans_reader.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/theme.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/turn_coordinator.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/turn_lifecycle.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/turn_reducer.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/turn_state_phase.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/update_check.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/agent_dialog.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/agent_suggester.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/composer.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/context_bar.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/conversation.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/flash.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/header_bar.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/help_panel.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/mention_overlay.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/message_queue.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/new_messages_pill.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/overlay_mixin.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/permission_prompt.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/profile_dialog.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/prompt_info.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/session_sidebar.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/skills_dialog.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/slash_overlay.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/status_bar.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/throbber.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/tool.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/tool_progress.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/tools_dialog.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/welcome.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/widgets/whoami.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/app/tui/wire_events.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/builtin_capabilities/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/builtin_capabilities/dreadnode/capability.yaml +0 -0
- {dreadnode-2.0.14/dreadnode/packaging → dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/hooks}/__init__.py +0 -0
- {dreadnode-2.0.14/dreadnode/tracing → dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/self_improvement_lib}/__init__.py +0 -0
- /dreadnode-2.0.14/dreadnode/py.typed → /dreadnode-2.0.15/dreadnode/builtin_capabilities/self-improvement/skills-promoted/.gitkeep +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/capabilities/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/capabilities/capability.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/capabilities/flags.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/capabilities/loader.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/capabilities/sync.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/capabilities/tool_rules.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/capabilities/types.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/capabilities/worker_runner.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/conditions.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/discovery.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/exceptions.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/execution.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/hook.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/judge.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/load.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/log.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/meta/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/meta/config.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/meta/context.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/meta/hydrate.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/meta/introspect.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/metric.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/object.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/scorer.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/serialization.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/stopping.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/task.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/templating.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/transforms.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/types/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/types/audio.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/types/base.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/types/common.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/types/image.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/types/object_3d.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/types/table.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/types/text.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/core/types/video.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/datasets/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/datasets/dataset.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/datasets/hf.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/datasets/local.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/evaluations/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/evaluations/console.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/evaluations/evaluation.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/evaluations/events.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/evaluations/format.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/evaluations/result.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/evaluations/sample.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/caching.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/chat.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/data.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/exceptions.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/generator/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/generator/base.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/generator/http.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/generator/transformers_.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/generator/vllm_.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/models.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/parsing.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/tokenizer/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/tokenizer/base.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/tokenizer/transformers_.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/generators/utils.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/models/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/models/hf.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/models/local.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/models/model.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/adapters/agent.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/adapters/stack.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/api.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/backends/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/backends/base.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/backends/gepa.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/collectors.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/config.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/console.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/events.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/format.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/result.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/sampler.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/sampling.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/search.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/stopping.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/study.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/optimization/trial.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/packaging/loader.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/packaging/manifest.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/packaging/oci.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/packaging/package.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/packaging/task_validation.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/samplers/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/samplers/boundary.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/samplers/fuzzing.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/samplers/graph.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/samplers/grid.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/samplers/image.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/samplers/mapelites.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/samplers/optuna.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/samplers/random.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/samplers/registry.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/samplers/strategy.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/advanced_jailbreak_detection.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/agent_security.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/agentic.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/agentic_workflow.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/attack_outcome.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/classification.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/consistency.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/contains.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/cosine_sim.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/credentials.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/crucible.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/documentation_security.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/exfiltration_detection.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/format.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/harm.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/ide_security.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/image.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/json.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/judge.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/judge_ensemble.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/length.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/lexical.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/mcp_security.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/memorization.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/multi_agent_security.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/pii.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/prompt_leak.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/readability.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/reasoning_security.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/sentiment.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/similarity.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/structural_detection.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/scorers/supply_chain_detection.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/storage/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/storage/providers.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/storage/session_store.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/storage/storage.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/_ripgrep.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/apply_patch.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/dreadnode_cli.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/editing.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/execute.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/glob.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/grep.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/interaction.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/ls.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/memory.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/read.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/report.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/task.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/think.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/todo.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/trajectory_search.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tools/write.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tracing/constants.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tracing/convert.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tracing/exporter.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tracing/exporters.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tracing/span.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tracing/spans.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/tracing/trace_converter.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/base.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/dpo.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/etl/_common.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/etl/rl.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/etl/worlds.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/events.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/grpo.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ppo.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/prime.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/async_trainer.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/config.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/coordinator.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/distributed.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/dpo.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/experience.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/fsdp2_learner.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/inference.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/learner.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/multi_turn.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/ppo.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/reward_model.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/rollout_env.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/rollout_worker.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/sft.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/ray/trainer.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/recipes.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/rewards/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/rewards/aggregator.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/rewards/functions.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/rewards/scorer_bridge.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/rewards/shaping.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/rewards/types.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/rollouts/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/rollouts/adapters.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/rollouts/orchestrator.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/rollouts/types.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/rollouts/worlds.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/serving/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/serving/vllm_client.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/sft.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/tinker/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/tinker/config.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/tinker/data.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/tinker/renderer.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/tinker/rl.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/tinker/trainer.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/tinker_sft.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/training/utils.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/__init__.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/advanced_jailbreak.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/adversarial_suffix.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/agent_skill.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/agentic_workflow.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/audio.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/backdoor_finetune.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/browser_agent_attacks.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/cipher.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/competitive_parity.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/constitutional.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/document.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/documentation_poison.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/encoding.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/exfiltration.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/flip_attack.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/guardrail_bypass.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/ide_injection.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/image.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/injection.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/json_tools.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/language.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/logic_bomb.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/mcp_attacks.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/multi_agent_attacks.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/multimodal_attacks.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/persuasion.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/perturbation.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/pii_extraction.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/pythonic_tools.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/rag_poisoning.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/reasoning_attacks.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/refine.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/response_steering.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/structural_exploits.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/stylistic.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/substitution.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/supply_chain.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/swap.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/system_prompt_extraction.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/text.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/video.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/transforms/xml_tools.py +0 -0
- {dreadnode-2.0.14 → dreadnode-2.0.15}/dreadnode/version.py +0 -0
|
@@ -2060,13 +2060,21 @@ class ApiClient:
|
|
|
2060
2060
|
message_count: int = 0,
|
|
2061
2061
|
project_id: str | None = None,
|
|
2062
2062
|
runtime_id: str | None = None,
|
|
2063
|
+
labels: dict[str, list[str]] | None = None,
|
|
2064
|
+
visibility: t.Literal["private", "workspace"] = "private",
|
|
2065
|
+
origin: t.Literal["user", "eval", "worker"] = "user",
|
|
2063
2066
|
) -> dict[str, t.Any]:
|
|
2064
2067
|
"""POST /org/{org}/ws/{workspace}/sessions - Create or save a session."""
|
|
2065
2068
|
payload: dict[str, t.Any] = {
|
|
2066
2069
|
"id": session_id,
|
|
2067
2070
|
"model": model,
|
|
2068
2071
|
"message_count": message_count,
|
|
2072
|
+
"visibility": visibility,
|
|
2069
2073
|
}
|
|
2074
|
+
# SES-ORG-003: only send ``origin`` on the wire when non-default —
|
|
2075
|
+
# the platform's ``user`` default applies otherwise.
|
|
2076
|
+
if origin != "user":
|
|
2077
|
+
payload["origin"] = origin
|
|
2070
2078
|
if agent is not None:
|
|
2071
2079
|
payload["agent"] = agent
|
|
2072
2080
|
if title is not None:
|
|
@@ -2075,6 +2083,8 @@ class ApiClient:
|
|
|
2075
2083
|
payload["project_id"] = project_id
|
|
2076
2084
|
if runtime_id is not None:
|
|
2077
2085
|
payload["runtime_id"] = runtime_id
|
|
2086
|
+
if labels is not None:
|
|
2087
|
+
payload["labels"] = labels
|
|
2078
2088
|
response = self.request("POST", f"/org/{org}/ws/{workspace}/sessions", json_data=payload)
|
|
2079
2089
|
return t.cast("dict[str, t.Any]", response.json())
|
|
2080
2090
|
|
|
@@ -2088,8 +2098,15 @@ class ApiClient:
|
|
|
2088
2098
|
agent: str | None = None,
|
|
2089
2099
|
title: str | None = None,
|
|
2090
2100
|
message_count: int | None = None,
|
|
2101
|
+
labels: dict[str, list[str]] | None = None,
|
|
2102
|
+
visibility: t.Literal["private", "workspace"] | None = None,
|
|
2091
2103
|
) -> dict[str, t.Any]:
|
|
2092
|
-
"""PATCH /org/{org}/ws/{workspace}/sessions/{session_id} - Update a session.
|
|
2104
|
+
"""PATCH /org/{org}/ws/{workspace}/sessions/{session_id} - Update a session.
|
|
2105
|
+
|
|
2106
|
+
``labels`` full-replaces non-reserved labels when provided (SES-LBL-042).
|
|
2107
|
+
``visibility`` may only promote ``private`` → ``workspace``; downgrade
|
|
2108
|
+
returns 403 (SES-ACL-005). Omit fields to leave them unchanged.
|
|
2109
|
+
"""
|
|
2093
2110
|
payload: dict[str, t.Any] = {}
|
|
2094
2111
|
if model is not None:
|
|
2095
2112
|
payload["model"] = model
|
|
@@ -2099,6 +2116,10 @@ class ApiClient:
|
|
|
2099
2116
|
payload["title"] = title
|
|
2100
2117
|
if message_count is not None:
|
|
2101
2118
|
payload["message_count"] = message_count
|
|
2119
|
+
if labels is not None:
|
|
2120
|
+
payload["labels"] = labels
|
|
2121
|
+
if visibility is not None:
|
|
2122
|
+
payload["visibility"] = visibility
|
|
2102
2123
|
response = self.request(
|
|
2103
2124
|
"PATCH",
|
|
2104
2125
|
f"/org/{org}/ws/{workspace}/sessions/{session_id}",
|
|
@@ -2106,29 +2127,130 @@ class ApiClient:
|
|
|
2106
2127
|
)
|
|
2107
2128
|
return t.cast("dict[str, t.Any]", response.json())
|
|
2108
2129
|
|
|
2130
|
+
def archive_session(
|
|
2131
|
+
self,
|
|
2132
|
+
org: str,
|
|
2133
|
+
workspace: str,
|
|
2134
|
+
session_id: str,
|
|
2135
|
+
) -> dict[str, t.Any]:
|
|
2136
|
+
"""POST /org/{org}/ws/{workspace}/sessions/{id}/archive — idempotent."""
|
|
2137
|
+
response = self.request(
|
|
2138
|
+
"POST",
|
|
2139
|
+
f"/org/{org}/ws/{workspace}/sessions/{session_id}/archive",
|
|
2140
|
+
)
|
|
2141
|
+
return t.cast("dict[str, t.Any]", response.json())
|
|
2142
|
+
|
|
2143
|
+
def unarchive_session(
|
|
2144
|
+
self,
|
|
2145
|
+
org: str,
|
|
2146
|
+
workspace: str,
|
|
2147
|
+
session_id: str,
|
|
2148
|
+
) -> dict[str, t.Any]:
|
|
2149
|
+
"""POST /org/{org}/ws/{workspace}/sessions/{id}/unarchive — idempotent."""
|
|
2150
|
+
response = self.request(
|
|
2151
|
+
"POST",
|
|
2152
|
+
f"/org/{org}/ws/{workspace}/sessions/{session_id}/unarchive",
|
|
2153
|
+
)
|
|
2154
|
+
return t.cast("dict[str, t.Any]", response.json())
|
|
2155
|
+
|
|
2156
|
+
def freeze_session(
|
|
2157
|
+
self,
|
|
2158
|
+
org: str,
|
|
2159
|
+
workspace: str,
|
|
2160
|
+
session_id: str,
|
|
2161
|
+
) -> dict[str, t.Any]:
|
|
2162
|
+
"""POST /org/{org}/ws/{workspace}/sessions/{id}/freeze — terminal, idempotent."""
|
|
2163
|
+
response = self.request(
|
|
2164
|
+
"POST",
|
|
2165
|
+
f"/org/{org}/ws/{workspace}/sessions/{session_id}/freeze",
|
|
2166
|
+
)
|
|
2167
|
+
return t.cast("dict[str, t.Any]", response.json())
|
|
2168
|
+
|
|
2109
2169
|
def list_sessions(
|
|
2110
2170
|
self,
|
|
2111
2171
|
org: str,
|
|
2112
2172
|
workspace: str,
|
|
2113
2173
|
*,
|
|
2114
2174
|
page: int = 1,
|
|
2115
|
-
|
|
2116
|
-
project_id: str | None = None,
|
|
2175
|
+
limit: int = 20,
|
|
2176
|
+
project_id: str | list[str] | None = None,
|
|
2117
2177
|
user_id: str | None = None,
|
|
2178
|
+
archived: t.Literal["active", "archived", "any"] = "active",
|
|
2179
|
+
label: list[str] | None = None,
|
|
2180
|
+
origin: list[str] | None = None,
|
|
2181
|
+
sort_by: t.Literal[
|
|
2182
|
+
"updated_at", "last_message_at", "created_at", "message_count"
|
|
2183
|
+
] = "updated_at",
|
|
2184
|
+
sort_dir: t.Literal["asc", "desc"] = "desc",
|
|
2185
|
+
search: str | None = None,
|
|
2186
|
+
include_workload_sessions: bool = False,
|
|
2118
2187
|
) -> dict[str, t.Any]:
|
|
2119
2188
|
"""GET /org/{org}/ws/{workspace}/sessions - List sessions.
|
|
2120
2189
|
|
|
2121
|
-
|
|
2122
|
-
|
|
2190
|
+
``archived`` defaults to ``active`` so archived rows are hidden by
|
|
2191
|
+
default. ``label`` is a repeated ``key:value`` filter (SES-LBL-050).
|
|
2192
|
+
``project_id`` accepts a single id or a list of ids (repeatable,
|
|
2193
|
+
OR combine — SES-LST-006). ``sort_by`` must be one of
|
|
2194
|
+
``updated_at`` (default), ``last_message_at``, ``created_at``, or
|
|
2195
|
+
``message_count``. ``search`` is the full-text filter (SES-LST-007).
|
|
2123
2196
|
"""
|
|
2124
|
-
params: dict[str, t.Any] = {
|
|
2197
|
+
params: dict[str, t.Any] = {
|
|
2198
|
+
"page": page,
|
|
2199
|
+
"limit": limit,
|
|
2200
|
+
"archived": archived,
|
|
2201
|
+
"sort_by": sort_by,
|
|
2202
|
+
"sort_dir": sort_dir,
|
|
2203
|
+
}
|
|
2204
|
+
if include_workload_sessions:
|
|
2205
|
+
params["include_workload_sessions"] = True
|
|
2125
2206
|
if project_id is not None:
|
|
2126
2207
|
params["project_id"] = project_id
|
|
2127
2208
|
if user_id is not None:
|
|
2128
2209
|
params["user_id"] = user_id
|
|
2210
|
+
if label:
|
|
2211
|
+
params["label"] = label
|
|
2212
|
+
if origin:
|
|
2213
|
+
params["origin"] = origin
|
|
2214
|
+
if search:
|
|
2215
|
+
params["search"] = search
|
|
2129
2216
|
response = self.request("GET", f"/org/{org}/ws/{workspace}/sessions", params=params)
|
|
2130
2217
|
return t.cast("dict[str, t.Any]", response.json())
|
|
2131
2218
|
|
|
2219
|
+
def get_session_facets(
|
|
2220
|
+
self,
|
|
2221
|
+
org: str,
|
|
2222
|
+
workspace: str,
|
|
2223
|
+
*,
|
|
2224
|
+
project_id: str | list[str] | None = None,
|
|
2225
|
+
user_id: str | None = None,
|
|
2226
|
+
archived: t.Literal["active", "archived", "any"] = "active",
|
|
2227
|
+
label: list[str] | None = None,
|
|
2228
|
+
origin: list[str] | None = None,
|
|
2229
|
+
search: str | None = None,
|
|
2230
|
+
include_workload_sessions: bool = False,
|
|
2231
|
+
) -> dict[str, t.Any]:
|
|
2232
|
+
"""GET /org/{org}/ws/{workspace}/sessions/facets - Per-key label value counts.
|
|
2233
|
+
|
|
2234
|
+
Takes the same filter set as :meth:`list_sessions` (minus pagination
|
|
2235
|
+
/ sort). ``project_id`` accepts a single id or a list. The response
|
|
2236
|
+
shape is ``{"labels": {key: [{"value": ..., "count": ...}, ...]}}``.
|
|
2237
|
+
"""
|
|
2238
|
+
params: dict[str, t.Any] = {"archived": archived}
|
|
2239
|
+
if include_workload_sessions:
|
|
2240
|
+
params["include_workload_sessions"] = True
|
|
2241
|
+
if project_id is not None:
|
|
2242
|
+
params["project_id"] = project_id
|
|
2243
|
+
if user_id is not None:
|
|
2244
|
+
params["user_id"] = user_id
|
|
2245
|
+
if label:
|
|
2246
|
+
params["label"] = label
|
|
2247
|
+
if origin:
|
|
2248
|
+
params["origin"] = origin
|
|
2249
|
+
if search:
|
|
2250
|
+
params["search"] = search
|
|
2251
|
+
response = self.request("GET", f"/org/{org}/ws/{workspace}/sessions/facets", params=params)
|
|
2252
|
+
return t.cast("dict[str, t.Any]", response.json())
|
|
2253
|
+
|
|
2132
2254
|
def get_session(
|
|
2133
2255
|
self,
|
|
2134
2256
|
org: str,
|
|
@@ -818,6 +818,8 @@ class SessionCreateRequest(BaseModel):
|
|
|
818
818
|
validation_alias="generateParamsExtra",
|
|
819
819
|
)
|
|
820
820
|
policy: str | dict[str, t.Any] | None = None
|
|
821
|
+
labels: dict[str, list[str]] | None = None
|
|
822
|
+
origin: str | None = None
|
|
821
823
|
|
|
822
824
|
model_config = ConfigDict(populate_by_name=True)
|
|
823
825
|
|
|
@@ -1369,7 +1371,7 @@ class TrainingJobArtifacts(BaseModel):
|
|
|
1369
1371
|
# -----------------------------------------------------------------------------
|
|
1370
1372
|
|
|
1371
1373
|
OptimizationBackend = t.Literal["gepa"]
|
|
1372
|
-
OptimizationTargetKind = t.Literal["capability_agent"]
|
|
1374
|
+
OptimizationTargetKind = t.Literal["capability_agent", "capability_env"]
|
|
1373
1375
|
OptimizationJobStatus = t.Literal[
|
|
1374
1376
|
"pending",
|
|
1375
1377
|
"queued",
|
|
@@ -1379,7 +1381,17 @@ OptimizationJobStatus = t.Literal[
|
|
|
1379
1381
|
"cancelled",
|
|
1380
1382
|
]
|
|
1381
1383
|
OptimizationLogLevel = t.Literal["debug", "info", "warning", "error"]
|
|
1382
|
-
OptimizationComponent = t.Literal[
|
|
1384
|
+
OptimizationComponent = t.Literal[
|
|
1385
|
+
"instructions",
|
|
1386
|
+
"agent_prompt",
|
|
1387
|
+
"capability_prompt",
|
|
1388
|
+
"skill_descriptions",
|
|
1389
|
+
"skill_bodies",
|
|
1390
|
+
]
|
|
1391
|
+
_AGENT_COMPONENTS: frozenset[OptimizationComponent] = frozenset({"instructions"})
|
|
1392
|
+
_ENV_COMPONENTS: frozenset[OptimizationComponent] = frozenset(
|
|
1393
|
+
{"agent_prompt", "capability_prompt", "skill_descriptions", "skill_bodies"}
|
|
1394
|
+
)
|
|
1383
1395
|
OptimizationProgressEventType = t.Literal[
|
|
1384
1396
|
"optimization_start",
|
|
1385
1397
|
"iteration_start",
|
|
@@ -1398,6 +1410,12 @@ class OptimizationJobConfig(BaseModel):
|
|
|
1398
1410
|
|
|
1399
1411
|
model_config = ConfigDict(extra="forbid")
|
|
1400
1412
|
|
|
1413
|
+
concurrency: int = 1
|
|
1414
|
+
parallel_rows: int = 1
|
|
1415
|
+
task_ref: str | None = None
|
|
1416
|
+
task_refs: list[str] | None = None
|
|
1417
|
+
val_task_refs: list[str] | None = None
|
|
1418
|
+
timeout_sec: int | None = None
|
|
1401
1419
|
seed: int = 0
|
|
1402
1420
|
max_metric_calls: int | None = 100
|
|
1403
1421
|
max_trials: int | None = None
|
|
@@ -1438,22 +1456,83 @@ class CreateOptimizationJobBase(BaseModel):
|
|
|
1438
1456
|
run_ref: str | None = None
|
|
1439
1457
|
capability_ref: CapabilityRef
|
|
1440
1458
|
agent_name: str | None = None
|
|
1441
|
-
dataset_ref: DatasetRef
|
|
1459
|
+
dataset_ref: DatasetRef | None = None
|
|
1442
1460
|
val_dataset_ref: DatasetRef | None = None
|
|
1443
1461
|
reward_recipe: RewardRecipe
|
|
1444
|
-
components: list[OptimizationComponent]
|
|
1462
|
+
components: list[OptimizationComponent] | None = None
|
|
1463
|
+
task_ref: str | None = None
|
|
1464
|
+
task_refs: list[str] | None = None
|
|
1465
|
+
val_task_refs: list[str] | None = None
|
|
1466
|
+
timeout_sec: int | None = None
|
|
1445
1467
|
objective: str | None = None
|
|
1446
1468
|
config: OptimizationJobConfig = Field(default_factory=OptimizationJobConfig)
|
|
1447
1469
|
tags: list[str] = Field(default_factory=list)
|
|
1448
1470
|
|
|
1449
1471
|
@model_validator(mode="after")
|
|
1450
1472
|
def validate_components(self) -> CreateOptimizationJobBase:
|
|
1473
|
+
if self.components is None:
|
|
1474
|
+
self.components = (
|
|
1475
|
+
["agent_prompt", "capability_prompt", "skill_descriptions", "skill_bodies"]
|
|
1476
|
+
if self.target_kind == "capability_env"
|
|
1477
|
+
else ["instructions"]
|
|
1478
|
+
)
|
|
1451
1479
|
if not self.components:
|
|
1452
1480
|
raise ValueError("Hosted optimization jobs require at least one optimizable component")
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1481
|
+
component_set = set(self.components)
|
|
1482
|
+
if self.target_kind == "capability_agent":
|
|
1483
|
+
invalid = component_set - _AGENT_COMPONENTS
|
|
1484
|
+
if invalid:
|
|
1485
|
+
raise ValueError(
|
|
1486
|
+
"capability_agent supports only ['instructions'] components"
|
|
1487
|
+
f" (got {sorted(invalid)})"
|
|
1488
|
+
)
|
|
1489
|
+
else: # capability_env
|
|
1490
|
+
invalid = component_set - _ENV_COMPONENTS
|
|
1491
|
+
if invalid:
|
|
1492
|
+
raise ValueError(
|
|
1493
|
+
"capability_env supports component surfaces"
|
|
1494
|
+
f" {sorted(_ENV_COMPONENTS)} (got {sorted(invalid)})"
|
|
1495
|
+
)
|
|
1496
|
+
return self
|
|
1497
|
+
|
|
1498
|
+
@model_validator(mode="after")
|
|
1499
|
+
def validate_env_requirements(self) -> CreateOptimizationJobBase:
|
|
1500
|
+
if self.target_kind == "capability_env":
|
|
1501
|
+
train_sources = [
|
|
1502
|
+
("task_refs", bool(self.task_refs)),
|
|
1503
|
+
("dataset_ref", self.dataset_ref is not None),
|
|
1504
|
+
("task_ref", self.task_ref is not None),
|
|
1505
|
+
]
|
|
1506
|
+
active = [name for name, present in train_sources if present]
|
|
1507
|
+
if len(active) == 0:
|
|
1508
|
+
raise ValueError(
|
|
1509
|
+
"capability_env requires a training surface: provide "
|
|
1510
|
+
"task_refs, task_ref, or dataset_ref"
|
|
1511
|
+
)
|
|
1512
|
+
if len(active) > 1:
|
|
1513
|
+
raise ValueError(
|
|
1514
|
+
"capability_env training surface is ambiguous — provide only "
|
|
1515
|
+
f"one of task_refs / task_ref / dataset_ref (got {active})"
|
|
1516
|
+
)
|
|
1517
|
+
if self.val_task_refs is not None and self.val_dataset_ref is not None:
|
|
1518
|
+
raise ValueError(
|
|
1519
|
+
"capability_env val surface is ambiguous — provide only one "
|
|
1520
|
+
"of val_task_refs or val_dataset_ref"
|
|
1521
|
+
)
|
|
1522
|
+
else:
|
|
1523
|
+
if self.task_ref is not None:
|
|
1524
|
+
raise ValueError("task_ref is only valid with target_kind='capability_env'")
|
|
1525
|
+
if self.timeout_sec is not None:
|
|
1526
|
+
raise ValueError("timeout_sec is only valid with target_kind='capability_env'")
|
|
1527
|
+
if self.task_refs is not None:
|
|
1528
|
+
raise ValueError("task_refs is only valid with target_kind='capability_env'")
|
|
1529
|
+
if self.val_task_refs is not None:
|
|
1530
|
+
raise ValueError("val_task_refs is only valid with target_kind='capability_env'")
|
|
1531
|
+
if self.dataset_ref is None:
|
|
1532
|
+
raise ValueError(
|
|
1533
|
+
"capability_agent requires dataset_ref (dataset rows drive the "
|
|
1534
|
+
"agent's user message and scoring)"
|
|
1535
|
+
)
|
|
1457
1536
|
return self
|
|
1458
1537
|
|
|
1459
1538
|
|
|
@@ -1549,8 +1628,10 @@ class OptimizationJob(BaseModel):
|
|
|
1549
1628
|
model: str
|
|
1550
1629
|
project: str | None = None
|
|
1551
1630
|
run_ref: str | None = None
|
|
1552
|
-
dataset_ref: DatasetRef
|
|
1631
|
+
dataset_ref: DatasetRef | None = None
|
|
1553
1632
|
val_dataset_ref: DatasetRef | None = None
|
|
1633
|
+
task_refs: list[str] | None = None
|
|
1634
|
+
val_task_refs: list[str] | None = None
|
|
1554
1635
|
objective: str | None = None
|
|
1555
1636
|
capability: OptimizationCapabilitySnapshot
|
|
1556
1637
|
agent_name: str | None = None
|
|
@@ -34,7 +34,20 @@ OptimizationStatus = t.Literal[
|
|
|
34
34
|
|
|
35
35
|
OptimizationBackend = t.Literal["gepa"]
|
|
36
36
|
|
|
37
|
-
TargetKind = t.Literal["capability_agent"]
|
|
37
|
+
TargetKind = t.Literal["capability_agent", "capability_env"]
|
|
38
|
+
|
|
39
|
+
EnvComponent = t.Literal[
|
|
40
|
+
"agent_prompt",
|
|
41
|
+
"capability_prompt",
|
|
42
|
+
"skill_descriptions",
|
|
43
|
+
"skill_bodies",
|
|
44
|
+
]
|
|
45
|
+
_DEFAULT_ENV_COMPONENTS: tuple[EnvComponent, ...] = (
|
|
46
|
+
"agent_prompt",
|
|
47
|
+
"capability_prompt",
|
|
48
|
+
"skill_descriptions",
|
|
49
|
+
"skill_bodies",
|
|
50
|
+
)
|
|
38
51
|
|
|
39
52
|
cli = cyclopts.App(name="optimize", help="Optimize agents with jobs.")
|
|
40
53
|
|
|
@@ -83,20 +96,59 @@ def submit(
|
|
|
83
96
|
str,
|
|
84
97
|
cyclopts.Parameter(help="Capability ref in NAME@VERSION form"),
|
|
85
98
|
],
|
|
86
|
-
dataset: t.Annotated[
|
|
87
|
-
str,
|
|
88
|
-
cyclopts.Parameter(help="Training dataset ref in NAME@VERSION form"),
|
|
89
|
-
],
|
|
90
99
|
reward_recipe: t.Annotated[
|
|
91
100
|
RewardRecipeChoice,
|
|
92
101
|
cyclopts.Parameter(
|
|
93
102
|
help="Hosted reward recipe name",
|
|
94
103
|
),
|
|
95
104
|
],
|
|
105
|
+
dataset: t.Annotated[
|
|
106
|
+
str | None,
|
|
107
|
+
cyclopts.Parameter(
|
|
108
|
+
help=(
|
|
109
|
+
"Agent-scored dataset ref (NAME@VERSION). Rows drive the agent's "
|
|
110
|
+
"user message and reward-recipe scoring. Mutually exclusive with "
|
|
111
|
+
"--task and --task-dataset."
|
|
112
|
+
),
|
|
113
|
+
),
|
|
114
|
+
] = None,
|
|
115
|
+
task: t.Annotated[
|
|
116
|
+
list[str] | None,
|
|
117
|
+
cyclopts.Parameter(
|
|
118
|
+
negative_iterable=(),
|
|
119
|
+
help=(
|
|
120
|
+
"Env-scored training task (repeatable). One value = single task, "
|
|
121
|
+
"multiple = train-across-tasks. Mutually exclusive with --dataset "
|
|
122
|
+
"and --task-dataset."
|
|
123
|
+
),
|
|
124
|
+
),
|
|
125
|
+
] = None,
|
|
126
|
+
task_dataset: t.Annotated[
|
|
127
|
+
str | None,
|
|
128
|
+
cyclopts.Parameter(
|
|
129
|
+
help=(
|
|
130
|
+
"Env-scored dataset ref (NAME@VERSION) where rows carry task_ref "
|
|
131
|
+
"plus per-row content (inputs, scoring fields). Use when the "
|
|
132
|
+
"corpus warrants versioning — otherwise reach for --task. "
|
|
133
|
+
"Mutually exclusive with --dataset and --task."
|
|
134
|
+
),
|
|
135
|
+
),
|
|
136
|
+
] = None,
|
|
96
137
|
val_dataset: t.Annotated[
|
|
97
138
|
str | None,
|
|
98
139
|
cyclopts.Parameter(
|
|
99
|
-
help="Optional validation dataset
|
|
140
|
+
help="Optional held-out validation dataset (NAME@VERSION).",
|
|
141
|
+
),
|
|
142
|
+
] = None,
|
|
143
|
+
val_task: t.Annotated[
|
|
144
|
+
list[str] | None,
|
|
145
|
+
cyclopts.Parameter(
|
|
146
|
+
negative_iterable=(),
|
|
147
|
+
help=(
|
|
148
|
+
"Env-scored held-out validation task (repeatable). Never merged "
|
|
149
|
+
"with training — candidates are mutated against train, scored "
|
|
150
|
+
"for selection against val."
|
|
151
|
+
),
|
|
100
152
|
),
|
|
101
153
|
] = None,
|
|
102
154
|
reward_params: t.Annotated[
|
|
@@ -180,6 +232,37 @@ def submit(
|
|
|
180
232
|
float | None, cyclopts.Parameter(help="Timeout in seconds for waiting")
|
|
181
233
|
] = None,
|
|
182
234
|
as_json: t.Annotated[bool, cyclopts.Parameter(name="--json", negative=())] = False,
|
|
235
|
+
env_timeout_sec: t.Annotated[
|
|
236
|
+
int | None,
|
|
237
|
+
cyclopts.Parameter(
|
|
238
|
+
help="Per-trial TaskEnvironment timeout in seconds (env-mode only).",
|
|
239
|
+
),
|
|
240
|
+
] = None,
|
|
241
|
+
parallel_rows: t.Annotated[
|
|
242
|
+
int | None,
|
|
243
|
+
cyclopts.Parameter(
|
|
244
|
+
validator=cyclopts.validators.Number(gte=1),
|
|
245
|
+
help="Dataset rows scored concurrently within one candidate (env-mode only; default 1).",
|
|
246
|
+
),
|
|
247
|
+
] = None,
|
|
248
|
+
concurrency: t.Annotated[
|
|
249
|
+
int | None,
|
|
250
|
+
cyclopts.Parameter(
|
|
251
|
+
validator=cyclopts.validators.Number(gte=1),
|
|
252
|
+
help="Candidates evaluated in parallel across the search (default 1).",
|
|
253
|
+
),
|
|
254
|
+
] = None,
|
|
255
|
+
component: t.Annotated[
|
|
256
|
+
list[EnvComponent] | None,
|
|
257
|
+
cyclopts.Parameter(
|
|
258
|
+
negative_iterable=(),
|
|
259
|
+
help=(
|
|
260
|
+
"Capability surface to optimize (env-mode only, repeatable). "
|
|
261
|
+
"Defaults to all four: agent_prompt, capability_prompt, "
|
|
262
|
+
"skill_descriptions, skill_bodies."
|
|
263
|
+
),
|
|
264
|
+
),
|
|
265
|
+
] = None,
|
|
183
266
|
platform: PlatformScopeArgs = PlatformScopeArgs(),
|
|
184
267
|
) -> None:
|
|
185
268
|
"""Submit a hosted optimization job."""
|
|
@@ -191,10 +274,56 @@ def submit(
|
|
|
191
274
|
RewardRecipe,
|
|
192
275
|
)
|
|
193
276
|
|
|
277
|
+
# Each training-surface flag is self-identifying. Pick exactly one;
|
|
278
|
+
# target_kind is inferred from which one the user chose.
|
|
279
|
+
train_sources = [
|
|
280
|
+
("--task", bool(task)),
|
|
281
|
+
("--task-dataset", task_dataset is not None),
|
|
282
|
+
("--dataset", dataset is not None),
|
|
283
|
+
]
|
|
284
|
+
active_train = [name for name, present in train_sources if present]
|
|
285
|
+
if len(active_train) == 0:
|
|
286
|
+
raise ValueError(
|
|
287
|
+
"submit requires a training surface: --task (env, inline), "
|
|
288
|
+
"--task-dataset (env, dataset), or --dataset (agent, dataset)"
|
|
289
|
+
)
|
|
290
|
+
if len(active_train) > 1:
|
|
291
|
+
raise ValueError(
|
|
292
|
+
f"training surface is ambiguous — provide only one of {active_train}. "
|
|
293
|
+
"--task is env with inline task list; --task-dataset is env with "
|
|
294
|
+
"curated dataset rows; --dataset is agent-scored."
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
is_env = bool(task) or task_dataset is not None
|
|
298
|
+
target_kind: TargetKind = "capability_env" if is_env else "capability_agent"
|
|
299
|
+
|
|
300
|
+
if val_task and val_dataset:
|
|
301
|
+
raise ValueError(
|
|
302
|
+
"val surface is ambiguous — provide only one of --val-task or --val-dataset"
|
|
303
|
+
)
|
|
304
|
+
if not is_env:
|
|
305
|
+
if val_task:
|
|
306
|
+
raise ValueError("--val-task is only valid in env mode (with --task or --task-dataset)")
|
|
307
|
+
if env_timeout_sec is not None:
|
|
308
|
+
raise ValueError("--env-timeout-sec is only valid in env mode")
|
|
309
|
+
if parallel_rows is not None:
|
|
310
|
+
raise ValueError("--parallel-rows is only meaningful in env mode")
|
|
311
|
+
if component:
|
|
312
|
+
raise ValueError("--component is only valid in env mode")
|
|
313
|
+
|
|
194
314
|
api, profile = platform.connect()
|
|
195
315
|
|
|
196
316
|
capability_ref = ArtifactRef.parse_versioned(capability, profile.org_key)
|
|
197
|
-
|
|
317
|
+
|
|
318
|
+
# Both --dataset and --task-dataset resolve to the same request field
|
|
319
|
+
# (``dataset_ref``); the distinction is user-facing intent encoded via
|
|
320
|
+
# the flag choice. The server-side target_kind + validator keep the two
|
|
321
|
+
# modes unambiguous.
|
|
322
|
+
dataset_ref_source = dataset or task_dataset
|
|
323
|
+
dataset_ref: DatasetRef | None = None
|
|
324
|
+
if dataset_ref_source:
|
|
325
|
+
dataset_parsed = ArtifactRef.parse_versioned(dataset_ref_source, profile.org_key)
|
|
326
|
+
dataset_ref = DatasetRef(name=dataset_parsed.name, version=dataset_parsed.version)
|
|
198
327
|
|
|
199
328
|
val_dataset_ref: DatasetRef | None = None
|
|
200
329
|
if val_dataset:
|
|
@@ -236,28 +365,51 @@ def submit(
|
|
|
236
365
|
config_kwargs["track_best_outputs"] = True
|
|
237
366
|
if display_progress_bar:
|
|
238
367
|
config_kwargs["display_progress_bar"] = True
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
368
|
+
if concurrency is not None:
|
|
369
|
+
config_kwargs["concurrency"] = concurrency
|
|
370
|
+
if parallel_rows is not None:
|
|
371
|
+
config_kwargs["parallel_rows"] = parallel_rows
|
|
372
|
+
|
|
373
|
+
if target_kind == "capability_env":
|
|
374
|
+
components: list[str] = list(component) if component else list(_DEFAULT_ENV_COMPONENTS)
|
|
375
|
+
else:
|
|
376
|
+
components = ["instructions"]
|
|
377
|
+
|
|
378
|
+
request_kwargs: dict[str, t.Any] = {
|
|
379
|
+
"name": name,
|
|
380
|
+
"target_kind": target_kind,
|
|
381
|
+
"model": resolve_model(model),
|
|
382
|
+
# Prefer the resolved UUID over the key string. ``validate_scope``
|
|
383
|
+
# (run by ``platform.connect()``) populates ``project_id`` via a
|
|
384
|
+
# workspace-scoped lookup, so when it's set the server can resolve
|
|
385
|
+
# the project unambiguously. Falls back to the key when no project
|
|
386
|
+
# is configured on the profile.
|
|
387
|
+
"project": profile.project_id or profile.project_key,
|
|
388
|
+
"run_ref": run_ref,
|
|
389
|
+
"capability_ref": CapabilityRef(
|
|
246
390
|
name=capability_ref.name,
|
|
247
391
|
version=capability_ref.version,
|
|
248
392
|
),
|
|
249
|
-
agent_name
|
|
250
|
-
dataset_ref
|
|
251
|
-
val_dataset_ref
|
|
252
|
-
reward_recipe
|
|
393
|
+
"agent_name": agent_name,
|
|
394
|
+
"dataset_ref": dataset_ref,
|
|
395
|
+
"val_dataset_ref": val_dataset_ref,
|
|
396
|
+
"reward_recipe": RewardRecipe(
|
|
253
397
|
name=reward_recipe,
|
|
254
398
|
params=parsed_reward_params,
|
|
255
399
|
),
|
|
256
|
-
components
|
|
257
|
-
objective
|
|
258
|
-
config
|
|
259
|
-
tags
|
|
260
|
-
|
|
400
|
+
"components": components,
|
|
401
|
+
"objective": objective,
|
|
402
|
+
"config": OptimizationJobConfig(**config_kwargs),
|
|
403
|
+
"tags": list(tag or []),
|
|
404
|
+
}
|
|
405
|
+
if task:
|
|
406
|
+
request_kwargs["task_refs"] = list(task)
|
|
407
|
+
if val_task:
|
|
408
|
+
request_kwargs["val_task_refs"] = list(val_task)
|
|
409
|
+
if env_timeout_sec is not None:
|
|
410
|
+
request_kwargs["timeout_sec"] = env_timeout_sec
|
|
411
|
+
|
|
412
|
+
request = CreateGEPAOptimizationJobRequest(**request_kwargs)
|
|
261
413
|
job = api.create_optimization_job(profile.org_key, profile.workspace_key, request)
|
|
262
414
|
if wait:
|
|
263
415
|
job = _wait_for_optimization_job(
|
|
@@ -132,6 +132,8 @@ class ManagedRuntimeClient(RuntimeClient):
|
|
|
132
132
|
project: str | None = None,
|
|
133
133
|
generate_params_extra: dict[str, t.Any] | None = None,
|
|
134
134
|
policy: str | dict[str, t.Any] | None = None,
|
|
135
|
+
labels: dict[str, list[str]] | None = None,
|
|
136
|
+
origin: str | None = None,
|
|
135
137
|
) -> models.SessionInfo:
|
|
136
138
|
"""Create a session, defaulting project from the platform profile."""
|
|
137
139
|
resolved_project = project or self._platform_project
|
|
@@ -143,6 +145,8 @@ class ManagedRuntimeClient(RuntimeClient):
|
|
|
143
145
|
project=resolved_project,
|
|
144
146
|
generate_params_extra=generate_params_extra,
|
|
145
147
|
policy=policy,
|
|
148
|
+
labels=labels,
|
|
149
|
+
origin=origin,
|
|
146
150
|
)
|
|
147
151
|
|
|
148
152
|
# ── Server lifecycle ──────────────────────────────────────────
|