codex-aws-helper 0.3.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.
- codex_aws_helper-0.3.0/.agents/plugins/marketplace.json +20 -0
- codex_aws_helper-0.3.0/.cargo/config.toml +2 -0
- codex_aws_helper-0.3.0/.codex/agents/aws_helper_reviewer.toml +13 -0
- codex_aws_helper-0.3.0/.codex/environments/environment.toml +30 -0
- codex_aws_helper-0.3.0/.codex/hooks.json +19 -0
- codex_aws_helper-0.3.0/.gitattributes +1 -0
- codex_aws_helper-0.3.0/.github/pull_request_template.md +9 -0
- codex_aws_helper-0.3.0/.github/rulesets/main.json +55 -0
- codex_aws_helper-0.3.0/.github/workflows/check.yml +62 -0
- codex_aws_helper-0.3.0/.github/workflows/publish.yml +208 -0
- codex_aws_helper-0.3.0/.gitignore +29 -0
- codex_aws_helper-0.3.0/AGENTS.md +39 -0
- codex_aws_helper-0.3.0/CHANGELOG.md +57 -0
- codex_aws_helper-0.3.0/CONTRIBUTING.md +146 -0
- codex_aws_helper-0.3.0/Cargo.lock +2702 -0
- codex_aws_helper-0.3.0/Cargo.toml +40 -0
- codex_aws_helper-0.3.0/LICENSE +21 -0
- codex_aws_helper-0.3.0/Makefile +20 -0
- codex_aws_helper-0.3.0/PKG-INFO +98 -0
- codex_aws_helper-0.3.0/README.md +76 -0
- codex_aws_helper-0.3.0/THIRD_PARTY_NOTICES.md +10339 -0
- codex_aws_helper-0.3.0/docs/api-contracts.md +154 -0
- codex_aws_helper-0.3.0/docs/architecture.md +161 -0
- codex_aws_helper-0.3.0/docs/codex-cheatsheet.md +580 -0
- codex_aws_helper-0.3.0/docs/codex-remote-setup.md +274 -0
- codex_aws_helper-0.3.0/docs/commands.md +128 -0
- codex_aws_helper-0.3.0/docs/compatibility.md +42 -0
- codex_aws_helper-0.3.0/docs/customer-pilot.md +90 -0
- codex_aws_helper-0.3.0/docs/experience.md +214 -0
- codex_aws_helper-0.3.0/docs/installation.md +211 -0
- codex_aws_helper-0.3.0/docs/plugin-design.md +87 -0
- codex_aws_helper-0.3.0/docs/plugin-distribution.md +144 -0
- codex_aws_helper-0.3.0/docs/repository-maintenance.md +56 -0
- codex_aws_helper-0.3.0/docs/requirements-pdf.txt +1 -0
- codex_aws_helper-0.3.0/docs/requirements.md +89 -0
- codex_aws_helper-0.3.0/docs/roadmap.md +48 -0
- codex_aws_helper-0.3.0/docs/source-handoff.md +387 -0
- codex_aws_helper-0.3.0/docs/terminal-guide.md +208 -0
- codex_aws_helper-0.3.0/docs/validation.md +502 -0
- codex_aws_helper-0.3.0/output/pdf/codex-remote-development-cheatsheet.pdf +422 -0
- codex_aws_helper-0.3.0/plugins/codex-aws-helper/.codex-plugin/plugin.json +25 -0
- codex_aws_helper-0.3.0/plugins/codex-aws-helper/.mcp.json +10 -0
- codex_aws_helper-0.3.0/plugins/codex-aws-helper/skills/aws-setup/SKILL.md +79 -0
- codex_aws_helper-0.3.0/pyproject.toml +38 -0
- codex_aws_helper-0.3.0/scripts/build-codex-cheatsheet.py +336 -0
- codex_aws_helper-0.3.0/scripts/check-package.py +66 -0
- codex_aws_helper-0.3.0/scripts/check-release-artifacts.py +89 -0
- codex_aws_helper-0.3.0/scripts/codex-dev.sh +111 -0
- codex_aws_helper-0.3.0/scripts/codex-session-start.py +63 -0
- codex_aws_helper-0.3.0/scripts/generate-notices.py +105 -0
- codex_aws_helper-0.3.0/scripts/package.sh +27 -0
- codex_aws_helper-0.3.0/scripts/smoke-package.py +188 -0
- codex_aws_helper-0.3.0/src/app.rs +861 -0
- codex_aws_helper-0.3.0/src/auth.rs +1549 -0
- codex_aws_helper-0.3.0/src/aws.rs +1218 -0
- codex_aws_helper-0.3.0/src/aws_cli.rs +543 -0
- codex_aws_helper-0.3.0/src/aws_data.rs +147 -0
- codex_aws_helper-0.3.0/src/cli.rs +157 -0
- codex_aws_helper-0.3.0/src/config.rs +1768 -0
- codex_aws_helper-0.3.0/src/dashboard.rs +1094 -0
- codex_aws_helper-0.3.0/src/demo.rs +106 -0
- codex_aws_helper-0.3.0/src/desktop.rs +1944 -0
- codex_aws_helper-0.3.0/src/evidence.rs +518 -0
- codex_aws_helper-0.3.0/src/inventory.rs +688 -0
- codex_aws_helper-0.3.0/src/lib.rs +19 -0
- codex_aws_helper-0.3.0/src/main.rs +47 -0
- codex_aws_helper-0.3.0/src/mcp.rs +755 -0
- codex_aws_helper-0.3.0/src/menu.rs +586 -0
- codex_aws_helper-0.3.0/src/model.rs +315 -0
- codex_aws_helper-0.3.0/src/plugin.rs +545 -0
- codex_aws_helper-0.3.0/src/process.rs +689 -0
- codex_aws_helper-0.3.0/src/redaction.rs +868 -0
- codex_aws_helper-0.3.0/src/setup.rs +3634 -0
- codex_aws_helper-0.3.0/tests/aws.rs +365 -0
- codex_aws_helper-0.3.0/tests/aws_cli.rs +1088 -0
- codex_aws_helper-0.3.0/tests/cli.rs +1126 -0
- codex_aws_helper-0.3.0/tests/mcp.rs +540 -0
- codex_aws_helper-0.3.0/tests/plugin.rs +219 -0
- codex_aws_helper-0.3.0/tests/setup.rs +1725 -0
- codex_aws_helper-0.3.0/tests/test_codex_setup.py +174 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "codex-aws-helper",
|
|
3
|
+
"interface": {
|
|
4
|
+
"displayName": "AWS Helper for Codex"
|
|
5
|
+
},
|
|
6
|
+
"plugins": [
|
|
7
|
+
{
|
|
8
|
+
"name": "codex-aws-helper",
|
|
9
|
+
"source": {
|
|
10
|
+
"source": "local",
|
|
11
|
+
"path": "./plugins/codex-aws-helper"
|
|
12
|
+
},
|
|
13
|
+
"policy": {
|
|
14
|
+
"installation": "AVAILABLE",
|
|
15
|
+
"authentication": "ON_INSTALL"
|
|
16
|
+
},
|
|
17
|
+
"category": "Developer Tools"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
name = "aws_helper_reviewer"
|
|
2
|
+
description = "Review AWS Helper changes for configuration preservation, offline behavior, credential redaction, and CLI/MCP consistency."
|
|
3
|
+
sandbox_mode = "read-only"
|
|
4
|
+
developer_instructions = """
|
|
5
|
+
Read AGENTS.md and the relevant implementation contracts before reviewing.
|
|
6
|
+
Review the requested diff and the code it calls. Focus on concrete regressions:
|
|
7
|
+
credential exposure, unexpected AWS requests, writes outside selected roots,
|
|
8
|
+
stale configuration previews, lost TOML, and differences between CLI and MCP.
|
|
9
|
+
Report actionable findings with file locations and a clear failure scenario.
|
|
10
|
+
Distinguish inspected behavior, test evidence, and unverified live behavior.
|
|
11
|
+
Do not edit files or run live AWS calls. Suggest the smallest relevant test
|
|
12
|
+
when evidence is missing. If there are no actionable findings, say so.
|
|
13
|
+
"""
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
version = 1
|
|
2
|
+
name = "AWS Helper development"
|
|
3
|
+
|
|
4
|
+
[setup]
|
|
5
|
+
script = "bash scripts/codex-dev.sh setup"
|
|
6
|
+
|
|
7
|
+
[[actions]]
|
|
8
|
+
name = "Prepare workspace"
|
|
9
|
+
icon = "run"
|
|
10
|
+
command = "bash scripts/codex-dev.sh setup"
|
|
11
|
+
|
|
12
|
+
[[actions]]
|
|
13
|
+
name = "Quick checks"
|
|
14
|
+
icon = "run"
|
|
15
|
+
command = "bash scripts/codex-dev.sh quickcheck"
|
|
16
|
+
|
|
17
|
+
[[actions]]
|
|
18
|
+
name = "Full checks"
|
|
19
|
+
icon = "run"
|
|
20
|
+
command = "bash scripts/codex-dev.sh check"
|
|
21
|
+
|
|
22
|
+
[[actions]]
|
|
23
|
+
name = "Release build"
|
|
24
|
+
icon = "run"
|
|
25
|
+
command = "bash scripts/codex-dev.sh build"
|
|
26
|
+
|
|
27
|
+
[[actions]]
|
|
28
|
+
name = "Synthetic demo"
|
|
29
|
+
icon = "run"
|
|
30
|
+
command = "bash scripts/codex-dev.sh demo"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Brief, local Git context for AWS Helper development. No AWS requests or configuration writes.",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"SessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"matcher": "^(startup|resume|compact)$",
|
|
7
|
+
"hooks": [
|
|
8
|
+
{
|
|
9
|
+
"type": "command",
|
|
10
|
+
"command": "python3 \"$(git rev-parse --show-toplevel)/scripts/codex-session-start.py\"",
|
|
11
|
+
"timeout": 5,
|
|
12
|
+
"statusMessage": "Reading AWS Helper checkout context",
|
|
13
|
+
"additionalContextLimit": 1000
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*.pdf binary
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
## What changes
|
|
2
|
+
|
|
3
|
+
Describe the problem and the resulting behavior.
|
|
4
|
+
|
|
5
|
+
## Validation
|
|
6
|
+
|
|
7
|
+
List checks actually run and any remaining gaps. Separate synthetic tests from
|
|
8
|
+
live AWS, Codex desktop, and platform validation. Keep credentials and personal
|
|
9
|
+
configuration out of the description.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Protect main",
|
|
3
|
+
"target": "branch",
|
|
4
|
+
"enforcement": "active",
|
|
5
|
+
"bypass_actors": [],
|
|
6
|
+
"conditions": {
|
|
7
|
+
"ref_name": {
|
|
8
|
+
"exclude": [],
|
|
9
|
+
"include": ["~DEFAULT_BRANCH"]
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"rules": [
|
|
13
|
+
{
|
|
14
|
+
"type": "deletion"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"type": "non_fast_forward"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "pull_request",
|
|
21
|
+
"parameters": {
|
|
22
|
+
"dismiss_stale_reviews_on_push": true,
|
|
23
|
+
"require_code_owner_review": false,
|
|
24
|
+
"require_last_push_approval": false,
|
|
25
|
+
"required_approving_review_count": 0,
|
|
26
|
+
"required_review_thread_resolution": true
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"type": "required_status_checks",
|
|
31
|
+
"parameters": {
|
|
32
|
+
"do_not_enforce_on_create": false,
|
|
33
|
+
"strict_required_status_checks_policy": true,
|
|
34
|
+
"required_status_checks": [
|
|
35
|
+
{
|
|
36
|
+
"context": "Rust and package checks (macos-14)",
|
|
37
|
+
"integration_id": 15368
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"context": "Rust and package checks (ubuntu-24.04)",
|
|
41
|
+
"integration_id": 15368
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"context": "macOS wheel",
|
|
45
|
+
"integration_id": 15368
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"context": "GitGuardian Security Checks",
|
|
49
|
+
"integration_id": 46505
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: Check
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
check:
|
|
13
|
+
name: Rust and package checks (${{ matrix.os }})
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: false
|
|
16
|
+
matrix:
|
|
17
|
+
os: [macos-14, ubuntu-24.04]
|
|
18
|
+
runs-on: ${{ matrix.os }}
|
|
19
|
+
timeout-minutes: 25
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
- uses: dtolnay/rust-toolchain@1.88.0
|
|
26
|
+
with:
|
|
27
|
+
components: rustfmt, clippy
|
|
28
|
+
- uses: Swatinem/rust-cache@v2
|
|
29
|
+
- run: make check
|
|
30
|
+
|
|
31
|
+
wheel:
|
|
32
|
+
name: macOS wheel
|
|
33
|
+
runs-on: macos-14
|
|
34
|
+
timeout-minutes: 25
|
|
35
|
+
steps:
|
|
36
|
+
- uses: actions/checkout@v4
|
|
37
|
+
- uses: actions/setup-python@v5
|
|
38
|
+
with:
|
|
39
|
+
python-version: "3.12"
|
|
40
|
+
- uses: dtolnay/rust-toolchain@1.88.0
|
|
41
|
+
- uses: Swatinem/rust-cache@v2
|
|
42
|
+
- run: python -m pip install 'maturin>=1.9,<2' uv
|
|
43
|
+
- run: maturin build --release --locked --out dist
|
|
44
|
+
- run: maturin sdist --out dist
|
|
45
|
+
- name: Install the wheel with pip
|
|
46
|
+
run: |
|
|
47
|
+
python -m venv "$RUNNER_TEMP/pip-test"
|
|
48
|
+
"$RUNNER_TEMP/pip-test/bin/python" -m pip install --no-index dist/*.whl
|
|
49
|
+
"$RUNNER_TEMP/pip-test/bin/codex-aws-helper" --version
|
|
50
|
+
"$RUNNER_TEMP/pip-test/bin/codex-aws-helper" plugin export --output "$RUNNER_TEMP/pip-plugin"
|
|
51
|
+
- name: Install the wheel with uv
|
|
52
|
+
env:
|
|
53
|
+
UV_TOOL_DIR: ${{ runner.temp }}/uv-tools
|
|
54
|
+
UV_TOOL_BIN_DIR: ${{ runner.temp }}/uv-bin
|
|
55
|
+
run: |
|
|
56
|
+
uv tool install --no-index dist/*.whl
|
|
57
|
+
"$UV_TOOL_BIN_DIR/codex-aws-helper" --version
|
|
58
|
+
"$UV_TOOL_BIN_DIR/codex-aws-helper" plugin export --output "$RUNNER_TEMP/uv-plugin"
|
|
59
|
+
- uses: actions/upload-artifact@v4
|
|
60
|
+
with:
|
|
61
|
+
name: macos-python-package
|
|
62
|
+
path: dist/*
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
paths:
|
|
6
|
+
- ".github/workflows/publish.yml"
|
|
7
|
+
- ".agents/plugins/marketplace.json"
|
|
8
|
+
- "Cargo.*"
|
|
9
|
+
- "pyproject.toml"
|
|
10
|
+
- "README.md"
|
|
11
|
+
- "LICENSE"
|
|
12
|
+
- "THIRD_PARTY_NOTICES.md"
|
|
13
|
+
- "src/**"
|
|
14
|
+
- "plugins/**"
|
|
15
|
+
- "scripts/smoke-package.py"
|
|
16
|
+
- "scripts/check-release-artifacts.py"
|
|
17
|
+
workflow_dispatch:
|
|
18
|
+
release:
|
|
19
|
+
types: [published]
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
|
|
24
|
+
concurrency:
|
|
25
|
+
group: pypi-${{ github.ref }}
|
|
26
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
validate:
|
|
30
|
+
name: Validate release
|
|
31
|
+
runs-on: ubuntu-24.04
|
|
32
|
+
timeout-minutes: 25
|
|
33
|
+
outputs:
|
|
34
|
+
version: ${{ steps.version.outputs.version }}
|
|
35
|
+
steps:
|
|
36
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
37
|
+
with:
|
|
38
|
+
persist-credentials: false
|
|
39
|
+
fetch-depth: 0
|
|
40
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
41
|
+
with:
|
|
42
|
+
python-version: "3.12"
|
|
43
|
+
- uses: dtolnay/rust-toolchain@1.88.0
|
|
44
|
+
with:
|
|
45
|
+
components: rustfmt, clippy
|
|
46
|
+
- uses: Swatinem/rust-cache@v2
|
|
47
|
+
- run: make check
|
|
48
|
+
- name: Check version and release source
|
|
49
|
+
id: version
|
|
50
|
+
run: |
|
|
51
|
+
python - <<'PY'
|
|
52
|
+
import os, re, subprocess, tomllib
|
|
53
|
+
from pathlib import Path
|
|
54
|
+
version = tomllib.loads(Path("Cargo.toml").read_text())["package"]["version"]
|
|
55
|
+
assert re.fullmatch(r"\d+\.\d+\.\d+", version), "Use a stable PEP 440 version"
|
|
56
|
+
if os.environ["GITHUB_REF"].startswith("refs/tags/"):
|
|
57
|
+
assert os.environ["GITHUB_REF_NAME"] == f"v{version}", "Tag/version mismatch"
|
|
58
|
+
subprocess.run(["git", "merge-base", "--is-ancestor", "HEAD", "origin/main"], check=True)
|
|
59
|
+
with open(os.environ["GITHUB_OUTPUT"], "a") as output:
|
|
60
|
+
output.write(f"version={version}\n")
|
|
61
|
+
PY
|
|
62
|
+
|
|
63
|
+
wheels:
|
|
64
|
+
name: Wheel (${{ matrix.target }})
|
|
65
|
+
needs: validate
|
|
66
|
+
strategy:
|
|
67
|
+
fail-fast: false
|
|
68
|
+
matrix:
|
|
69
|
+
include:
|
|
70
|
+
- os: macos-14
|
|
71
|
+
target: aarch64-apple-darwin
|
|
72
|
+
- os: macos-15-intel
|
|
73
|
+
target: x86_64-apple-darwin
|
|
74
|
+
- os: ubuntu-24.04
|
|
75
|
+
target: x86_64-unknown-linux-gnu
|
|
76
|
+
- os: ubuntu-24.04-arm
|
|
77
|
+
target: aarch64-unknown-linux-gnu
|
|
78
|
+
runs-on: ${{ matrix.os }}
|
|
79
|
+
timeout-minutes: 40
|
|
80
|
+
env:
|
|
81
|
+
MACOSX_DEPLOYMENT_TARGET: "11.0"
|
|
82
|
+
RELEASE_VERSION: ${{ needs.validate.outputs.version }}
|
|
83
|
+
steps:
|
|
84
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
85
|
+
with:
|
|
86
|
+
persist-credentials: false
|
|
87
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
88
|
+
with:
|
|
89
|
+
python-version: "3.12"
|
|
90
|
+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
|
|
91
|
+
with:
|
|
92
|
+
node-version: "22"
|
|
93
|
+
- uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380 # v1.49.4
|
|
94
|
+
with:
|
|
95
|
+
maturin-version: v1.11.5
|
|
96
|
+
rust-toolchain: 1.88.0
|
|
97
|
+
target: ${{ matrix.target }}
|
|
98
|
+
manylinux: "2_28"
|
|
99
|
+
args: --release --locked --out dist --compatibility pypi
|
|
100
|
+
- name: Install test tools
|
|
101
|
+
run: |
|
|
102
|
+
python -m pip install 'uv>=0.8,<1'
|
|
103
|
+
npm install --prefix "$RUNNER_TEMP/codex-cli" --no-audit --no-fund @openai/codex@0.153.4
|
|
104
|
+
- name: Test pip installation and the Codex plugin
|
|
105
|
+
run: |
|
|
106
|
+
python -m venv "$RUNNER_TEMP/pip-test"
|
|
107
|
+
"$RUNNER_TEMP/pip-test/bin/python" -m pip install --no-index dist/*.whl
|
|
108
|
+
python scripts/smoke-package.py \
|
|
109
|
+
--binary "$RUNNER_TEMP/pip-test/bin/codex-aws-helper" \
|
|
110
|
+
--codex-bin "$RUNNER_TEMP/codex-cli/node_modules/.bin/codex" \
|
|
111
|
+
--expected-version "$RELEASE_VERSION"
|
|
112
|
+
- name: Test uv installation and the Codex plugin
|
|
113
|
+
env:
|
|
114
|
+
UV_TOOL_DIR: ${{ runner.temp }}/uv-tools
|
|
115
|
+
UV_TOOL_BIN_DIR: ${{ runner.temp }}/uv-bin
|
|
116
|
+
UV_CACHE_DIR: ${{ runner.temp }}/uv-cache
|
|
117
|
+
run: |
|
|
118
|
+
uv tool install --python "$(command -v python)" --no-index dist/*.whl
|
|
119
|
+
python scripts/smoke-package.py \
|
|
120
|
+
--binary "$UV_TOOL_BIN_DIR/codex-aws-helper" \
|
|
121
|
+
--codex-bin "$RUNNER_TEMP/codex-cli/node_modules/.bin/codex" \
|
|
122
|
+
--expected-version "$RELEASE_VERSION"
|
|
123
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
124
|
+
with:
|
|
125
|
+
name: wheel-${{ matrix.target }}
|
|
126
|
+
path: dist/*.whl
|
|
127
|
+
if-no-files-found: error
|
|
128
|
+
|
|
129
|
+
sdist:
|
|
130
|
+
name: Source distribution
|
|
131
|
+
needs: validate
|
|
132
|
+
runs-on: ubuntu-24.04
|
|
133
|
+
timeout-minutes: 30
|
|
134
|
+
steps:
|
|
135
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
136
|
+
with:
|
|
137
|
+
persist-credentials: false
|
|
138
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
139
|
+
with:
|
|
140
|
+
python-version: "3.12"
|
|
141
|
+
- uses: dtolnay/rust-toolchain@1.88.0
|
|
142
|
+
- run: python -m pip install maturin==1.11.5
|
|
143
|
+
- run: maturin sdist --out dist
|
|
144
|
+
- name: Build from the source distribution
|
|
145
|
+
env:
|
|
146
|
+
CARGO_TARGET_DIR: ${{ runner.temp }}/sdist-target
|
|
147
|
+
run: python -m pip wheel --no-deps --no-build-isolation --wheel-dir "$RUNNER_TEMP/from-sdist" dist/*.tar.gz
|
|
148
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
149
|
+
with:
|
|
150
|
+
name: source-distribution
|
|
151
|
+
path: dist/*.tar.gz
|
|
152
|
+
if-no-files-found: error
|
|
153
|
+
|
|
154
|
+
distributions:
|
|
155
|
+
name: Check release artifacts
|
|
156
|
+
needs: [validate, wheels, sdist]
|
|
157
|
+
runs-on: ubuntu-24.04
|
|
158
|
+
timeout-minutes: 10
|
|
159
|
+
steps:
|
|
160
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
161
|
+
with:
|
|
162
|
+
persist-credentials: false
|
|
163
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
164
|
+
with:
|
|
165
|
+
python-version: "3.12"
|
|
166
|
+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
167
|
+
with:
|
|
168
|
+
pattern: wheel-*
|
|
169
|
+
merge-multiple: true
|
|
170
|
+
path: dist
|
|
171
|
+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
172
|
+
with:
|
|
173
|
+
name: source-distribution
|
|
174
|
+
path: dist
|
|
175
|
+
- run: python -m pip install twine
|
|
176
|
+
- run: python -m twine check --strict dist/*
|
|
177
|
+
- name: Check package contents and platform coverage
|
|
178
|
+
env:
|
|
179
|
+
RELEASE_VERSION: ${{ needs.validate.outputs.version }}
|
|
180
|
+
run: python scripts/check-release-artifacts.py dist --expected-version "$RELEASE_VERSION"
|
|
181
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
182
|
+
with:
|
|
183
|
+
name: release-distributions
|
|
184
|
+
path: dist/*
|
|
185
|
+
if-no-files-found: error
|
|
186
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
187
|
+
with:
|
|
188
|
+
name: release-checksums
|
|
189
|
+
path: SHA256SUMS
|
|
190
|
+
|
|
191
|
+
publish:
|
|
192
|
+
name: Publish to PyPI
|
|
193
|
+
if: github.event_name == 'release' && github.repository == 'mccartnick/codex-aws-helper'
|
|
194
|
+
needs: distributions
|
|
195
|
+
runs-on: ubuntu-24.04
|
|
196
|
+
timeout-minutes: 10
|
|
197
|
+
environment:
|
|
198
|
+
name: pypi
|
|
199
|
+
url: https://pypi.org/project/codex-aws-helper/
|
|
200
|
+
permissions:
|
|
201
|
+
contents: read
|
|
202
|
+
id-token: write
|
|
203
|
+
steps:
|
|
204
|
+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
205
|
+
with:
|
|
206
|
+
name: release-distributions
|
|
207
|
+
path: dist
|
|
208
|
+
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Local operating-system and editor files
|
|
2
|
+
.DS_Store
|
|
3
|
+
*.swp
|
|
4
|
+
*.swo
|
|
5
|
+
.idea/
|
|
6
|
+
.vscode/
|
|
7
|
+
|
|
8
|
+
# Rust build outputs (Cargo.lock should be committed for the application)
|
|
9
|
+
/target/
|
|
10
|
+
/dist/
|
|
11
|
+
/SHA256SUMS
|
|
12
|
+
/coverage/
|
|
13
|
+
/tmp/
|
|
14
|
+
.venv/
|
|
15
|
+
__pycache__/
|
|
16
|
+
*.egg-info/
|
|
17
|
+
|
|
18
|
+
# Private runtime material must never become project fixtures
|
|
19
|
+
.env
|
|
20
|
+
.env.*
|
|
21
|
+
!.env.example
|
|
22
|
+
.aws/
|
|
23
|
+
/private/
|
|
24
|
+
/local-evidence/
|
|
25
|
+
/support-bundles/
|
|
26
|
+
*.log
|
|
27
|
+
*.bak
|
|
28
|
+
*.pem
|
|
29
|
+
*.key
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Project guidance
|
|
2
|
+
|
|
3
|
+
This repository implements the `codex-aws-helper` 0.3.0 preview in Rust, including a local MCP server and Codex plugin. Read `README.md`, `docs/requirements.md`, `docs/architecture.md`, and `docs/roadmap.md` before making changes. Implementation, offline test coverage, and authenticated validation are separate claims; measured results and remaining visual/relaunch checks are in `docs/validation.md`.
|
|
4
|
+
|
|
5
|
+
- Treat `docs/source-handoff.md` as historical reference. The current user request and accepted decisions take precedence over its embedded prompt and Python proposal.
|
|
6
|
+
- Write `README.md` for people trying the tool: a short explanation, one getting-started path, terminal/plugin examples, and practical limits. Use plain language and minimal decoration. Keep alternate installation and troubleshooting details in `docs/installation.md`, build/release steps in `CONTRIBUTING.md`, and implementation contracts in the relevant `docs/` guide. Repository instructions belong in `AGENTS.md`; plugin agent behavior belongs in its `SKILL.md`.
|
|
7
|
+
- For worktree/SSH development, use `docs/codex-remote-setup.md` and `bash scripts/codex-dev.sh {setup|quickcheck|check|build|demo}`. Setup compiles tests; it does not run them. Keep environment actions on these shared commands. The SessionStart hook supplies only Git context. Use `aws_helper_reviewer` when an independent read-only review is requested; keep local tests, CI, host activation, and live AWS evidence distinct.
|
|
8
|
+
- Keep the code lean: prefer the existing flat modules, small typed APIs, and shared application services. Add abstractions or dependencies only for a concrete need. Keep business logic out of terminal rendering.
|
|
9
|
+
- Keep the local MCP server on the shared inventory, AWS, configuration, and recovery services. Questions collect nonsecret settings only. Tool calls cannot replace server file roots or executables. Return redacted diffs and expiring preview IDs, never full TOML. MCP form questions have a conversation fallback; existing user authorization still applies to reviewed changes.
|
|
10
|
+
- Ship the same executable through Cargo, native archives, and Maturin binary wheels. Keep Cargo/plugin versions aligned and Python metadata derived from Cargo. Exported plugin bundles must point to the installed executable and never overwrite existing directories. `plugin install` uses supported Codex commands, a private managed local marketplace, and immutable asset bundles; repeated installs retain per-tool restrictions. `plugin uninstall` removes only validated owned files and the plugin's own settings. Release workflows test actual pip/uv installs in isolated Codex homes; PyPI publishing uses OIDC only for validated tags on main.
|
|
11
|
+
- Bare interactive invocation opens the start menu: setup, dashboard, admin, and command guide. Direct `setup` and `dashboard` retain their shortcuts; bare noninteractive/JSON invocation remains offline status. Menu/guide entry must not inspect tools or credentials. Demo remains synthetic, including `demo menu`. Do not add an onboarding-complete flag that changes routing.
|
|
12
|
+
- The walkthrough defaults to persistent desktop setup: **Save & open Codex** is the primary completion action, with Save only and Preview available. Keep review/completion concise; explicit details reveal full paths, redacted diffs, and recovery commands. Preview must show the concrete proposed changes. Setup returns to the shell after completion or cancellation, including when entered through admin.
|
|
13
|
+
- Admin tools call the existing command handlers. Choose missing AWS scope locally, then confirm each network operation with its profile, region, endpoint, and model when applicable. `--offline` refuses those actions; menu browsing cannot authenticate. Direct command flags remain explicit authorization without extra menu prompts.
|
|
14
|
+
- Ask how to connect before listing AWS profiles: existing profile, IAM Identity Center SSO, AWS console sign-in, or hidden access-key/session-token entry. New connections require a name and explicit metadata-only confirmation. Authentication changes already confirmed remain if the user cancels the later Codex setup. Failed catalogs offer Change AWS connection as the primary recovery.
|
|
15
|
+
- Desktop workspaces persist within helper state, keyed by AWS profile name and normalized absolute AWS config/credentials file paths, never by model, region, or file timestamps. Reuse the owned Codex, desktop-data, and recovery stores in place. Old `desktop-*` workspaces require explicit adoption because they lack AWS-file provenance; retain all unselected stores and keep interrupted adoptions recoverable. Never copy or merge authentication or transcripts. Preserve applicable managed requirements and reject effective `sqlite_home` paths outside the profile workspace.
|
|
16
|
+
- An unchanged profile already running returns **already open**, without launch, focus, or termination. Refuse configuration/policy changes and adoption of an older running workspace until the user quits only that profile's app. A new profile launches separately with matching `--user-data-dir` and `CODEX_ELECTRON_USER_DATA_PATH`, plus its profile `CODEX_HOME`; either desktop-data control alone is insufficient. Retain the private per-launch temporary directory. Never use a kill/restart or ordinary app-opening fallback.
|
|
17
|
+
- Save & open checks launch compatibility before saving and rechecks at launch. Save-only and demo skip that inspection. Select the newest inspected, valid installed copy; an unsupported copy must not hide another compatible installation. Builds 10789/10492 passed separate process, app-server, environment, and storage-isolation checks alongside existing apps. Retain the exact build gate; static presence of isolation controls alone does not validate a new build. Visual onboarding/history and relaunch after quitting remain separate checks.
|
|
18
|
+
- `Codex · <profile>` is a helper label, not a verified window/Dock title override. No per-profile desktop naming control is verified in build 8109. The built-in Codex Dock icon setting changes shared app preferences; offer optional guidance without forcing it. Do not modify signed bundles or add a launcher fork to imply cosmetic isolation.
|
|
19
|
+
- Automatic selection of an existing `aws-helper` Codex profile is walkthrough-only. Other commands use their explicit context. Dashboard catalog scope must match the refresh scope, including `--both-endpoints` and expanded `--region all`.
|
|
20
|
+
- Preserve the neutral, teal, mint, and amber palette, with blue and AWS-orange walkthrough accents. Use a simple colored startup title; logo artwork has been shelved following user feedback. Keep separate helper/AWS profile/region lines after connection selection, the credential-source key, and no-color/plain paths. Display labels must not change raw source codes or imply verified access. Dashboard suggestions currently display commands; do not describe them as executable actions.
|
|
21
|
+
- Keep offline inspection offline. In the walkthrough, confirming a profile and region loads that scope's Mantle catalog once; disclose the request before region confirmation. Back/Help must not retry automatically. `--offline` permits only cached/manual setup and rejects explicit AWS operations. Login, STS, and inference retain their separate operation paths.
|
|
22
|
+
- AWS CLI selection belongs to `aws_cli.rs`: inspect PATH and standard installation locations with bounded version-only probes, deduplicate symlinks, and choose the newest detected v2. Retry inconclusive probes once within the shared deadline; distinguish unverified versions from confirmed old versions. An explicit `--aws-bin` stays pinned. Online setup/AWS operations require v2 2.22+, console sign-in requires 2.32+, and offline inspection remains usable without them. Menu/guide/demo entry must not trigger discovery. Never change the user's PATH or install AWS CLI automatically.
|
|
23
|
+
- Review offers optional Verify this setup: explicitly confirm STS, show the actual account/ARN locally, then separately confirm one bounded synthetic model request. Failed identity must prevent inference. Demo bypasses every adapter and offline setup omits verification. Changed profile, region, or model clears in-memory verification; historical receipts never prove current task settings.
|
|
24
|
+
- Expired/invalid SSO or console sessions offer Sign in again and retry through the configured source. Renewal has its own scoped confirmation, uses the shared 15-minute AWS CLI login path, and retains model/region/workspace selections. Failed/cancelled renewal must not retry automatically. Successful renewal invalidates catalogs/checks. Keep SSO sign-in region separate from Bedrock inference region; unknown metadata stays unknown.
|
|
25
|
+
- Describe SSO renewal as selecting a profile, not isolating its AWS token cache: other profiles sharing the same SSO session/cache can observe renewal.
|
|
26
|
+
- A failed `configure sso` means profile setup did not finish; browser authorization may already have succeeded. Keep login streams inherited and unrecorded. Give conditional account/permission-set guidance without claiming to have parsed AWS's output or verified an account. Failed setup must not promote partial profile writes into a usable connection.
|
|
27
|
+
- Actual STS account/ARN belong only to the local walkthrough, never serialized observations or helper receipts. Retain only the existing redacted CheckResult. Distinguish catalog listing, a passed API request, and an unverified Codex task; completion supplies a first-task prompt without claiming the app test has run.
|
|
28
|
+
- AWS CLI owns profile resolution, browser login, and refresh. Explicit new-connection setup may delegate SSO/console configuration or append a new profile to the selected standard AWS credentials file. Reject existing/default destinations for new profiles; preserve other profile data. Never put credentials in command arguments, UI drafts, logs, diagnostic types, or helper state. Keep input hidden even in plain mode and restore terminal state on every exit. Do not add a separate credential store, inference proxy, Codex fork, or IAM changes.
|
|
29
|
+
- Keep AWS profiles distinct from Codex profiles. Preserve exact model IDs and separate Mantle and Runtime evidence. Runtime configuration stays gated until its independent Codex integration contract is validated.
|
|
30
|
+
- Catalog failures must retain their sanitized cause and next step. Distinguish credential-helper/role failures, denied listing permissions, and genuine empty results. Show known native Codex targets first; other listed models require a compatibility warning. Preserve measured, version-scoped GPT-OSS limitations and identify Safeguard classifiers. Catalog visibility never proves invocation access. STS is endpoint-independent; its result's endpoint field identifies the selected check scope.
|
|
31
|
+
- Preserve the config planner's preview/apply/restore boundaries, unknown TOML, comments, policy refusal, private backups, and conflict checks. Display `ConfigPlan.diff`, never its full `proposed` contents.
|
|
32
|
+
- Do not infer active credentials or settings from process presence, STS success, catalog membership, or on-disk configuration. Project trust, live overrides, MDM/cloud requirements, and existing session state can remain unknown.
|
|
33
|
+
- JSON defaults to the allowlisted redacted projection. `--local-details` is an explicit local metadata view; support reports always remain redacted. Never expose secrets, raw helper output, authentication responses, or untrusted terminal controls.
|
|
34
|
+
- Keep private configuration, credentials, raw logs, neighboring projects, and temporary validation artifacts out of the repository.
|
|
35
|
+
- Default tests use synthetic temporary roots, stub executables, and isolated state. Respect the session's authorized scope for optional live tests; never modify the active app/session configuration as a test shortcut.
|
|
36
|
+
- Reuse an existing private desktop test workspace for follow-up launch checks, keeping its AWS profile name, AWS file paths, and helper state directory stable. Create a fresh workspace only when first-run behavior, cross-profile isolation, or a separately inspected app build requires one. Explain that fresh test workspaces start without history. Never close or restart the user's open Codex apps as test cleanup.
|
|
37
|
+
- Run checks appropriate to the change. `make check` runs formatting, Clippy, and locked tests; `make build` builds the release binary. `make install` uses standard locked Cargo installation; no shell startup edits. `make package` creates an unsigned host archive/checksum and does not publish. For docs, verify commands against `src/cli.rs` and `src/app.rs`, links, and status consistency.
|
|
38
|
+
- Record actual validation scope and results separately from product requirements. Do not claim unrun tests, live model/region coverage, Linux support, signed releases, or publication.
|
|
39
|
+
- Respect authorization already provided by the user. These guidelines do not add an approval loop for routine reversible work.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
- Add `plugin install`: prepare the bundled plugin, register its local
|
|
6
|
+
marketplace, and install it through Codex in one command.
|
|
7
|
+
- Refresh the plugin after package upgrades or executable relocation while
|
|
8
|
+
preserving existing Codex provider settings and per-tool restrictions.
|
|
9
|
+
- Add `plugin uninstall` to remove the managed plugin, marketplace, and
|
|
10
|
+
source files while retaining AWS credentials, provider settings, and recovery.
|
|
11
|
+
- Add a PyPI release workflow with prebuilt macOS and Linux wheels for ARM64
|
|
12
|
+
and x86-64, a buildable source distribution, and GitHub Trusted Publishing.
|
|
13
|
+
- Test each wheel through pip and uv with actual Codex plugin installation,
|
|
14
|
+
repeat installation, executable relocation, an MCP handshake, and uninstall.
|
|
15
|
+
- Include the reviewed and tested 0.2.1 changes below.
|
|
16
|
+
|
|
17
|
+
## 0.2.1
|
|
18
|
+
|
|
19
|
+
These changes were developed privately and are included in the first PyPI
|
|
20
|
+
release, 0.3.0.
|
|
21
|
+
|
|
22
|
+
- Retry inconclusive AWS CLI version checks within a shared deadline and
|
|
23
|
+
distinguish detection failures from a confirmed outdated installation.
|
|
24
|
+
- Preserve terminal foreground handoff when a sandbox permits inherited
|
|
25
|
+
terminal access but prevents reopening `/dev/tty`.
|
|
26
|
+
- Support inspected Codex desktop builds 10789 and 10492; select the newest
|
|
27
|
+
compatible installed copy while preserving separate profile workspaces.
|
|
28
|
+
- Restrict MCP restoration to the server's pinned Codex home, including
|
|
29
|
+
validation of the recovery record used at apply time.
|
|
30
|
+
- Add Mexico Central to Runtime region discovery and retain the selected
|
|
31
|
+
endpoint in identity-check metadata.
|
|
32
|
+
- Explain measured native GPT-OSS routing limitations and identify Safeguard
|
|
33
|
+
classifiers without treating a catalog listing as verified model access.
|
|
34
|
+
- Keep dashboard controls visible in narrow terminals and repeat the profile
|
|
35
|
+
and destination before saving newly entered AWS credentials.
|
|
36
|
+
|
|
37
|
+
See [the validation record](docs/validation.md) for the regional inference
|
|
38
|
+
matrix, native Codex results, and remaining customer SSO and desktop checks.
|
|
39
|
+
|
|
40
|
+
## 0.2.0
|
|
41
|
+
|
|
42
|
+
- Add a local MCP server and Codex plugin for AWS environment inspection,
|
|
43
|
+
scoped model discovery, diagnostics, and guided configuration.
|
|
44
|
+
- Ask for missing nonsecret settings through MCP form elicitation, with a
|
|
45
|
+
question-tool or conversation fallback.
|
|
46
|
+
- Reuse the CLI's configuration planner, conflict checks, private backups,
|
|
47
|
+
and restoration through expiring, single-use preview IDs.
|
|
48
|
+
- Embed the plugin and marketplace in the executable. Export a local bundle
|
|
49
|
+
pinned to the installed executable with `plugin export`.
|
|
50
|
+
- Add Python wheel/source packaging with Maturin, public setup documentation,
|
|
51
|
+
and an MIT license.
|
|
52
|
+
- Include the 0.1.10 CLI improvements: automatic AWS CLI discovery, newest-v2
|
|
53
|
+
selection, explicit executable overrides, and operation-specific version
|
|
54
|
+
requirements.
|
|
55
|
+
|
|
56
|
+
The terminal workflow and its existing compatibility boundaries remain.
|
|
57
|
+
See [the validation record](docs/validation.md) for measured release coverage.
|