Files
shannon/apps/worker/configs/config-schema.json
T
ezl-keygraphandGitHub 1ce250d6a5 feat: multi-provider model support, SARIF output, and exploit-mode fixes (#402)
* feat(worker): record token, cache, and turn usage per agent

* feat: replace model tiers with a single SHANNON_AI_MODEL across five providers

* feat(cli): rebuild the setup wizard for provider and model selection

* docs: document single-model selection and supported providers

* feat(worker): use chat completions for OpenAI behind a custom base URL

* feat: add SHANNON_AI_OPENAI_FORMAT to pick the wire API for OpenAI gateways

* refactor(cli): drop endpoint path hints from the gateway format picker

* feat(worker): enable pi in-session provider retry with retry-after backoff

* refactor(worker): hand provider error classification to pi and drop the Anthropic ladders

* refactor: remove the subscription retry preset and pipeline config section

* fix(worker): validate Bedrock credentials with the same live probe as other providers

* feat(worker): render the report from structured findings instead of agent-written markdown

* fix(worker): dispose the credential probe session on every path

* fix(worker): refuse to replace the assembled report with an empty one

* refactor(worker): catch post-processing throws across the whole finalization block

* revert(worker): drop the report zero-findings guard

* docs(worker): correct the retry split and Bedrock credential claims

* docs: regenerate llms-full.txt from current sources

* feat(cli): build and run the npx flow from a clone

* refactor(cli): flatten the setup summary output

* feat(cli): reject runs with more than one provider configured

* fix(worker): say a rejected bash call never ran

* chore(cli): drop grok-4.3 and gpt-5.6-luna from the setup suggestions

* feat(worker): capture structured finding locations for SARIF output

* fix(worker): enumerate queue confidence so the report inherits it verbatim

* feat(worker): give the reporting phase a mode-specific output schema

* feat(worker): emit a SARIF 2.1.0 log for exploitative runs

* fix(worker): correct SARIF locations and defer fingerprinting to the upload action

* fix(worker): drop the confidence suffix from the analysis-mode summary list

* feat(worker): give exploit findings a dedicated code location field

* feat(worker): carry structured code locations from the vuln queue to the report

* fix(worker): join code locations from the vuln queue instead of re-asking agents

* fix(worker): spell out the finding_id to category mapping in the tool schema

* feat: drop Google/Gemini as a supported AI provider

* fix(worker): stop asking the report agent for code locations

* docs: correct the provider list and drop the removed rate-limit settings

* docs: add provider cyber safeguards and suggested models per provider

* docs: document the SARIF output and the report rating thresholds
2026-07-30 19:31:52 +05:30

230 lines
7.8 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://example.com/pentest-config-schema.json",
"title": "Penetration Testing Configuration Schema",
"description": "Schema for YAML configuration files used in the penetration testing agent",
"type": "object",
"properties": {
"authentication": {
"type": "object",
"description": "Authentication configuration for the target application",
"properties": {
"login_type": {
"type": "string",
"enum": ["form", "sso", "api", "basic"],
"description": "Type of authentication mechanism"
},
"login_url": {
"type": "string",
"format": "uri",
"description": "URL for the login page or endpoint"
},
"credentials": {
"type": "object",
"description": "Login credentials",
"properties": {
"username": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Username or email for authentication"
},
"password": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Password for authentication"
},
"totp_secret": {
"type": "string",
"pattern": "^[A-Za-z2-7]+=*$",
"description": "TOTP secret for two-factor authentication (Base32 encoded, case insensitive)"
},
"email_login": {
"type": "object",
"description": "Email account credentials for magic-link or OTP follow-through flows",
"properties": {
"address": {
"type": "string",
"format": "email",
"description": "Email address used to receive magic links or OTPs"
},
"password": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Password for the email account"
},
"totp_secret": {
"type": "string",
"pattern": "^[A-Za-z2-7]+=*$",
"description": "TOTP secret for the email account's two-factor authentication (Base32 encoded)"
}
},
"required": ["address", "password"],
"additionalProperties": false
}
},
"required": ["username"],
"additionalProperties": false
},
"login_flow": {
"type": "array",
"description": "Step-by-step instructions for the login process",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"minItems": 1,
"maxItems": 20
},
"success_condition": {
"type": "object",
"description": "Condition that indicates successful authentication",
"properties": {
"type": {
"type": "string",
"enum": ["url_contains", "element_present", "url_equals_exactly", "text_contains"],
"description": "Type of success condition to check"
},
"value": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Value to match against the success condition"
}
},
"required": ["type", "value"],
"additionalProperties": false
}
},
"required": ["login_type", "login_url", "credentials", "success_condition"],
"additionalProperties": false
},
"rules": {
"type": "object",
"description": "Testing rules that define what to focus on or avoid during penetration testing",
"properties": {
"avoid": {
"type": "array",
"description": "Rules defining areas to avoid during testing",
"items": {
"$ref": "#/$defs/rule"
},
"maxItems": 50
},
"focus": {
"type": "array",
"description": "Rules defining areas to focus on during testing",
"items": {
"$ref": "#/$defs/rule"
},
"maxItems": 50
}
},
"additionalProperties": false
},
"vuln_classes": {
"type": "array",
"description": "Vulnerability classes to test. When omitted, all five classes run. When set, only listed classes run; their vuln+exploit agents and report sections are included.",
"items": {
"type": "string",
"enum": ["injection", "xss", "auth", "authz", "ssrf"]
},
"minItems": 1,
"maxItems": 5,
"uniqueItems": true
},
"exploit": {
"type": "string",
"enum": ["true", "false"],
"description": "Whether to run the exploitation phase (default true). Set false to run only analysis."
},
"report": {
"type": "object",
"description": "Report filtering and guidance applied by the report agent.",
"properties": {
"min_severity": {
"type": "string",
"enum": ["low", "medium", "high", "critical"],
"description": "Minimum severity threshold; findings below are dropped by the report agent."
},
"min_confidence": {
"type": "string",
"enum": ["low", "medium", "high"],
"description": "Minimum confidence threshold; findings below are dropped by the report agent."
},
"guidance": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Free-text guidance to the report agent (e.g., 'Drop findings about missing security headers')."
},
"sarif": {
"type": "string",
"enum": ["true", "false"],
"description": "Emit a SARIF 2.1.0 log (report.sarif) beside the report. Requires exploit=true; ignored otherwise."
}
},
"additionalProperties": false
},
"rules_of_engagement": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Free-text instructions to the agent that render into every prompt."
},
"login": {
"type": "object",
"description": "Deprecated: Use 'authentication' section instead",
"deprecated": true
},
"description": {
"type": "string",
"description": "Description of the target environment, its deployment context, and any information that helps guide the security assessment",
"minLength": 1,
"maxLength": 500,
"pattern": "\\S"
}
},
"anyOf": [
{ "required": ["authentication"] },
{ "required": ["rules"] },
{ "required": ["authentication", "rules"] },
{ "required": ["description"] },
{ "required": ["vuln_classes"] },
{ "required": ["exploit"] },
{ "required": ["report"] },
{ "required": ["rules_of_engagement"] }
],
"additionalProperties": false,
"$defs": {
"rule": {
"type": "object",
"description": "A single testing rule",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Human-readable description of the rule"
},
"type": {
"type": "string",
"enum": ["url_path", "subdomain", "domain", "method", "header", "parameter", "code_path"],
"description": "Type of rule (what aspect of requests or source code to match against)"
},
"value": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "Value to match"
}
},
"required": ["description", "type", "value"],
"additionalProperties": false
}
}
}