agentagon 0.1.0__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.
- agentagon-0.1.0/.claude-plugin/plugin.json +8 -0
- agentagon-0.1.0/.codex-plugin/plugin.json +26 -0
- agentagon-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
- agentagon-0.1.0/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- agentagon-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +17 -0
- agentagon-0.1.0/.github/dependabot.yml +12 -0
- agentagon-0.1.0/.github/workflows/codeql.yml +31 -0
- agentagon-0.1.0/.github/workflows/docs.yml +95 -0
- agentagon-0.1.0/.github/workflows/release.yml +143 -0
- agentagon-0.1.0/.github/workflows/security.yml +46 -0
- agentagon-0.1.0/.github/workflows/tests.yml +80 -0
- agentagon-0.1.0/.gitignore +23 -0
- agentagon-0.1.0/.gitleaks.toml +13 -0
- agentagon-0.1.0/AGENTS.md +59 -0
- agentagon-0.1.0/CODE_OF_CONDUCT.md +83 -0
- agentagon-0.1.0/CONTRIBUTING.md +79 -0
- agentagon-0.1.0/LICENSE +202 -0
- agentagon-0.1.0/MANIFEST.in +14 -0
- agentagon-0.1.0/PKG-INFO +151 -0
- agentagon-0.1.0/README.md +124 -0
- agentagon-0.1.0/SECURITY.md +28 -0
- agentagon-0.1.0/THIRD_PARTY_NOTICES.txt +32 -0
- agentagon-0.1.0/contracts/v1/acquisition.json +71 -0
- agentagon-0.1.0/contracts/v1/evaluation-budget.json +24 -0
- agentagon-0.1.0/contracts/v1/evaluation-plan.json +539 -0
- agentagon-0.1.0/contracts/v1/evaluation-review.json +85 -0
- agentagon-0.1.0/contracts/v1/fix-control.json +32 -0
- agentagon-0.1.0/contracts/v1/fix-profile.json +423 -0
- agentagon-0.1.0/contracts/v1/fix-review.json +34 -0
- agentagon-0.1.0/contracts/v1/fix-round.json +116 -0
- agentagon-0.1.0/contracts/v1/fix-spec.json +339 -0
- agentagon-0.1.0/contracts/v1/intelligence-eval-request.json +39 -0
- agentagon-0.1.0/contracts/v1/intelligence-fix-request.json +30 -0
- agentagon-0.1.0/contracts/v1/intelligence-request.json +39 -0
- agentagon-0.1.0/contracts/v1/intelligence-response.json +20 -0
- agentagon-0.1.0/contracts/v1/issue-update.json +40 -0
- agentagon-0.1.0/contracts/v1/selection.json +27 -0
- agentagon-0.1.0/contracts/v1/submission.json +427 -0
- agentagon-0.1.0/contracts/v1/task-event.json +43 -0
- agentagon-0.1.0/contracts/v1/trace.json +313 -0
- agentagon-0.1.0/contracts/v1/verification.json +118 -0
- agentagon-0.1.0/docs/README.md +71 -0
- agentagon-0.1.0/docs/assets/causeway-dark.png +0 -0
- agentagon-0.1.0/docs/assets/causeway-light.png +0 -0
- agentagon-0.1.0/docs/assets/dashboard-example.png +0 -0
- agentagon-0.1.0/docs/assets/docs.css +112 -0
- agentagon-0.1.0/docs/assets/favicon.svg +1 -0
- agentagon-0.1.0/docs/assets/logo.png +0 -0
- agentagon-0.1.0/docs/audit.md +94 -0
- agentagon-0.1.0/docs/capabilities.md +17 -0
- agentagon-0.1.0/docs/concepts.md +67 -0
- agentagon-0.1.0/docs/contributing/README.md +70 -0
- agentagon-0.1.0/docs/contributing/architecture.md +118 -0
- agentagon-0.1.0/docs/contributing/capabilities.md +108 -0
- agentagon-0.1.0/docs/contributing/docs-site.md +88 -0
- agentagon-0.1.0/docs/contributing/extending.md +105 -0
- agentagon-0.1.0/docs/contributing/product-decisions.md +49 -0
- agentagon-0.1.0/docs/contributing/releasing.md +96 -0
- agentagon-0.1.0/docs/dashboard.md +63 -0
- agentagon-0.1.0/docs/delivery.md +67 -0
- agentagon-0.1.0/docs/eval.md +113 -0
- agentagon-0.1.0/docs/execution.md +33 -0
- agentagon-0.1.0/docs/faq.md +65 -0
- agentagon-0.1.0/docs/fix.md +100 -0
- agentagon-0.1.0/docs/getting-started/bring-one-failure.md +37 -0
- agentagon-0.1.0/docs/getting-started/first-audit.md +49 -0
- agentagon-0.1.0/docs/getting-started/install.md +127 -0
- agentagon-0.1.0/docs/getting-started/local-example.md +57 -0
- agentagon-0.1.0/docs/intelligence.md +81 -0
- agentagon-0.1.0/docs/orchestration.md +38 -0
- agentagon-0.1.0/docs/privacy.md +59 -0
- agentagon-0.1.0/docs/reference/cli.md +117 -0
- agentagon-0.1.0/docs/reference/evaluation.md +66 -0
- agentagon-0.1.0/docs/reference/fix.md +338 -0
- agentagon-0.1.0/docs/releases/0.1.0.md +50 -0
- agentagon-0.1.0/docs/reports.md +58 -0
- agentagon-0.1.0/docs/review.md +64 -0
- agentagon-0.1.0/docs/settings.md +93 -0
- agentagon-0.1.0/docs/task-evidence.md +21 -0
- agentagon-0.1.0/docs/telemetry.md +64 -0
- agentagon-0.1.0/docs/traces.md +87 -0
- agentagon-0.1.0/docs/troubleshooting.md +137 -0
- agentagon-0.1.0/docs_theme/partials/header.html +73 -0
- agentagon-0.1.0/examples/local-audit/README.md +26 -0
- agentagon-0.1.0/examples/local-audit/demo.py +67 -0
- agentagon-0.1.0/examples/ticket-retry/README.md +83 -0
- agentagon-0.1.0/examples/ticket-retry/application.py +12 -0
- agentagon-0.1.0/examples/ticket-retry/benchmark.py +55 -0
- agentagon-0.1.0/examples/ticket-retry/demo.py +178 -0
- agentagon-0.1.0/examples/ticket-retry/model.py +92 -0
- agentagon-0.1.0/examples/ticket-retry/test_ticket_retry.py +39 -0
- agentagon-0.1.0/examples/ticket-retry/ticket_environment.py +20 -0
- agentagon-0.1.0/examples/ticket-retry/verify.py +33 -0
- agentagon-0.1.0/hooks/hooks.json +8 -0
- agentagon-0.1.0/mkdocs.yml +105 -0
- agentagon-0.1.0/pyproject.toml +66 -0
- agentagon-0.1.0/requirements-docs.txt +5 -0
- agentagon-0.1.0/scripts/build_site.py +203 -0
- agentagon-0.1.0/scripts/check_installed.py +68 -0
- agentagon-0.1.0/scripts/check_secret_scan.py +66 -0
- agentagon-0.1.0/scripts/check_site.py +66 -0
- agentagon-0.1.0/scripts/docs_links.py +27 -0
- agentagon-0.1.0/scripts/install.sh +88 -0
- agentagon-0.1.0/scripts/release.py +186 -0
- agentagon-0.1.0/setup.cfg +4 -0
- agentagon-0.1.0/signals/audit-v1.json +245 -0
- agentagon-0.1.0/skills/audit/SKILL.md +41 -0
- agentagon-0.1.0/skills/audit/references/acquisition.md +27 -0
- agentagon-0.1.0/skills/audit/references/analysis.md +45 -0
- agentagon-0.1.0/skills/audit/references/braintrust.md +17 -0
- agentagon-0.1.0/skills/audit/references/formats.md +19 -0
- agentagon-0.1.0/skills/audit/references/history.md +21 -0
- agentagon-0.1.0/skills/audit/references/intelligence.md +55 -0
- agentagon-0.1.0/skills/audit/references/langfuse.md +11 -0
- agentagon-0.1.0/skills/audit/references/langsmith.md +17 -0
- agentagon-0.1.0/skills/audit/references/phoenix.md +17 -0
- agentagon-0.1.0/skills/audit/references/records.md +40 -0
- agentagon-0.1.0/skills/audit/references/setup.md +5 -0
- agentagon-0.1.0/skills/audit/references/telemetry.md +18 -0
- agentagon-0.1.0/skills/dashboard/SKILL.md +42 -0
- agentagon-0.1.0/skills/eval/SKILL.md +23 -0
- agentagon-0.1.0/skills/eval/helpers/agentagon_events.cjs +27 -0
- agentagon-0.1.0/skills/eval/helpers/agentagon_events.py +37 -0
- agentagon-0.1.0/skills/eval/references/preparation.md +59 -0
- agentagon-0.1.0/skills/fix/SKILL.md +81 -0
- agentagon-0.1.0/skills/fix/references/contract.md +143 -0
- agentagon-0.1.0/skills/fix/references/roles.md +31 -0
- agentagon-0.1.0/skills/review/SKILL.md +35 -0
- agentagon-0.1.0/skills/setup/SKILL.md +58 -0
- agentagon-0.1.0/skills/ship/SKILL.md +63 -0
- agentagon-0.1.0/src/agentagon/__init__.py +3 -0
- agentagon-0.1.0/src/agentagon/__main__.py +3 -0
- agentagon-0.1.0/src/agentagon/cli/__init__.py +1 -0
- agentagon-0.1.0/src/agentagon/cli/main.py +864 -0
- agentagon-0.1.0/src/agentagon/core/__init__.py +1 -0
- agentagon-0.1.0/src/agentagon/core/analysis.py +107 -0
- agentagon-0.1.0/src/agentagon/core/records.py +122 -0
- agentagon-0.1.0/src/agentagon/core/signals.py +280 -0
- agentagon-0.1.0/src/agentagon/dashboard.py +485 -0
- agentagon-0.1.0/src/agentagon/dashboard_assets/app.css +970 -0
- agentagon-0.1.0/src/agentagon/dashboard_assets/app.js +618 -0
- agentagon-0.1.0/src/agentagon/dashboard_assets/favicon.svg +1 -0
- agentagon-0.1.0/src/agentagon/dashboard_assets/index.html +174 -0
- agentagon-0.1.0/src/agentagon/dashboard_assets/logo-split-crown-96.png +0 -0
- agentagon-0.1.0/src/agentagon/dashboard_assets/theme.js +27 -0
- agentagon-0.1.0/src/agentagon/dashboard_assets/tidal-causeway-dark-moon.webp +0 -0
- agentagon-0.1.0/src/agentagon/dashboard_assets/tidal-causeway-light-sun.webp +0 -0
- agentagon-0.1.0/src/agentagon/dashboard_assets/workflow.js +227 -0
- agentagon-0.1.0/src/agentagon/experiments/__init__.py +1 -0
- agentagon-0.1.0/src/agentagon/experiments/checkouts.py +160 -0
- agentagon-0.1.0/src/agentagon/experiments/cleanup.py +110 -0
- agentagon-0.1.0/src/agentagon/experiments/controls.py +351 -0
- agentagon-0.1.0/src/agentagon/experiments/delivery.py +540 -0
- agentagon-0.1.0/src/agentagon/experiments/engine.py +1199 -0
- agentagon-0.1.0/src/agentagon/experiments/evaluation.py +122 -0
- agentagon-0.1.0/src/agentagon/experiments/evidence.py +29 -0
- agentagon-0.1.0/src/agentagon/experiments/hooks.py +120 -0
- agentagon-0.1.0/src/agentagon/experiments/inspection.py +235 -0
- agentagon-0.1.0/src/agentagon/experiments/learning.py +415 -0
- agentagon-0.1.0/src/agentagon/experiments/orchestration.py +559 -0
- agentagon-0.1.0/src/agentagon/experiments/preparation.py +732 -0
- agentagon-0.1.0/src/agentagon/experiments/runners.py +657 -0
- agentagon-0.1.0/src/agentagon/experiments/search.py +218 -0
- agentagon-0.1.0/src/agentagon/experiments/spec.py +330 -0
- agentagon-0.1.0/src/agentagon/experiments/store.py +72 -0
- agentagon-0.1.0/src/agentagon/experiments/worker.py +616 -0
- agentagon-0.1.0/src/agentagon/installation.py +286 -0
- agentagon-0.1.0/src/agentagon/lookup/__init__.py +1 -0
- agentagon-0.1.0/src/agentagon/lookup/client.py +219 -0
- agentagon-0.1.0/src/agentagon/lookup/owners.py +81 -0
- agentagon-0.1.0/src/agentagon/operations.py +658 -0
- agentagon-0.1.0/src/agentagon/reporting.py +834 -0
- agentagon-0.1.0/src/agentagon/storage/__init__.py +1 -0
- agentagon-0.1.0/src/agentagon/storage/changes.py +305 -0
- agentagon-0.1.0/src/agentagon/storage/config.py +284 -0
- agentagon-0.1.0/src/agentagon/storage/issues.py +155 -0
- agentagon-0.1.0/src/agentagon/storage/workspace.py +337 -0
- agentagon-0.1.0/src/agentagon/telemetry/__init__.py +1 -0
- agentagon-0.1.0/src/agentagon/telemetry/alignment.py +63 -0
- agentagon-0.1.0/src/agentagon/telemetry/ingest.py +292 -0
- agentagon-0.1.0/src/agentagon/telemetry/normalize.py +562 -0
- agentagon-0.1.0/src/agentagon/telemetry/selection.py +65 -0
- agentagon-0.1.0/src/agentagon/usage.py +517 -0
- agentagon-0.1.0/src/agentagon.egg-info/PKG-INFO +151 -0
- agentagon-0.1.0/src/agentagon.egg-info/SOURCES.txt +264 -0
- agentagon-0.1.0/src/agentagon.egg-info/dependency_links.txt +1 -0
- agentagon-0.1.0/src/agentagon.egg-info/entry_points.txt +2 -0
- agentagon-0.1.0/src/agentagon.egg-info/requires.txt +14 -0
- agentagon-0.1.0/src/agentagon.egg-info/top_level.txt +1 -0
- agentagon-0.1.0/tests/conftest.py +95 -0
- agentagon-0.1.0/tests/fixtures/braintrust.json +88 -0
- agentagon-0.1.0/tests/fixtures/langfuse.json +59 -0
- agentagon-0.1.0/tests/fixtures/langsmith.json +82 -0
- agentagon-0.1.0/tests/fixtures/otlp.json +148 -0
- agentagon-0.1.0/tests/fixtures/phoenix.json +51 -0
- agentagon-0.1.0/tests/support/__init__.py +1 -0
- agentagon-0.1.0/tests/support/audit.py +152 -0
- agentagon-0.1.0/tests/support/changes.py +21 -0
- agentagon-0.1.0/tests/support/controls.py +20 -0
- agentagon-0.1.0/tests/support/dashboard.py +138 -0
- agentagon-0.1.0/tests/support/delivery.py +78 -0
- agentagon-0.1.0/tests/support/evaluation.py +52 -0
- agentagon-0.1.0/tests/support/experiments.py +141 -0
- agentagon-0.1.0/tests/support/recovery.py +80 -0
- agentagon-0.1.0/tests/support/runners.py +79 -0
- agentagon-0.1.0/tests/test_audit.py +311 -0
- agentagon-0.1.0/tests/test_changes.py +292 -0
- agentagon-0.1.0/tests/test_config.py +173 -0
- agentagon-0.1.0/tests/test_continuation_hooks.py +75 -0
- agentagon-0.1.0/tests/test_dashboard.py +281 -0
- agentagon-0.1.0/tests/test_dashboard_browser.py +216 -0
- agentagon-0.1.0/tests/test_edge_cases.py +271 -0
- agentagon-0.1.0/tests/test_evaluation_handoff.py +122 -0
- agentagon-0.1.0/tests/test_evaluation_preparation.py +227 -0
- agentagon-0.1.0/tests/test_experiment_learning.py +245 -0
- agentagon-0.1.0/tests/test_experiment_ordering.py +202 -0
- agentagon-0.1.0/tests/test_experiment_recovery.py +158 -0
- agentagon-0.1.0/tests/test_experiment_runners.py +582 -0
- agentagon-0.1.0/tests/test_experiment_search.py +491 -0
- agentagon-0.1.0/tests/test_experiments.py +400 -0
- agentagon-0.1.0/tests/test_fix_cli.py +231 -0
- agentagon-0.1.0/tests/test_fix_config.py +87 -0
- agentagon-0.1.0/tests/test_fix_contracts.py +206 -0
- agentagon-0.1.0/tests/test_fix_controls.py +296 -0
- agentagon-0.1.0/tests/test_fix_controls_dashboard.py +248 -0
- agentagon-0.1.0/tests/test_fix_dashboard.py +169 -0
- agentagon-0.1.0/tests/test_fix_delivery.py +325 -0
- agentagon-0.1.0/tests/test_fix_issues.py +180 -0
- agentagon-0.1.0/tests/test_fix_reporting.py +171 -0
- agentagon-0.1.0/tests/test_host_rounds.py +275 -0
- agentagon-0.1.0/tests/test_installation.py +338 -0
- agentagon-0.1.0/tests/test_live_fix.py +340 -0
- agentagon-0.1.0/tests/test_lookup.py +584 -0
- agentagon-0.1.0/tests/test_metric_discrimination.py +182 -0
- agentagon-0.1.0/tests/test_preflight.py +126 -0
- agentagon-0.1.0/tests/test_product_flow.py +233 -0
- agentagon-0.1.0/tests/test_release.py +119 -0
- agentagon-0.1.0/tests/test_review_flow.py +381 -0
- agentagon-0.1.0/tests/test_review_reporting.py +90 -0
- agentagon-0.1.0/tests/test_selection.py +215 -0
- agentagon-0.1.0/tests/test_shipping_cleanup.py +111 -0
- agentagon-0.1.0/tests/test_site.py +87 -0
- agentagon-0.1.0/tests/test_source_audit.py +192 -0
- agentagon-0.1.0/tests/test_task_evidence.py +185 -0
- agentagon-0.1.0/tests/test_telemetry.py +220 -0
- agentagon-0.1.0/tests/test_ticket_demo.py +88 -0
- agentagon-0.1.0/tests/test_trace_alignment.py +68 -0
- agentagon-0.1.0/tests/test_usage.py +506 -0
- agentagon-0.1.0/tests/test_workflow_inspection.py +92 -0
- agentagon-0.1.0/tests/test_workflow_lookup.py +610 -0
- agentagon-0.1.0/website/README.md +12 -0
- agentagon-0.1.0/website/assets/logo-split-crown-96.png +0 -0
- agentagon-0.1.0/website/assets/site.css +244 -0
- agentagon-0.1.0/website/assets/site.js +70 -0
- agentagon-0.1.0/website/assets/theme-init.js +8 -0
- agentagon-0.1.0/website/assets/tidal-causeway-dark-moon.png +0 -0
- agentagon-0.1.0/website/assets/tidal-causeway-light-sun.png +0 -0
- agentagon-0.1.0/website/blogs/ai-agent-regression-testing.md +55 -0
- agentagon-0.1.0/website/blogs/observability-vs-evaluation.md +47 -0
- agentagon-0.1.0/website/blogs/what-flat-scores-hide.md +46 -0
- agentagon-0.1.0/website/index.html +41 -0
- agentagon-0.1.0/website/templates/article.html +23 -0
- agentagon-0.1.0/website/templates/base.html +47 -0
- agentagon-0.1.0/website/templates/blogs.html +20 -0
- agentagon-0.1.0/website/templates/header.html +40 -0
- agentagon-0.1.0/website/templates/message.html +12 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ag",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Review local changes, audit agent applications, and evaluate measured improvements.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Agentagon"
|
|
7
|
+
},
|
|
8
|
+
"license": "Apache-2.0",
|
|
9
|
+
"skills": "./skills/",
|
|
10
|
+
"interface": {
|
|
11
|
+
"displayName": "Agentagon",
|
|
12
|
+
"shortDescription": "Review, audit and improve agent applications",
|
|
13
|
+
"longDescription": "Prepare reviewed benchmarks, audit applications, coordinate bounded improvement experiments in the active host task, inspect task evidence and verified tradeoffs, and clean and reverify selected delivery branches.",
|
|
14
|
+
"developerName": "Agentagon",
|
|
15
|
+
"category": "Productivity",
|
|
16
|
+
"capabilities": [
|
|
17
|
+
"Read",
|
|
18
|
+
"Write",
|
|
19
|
+
"Interactive"
|
|
20
|
+
],
|
|
21
|
+
"defaultPrompt": [
|
|
22
|
+
"Use ag:review to review my local changes.",
|
|
23
|
+
"Use ag:audit to audit this agent application."
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Report a reproducible problem in Agentagon
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- For a suspected vulnerability, email security@agentagon.ai instead of opening a public issue. See SECURITY.md. -->
|
|
7
|
+
<!-- Use synthetic or redacted examples. Do not attach credentials, private code/traces, or the full .agentagon directory. -->
|
|
8
|
+
|
|
9
|
+
## What happened?
|
|
10
|
+
|
|
11
|
+
Describe the observed behavior and what you expected.
|
|
12
|
+
|
|
13
|
+
## Reproduction
|
|
14
|
+
|
|
15
|
+
Provide the smallest command sequence or host request that reproduces the problem, with synthetic inputs when possible.
|
|
16
|
+
|
|
17
|
+
## Environment
|
|
18
|
+
|
|
19
|
+
- Agentagon version (`agentagon --version`) and source commit, if known:
|
|
20
|
+
- Installation method (source/virtual environment, installer or wheel):
|
|
21
|
+
- OS and Python version:
|
|
22
|
+
- Coding host and version, if relevant:
|
|
23
|
+
- Workflow and runner (local, SSH or E2B), if relevant:
|
|
24
|
+
|
|
25
|
+
## Evidence
|
|
26
|
+
|
|
27
|
+
Include the relevant redacted error output and expected output. Describe coverage limits or skipped checks that affect the result. Remove secrets from configuration examples and use environment-variable names instead of values.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: Describe a workflow problem or propose an improvement
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Problem
|
|
7
|
+
|
|
8
|
+
What are you trying to do, and where does the current workflow fall short?
|
|
9
|
+
|
|
10
|
+
## Proposed behavior
|
|
11
|
+
|
|
12
|
+
Describe the result you want. Distinguish the proposal from existing behavior.
|
|
13
|
+
|
|
14
|
+
## Example and alternatives
|
|
15
|
+
|
|
16
|
+
Give a concrete input/request and expected result. Describe any current workaround or alternatives you considered.
|
|
17
|
+
|
|
18
|
+
## Constraints and verification
|
|
19
|
+
|
|
20
|
+
Which workflow, host or runner is affected? Note compatibility, privacy or execution-cost constraints. Explain how a contributor could verify that the change solves the problem.
|
|
21
|
+
|
|
22
|
+
<!-- Do not include credentials or private code/traces. Report vulnerabilities privately to security@agentagon.ai. -->
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## Problem and result
|
|
2
|
+
|
|
3
|
+
Describe the previous problem and resulting behavior. Link related issues, if any.
|
|
4
|
+
|
|
5
|
+
## Evidence
|
|
6
|
+
|
|
7
|
+
Include a reproduction or usage example when it helps assess the change.
|
|
8
|
+
|
|
9
|
+
## Validation
|
|
10
|
+
|
|
11
|
+
List the commands and environments you tested, with results. Identify skipped or unverified integrations separately.
|
|
12
|
+
|
|
13
|
+
## Compatibility and documentation
|
|
14
|
+
|
|
15
|
+
Describe configuration, record/contract or packaging changes and any upgrade consequences. Link updated documentation. Omit this section if it does not apply.
|
|
16
|
+
|
|
17
|
+
<!-- Follow CONTRIBUTING.md. Keep unrelated changes, generated output, .agentagon state and credentials out of the diff. For a suspected vulnerability, report privately to security@agentagon.ai before opening a public PR. -->
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: CodeQL
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
schedule:
|
|
7
|
+
- cron: '41 6 * * 1'
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
analyze:
|
|
14
|
+
name: CodeQL (${{ matrix.language }})
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
security-events: write
|
|
19
|
+
strategy:
|
|
20
|
+
fail-fast: false
|
|
21
|
+
matrix:
|
|
22
|
+
language: [python, javascript-typescript]
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
25
|
+
with:
|
|
26
|
+
persist-credentials: false
|
|
27
|
+
- uses: github/codeql-action/init@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4
|
|
28
|
+
with:
|
|
29
|
+
languages: ${{ matrix.language }}
|
|
30
|
+
build-mode: none
|
|
31
|
+
- uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
name: Website checks and deployment
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
paths:
|
|
6
|
+
- 'website/**'
|
|
7
|
+
- 'docs/**'
|
|
8
|
+
- 'docs_theme/**'
|
|
9
|
+
- 'mkdocs.yml'
|
|
10
|
+
- 'requirements-docs.txt'
|
|
11
|
+
- 'THIRD_PARTY_NOTICES.txt'
|
|
12
|
+
- 'scripts/docs_links.py'
|
|
13
|
+
- 'scripts/build_site.py'
|
|
14
|
+
- 'scripts/check_site.py'
|
|
15
|
+
- 'tests/test_site.py'
|
|
16
|
+
- '.github/workflows/docs.yml'
|
|
17
|
+
pull_request:
|
|
18
|
+
types: [opened, synchronize, reopened, closed]
|
|
19
|
+
paths:
|
|
20
|
+
- 'website/**'
|
|
21
|
+
- 'docs/**'
|
|
22
|
+
- 'docs_theme/**'
|
|
23
|
+
- 'mkdocs.yml'
|
|
24
|
+
- 'requirements-docs.txt'
|
|
25
|
+
- 'THIRD_PARTY_NOTICES.txt'
|
|
26
|
+
- 'scripts/docs_links.py'
|
|
27
|
+
- 'scripts/build_site.py'
|
|
28
|
+
- 'scripts/check_site.py'
|
|
29
|
+
- 'tests/test_site.py'
|
|
30
|
+
- '.github/workflows/docs.yml'
|
|
31
|
+
workflow_dispatch:
|
|
32
|
+
|
|
33
|
+
permissions:
|
|
34
|
+
contents: read
|
|
35
|
+
|
|
36
|
+
concurrency:
|
|
37
|
+
group: website-${{ github.event.pull_request.number || github.ref }}
|
|
38
|
+
cancel-in-progress: true
|
|
39
|
+
|
|
40
|
+
jobs:
|
|
41
|
+
build:
|
|
42
|
+
if: github.event.action != 'closed'
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
46
|
+
with:
|
|
47
|
+
persist-credentials: false
|
|
48
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
49
|
+
with:
|
|
50
|
+
python-version: '3.13'
|
|
51
|
+
- uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
|
|
52
|
+
with:
|
|
53
|
+
node-version: '22'
|
|
54
|
+
- run: python -m pip install -r requirements-docs.txt 'pytest>=8,<10'
|
|
55
|
+
- name: Build and check website
|
|
56
|
+
env:
|
|
57
|
+
IS_PREVIEW: ${{ github.ref != 'refs/heads/main' }}
|
|
58
|
+
run: |
|
|
59
|
+
if [ "$IS_PREVIEW" = true ]; then
|
|
60
|
+
python scripts/build_site.py --preview
|
|
61
|
+
else
|
|
62
|
+
python scripts/build_site.py
|
|
63
|
+
fi
|
|
64
|
+
node --check website/assets/site.js
|
|
65
|
+
node --check website/assets/theme-init.js
|
|
66
|
+
python -m pytest tests/test_site.py --noconftest -q
|
|
67
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
68
|
+
with:
|
|
69
|
+
name: website
|
|
70
|
+
path: site/
|
|
71
|
+
retention-days: 7
|
|
72
|
+
- name: Deploy production or trusted PR preview
|
|
73
|
+
if: >-
|
|
74
|
+
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
|
|
75
|
+
(github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main') ||
|
|
76
|
+
(github.event_name == 'pull_request' &&
|
|
77
|
+
github.event.pull_request.head.repo.full_name == github.repository)
|
|
78
|
+
uses: Azure/static-web-apps-deploy@4d27395796ac319302594769cfe812bd207490b1 # v1
|
|
79
|
+
with:
|
|
80
|
+
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
|
|
81
|
+
action: upload
|
|
82
|
+
app_location: site
|
|
83
|
+
output_location: ''
|
|
84
|
+
skip_app_build: true
|
|
85
|
+
|
|
86
|
+
close-preview:
|
|
87
|
+
if: >-
|
|
88
|
+
github.event_name == 'pull_request' && github.event.action == 'closed' &&
|
|
89
|
+
github.event.pull_request.head.repo.full_name == github.repository
|
|
90
|
+
runs-on: ubuntu-latest
|
|
91
|
+
steps:
|
|
92
|
+
- uses: Azure/static-web-apps-deploy@4d27395796ac319302594769cfe812bd207490b1 # v1
|
|
93
|
+
with:
|
|
94
|
+
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
|
|
95
|
+
action: close
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ['v*']
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
tag:
|
|
9
|
+
description: Existing vX.Y.Z tag to publish or resume
|
|
10
|
+
required: true
|
|
11
|
+
type: string
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
concurrency:
|
|
17
|
+
group: release-${{ inputs.tag || github.ref_name }}
|
|
18
|
+
cancel-in-progress: false
|
|
19
|
+
|
|
20
|
+
env:
|
|
21
|
+
RELEASE_TAG: ${{ inputs.tag || github.ref_name }}
|
|
22
|
+
AGENTAGON_TELEMETRY_DISABLED: '1'
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
build:
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
29
|
+
with:
|
|
30
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
31
|
+
fetch-depth: 0
|
|
32
|
+
persist-credentials: false
|
|
33
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
34
|
+
with:
|
|
35
|
+
python-version: '3.13'
|
|
36
|
+
- name: Require matching versions and successful checks on protected main
|
|
37
|
+
env:
|
|
38
|
+
GH_TOKEN: ${{ github.token }}
|
|
39
|
+
run: python scripts/release.py gate --tag "$RELEASE_TAG" --repository "$GITHUB_REPOSITORY"
|
|
40
|
+
- name: Reuse staged release files when resuming
|
|
41
|
+
id: reuse
|
|
42
|
+
env:
|
|
43
|
+
GH_TOKEN: ${{ github.token }}
|
|
44
|
+
run: |
|
|
45
|
+
gh api "repos/$GITHUB_REPOSITORY/releases?per_page=100" > "$RUNNER_TEMP/releases.json"
|
|
46
|
+
if python -c 'import json, os, sys; sys.exit(not any(r["tag_name"] == os.environ["RELEASE_TAG"] for r in json.load(open(sys.argv[1]))))' "$RUNNER_TEMP/releases.json"; then
|
|
47
|
+
gh release download "$RELEASE_TAG" --repo "$GITHUB_REPOSITORY" --dir dist \
|
|
48
|
+
--pattern '*.whl' --pattern '*.tar.gz' --pattern SHA256SUMS --pattern RELEASE_NOTES.md
|
|
49
|
+
python scripts/release.py verify --tag "$RELEASE_TAG"
|
|
50
|
+
echo 'found=true' >> "$GITHUB_OUTPUT"
|
|
51
|
+
fi
|
|
52
|
+
- name: Build and validate one set of distribution files
|
|
53
|
+
if: steps.reuse.outputs.found != 'true'
|
|
54
|
+
run: |
|
|
55
|
+
python -m pip install 'build>=1.2' 'twine>=6,<7' -r requirements-docs.txt
|
|
56
|
+
python -m build
|
|
57
|
+
python -m twine check --strict dist/*
|
|
58
|
+
python scripts/release.py manifest --tag "$RELEASE_TAG"
|
|
59
|
+
cp "docs/releases/${RELEASE_TAG#v}.md" dist/RELEASE_NOTES.md
|
|
60
|
+
printf '\nSource revision: `%s`\n' "$(git rev-parse HEAD)" >> dist/RELEASE_NOTES.md
|
|
61
|
+
python -m venv "$RUNNER_TEMP/release-wheel"
|
|
62
|
+
"$RUNNER_TEMP/release-wheel/bin/python" -m pip install dist/*.whl
|
|
63
|
+
cd "$RUNNER_TEMP"
|
|
64
|
+
"$RUNNER_TEMP/release-wheel/bin/python" "$GITHUB_WORKSPACE/scripts/check_installed.py"
|
|
65
|
+
"$RUNNER_TEMP/release-wheel/bin/python" "$GITHUB_WORKSPACE/examples/local-audit/demo.py"
|
|
66
|
+
mkdir release-source
|
|
67
|
+
tar -xzf "$GITHUB_WORKSPACE/dist/agentagon-${RELEASE_TAG#v}.tar.gz" -C release-source
|
|
68
|
+
cd "release-source/agentagon-${RELEASE_TAG#v}"
|
|
69
|
+
python scripts/build_site.py
|
|
70
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
71
|
+
with:
|
|
72
|
+
name: release-packages
|
|
73
|
+
path: dist/
|
|
74
|
+
retention-days: 90
|
|
75
|
+
if-no-files-found: error
|
|
76
|
+
|
|
77
|
+
stage:
|
|
78
|
+
needs: build
|
|
79
|
+
runs-on: ubuntu-latest
|
|
80
|
+
permissions:
|
|
81
|
+
contents: write
|
|
82
|
+
steps:
|
|
83
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
84
|
+
with:
|
|
85
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
86
|
+
persist-credentials: false
|
|
87
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
88
|
+
with:
|
|
89
|
+
python-version: '3.13'
|
|
90
|
+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
91
|
+
with:
|
|
92
|
+
name: release-packages
|
|
93
|
+
path: dist/
|
|
94
|
+
- name: Preserve reviewed files in a draft GitHub release
|
|
95
|
+
env:
|
|
96
|
+
GH_TOKEN: ${{ github.token }}
|
|
97
|
+
run: python scripts/release.py stage --tag "$RELEASE_TAG" --repository "$GITHUB_REPOSITORY"
|
|
98
|
+
|
|
99
|
+
pypi:
|
|
100
|
+
needs: stage
|
|
101
|
+
runs-on: ubuntu-latest
|
|
102
|
+
environment:
|
|
103
|
+
name: pypi
|
|
104
|
+
url: https://pypi.org/p/agentagon
|
|
105
|
+
permissions:
|
|
106
|
+
contents: read
|
|
107
|
+
id-token: write
|
|
108
|
+
steps:
|
|
109
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
110
|
+
with:
|
|
111
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
112
|
+
persist-credentials: false
|
|
113
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
114
|
+
with:
|
|
115
|
+
python-version: '3.13'
|
|
116
|
+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
117
|
+
with:
|
|
118
|
+
name: release-packages
|
|
119
|
+
path: dist/
|
|
120
|
+
- name: Verify existing PyPI hashes and select only missing files
|
|
121
|
+
id: pending
|
|
122
|
+
run: |
|
|
123
|
+
python scripts/release.py pypi --tag "$RELEASE_TAG"
|
|
124
|
+
if [ -n "$(ls -A pending)" ]; then echo 'upload=true' >> "$GITHUB_OUTPUT"; fi
|
|
125
|
+
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
126
|
+
if: steps.pending.outputs.upload == 'true'
|
|
127
|
+
with:
|
|
128
|
+
packages-dir: pending/
|
|
129
|
+
- name: Verify every published PyPI digest
|
|
130
|
+
run: |
|
|
131
|
+
python scripts/release.py pypi --tag "$RELEASE_TAG" --pending verify-published
|
|
132
|
+
test -z "$(ls -A verify-published)"
|
|
133
|
+
|
|
134
|
+
publish:
|
|
135
|
+
needs: pypi
|
|
136
|
+
runs-on: ubuntu-latest
|
|
137
|
+
permissions:
|
|
138
|
+
contents: write
|
|
139
|
+
steps:
|
|
140
|
+
- name: Publish the staged GitHub release
|
|
141
|
+
env:
|
|
142
|
+
GH_TOKEN: ${{ github.token }}
|
|
143
|
+
run: gh release edit "$RELEASE_TAG" --repo "$GITHUB_REPOSITORY" --draft=false --latest
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: Security checks
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
schedule:
|
|
7
|
+
- cron: '23 6 * * 1'
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
secrets:
|
|
15
|
+
name: Secret scan
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 0
|
|
21
|
+
persist-credentials: false
|
|
22
|
+
- name: Install verified Gitleaks CLI
|
|
23
|
+
run: |
|
|
24
|
+
curl --fail --silent --show-error --location --output "$RUNNER_TEMP/gitleaks.tar.gz" \
|
|
25
|
+
https://github.com/gitleaks/gitleaks/releases/download/v8.30.1/gitleaks_8.30.1_linux_x64.tar.gz
|
|
26
|
+
echo "551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb $RUNNER_TEMP/gitleaks.tar.gz" | sha256sum --check
|
|
27
|
+
tar -xzf "$RUNNER_TEMP/gitleaks.tar.gz" -C "$RUNNER_TEMP" gitleaks
|
|
28
|
+
- name: Scan history and current files
|
|
29
|
+
run: |
|
|
30
|
+
python3 scripts/check_secret_scan.py "$RUNNER_TEMP/gitleaks"
|
|
31
|
+
"$RUNNER_TEMP/gitleaks" git . --log-opts=--all --redact --no-banner
|
|
32
|
+
"$RUNNER_TEMP/gitleaks" dir . --redact --no-banner
|
|
33
|
+
|
|
34
|
+
dependencies:
|
|
35
|
+
name: Dependency audit
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
steps:
|
|
38
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
39
|
+
with:
|
|
40
|
+
persist-credentials: false
|
|
41
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
42
|
+
with:
|
|
43
|
+
python-version: '3.13'
|
|
44
|
+
- run: python -m pip install --upgrade pip
|
|
45
|
+
- run: python -m pip install '.[dev,browser,e2b]' -r requirements-docs.txt 'pip-audit==2.10.1'
|
|
46
|
+
- run: python -m pip_audit --local --progress-spinner off
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
name: Audit checks
|
|
2
|
+
|
|
3
|
+
on: [push, pull_request]
|
|
4
|
+
|
|
5
|
+
permissions:
|
|
6
|
+
contents: read
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ${{ matrix.os }}
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
include:
|
|
14
|
+
- os: ubuntu-latest
|
|
15
|
+
python-version: '3.12'
|
|
16
|
+
- os: ubuntu-latest
|
|
17
|
+
python-version: '3.13'
|
|
18
|
+
- os: macos-latest
|
|
19
|
+
python-version: '3.13'
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
22
|
+
with:
|
|
23
|
+
persist-credentials: false
|
|
24
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
25
|
+
with:
|
|
26
|
+
python-version: ${{ matrix.python-version }}
|
|
27
|
+
- uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
|
|
28
|
+
with:
|
|
29
|
+
node-version: '22'
|
|
30
|
+
- run: python -m pip install '.[dev]'
|
|
31
|
+
- run: python -m ruff check src tests skills/eval/helpers scripts examples
|
|
32
|
+
- run: python -m ruff format --check src tests skills/eval/helpers scripts examples
|
|
33
|
+
- name: Check shipped JavaScript and shell syntax
|
|
34
|
+
run: |
|
|
35
|
+
for script in src/agentagon/dashboard_assets/*.js skills/eval/helpers/*.cjs; do
|
|
36
|
+
node --check "$script"
|
|
37
|
+
done
|
|
38
|
+
sh -n scripts/install.sh
|
|
39
|
+
- run: python -m pytest -q
|
|
40
|
+
- run: python -m build
|
|
41
|
+
- name: Install and exercise the built wheel outside the checkout
|
|
42
|
+
working-directory: ${{ runner.temp }}
|
|
43
|
+
run: |
|
|
44
|
+
python -m venv "$RUNNER_TEMP/agentagon-wheel"
|
|
45
|
+
"$RUNNER_TEMP/agentagon-wheel/bin/python" -m pip install "$GITHUB_WORKSPACE"/dist/*.whl
|
|
46
|
+
"$RUNNER_TEMP/agentagon-wheel/bin/python" "$GITHUB_WORKSPACE/scripts/check_installed.py"
|
|
47
|
+
"$RUNNER_TEMP/agentagon-wheel/bin/python" "$GITHUB_WORKSPACE/examples/local-audit/demo.py"
|
|
48
|
+
|
|
49
|
+
browser:
|
|
50
|
+
runs-on: ubuntu-latest
|
|
51
|
+
steps:
|
|
52
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
53
|
+
with:
|
|
54
|
+
persist-credentials: false
|
|
55
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
56
|
+
with:
|
|
57
|
+
python-version: '3.13'
|
|
58
|
+
- run: python -m pip install '.[dev,browser]'
|
|
59
|
+
- run: python -m playwright install --with-deps chromium
|
|
60
|
+
- run: python -m pytest tests/test_dashboard_browser.py -q
|
|
61
|
+
|
|
62
|
+
source-package:
|
|
63
|
+
name: Source package and website
|
|
64
|
+
runs-on: ubuntu-latest
|
|
65
|
+
steps:
|
|
66
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
67
|
+
with:
|
|
68
|
+
persist-credentials: false
|
|
69
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
70
|
+
with:
|
|
71
|
+
python-version: '3.13'
|
|
72
|
+
- run: python -m pip install '.[dev]' 'twine>=6,<7' -r requirements-docs.txt
|
|
73
|
+
- run: python -m build && python -m twine check --strict dist/*
|
|
74
|
+
- name: Build the website from the extracted source package
|
|
75
|
+
run: |
|
|
76
|
+
mkdir "$RUNNER_TEMP/source-package"
|
|
77
|
+
tar -xzf dist/*.tar.gz -C "$RUNNER_TEMP/source-package"
|
|
78
|
+
cd "$RUNNER_TEMP"/source-package/agentagon-*
|
|
79
|
+
python scripts/build_site.py
|
|
80
|
+
python -m pytest tests/test_site.py --noconftest -q
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
.agentagon/
|
|
2
|
+
.venv/
|
|
3
|
+
.venv-docs/
|
|
4
|
+
site/
|
|
5
|
+
__pycache__/
|
|
6
|
+
*.py[cod]
|
|
7
|
+
.pytest_cache/
|
|
8
|
+
.ruff_cache/
|
|
9
|
+
*.egg-info/
|
|
10
|
+
build/
|
|
11
|
+
dist/
|
|
12
|
+
.gstack/
|
|
13
|
+
.env
|
|
14
|
+
.env.*
|
|
15
|
+
!.env.example
|
|
16
|
+
*.pem
|
|
17
|
+
*.key
|
|
18
|
+
*.p12
|
|
19
|
+
*.pfx
|
|
20
|
+
id_rsa
|
|
21
|
+
id_ed25519
|
|
22
|
+
.DS_Store
|
|
23
|
+
.worktrees/
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
title = "Agentagon secret scanning"
|
|
2
|
+
[extend]
|
|
3
|
+
useDefault = true
|
|
4
|
+
|
|
5
|
+
[[rules]]
|
|
6
|
+
id = "generic-api-key"
|
|
7
|
+
|
|
8
|
+
[[rules.allowlists]]
|
|
9
|
+
description = "Exact public PostHog ingestion token in its shipped default"
|
|
10
|
+
condition = "AND"
|
|
11
|
+
paths = ['''^src/agentagon/usage\.py$''']
|
|
12
|
+
regexTarget = "secret"
|
|
13
|
+
regexes = ['''^phc_CUB2gYkuZX7TsLaJmTxqUg7iCbuitCxkYW4LVgcy9HKn$''']
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Repository guidance
|
|
2
|
+
|
|
3
|
+
## Authoritative references
|
|
4
|
+
|
|
5
|
+
| Need | Source |
|
|
6
|
+
|---|---|
|
|
7
|
+
| Setup and contribution workflow | [CONTRIBUTING.md](CONTRIBUTING.md) |
|
|
8
|
+
| Usage and configuration | [README.md](README.md), [user guides](docs/README.md) |
|
|
9
|
+
| Architecture and behavioral boundaries | [Product decisions](docs/contributing/product-decisions.md) |
|
|
10
|
+
| Source and representative tests | [Implementation map](docs/contributing/capabilities.md) |
|
|
11
|
+
| Accepted records and instrumentation | [Versioned contracts](contracts/v1/), [task evidence](docs/task-evidence.md) |
|
|
12
|
+
| Packaging and validation | [pyproject.toml](pyproject.toml), [MANIFEST.in](MANIFEST.in), [CI](.github/workflows/tests.yml), [extended checks](docs/contributing/README.md) |
|
|
13
|
+
|
|
14
|
+
## Commands
|
|
15
|
+
|
|
16
|
+
- Use Python 3.12+, Git and Node.js 22 on macOS or Linux; run commands from the repository root with the virtual environment active.
|
|
17
|
+
- Substitute changed Python paths for focused lint/format checks; the table includes the full CI scope.
|
|
18
|
+
|
|
19
|
+
| Task | Command |
|
|
20
|
+
|---|---|
|
|
21
|
+
| Development setup | `python3 -m venv .venv && . .venv/bin/activate && python -m pip install -e '.[dev]'` |
|
|
22
|
+
| Focused test example | `python -m pytest tests/test_dashboard.py -q` |
|
|
23
|
+
| Full suite | `python -m pytest -q` |
|
|
24
|
+
| Lint | `python -m ruff check src tests skills/eval/helpers scripts examples` |
|
|
25
|
+
| Format check | `python -m ruff format --check src tests skills/eval/helpers scripts examples` |
|
|
26
|
+
| Browser setup and tests | `python -m pip install -e '.[dev,browser]' && python -m playwright install chromium && python -m pytest tests/test_dashboard_browser.py -q` |
|
|
27
|
+
| JavaScript syntax | `for script in src/agentagon/dashboard_assets/*.js skills/eval/helpers/*.cjs; do node --check "$script"; done` |
|
|
28
|
+
| Installer syntax | `sh -n scripts/install.sh` |
|
|
29
|
+
| Build sdist and wheel | `python -m build` |
|
|
30
|
+
|
|
31
|
+
- Validate packaging changes by installing the built wheel in a fresh environment outside the checkout using the [packaging checks](docs/contributing/README.md#packaging-checks).
|
|
32
|
+
- Local HTTP/browser tests need loopback access; require authorization before enabling [native registration or live SSH/E2B tests](docs/contributing/README.md#optional-integration-checks), and report skips separately from verified results.
|
|
33
|
+
|
|
34
|
+
## Project boundaries
|
|
35
|
+
|
|
36
|
+
- Keep model reasoning, candidate edits and independent reviews in the coding-agent host; Python handles evidence, validation and bounded execution.
|
|
37
|
+
- Preserve review scope over captured changes and the fixed audit rubric; full audits may inspect uncommitted or non-Git directories, while evaluation/fix workflows require clean committed inputs.
|
|
38
|
+
- Preserve frozen benchmark comparisons, failed/dominated experiment evidence and user choice among verified alternatives; selection, publication, merge and deployment remain separate actions.
|
|
39
|
+
- Keep dashboard reads within one checkout's display projections; controls remain opt-in with exact-origin/session validation, and reads must not execute work or reconnect to runners.
|
|
40
|
+
- Preserve explicit invocation > project override > user default precedence; store credential references rather than secret values.
|
|
41
|
+
- Optional [Intelligence](docs/intelligence.md) uses separately prepared privacy-safe context/focus; never automatically upload raw code, traces, credentials or the saved audit goal.
|
|
42
|
+
- Keep the remote worker and copyable Python event helper compatible with Python 3.10 and standard-library-only execution.
|
|
43
|
+
|
|
44
|
+
## Generated files and private state
|
|
45
|
+
|
|
46
|
+
- Regenerate build output and caches from source; do not commit `.venv/`, `build/`, `dist/`, `*.egg-info/`, `__pycache__/`, `.pytest_cache/` or `.ruff_cache/` (see [.gitignore](.gitignore)).
|
|
47
|
+
- Keep `.agentagon/` private and ignored; use CLI operations for saved state, reports and immutable evidence. Edit prepared host response/templates as workflow inputs, without rewriting frozen records or checksum-addressed artifacts.
|
|
48
|
+
- Treat `contracts/`, `signals/`, `skills/` and `src/agentagon/dashboard_assets/` as shipped source, not disposable generated output; keep packaging declarations and resource references aligned when changing them.
|
|
49
|
+
|
|
50
|
+
## Documentation and commits
|
|
51
|
+
|
|
52
|
+
- Lead docs with the decision, outcome or action; use plain words, short paragraphs and concrete examples, without filler or unnecessary qualifiers.
|
|
53
|
+
- Keep each doc focused and each detailed rule in one authoritative place, linking elsewhere instead of duplicating it.
|
|
54
|
+
- Preserve requirements, evidence, tradeoffs and uncertainty; use enough detail to prevent mistakes rather than imposing arbitrary length limits.
|
|
55
|
+
- Distinguish proposals, decisions, implemented behavior and verified results; put dated test counts and environment-specific limits in PR/release records.
|
|
56
|
+
- Preserve unrelated work and history; do not infer authorization to commit, publish, merge or deploy from a documentation workflow.
|
|
57
|
+
- When committing, follow [Conventional Commits 1.0.0](https://www.conventionalcommits.org/en/v1.0.0/): one logical change, an imperative summary without a trailing period, and a scope only when useful.
|
|
58
|
+
- Use `feat` for features and `fix` for bugs; other types are allowed. Mark breaking changes with `!` after the type/scope or a `BREAKING CHANGE:` footer.
|
|
59
|
+
- Add a commit body when needed to explain the previous problem, why the change is necessary, and tradeoffs or consequences the diff cannot explain.
|