autoweave 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.
- autoweave-0.1.0/.dockerignore +10 -0
- autoweave-0.1.0/.editorconfig +22 -0
- autoweave-0.1.0/.env.example +52 -0
- autoweave-0.1.0/.github/CODEOWNERS +10 -0
- autoweave-0.1.0/.github/FUNDING.yml +3 -0
- autoweave-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +58 -0
- autoweave-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- autoweave-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +38 -0
- autoweave-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +28 -0
- autoweave-0.1.0/.github/dependabot.yml +24 -0
- autoweave-0.1.0/.github/workflows/ci.yml +122 -0
- autoweave-0.1.0/.github/workflows/release.yml +44 -0
- autoweave-0.1.0/.github/workflows/security.yml +58 -0
- autoweave-0.1.0/.gitignore +57 -0
- autoweave-0.1.0/.pre-commit-config.yaml +24 -0
- autoweave-0.1.0/.python-version +1 -0
- autoweave-0.1.0/CODE_OF_CONDUCT.md +131 -0
- autoweave-0.1.0/CONTRIBUTING.md +268 -0
- autoweave-0.1.0/DEVELOPMENT.md +299 -0
- autoweave-0.1.0/Dockerfile +23 -0
- autoweave-0.1.0/LICENSE +21 -0
- autoweave-0.1.0/Makefile +44 -0
- autoweave-0.1.0/PKG-INFO +365 -0
- autoweave-0.1.0/README.md +321 -0
- autoweave-0.1.0/SECURITY.md +45 -0
- autoweave-0.1.0/TESTING.md +101 -0
- autoweave-0.1.0/apps/__init__.py +1 -0
- autoweave-0.1.0/apps/cli/__init__.py +1 -0
- autoweave-0.1.0/apps/cli/bootstrap.py +140 -0
- autoweave-0.1.0/apps/cli/main.py +558 -0
- autoweave-0.1.0/apps/cli/validation.py +144 -0
- autoweave-0.1.0/autoweave/__init__.py +16 -0
- autoweave-0.1.0/autoweave/approvals/__init__.py +5 -0
- autoweave-0.1.0/autoweave/approvals/service.py +59 -0
- autoweave-0.1.0/autoweave/artifacts/__init__.py +15 -0
- autoweave-0.1.0/autoweave/artifacts/filesystem.py +130 -0
- autoweave-0.1.0/autoweave/artifacts/handles.py +22 -0
- autoweave-0.1.0/autoweave/artifacts/registry.py +174 -0
- autoweave-0.1.0/autoweave/celery_app.py +7 -0
- autoweave-0.1.0/autoweave/celery_queue.py +445 -0
- autoweave-0.1.0/autoweave/celery_tasks.py +83 -0
- autoweave-0.1.0/autoweave/compiler/__init__.py +11 -0
- autoweave-0.1.0/autoweave/compiler/loader.py +61 -0
- autoweave-0.1.0/autoweave/compiler/openhands.py +80 -0
- autoweave-0.1.0/autoweave/config_models.py +116 -0
- autoweave-0.1.0/autoweave/context/__init__.py +5 -0
- autoweave-0.1.0/autoweave/context/service.py +119 -0
- autoweave-0.1.0/autoweave/events/__init__.py +21 -0
- autoweave-0.1.0/autoweave/events/local.py +75 -0
- autoweave-0.1.0/autoweave/events/redaction.py +52 -0
- autoweave-0.1.0/autoweave/events/schema.py +133 -0
- autoweave-0.1.0/autoweave/events/service.py +113 -0
- autoweave-0.1.0/autoweave/events/stream.py +94 -0
- autoweave-0.1.0/autoweave/exceptions.py +86 -0
- autoweave-0.1.0/autoweave/graph/__init__.py +30 -0
- autoweave-0.1.0/autoweave/graph/neo4j_backend.py +147 -0
- autoweave-0.1.0/autoweave/graph/neo4j_projection.py +212 -0
- autoweave-0.1.0/autoweave/graph/projection.py +183 -0
- autoweave-0.1.0/autoweave/local_runtime.py +2926 -0
- autoweave-0.1.0/autoweave/memory/__init__.py +5 -0
- autoweave-0.1.0/autoweave/memory/store.py +81 -0
- autoweave-0.1.0/autoweave/models.py +426 -0
- autoweave-0.1.0/autoweave/monitoring/__init__.py +20 -0
- autoweave-0.1.0/autoweave/monitoring/contracts.py +123 -0
- autoweave-0.1.0/autoweave/monitoring/dashboard_page.py +3863 -0
- autoweave-0.1.0/autoweave/monitoring/service.py +1339 -0
- autoweave-0.1.0/autoweave/monitoring/web.py +145 -0
- autoweave-0.1.0/autoweave/observability/__init__.py +30 -0
- autoweave-0.1.0/autoweave/observability/debug.py +34 -0
- autoweave-0.1.0/autoweave/observability/local.py +176 -0
- autoweave-0.1.0/autoweave/observability/metrics.py +50 -0
- autoweave-0.1.0/autoweave/observability/service.py +61 -0
- autoweave-0.1.0/autoweave/observability/tracing.py +54 -0
- autoweave-0.1.0/autoweave/orchestration/__init__.py +7 -0
- autoweave-0.1.0/autoweave/orchestration/graph.py +55 -0
- autoweave-0.1.0/autoweave/orchestration/scheduler.py +55 -0
- autoweave-0.1.0/autoweave/orchestration/service.py +165 -0
- autoweave-0.1.0/autoweave/orchestration/state.py +517 -0
- autoweave-0.1.0/autoweave/project.py +17 -0
- autoweave-0.1.0/autoweave/protocols.py +156 -0
- autoweave-0.1.0/autoweave/routing/__init__.py +5 -0
- autoweave-0.1.0/autoweave/routing/policy.py +165 -0
- autoweave-0.1.0/autoweave/settings.py +430 -0
- autoweave-0.1.0/autoweave/storage/__init__.py +64 -0
- autoweave-0.1.0/autoweave/storage/coordination.py +336 -0
- autoweave-0.1.0/autoweave/storage/durable.py +816 -0
- autoweave-0.1.0/autoweave/storage/postgres.py +1030 -0
- autoweave-0.1.0/autoweave/storage/repositories.py +295 -0
- autoweave-0.1.0/autoweave/storage/tasks.py +32 -0
- autoweave-0.1.0/autoweave/storage/wiring.py +151 -0
- autoweave-0.1.0/autoweave/templates/__init__.py +1 -0
- autoweave-0.1.0/autoweave/templates/sample_project.py +503 -0
- autoweave-0.1.0/autoweave/types.py +18 -0
- autoweave-0.1.0/autoweave/workers/__init__.py +27 -0
- autoweave-0.1.0/autoweave/workers/runtime.py +900 -0
- autoweave-0.1.0/autoweave/workflows/__init__.py +19 -0
- autoweave-0.1.0/autoweave/workflows/spec.py +323 -0
- autoweave-0.1.0/build_backend.py +206 -0
- autoweave-0.1.0/docker-compose.yml +142 -0
- autoweave-0.1.0/docs/ARCHITECTURE.md +128 -0
- autoweave-0.1.0/docs/DEPLOYMENT.md +50 -0
- autoweave-0.1.0/docs/RELEASE.md +49 -0
- autoweave-0.1.0/docs/autoweave_diagrams_source.md +247 -0
- autoweave-0.1.0/docs/autoweave_high_level_architecture.md +688 -0
- autoweave-0.1.0/docs/autoweave_implementation_spec.md +1149 -0
- autoweave-0.1.0/docs/commit_push_guidelines.md +98 -0
- autoweave-0.1.0/pyproject.toml +162 -0
- autoweave-0.1.0/scripts/health_report.py +126 -0
- autoweave-0.1.0/scripts/smoke_test.sh +40 -0
- autoweave-0.1.0/tests/conftest.py +25 -0
- autoweave-0.1.0/tests/test_celery_queue.py +255 -0
- autoweave-0.1.0/tests/test_cli.py +427 -0
- autoweave-0.1.0/tests/test_infra.py +98 -0
- autoweave-0.1.0/tests/test_local_observability.py +99 -0
- autoweave-0.1.0/tests/test_local_runtime.py +2026 -0
- autoweave-0.1.0/tests/test_monitoring.py +741 -0
- autoweave-0.1.0/tests/test_observability.py +109 -0
- autoweave-0.1.0/tests/test_orchestration.py +279 -0
- autoweave-0.1.0/tests/test_packaging.py +204 -0
- autoweave-0.1.0/tests/test_public_package.py +21 -0
- autoweave-0.1.0/tests/test_runtime.py +501 -0
- autoweave-0.1.0/tests/test_settings.py +225 -0
- autoweave-0.1.0/tests/test_shared_contracts.py +69 -0
- autoweave-0.1.0/tests/test_storage_context.py +431 -0
- autoweave-0.1.0/tests/test_storage_durable.py +609 -0
- autoweave-0.1.0/tests/test_storage_service_wiring.py +341 -0
- autoweave-0.1.0/tests/test_templates.py +31 -0
- autoweave-0.1.0/tests/test_ui.py +69 -0
- autoweave-0.1.0/uv.lock +1938 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# https://editorconfig.org
|
|
2
|
+
root = true
|
|
3
|
+
|
|
4
|
+
[*]
|
|
5
|
+
indent_style = space
|
|
6
|
+
indent_size = 4
|
|
7
|
+
end_of_line = lf
|
|
8
|
+
charset = utf-8
|
|
9
|
+
trim_trailing_whitespace = true
|
|
10
|
+
insert_final_newline = true
|
|
11
|
+
|
|
12
|
+
[*.{yml,yaml}]
|
|
13
|
+
indent_size = 2
|
|
14
|
+
|
|
15
|
+
[*.{json,toml}]
|
|
16
|
+
indent_size = 2
|
|
17
|
+
|
|
18
|
+
[*.md]
|
|
19
|
+
trim_trailing_whitespace = false
|
|
20
|
+
|
|
21
|
+
[Makefile]
|
|
22
|
+
indent_style = tab
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Copy values that are safe for local development into `.env.local`.
|
|
2
|
+
# Keep secrets and service-account files out of git.
|
|
3
|
+
# `docker compose up -d` reads `.env.local` for the OpenHands service via `docker-compose.yml`.
|
|
4
|
+
|
|
5
|
+
# Vertex AI canonical runtime settings
|
|
6
|
+
VERTEXAI_PROJECT=
|
|
7
|
+
# Gemini 3 preview models are currently available on Vertex via the global endpoint.
|
|
8
|
+
VERTEXAI_LOCATION=global
|
|
9
|
+
VERTEXAI_SERVICE_ACCOUNT_FILE=./config/secrets/vertex_service_account.json
|
|
10
|
+
|
|
11
|
+
# Optional local compatibility alias if a worker process reads it directly.
|
|
12
|
+
# The runtime compiler should normally materialize this from VERTEXAI_SERVICE_ACCOUNT_FILE.
|
|
13
|
+
GOOGLE_APPLICATION_CREDENTIALS=./config/secrets/vertex_service_account.json
|
|
14
|
+
|
|
15
|
+
# Canonical storage and queue settings
|
|
16
|
+
POSTGRES_URL=
|
|
17
|
+
REDIS_URL=redis://127.0.0.1:6379/0
|
|
18
|
+
NEO4J_URL=
|
|
19
|
+
NEO4J_USERNAME=
|
|
20
|
+
NEO4J_PASSWORD=
|
|
21
|
+
|
|
22
|
+
# Artifact and observability backends
|
|
23
|
+
ARTIFACT_STORE_URL=file://./var/artifacts
|
|
24
|
+
OTEL_EXPORTER_OTLP_ENDPOINT=
|
|
25
|
+
AUTOWEAVE_METRICS_EXPORTER=
|
|
26
|
+
|
|
27
|
+
# OpenHands remote worker runtime
|
|
28
|
+
OPENHANDS_AGENT_SERVER_BASE_URL=http://127.0.0.1:8000
|
|
29
|
+
OPENHANDS_AGENT_SERVER_API_KEY=
|
|
30
|
+
OPENHANDS_WORKER_TIMEOUT_SECONDS=1800
|
|
31
|
+
# Leave this unset to derive a poll budget from OPENHANDS_WORKER_TIMEOUT_SECONDS.
|
|
32
|
+
AUTOWEAVE_OPENHANDS_POLL_TIMEOUT_SECONDS=
|
|
33
|
+
AUTOWEAVE_OPENHANDS_POLL_INTERVAL_SECONDS=1
|
|
34
|
+
|
|
35
|
+
# AutoWeave runtime defaults
|
|
36
|
+
AUTOWEAVE_DEFAULT_WORKFLOW=configs/workflows/team.workflow.yaml
|
|
37
|
+
AUTOWEAVE_RUNTIME_CONFIG=configs/runtime/runtime.yaml
|
|
38
|
+
AUTOWEAVE_STORAGE_CONFIG=configs/runtime/storage.yaml
|
|
39
|
+
AUTOWEAVE_VERTEX_CONFIG=configs/runtime/vertex.yaml
|
|
40
|
+
AUTOWEAVE_OBSERVABILITY_CONFIG=configs/runtime/observability.yaml
|
|
41
|
+
# Optional: force one named Vertex profile such as `fast`, `planner`, or `legacy_balanced`.
|
|
42
|
+
AUTOWEAVE_VERTEX_PROFILE_OVERRIDE=
|
|
43
|
+
AUTOWEAVE_CANONICAL_BACKEND=postgres
|
|
44
|
+
AUTOWEAVE_GRAPH_BACKEND=neo4j
|
|
45
|
+
AUTOWEAVE_AUTONOMY_LEVEL=medium
|
|
46
|
+
AUTOWEAVE_POSTGRES_SCHEMA=autoweave
|
|
47
|
+
AUTOWEAVE_STATE_DIR=var/state
|
|
48
|
+
|
|
49
|
+
# Optional local queue/runtime tuning
|
|
50
|
+
AUTOWEAVE_MAX_ACTIVE_ATTEMPTS=8
|
|
51
|
+
AUTOWEAVE_HEARTBEAT_INTERVAL_SECONDS=15
|
|
52
|
+
AUTOWEAVE_LEASE_TTL_SECONDS=60
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# AutoWeave Code Owners
|
|
2
|
+
|
|
3
|
+
# Default owner for everything
|
|
4
|
+
* @hypnoastic
|
|
5
|
+
|
|
6
|
+
# Specific subsystems (examples, can be expanded as team grows)
|
|
7
|
+
/autoweave/orchestration/ @hypnoastic
|
|
8
|
+
/autoweave/storage/ @hypnoastic
|
|
9
|
+
/autoweave/monitoring/ @hypnoastic
|
|
10
|
+
/docs/ @hypnoastic
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name: Bug Report
|
|
2
|
+
description: Create a report to help us improve
|
|
3
|
+
title: "[Bug]: "
|
|
4
|
+
labels: ["bug"]
|
|
5
|
+
assignees: []
|
|
6
|
+
body:
|
|
7
|
+
- type: markdown
|
|
8
|
+
attributes:
|
|
9
|
+
value: |
|
|
10
|
+
Thanks for taking the time to fill out this bug report!
|
|
11
|
+
- type: input
|
|
12
|
+
id: version
|
|
13
|
+
attributes:
|
|
14
|
+
label: AutoWeave Version
|
|
15
|
+
description: What version of the AutoWeave Library are you using?
|
|
16
|
+
placeholder: e.g. 0.1.0 or main branch commit
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
- type: input
|
|
20
|
+
id: environment
|
|
21
|
+
attributes:
|
|
22
|
+
label: Environment
|
|
23
|
+
description: OS, Python version, Docker version, etc.
|
|
24
|
+
placeholder: e.g. macOS 14.5, Python 3.11, Docker 24.0.5
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
27
|
+
- type: textarea
|
|
28
|
+
id: description
|
|
29
|
+
attributes:
|
|
30
|
+
label: Describe the bug
|
|
31
|
+
description: A clear and concise description of what the bug is.
|
|
32
|
+
validations:
|
|
33
|
+
required: true
|
|
34
|
+
- type: textarea
|
|
35
|
+
id: reproduction
|
|
36
|
+
attributes:
|
|
37
|
+
label: Steps To Reproduce
|
|
38
|
+
description: Steps to reproduce the behavior.
|
|
39
|
+
placeholder: |
|
|
40
|
+
1. Run 'autoweave run-workflow...'
|
|
41
|
+
2. Provide input 'X'
|
|
42
|
+
3. See error 'Y'
|
|
43
|
+
validations:
|
|
44
|
+
required: true
|
|
45
|
+
- type: textarea
|
|
46
|
+
id: expected
|
|
47
|
+
attributes:
|
|
48
|
+
label: Expected behavior
|
|
49
|
+
description: A clear and concise description of what you expected to happen.
|
|
50
|
+
validations:
|
|
51
|
+
required: true
|
|
52
|
+
- type: textarea
|
|
53
|
+
id: logs
|
|
54
|
+
attributes:
|
|
55
|
+
label: Logs or Output
|
|
56
|
+
description: Paste any relevant logs, tracebacks, or output. Use code blocks (```) for formatting.
|
|
57
|
+
validations:
|
|
58
|
+
required: false
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: Feature Request
|
|
2
|
+
description: Suggest an idea for this project
|
|
3
|
+
title: "[Feature]: "
|
|
4
|
+
labels: ["enhancement"]
|
|
5
|
+
assignees: []
|
|
6
|
+
body:
|
|
7
|
+
- type: markdown
|
|
8
|
+
attributes:
|
|
9
|
+
value: |
|
|
10
|
+
Thanks for suggesting a new feature! Please provide as much context as possible.
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: problem
|
|
13
|
+
attributes:
|
|
14
|
+
label: Is your feature request related to a problem? Please describe.
|
|
15
|
+
description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: textarea
|
|
19
|
+
id: solution
|
|
20
|
+
attributes:
|
|
21
|
+
label: Describe the solution you'd like
|
|
22
|
+
description: A clear and concise description of what you want to happen.
|
|
23
|
+
validations:
|
|
24
|
+
required: true
|
|
25
|
+
- type: textarea
|
|
26
|
+
id: alternatives
|
|
27
|
+
attributes:
|
|
28
|
+
label: Describe alternatives you've considered
|
|
29
|
+
description: A clear and concise description of any alternative solutions or features you've considered.
|
|
30
|
+
validations:
|
|
31
|
+
required: false
|
|
32
|
+
- type: textarea
|
|
33
|
+
id: additional_context
|
|
34
|
+
attributes:
|
|
35
|
+
label: Additional context
|
|
36
|
+
description: Add any other context or screenshots about the feature request here.
|
|
37
|
+
validations:
|
|
38
|
+
required: false
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
<!-- Describe your changes in detail -->
|
|
3
|
+
<!-- Include motivation and context if it's a non-trivial change -->
|
|
4
|
+
|
|
5
|
+
## Related Issue
|
|
6
|
+
<!-- If fixing a bug or implementing a feature, link the issue here (e.g., Fixes #123) -->
|
|
7
|
+
|
|
8
|
+
## Type of Change
|
|
9
|
+
<!-- Check all that apply -->
|
|
10
|
+
- [ ] Bug fix (non-breaking change which fixes an issue)
|
|
11
|
+
- [ ] New feature (non-breaking change which adds functionality)
|
|
12
|
+
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
|
13
|
+
- [ ] Documentation update
|
|
14
|
+
- [ ] Refactoring / Tech Debt / Chore
|
|
15
|
+
|
|
16
|
+
## Testing
|
|
17
|
+
<!-- Describe the tests you ran to verify your changes. -->
|
|
18
|
+
- [ ] Unit tests added/updated
|
|
19
|
+
- [ ] Integration tests added/updated
|
|
20
|
+
- [ ] UI tests added/updated (if applicable)
|
|
21
|
+
- [ ] Tested locally with a real workflow execution
|
|
22
|
+
|
|
23
|
+
## Checklist
|
|
24
|
+
- [ ] My code follows the code style of this project (`make lint` passes).
|
|
25
|
+
- [ ] I have run mypy type checking (`make typecheck` passes).
|
|
26
|
+
- [ ] All new and existing tests pass (`make test` passes).
|
|
27
|
+
- [ ] I have added/updated documentation if necessary.
|
|
28
|
+
- [ ] My commit messages follow the [Conventional Commits](https://www.conventionalcommits.org/) format.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
# Maintain dependencies for pip (pyproject.toml)
|
|
4
|
+
- package-ecosystem: "pip"
|
|
5
|
+
directory: "/"
|
|
6
|
+
schedule:
|
|
7
|
+
interval: "weekly"
|
|
8
|
+
open-pull-requests-limit: 10
|
|
9
|
+
labels:
|
|
10
|
+
- "dependencies"
|
|
11
|
+
- "python"
|
|
12
|
+
ignore:
|
|
13
|
+
- dependency-name: "*"
|
|
14
|
+
update-types: ["version-update:semver-major"] # Ignore major updates automatically, review manually
|
|
15
|
+
|
|
16
|
+
# Maintain dependencies for GitHub Actions
|
|
17
|
+
- package-ecosystem: "github-actions"
|
|
18
|
+
directory: "/"
|
|
19
|
+
schedule:
|
|
20
|
+
interval: "weekly"
|
|
21
|
+
open-pull-requests-limit: 5
|
|
22
|
+
labels:
|
|
23
|
+
- "dependencies"
|
|
24
|
+
- "ci"
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["main"]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: ["main"]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
lint-format-typecheck:
|
|
16
|
+
name: Code Quality
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
- name: Install uv
|
|
21
|
+
uses: astral-sh/setup-uv@v3
|
|
22
|
+
with:
|
|
23
|
+
enable-cache: true
|
|
24
|
+
- name: Set up Python
|
|
25
|
+
uses: actions/setup-python@v5
|
|
26
|
+
with:
|
|
27
|
+
python-version-file: ".python-version"
|
|
28
|
+
- name: Install dependencies
|
|
29
|
+
run: uv pip install --system -e ".[dev]"
|
|
30
|
+
- name: Lint & Format Check (Ruff)
|
|
31
|
+
run: make lint
|
|
32
|
+
|
|
33
|
+
test:
|
|
34
|
+
name: Test (Python ${{ matrix.python-version }})
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
strategy:
|
|
37
|
+
fail-fast: false
|
|
38
|
+
matrix:
|
|
39
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/checkout@v4
|
|
42
|
+
- name: Install uv
|
|
43
|
+
uses: astral-sh/setup-uv@v3
|
|
44
|
+
with:
|
|
45
|
+
enable-cache: true
|
|
46
|
+
- name: Set up Python
|
|
47
|
+
uses: actions/setup-python@v5
|
|
48
|
+
with:
|
|
49
|
+
python-version: ${{ matrix.python-version }}
|
|
50
|
+
- name: Install dependencies
|
|
51
|
+
run: uv pip install --system -e ".[dev]"
|
|
52
|
+
- name: Install Playwright browsers
|
|
53
|
+
run: uv run playwright install chromium
|
|
54
|
+
- name: Start Redis for Tests
|
|
55
|
+
uses: supercharge/redis-github-action@1.8.0
|
|
56
|
+
with:
|
|
57
|
+
redis-version: 6
|
|
58
|
+
- name: Run Tests & Check Coverage
|
|
59
|
+
run: make test:coverage
|
|
60
|
+
env:
|
|
61
|
+
REDIS_URL: "redis://localhost:6379/0"
|
|
62
|
+
- name: Upload Coverage Report
|
|
63
|
+
uses: actions/upload-artifact@v4
|
|
64
|
+
if: matrix.python-version == '3.10' # Only upload once
|
|
65
|
+
with:
|
|
66
|
+
name: coverage-report
|
|
67
|
+
path: .coverage
|
|
68
|
+
retention-days: 14
|
|
69
|
+
include-hidden-files: true
|
|
70
|
+
|
|
71
|
+
package:
|
|
72
|
+
name: Build & Smoke Test
|
|
73
|
+
runs-on: ubuntu-latest
|
|
74
|
+
needs: [lint-format-typecheck, test]
|
|
75
|
+
steps:
|
|
76
|
+
- uses: actions/checkout@v4
|
|
77
|
+
- name: Install uv
|
|
78
|
+
uses: astral-sh/setup-uv@v3
|
|
79
|
+
with:
|
|
80
|
+
enable-cache: true
|
|
81
|
+
- name: Set up Python
|
|
82
|
+
uses: actions/setup-python@v5
|
|
83
|
+
with:
|
|
84
|
+
python-version-file: ".python-version"
|
|
85
|
+
- name: Run Package Smoke Test
|
|
86
|
+
run: make pack:check
|
|
87
|
+
- name: Upload Wheel
|
|
88
|
+
uses: actions/upload-artifact@v4
|
|
89
|
+
with:
|
|
90
|
+
name: autoweave-wheel
|
|
91
|
+
path: dist/*.whl
|
|
92
|
+
retention-days: 14
|
|
93
|
+
|
|
94
|
+
health-report:
|
|
95
|
+
name: Project Health Report
|
|
96
|
+
runs-on: ubuntu-latest
|
|
97
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
98
|
+
needs: [test]
|
|
99
|
+
steps:
|
|
100
|
+
- uses: actions/checkout@v4
|
|
101
|
+
- name: Install uv
|
|
102
|
+
uses: astral-sh/setup-uv@v3
|
|
103
|
+
with:
|
|
104
|
+
enable-cache: true
|
|
105
|
+
- name: Set up Python
|
|
106
|
+
uses: actions/setup-python@v5
|
|
107
|
+
with:
|
|
108
|
+
python-version-file: ".python-version"
|
|
109
|
+
- name: Download Coverage Report
|
|
110
|
+
uses: actions/download-artifact@v4
|
|
111
|
+
with:
|
|
112
|
+
name: coverage-report
|
|
113
|
+
- name: Generate Health Report
|
|
114
|
+
run: |
|
|
115
|
+
uv pip install --system -e ".[dev]"
|
|
116
|
+
make health
|
|
117
|
+
- name: Upload Health Report
|
|
118
|
+
uses: actions/upload-artifact@v4
|
|
119
|
+
with:
|
|
120
|
+
name: project-health
|
|
121
|
+
path: reports/health_report.*
|
|
122
|
+
retention-days: 30
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*.*.*"
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build-and-publish:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
environment: release
|
|
12
|
+
permissions:
|
|
13
|
+
id-token: write
|
|
14
|
+
contents: write # Needed for creating GitHub Releases
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
- name: Install uv
|
|
18
|
+
uses: astral-sh/setup-uv@v3
|
|
19
|
+
with:
|
|
20
|
+
enable-cache: true
|
|
21
|
+
- name: Set up Python
|
|
22
|
+
uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version-file: ".python-version"
|
|
25
|
+
- name: Build Package
|
|
26
|
+
run: |
|
|
27
|
+
uv run --with build python -m build
|
|
28
|
+
- name: Smoke Test
|
|
29
|
+
run: |
|
|
30
|
+
uv venv smoke-env
|
|
31
|
+
source smoke-env/bin/activate
|
|
32
|
+
pip install dist/*.whl
|
|
33
|
+
autoweave --help
|
|
34
|
+
|
|
35
|
+
- name: Publish to PyPI
|
|
36
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
37
|
+
|
|
38
|
+
- name: Create GitHub Release
|
|
39
|
+
uses: softprops/action-gh-release@v2
|
|
40
|
+
with:
|
|
41
|
+
generate_release_notes: true
|
|
42
|
+
files: |
|
|
43
|
+
dist/*.whl
|
|
44
|
+
dist/*.tar.gz
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name: Security
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["main"]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: ["main"]
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "0 4 * * 1" # Run weekly on Monday
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
codeql:
|
|
13
|
+
name: CodeQL Analysis
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
permissions:
|
|
16
|
+
security-events: write
|
|
17
|
+
actions: read
|
|
18
|
+
contents: read
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
- name: Initialize CodeQL
|
|
22
|
+
uses: github/codeql-action/init@v3
|
|
23
|
+
with:
|
|
24
|
+
languages: python
|
|
25
|
+
- name: Perform CodeQL Analysis
|
|
26
|
+
uses: github/codeql-action/analyze@v3
|
|
27
|
+
|
|
28
|
+
dependency-audit:
|
|
29
|
+
name: Dependency Audit (pip-audit)
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
permissions:
|
|
32
|
+
security-events: write
|
|
33
|
+
steps:
|
|
34
|
+
- uses: actions/checkout@v4
|
|
35
|
+
- name: Install uv
|
|
36
|
+
uses: astral-sh/setup-uv@v3
|
|
37
|
+
with:
|
|
38
|
+
enable-cache: true
|
|
39
|
+
- name: Set up Python
|
|
40
|
+
uses: actions/setup-python@v5
|
|
41
|
+
with:
|
|
42
|
+
python-version-file: ".python-version"
|
|
43
|
+
- name: Audit Dependencies
|
|
44
|
+
run: |
|
|
45
|
+
uv run --with pip-audit pip-audit --format json -o audit-results.json || true
|
|
46
|
+
uv run --with pip-audit pip-audit # Print human-readable output and fail if necessary
|
|
47
|
+
|
|
48
|
+
gitleaks:
|
|
49
|
+
name: Secret Scanning
|
|
50
|
+
runs-on: ubuntu-latest
|
|
51
|
+
steps:
|
|
52
|
+
- uses: actions/checkout@v4
|
|
53
|
+
with:
|
|
54
|
+
fetch-depth: 0
|
|
55
|
+
- name: Run Gitleaks
|
|
56
|
+
uses: gitleaks/gitleaks-action@v2
|
|
57
|
+
env:
|
|
58
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# ----- Python -----
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.egg-info/
|
|
6
|
+
*.egg
|
|
7
|
+
dist/
|
|
8
|
+
build/
|
|
9
|
+
*.whl
|
|
10
|
+
|
|
11
|
+
# ----- Virtual environments -----
|
|
12
|
+
.venv/
|
|
13
|
+
venv/
|
|
14
|
+
env/
|
|
15
|
+
|
|
16
|
+
# ----- Testing -----
|
|
17
|
+
.pytest_cache/
|
|
18
|
+
.coverage
|
|
19
|
+
htmlcov/
|
|
20
|
+
coverage.xml
|
|
21
|
+
reports/
|
|
22
|
+
|
|
23
|
+
# ----- Type checking -----
|
|
24
|
+
.mypy_cache/
|
|
25
|
+
.dmypy.json
|
|
26
|
+
dmypy.json
|
|
27
|
+
|
|
28
|
+
# ----- IDE / Editor -----
|
|
29
|
+
.vscode/
|
|
30
|
+
.idea/
|
|
31
|
+
*.swp
|
|
32
|
+
*.swo
|
|
33
|
+
*~
|
|
34
|
+
|
|
35
|
+
# ----- OS -----
|
|
36
|
+
.DS_Store
|
|
37
|
+
Thumbs.db
|
|
38
|
+
|
|
39
|
+
# ----- AutoWeave specific -----
|
|
40
|
+
.env
|
|
41
|
+
.env.local
|
|
42
|
+
config/secrets/
|
|
43
|
+
var/
|
|
44
|
+
workspaces/
|
|
45
|
+
workspace/
|
|
46
|
+
my-weave-project/
|
|
47
|
+
tmp/
|
|
48
|
+
ergon-*.json
|
|
49
|
+
context.md
|
|
50
|
+
/agents/
|
|
51
|
+
/configs/
|
|
52
|
+
|
|
53
|
+
# ----- Stray build artifacts -----
|
|
54
|
+
*.jpeg
|
|
55
|
+
*.jpg
|
|
56
|
+
!docs/**/*.jpeg
|
|
57
|
+
!docs/**/*.jpg
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v4.5.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: trailing-whitespace
|
|
6
|
+
- id: end-of-file-fixer
|
|
7
|
+
- id: check-yaml
|
|
8
|
+
- id: check-toml
|
|
9
|
+
- id: check-merge-conflict
|
|
10
|
+
- id: check-added-large-files
|
|
11
|
+
|
|
12
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
13
|
+
rev: v0.3.5
|
|
14
|
+
hooks:
|
|
15
|
+
- id: ruff
|
|
16
|
+
args: [ --fix ]
|
|
17
|
+
- id: ruff-format
|
|
18
|
+
|
|
19
|
+
- repo: https://github.com/Yelp/detect-secrets
|
|
20
|
+
rev: v1.4.0
|
|
21
|
+
hooks:
|
|
22
|
+
- id: detect-secrets
|
|
23
|
+
args: ['--baseline', '.secrets.baseline']
|
|
24
|
+
exclude: package.lock.json
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.10
|