dreadnode 2.0.46__tar.gz → 2.0.47__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.46 → dreadnode-2.0.47}/PKG-INFO +2 -2
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/assessment.py +6 -17
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/api/models.py +3 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/airt.py +3 -1
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/args.py +1 -1
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/main.py +17 -3
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/runtime.py +89 -15
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/workflow.py +10 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/config.py +4 -0
- dreadnode-2.0.47/dreadnode/app/diagnostics.py +53 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/print_mode.py +4 -2
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/app.py +51 -14
- dreadnode-2.0.47/dreadnode/app/server/runtime_inspection.py +89 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/app.py +12 -4
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/bug_report.py +1 -44
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/tools.md +5 -1
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/workflows.md +18 -9
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/sdk/agents.md +2 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/airt.md +1 -1
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/workflow.md +1 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/getting-started/overview.md +1 -1
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/getting-started/quickstart.md +1 -1
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/credits.md +15 -1
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/organizations.md +9 -1
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/managing.md +3 -1
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/manifest-reference.md +1 -1
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/serve.md +10 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/sandboxes/isolation.md +11 -3
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/adapters/runtime.py +9 -3
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/packaging/egress.py +24 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/policies/__init__.py +14 -8
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/policies/guard.py +15 -6
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/workflows/host.py +24 -1
- {dreadnode-2.0.46 → dreadnode-2.0.47}/pyproject.toml +16 -3
- {dreadnode-2.0.46 → dreadnode-2.0.47}/.gitignore +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/LICENSE +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/README.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/__main__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/agent.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/engines/AGENTS.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/engines/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/engines/base.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/engines/claude_code.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/engines/native.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/events.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/exceptions.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/format.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/hooks.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/judge.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/mcp/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/mcp/auth.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/mcp/client.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/mcp/config.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/mcp/server.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/process_judge.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/reactions.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/sanitize.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/skills.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/stopping.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/subagent.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/tool_resolution.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/tools.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/agents/trajectory.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/_base.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/adversarial_reasoning.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/advpromptier.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/agent_suite.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/agentic_suite.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/alignment_faking.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/analogy_escalation.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/analytics/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/analytics/aggregator.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/analytics/classifier.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/analytics/compliance.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/analytics/engine.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/analytics/recommendations.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/analytics/types.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/approval_bypass.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/aprt_progressive.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/art_engine.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/atlas/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/atlas/defense.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/atlas/failure.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/atlas/gate.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/atlas/memory.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/atlas/modes.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/atlas/probes.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/atlas/recon.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/atlas/router.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/atlas/strategy.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/attention_shifting.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/authz.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/autodan_turbo.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/autoredteamer.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/beast.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/browser_probes.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/compliance/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/compliance/atlas.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/compliance/nist.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/compliance/owasp.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/compliance/owasp_agentic.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/compliance/saif.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/constants.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/cot_jailbreak.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/crescendo.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/assets/audio/adversarial_query.mp3 +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/assets/image/bomb.jpg +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/assets/image/meth.png +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/prompts/adversarial_benchmark_subset.csv +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/prompts/ai_safety.csv +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/rubrics/data_exfiltration.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/rubrics/goal_hijacking.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/rubrics/idor.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/rubrics/memory_poisoning.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/rubrics/privilege_escalation.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/rubrics/rce.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/rubrics/scope_creep.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/rubrics/tool_chaining.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/rubrics/tool_selection_safety.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/rubrics/unbounded_agency.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/rubrics/web_chatbot_security.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/templates/crescendo/variant_1.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/templates/crescendo/variant_2.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/templates/crescendo/variant_3.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/templates/crescendo/variant_4.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/data/templates/crescendo/variant_5.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/deep_inception.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/detect.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/drattack.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/echo_chamber.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/_base.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/_text_common.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/bae.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/boundary.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/deepwordbug.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/hopskipjump.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/pwws.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/simba.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/square.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/text.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/textbugger.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/textfooler.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/evasion/zoo.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/events.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/extraction/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/extraction/_base.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/extraction/activethief.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/extraction/copycat.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/extraction/distillation.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/extraction/equation_solving.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/extraction/jacobian.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/extraction/knockoff.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/genetic_persona.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/goat.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/goat_v2.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/gptfuzzer.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/honeytoken.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/humor_bypass.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/image.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/injection_channels.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/inversion/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/inversion/_base.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/inversion/confidence.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/inversion/nes_inversion.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/j2_meta.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/jbdistill.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/jbfuzz.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/lrm_autonomous.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/mapf.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/mcp_probes.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/membership/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/membership/_base.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/membership/entropy.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/membership/label_only.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/membership/lira.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/membership/loss.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/membership/shadow_model.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/membership/threshold.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/message_parts.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/model_export.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/multimodal.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/nexus.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/oast.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/pair.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/persona_hijack.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/policies.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/probe_planner.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/prompt.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/propagation.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/quantization_safety.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/rainbow.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/refusal_aware.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/renellm.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/reporting/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/reporting/json_report.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/reporting/llm_summary.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/reporting/markdown.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/resource_abuse.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/reward_hacking.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/salami_slicing.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/self_persuasion.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/siren.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/tap.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/target.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/targets/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/targets/auth.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/targets/factory.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/targets/http.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/targets/message.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/targets/prediction.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/targets/spec.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/targets/streaming/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/targets/streaming/nova_sonic.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/templatefuzz.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/tmap_trajectory.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/tool_attack.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/trojail.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/airt/watermark_removal.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/api/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/api/client.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/capability.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/dataset.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/environment.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/evaluation.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/inference_model.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/judge.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/model.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/optimize.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/sandbox.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/secret.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/session.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/shared.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/task.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/task_set.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/templates/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/templates/init/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/templates/init/challenge/Dockerfile +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/templates/init/docker-compose.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/templates/init/provision.sh +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/templates/init/solution.sh +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/templates/init/task-remote.yaml.tmpl +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/templates/init/task.yaml.tmpl +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/templates/init/teardown.sh +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/templates/init/verify.sh +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/train.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/cli/worlds.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/client/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/client/interactive.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/client/managed_client.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/client/models.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/client/runtime_client.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/client/transports.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/env.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/main.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/model_catalog.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/paths.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/auth.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/capability_manager.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/model_resolution.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/prompt.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/prompt_registry.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/runtime_credentials.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/runtime_events.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/session_hydrator.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/session_persistence.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/turn_coordinator.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/utils.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/websocket.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/worker_manager.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/workflow_manager.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/server/ws_auth.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/auth_flow.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/capabilities_manager.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/command_dispatcher.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/commands.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/connection.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/dreadnode.tcss +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/error_handler.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/model_manager.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/model_variants.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/profile_manager.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screen_router.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/auth.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/base.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/capabilities.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/capability_docs.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/connection_error.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/console.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/environments.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/evaluations.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/models.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/raw_spans.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/readme.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/report_bug.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/runtimes.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/sandboxes.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/secrets.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/services.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/sessions.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/theme_showcase.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/traces.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/screens/workspaces.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/sessions_manager.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/spans_reader.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/status_messages.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/theme.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/tool_format.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/turn_coordinator.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/turn_lifecycle.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/turn_reducer.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/turn_state_phase.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/update_check.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/agent_dialog.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/agent_suggester.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/composer.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/confirm_modal.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/context_bar.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/conversation.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/flash.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/help_panel.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/human_prompt.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/mention_overlay.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/message_queue.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/new_messages_pill.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/overlay_mixin.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/profile_dialog.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/rewind_picker.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/scope_modal.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/selection.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/skills_dialog.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/slash_overlay.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/status_bar.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/tool.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/tool_progress.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/tools_dialog.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/welcome.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/widgets/whoami.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/app/tui/wire_events.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/MAINTAINING.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/agents/dreadnode.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/capability.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/SKILL.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/assets/workflows/agent_review.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/assets/workflows/branch.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/assets/workflows/fanout.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/assets/workflows/fork.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/assets/workflows/linear.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/capability-improvement.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/methodology-grounding.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/prior-art-audit.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/promoting-capabilities.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/quality-bar.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/INDEX.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/agent-output.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/agents.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/custom-engines.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/dependencies-and-checks.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/engines.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/env-vars.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/events.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/flags.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/hooks.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/installing.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/manifest.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/mcp-servers.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/overview.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/policies.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/publishing.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/quickstart.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/skills.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/workers-reference.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/workers.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/capabilities/writing-skills.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/optimization/capability-improvement.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/sdk/capabilities.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references/tui/default-tools.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/references-and-depth.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/runtime-default-capability.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/creating-capabilities/workflows-authoring.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/SKILL.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/INDEX.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/capability.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/dataset.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/env.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/evaluation.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/inference-model.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/judge.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/main.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/model.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/optimize.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/overview.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/runtime.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/sandbox.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/secret.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/session.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/task-set.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/task.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/train.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/cli/worlds.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-cli/references/getting-started/authentication.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/SKILL.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/INDEX.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/capabilities/installing.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/capabilities/overview.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/getting-started/authentication.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/chat-models.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/overview.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/projects.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/secrets.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/settings.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/platform/workspaces.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/configuration.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/overview.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/runtimes/quickstart.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/sandboxes/environment-lifecycle.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/sandboxes/inspecting.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/sandboxes/overview.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/sandboxes/runtime-limits.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/tui/local-storage.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/dreadnode-concepts/references/tui/overview.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/getting-started/SKILL.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/dreadnode/skills/research-capabilities/SKILL.md +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/.gitignore +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/capability.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/hooks/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/hooks/observer.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/self_improvement_lib/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/self_improvement_lib/classifier.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/self_improvement_lib/reflector_goal.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/self_improvement_lib/skill_io.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/skills-promoted/.gitkeep +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/skills-proposed/.gitkeep +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/tools/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/tools/reflector.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/builtin_capabilities/self-improvement/tools/skill_stats.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/capabilities/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/capabilities/capability.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/capabilities/command_tools.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/capabilities/flags.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/capabilities/install.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/capabilities/loader.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/capabilities/sync.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/capabilities/tool_rules.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/capabilities/types.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/capabilities/worker.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/capabilities/worker_runner.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/conditions.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/discovery.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/environment.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/exceptions.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/execution.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/hook.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/judge.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/load.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/log.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/meta/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/meta/config.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/meta/context.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/meta/hydrate.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/meta/introspect.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/metric.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/object.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/scorer.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/serialization.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/startup_clock.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/stopping.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/task.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/templating.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/tls.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/transforms.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/types/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/types/audio.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/types/base.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/types/common.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/types/image.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/types/object_3d.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/types/table.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/types/text.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/types/video.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/core/util.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/datasets/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/datasets/dataset.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/datasets/hf.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/datasets/local.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/evaluations/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/evaluations/console.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/evaluations/evaluation.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/evaluations/events.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/evaluations/format.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/evaluations/result.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/evaluations/sample.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/caching.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/chat.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/data.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/exceptions.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/generator/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/generator/base.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/generator/http.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/generator/litellm_.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/generator/transformers_.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/generator/vllm_.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/message.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/models.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/parsing.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/proxy.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/tokenizer/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/tokenizer/base.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/tokenizer/transformers_.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/generators/utils.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/items/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/items/config.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/items/models.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/judges/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/judges/outcome.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/judges/trajectory.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/judges/trajectory_tools.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/models/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/models/hf.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/models/local.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/models/model.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/adapters/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/adapters/_env_eval.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/adapters/agent.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/adapters/env.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/adapters/stack.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/api.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/backends/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/backends/base.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/backends/gepa.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/collectors.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/config.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/console.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/events.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/format.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/jobs.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/result.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/sampler.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/sampling.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/search.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/stopping.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/study.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/optimization/trial.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/packaging/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/packaging/loader.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/packaging/manifest.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/packaging/oci.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/packaging/package.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/packaging/task_validation.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/policies/reconciliation.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/policies/rubrics/process/default.yaml +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/policies/scope.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/py.typed +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/samplers/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/samplers/boundary.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/samplers/fuzzing.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/samplers/graph.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/samplers/grid.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/samplers/image.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/samplers/mapelites.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/samplers/optuna.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/samplers/random.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/samplers/registry.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/samplers/strategy.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/advanced_jailbreak_detection.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/agent_security.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/agentic.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/agentic_workflow.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/attack_outcome.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/browser_security.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/classification.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/consistency.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/contains.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/cosine_sim.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/credentials.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/crucible.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/documentation_security.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/exfiltration_detection.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/format.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/harm.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/ide_security.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/image.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/json.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/judge.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/judge_ensemble.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/length.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/lexical.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/mcp_security.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/memorization.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/multi_agent_security.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/pii.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/prompt_leak.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/readability.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/reasoning_security.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/sentiment.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/similarity.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/structural_detection.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/scorers/supply_chain_detection.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/storage/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/storage/providers.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/storage/session_store.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/storage/storage.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/_ripgrep.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/apply_patch.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/dreadnode_cli.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/editing.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/execute.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/fetch.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/glob.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/grep.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/interaction.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/ls.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/memory.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/project_memory.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/read.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/report.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/report_items.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/submission.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/task.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/think.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/todo.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/trajectory_search.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/web_extract.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/web_search.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tools/write.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tracing/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tracing/constants.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tracing/convert.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tracing/exporter.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tracing/exporters.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tracing/span.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tracing/spans.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/tracing/trace_converter.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/_progress.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/base.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/dpo.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/env_rollouts.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/etl/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/etl/_common.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/etl/rl.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/etl/sft.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/etl/worlds.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/events.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/grpo.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/jobs.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/models.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ppo.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/prime.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/async_trainer.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/config.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/coordinator.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/distributed.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/dpo.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/experience.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/fsdp2_learner.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/inference.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/learner.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/multi_turn.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/ppo.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/reward_model.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/rollout_env.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/rollout_worker.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/sft.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/ray/trainer.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/recipes.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/rewards/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/rewards/aggregator.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/rewards/functions.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/rewards/scorer_bridge.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/rewards/shaping.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/rewards/types.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/rollouts/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/rollouts/adapters.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/rollouts/agent_rollout.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/rollouts/orchestrator.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/rollouts/types.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/rollouts/worlds.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/serving/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/serving/vllm_client.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/sft.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/tinker/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/tinker/config.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/tinker/data.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/tinker/renderer.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/tinker/rl.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/tinker/trainer.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/tinker_sft.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/training/utils.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/advanced_jailbreak.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/adversarial_suffix.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/agent_skill.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/agentic_workflow.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/art_prompt.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/audio.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/backdoor_finetune.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/browser_agent_attacks.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/cipher.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/competitive_parity.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/constitutional.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/document.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/documentation_poison.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/encoding.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/exfiltration.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/flip_attack.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/guardrail_bypass.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/ide_injection.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/image.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/injection.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/json_tools.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/language.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/logic_bomb.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/mcp_attacks.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/multi_agent_attacks.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/multimodal_attacks.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/past_tense.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/persuasion.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/perturbation.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/pii_extraction.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/pythonic_tools.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/rag_poisoning.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/reasoning_attacks.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/refine.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/response_steering.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/structural_exploits.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/stylistic.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/substitution.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/supply_chain.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/swap.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/system_prompt_extraction.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/text.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/video.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/transforms/xml_tools.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/version.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/workflows/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/workflows/compile.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/workflows/context.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/workflows/errors.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/workflows/loader.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode/workflows/workflow.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode_workflow_core/__init__.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode_workflow_core/events.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode_workflow_core/facts.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode_workflow_core/scheduler.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode_workflow_core/state.py +0 -0
- {dreadnode-2.0.46 → dreadnode-2.0.47}/dreadnode_workflow_core/topology.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: dreadnode
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.47
|
|
4
4
|
Summary: Dreadnode SDK
|
|
5
5
|
Project-URL: Homepage, https://dreadnode.io
|
|
6
6
|
Project-URL: Documentation, https://docs.dreadnode.io
|
|
@@ -52,7 +52,7 @@ Requires-Dist: textual>=8.0.2
|
|
|
52
52
|
Requires-Dist: transformers>=4.57.1
|
|
53
53
|
Requires-Dist: truststore<1.0.0,>=0.10.4
|
|
54
54
|
Requires-Dist: uvicorn>=0.34.0
|
|
55
|
-
Requires-Dist: websockets>=
|
|
55
|
+
Requires-Dist: websockets>=15.0.1
|
|
56
56
|
Requires-Dist: xmltodict>=1.0.2
|
|
57
57
|
Provides-Extra: airt-ml
|
|
58
58
|
Requires-Dist: scikit-learn<2.0.0,>=1.7.1; extra == 'airt-ml'
|
|
@@ -246,28 +246,17 @@ class Assessment:
|
|
|
246
246
|
return None
|
|
247
247
|
|
|
248
248
|
try:
|
|
249
|
-
#
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
runtimes_resp = api.list_runtimes(profile.org_key, profile.workspace_key)
|
|
255
|
-
runtime_items = runtimes_resp.get("items", [])
|
|
256
|
-
matching_runtimes = [r for r in runtime_items if r["project_id"] == project_id]
|
|
257
|
-
if matching_runtimes:
|
|
258
|
-
runtime_id = matching_runtimes[0]["id"]
|
|
259
|
-
logger.debug(f"Auto-selected runtime {runtime_id} for project {project_id}")
|
|
260
|
-
else:
|
|
261
|
-
logger.warning(f"No runtimes found for project {project_id}")
|
|
262
|
-
except Exception as e:
|
|
263
|
-
logger.debug(f"Failed to auto-discover runtime for project: {e}")
|
|
264
|
-
|
|
249
|
+
# A null runtime id asks the server to pick the caller's own runtime
|
|
250
|
+
# for the project. Members each hold their own runtimes there, so a
|
|
251
|
+
# client has no way to know which one is meant; anything inferred
|
|
252
|
+
# here would be a guess sent as though the caller had chosen it.
|
|
253
|
+
# Pass through what the caller supplied, nothing more.
|
|
265
254
|
result = api.create_airt_assessment(
|
|
266
255
|
profile.org_key,
|
|
267
256
|
profile.workspace_key,
|
|
268
257
|
name=self.name,
|
|
269
258
|
project_id=project_id,
|
|
270
|
-
runtime_id=
|
|
259
|
+
runtime_id=self._runtime_id,
|
|
271
260
|
description=self.description,
|
|
272
261
|
session_id=self._session_id,
|
|
273
262
|
target_model=self.target_model,
|
|
@@ -103,6 +103,9 @@ class PlatformConfig(BaseModel):
|
|
|
103
103
|
credits_enabled: bool = True
|
|
104
104
|
feedback_enabled: bool = False
|
|
105
105
|
integrations_enabled: bool = True
|
|
106
|
+
# Whether the operator has switched on the Agent Policies pages. Absent
|
|
107
|
+
# (False) on older platforms.
|
|
108
|
+
agent_policies_enabled: bool = False
|
|
106
109
|
# Whether the operator has enabled the Slack integration for this
|
|
107
110
|
# deployment. Absent (False) on older platforms, which have no Slack routes
|
|
108
111
|
# at all, so a client that does not receive it shows nothing (SLK-GATE-003).
|
|
@@ -405,7 +405,9 @@ def create(
|
|
|
405
405
|
] = None,
|
|
406
406
|
runtime_id: t.Annotated[
|
|
407
407
|
str | None,
|
|
408
|
-
cyclopts.Parameter(
|
|
408
|
+
cyclopts.Parameter(
|
|
409
|
+
help="Runtime ID. Defaults to your own runtime in the project; a runtime you don't own is ignored."
|
|
410
|
+
),
|
|
409
411
|
] = None,
|
|
410
412
|
description: t.Annotated[str | None, cyclopts.Parameter(help="Assessment description")] = None,
|
|
411
413
|
session_id: t.Annotated[str | None, cyclopts.Parameter(help="Session ID to associate")] = None,
|
|
@@ -244,7 +244,7 @@ class TuiArgs(PlatformScopeArgs):
|
|
|
244
244
|
int | None,
|
|
245
245
|
cyclopts.Parameter(
|
|
246
246
|
group=TUI_GROUP,
|
|
247
|
-
help="Step budget for autonomous mode (defaults to
|
|
247
|
+
help="Step budget for autonomous mode (defaults to 100)",
|
|
248
248
|
),
|
|
249
249
|
] = None
|
|
250
250
|
policy: t.Annotated[
|
|
@@ -18,6 +18,7 @@ from rich.panel import Panel
|
|
|
18
18
|
|
|
19
19
|
from dreadnode.app.cli.args import RESUME_PICK_SENTINEL, PlatformArgs, TuiArgs
|
|
20
20
|
from dreadnode.app.cli.shared import console, print_error, print_success
|
|
21
|
+
from dreadnode.app.config import DEFAULT_AUTONOMOUS_MAX_STEPS
|
|
21
22
|
from dreadnode.app.model_catalog import resolve_model
|
|
22
23
|
from dreadnode.core.tls import format_tls_error
|
|
23
24
|
|
|
@@ -255,6 +256,17 @@ def _default(*, tui_args: TuiArgs = TuiArgs()) -> None:
|
|
|
255
256
|
# ---------------------------------------------------------------------------
|
|
256
257
|
|
|
257
258
|
|
|
259
|
+
def _autonomous_step_budget(tui_args: TuiArgs) -> int:
|
|
260
|
+
"""Step budget for unattended runs (``--auto``, ``--print``).
|
|
261
|
+
|
|
262
|
+
``--max-steps`` wins when supplied; otherwise these surfaces run under the
|
|
263
|
+
product default rather than the budget-neutral ``headless`` policy default.
|
|
264
|
+
"""
|
|
265
|
+
if tui_args.max_steps is not None:
|
|
266
|
+
return tui_args.max_steps
|
|
267
|
+
return DEFAULT_AUTONOMOUS_MAX_STEPS
|
|
268
|
+
|
|
269
|
+
|
|
258
270
|
def create_app(tui_args: TuiArgs) -> "DreadnodeTextualApp":
|
|
259
271
|
"""Build a :class:`DreadnodeTextualApp` from resolved CLI/TUI args.
|
|
260
272
|
|
|
@@ -297,9 +309,10 @@ def create_app(tui_args: TuiArgs) -> "DreadnodeTextualApp":
|
|
|
297
309
|
if tui_args.max_steps is not None and "max_steps" not in initial_policy:
|
|
298
310
|
initial_policy["max_steps"] = tui_args.max_steps
|
|
299
311
|
elif tui_args.auto:
|
|
300
|
-
initial_policy = {
|
|
301
|
-
|
|
302
|
-
|
|
312
|
+
initial_policy = {
|
|
313
|
+
"name": "headless",
|
|
314
|
+
"max_steps": _autonomous_step_budget(tui_args),
|
|
315
|
+
}
|
|
303
316
|
|
|
304
317
|
return DreadnodeTextualApp(
|
|
305
318
|
profile=profile,
|
|
@@ -359,6 +372,7 @@ def _run_print(tui_args: TuiArgs) -> None:
|
|
|
359
372
|
capabilities=tui_args.capabilities,
|
|
360
373
|
capability_flags=tui_args.capability_flags,
|
|
361
374
|
system_prompt=tui_args.system_prompt,
|
|
375
|
+
max_steps=_autonomous_step_budget(tui_args),
|
|
362
376
|
server_url=tui_args.runtime_server,
|
|
363
377
|
platform_url=tui_args.server,
|
|
364
378
|
project_memory_preload_limit=tui_args.project_memory_preload_limit,
|
|
@@ -104,6 +104,51 @@ def _field_value(item: t.Any, key: str) -> t.Any:
|
|
|
104
104
|
return getattr(item, key, None)
|
|
105
105
|
|
|
106
106
|
|
|
107
|
+
def _select_own_project_runtime(
|
|
108
|
+
items: t.Sequence[dict[str, t.Any]],
|
|
109
|
+
project_key: t.Any,
|
|
110
|
+
) -> dict[str, t.Any] | None:
|
|
111
|
+
"""Pick the runtime in a project that this caller may start, if any.
|
|
112
|
+
|
|
113
|
+
Each member holds their own runtimes in a project, so "the project's runtime" is not
|
|
114
|
+
something a client can look up; only "mine here" is. Returns ``None`` when
|
|
115
|
+
the caller holds none, which the caller reads as "ensure one".
|
|
116
|
+
|
|
117
|
+
Ownership is judged from the flag the server computes, not from having
|
|
118
|
+
asked for an owner-filtered listing: the filter travels as a query
|
|
119
|
+
parameter, and a server that does not recognise it answers with everything
|
|
120
|
+
rather than an error. A row that does not say it is mine is not selected.
|
|
121
|
+
|
|
122
|
+
That check is what makes the owner filter more than a request, but it is
|
|
123
|
+
not a guarantee on its own. A server old enough to omit the flag also
|
|
124
|
+
predates owner-scoped runtime keys, so the ensure path this returns ``None``
|
|
125
|
+
into can still hand back whichever runtime holds the project's key. Against
|
|
126
|
+
such a server there is no answer to "which of these is mine" to be had, in
|
|
127
|
+
this function or anywhere else.
|
|
128
|
+
|
|
129
|
+
Among the caller's own, a running runtime wins, then a paused one, then the
|
|
130
|
+
one keyed to the project, then the newest. That is the runtime selection
|
|
131
|
+
rule in specs/runtimes.md, which the platform resolver and the web chat
|
|
132
|
+
apply too, so starting a project here lands on the runtime an evaluation or
|
|
133
|
+
a chat session on it would use. Selection never depends on the order rows
|
|
134
|
+
arrive in. A caller who wants a different runtime passes ``--runtime-id``.
|
|
135
|
+
"""
|
|
136
|
+
owned = [item for item in items if item.get("owned_by_me") is True]
|
|
137
|
+
if not owned:
|
|
138
|
+
return None
|
|
139
|
+
status_rank = {"running": 2, "paused": 1}
|
|
140
|
+
keyed = isinstance(project_key, str) and bool(project_key)
|
|
141
|
+
return max(
|
|
142
|
+
owned,
|
|
143
|
+
key=lambda item: (
|
|
144
|
+
status_rank.get(str(item.get("status")), 0),
|
|
145
|
+
keyed and item.get("key") == project_key,
|
|
146
|
+
str(item.get("created_at") or ""),
|
|
147
|
+
str(item.get("id") or ""),
|
|
148
|
+
),
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
|
|
107
152
|
def _resolve_secret_ids(api: t.Any, selectors: list[str]) -> list[str] | None:
|
|
108
153
|
if not selectors:
|
|
109
154
|
return None
|
|
@@ -599,18 +644,32 @@ def start(
|
|
|
599
644
|
"description",
|
|
600
645
|
)
|
|
601
646
|
runtime_target = runtime_id
|
|
647
|
+
unowned_runtime_probe = False
|
|
602
648
|
if runtime_target is None and target:
|
|
603
|
-
#
|
|
604
|
-
#
|
|
605
|
-
#
|
|
606
|
-
#
|
|
607
|
-
#
|
|
649
|
+
# <target> is ambiguous by design: a runtime key, a runtime UUID, or a
|
|
650
|
+
# project. The platform resolves runtime keys and UUIDs on this path, so
|
|
651
|
+
# probe it as a runtime first and read it as a project otherwise.
|
|
652
|
+
#
|
|
653
|
+
# A runtime the caller is known not to own does not settle the
|
|
654
|
+
# ambiguity. Runtime keys resolve across the workspace, and the first
|
|
655
|
+
# member to get a runtime in a project takes the project's own key for
|
|
656
|
+
# it — so the plain `dn runtime start <project>` that works for that
|
|
657
|
+
# member probes straight onto their runtime for everyone else. Reading
|
|
658
|
+
# the name as a project instead finds the caller's own runtime there.
|
|
659
|
+
#
|
|
660
|
+
# Only an explicit denial redirects. A server that says nothing about
|
|
661
|
+
# ownership has not said no, and the caller did name this runtime, so it
|
|
662
|
+
# is started as asked — unlike picking one for them out of a listing,
|
|
663
|
+
# where silence is a reason not to choose.
|
|
608
664
|
try:
|
|
609
|
-
api.get_runtime(profile.org_key, profile.workspace_key, target)
|
|
665
|
+
probed = api.get_runtime(profile.org_key, profile.workspace_key, target)
|
|
610
666
|
except NotFoundError:
|
|
611
667
|
runtime_target = None
|
|
612
668
|
else:
|
|
613
|
-
|
|
669
|
+
if _field_value(probed, "owned_by_me") is False:
|
|
670
|
+
unowned_runtime_probe = True
|
|
671
|
+
else:
|
|
672
|
+
runtime_target = target
|
|
614
673
|
|
|
615
674
|
if runtime_target is not None:
|
|
616
675
|
payload = api.start_runtime(
|
|
@@ -656,7 +715,18 @@ def start(
|
|
|
656
715
|
raise ValueError(
|
|
657
716
|
"Pass a runtime id or project, or set --project in your platform scope."
|
|
658
717
|
)
|
|
659
|
-
|
|
718
|
+
try:
|
|
719
|
+
project = api.get_project(profile.org_key, profile.workspace_key, resolved_project)
|
|
720
|
+
except NotFoundError:
|
|
721
|
+
if unowned_runtime_probe:
|
|
722
|
+
# The name matched a runtime, just not one this caller can
|
|
723
|
+
# operate, and it names no project either. Reporting a missing
|
|
724
|
+
# project would send them looking for the wrong thing.
|
|
725
|
+
raise ValueError(
|
|
726
|
+
f"'{resolved_project}' is a runtime owned by someone else, and is not a "
|
|
727
|
+
f"project. Run `dn runtime list --mine` to see the runtimes you can start."
|
|
728
|
+
) from None
|
|
729
|
+
raise
|
|
660
730
|
project_id = _field_value(project, "id")
|
|
661
731
|
if not isinstance(project_id, str) or not project_id:
|
|
662
732
|
raise ValueError(f"Project '{resolved_project}' did not include an id")
|
|
@@ -664,22 +734,26 @@ def start(
|
|
|
664
734
|
profile.org_key,
|
|
665
735
|
profile.workspace_key,
|
|
666
736
|
project_id=project_id,
|
|
737
|
+
owner="me",
|
|
667
738
|
limit=100,
|
|
668
739
|
)
|
|
669
|
-
|
|
670
|
-
|
|
740
|
+
selected = _select_own_project_runtime(
|
|
741
|
+
runtimes_payload.get("items", []),
|
|
742
|
+
_field_value(project, "key"),
|
|
743
|
+
)
|
|
744
|
+
if selected is None:
|
|
671
745
|
created = api.create_runtime(
|
|
672
746
|
profile.org_key,
|
|
673
747
|
profile.workspace_key,
|
|
674
748
|
resolved_project,
|
|
675
749
|
)
|
|
676
750
|
runtime_to_start = t.cast("str", created["id"])
|
|
677
|
-
elif len(items) == 1:
|
|
678
|
-
runtime_to_start = t.cast("str", items[0]["id"])
|
|
679
751
|
else:
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
752
|
+
runtime_to_start = t.cast("str", selected["id"])
|
|
753
|
+
if selected.get("status") == "paused":
|
|
754
|
+
# Start hands back a paused sandbox as it is. Waking it is its
|
|
755
|
+
# own call; start then issues the credential for it.
|
|
756
|
+
api.resume_runtime(profile.org_key, profile.workspace_key, runtime_to_start)
|
|
683
757
|
|
|
684
758
|
payload = api.start_runtime(
|
|
685
759
|
profile.org_key,
|
|
@@ -191,6 +191,7 @@ def run(
|
|
|
191
191
|
project_id: str,
|
|
192
192
|
input: t.Annotated[list[str] | None, cyclopts.Parameter(name="--input", negative=())] = None,
|
|
193
193
|
local: t.Annotated[bool, cyclopts.Parameter(name="--local", negative=())] = False,
|
|
194
|
+
model: str | None = None,
|
|
194
195
|
runtime_id: str | None = None,
|
|
195
196
|
runtime_url: str | None = None,
|
|
196
197
|
as_json: t.Annotated[bool, cyclopts.Parameter(name="--json", negative=())] = False,
|
|
@@ -205,10 +206,16 @@ def run(
|
|
|
205
206
|
when possible, so `max_steps=200` is an int.
|
|
206
207
|
local: Execute here, in this process, shipping facts to the platform as
|
|
207
208
|
it goes. Without it the selected runtime executes the workflow.
|
|
209
|
+
model: Default model for agents using inherit. Requires --local;
|
|
210
|
+
pinned agent models and explicit step models take precedence.
|
|
208
211
|
runtime_id: Runtime that owns remote execution. Required unless `--local`.
|
|
209
212
|
runtime_url: Runtime to run agents against when using `--local`.
|
|
210
213
|
as_json: Output as JSON.
|
|
211
214
|
"""
|
|
215
|
+
if model is not None and not local:
|
|
216
|
+
raise ValueError("--model currently requires --local")
|
|
217
|
+
if model is not None and (not model.strip() or model.strip() == "inherit"):
|
|
218
|
+
raise ValueError("--model must be a concrete model ID")
|
|
212
219
|
api, profile = platform.connect()
|
|
213
220
|
try:
|
|
214
221
|
input_data = parse_inputs(input)
|
|
@@ -261,6 +268,7 @@ def run(
|
|
|
261
268
|
definition=definition,
|
|
262
269
|
input_data=input_data,
|
|
263
270
|
runtime_url=runtime_url,
|
|
271
|
+
model=model,
|
|
264
272
|
session_group_id=created.get("session_group_id"),
|
|
265
273
|
execution_id=execution_id,
|
|
266
274
|
)
|
|
@@ -285,6 +293,7 @@ def _execute_locally(
|
|
|
285
293
|
runtime_url: str | None,
|
|
286
294
|
execution_id: str,
|
|
287
295
|
session_group_id: str | None = None,
|
|
296
|
+
model: str | None = None,
|
|
288
297
|
) -> t.Any:
|
|
289
298
|
"""Run the workflow in this process, streaming progress and shipping facts.
|
|
290
299
|
|
|
@@ -310,6 +319,7 @@ def _execute_locally(
|
|
|
310
319
|
capability=definition.get("capability_name"),
|
|
311
320
|
run_id=str(run_id),
|
|
312
321
|
session_group_id=str(session_group_id) if session_group_id else None,
|
|
322
|
+
default_model=model,
|
|
313
323
|
)
|
|
314
324
|
|
|
315
325
|
console.print(
|
|
@@ -19,6 +19,10 @@ DEFAULT_CONFIG_PATH = Path.home() / ".dreadnode" / "config.yaml"
|
|
|
19
19
|
# Default platform URL when no profile or override is set
|
|
20
20
|
DEFAULT_PLATFORM_URL = "https://app.dreadnode.io"
|
|
21
21
|
|
|
22
|
+
# Product safety budget for unattended CLI and TUI workflows. Session policies
|
|
23
|
+
# remain budget-neutral unless a caller supplies this value explicitly.
|
|
24
|
+
DEFAULT_AUTONOMOUS_MAX_STEPS = 100
|
|
25
|
+
|
|
22
26
|
# Hostnames that are equivalent for URL comparison
|
|
23
27
|
_LOCALHOST_ALIASES = frozenset({"localhost", "127.0.0.1", "::1"})
|
|
24
28
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""Credential redaction shared by runtime diagnostics and bug reports."""
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
|
|
5
|
+
_REDACTED = "[REDACTED]"
|
|
6
|
+
_SECRET_ASSIGNMENT_RE = re.compile(
|
|
7
|
+
r"""(?ix)
|
|
8
|
+
(?P<prefix>
|
|
9
|
+
(?:
|
|
10
|
+
["']?\b
|
|
11
|
+
(?:[a-z0-9]+[_-])*
|
|
12
|
+
(?:authorization|proxy-authorization|x-api-key|api[_-]?key|
|
|
13
|
+
access[_-]?token|refresh[_-]?token|id[_-]?token|password|
|
|
14
|
+
passwd|client[_-]?secret|secret|[a-z0-9]+[_-](?:token|key))
|
|
15
|
+
\b["']?\s*[=:]\s*
|
|
16
|
+
|
|
|
17
|
+
# Bare key/token labels also occur in prose. Require assignment or quoting.
|
|
18
|
+
(?:["']\b(?:token|key)["']\s*[=:]\s*|
|
|
19
|
+
\b(?:token|key)\s*(?:=\s*|:\s*(?=["'])))
|
|
20
|
+
)
|
|
21
|
+
)
|
|
22
|
+
(?:
|
|
23
|
+
(?P<double_quote>") (?:\\.|[^"\\\r\n])* "
|
|
24
|
+
|
|
|
25
|
+
(?P<single_quote>') (?:\\.|[^'\\\r\n])* '
|
|
26
|
+
|
|
|
27
|
+
(?:Bearer\s+)?[^\s,;}\]"']+
|
|
28
|
+
)
|
|
29
|
+
"""
|
|
30
|
+
)
|
|
31
|
+
_BEARER_RE = re.compile(r"(?i)\bBearer\s+[A-Za-z0-9._~+/=-]+")
|
|
32
|
+
_KNOWN_TOKEN_RE = re.compile(
|
|
33
|
+
r"\b(?:sk-[A-Za-z0-9_-]{12,}|dn_[A-Za-z0-9_-]{12,}|"
|
|
34
|
+
r"ghp_[A-Za-z0-9]{12,}|github_pat_[A-Za-z0-9_]{12,}|"
|
|
35
|
+
r"xox[baprs]-[A-Za-z0-9-]{12,})\b"
|
|
36
|
+
)
|
|
37
|
+
# Match through the last @ in the authority, without consuming the path/query/fragment.
|
|
38
|
+
_URL_CREDENTIAL_RE = re.compile(r"""(?i)(\b[a-z][a-z0-9+.-]*://[^\s/:@'"<>]*:)([^\s/?#'"<>]+)(@)""")
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def redact_sensitive_text(value: str) -> str:
|
|
42
|
+
"""Redact common credentials without dumping or inspecting environment state."""
|
|
43
|
+
|
|
44
|
+
def redact_assignment(match: re.Match[str]) -> str:
|
|
45
|
+
quote = match.group("double_quote") or match.group("single_quote") or ""
|
|
46
|
+
return f"{match.group('prefix')}{quote}{_REDACTED}{quote}"
|
|
47
|
+
|
|
48
|
+
value = _SECRET_ASSIGNMENT_RE.sub(redact_assignment, value)
|
|
49
|
+
value = _BEARER_RE.sub(f"Bearer {_REDACTED}", value)
|
|
50
|
+
value = _KNOWN_TOKEN_RE.sub(_REDACTED, value)
|
|
51
|
+
return _URL_CREDENTIAL_RE.sub(
|
|
52
|
+
lambda match: f"{match.group(1)}{_REDACTED}{match.group(3)}", value
|
|
53
|
+
)
|
|
@@ -9,6 +9,7 @@ from loguru import logger
|
|
|
9
9
|
|
|
10
10
|
from dreadnode.app.client.managed_client import ManagedRuntimeClient
|
|
11
11
|
from dreadnode.app.client.runtime_client import DEFAULT_MODEL
|
|
12
|
+
from dreadnode.app.config import DEFAULT_AUTONOMOUS_MAX_STEPS
|
|
12
13
|
from dreadnode.app.tui import wire_events as we
|
|
13
14
|
from dreadnode.app.tui.wire_events import parse_wire_event
|
|
14
15
|
|
|
@@ -26,11 +27,12 @@ async def run_print_mode(
|
|
|
26
27
|
capabilities: list[str] | None = None,
|
|
27
28
|
capability_flags: list[str] | None = None,
|
|
28
29
|
system_prompt: str | None = None,
|
|
30
|
+
max_steps: int = DEFAULT_AUTONOMOUS_MAX_STEPS,
|
|
29
31
|
server_url: str | None = None,
|
|
30
32
|
platform_url: str | None = None,
|
|
31
33
|
project_memory_preload_limit: int = 20,
|
|
32
34
|
) -> None:
|
|
33
|
-
"""Run
|
|
35
|
+
"""Run one prompt headlessly with an explicit autonomous step budget.
|
|
34
36
|
|
|
35
37
|
``profile`` is the caller's already-resolved profile — the CLI passes the
|
|
36
38
|
one built from ``--profile`` plus the scope flags and ``DREADNODE_*`` env
|
|
@@ -84,7 +86,7 @@ async def run_print_mode(
|
|
|
84
86
|
session = await client.create_session(
|
|
85
87
|
agent=agent,
|
|
86
88
|
model=model,
|
|
87
|
-
policy="headless",
|
|
89
|
+
policy={"name": "headless", "max_steps": max_steps},
|
|
88
90
|
project_memory_preload_limit=project_memory_preload_limit,
|
|
89
91
|
)
|
|
90
92
|
session_id = session.session_id
|
|
@@ -209,6 +209,7 @@ def _make_agent_link_tool(
|
|
|
209
209
|
extra_tools: list[t.Any] | None,
|
|
210
210
|
extra_hooks: list[t.Any] | None,
|
|
211
211
|
kind: str,
|
|
212
|
+
runtime_registry: t.Callable[[], capability_manager.CapabilityRegistry | None] | None = None,
|
|
212
213
|
) -> t.Any:
|
|
213
214
|
"""Create a synthetic tool that delegates work to another capability agent."""
|
|
214
215
|
from dreadnode.agents.tools import Tool
|
|
@@ -221,6 +222,7 @@ def _make_agent_link_tool(
|
|
|
221
222
|
extra_tools=extra_tools,
|
|
222
223
|
extra_hooks=extra_hooks,
|
|
223
224
|
system_prompt_append=get_state().system_prompt_append,
|
|
225
|
+
runtime_registry=runtime_registry,
|
|
224
226
|
)
|
|
225
227
|
return await delegated_agent.chat(task)
|
|
226
228
|
|
|
@@ -419,6 +421,7 @@ def create_agent(
|
|
|
419
421
|
system_prompt_append: str | None = None,
|
|
420
422
|
engine: str | None = None,
|
|
421
423
|
background_context: str | None = None,
|
|
424
|
+
runtime_registry: t.Callable[[], capability_manager.CapabilityRegistry | None] | None = None,
|
|
422
425
|
) -> Agent:
|
|
423
426
|
"""Create an agent from a loaded capability.
|
|
424
427
|
|
|
@@ -433,6 +436,8 @@ def create_agent(
|
|
|
433
436
|
rules since hooks aren't agent-scoped.
|
|
434
437
|
"""
|
|
435
438
|
from dreadnode.agents import Agent
|
|
439
|
+
from dreadnode.agents.tools import Tool
|
|
440
|
+
from dreadnode.app.server.runtime_inspection import RuntimeInspection
|
|
436
441
|
from dreadnode.capabilities.tool_rules import filter_tools
|
|
437
442
|
from dreadnode.tools import default_tools
|
|
438
443
|
|
|
@@ -472,13 +477,6 @@ def create_agent(
|
|
|
472
477
|
if tooling_health:
|
|
473
478
|
instructions = instructions + "\n" + tooling_health
|
|
474
479
|
|
|
475
|
-
# Append CLI --system-prompt content as the final layer
|
|
476
|
-
if system_prompt_append:
|
|
477
|
-
instructions = instructions + "\n\n" + system_prompt_append
|
|
478
|
-
|
|
479
|
-
if background_context:
|
|
480
|
-
instructions = instructions + "\n\n" + background_context
|
|
481
|
-
|
|
482
480
|
# 1. Inherent tools — always present. Item mutation tools are capability
|
|
483
481
|
# opt-in and added below only when the manifest selects output types.
|
|
484
482
|
base = default_tools(additional_toolsets=inherent_toolsets, include_items=False)
|
|
@@ -486,6 +484,15 @@ def create_agent(
|
|
|
486
484
|
pool: list[t.Any] = list(base.values())
|
|
487
485
|
pool_names = set(base.keys())
|
|
488
486
|
|
|
487
|
+
inspection = RuntimeInspection(
|
|
488
|
+
registry=runtime_registry or (lambda: get_state().capability_registry),
|
|
489
|
+
agent=lambda: agent,
|
|
490
|
+
capability=(capability.name, capability.version or "") if capability else None,
|
|
491
|
+
)
|
|
492
|
+
inspection_tool = Tool.from_callable(inspection.runtime_info)
|
|
493
|
+
pool.append(inspection_tool)
|
|
494
|
+
pool_names.add(inspection_tool.name)
|
|
495
|
+
|
|
489
496
|
# Bundled @dreadnode gets the CLI helper, but it is not a global inherent tool.
|
|
490
497
|
if (
|
|
491
498
|
capability is not None
|
|
@@ -532,6 +539,7 @@ def create_agent(
|
|
|
532
539
|
extra_tools=extra_tools,
|
|
533
540
|
extra_hooks=extra_hooks,
|
|
534
541
|
kind=link.kind,
|
|
542
|
+
runtime_registry=runtime_registry,
|
|
535
543
|
)
|
|
536
544
|
name = _tool_name(tool)
|
|
537
545
|
if name and name not in pool_names:
|
|
@@ -586,6 +594,15 @@ def create_agent(
|
|
|
586
594
|
# 3. Apply agent's tool rules (empty dict = all tools pass)
|
|
587
595
|
rules = agent_def.tools if agent_def else {}
|
|
588
596
|
tools = filter_tools(pool, rules, name_fn=_tool_name)
|
|
597
|
+
if inspection_tool in tools:
|
|
598
|
+
instructions += "\n\n" + inspection.to_prompt()
|
|
599
|
+
|
|
600
|
+
# Keep caller-provided content after all host guidance.
|
|
601
|
+
if system_prompt_append:
|
|
602
|
+
instructions = instructions + "\n\n" + system_prompt_append
|
|
603
|
+
|
|
604
|
+
if background_context:
|
|
605
|
+
instructions = instructions + "\n\n" + background_context
|
|
589
606
|
|
|
590
607
|
# Engine (loop owner): explicit override > agent_def declaration > native.
|
|
591
608
|
# ``inherit``/empty falls through to the native engine (``None``).
|
|
@@ -2602,6 +2619,7 @@ class SessionRuntime:
|
|
|
2602
2619
|
# ``None`` falls through to agent_def.engine then native.
|
|
2603
2620
|
engine=self._engine,
|
|
2604
2621
|
background_context=self._project_memory_background_context,
|
|
2622
|
+
runtime_registry=lambda: self._registry,
|
|
2605
2623
|
)
|
|
2606
2624
|
|
|
2607
2625
|
self._wire_server_tools(agent)
|
|
@@ -3383,6 +3401,11 @@ class SessionRuntime:
|
|
|
3383
3401
|
# this helper is constructed and consumed within a single turn.
|
|
3384
3402
|
await request.stream.publish(event) # noqa: B023
|
|
3385
3403
|
|
|
3404
|
+
# Set when the failure below was reported by the agent itself on
|
|
3405
|
+
# its terminal ``AgentEnd`` (already delivered to raw-event
|
|
3406
|
+
# consumers) rather than raised by the runtime.
|
|
3407
|
+
agent_reported_error = False
|
|
3408
|
+
|
|
3386
3409
|
try:
|
|
3387
3410
|
if request.model and request.model != self.model:
|
|
3388
3411
|
self.model = request.model
|
|
@@ -3527,7 +3550,7 @@ class SessionRuntime:
|
|
|
3527
3550
|
self.persistence.begin_turn()
|
|
3528
3551
|
# Local import to match the existing lazy-import style in
|
|
3529
3552
|
# this module and avoid eager event-module import at startup.
|
|
3530
|
-
from dreadnode.agents.events import GenerationStep
|
|
3553
|
+
from dreadnode.agents.events import AgentEnd, GenerationStep
|
|
3531
3554
|
|
|
3532
3555
|
try:
|
|
3533
3556
|
# Workflow attribution rides on the agent's own spans rather
|
|
@@ -3603,6 +3626,15 @@ class SessionRuntime:
|
|
|
3603
3626
|
if isinstance(event, GenerationStep):
|
|
3604
3627
|
flush_task = asyncio.create_task(self._persist_state_locked())
|
|
3605
3628
|
self.persistence.track_flush_task(flush_task)
|
|
3629
|
+
# Engines report terminal errors on AgentEnd rather
|
|
3630
|
+
# than raising. Route them through the failed-turn
|
|
3631
|
+
# handler so terminal-envelope consumers see
|
|
3632
|
+
# turn.failed instead of an empty turn.completed.
|
|
3633
|
+
if isinstance(event, AgentEnd) and event.error is not None:
|
|
3634
|
+
agent_reported_error = True
|
|
3635
|
+
if isinstance(event.error, Exception):
|
|
3636
|
+
raise event.error
|
|
3637
|
+
raise RuntimeError(str(event.error))
|
|
3606
3638
|
finally:
|
|
3607
3639
|
reset_human_prompt_handler(token)
|
|
3608
3640
|
|
|
@@ -3723,12 +3755,17 @@ class SessionRuntime:
|
|
|
3723
3755
|
except Exception:
|
|
3724
3756
|
logger.opt(exception=True).debug("error-path persist raised")
|
|
3725
3757
|
|
|
3726
|
-
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
|
|
3731
|
-
|
|
3758
|
+
# Raw-event consumers (TUI, eval worker, SSE chat) render the
|
|
3759
|
+
# ``error`` event as a failure line. When the agent reported
|
|
3760
|
+
# the error on its own AgentEnd they already have that line;
|
|
3761
|
+
# emitting another would show the same error twice.
|
|
3762
|
+
if not agent_reported_error:
|
|
3763
|
+
error_event: EventPayload = {"type": "error", "error": str(exc)}
|
|
3764
|
+
await _emit_turn_event(error_event)
|
|
3765
|
+
await self._publish_broker_raw_event(
|
|
3766
|
+
turn_id=request.turn_id,
|
|
3767
|
+
raw_event=error_event,
|
|
3768
|
+
)
|
|
3732
3769
|
turn_events = _turn_slice()
|
|
3733
3770
|
await self._publish_broker_event(
|
|
3734
3771
|
kind=runtime_events.EVENT_TURN_FAILED,
|