Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
7702b7d
refactor(control-plane): composition classes for the root's three big…
ColeMurray Aug 26, 2026
7a08682
refactor(control-plane): require the secrets encryption key and disso…
ColeMurray Aug 26, 2026
d002c48
ci: split checks by ecosystem (#1592)
ColeMurray Aug 26, 2026
76661a1
fix(e2b): install Bun in runtime PATH (#1613)
listlessbird Aug 26, 2026
5fdf03c
refactor(control-plane): convert session HTTP handler factories to cl…
ColeMurray Aug 26, 2026
f2efe63
refactor(control-plane): drop vestigial logger thunks (#1615)
ColeMurray Aug 26, 2026
0e0b220
test(control-plane): typecheck test/integration/** (#1616)
ColeMurray Aug 26, 2026
ffcb6f0
fix(control-plane): keep quiet executions active (#1611)
ColeMurray Aug 26, 2026
ad91893
chore(control-plane): define DEFAULT_BASE_BRANCH once (#1617)
ColeMurray Aug 26, 2026
6df6c7b
fix(control-plane): show automation children in Mine (#1619)
ColeMurray Aug 26, 2026
49c7caf
Add human PR feedback Autofix (#1182)
ColeMurray Aug 27, 2026
54725b7
Accept producer-agnostic Open Inspect reviews (#1183)
ColeMurray Aug 27, 2026
1547604
Add Autofix configuration and operations (#1184)
ColeMurray Aug 27, 2026
2d30d35
Render rich pull request tool events in the timeline (#1618)
ColeMurray Aug 27, 2026
4d2d739
refactor(control-plane): make Autofix handler a class (#1624)
ColeMurray Aug 27, 2026
07e4771
Refactor Scheduler methods to return typed application results (#1620)
open-inspect[bot] Aug 27, 2026
ee71996
fix: decode image build provenance at API boundary (#1626)
open-inspect[bot] Aug 27, 2026
d8a5cc4
refactor(control-plane): remove Autofix service middle-man (#1625)
ColeMurray Aug 27, 2026
04d2792
fix: ignore injected OpenCode files in ESLint (#1622)
ColeMurray Aug 27, 2026
ae74cc6
refactor(control-plane): split sandbox event processor by family (#1629)
ColeMurray Aug 27, 2026
5348ece
fix: type and centralize Modal sandbox HTTP boundaries (#1631)
open-inspect[bot] Aug 27, 2026
e3529da
feat(bots): let the Slack and Linear classifiers run on OpenAI, and b…
rhlsthrm Aug 27, 2026
19fcf6c
fix(types): replace unsafe casts with validated parsing (#1623)
open-inspect[bot] Aug 27, 2026
2c12aff
fix(types): validate unsafe boundary casts (#1438)
open-inspect[bot] Aug 27, 2026
d791182
fix(types): replace unsafe casts with boundary guards (#1610)
open-inspect[bot] Aug 27, 2026
af852ce
fix(types): validate sqlite migration rows (#1593)
open-inspect[bot] Aug 27, 2026
092888a
fix(types): validate unsafe web boundary casts (#1563)
open-inspect[bot] Aug 27, 2026
28ae3de
fix(types): replace unsafe persisted-data casts (#1520)
open-inspect[bot] Aug 27, 2026
c0232e6
fix(types): validate unsafe boundary casts (#1462)
open-inspect[bot] Aug 27, 2026
c35ccdc
fix(types): validate unsafe boundary casts (#1419)
open-inspect[bot] Aug 27, 2026
c79800b
fix(types): validate unsafe boundary casts (#1531)
open-inspect[bot] Aug 27, 2026
42d713d
fix(types): replace unsafe casts with validated parsing at boundaries…
open-inspect[bot] Aug 27, 2026
cd79ba5
fix(types): validate boundary casts (#1502)
open-inspect[bot] Aug 27, 2026
ef1d7af
fix(types): validate automation request bodies (#1605)
open-inspect[bot] Aug 27, 2026
520bfa6
fix(types): validate stored integration settings (#1514)
open-inspect[bot] Aug 27, 2026
d532c4a
fix(types): validate unsafe settings request casts (#1569)
open-inspect[bot] Aug 27, 2026
aaace01
refactor(control-plane): split init and child-summary handlers (#1632)
ColeMurray Aug 27, 2026
4006c43
feat: add completed workflow run automations (#1633)
ColeMurray Aug 27, 2026
3610e78
Increase GitHub Autofix attempt default to 30 (#1636)
ColeMurray Aug 27, 2026
dab47b0
Always enable Slack message triggers (#1634)
ColeMurray Aug 27, 2026
d186540
perf: make timeline grouping linear (#1637)
ColeMurray Aug 27, 2026
8778935
refactor(control-plane): kind-parameterize sandbox access artifacts (…
ColeMurray Aug 27, 2026
6dc127d
Clarify provider account row actions (#1640)
ColeMurray Aug 28, 2026
a762ed5
perf(web): virtualize long session timelines (#1641)
ColeMurray Aug 28, 2026
c2bae32
Preserve provider preferences with versioned storage (#1614)
open-inspect[bot] Aug 28, 2026
66922a1
docs: add recent changelog entries (#1642)
ColeMurray Aug 28, 2026
7f78b05
fix(web): surface image-build feed errors and poll while building (#1…
ColeMurray Aug 28, 2026
a2d0e19
test: cover media artifact persistence failures (#1357)
open-inspect[bot] Aug 28, 2026
387a857
refactor(control-plane): collapse image-build indirection (#1643)
ColeMurray Aug 28, 2026
e6d829f
Fail sandbox pushes immediately on delivery errors (#1647)
ColeMurray Aug 28, 2026
72fb7fc
Autofocus the home page prompt (#1651)
ColeMurray Aug 28, 2026
7fecf22
Rework settings navigation and responsive layout (#1650)
ColeMurray Aug 28, 2026
b5dd684
Fix PR Autofix attempt limit settings (#1654)
ColeMurray Aug 28, 2026
f4eb4ec
Add reusable Slack app manifest template (#1655)
ColeMurray Aug 28, 2026
de6134b
Add settings destinations to global command search (#1656)
ColeMurray Aug 28, 2026
01dced9
fix(web): suppress expected sandbox access conflicts (#1648)
ColeMurray Aug 28, 2026
941dc62
Fix fatal sandbox error reporting endpoint (#1645)
ColeMurray Aug 28, 2026
a101d56
refactor: drop dead modal-infra surface and image-delete round trip (…
ColeMurray Aug 28, 2026
32470cc
Refine settings interaction and accessibility patterns (#1659)
ColeMurray Aug 29, 2026
2988038
chore: sync with upstream 2026-08-29 (CONFLICTS)
github-actions[bot] Aug 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
40 changes: 27 additions & 13 deletions .claude/skills/onboarding/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,9 +188,9 @@ unless the same verified email is also a linked GitHub identity.
Guide user:

1. https://api.slack.com/apps → "Create New App" → "From scratch"
2. OAuth & Permissions → Add scopes: `app_mentions:read`, `chat:write`, `channels:history`,
`channels:read`, `groups:history`, `groups:read`, `im:history`, `im:read`, `files:read`,
`files:write`, `reactions:write`
2. OAuth & Permissions → Add scopes: `assistant:write`, `app_mentions:read`, `chat:write`,
`channels:history`, `channels:read`, `groups:history`, `groups:read`, `im:history`, `files:read`,
`files:write`, `reactions:write`, `users:read`, `users:read.email`
3. Install to Workspace, note **Bot Token** (`xoxb-...`)
4. Basic Information → note **Signing Secret**
5. **App Home and Event Subscriptions configured AFTER deployment** (worker must be running for URL
Expand Down Expand Up @@ -264,27 +264,41 @@ terraform apply

After Terraform deployment, guide user:

The user can apply `packages/slack-bot/slack-app-manifest.yaml` instead of configuring the following
settings individually. Replace `SLACK_EVENTS_URL` with the worker's `/events` URL and
`SLACK_INTERACTIONS_URL` with its `/interactions` URL first. The template includes
`message.channels` and `message.groups` for channel-message automations; remove them if the
deployment will not use that feature.

OAuth scopes, app installation, the bot token, and the signing secret must be configured before
`terraform apply`. Apply the URL-dependent manifest after deployment.

### Enable Agents

1. Agents → Enable the agent feature
2. Set the agent description to `AI coding assistant for your codebase`

### Enable App Home

1. App Home → Show Tabs → Enable **"Home Tab"**
2. Save Changes
2. Enable **"Messages Tab"** and allow users to send messages
3. Save Changes

The App Home provides a settings interface where users can configure their preferred Claude model.
The App Home provides settings for users' preferred model, reasoning effort, and branch. The
writable Messages tab lets users start direct-message sessions.

### Configure Event Subscriptions

1. Event Subscriptions → Enable → Request URL:
`https://open-inspect-slack-bot-{deployment_name}.{subdomain}.workers.dev/events`
1. Event Subscriptions → Enable → Request URL from `terraform output -raw slack_bot_events_url`
2. Wait for "Verified" checkmark
3. Subscribe to bot events: `app_home_opened`, `app_mention`, `message.im`
3. Subscribe to bot events: `app_home_opened`, `app_mention`, `message.channels`, `message.groups`,
`message.im`

### Configure Interactivity

4. Interactivity → Enable → Request URL:
`https://open-inspect-slack-bot-{deployment_name}.{subdomain}.workers.dev/interactions`
5. Select Menus → Options Load URL:
`https://open-inspect-slack-bot-{deployment_name}.{subdomain}.workers.dev/interactions` Required
for searchable Slack repository pickers that use external data sources.
4. Interactivity → Enable → Request URL from `terraform output -raw slack_bot_interactions_url`
5. Select Menus → Use the same URL for **Options Load URL**. This is required for searchable Slack
repository pickers that use external data sources.

### Invite Bot to Channels

Expand Down
220 changes: 220 additions & 0 deletions .github/workflows/ci-python.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
name: CI (Python)

on:
push:
branches: [main]
paths:
- ".github/workflows/ci-python.yml"
- "packages/control-plane/src/image-builds/timeouts.ts"
- "packages/daytona-infra/**"
- "packages/e2b-infra/**"
- "packages/modal-infra/**"
- "packages/sandbox-runtime/**"
- "packages/shared/src/types/integrations.ts"
- "ruff.toml"
- "terraform/environments/production/modal.tf"
- "terraform/modules/modal-app/scripts/deploy.sh"
- "!**/*.md"
pull_request:
branches: [main]
paths:
- ".github/workflows/ci-python.yml"
- "packages/control-plane/src/image-builds/timeouts.ts"
- "packages/daytona-infra/**"
- "packages/e2b-infra/**"
- "packages/modal-infra/**"
- "packages/sandbox-runtime/**"
- "packages/shared/src/types/integrations.ts"
- "ruff.toml"
- "terraform/environments/production/modal.tf"
- "terraform/modules/modal-app/scripts/deploy.sh"
- "!**/*.md"

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
lint-python-sandbox-runtime:
name: Lint & Format (Python - sandbox-runtime)
runs-on: ubuntu-latest
timeout-minutes: 5
defaults:
run:
working-directory: packages/sandbox-runtime
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: "pip"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"

- name: Run Ruff linter
run: ruff check src/ tests/

- name: Run Ruff formatter check
run: ruff format --check src/ tests/

lint-python:
name: Lint & Format (Python - provider infra)
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: "pip"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e packages/sandbox-runtime
pip install -e "packages/modal-infra[dev]"

- name: Run Ruff linter
run: ruff check packages/modal-infra/ packages/e2b-infra/ packages/daytona-infra/

- name: Run Ruff formatter check
run: ruff format --check packages/modal-infra/ packages/e2b-infra/ packages/daytona-infra/

typecheck-python:
name: TypeCheck (Python)
runs-on: ubuntu-latest
timeout-minutes: 5
defaults:
run:
working-directory: packages/modal-infra
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: "pip"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ../sandbox-runtime
pip install -e ".[dev]"

- name: Run MyPy
run: mypy src/
continue-on-error: true # Allow failures initially as types are added

typecheck-python-sandbox-runtime:
name: TypeCheck (Python - sandbox-runtime)
runs-on: ubuntu-latest
timeout-minutes: 5
needs: [lint-python-sandbox-runtime]
defaults:
run:
working-directory: packages/sandbox-runtime
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: "pip"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"

- name: Run MyPy
run: mypy src/
continue-on-error: true # Allow failures initially as types are added

test-python-sandbox-runtime:
name: Test (Python - sandbox-runtime)
runs-on: ubuntu-latest
timeout-minutes: 5
needs: [lint-python-sandbox-runtime]
defaults:
run:
working-directory: packages/sandbox-runtime
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: "pip"

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: "22"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"

- name: Run tests
run: pytest tests/ -v

- name: Run Node.js tests
run: node --test tests/*.test.mjs

test-python:
name: Test (Python - modal-infra)
runs-on: ubuntu-latest
timeout-minutes: 5
needs: [lint-python]
defaults:
run:
working-directory: packages/modal-infra
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: "pip"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ../sandbox-runtime
pip install -e ".[dev]"

- name: Run tests
run: pytest tests/ -v
Loading
Loading