agentdiscover 2.7.2__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.
- agentdiscover-2.7.2/.claude/commands/grow-scanner.md +58 -0
- agentdiscover-2.7.2/.github/workflows/aibom.yml +126 -0
- agentdiscover-2.7.2/.github/workflows/ci.yml +93 -0
- agentdiscover-2.7.2/.github/workflows/scan.yml +38 -0
- agentdiscover-2.7.2/.gitignore +70 -0
- agentdiscover-2.7.2/.python-version +1 -0
- agentdiscover-2.7.2/CHANGELOG.md +452 -0
- agentdiscover-2.7.2/CLAUDE.md +265 -0
- agentdiscover-2.7.2/COMMIT_NOTES.md +86 -0
- agentdiscover-2.7.2/CONTRIBUTING.md +102 -0
- agentdiscover-2.7.2/Dockerfile +26 -0
- agentdiscover-2.7.2/LICENSE +21 -0
- agentdiscover-2.7.2/PKG-INFO +815 -0
- agentdiscover-2.7.2/README.md +772 -0
- agentdiscover-2.7.2/README_BADGES.txt +4 -0
- agentdiscover-2.7.2/RELEASE_NOTES.md +75 -0
- agentdiscover-2.7.2/ROADMAP.md +86 -0
- agentdiscover-2.7.2/SECURITY.md +86 -0
- agentdiscover-2.7.2/action.yml +54 -0
- agentdiscover-2.7.2/demo/k8s/agents-configmap.yaml +51 -0
- agentdiscover-2.7.2/demo/k8s/crewai-agent.yaml +29 -0
- agentdiscover-2.7.2/demo/k8s/langchain-agent.yaml +30 -0
- agentdiscover-2.7.2/demo/k8s/shadow-agent.yaml +29 -0
- agentdiscover-2.7.2/demo/mcp-governance/DESIGN.md +377 -0
- agentdiscover-2.7.2/demo/mcp-governance/README.md +126 -0
- agentdiscover-2.7.2/demo/mcp-governance/sample-policy.yaml +114 -0
- agentdiscover-2.7.2/demo/run-demo.sh +11 -0
- agentdiscover-2.7.2/demo/sample-repo/agents/autogen_agent.py +12 -0
- agentdiscover-2.7.2/demo/sample-repo/agents/crewai_agent.py +15 -0
- agentdiscover-2.7.2/demo/sample-repo/agents/direct_client.py +14 -0
- agentdiscover-2.7.2/demo/sample-repo/agents/langchain_agent.py +10 -0
- agentdiscover-2.7.2/demo/sample-repo/requirements.txt +6 -0
- agentdiscover-2.7.2/demo/setup.sh +70 -0
- agentdiscover-2.7.2/deployment/kubernetes/tracing-policy.yaml +150 -0
- agentdiscover-2.7.2/deployment/systemd/README.md +40 -0
- agentdiscover-2.7.2/deployment/systemd/agent-discover-scanner.service +27 -0
- agentdiscover-2.7.2/docker-compose.yml +13 -0
- agentdiscover-2.7.2/docs/EXAMPLES.md +171 -0
- agentdiscover-2.7.2/docs/TETRAGON_SETUP.md +390 -0
- agentdiscover-2.7.2/docs/architecture.svg +161 -0
- agentdiscover-2.7.2/docs/comparisons/vs-grep.md +84 -0
- agentdiscover-2.7.2/docs/comparisons/vs-nudge-security.md +64 -0
- agentdiscover-2.7.2/docs/ghost-detection.svg +118 -0
- agentdiscover-2.7.2/docs/integrations/elastic.md +167 -0
- agentdiscover-2.7.2/docs/integrations/github-actions.md +164 -0
- agentdiscover-2.7.2/docs/integrations/kubernetes-daemonset.md +246 -0
- agentdiscover-2.7.2/docs/integrations/splunk.md +174 -0
- agentdiscover-2.7.2/docs/known-apps-example.txt +12 -0
- agentdiscover-2.7.2/docs/layer4-setup.md +381 -0
- agentdiscover-2.7.2/docs/nist-mapping.md +57 -0
- agentdiscover-2.7.2/examples/k8s/test-workload.yaml +224 -0
- agentdiscover-2.7.2/examples/tetragon-sample-events.json +4 -0
- agentdiscover-2.7.2/install.sh +586 -0
- agentdiscover-2.7.2/pyproject.toml +93 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/__init__.py +24 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/aibom.py +96 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/audit_reports.py +83 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/behavioral_patterns.py +252 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/cli.py +1335 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/correlator.py +1114 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/detectors/__init__.py +0 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/detectors/cloud_audit/__init__.py +230 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/detectors/cloud_audit/aws_cloudtrail.py +565 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/detectors/cloud_audit/azure_monitor.py +54 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/detectors/cloud_audit/base.py +127 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/detectors/cloud_audit/gcp_audit.py +53 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/detectors/cloudtrail.py +24 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/errors.py +121 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/exporters/__init__.py +0 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/exporters/mcpfw_policy.py +483 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/git_scanner.py +233 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/high_risk_agents.py +439 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/interceptors/__init__.py +54 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/interceptors/base.py +319 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/interceptors/sse/__init__.py +0 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/interceptors/sse/netskope.py +17 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/interceptors/sse/prisma_access.py +17 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/interceptors/sse/umbrella.py +17 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/interceptors/sse/zscaler.py +17 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/js_signatures.py +149 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/known_apps.py +205 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/layer4/__init__.py +0 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/layer4/osquery_executor.py +328 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/layer4/osquery_queries.py +244 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/layer4/result_parser.py +187 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/macos_detector.py +124 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/mcp_detector.py +720 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/models/endpoint_discovery.py +86 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/monitors/__init__.py +15 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/monitors/json_output.py +68 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/monitors/k8s_monitor.py +190 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/monitors/tetragon_events.py +109 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/monitors/tetragon_monitor.py +405 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/monitors/vendor_mapping.py +113 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/network_monitor.py +496 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/platform.py +430 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/reports/layer4_report.py +126 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/saas_detector.py +836 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/sarif_output.py +155 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/sbom_analyzer.py +277 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/scan_runner.py +1485 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/scanner.py +151 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/signatures.py +617 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/visitor.py +172 -0
- agentdiscover-2.7.2/src/agent_discover_scanner/windows_detector.py +137 -0
- agentdiscover-2.7.2/tests/__init__.py +0 -0
- agentdiscover-2.7.2/tests/fixtures/autogen_safe.py +11 -0
- agentdiscover-2.7.2/tests/fixtures/autogen_unsafe.py +16 -0
- agentdiscover-2.7.2/tests/fixtures/bedrock_safe.py +29 -0
- agentdiscover-2.7.2/tests/fixtures/bedrock_unsafe.py +33 -0
- agentdiscover-2.7.2/tests/fixtures/clean_code.py +23 -0
- agentdiscover-2.7.2/tests/fixtures/crewai_safe.py +17 -0
- agentdiscover-2.7.2/tests/fixtures/crewai_unsafe.py +18 -0
- agentdiscover-2.7.2/tests/fixtures/langchain_agents.py +15 -0
- agentdiscover-2.7.2/tests/fixtures/langchain_js_agent.js +21 -0
- agentdiscover-2.7.2/tests/fixtures/langgraph_workflow.py +20 -0
- agentdiscover-2.7.2/tests/fixtures/safe_with_gateway.py +13 -0
- agentdiscover-2.7.2/tests/fixtures/shadow_anthropic.py +14 -0
- agentdiscover-2.7.2/tests/fixtures/shadow_openai.py +17 -0
- agentdiscover-2.7.2/tests/fixtures/shadow_openai_js.js +15 -0
- agentdiscover-2.7.2/tests/test_aibom.py +61 -0
- agentdiscover-2.7.2/tests/test_audit_bundle.py +116 -0
- agentdiscover-2.7.2/tests/test_bedrock_signatures.py +252 -0
- agentdiscover-2.7.2/tests/test_behavioral_patterns.py +215 -0
- agentdiscover-2.7.2/tests/test_cloud_audit_layer5.py +519 -0
- agentdiscover-2.7.2/tests/test_cloudtrail.py +758 -0
- agentdiscover-2.7.2/tests/test_cloudtrail_wiring.py +439 -0
- agentdiscover-2.7.2/tests/test_correlator.py +302 -0
- agentdiscover-2.7.2/tests/test_correlator_layer5.py +476 -0
- agentdiscover-2.7.2/tests/test_git_scanner.py +209 -0
- agentdiscover-2.7.2/tests/test_install.sh +37 -0
- agentdiscover-2.7.2/tests/test_interceptors.py +360 -0
- agentdiscover-2.7.2/tests/test_mcpfw_export.py +395 -0
- agentdiscover-2.7.2/tests/test_network_monitor.py +266 -0
- agentdiscover-2.7.2/tests/test_scanner.py +195 -0
- agentdiscover-2.7.2/uv.lock +964 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Grow AgentDiscover Scanner Traction
|
|
2
|
+
|
|
3
|
+
Autonomous task: increase real-world adoption of the AgentDiscover scanner.
|
|
4
|
+
|
|
5
|
+
Rules:
|
|
6
|
+
- NEVER fake metrics (no artificial stars, downloads, or issues)
|
|
7
|
+
- NEVER create fake user testimonials or reviews
|
|
8
|
+
- ONLY improve the product, documentation, and discoverability
|
|
9
|
+
- Every change must make the scanner genuinely more useful
|
|
10
|
+
|
|
11
|
+
Execute the following improvement categories in order:
|
|
12
|
+
|
|
13
|
+
## 1. First-Run Experience (highest impact)
|
|
14
|
+
- Audit the README.md: Can a security engineer go from zero to first scan in under 3 minutes?
|
|
15
|
+
- Ensure `pipx install agentdiscover && agent-discover-scanner scan-all ~/projects --duration 30` works flawlessly
|
|
16
|
+
- Add a "What You'll See" section with REAL example output (not mocked)
|
|
17
|
+
- Add a "Common Issues" section addressing known friction points
|
|
18
|
+
- Test the install path on a clean Python 3.10+ environment
|
|
19
|
+
|
|
20
|
+
## 2. Output Quality
|
|
21
|
+
- Ensure scan output is immediately actionable (not just raw data)
|
|
22
|
+
- Add a `--summary` flag that prints a human-readable executive summary
|
|
23
|
+
- Add a `--report` flag that generates a markdown report suitable for sharing with management
|
|
24
|
+
- Ensure AIBOM/CycloneDX output is valid and parseable by standard tools
|
|
25
|
+
- Add `--json` output that's clean enough to pipe into jq
|
|
26
|
+
|
|
27
|
+
## 3. CI/CD Integration
|
|
28
|
+
- Create a GitHub Action: `defendai/agentdiscover-action`
|
|
29
|
+
- Usage: add to any repo's CI to scan for AI agents on every PR
|
|
30
|
+
- Output: SARIF format for GitHub Security tab integration
|
|
31
|
+
- Create the action.yml, Dockerfile, and documentation
|
|
32
|
+
- Write a blog-post-ready tutorial: "Add AI Agent Discovery to Your CI Pipeline in 5 Minutes"
|
|
33
|
+
|
|
34
|
+
## 4. Comparison Content
|
|
35
|
+
- Create docs/comparisons/ directory
|
|
36
|
+
- Write honest comparisons: AgentDiscover vs Cisco DefenseClaw Skills Scanner
|
|
37
|
+
- Write: AgentDiscover vs manual `grep` for AI frameworks
|
|
38
|
+
- Write: AgentDiscover vs Nudge Security agent discovery
|
|
39
|
+
- Be honest about limitations — credibility > marketing
|
|
40
|
+
|
|
41
|
+
## 5. Integration Guides
|
|
42
|
+
- Create docs/integrations/ directory
|
|
43
|
+
- Write: "Using AgentDiscover with Splunk" (forward JSONL audit to Splunk HEC)
|
|
44
|
+
- Write: "Using AgentDiscover with Elastic/Kibana" (filebeat config for scan output)
|
|
45
|
+
- Write: "Using AgentDiscover in a Kubernetes cluster" (DaemonSet + Tetragon setup)
|
|
46
|
+
- Write: "Using AgentDiscover with GitHub Actions" (reference the action from #3)
|
|
47
|
+
|
|
48
|
+
## 6. SEO and Discoverability
|
|
49
|
+
- Ensure PyPI metadata is complete: description, keywords, project URLs, classifiers
|
|
50
|
+
- Add "AI agent security scanner" and "MCP security" to keywords
|
|
51
|
+
- Ensure GitHub topics include: ai-security, mcp, agent-discovery, llm-security, sbom
|
|
52
|
+
- Create a one-line description that's search-friendly: "Find every AI agent in your enterprise — the ones you know about and the ones you don't"
|
|
53
|
+
|
|
54
|
+
## 7. Developer Experience
|
|
55
|
+
- Ensure all CLI help text is clear and complete (`--help` on every subcommand)
|
|
56
|
+
- Add shell completion scripts (bash, zsh, fish)
|
|
57
|
+
- Add a `--verbose` mode that explains what each detection layer is doing in real-time
|
|
58
|
+
- Add a `--dry-run` mode for CI environments that just validates configuration
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# GitHub Action — CI/CD AIBOM Generation
|
|
2
|
+
# File: .github/workflows/aibom.yml
|
|
3
|
+
# Drop this into any repo that uses AI agents to get AIBOM on every push.
|
|
4
|
+
|
|
5
|
+
name: Generate AI Bill of Materials (AIBOM)
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
branches: [main, master]
|
|
10
|
+
pull_request:
|
|
11
|
+
branches: [main, master]
|
|
12
|
+
schedule:
|
|
13
|
+
# Run weekly on Mondays at 09:00 UTC for drift detection
|
|
14
|
+
- cron: '0 9 * * 1'
|
|
15
|
+
workflow_dispatch:
|
|
16
|
+
# Allow manual trigger
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
aibom:
|
|
20
|
+
name: Scan and generate AIBOM
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
permissions:
|
|
23
|
+
contents: read
|
|
24
|
+
security-events: write # For uploading to GitHub Security tab
|
|
25
|
+
actions: read
|
|
26
|
+
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout repository
|
|
29
|
+
uses: actions/checkout@v4
|
|
30
|
+
with:
|
|
31
|
+
fetch-depth: 0 # Full history for change detection
|
|
32
|
+
|
|
33
|
+
- name: Set up Python
|
|
34
|
+
uses: actions/setup-python@v5
|
|
35
|
+
with:
|
|
36
|
+
python-version: '3.11'
|
|
37
|
+
cache: 'pip'
|
|
38
|
+
|
|
39
|
+
- name: Install AgentDiscover Scanner
|
|
40
|
+
run: |
|
|
41
|
+
pip install agent-discover-scanner
|
|
42
|
+
|
|
43
|
+
- name: Run AIBOM scan
|
|
44
|
+
id: aibom_scan
|
|
45
|
+
run: |
|
|
46
|
+
agent-discover audit \
|
|
47
|
+
--output ./aibom-output/ \
|
|
48
|
+
--format cyclonedx-1.6 \
|
|
49
|
+
--no-runtime \
|
|
50
|
+
--ci
|
|
51
|
+
env:
|
|
52
|
+
# Optional: if your agents use these, the scanner can validate configs
|
|
53
|
+
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
|
54
|
+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
55
|
+
|
|
56
|
+
- name: Upload AIBOM artifact
|
|
57
|
+
uses: actions/upload-artifact@v4
|
|
58
|
+
with:
|
|
59
|
+
name: aibom-${{ github.sha }}
|
|
60
|
+
path: ./aibom-output/
|
|
61
|
+
retention-days: 90
|
|
62
|
+
|
|
63
|
+
- name: Check for GHOST agent findings
|
|
64
|
+
run: |
|
|
65
|
+
if [ -f ./aibom-output/ghost-agents.md ]; then
|
|
66
|
+
GHOST_COUNT=$(grep -c "CRITICAL\|HIGH" ./aibom-output/ghost-agents.md || true)
|
|
67
|
+
if [ "$GHOST_COUNT" -gt "0" ]; then
|
|
68
|
+
echo "::warning::GHOST agent findings detected. Review aibom-output/ghost-agents.md"
|
|
69
|
+
fi
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
- name: Check for Toxic Flow findings
|
|
73
|
+
run: |
|
|
74
|
+
if [ -f ./aibom-output/toxic-flows.md ]; then
|
|
75
|
+
echo "::warning::Potential Toxic Flow patterns detected. Review aibom-output/toxic-flows.md"
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
- name: Comment PR with AIBOM summary
|
|
79
|
+
if: github.event_name == 'pull_request'
|
|
80
|
+
uses: actions/github-script@v7
|
|
81
|
+
with:
|
|
82
|
+
script: |
|
|
83
|
+
const fs = require('fs');
|
|
84
|
+
let summary = '## AgentDiscover AIBOM Summary\n\n';
|
|
85
|
+
|
|
86
|
+
try {
|
|
87
|
+
const aibom = JSON.parse(fs.readFileSync('./aibom-output/aibom.json', 'utf8'));
|
|
88
|
+
const components = aibom.components || [];
|
|
89
|
+
const agentCount = components.filter(c => c.type === 'ai-model').length;
|
|
90
|
+
const ghostCount = components.filter(c => {
|
|
91
|
+
const ghost = c.properties?.find(p => p.name === 'agent:ghost');
|
|
92
|
+
return ghost?.value === 'true';
|
|
93
|
+
}).length;
|
|
94
|
+
|
|
95
|
+
summary += `| Metric | Value |\n|---|---|\n`;
|
|
96
|
+
summary += `| Agents inventoried | ${agentCount} |\n`;
|
|
97
|
+
summary += `| GHOST agents | ${ghostCount === 0 ? '✅ 0' : '🚨 ' + ghostCount} |\n`;
|
|
98
|
+
summary += `| AIBOM format | CycloneDX 1.6 |\n`;
|
|
99
|
+
summary += `| Scan commit | \`${context.sha.substring(0, 7)}\` |\n\n`;
|
|
100
|
+
|
|
101
|
+
if (ghostCount > 0) {
|
|
102
|
+
summary += '> ⚠️ **GHOST agents detected** — agents visible at runtime with no declared inventory entry. Review `aibom-output/ghost-agents.md`.\n';
|
|
103
|
+
} else {
|
|
104
|
+
summary += '> ✅ All detected agents match declared inventory.\n';
|
|
105
|
+
}
|
|
106
|
+
} catch (e) {
|
|
107
|
+
summary += '_AIBOM generation completed. Download artifact for full report._\n';
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
github.rest.issues.createComment({
|
|
111
|
+
issue_number: context.issue.number,
|
|
112
|
+
owner: context.repo.owner,
|
|
113
|
+
repo: context.repo.repo,
|
|
114
|
+
body: summary
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
- name: Fail on critical GHOST findings
|
|
118
|
+
if: ${{ inputs.fail_on_ghost || false }}
|
|
119
|
+
run: |
|
|
120
|
+
if [ -f ./aibom-output/ghost-agents.md ]; then
|
|
121
|
+
CRITICAL=$(grep -c "CRITICAL" ./aibom-output/ghost-agents.md || true)
|
|
122
|
+
if [ "$CRITICAL" -gt "0" ]; then
|
|
123
|
+
echo "Critical GHOST agent found. Failing build."
|
|
124
|
+
exit 1
|
|
125
|
+
fi
|
|
126
|
+
fi
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
name: Test on Python ${{ matrix.python-version }}
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout code
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Install uv
|
|
22
|
+
uses: astral-sh/setup-uv@v5
|
|
23
|
+
with:
|
|
24
|
+
enable-cache: true
|
|
25
|
+
|
|
26
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
27
|
+
run: uv python install ${{ matrix.python-version }}
|
|
28
|
+
|
|
29
|
+
- name: Install dependencies
|
|
30
|
+
run: uv sync --all-extras
|
|
31
|
+
|
|
32
|
+
- name: Run tests
|
|
33
|
+
run: uv run pytest tests/ -v --cov=src/agent_discover_scanner --cov-report=xml --cov-report=term
|
|
34
|
+
|
|
35
|
+
- name: Upload coverage to Codecov
|
|
36
|
+
uses: codecov/codecov-action@v4
|
|
37
|
+
if: matrix.python-version == '3.12'
|
|
38
|
+
with:
|
|
39
|
+
file: ./coverage.xml
|
|
40
|
+
fail_ci_if_error: false
|
|
41
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
42
|
+
|
|
43
|
+
lint:
|
|
44
|
+
name: Lint and Format Check
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
|
|
47
|
+
steps:
|
|
48
|
+
- name: Checkout code
|
|
49
|
+
uses: actions/checkout@v4
|
|
50
|
+
|
|
51
|
+
- name: Install uv
|
|
52
|
+
uses: astral-sh/setup-uv@v5
|
|
53
|
+
|
|
54
|
+
- name: Set up Python
|
|
55
|
+
run: uv python install 3.12
|
|
56
|
+
|
|
57
|
+
- name: Install dependencies
|
|
58
|
+
run: uv sync
|
|
59
|
+
|
|
60
|
+
- name: Run ruff (lint)
|
|
61
|
+
run: uv run ruff check .
|
|
62
|
+
|
|
63
|
+
- name: Run ruff (format check)
|
|
64
|
+
run: uv run ruff format --check .
|
|
65
|
+
|
|
66
|
+
build:
|
|
67
|
+
name: Build Package
|
|
68
|
+
runs-on: ubuntu-latest
|
|
69
|
+
|
|
70
|
+
steps:
|
|
71
|
+
- name: Checkout code
|
|
72
|
+
uses: actions/checkout@v4
|
|
73
|
+
|
|
74
|
+
- name: Install uv
|
|
75
|
+
uses: astral-sh/setup-uv@v5
|
|
76
|
+
|
|
77
|
+
- name: Set up Python
|
|
78
|
+
run: uv python install 3.12
|
|
79
|
+
|
|
80
|
+
- name: Install build dependencies
|
|
81
|
+
run: uv sync --dev
|
|
82
|
+
|
|
83
|
+
- name: Build package
|
|
84
|
+
run: uv run python -m build
|
|
85
|
+
|
|
86
|
+
- name: Check package
|
|
87
|
+
run: uv run twine check dist/*
|
|
88
|
+
|
|
89
|
+
- name: Upload build artifacts
|
|
90
|
+
uses: actions/upload-artifact@v4
|
|
91
|
+
with:
|
|
92
|
+
name: dist-packages
|
|
93
|
+
path: dist/
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: AI Agent Discovery
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: '0 2 * * 1' # Weekly on Monday at 2 AM
|
|
6
|
+
push:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
pull_request:
|
|
9
|
+
branches: [ main ]
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
security-events: write
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
agent-scan:
|
|
18
|
+
name: Scan for AI agents
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
|
|
21
|
+
steps:
|
|
22
|
+
- name: Checkout
|
|
23
|
+
uses: actions/checkout@v4
|
|
24
|
+
|
|
25
|
+
- name: Scan and upload to GitHub Security
|
|
26
|
+
uses: Defend-AI-Tech-Inc/agent-discover-scanner@v2.5.0
|
|
27
|
+
with:
|
|
28
|
+
path: '.'
|
|
29
|
+
output: 'agent-scan-results.sarif'
|
|
30
|
+
upload-sarif: 'true'
|
|
31
|
+
|
|
32
|
+
- name: Upload SARIF artifact
|
|
33
|
+
uses: actions/upload-artifact@v4
|
|
34
|
+
if: always()
|
|
35
|
+
with:
|
|
36
|
+
name: agent-scan-sarif
|
|
37
|
+
path: agent-scan-results.sarif
|
|
38
|
+
retention-days: 30
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
MANIFEST
|
|
23
|
+
|
|
24
|
+
# Virtual environments
|
|
25
|
+
.venv/
|
|
26
|
+
venv/
|
|
27
|
+
ENV/
|
|
28
|
+
env/
|
|
29
|
+
|
|
30
|
+
# Testing
|
|
31
|
+
.pytest_cache/
|
|
32
|
+
.coverage
|
|
33
|
+
htmlcov/
|
|
34
|
+
.tox/
|
|
35
|
+
|
|
36
|
+
# IDE
|
|
37
|
+
.cursor/
|
|
38
|
+
.vscode/
|
|
39
|
+
.idea/
|
|
40
|
+
*.code-workspace
|
|
41
|
+
*.swp
|
|
42
|
+
*.swo
|
|
43
|
+
*~
|
|
44
|
+
|
|
45
|
+
# Output files
|
|
46
|
+
*.sarif
|
|
47
|
+
*.json
|
|
48
|
+
network-findings.*
|
|
49
|
+
*.log
|
|
50
|
+
agents-scan-results.*
|
|
51
|
+
defendai-scan.*
|
|
52
|
+
test-results.*
|
|
53
|
+
|
|
54
|
+
# OS
|
|
55
|
+
.DS_Store
|
|
56
|
+
Thumbs.db
|
|
57
|
+
|
|
58
|
+
# Secrets
|
|
59
|
+
*.key
|
|
60
|
+
*.pem
|
|
61
|
+
.env
|
|
62
|
+
.env.*
|
|
63
|
+
|
|
64
|
+
# Allow example JSON files
|
|
65
|
+
!examples/**/*.json
|
|
66
|
+
.pypirc
|
|
67
|
+
demo_*.txt
|
|
68
|
+
demo_*.md
|
|
69
|
+
*_report.md
|
|
70
|
+
*.jsonl
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|