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.
Files changed (80) hide show
  1. codex_aws_helper-0.3.0/.agents/plugins/marketplace.json +20 -0
  2. codex_aws_helper-0.3.0/.cargo/config.toml +2 -0
  3. codex_aws_helper-0.3.0/.codex/agents/aws_helper_reviewer.toml +13 -0
  4. codex_aws_helper-0.3.0/.codex/environments/environment.toml +30 -0
  5. codex_aws_helper-0.3.0/.codex/hooks.json +19 -0
  6. codex_aws_helper-0.3.0/.gitattributes +1 -0
  7. codex_aws_helper-0.3.0/.github/pull_request_template.md +9 -0
  8. codex_aws_helper-0.3.0/.github/rulesets/main.json +55 -0
  9. codex_aws_helper-0.3.0/.github/workflows/check.yml +62 -0
  10. codex_aws_helper-0.3.0/.github/workflows/publish.yml +208 -0
  11. codex_aws_helper-0.3.0/.gitignore +29 -0
  12. codex_aws_helper-0.3.0/AGENTS.md +39 -0
  13. codex_aws_helper-0.3.0/CHANGELOG.md +57 -0
  14. codex_aws_helper-0.3.0/CONTRIBUTING.md +146 -0
  15. codex_aws_helper-0.3.0/Cargo.lock +2702 -0
  16. codex_aws_helper-0.3.0/Cargo.toml +40 -0
  17. codex_aws_helper-0.3.0/LICENSE +21 -0
  18. codex_aws_helper-0.3.0/Makefile +20 -0
  19. codex_aws_helper-0.3.0/PKG-INFO +98 -0
  20. codex_aws_helper-0.3.0/README.md +76 -0
  21. codex_aws_helper-0.3.0/THIRD_PARTY_NOTICES.md +10339 -0
  22. codex_aws_helper-0.3.0/docs/api-contracts.md +154 -0
  23. codex_aws_helper-0.3.0/docs/architecture.md +161 -0
  24. codex_aws_helper-0.3.0/docs/codex-cheatsheet.md +580 -0
  25. codex_aws_helper-0.3.0/docs/codex-remote-setup.md +274 -0
  26. codex_aws_helper-0.3.0/docs/commands.md +128 -0
  27. codex_aws_helper-0.3.0/docs/compatibility.md +42 -0
  28. codex_aws_helper-0.3.0/docs/customer-pilot.md +90 -0
  29. codex_aws_helper-0.3.0/docs/experience.md +214 -0
  30. codex_aws_helper-0.3.0/docs/installation.md +211 -0
  31. codex_aws_helper-0.3.0/docs/plugin-design.md +87 -0
  32. codex_aws_helper-0.3.0/docs/plugin-distribution.md +144 -0
  33. codex_aws_helper-0.3.0/docs/repository-maintenance.md +56 -0
  34. codex_aws_helper-0.3.0/docs/requirements-pdf.txt +1 -0
  35. codex_aws_helper-0.3.0/docs/requirements.md +89 -0
  36. codex_aws_helper-0.3.0/docs/roadmap.md +48 -0
  37. codex_aws_helper-0.3.0/docs/source-handoff.md +387 -0
  38. codex_aws_helper-0.3.0/docs/terminal-guide.md +208 -0
  39. codex_aws_helper-0.3.0/docs/validation.md +502 -0
  40. codex_aws_helper-0.3.0/output/pdf/codex-remote-development-cheatsheet.pdf +422 -0
  41. codex_aws_helper-0.3.0/plugins/codex-aws-helper/.codex-plugin/plugin.json +25 -0
  42. codex_aws_helper-0.3.0/plugins/codex-aws-helper/.mcp.json +10 -0
  43. codex_aws_helper-0.3.0/plugins/codex-aws-helper/skills/aws-setup/SKILL.md +79 -0
  44. codex_aws_helper-0.3.0/pyproject.toml +38 -0
  45. codex_aws_helper-0.3.0/scripts/build-codex-cheatsheet.py +336 -0
  46. codex_aws_helper-0.3.0/scripts/check-package.py +66 -0
  47. codex_aws_helper-0.3.0/scripts/check-release-artifacts.py +89 -0
  48. codex_aws_helper-0.3.0/scripts/codex-dev.sh +111 -0
  49. codex_aws_helper-0.3.0/scripts/codex-session-start.py +63 -0
  50. codex_aws_helper-0.3.0/scripts/generate-notices.py +105 -0
  51. codex_aws_helper-0.3.0/scripts/package.sh +27 -0
  52. codex_aws_helper-0.3.0/scripts/smoke-package.py +188 -0
  53. codex_aws_helper-0.3.0/src/app.rs +861 -0
  54. codex_aws_helper-0.3.0/src/auth.rs +1549 -0
  55. codex_aws_helper-0.3.0/src/aws.rs +1218 -0
  56. codex_aws_helper-0.3.0/src/aws_cli.rs +543 -0
  57. codex_aws_helper-0.3.0/src/aws_data.rs +147 -0
  58. codex_aws_helper-0.3.0/src/cli.rs +157 -0
  59. codex_aws_helper-0.3.0/src/config.rs +1768 -0
  60. codex_aws_helper-0.3.0/src/dashboard.rs +1094 -0
  61. codex_aws_helper-0.3.0/src/demo.rs +106 -0
  62. codex_aws_helper-0.3.0/src/desktop.rs +1944 -0
  63. codex_aws_helper-0.3.0/src/evidence.rs +518 -0
  64. codex_aws_helper-0.3.0/src/inventory.rs +688 -0
  65. codex_aws_helper-0.3.0/src/lib.rs +19 -0
  66. codex_aws_helper-0.3.0/src/main.rs +47 -0
  67. codex_aws_helper-0.3.0/src/mcp.rs +755 -0
  68. codex_aws_helper-0.3.0/src/menu.rs +586 -0
  69. codex_aws_helper-0.3.0/src/model.rs +315 -0
  70. codex_aws_helper-0.3.0/src/plugin.rs +545 -0
  71. codex_aws_helper-0.3.0/src/process.rs +689 -0
  72. codex_aws_helper-0.3.0/src/redaction.rs +868 -0
  73. codex_aws_helper-0.3.0/src/setup.rs +3634 -0
  74. codex_aws_helper-0.3.0/tests/aws.rs +365 -0
  75. codex_aws_helper-0.3.0/tests/aws_cli.rs +1088 -0
  76. codex_aws_helper-0.3.0/tests/cli.rs +1126 -0
  77. codex_aws_helper-0.3.0/tests/mcp.rs +540 -0
  78. codex_aws_helper-0.3.0/tests/plugin.rs +219 -0
  79. codex_aws_helper-0.3.0/tests/setup.rs +1725 -0
  80. 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,2 @@
1
+ [resolver]
2
+ incompatible-rust-versions = "fallback"
@@ -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.