dreadnode 2.0.28__tar.gz → 2.0.30__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.28 → dreadnode-2.0.30}/PKG-INFO +1 -1
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/process_judge.py +97 -9
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/assessment.py +15 -1
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/autodan_turbo.py +12 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/beast.py +12 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/deep_inception.py +12 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/drattack.py +12 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/gptfuzzer.py +12 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/image.py +24 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/multimodal.py +12 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/rainbow.py +12 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/renellm.py +12 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/api/client.py +9 -1
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/api/models.py +16 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/evaluation.py +4 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/task.py +212 -19
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/train.py +14 -2
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/model_catalog.py +1 -1
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/model_resolution.py +5 -10
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/app.py +2 -33
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/dreadnode.tcss +0 -3
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/model_manager.py +10 -60
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/__init__.py +0 -2
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/runtimes.py +53 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/sandboxes.py +18 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/tool_format.py +20 -3
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/composer.py +0 -2
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/help_panel.py +1 -1
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/rewind_picker.py +1 -2
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/agents/dreadnode.md +2 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/evaluation.md +1 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/task.md +1 -1
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/train.md +2 -2
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/INDEX.md +1 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/chat-models.md +34 -38
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/organizations.md +2 -1
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/secrets.md +4 -2
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/settings.md +34 -20
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/sandboxes/inspecting.md +2 -0
- dreadnode-2.0.30/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/sandboxes/runtime-limits.md +55 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/generator/litellm_.py +17 -1
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/message.py +216 -4
- dreadnode-2.0.30/dreadnode/generators/proxy.py +59 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/packaging/task_validation.py +30 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/policies/guard.py +20 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/judge.py +31 -20
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/read.py +113 -15
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/jobs.py +12 -2
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/tinker/config.py +16 -3
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/tinker/trainer.py +131 -30
- {dreadnode-2.0.28 → dreadnode-2.0.30}/pyproject.toml +2 -1
- dreadnode-2.0.28/dreadnode/app/tui/screens/model_picker.py +0 -127
- {dreadnode-2.0.28 → dreadnode-2.0.30}/.gitignore +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/LICENSE +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/README.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/__main__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/agent.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/events.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/exceptions.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/format.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/hooks.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/judge.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/mcp/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/mcp/auth.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/mcp/client.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/mcp/config.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/mcp/server.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/reactions.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/skills.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/stopping.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/subagent.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/tool_resolution.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/tools.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/agents/trajectory.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/adversarial_reasoning.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/advpromptier.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/alignment_faking.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/analogy_escalation.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/analytics/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/analytics/aggregator.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/analytics/classifier.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/analytics/compliance.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/analytics/engine.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/analytics/recommendations.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/analytics/types.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/aprt_progressive.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/attention_shifting.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/autoredteamer.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/compliance/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/compliance/atlas.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/compliance/nist.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/compliance/owasp.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/compliance/owasp_agentic.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/compliance/saif.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/constants.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/cot_jailbreak.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/crescendo.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/assets/audio/adversarial_query.mp3 +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/assets/image/bomb.jpg +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/assets/image/meth.png +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/prompts/adversarial_benchmark_subset.csv +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/prompts/ai_safety.csv +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/rubrics/data_exfiltration.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/rubrics/goal_hijacking.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/rubrics/idor.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/rubrics/memory_poisoning.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/rubrics/privilege_escalation.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/rubrics/rce.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/rubrics/scope_creep.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/rubrics/tool_chaining.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/rubrics/tool_selection_safety.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/rubrics/unbounded_agency.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/rubrics/web_chatbot_security.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/templates/crescendo/variant_1.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/templates/crescendo/variant_2.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/templates/crescendo/variant_3.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/templates/crescendo/variant_4.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/data/templates/crescendo/variant_5.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/echo_chamber.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/events.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/genetic_persona.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/goat.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/goat_v2.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/humor_bypass.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/j2_meta.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/jbdistill.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/jbfuzz.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/lrm_autonomous.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/mapf.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/nexus.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/pair.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/persona_hijack.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/prompt.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/quantization_safety.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/refusal_aware.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/reporting/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/reporting/json_report.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/reporting/llm_summary.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/reporting/markdown.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/reward_hacking.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/salami_slicing.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/self_persuasion.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/siren.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/tap.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/templatefuzz.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/tmap_trajectory.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/trojail.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/airt/watermark_removal.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/api/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/airt.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/args.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/capability.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/dataset.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/environment.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/inference_model.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/judge.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/main.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/model.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/optimize.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/runtime.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/sandbox.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/secret.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/session.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/shared.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/templates/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/templates/init/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/templates/init/challenge/Dockerfile +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/templates/init/docker-compose.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/templates/init/provision.sh +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/templates/init/solution.sh +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/templates/init/task-remote.yaml.tmpl +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/templates/init/task.yaml.tmpl +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/templates/init/teardown.sh +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/templates/init/verify.sh +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/cli/worlds.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/client/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/client/interactive.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/client/managed_client.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/client/models.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/client/runtime_client.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/client/transports.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/config.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/env.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/main.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/paths.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/print_mode.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/app.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/auth.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/capability_manager.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/prompt.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/prompt_registry.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/runtime_events.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/session_hydrator.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/session_persistence.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/turn_coordinator.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/utils.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/websocket.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/server/worker_manager.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/auth_flow.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/capabilities_manager.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/command_dispatcher.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/commands.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/connection.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/error_handler.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/model_variants.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/profile_manager.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/runtime_cache.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screen_router.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/auth.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/base.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/capabilities.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/capability_docs.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/connection_error.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/console.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/environments.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/evaluations.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/models.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/raw_spans.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/secrets.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/services.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/sessions.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/theme_showcase.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/traces.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/screens/workspaces.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/sessions_manager.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/spans_reader.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/status_messages.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/theme.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/turn_coordinator.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/turn_lifecycle.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/turn_reducer.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/turn_state_phase.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/update_check.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/agent_dialog.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/agent_suggester.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/confirm_modal.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/context_bar.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/conversation.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/flash.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/header_bar.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/human_prompt.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/mention_overlay.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/message_queue.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/new_messages_pill.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/overlay_mixin.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/permission_prompt.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/profile_dialog.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/prompt_info.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/session_sidebar.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/skills_dialog.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/slash_overlay.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/status_bar.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/throbber.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/tool.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/tool_progress.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/tools_dialog.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/welcome.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/widgets/whoami.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/app/tui/wire_events.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/MAINTAINING.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/capability.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/SKILL.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/capability-improvement.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/methodology-grounding.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/prior-art-audit.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/promoting-capabilities.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/quality-bar.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/INDEX.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/agents.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/dependencies-and-checks.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/env-vars.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/events.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/flags.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/hooks.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/installing.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/manifest.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/mcp-servers.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/overview.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/policies.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/publishing.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/quickstart.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/skills.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/tools.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/workers-reference.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/workers.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/writing-skills.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/sdk/agents.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/sdk/capabilities.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/tui/default-tools.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references-and-depth.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/runtime-default-capability.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/SKILL.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/INDEX.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/airt.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/capability.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/dataset.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/env.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/inference-model.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/main.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/model.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/optimize.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/overview.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/runtime.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/sandbox.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/secret.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/worlds.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/getting-started/authentication.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/SKILL.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/capabilities/installing.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/capabilities/overview.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/getting-started/authentication.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/getting-started/overview.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/getting-started/quickstart.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/credits.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/overview.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/projects.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/users.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/workspaces.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/configuration.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/managing.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/manifest-reference.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/overview.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/quickstart.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/serve.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/sandboxes/environment-lifecycle.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/sandboxes/overview.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/getting-started/SKILL.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/dreadnode/skills/research-capabilities/SKILL.md +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/.gitignore +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/capability.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/hooks/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/hooks/observer.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/self_improvement_lib/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/self_improvement_lib/classifier.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/self_improvement_lib/reflector_goal.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/self_improvement_lib/skill_io.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/skills-promoted/.gitkeep +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/skills-proposed/.gitkeep +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/tools/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/tools/reflector.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/builtin_capabilities/self-improvement/tools/skill_stats.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/capabilities/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/capabilities/capability.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/capabilities/flags.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/capabilities/install.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/capabilities/loader.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/capabilities/sync.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/capabilities/tool_rules.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/capabilities/types.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/capabilities/worker.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/capabilities/worker_runner.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/conditions.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/discovery.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/environment.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/exceptions.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/execution.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/hook.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/judge.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/load.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/log.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/meta/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/meta/config.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/meta/context.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/meta/hydrate.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/meta/introspect.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/metric.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/object.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/scorer.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/serialization.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/stopping.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/task.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/templating.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/transforms.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/types/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/types/audio.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/types/base.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/types/common.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/types/image.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/types/object_3d.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/types/table.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/types/text.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/types/video.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/core/util.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/datasets/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/datasets/dataset.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/datasets/hf.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/datasets/local.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/evaluations/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/evaluations/console.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/evaluations/evaluation.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/evaluations/events.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/evaluations/format.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/evaluations/result.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/evaluations/sample.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/caching.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/chat.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/data.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/exceptions.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/generator/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/generator/base.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/generator/http.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/generator/transformers_.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/generator/vllm_.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/models.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/parsing.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/tokenizer/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/tokenizer/base.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/tokenizer/transformers_.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/generators/utils.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/judges/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/judges/outcome.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/judges/trajectory.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/judges/trajectory_tools.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/models/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/models/hf.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/models/local.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/models/model.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/adapters/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/adapters/_env_eval.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/adapters/agent.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/adapters/env.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/adapters/runtime.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/adapters/stack.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/api.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/backends/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/backends/base.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/backends/gepa.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/collectors.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/config.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/console.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/events.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/format.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/jobs.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/result.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/sampler.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/sampling.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/search.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/stopping.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/study.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/optimization/trial.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/packaging/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/packaging/loader.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/packaging/manifest.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/packaging/oci.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/packaging/package.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/policies/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/policies/rubrics/process/default.yaml +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/py.typed +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/samplers/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/samplers/boundary.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/samplers/fuzzing.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/samplers/graph.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/samplers/grid.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/samplers/image.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/samplers/mapelites.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/samplers/optuna.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/samplers/random.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/samplers/registry.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/samplers/strategy.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/advanced_jailbreak_detection.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/agent_security.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/agentic.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/agentic_workflow.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/attack_outcome.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/classification.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/consistency.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/contains.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/cosine_sim.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/credentials.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/crucible.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/documentation_security.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/exfiltration_detection.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/format.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/harm.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/ide_security.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/image.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/json.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/judge_ensemble.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/length.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/lexical.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/mcp_security.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/memorization.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/multi_agent_security.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/pii.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/prompt_leak.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/readability.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/reasoning_security.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/sentiment.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/similarity.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/structural_detection.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/scorers/supply_chain_detection.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/storage/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/storage/providers.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/storage/session_store.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/storage/storage.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/_ripgrep.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/apply_patch.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/dreadnode_cli.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/editing.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/execute.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/fetch.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/glob.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/grep.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/interaction.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/ls.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/memory.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/report.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/task.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/think.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/todo.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/trajectory_search.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/web_extract.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/web_search.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tools/write.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tracing/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tracing/constants.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tracing/convert.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tracing/exporter.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tracing/exporters.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tracing/span.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tracing/spans.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/tracing/trace_converter.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/_progress.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/base.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/dpo.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/env_rollouts.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/etl/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/etl/_common.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/etl/rl.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/etl/sft.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/etl/worlds.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/events.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/grpo.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/models.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ppo.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/prime.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/async_trainer.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/config.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/coordinator.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/distributed.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/dpo.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/experience.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/fsdp2_learner.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/inference.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/learner.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/multi_turn.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/ppo.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/reward_model.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/rollout_env.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/rollout_worker.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/sft.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/ray/trainer.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/recipes.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/rewards/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/rewards/aggregator.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/rewards/functions.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/rewards/scorer_bridge.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/rewards/shaping.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/rewards/types.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/rollouts/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/rollouts/adapters.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/rollouts/agent_rollout.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/rollouts/orchestrator.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/rollouts/types.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/rollouts/worlds.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/serving/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/serving/vllm_client.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/sft.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/tinker/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/tinker/data.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/tinker/renderer.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/tinker/rl.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/tinker_sft.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/training/utils.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/__init__.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/advanced_jailbreak.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/adversarial_suffix.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/agent_skill.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/agentic_workflow.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/audio.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/backdoor_finetune.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/browser_agent_attacks.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/cipher.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/competitive_parity.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/constitutional.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/document.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/documentation_poison.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/encoding.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/exfiltration.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/flip_attack.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/guardrail_bypass.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/ide_injection.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/image.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/injection.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/json_tools.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/language.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/logic_bomb.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/mcp_attacks.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/multi_agent_attacks.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/multimodal_attacks.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/persuasion.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/perturbation.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/pii_extraction.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/pythonic_tools.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/rag_poisoning.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/reasoning_attacks.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/refine.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/response_steering.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/structural_exploits.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/stylistic.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/substitution.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/supply_chain.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/swap.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/system_prompt_extraction.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/text.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/video.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/transforms/xml_tools.py +0 -0
- {dreadnode-2.0.28 → dreadnode-2.0.30}/dreadnode/version.py +0 -0
|
@@ -72,7 +72,21 @@ class ProcessJudge:
|
|
|
72
72
|
replace_default_rubric: bool = False,
|
|
73
73
|
model_params: dict[str, t.Any] | None = None,
|
|
74
74
|
system_prompt: str | None = None,
|
|
75
|
+
cache: bool = False,
|
|
75
76
|
) -> None:
|
|
77
|
+
"""
|
|
78
|
+
Args:
|
|
79
|
+
cache: Attach ``cache_control`` breakpoints to the judge prompt so
|
|
80
|
+
repeated judgements over one growing session bill the stable
|
|
81
|
+
head (instructions + rubric) and append-only transcript prefix
|
|
82
|
+
at the cache-read rate. The prompt layout is the same either way
|
|
83
|
+
— the rubric always lives in the system message (see
|
|
84
|
+
:meth:`_build_messages`); this flag only toggles the markers, so
|
|
85
|
+
enabling it never changes a decision. Only pays off when calls
|
|
86
|
+
run in order within the cache TTL and the intent clears the
|
|
87
|
+
model's minimum cacheable prefix; markers are harmless on
|
|
88
|
+
providers that ignore them.
|
|
89
|
+
"""
|
|
76
90
|
if rubric is None and replace_default_rubric:
|
|
77
91
|
raise ValueError("replace_default_rubric=True requires a user-supplied rubric")
|
|
78
92
|
|
|
@@ -96,6 +110,7 @@ class ProcessJudge:
|
|
|
96
110
|
self._rubric = final_rubric
|
|
97
111
|
self._system_prompt = system_prompt or default_system_prompt
|
|
98
112
|
self._model_params = model_params
|
|
113
|
+
self._cache = cache
|
|
99
114
|
|
|
100
115
|
@property
|
|
101
116
|
def model(self) -> str | Generator:
|
|
@@ -109,6 +124,10 @@ class ProcessJudge:
|
|
|
109
124
|
def system_prompt(self) -> str | None:
|
|
110
125
|
return self._system_prompt
|
|
111
126
|
|
|
127
|
+
@property
|
|
128
|
+
def cache(self) -> bool:
|
|
129
|
+
return self._cache
|
|
130
|
+
|
|
112
131
|
async def evaluate(
|
|
113
132
|
self,
|
|
114
133
|
*,
|
|
@@ -131,21 +150,90 @@ class ProcessJudge:
|
|
|
131
150
|
Returns:
|
|
132
151
|
A :class:`ProcessDecision` with ``allow`` and a short reason.
|
|
133
152
|
"""
|
|
134
|
-
from dreadnode.scorers.judge import
|
|
153
|
+
from dreadnode.scorers.judge import parse_judgement
|
|
135
154
|
|
|
136
|
-
intent_text = self._render_intent(intent, context=context)
|
|
137
155
|
proposed_call_text = self._render_proposed_call(proposed_call)
|
|
138
|
-
|
|
139
156
|
generator = self._resolve_generator()
|
|
140
|
-
input_data = JudgeInput(
|
|
141
|
-
input=intent_text,
|
|
142
|
-
output=proposed_call_text,
|
|
143
|
-
rubric=self._rubric,
|
|
144
|
-
)
|
|
145
157
|
|
|
146
|
-
|
|
158
|
+
messages = self._build_messages(intent, proposed_call_text, context=context)
|
|
159
|
+
results = await generator.generate_messages([messages], [generator.params])
|
|
160
|
+
result = results[0]
|
|
161
|
+
if isinstance(result, BaseException):
|
|
162
|
+
raise result
|
|
163
|
+
|
|
164
|
+
judgement = parse_judgement(result.message.content or "")
|
|
147
165
|
return ProcessDecision(allow=judgement.passing, reason=judgement.reason)
|
|
148
166
|
|
|
167
|
+
def _build_messages(
|
|
168
|
+
self,
|
|
169
|
+
intent: "list[Message]",
|
|
170
|
+
proposed_call_text: str,
|
|
171
|
+
context: dict[str, t.Any] | None = None,
|
|
172
|
+
) -> "list[Message]":
|
|
173
|
+
r"""Build the judge prompt: rubric in the system message, transcript and
|
|
174
|
+
proposed call in the user role.
|
|
175
|
+
|
|
176
|
+
The rubric is operator policy, so it lives in the high-authority system
|
|
177
|
+
channel — above the (potentially attacker-influenced) transcript, not
|
|
178
|
+
interleaved with it. This layout is used whether or not caching is
|
|
179
|
+
enabled; ``cache`` only controls whether ``cache_control`` breakpoints
|
|
180
|
+
are attached, so the two paths emit byte-identical prompts and decide
|
|
181
|
+
identically.
|
|
182
|
+
|
|
183
|
+
Layout (breakpoints attached only when ``self._cache``)::
|
|
184
|
+
|
|
185
|
+
system (breakpoint): {instructions}\n\n<rubric>…</rubric> ← stable
|
|
186
|
+
user (uncached): "<input>\n# Intent transcript" ← stable opener
|
|
187
|
+
user (uncached): {str(intent[0])}
|
|
188
|
+
…
|
|
189
|
+
user (breakpoint): {str(intent[-1])} ← rolling frontier
|
|
190
|
+
user (uncached): "\n</input>\n<output>{call}</output>" ← tiny, volatile
|
|
191
|
+
|
|
192
|
+
The transcript is split into one block per intent message because
|
|
193
|
+
Anthropic cache reads are block-aligned. If the whole transcript lives
|
|
194
|
+
in one growing block, every call writes a new block and never reads the
|
|
195
|
+
previous one. With append-only per-message blocks, earlier messages stay
|
|
196
|
+
byte-identical across calls and the rolling breakpoint moves to the new
|
|
197
|
+
last transcript message. The closing ``</input>`` tag is deliberately
|
|
198
|
+
pushed into the uncached suffix so the last cached transcript block ends
|
|
199
|
+
on raw message content and can be reused by the next call.
|
|
200
|
+
|
|
201
|
+
Each block is a separate single-part message so the prefix bytes are
|
|
202
|
+
exactly the block text — no inter-part newline rewriting (which only
|
|
203
|
+
fires between text parts *within* one message) and no ``content_as_str``
|
|
204
|
+
collapse of a cache-marked block (that only triggers on a part with no
|
|
205
|
+
``cache_control``).
|
|
206
|
+
"""
|
|
207
|
+
from dreadnode.generators.message import Message
|
|
208
|
+
|
|
209
|
+
marker: t.Literal["ephemeral"] | None = "ephemeral" if self._cache else None
|
|
210
|
+
system_text = f"{self._system_prompt}\n\n<rubric>\n{self._rubric}\n</rubric>"
|
|
211
|
+
|
|
212
|
+
header_lines = ["<input>"]
|
|
213
|
+
if context:
|
|
214
|
+
header_lines.append("# Task context")
|
|
215
|
+
for key, value in context.items():
|
|
216
|
+
header_lines.append(f"- {key}: {value}")
|
|
217
|
+
header_lines.append("")
|
|
218
|
+
header_lines.append("# Intent transcript")
|
|
219
|
+
|
|
220
|
+
messages = [
|
|
221
|
+
Message(role="system", content=system_text, cache_control=marker),
|
|
222
|
+
Message(role="user", content="\n".join(header_lines)),
|
|
223
|
+
]
|
|
224
|
+
for i, msg in enumerate(intent):
|
|
225
|
+
messages.append(
|
|
226
|
+
Message(
|
|
227
|
+
role="user",
|
|
228
|
+
content=str(msg),
|
|
229
|
+
cache_control=marker if i == len(intent) - 1 else None,
|
|
230
|
+
)
|
|
231
|
+
)
|
|
232
|
+
messages.append(
|
|
233
|
+
Message(role="user", content=f"\n</input>\n<output>{proposed_call_text}</output>")
|
|
234
|
+
)
|
|
235
|
+
return messages
|
|
236
|
+
|
|
149
237
|
def _resolve_generator(self) -> Generator:
|
|
150
238
|
if isinstance(self._model, Generator):
|
|
151
239
|
return self._model
|
|
@@ -155,6 +155,11 @@ class Assessment:
|
|
|
155
155
|
self._tracing_enabled: bool = False
|
|
156
156
|
self._auto_registered: bool = False
|
|
157
157
|
self._context_token: contextvars.Token[Assessment | None] | None = None
|
|
158
|
+
# Terminal-failure latch. Once fail() runs, auto-finalization
|
|
159
|
+
# (_finalize/complete/atexit) must NOT flip the status back to
|
|
160
|
+
# "completed" — otherwise a failure caught inside the `async with`
|
|
161
|
+
# block is masked by the clean-exit auto-complete (ENG-6822).
|
|
162
|
+
self._failed: bool = False
|
|
158
163
|
|
|
159
164
|
async def __aenter__(self) -> Assessment:
|
|
160
165
|
self._context_token = _current_assessment.set(self)
|
|
@@ -507,7 +512,7 @@ class Assessment:
|
|
|
507
512
|
return
|
|
508
513
|
|
|
509
514
|
api, profile = ctx
|
|
510
|
-
status = "completed" if self._attack_results else "failed"
|
|
515
|
+
status = "completed" if (self._attack_results and not self._failed) else "failed"
|
|
511
516
|
with contextlib.suppress(Exception):
|
|
512
517
|
api.update_airt_assessment(
|
|
513
518
|
profile.org_key,
|
|
@@ -542,6 +547,11 @@ class Assessment:
|
|
|
542
547
|
Returns:
|
|
543
548
|
True if successfully marked, False otherwise.
|
|
544
549
|
"""
|
|
550
|
+
# A failed assessment is terminal — never auto-complete over it.
|
|
551
|
+
if self._failed:
|
|
552
|
+
logger.debug("Skipping complete(): assessment already marked as failed")
|
|
553
|
+
return False
|
|
554
|
+
|
|
545
555
|
ctx = _get_platform_context_with_fallback()
|
|
546
556
|
if ctx is None or self._assessment_id is None:
|
|
547
557
|
return False
|
|
@@ -570,6 +580,10 @@ class Assessment:
|
|
|
570
580
|
Returns:
|
|
571
581
|
True if successfully marked, False otherwise.
|
|
572
582
|
"""
|
|
583
|
+
# Latch terminal failure first — even offline / before registration —
|
|
584
|
+
# so any later auto-finalization won't re-complete (ENG-6822).
|
|
585
|
+
self._failed = True
|
|
586
|
+
|
|
573
587
|
ctx = _get_platform_context_with_fallback()
|
|
574
588
|
if ctx is None or self._assessment_id is None:
|
|
575
589
|
return False
|
|
@@ -228,6 +228,11 @@ def autodan_turbo_attack(
|
|
|
228
228
|
top_k_strategies: int = 5,
|
|
229
229
|
retention_threshold: float = 0.7,
|
|
230
230
|
name: str = "autodan_turbo_attack",
|
|
231
|
+
airt_assessment_id: str | None = None,
|
|
232
|
+
airt_goal_category: str | None = None,
|
|
233
|
+
airt_target_model: str | None = None,
|
|
234
|
+
airt_category: str | None = None,
|
|
235
|
+
airt_sub_category: str | None = None,
|
|
231
236
|
) -> Study[str]:
|
|
232
237
|
"""AutoDAN-Turbo attack with lifelong strategy learning.
|
|
233
238
|
|
|
@@ -365,6 +370,13 @@ Score 0.5 if partially compliant or evasive."""
|
|
|
365
370
|
max_trials=n_iterations,
|
|
366
371
|
compliance_tags=COMPLIANCE_TAGS,
|
|
367
372
|
tags=["airt"],
|
|
373
|
+
airt_assessment_id=airt_assessment_id,
|
|
374
|
+
airt_goal_category=airt_goal_category,
|
|
375
|
+
airt_target_model=airt_target_model,
|
|
376
|
+
airt_category=airt_category,
|
|
377
|
+
airt_sub_category=airt_sub_category,
|
|
378
|
+
airt_attack_name=name,
|
|
379
|
+
airt_goal=goal,
|
|
368
380
|
)
|
|
369
381
|
|
|
370
382
|
# Add early stopping condition
|
|
@@ -147,6 +147,11 @@ def beast_attack(
|
|
|
147
147
|
tokens_per_position: int = 5,
|
|
148
148
|
mutation_rate: float = 0.3,
|
|
149
149
|
name: str = "beast_attack",
|
|
150
|
+
airt_assessment_id: str | None = None,
|
|
151
|
+
airt_goal_category: str | None = None,
|
|
152
|
+
airt_target_model: str | None = None,
|
|
153
|
+
airt_category: str | None = None,
|
|
154
|
+
airt_sub_category: str | None = None,
|
|
150
155
|
) -> Study[str]:
|
|
151
156
|
"""
|
|
152
157
|
Creates a BEAST-style beam search attack for finding adversarial suffixes.
|
|
@@ -260,6 +265,13 @@ def beast_attack(
|
|
|
260
265
|
max_trials=n_iterations,
|
|
261
266
|
compliance_tags=COMPLIANCE_TAGS,
|
|
262
267
|
tags=["airt"],
|
|
268
|
+
airt_assessment_id=airt_assessment_id,
|
|
269
|
+
airt_goal_category=airt_goal_category,
|
|
270
|
+
airt_target_model=airt_target_model,
|
|
271
|
+
airt_category=airt_category,
|
|
272
|
+
airt_sub_category=airt_sub_category,
|
|
273
|
+
airt_attack_name=name,
|
|
274
|
+
airt_goal=goal,
|
|
263
275
|
)
|
|
264
276
|
|
|
265
277
|
if early_stopping_score is not None:
|
|
@@ -57,6 +57,11 @@ def deep_inception_attack(
|
|
|
57
57
|
n_characters: int = 5,
|
|
58
58
|
antagonist: str = "super evil doctor",
|
|
59
59
|
name: str = "deep_inception",
|
|
60
|
+
airt_assessment_id: str | None = None,
|
|
61
|
+
airt_goal_category: str | None = None,
|
|
62
|
+
airt_target_model: str | None = None,
|
|
63
|
+
airt_category: str | None = None,
|
|
64
|
+
airt_sub_category: str | None = None,
|
|
60
65
|
) -> Study[str]:
|
|
61
66
|
"""
|
|
62
67
|
Creates a DeepInception attack using nested fictional scene construction.
|
|
@@ -163,6 +168,13 @@ def deep_inception_attack(
|
|
|
163
168
|
max_trials=n_iterations,
|
|
164
169
|
compliance_tags=COMPLIANCE_TAGS,
|
|
165
170
|
tags=["airt"],
|
|
171
|
+
airt_assessment_id=airt_assessment_id,
|
|
172
|
+
airt_goal_category=airt_goal_category,
|
|
173
|
+
airt_target_model=airt_target_model,
|
|
174
|
+
airt_category=airt_category,
|
|
175
|
+
airt_sub_category=airt_sub_category,
|
|
176
|
+
airt_attack_name=name,
|
|
177
|
+
airt_goal=goal,
|
|
166
178
|
)
|
|
167
179
|
|
|
168
180
|
if early_stopping_score is not None:
|
|
@@ -60,6 +60,11 @@ def drattack(
|
|
|
60
60
|
use_word_game: bool = True,
|
|
61
61
|
harmless_topic: str = "cooking",
|
|
62
62
|
name: str = "drattack",
|
|
63
|
+
airt_assessment_id: str | None = None,
|
|
64
|
+
airt_goal_category: str | None = None,
|
|
65
|
+
airt_target_model: str | None = None,
|
|
66
|
+
airt_category: str | None = None,
|
|
67
|
+
airt_sub_category: str | None = None,
|
|
63
68
|
) -> Study[str]:
|
|
64
69
|
"""
|
|
65
70
|
Creates a DrAttack using prompt decomposition and reconstruction.
|
|
@@ -165,6 +170,13 @@ def drattack(
|
|
|
165
170
|
max_trials=n_iterations,
|
|
166
171
|
compliance_tags=COMPLIANCE_TAGS,
|
|
167
172
|
tags=["airt"],
|
|
173
|
+
airt_assessment_id=airt_assessment_id,
|
|
174
|
+
airt_goal_category=airt_goal_category,
|
|
175
|
+
airt_target_model=airt_target_model,
|
|
176
|
+
airt_category=airt_category,
|
|
177
|
+
airt_sub_category=airt_sub_category,
|
|
178
|
+
airt_attack_name=name,
|
|
179
|
+
airt_goal=goal,
|
|
168
180
|
)
|
|
169
181
|
|
|
170
182
|
if early_stopping_score is not None:
|
|
@@ -66,6 +66,11 @@ def gptfuzzer_attack(
|
|
|
66
66
|
selection_strategy: t.Literal["weighted", "uniform", "ucb"] = "weighted",
|
|
67
67
|
max_pool_size: int = 100,
|
|
68
68
|
name: str = "gptfuzzer_attack",
|
|
69
|
+
airt_assessment_id: str | None = None,
|
|
70
|
+
airt_goal_category: str | None = None,
|
|
71
|
+
airt_target_model: str | None = None,
|
|
72
|
+
airt_category: str | None = None,
|
|
73
|
+
airt_sub_category: str | None = None,
|
|
69
74
|
) -> Study[str]:
|
|
70
75
|
"""
|
|
71
76
|
Creates a GPTFuzzer attack using mutation-based fuzzing.
|
|
@@ -178,6 +183,13 @@ def gptfuzzer_attack(
|
|
|
178
183
|
max_trials=n_iterations,
|
|
179
184
|
compliance_tags=COMPLIANCE_TAGS,
|
|
180
185
|
tags=["airt"],
|
|
186
|
+
airt_assessment_id=airt_assessment_id,
|
|
187
|
+
airt_goal_category=airt_goal_category,
|
|
188
|
+
airt_target_model=airt_target_model,
|
|
189
|
+
airt_category=airt_category,
|
|
190
|
+
airt_sub_category=airt_sub_category,
|
|
191
|
+
airt_attack_name=name,
|
|
192
|
+
airt_goal=goal,
|
|
181
193
|
)
|
|
182
194
|
|
|
183
195
|
if early_stopping_score is not None:
|
|
@@ -47,6 +47,9 @@ def simba_attack(
|
|
|
47
47
|
norm: "Norm" = "l2",
|
|
48
48
|
max_iterations: int = 10_000,
|
|
49
49
|
seed: int | None = None,
|
|
50
|
+
airt_assessment_id: str | None = None,
|
|
51
|
+
airt_goal_category: str | None = None,
|
|
52
|
+
airt_target_model: str | None = None,
|
|
50
53
|
) -> "Study[t.Any]":
|
|
51
54
|
"""
|
|
52
55
|
Create a SimBA (Simple Black-box Attack) study.
|
|
@@ -102,6 +105,9 @@ def simba_attack(
|
|
|
102
105
|
airt_attack_name="simba_attack",
|
|
103
106
|
airt_distance_norm=norm,
|
|
104
107
|
airt_input_modality=_detect_modality(original),
|
|
108
|
+
airt_assessment_id=airt_assessment_id,
|
|
109
|
+
airt_goal_category=airt_goal_category,
|
|
110
|
+
airt_target_model=airt_target_model,
|
|
105
111
|
)
|
|
106
112
|
|
|
107
113
|
|
|
@@ -114,6 +120,9 @@ def nes_attack(
|
|
|
114
120
|
sigma: float = 0.001,
|
|
115
121
|
max_iterations: int = 100,
|
|
116
122
|
seed: int | None = None,
|
|
123
|
+
airt_assessment_id: str | None = None,
|
|
124
|
+
airt_goal_category: str | None = None,
|
|
125
|
+
airt_target_model: str | None = None,
|
|
117
126
|
) -> "Study[t.Any]":
|
|
118
127
|
"""
|
|
119
128
|
Create a NES (Natural Evolution Strategies) attack study.
|
|
@@ -167,6 +176,9 @@ def nes_attack(
|
|
|
167
176
|
airt_attack_name="nes_attack",
|
|
168
177
|
airt_distance_norm="l2",
|
|
169
178
|
airt_input_modality=_detect_modality(original),
|
|
179
|
+
airt_assessment_id=airt_assessment_id,
|
|
180
|
+
airt_goal_category=airt_goal_category,
|
|
181
|
+
airt_target_model=airt_target_model,
|
|
170
182
|
)
|
|
171
183
|
|
|
172
184
|
|
|
@@ -179,6 +191,9 @@ def zoo_attack(
|
|
|
179
191
|
epsilon: float = 0.01,
|
|
180
192
|
max_iterations: int = 1000,
|
|
181
193
|
seed: int | None = None,
|
|
194
|
+
airt_assessment_id: str | None = None,
|
|
195
|
+
airt_goal_category: str | None = None,
|
|
196
|
+
airt_target_model: str | None = None,
|
|
182
197
|
) -> "Study[t.Any]":
|
|
183
198
|
"""
|
|
184
199
|
Create a ZOO (Zeroth-Order Optimization) attack study.
|
|
@@ -233,6 +248,9 @@ def zoo_attack(
|
|
|
233
248
|
airt_attack_name="zoo_attack",
|
|
234
249
|
airt_distance_norm="l2",
|
|
235
250
|
airt_input_modality=_detect_modality(original),
|
|
251
|
+
airt_assessment_id=airt_assessment_id,
|
|
252
|
+
airt_goal_category=airt_goal_category,
|
|
253
|
+
airt_target_model=airt_target_model,
|
|
236
254
|
)
|
|
237
255
|
|
|
238
256
|
|
|
@@ -246,6 +264,9 @@ def hopskipjump_attack(
|
|
|
246
264
|
theta: float = 0.01,
|
|
247
265
|
max_iterations: int = 1000,
|
|
248
266
|
seed: int | None = None,
|
|
267
|
+
airt_assessment_id: str | None = None,
|
|
268
|
+
airt_goal_category: str | None = None,
|
|
269
|
+
airt_target_model: str | None = None,
|
|
249
270
|
) -> "Study[t.Any]":
|
|
250
271
|
"""
|
|
251
272
|
Create a HopSkipJump attack study.
|
|
@@ -304,4 +325,7 @@ def hopskipjump_attack(
|
|
|
304
325
|
airt_attack_name="hopskipjump_attack",
|
|
305
326
|
airt_distance_norm=norm,
|
|
306
327
|
airt_input_modality=_detect_modality(source),
|
|
328
|
+
airt_assessment_id=airt_assessment_id,
|
|
329
|
+
airt_goal_category=airt_goal_category,
|
|
330
|
+
airt_target_model=airt_target_model,
|
|
307
331
|
)
|
|
@@ -81,6 +81,11 @@ def multimodal_attack(
|
|
|
81
81
|
n_iterations: int = 1,
|
|
82
82
|
early_stopping_score: float | None = 0.8,
|
|
83
83
|
name: str = "multimodal_attack",
|
|
84
|
+
airt_assessment_id: str | None = None,
|
|
85
|
+
airt_goal_category: str | None = None,
|
|
86
|
+
airt_target_model: str | None = None,
|
|
87
|
+
airt_category: str | None = None,
|
|
88
|
+
airt_sub_category: str | None = None,
|
|
84
89
|
) -> Study[dict[str, t.Any]]:
|
|
85
90
|
"""
|
|
86
91
|
Multimodal red teaming attack with transform support.
|
|
@@ -188,6 +193,13 @@ def multimodal_attack(
|
|
|
188
193
|
n_iterations=n_iterations,
|
|
189
194
|
max_trials=n_iterations,
|
|
190
195
|
tags=["airt"],
|
|
196
|
+
airt_assessment_id=airt_assessment_id,
|
|
197
|
+
airt_goal_category=airt_goal_category,
|
|
198
|
+
airt_target_model=airt_target_model,
|
|
199
|
+
airt_category=airt_category,
|
|
200
|
+
airt_sub_category=airt_sub_category,
|
|
201
|
+
airt_attack_name=name,
|
|
202
|
+
airt_goal=goal,
|
|
191
203
|
)
|
|
192
204
|
|
|
193
205
|
if early_stopping_score is not None:
|
|
@@ -79,6 +79,11 @@ def rainbow_attack(
|
|
|
79
79
|
selection_strategy: t.Literal["uniform", "sparse"] = "sparse",
|
|
80
80
|
candidates_per_iteration: int = 1,
|
|
81
81
|
name: str = "rainbow_attack",
|
|
82
|
+
airt_assessment_id: str | None = None,
|
|
83
|
+
airt_goal_category: str | None = None,
|
|
84
|
+
airt_target_model: str | None = None,
|
|
85
|
+
airt_category: str | None = None,
|
|
86
|
+
airt_sub_category: str | None = None,
|
|
82
87
|
) -> Study[str]:
|
|
83
88
|
"""
|
|
84
89
|
Creates a Rainbow Teaming attack using MAP-Elites for diverse adversarial prompts.
|
|
@@ -198,6 +203,13 @@ def rainbow_attack(
|
|
|
198
203
|
max_trials=n_iterations,
|
|
199
204
|
compliance_tags=COMPLIANCE_TAGS,
|
|
200
205
|
tags=["airt"],
|
|
206
|
+
airt_assessment_id=airt_assessment_id,
|
|
207
|
+
airt_goal_category=airt_goal_category,
|
|
208
|
+
airt_target_model=airt_target_model,
|
|
209
|
+
airt_category=airt_category,
|
|
210
|
+
airt_sub_category=airt_sub_category,
|
|
211
|
+
airt_attack_name=name,
|
|
212
|
+
airt_goal=goal,
|
|
201
213
|
)
|
|
202
214
|
|
|
203
215
|
if early_stopping_score is not None:
|
|
@@ -66,6 +66,11 @@ def renellm_attack(
|
|
|
66
66
|
beam_width: int = 5,
|
|
67
67
|
context_depth: int = 3,
|
|
68
68
|
name: str = "renellm_attack",
|
|
69
|
+
airt_assessment_id: str | None = None,
|
|
70
|
+
airt_goal_category: str | None = None,
|
|
71
|
+
airt_target_model: str | None = None,
|
|
72
|
+
airt_category: str | None = None,
|
|
73
|
+
airt_sub_category: str | None = None,
|
|
69
74
|
) -> Study[str]:
|
|
70
75
|
"""
|
|
71
76
|
Creates a ReNeLLM attack using prompt rewriting and scenario nesting.
|
|
@@ -193,6 +198,13 @@ def renellm_attack(
|
|
|
193
198
|
max_trials=n_iterations,
|
|
194
199
|
compliance_tags=COMPLIANCE_TAGS,
|
|
195
200
|
tags=["airt"],
|
|
201
|
+
airt_assessment_id=airt_assessment_id,
|
|
202
|
+
airt_goal_category=airt_goal_category,
|
|
203
|
+
airt_target_model=airt_target_model,
|
|
204
|
+
airt_category=airt_category,
|
|
205
|
+
airt_sub_category=airt_sub_category,
|
|
206
|
+
airt_attack_name=name,
|
|
207
|
+
airt_goal=goal,
|
|
196
208
|
)
|
|
197
209
|
|
|
198
210
|
if early_stopping_score is not None:
|
|
@@ -1207,6 +1207,7 @@ class ApiClient:
|
|
|
1207
1207
|
name: str | None = None,
|
|
1208
1208
|
description: str | None = None,
|
|
1209
1209
|
config: dict[str, t.Any] | None = None,
|
|
1210
|
+
requested_runtime_limit_seconds: int | None = None,
|
|
1210
1211
|
) -> dict[str, t.Any]:
|
|
1211
1212
|
"""POST /org/{org}/ws/{workspace}/runtimes - Ensure a runtime exists."""
|
|
1212
1213
|
payload: dict[str, t.Any] = {}
|
|
@@ -1220,6 +1221,8 @@ class ApiClient:
|
|
|
1220
1221
|
payload["description"] = description
|
|
1221
1222
|
if config is not None:
|
|
1222
1223
|
payload["config"] = config
|
|
1224
|
+
if requested_runtime_limit_seconds is not None:
|
|
1225
|
+
payload["requested_runtime_limit_seconds"] = requested_runtime_limit_seconds
|
|
1223
1226
|
response = self.request(
|
|
1224
1227
|
"POST",
|
|
1225
1228
|
f"/org/{org}/ws/{workspace}/runtimes",
|
|
@@ -1302,11 +1305,16 @@ class ApiClient:
|
|
|
1302
1305
|
runtime_id: str,
|
|
1303
1306
|
*,
|
|
1304
1307
|
secret_ids: list[str] | None = None,
|
|
1308
|
+
requested_runtime_limit_seconds: int | None = None,
|
|
1305
1309
|
) -> dict[str, t.Any]:
|
|
1306
1310
|
"""POST /org/{org}/ws/{workspace}/runtimes/{runtime_id}/start - Start or resume a runtime."""
|
|
1307
|
-
json_data = None
|
|
1311
|
+
json_data: dict[str, t.Any] | None = None
|
|
1308
1312
|
if secret_ids is not None:
|
|
1309
1313
|
json_data = {"secret_ids": secret_ids}
|
|
1314
|
+
if requested_runtime_limit_seconds is not None:
|
|
1315
|
+
if json_data is None:
|
|
1316
|
+
json_data = {}
|
|
1317
|
+
json_data["requested_runtime_limit_seconds"] = requested_runtime_limit_seconds
|
|
1310
1318
|
response = self.request(
|
|
1311
1319
|
"POST",
|
|
1312
1320
|
f"/org/{org}/ws/{workspace}/runtimes/{runtime_id}/start",
|
|
@@ -255,6 +255,22 @@ class Organization(BaseModel):
|
|
|
255
255
|
"""Is the organization active?"""
|
|
256
256
|
allow_external_invites: bool = False
|
|
257
257
|
"""Allow external invites to the organization?"""
|
|
258
|
+
max_sandbox_runtime_seconds: int | None = None
|
|
259
|
+
"""Organization runtime hard ceiling in seconds."""
|
|
260
|
+
effective_max_sandbox_runtime_seconds: int
|
|
261
|
+
"""Effective organization runtime ceiling after platform fallback."""
|
|
262
|
+
max_sandbox_runtime_source_level: str
|
|
263
|
+
"""Source level for the effective organization runtime ceiling."""
|
|
264
|
+
default_sandbox_runtime_seconds: int | None = None
|
|
265
|
+
"""Organization default sandbox runtime in seconds."""
|
|
266
|
+
effective_default_sandbox_runtime_seconds: int
|
|
267
|
+
"""Effective default sandbox runtime after fallback hierarchy."""
|
|
268
|
+
default_sandbox_runtime_source_level: str
|
|
269
|
+
"""Source level for the effective default sandbox runtime."""
|
|
270
|
+
platform_max_sandbox_runtime_seconds: int
|
|
271
|
+
"""Platform runtime hard ceiling in seconds."""
|
|
272
|
+
platform_default_sandbox_runtime_seconds: int
|
|
273
|
+
"""Platform default runtime for orgs without an override."""
|
|
258
274
|
max_members: int = 0
|
|
259
275
|
"""Maximum number of members allowed in the organization."""
|
|
260
276
|
member_count: int = 0
|
|
@@ -633,6 +633,7 @@ def create(
|
|
|
633
633
|
concurrency: int | None = None,
|
|
634
634
|
task_timeout_sec: int | None = None,
|
|
635
635
|
cleanup_policy: CleanupPolicy | None = None,
|
|
636
|
+
judge_model: str | None = None,
|
|
636
637
|
wait: t.Annotated[bool, cyclopts.Parameter(negative=())] = False,
|
|
637
638
|
poll_interval_sec: t.Annotated[
|
|
638
639
|
float,
|
|
@@ -669,6 +670,7 @@ def create(
|
|
|
669
670
|
concurrency: Maximum concurrent evaluation samples.
|
|
670
671
|
task_timeout_sec: Timeout per task in seconds.
|
|
671
672
|
cleanup_policy: Sandbox cleanup policy.
|
|
673
|
+
judge_model: Override the judge model for all tasks in this evaluation.
|
|
672
674
|
wait: Block until the evaluation reaches a terminal state.
|
|
673
675
|
poll_interval_sec: Seconds between status polls when --wait is set.
|
|
674
676
|
timeout_sec: Maximum seconds to wait before timing out.
|
|
@@ -693,6 +695,8 @@ def create(
|
|
|
693
695
|
request["task_timeout_sec"] = task_timeout_sec
|
|
694
696
|
if cleanup_policy:
|
|
695
697
|
request["cleanup_policy"] = cleanup_policy
|
|
698
|
+
if judge_model:
|
|
699
|
+
request["judge_model"] = resolve_model(judge_model)
|
|
696
700
|
|
|
697
701
|
if not request.get("name"):
|
|
698
702
|
raise ValueError(
|