Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
94e5c2a
Fix Python module imports and ESLint configuration
kristoffersodersten Mar 31, 2026
5b58ff4
ci: restore pnpm workflow bootstrap
kristoffersodersten Aug 10, 2026
aa0d85c
feat(onboarding): add real first-run export flow
kristoffersodersten Aug 10, 2026
0be599c
Merge remote-tracking branch 'origin/codex/ci-foundation-repair' into…
kristoffersodersten Aug 10, 2026
e826880
test(e2e): reuse configured Chrome executable
kristoffersodersten Aug 10, 2026
12c4137
Merge pull request #23 from kristoffersodersten/codex/sod-617-first-r…
kristoffersodersten Aug 10, 2026
bfab0eb
fix(server): preserve direct entrypoint startup
kristoffersodersten Aug 11, 2026
30a4da7
fix: enforce local runtime contracts
kristoffersodersten Aug 18, 2026
e8cf5af
fix(deps): patch brace expansion advisories
kristoffersodersten Aug 18, 2026
19998de
chore: adopt NovaForge compute contract
kristoffersodersten Aug 18, 2026
fe5f79d
fix(runtime): close profile acceptance gaps
kristoffersodersten Aug 18, 2026
32b55cd
docs(runtime): record model evidence boundaries
kristoffersodersten Aug 18, 2026
e98fe1c
fix(extension): restore real selected-text flow
kristoffersodersten Aug 18, 2026
471205e
feat(presets): add canonical editable registry
kristoffersodersten Aug 18, 2026
88a6f55
fix(governance): make spec evidence fail closed
kristoffersodersten Aug 18, 2026
92e3b16
docs(product): clarify tier and delivery boundaries
kristoffersodersten Aug 18, 2026
3f47e5c
ci: enforce exact-SHA admission evidence
kristoffersodersten Aug 21, 2026
1662f16
ci: move actions to Node 24 runtimes
kristoffersodersten Aug 21, 2026
d7806fc
fix(setup): repair model bootstrap contract
kristoffersodersten Aug 21, 2026
e08157f
fix(setup): honor automatic hardware selection
kristoffersodersten Aug 21, 2026
acd6367
ci: lint shell execution contracts
kristoffersodersten Aug 21, 2026
e4b75cd
fix(runtime): fail closed on unavailable models
kristoffersodersten Aug 21, 2026
ec809fc
docs(runtime): restore canonical lane contract
kristoffersodersten Aug 21, 2026
0259a2f
fix(entitlements): fail closed on token verification
kristoffersodersten Aug 22, 2026
8adf9f7
feat(release): add fail-closed store package
kristoffersodersten Aug 21, 2026
671b5c8
fix(governance): map store release evidence
kristoffersodersten Aug 21, 2026
c2cb42a
fix(release): make store tooling reproducible
kristoffersodersten Aug 21, 2026
52bdd27
fix(entitlements): require Ed25519 release signatures
kristoffersodersten Aug 22, 2026
e36e36e
Merge pull request #28 from kristoffersodersten/codex/sod-836-store-s…
kristoffersodersten Aug 22, 2026
928a87d
fix(release): remove inactive remote checkout surface
kristoffersodersten Aug 22, 2026
c6da32c
fix(bridge): restrict browser origins
kristoffersodersten Aug 22, 2026
2570d53
fix(billing): harden local entitlement authority
kristoffersodersten Aug 22, 2026
8e89fdc
test(bridge): prove origin and size enforcement
kristoffersodersten Aug 22, 2026
271c628
fix(build): eliminate stale entitlement runtime
kristoffersodersten Aug 22, 2026
ec2132c
fix(security): close CodeQL response leaks
kristoffersodersten Aug 22, 2026
242e445
fix(runtime): remove fabricated media capabilities
kristoffersodersten Aug 22, 2026
b824386
feat(release): complete deployable SelectPilot product
kristoffersodersten Aug 25, 2026
30f09e3
test(release): reach remote-code package guard
kristoffersodersten Aug 25, 2026
ab7864c
Merge pull request #29 from kristoffersodersten/codex/sod-836-store-s…
kristoffersodersten Aug 25, 2026
4669db6
fix(ci): satisfy helper package shell lint
kristoffersodersten Aug 25, 2026
0a8947a
Merge pull request #30 from kristoffersodersten/codex/ci-package-help…
kristoffersodersten Aug 25, 2026
1772eef
fix(ci): map release modules to product spec
kristoffersodersten Aug 25, 2026
beec619
Merge pull request #31 from kristoffersodersten/codex/ci-release-spec…
kristoffersodersten Aug 25, 2026
48bdbcc
fix(privacy): restrict capture to selected text
kristoffersodersten Aug 25, 2026
9adf9bf
Merge pull request #32 from kristoffersodersten/codex/security-text-o…
kristoffersodersten Aug 25, 2026
547782b
fix(runtime): bind deterministic sampling and prewarm
kristoffersodersten Aug 25, 2026
fc6c97b
Merge pull request #33 from kristoffersodersten/codex/runtime-determi…
kristoffersodersten Aug 25, 2026
834f158
fix(runtime): support macOS system Python
kristoffersodersten Aug 25, 2026
c5791e9
Merge pull request #34 from kristoffersodersten/codex/python39-runtim…
kristoffersodersten Aug 25, 2026
edc62f8
fix(runtime): remove incompatible HTTP dependency
kristoffersodersten Aug 25, 2026
6446741
Merge pull request #35 from kristoffersodersten/codex/python39-runtim…
kristoffersodersten Aug 25, 2026
6533c3f
feat(runtime): route tasks to qualified local models
kristoffersodersten Aug 25, 2026
5c843f0
Merge pull request #36 from kristoffersodersten/codex/real-task-routing
kristoffersodersten Aug 25, 2026
f46662d
fix(ci): verify missing models fail closed
kristoffersodersten Aug 25, 2026
a76b5db
Merge pull request #37 from kristoffersodersten/codex/real-task-routing
kristoffersodersten Aug 25, 2026
b429b2f
fix(macos): install persistent local runtime
kristoffersodersten Aug 25, 2026
85e5216
fix(ci): remove obsolete installer variable
kristoffersodersten Aug 25, 2026
c1d738e
fix(macos): support system Python 3.9
kristoffersodersten Aug 25, 2026
937e492
feat(macos): add notarized helper release gate
kristoffersodersten Aug 25, 2026
ed97789
feat(release): add production entitlement deployment
kristoffersodersten Aug 30, 2026
3e0775a
Merge pull request #38 from kristoffersodersten/codex/production-rele…
kristoffersodersten Aug 30, 2026
c2c7394
fix(billing): harden Paddle webhook verification
kristoffersodersten Aug 30, 2026
8205919
Merge pull request #39 from kristoffersodersten/codex/paddle-webhook-…
kristoffersodersten Aug 30, 2026
9856bd2
fix(security): harden local privacy boundaries
kristoffersodersten Aug 30, 2026
832d387
fix(ci): synchronize hardened content bundle
kristoffersodersten Aug 30, 2026
d617452
fix(billing): bound hostile checkout and authority inputs
kristoffersodersten Aug 30, 2026
a5d089b
Merge pull request #40 from kristoffersodersten/codex/sync-generated-…
kristoffersodersten Aug 30, 2026
262497a
fix(runtime): bound logs streams and error disclosure
kristoffersodersten Aug 30, 2026
0078352
fix(ci): map checkout hardening coverage
kristoffersodersten Aug 30, 2026
7243b02
Merge pull request #41 from kristoffersodersten/codex/close-latest-ad…
kristoffersodersten Aug 30, 2026
1e7b53b
fix(governance): verify signed Axiom intent
kristoffersodersten Aug 30, 2026
2625610
Merge pull request #42 from kristoffersodersten/codex/close-latest-ad…
kristoffersodersten Aug 30, 2026
46bd07b
fix(macos): preserve hardware task routing
kristoffersodersten Aug 30, 2026
52dc2f9
Merge pull request #43 from kristoffersodersten/codex/fix-production-…
kristoffersodersten Aug 30, 2026
ae9ef22
fix(release): enforce exact production runtime truth
kristoffersodersten Sep 3, 2026
93334b7
docs(governance): record release hardening evidence
kristoffersodersten Sep 3, 2026
8064312
fix(runtime): bind helper integrity and timeout failures
kristoffersodersten Sep 3, 2026
38390b7
fix(deps): pin patched humanfs node runtime
kristoffersodersten Sep 3, 2026
2660b89
ci(security): move CodeQL workflow to v4
kristoffersodersten Sep 3, 2026
05dbc47
docs(governance): reconcile final candidate evidence
kristoffersodersten Sep 3, 2026
14b862b
fix(extension): enforce local storage and tab-bound opening
kristoffersodersten Sep 4, 2026
41afa05
perf(runtime): default to smallest qualified model
kristoffersodersten Sep 4, 2026
8a26f54
fix(panel): keep automatic profile on smallest model
kristoffersodersten Sep 4, 2026
0e5ec93
fix(runtime): keep smallest model ready after idle
kristoffersodersten Sep 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
**
!services/
!services/entitlement-authority/
!services/entitlement-authority/server.mjs
!services/entitlement-authority/Dockerfile
38 changes: 38 additions & 0 deletions .github/workflows/axiom.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Axiom Enforcement

on:
pull_request:
push:
branches:
- main

permissions:
contents: read
pull-requests: read

jobs:
axiom_validate:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout downstream repository
uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: 24

- name: Load changed files
run: |
mkdir -p .axiom-runtime
if [ "${{ github.event_name }}" = "pull_request" ]; then
git diff --name-only "origin/${{ github.base_ref }}"...HEAD > .axiom-runtime/changed-files.txt
else
git diff --name-only "${{ github.event.before }}" "${{ github.sha }}" > .axiom-runtime/changed-files.txt
fi

- name: Verify signed Axiom intent and change boundary
run: node scripts/verify-axiom-intent.mjs --changed-files .axiom-runtime/changed-files.txt
45 changes: 45 additions & 0 deletions .github/workflows/chrome-store-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Chrome Web Store release candidate

on:
workflow_dispatch:

permissions:
contents: read

jobs:
package:
environment: chrome-web-store-production
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: pnpm/action-setup@v6
with:
version: 10.33.0
- uses: actions/setup-node@v7
with:
node-version: 22
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- uses: actions/setup-python@v7
with:
python-version: "3.12"
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Install local billing runtime dependencies
run: python -m pip install --requirement requirements-billing.txt
- name: Verify source and runtime contracts
run: pnpm lint && pnpm typecheck && pnpm test && pnpm test:privacy
- name: Package authorized Store candidate
env:
SELECTPILOT_ENTITLEMENT_PUBLIC_KEYS_JSON: ${{ secrets.SELECTPILOT_ENTITLEMENT_PUBLIC_KEYS_JSON }}
SELECTPILOT_SOURCE_SHA: ${{ github.sha }}
run: pnpm package:store
- name: Upload exact-revision Store candidate
uses: actions/upload-artifact@v7
with:
name: selectpilot-chrome-web-store-${{ github.sha }}
path: |
dist/chrome-web-store/*.zip
dist/chrome-web-store/*.zip.json
if-no-files-found: error
retention-days: 30
108 changes: 100 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,28 @@ concurrency:
cancel-in-progress: true

jobs:
python-runtime-compat:
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- uses: actions/checkout@v7

- name: Use Python 3.9
uses: actions/setup-python@v7
with:
python-version: "3.9"

- name: Install local billing runtime dependencies
run: python -m pip install --requirement requirements-billing.txt

- name: Smoke macOS system-Python bridge import
run: python server/nano_server.py --help

- name: Test server on Python 3.9
run: python -m unittest discover -s tests/server -p 'test_*.py'

validate:
runs-on: ubuntu-latest
permissions:
Expand All @@ -21,34 +43,43 @@ jobs:
node-version: [20.x, 22.x]

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- name: Use pnpm
uses: pnpm/action-setup@v6
with:
version: 10.33.0

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
uses: actions/setup-node@v7
with:
node-version: ${{ matrix.node-version }}
cache: pnpm
cache-dependency-path: pnpm-lock.yaml

- name: Use pnpm
uses: pnpm/action-setup@v4
with:
version: 10.33.0

- name: Use Python 3.12
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: "3.12"

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Install local billing runtime dependencies
run: python -m pip install --requirement requirements-billing.txt

- name: Install Playwright Chromium
run: pnpm exec playwright install --with-deps chromium

- name: Lint
run: pnpm lint

- name: Lint manifest
run: pnpm lint:manifest

- name: Lint shell contracts
run: shellcheck scripts/*.sh

- name: Sync manifest version
run: pnpm sync:manifest-version

Expand All @@ -58,5 +89,66 @@ jobs:
- name: Build
run: pnpm build

- name: Verify committed JavaScript matches TypeScript sources
run: git diff --exit-code -- '*.js'

- name: Validate Chrome Web Store assets
run: pnpm validate:store

- name: Verify Store packaging fails closed without production identity
env:
SELECTPILOT_ENTITLEMENT_PUBLIC_KEYS_JSON: ""
run: |
if node scripts/package-chrome-store.mjs >store-package.log 2>&1; then
echo "Store packaging unexpectedly succeeded without an authorized public identity." >&2
exit 1
fi
grep -q "SELECTPILOT_ENTITLEMENT_PUBLIC_KEYS_JSON is required" store-package.log
test ! -d dist/chrome-web-store

- name: Smoke direct server entrypoint
run: python3 server/nano_server.py --help

- name: Test
run: pnpm test

- name: Verify local billing runtime
run: pnpm test:billing

- name: Verify privacy boundary
run: pnpm test:privacy

- name: Verify unpacked extension E2E
run: pnpm test:e2e

- name: Compile fail-closed benchmark evidence
run: pnpm bench:frontier

- name: Compile runtime policy
run: pnpm runtime:compile-policy

- name: Validate runtime policy
run: pnpm runtime:validate-policy

- name: Verify deterministic stress contracts
run: node scripts/stress-runner.mjs

- name: Verify exact-SHA code admission evidence
run: pnpm verify:admission
env:
SELECTPILOT_SOURCE_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
SELECTPILOT_WORKFLOW_SHA: ${{ github.sha }}
SELECTPILOT_REF: ${{ github.ref }}

- name: Upload exact-SHA code admission evidence
if: matrix.node-version == '22.x'
uses: actions/upload-artifact@v7
with:
name: selectpilot-code-admission-${{ github.sha }}
path: reports/code_admission_evidence.json
if-no-files-found: error
retention-days: 30

- name: Build entitlement authority image
if: matrix.node-version == '22.x'
run: docker build -f services/entitlement-authority/Dockerfile -t selectpilot-entitlement:${{ github.sha }} .
23 changes: 15 additions & 8 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,32 +27,39 @@ jobs:
language: ["javascript-typescript", "python"]

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}

- name: Use pnpm
if: matrix.language == 'javascript-typescript'
uses: pnpm/action-setup@v6
with:
version: 10.33.0

- name: Use Node.js 22
if: matrix.language == 'javascript-typescript'
uses: actions/setup-node@v4
uses: actions/setup-node@v7
with:
node-version: 22
cache: npm
cache: pnpm
cache-dependency-path: pnpm-lock.yaml

- name: Use Python 3.12
if: matrix.language == 'python'
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: "3.12"

- name: Install dependencies
if: matrix.language == 'javascript-typescript'
run: npm ci
run: pnpm install --frozen-lockfile

- name: Autobuild
uses: github/codeql-action/autobuild@v3
uses: github/codeql-action/autobuild@v4

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@v4
45 changes: 45 additions & 0 deletions .github/workflows/deploy-site.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Deploy public site

on:
workflow_dispatch:
push:
branches: [main]
paths: ["site/**", "scripts/build-site-config.mjs", ".github/workflows/deploy-site.yml"]

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: false

jobs:
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version: 22
- name: Build configured public site
run: node scripts/build-site-config.mjs
env:
PADDLE_ENVIRONMENT: production
PADDLE_CLIENT_TOKEN: ${{ secrets.PADDLE_CLIENT_TOKEN }}
PADDLE_PRICE_ESSENTIAL: ${{ vars.PADDLE_PRICE_ESSENTIAL }}
PADDLE_PRICE_PLUS: ${{ vars.PADDLE_PRICE_PLUS }}
PADDLE_PRICE_PRO: ${{ vars.PADDLE_PRICE_PRO }}
ENTITLEMENT_AUTHORITY_URL: ${{ vars.ENTITLEMENT_AUTHORITY_URL }}
CHROME_WEB_STORE_URL: ${{ vars.CHROME_WEB_STORE_URL }}
- uses: actions/configure-pages@v5
- uses: actions/upload-pages-artifact@v4
with:
path: site-dist
- name: Deploy
id: deployment
uses: actions/deploy-pages@v4
35 changes: 35 additions & 0 deletions .github/workflows/macos-helper.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: macOS helper

on:
workflow_dispatch:
pull_request:
branches: [main]
paths: ["installer/macos/**", "server/**", "scripts/package-macos-helper.sh", "scripts/release-macos-helper.sh", ".github/workflows/macos-helper.yml"]

permissions:
contents: read

jobs:
package:
runs-on: macos-15
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version: 22
- name: Package helper release candidate
run: sh scripts/package-macos-helper.sh
- name: Inspect package
run: pkgutil --payload-files dist/macos-helper/SelectPilot-Installer-unsigned.pkg | sort
- name: Verify production release remains fail-closed without identities
run: |
if sh scripts/release-macos-helper.sh; then
echo "Production release unexpectedly succeeded without signing authority." >&2
exit 1
fi
- uses: actions/upload-artifact@v7
with:
name: selectpilot-macos-helper-unsigned-${{ github.sha }}
path: dist/macos-helper/SelectPilot-Installer-unsigned.pkg
if-no-files-found: error
retention-days: 14
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
.DS_Store
__pycache__/
.venv/
node_modules/
package-lock.json
npm-debug.log*
test-results/
playwright-report/
reports/code_admission_evidence.json
dist/
site-dist/
/usr/local/var/log/chromeai/
/usr/local/var/run/chromeai/
Loading
Loading