openadapt-agent 2.0.1__tar.gz → 2.2.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.
- openadapt_agent-2.2.0/.github/dependabot.yml +25 -0
- openadapt_agent-2.2.0/.github/workflows/ci.yml +102 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/.github/workflows/codeql.yml +2 -2
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/.github/workflows/release.yml +35 -11
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/.gitignore +13 -1
- openadapt_agent-2.2.0/.gitleaks.toml +10 -0
- openadapt_agent-2.2.0/.mcpbignore +18 -0
- openadapt_agent-2.2.0/PKG-INFO +475 -0
- openadapt_agent-2.2.0/README.md +438 -0
- openadapt_agent-2.2.0/docs/DESIGN.md +548 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/docs/DISTRIBUTION.md +100 -50
- openadapt_agent-2.2.0/docs/MAILBOX_CLI.md +96 -0
- openadapt_agent-2.2.0/docs/REPAIR.md +95 -0
- openadapt_agent-2.2.0/docs/examples/sandbox-results.json +262 -0
- openadapt_agent-2.2.0/llms.txt +65 -0
- openadapt_agent-2.2.0/manifest.json +152 -0
- openadapt_agent-2.2.0/pyproject.toml +105 -0
- openadapt_agent-2.2.0/scripts/capture_sandbox_examples.py +93 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/scripts/check_dist.py +1 -22
- openadapt_agent-2.2.0/scripts/check_mcpb.py +128 -0
- openadapt_agent-2.2.0/scripts/check_source_boundary.py +258 -0
- openadapt_agent-2.2.0/scripts/smoke_client.py +101 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/server.json +5 -5
- openadapt_agent-2.2.0/skills/openadapt-gui-write/SKILL.md +43 -0
- openadapt_agent-2.2.0/source-policy.public.json +434 -0
- openadapt_agent-2.2.0/src/openadapt_agent/__init__.py +26 -0
- openadapt_agent-2.2.0/src/openadapt_agent/approval.py +124 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/src/openadapt_agent/attended.py +53 -2
- openadapt_agent-2.2.0/src/openadapt_agent/authoring.py +1689 -0
- openadapt_agent-2.2.0/src/openadapt_agent/bridge.py +860 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/src/openadapt_agent/bundles.py +53 -3
- openadapt_agent-2.2.0/src/openadapt_agent/cards.py +346 -0
- openadapt_agent-2.2.0/src/openadapt_agent/cli.py +769 -0
- openadapt_agent-2.2.0/src/openadapt_agent/contract.py +926 -0
- openadapt_agent-2.2.0/src/openadapt_agent/copy.py +53 -0
- openadapt_agent-2.2.0/src/openadapt_agent/mailbox.py +806 -0
- openadapt_agent-2.2.0/src/openadapt_agent/mcp.py +411 -0
- openadapt_agent-2.2.0/src/openadapt_agent/mcpb_entry.py +66 -0
- openadapt_agent-2.2.0/src/openadapt_agent/repair.py +724 -0
- openadapt_agent-2.2.0/src/openadapt_agent/runner.py +941 -0
- openadapt_agent-2.2.0/src/openadapt_agent/runner_bind.py +185 -0
- openadapt_agent-2.2.0/src/openadapt_agent/runs.py +381 -0
- openadapt_agent-2.2.0/src/openadapt_agent/sandbox.py +512 -0
- openadapt_agent-2.2.0/src/openadapt_agent/seal.py +210 -0
- openadapt_agent-2.2.0/src/openadapt_agent/seal_cli.py +276 -0
- openadapt_agent-2.2.0/src/openadapt_agent/service.py +556 -0
- openadapt_agent-2.2.0/src/openadapt_agent/skill.py +188 -0
- openadapt_agent-2.2.0/src/openadapt_agent/tutorial.py +169 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/tests/conftest.py +64 -6
- openadapt_agent-2.2.0/tests/fixtures/cloud-ts-signed-seal.json +1 -0
- openadapt_agent-2.2.0/tests/test_approval.py +353 -0
- openadapt_agent-2.2.0/tests/test_approval_flow.py +226 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/tests/test_attended_bridge.py +268 -21
- openadapt_agent-2.2.0/tests/test_authoring.py +1342 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/tests/test_bridge.py +233 -9
- openadapt_agent-2.2.0/tests/test_cards.py +159 -0
- openadapt_agent-2.2.0/tests/test_cli.py +409 -0
- openadapt_agent-2.2.0/tests/test_contract.py +253 -0
- openadapt_agent-2.2.0/tests/test_distribution.py +454 -0
- openadapt_agent-2.2.0/tests/test_mailbox.py +643 -0
- openadapt_agent-2.2.0/tests/test_mcp_server.py +508 -0
- openadapt_agent-2.2.0/tests/test_mcpb_entry.py +103 -0
- openadapt_agent-2.2.0/tests/test_partner_kit.py +86 -0
- openadapt_agent-2.2.0/tests/test_public_lifecycle.py +36 -0
- openadapt_agent-2.2.0/tests/test_readme_commands.py +79 -0
- openadapt_agent-2.2.0/tests/test_repair.py +398 -0
- openadapt_agent-2.2.0/tests/test_repair_e2e.py +201 -0
- openadapt_agent-2.2.0/tests/test_repair_hold.py +107 -0
- openadapt_agent-2.2.0/tests/test_runner.py +471 -0
- openadapt_agent-2.2.0/tests/test_runs.py +156 -0
- openadapt_agent-2.2.0/tests/test_sandbox.py +129 -0
- openadapt_agent-2.2.0/tests/test_sandbox_flow.py +117 -0
- openadapt_agent-2.2.0/tests/test_seal.py +85 -0
- openadapt_agent-2.2.0/tests/test_seal_cli.py +144 -0
- openadapt_agent-2.2.0/tests/test_seal_e2e.py +173 -0
- openadapt_agent-2.2.0/tests/test_service.py +452 -0
- openadapt_agent-2.2.0/tests/test_skill.py +164 -0
- openadapt_agent-2.2.0/tests/test_tutorial.py +94 -0
- openadapt_agent-2.2.0/uv.lock +2643 -0
- openadapt_agent-2.0.1/.github/dependabot.yml +0 -17
- openadapt_agent-2.0.1/.github/workflows/ci.yml +0 -34
- openadapt_agent-2.0.1/PKG-INFO +0 -333
- openadapt_agent-2.0.1/README.md +0 -300
- openadapt_agent-2.0.1/docs/DESIGN.md +0 -270
- openadapt_agent-2.0.1/llms.txt +0 -44
- openadapt_agent-2.0.1/pyproject.toml +0 -69
- openadapt_agent-2.0.1/scripts/smoke_client.py +0 -70
- openadapt_agent-2.0.1/smithery.yaml +0 -87
- openadapt_agent-2.0.1/src/openadapt_agent/__init__.py +0 -24
- openadapt_agent-2.0.1/src/openadapt_agent/bridge.py +0 -464
- openadapt_agent-2.0.1/src/openadapt_agent/cli.py +0 -266
- openadapt_agent-2.0.1/src/openadapt_agent/mcp.py +0 -186
- openadapt_agent-2.0.1/src/openadapt_agent/runner.py +0 -477
- openadapt_agent-2.0.1/src/openadapt_agent/skill.py +0 -113
- openadapt_agent-2.0.1/tests/golden/skill_appendix.md +0 -65
- openadapt_agent-2.0.1/tests/test_cli.py +0 -58
- openadapt_agent-2.0.1/tests/test_distribution.py +0 -151
- openadapt_agent-2.0.1/tests/test_mcp_server.py +0 -218
- openadapt_agent-2.0.1/tests/test_runner.py +0 -184
- openadapt_agent-2.0.1/tests/test_skill.py +0 -47
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/.github/CODEOWNERS +0 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/.github/workflows/dependency-review.yml +0 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/.github/workflows/secret-scan.yml +0 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/LICENSE +0 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/SECURITY.md +0 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/scripts/check_release_artifacts.py +0 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/src/openadapt_agent/__main__.py +0 -0
- {openadapt_agent-2.0.1 → openadapt_agent-2.2.0}/src/openadapt_agent/flow_service.py +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# SOC 2: automated dependency updates (OA-C-23).
|
|
2
|
+
version: 2
|
|
3
|
+
updates:
|
|
4
|
+
- package-ecosystem: "pip"
|
|
5
|
+
directory: "/"
|
|
6
|
+
schedule:
|
|
7
|
+
interval: "weekly"
|
|
8
|
+
open-pull-requests-limit: 5
|
|
9
|
+
labels:
|
|
10
|
+
- "dependencies"
|
|
11
|
+
- package-ecosystem: "github-actions"
|
|
12
|
+
directory: "/"
|
|
13
|
+
schedule:
|
|
14
|
+
interval: "weekly"
|
|
15
|
+
open-pull-requests-limit: 5
|
|
16
|
+
labels:
|
|
17
|
+
- "dependencies"
|
|
18
|
+
# github/codeql-action/init and .../analyze must run at the SAME version;
|
|
19
|
+
# a run with mismatched versions aborts with "Loaded a configuration file
|
|
20
|
+
# for version X, but running version Y". Ungrouped, Dependabot opens one
|
|
21
|
+
# PR per sub-action, so each one is red on its own and neither can merge.
|
|
22
|
+
groups:
|
|
23
|
+
codeql-action:
|
|
24
|
+
patterns:
|
|
25
|
+
- "github/codeql-action*"
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
strategy:
|
|
12
|
+
fail-fast: false
|
|
13
|
+
matrix:
|
|
14
|
+
include:
|
|
15
|
+
# Cover SDK 1, SDK 2's floor, and current dependencies in three jobs.
|
|
16
|
+
- python-version: "3.10"
|
|
17
|
+
dependency-set: floor
|
|
18
|
+
- python-version: "3.11"
|
|
19
|
+
dependency-set: mcp2-floor
|
|
20
|
+
- python-version: "3.12"
|
|
21
|
+
dependency-set: current
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
24
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
25
|
+
with:
|
|
26
|
+
python-version: ${{ matrix.python-version }}
|
|
27
|
+
cache: pip
|
|
28
|
+
- uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
|
|
29
|
+
if: matrix.dependency-set == 'floor'
|
|
30
|
+
- name: Verify lock consistency
|
|
31
|
+
if: matrix.dependency-set == 'floor'
|
|
32
|
+
run: uv lock --locked
|
|
33
|
+
- name: Install dependency floors
|
|
34
|
+
if: matrix.dependency-set == 'floor'
|
|
35
|
+
run: >-
|
|
36
|
+
pip install -e ".[dev]"
|
|
37
|
+
"openadapt-flow==2.1.0"
|
|
38
|
+
"mcp==1.28.0"
|
|
39
|
+
- name: Install MCP 2 floor
|
|
40
|
+
if: matrix.dependency-set == 'mcp2-floor'
|
|
41
|
+
run: pip install -e ".[dev]" "mcp==2.0.0"
|
|
42
|
+
- name: Install current allowed dependencies
|
|
43
|
+
if: matrix.dependency-set == 'current'
|
|
44
|
+
run: pip install -e ".[dev]"
|
|
45
|
+
- name: Lint
|
|
46
|
+
run: ruff check src tests scripts
|
|
47
|
+
- name: Test
|
|
48
|
+
run: pytest -q
|
|
49
|
+
- name: Build release artifacts
|
|
50
|
+
if: matrix.python-version == '3.12'
|
|
51
|
+
run: python -m build
|
|
52
|
+
- name: Verify MIT package boundary
|
|
53
|
+
if: matrix.python-version == '3.12'
|
|
54
|
+
run: |
|
|
55
|
+
python scripts/check_release_artifacts.py dist
|
|
56
|
+
python scripts/check_dist.py dist/*
|
|
57
|
+
python scripts/check_source_boundary.py --require-dist
|
|
58
|
+
|
|
59
|
+
sandbox-e2e:
|
|
60
|
+
# The zero-flag sandbox with real openadapt-flow, a real browser, and the
|
|
61
|
+
# synthetic MockMed app: no fakes. Unit jobs above stub Flow's CLI.
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
steps:
|
|
64
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
65
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
66
|
+
with:
|
|
67
|
+
python-version: "3.12"
|
|
68
|
+
cache: pip
|
|
69
|
+
- name: Install with the browser extra
|
|
70
|
+
run: pip install -e ".[dev,tutorial]"
|
|
71
|
+
- name: Install Chromium
|
|
72
|
+
run: python -m playwright install --with-deps chromium
|
|
73
|
+
# test_approval_flow.py skips until the installed openadapt-flow has
|
|
74
|
+
# approval modes.
|
|
75
|
+
- name: Run every sandbox case through openadapt-flow
|
|
76
|
+
env:
|
|
77
|
+
OPENADAPT_AGENT_E2E: "1"
|
|
78
|
+
DO_NOT_TRACK: "1"
|
|
79
|
+
OPENADAPT_TELEMETRY: "0"
|
|
80
|
+
run: pytest -q tests/test_sandbox_flow.py tests/test_approval_flow.py
|
|
81
|
+
|
|
82
|
+
repair-e2e:
|
|
83
|
+
# halt -> needs_repair -> teach_repair -> approval -> replay, on Flow's
|
|
84
|
+
# rendered dialog fixture with its real replayer, OCR, and campaigns.
|
|
85
|
+
runs-on: ubuntu-latest
|
|
86
|
+
steps:
|
|
87
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
88
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
89
|
+
with:
|
|
90
|
+
python-version: "3.12"
|
|
91
|
+
cache: pip
|
|
92
|
+
- name: Install with the released Flow (ships openadapt_flow.repair.dialog_fixture)
|
|
93
|
+
run: |
|
|
94
|
+
pip install -e ".[dev]" "openadapt-flow>=2.1.0,<3"
|
|
95
|
+
pip install opencv-python-headless rapidocr-onnxruntime
|
|
96
|
+
- name: Run the repair end-to-end test
|
|
97
|
+
env:
|
|
98
|
+
DO_NOT_TRACK: "1"
|
|
99
|
+
OPENADAPT_TELEMETRY: "0"
|
|
100
|
+
run: |
|
|
101
|
+
python -c "import openadapt_flow.repair.dialog_fixture"
|
|
102
|
+
pytest -q -rs tests/test_repair_e2e.py tests/test_repair_hold.py
|
|
@@ -28,10 +28,10 @@ jobs:
|
|
|
28
28
|
- name: Checkout
|
|
29
29
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
30
30
|
- name: Initialize CodeQL
|
|
31
|
-
uses: github/codeql-action/init@
|
|
31
|
+
uses: github/codeql-action/init@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
|
|
32
32
|
with:
|
|
33
33
|
languages: ${{ matrix.language }}
|
|
34
34
|
- name: Perform CodeQL Analysis
|
|
35
|
-
uses: github/codeql-action/analyze@
|
|
35
|
+
uses: github/codeql-action/analyze@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
|
|
36
36
|
with:
|
|
37
37
|
category: "/language:${{ matrix.language }}"
|
|
@@ -22,9 +22,14 @@ on:
|
|
|
22
22
|
paths:
|
|
23
23
|
- "pyproject.toml"
|
|
24
24
|
- "server.json"
|
|
25
|
-
- "
|
|
25
|
+
- "manifest.json"
|
|
26
|
+
- ".mcpbignore"
|
|
27
|
+
- "src/openadapt_agent/mcpb_entry.py"
|
|
28
|
+
- "scripts/check_mcpb.py"
|
|
26
29
|
- "scripts/check_release_artifacts.py"
|
|
27
30
|
- "scripts/check_dist.py"
|
|
31
|
+
- "scripts/check_source_boundary.py"
|
|
32
|
+
- "source-policy.public.json"
|
|
28
33
|
- ".github/workflows/release.yml"
|
|
29
34
|
|
|
30
35
|
concurrency:
|
|
@@ -39,25 +44,38 @@ jobs:
|
|
|
39
44
|
name: Build + validate (dry run, no publish)
|
|
40
45
|
runs-on: ubuntu-latest
|
|
41
46
|
steps:
|
|
42
|
-
- uses: actions/checkout@
|
|
43
|
-
- uses: actions/setup-python@
|
|
47
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
48
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
44
49
|
with:
|
|
45
50
|
python-version: "3.12"
|
|
51
|
+
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
52
|
+
with:
|
|
53
|
+
node-version: "20"
|
|
46
54
|
- name: Install tooling
|
|
47
55
|
run: |
|
|
48
56
|
python -m pip install --upgrade pip
|
|
49
57
|
python -m pip install --upgrade build "twine>=6.1" "packaging>=24.2" jsonschema
|
|
50
58
|
python -m pip install -e ".[dev]"
|
|
51
|
-
- name: Version-consistency guard (
|
|
59
|
+
- name: Version-consistency guard (registry / MCPB / package / runtime)
|
|
52
60
|
run: python -m pytest tests/test_distribution.py -q
|
|
53
61
|
- name: Build sdist + wheel
|
|
54
62
|
run: python -m build
|
|
55
|
-
- name: License
|
|
63
|
+
- name: License and source-policy checks on built archives
|
|
56
64
|
run: |
|
|
57
65
|
python scripts/check_release_artifacts.py dist
|
|
58
66
|
python scripts/check_dist.py dist/*
|
|
67
|
+
python scripts/check_source_boundary.py --require-dist
|
|
59
68
|
- name: twine check
|
|
60
69
|
run: twine check dist/*
|
|
70
|
+
- name: Validate and pack the local MCPB
|
|
71
|
+
shell: bash
|
|
72
|
+
run: |
|
|
73
|
+
set -euo pipefail
|
|
74
|
+
version="$(grep -m1 -E '^version = ' pyproject.toml | sed -E 's/version = "(.*)"/\1/')"
|
|
75
|
+
mkdir -p mcpb-dist
|
|
76
|
+
npx -y @anthropic-ai/mcpb@2.1.2 validate manifest.json
|
|
77
|
+
npx -y @anthropic-ai/mcpb@2.1.2 pack . "mcpb-dist/openadapt-agent-${version}.mcpb"
|
|
78
|
+
python scripts/check_mcpb.py mcpb-dist/*.mcpb
|
|
61
79
|
- name: Validate server.json against the MCP registry schema
|
|
62
80
|
run: |
|
|
63
81
|
python - <<'PY'
|
|
@@ -76,11 +94,17 @@ jobs:
|
|
|
76
94
|
sys.exit(1 if errors else 0)
|
|
77
95
|
PY
|
|
78
96
|
- name: Upload built distributions
|
|
79
|
-
uses: actions/upload-artifact@
|
|
97
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
80
98
|
with:
|
|
81
99
|
name: dist
|
|
82
100
|
path: dist/
|
|
83
101
|
if-no-files-found: error
|
|
102
|
+
- name: Upload local MCPB
|
|
103
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
104
|
+
with:
|
|
105
|
+
name: mcpb
|
|
106
|
+
path: mcpb-dist/
|
|
107
|
+
if-no-files-found: error
|
|
84
108
|
|
|
85
109
|
pypi-publish:
|
|
86
110
|
name: Publish to PyPI
|
|
@@ -92,7 +116,7 @@ jobs:
|
|
|
92
116
|
id-token: write # OIDC for PyPI Trusted Publishing
|
|
93
117
|
contents: read
|
|
94
118
|
steps:
|
|
95
|
-
- uses: actions/checkout@
|
|
119
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
96
120
|
- name: Resolve release version + assert it matches the package
|
|
97
121
|
id: ver
|
|
98
122
|
shell: bash
|
|
@@ -113,7 +137,7 @@ jobs:
|
|
|
113
137
|
exit 1
|
|
114
138
|
fi
|
|
115
139
|
- name: Download built distributions
|
|
116
|
-
uses: actions/download-artifact@
|
|
140
|
+
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
117
141
|
with:
|
|
118
142
|
name: dist
|
|
119
143
|
path: dist/
|
|
@@ -130,13 +154,13 @@ jobs:
|
|
|
130
154
|
fi
|
|
131
155
|
- name: Publish to PyPI (OIDC Trusted Publishing)
|
|
132
156
|
if: ${{ vars.PYPI_PUBLISH_METHOD != 'token' }}
|
|
133
|
-
uses: pypa/gh-action-pypi-publish@
|
|
157
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
134
158
|
with:
|
|
135
159
|
# No password -> the action uses OIDC Trusted Publishing.
|
|
136
160
|
print-hash: true
|
|
137
161
|
- name: Publish to PyPI (API token fallback)
|
|
138
162
|
if: ${{ vars.PYPI_PUBLISH_METHOD == 'token' }}
|
|
139
|
-
uses: pypa/gh-action-pypi-publish@
|
|
163
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
140
164
|
with:
|
|
141
165
|
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
142
166
|
print-hash: true
|
|
@@ -150,7 +174,7 @@ jobs:
|
|
|
150
174
|
id-token: write # OIDC for `mcp-publisher login github-oidc`
|
|
151
175
|
contents: read
|
|
152
176
|
steps:
|
|
153
|
-
- uses: actions/checkout@
|
|
177
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
154
178
|
- name: Resolve release version
|
|
155
179
|
id: ver
|
|
156
180
|
shell: bash
|
|
@@ -11,6 +11,7 @@ __pycache__/
|
|
|
11
11
|
build/
|
|
12
12
|
develop-eggs/
|
|
13
13
|
dist/
|
|
14
|
+
mcpb-dist/
|
|
14
15
|
downloads/
|
|
15
16
|
eggs/
|
|
16
17
|
.eggs/
|
|
@@ -121,7 +122,9 @@ dmypy.json
|
|
|
121
122
|
.ruff_cache/
|
|
122
123
|
|
|
123
124
|
# uv
|
|
124
|
-
|
|
125
|
+
# The MCPB is a local application bundle, so keep its dependency lock for a
|
|
126
|
+
# repeatable one-click install.
|
|
127
|
+
!uv.lock
|
|
125
128
|
|
|
126
129
|
# IDE
|
|
127
130
|
.idea/
|
|
@@ -137,3 +140,12 @@ Thumbs.db
|
|
|
137
140
|
# Project specific
|
|
138
141
|
*.session.json
|
|
139
142
|
sessions/
|
|
143
|
+
|
|
144
|
+
# Never-publish workspace material (strategy, prospect research, counsel packs,
|
|
145
|
+
# personal contact details). Created ad hoc; must never reach a remote.
|
|
146
|
+
.private/
|
|
147
|
+
|
|
148
|
+
# Cover every .env variant, not one at a time. Negate the committed
|
|
149
|
+
# template so it stays tracked.
|
|
150
|
+
.env.*
|
|
151
|
+
!.env.example
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Extends the default gitleaks rules. Each allowlist entry names one
|
|
2
|
+
# synthetic test value, so a real key in the same file is still caught.
|
|
3
|
+
[extend]
|
|
4
|
+
useDefault = true
|
|
5
|
+
|
|
6
|
+
[[allowlists]]
|
|
7
|
+
description = "Synthetic bundle key in the approval end-to-end test, not a credential"
|
|
8
|
+
paths = ['''^tests/test_approval_flow\.py$''']
|
|
9
|
+
regexes = ['''approval-e2e-synthetic-key''']
|
|
10
|
+
condition = "AND"
|