Skip to content

Commit 3c9fbf6

Browse files
authored
Merge branch 'main' into dependabot/npm_and_yarn/all-e7a6843fd3
2 parents a7a09ad + 132de64 commit 3c9fbf6

44 files changed

Lines changed: 1736 additions & 300 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,6 @@ env:
1515
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
1616

1717
jobs:
18-
build:
19-
name: Build
20-
runs-on: ubuntu-latest
21-
steps:
22-
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
23-
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
24-
with:
25-
go-version: "1.26.x"
26-
- run: go build ./cmd/jailoc
27-
2818
test:
2919
name: Test
3020
runs-on: ubuntu-latest
@@ -35,16 +25,6 @@ jobs:
3525
go-version: "1.26.x"
3626
- run: go test ./...
3727

38-
vet:
39-
name: Vet
40-
runs-on: ubuntu-latest
41-
steps:
42-
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
43-
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
44-
with:
45-
go-version: "1.26.x"
46-
- run: go vet ./...
47-
4828
lint:
4929
name: Lint
5030
runs-on: ubuntu-latest

.github/workflows/nix-vendor-hash.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ jobs:
2727
steps:
2828
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2929
- uses: DeterminateSystems/nix-installer-action@ef8a148080ab6020fd15196c2084a2eea5ff2d25 # v22
30+
- uses: DeterminateSystems/magic-nix-cache-action@565684385bcd71bad329742eefe8d12f2e765b39 # v13
3031
- name: Update vendor hash
3132
run: nix develop .#ci --command nix-update --flake --version=skip jailoc
3233
- name: Check for changes
@@ -37,12 +38,18 @@ jobs:
3738
else
3839
echo "changed=true" >> "$GITHUB_OUTPUT"
3940
fi
41+
- name: Format flake
42+
if: steps.diff.outputs.changed == 'true'
43+
run: nix fmt .
4044
- name: Verify flake
4145
if: steps.diff.outputs.changed == 'true'
4246
run: nix flake check
4347
- name: Verify build
4448
if: steps.diff.outputs.changed == 'true'
4549
run: nix build
50+
- name: Verify run
51+
if: steps.diff.outputs.changed == 'true'
52+
run: nix run . -- --help
4653
- uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
4754
if: steps.diff.outputs.changed == 'true'
4855
with:

.github/workflows/nix.yml

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,17 @@ env:
1515
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
1616

1717
jobs:
18-
flake-check:
19-
name: Flake Check
20-
runs-on: ubuntu-latest
21-
steps:
22-
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
23-
- uses: DeterminateSystems/nix-installer-action@ef8a148080ab6020fd15196c2084a2eea5ff2d25 # v22
24-
- run: nix flake check
25-
26-
build:
18+
nix:
2719
name: Build
28-
needs: flake-check
2920
runs-on: ubuntu-latest
3021
steps:
3122
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
3223
- uses: DeterminateSystems/nix-installer-action@ef8a148080ab6020fd15196c2084a2eea5ff2d25 # v22
24+
- uses: DeterminateSystems/magic-nix-cache-action@565684385bcd71bad329742eefe8d12f2e765b39 # v13
25+
- name: Check formatting
26+
run: |
27+
nix fmt .
28+
git diff --exit-code
29+
- run: nix flake check
3330
- run: nix build
31+
- run: nix run . -- --help

.github/workflows/release-please.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ jobs:
7474
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
7575
with:
7676
go-version: "1.26.x"
77-
- uses: goreleaser/goreleaser-action@1a80836c5c9d9e5755a25cb59ec6f45a3b5f41a8 # v7.2.1
77+
- uses: goreleaser/goreleaser-action@5daf1e915a5f0af01ddbcd89a43b8061ff4f1a89 # v7.2.2
7878
with:
7979
version: "~> v2"
8080
args: release --verbose --skip=validate

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
2626
with:
2727
go-version: "1.26.x"
28-
- uses: goreleaser/goreleaser-action@1a80836c5c9d9e5755a25cb59ec6f45a3b5f41a8 # v7.2.1
28+
- uses: goreleaser/goreleaser-action@5daf1e915a5f0af01ddbcd89a43b8061ff4f1a89 # v7.2.2
2929
with:
3030
version: "~> v2"
3131
args: release --verbose --skip=validate

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ result
1414
node_modules/
1515
dist/
1616
*.tgz
17+
vendor/

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "1.13.1"
2+
".": "1.15.0"
33
}

CHANGELOG.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,37 @@
11
# Changelog
22

3+
## [1.15.0](https://github.com/seznam/jailoc/compare/v1.14.0...v1.15.0) (2026-05-21)
4+
5+
6+
### Features
7+
8+
* **logging:** add always-on debug file logging ([#172](https://github.com/seznam/jailoc/issues/172)) ([d407654](https://github.com/seznam/jailoc/commit/d4076543b9375cccb6cd2268be58cc647a655ac5))
9+
10+
11+
### Bug Fixes
12+
13+
* **cmd:** enable Windows cross-compilation with PTY fallback ([#161](https://github.com/seznam/jailoc/issues/161)) ([e90baf5](https://github.com/seznam/jailoc/commit/e90baf5040cf62080001317f547de1ff6d484ec7))
14+
* **cmd:** replace creack/pty with go-pty for cross-platform PTY support ([#166](https://github.com/seznam/jailoc/issues/166)) ([5ad0cc1](https://github.com/seznam/jailoc/commit/5ad0cc18a29f3074b9525a12ec21649133ee66c9))
15+
* **config:** use filepath.IsAbs for cross-platform path validation ([#165](https://github.com/seznam/jailoc/issues/165)) ([6baf43e](https://github.com/seznam/jailoc/commit/6baf43e0c60343733cad589f3689c61f37777178))
16+
* **docker:** clarify overlay build status message ([#162](https://github.com/seznam/jailoc/issues/162)) ([f0aa418](https://github.com/seznam/jailoc/commit/f0aa41809b81e17e2ca1281caadf5d0f3613211a))
17+
18+
19+
### Documentation
20+
21+
* **how-to:** add troubleshooting page ([#174](https://github.com/seznam/jailoc/issues/174)) ([948d93e](https://github.com/seznam/jailoc/commit/948d93e6b303802956629e99aa73154271f47fab))
22+
23+
## [1.14.0](https://github.com/seznam/jailoc/compare/v1.13.1...v1.14.0) (2026-05-13)
24+
25+
26+
### Features
27+
28+
* **cmd:** add session continuation and rewrite exit title ([#154](https://github.com/seznam/jailoc/issues/154)) ([66059e3](https://github.com/seznam/jailoc/commit/66059e38f28408a5b4ad9a22b77926ce5257d9c5))
29+
30+
31+
### Bug Fixes
32+
33+
* **config:** mount OpenCode config directories read-write ([#156](https://github.com/seznam/jailoc/issues/156)) ([178f857](https://github.com/seznam/jailoc/commit/178f8574adb60eddfefc83931404ea589f71a65e))
34+
335
## [1.13.1](https://github.com/seznam/jailoc/compare/v1.13.0...v1.13.1) (2026-04-28)
436

537

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Manage sandboxed Docker Compose environments for headless OpenCode coding agents
1111

1212
## What is this?
1313

14-
`jailoc` wraps OpenCode agents in isolated Docker containers so they can run autonomously without touching your host system. Each workspace gets its own sandboxed environment with network isolation that blocks private networks by default, letting you control exactly which internal services the agent can reach. You configure which directories to mount as workspaces, which hosts to allowlist, and the agent runs inside with your OpenCode config available read-only.
14+
`jailoc` wraps OpenCode agents in isolated Docker containers so they can run autonomously, isolated from your host system except for explicitly mounted paths. Each workspace gets its own sandboxed environment with network isolation that blocks private networks by default, letting you control exactly which internal services the agent can reach. You configure which directories to mount as workspaces, which hosts to allowlist, and the agent runs inside with your OpenCode config available read-write.
1515

1616
## Why jailoc
1717

docs/explanation/container-architecture.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ flowchart TB
1313
subgraph oc["opencode"]
1414
direction TB
1515
oc_uid["UID 1000 (agent)<br>opencode serve :4096<br>published to host 127.0.0.1:PORT"]
16-
oc_mounts["Mounts:<br>paths/* (rw)<br>~/.config/oc (ro)<br>~/.claude/transcripts (rw)<br>/etc/jailoc (ro)"]
16+
oc_mounts["Mounts:<br>paths/* (rw)<br>~/.config/opencode (rw)<br>~/.opencode (rw)<br>~/.claude/transcripts (rw)<br>~/.agents (ro)<br>/etc/jailoc (ro)"]
1717
end
1818
subgraph dind["dind (privileged)"]
1919
direction TB
@@ -26,7 +26,7 @@ flowchart TB
2626
dind -.- net
2727
```
2828

29-
The **opencode container** is where the agent lives. It runs `opencode serve` as UID 1000 (a non-root user named `agent`), exposes a port bound to `127.0.0.1` on the host for attaching a terminal (not reachable from LAN or VPN), and has your workspace paths mounted read-write. Host directories are mounted into the container via configurable bind mounts — by default, your OpenCode configuration (read-only), session transcripts, and agent tooling directories. See [How-to: Configure mounts](../how-to/workspace-configuration.md#configure-mounts) for customization.
29+
The **opencode container** is where the agent lives. It runs `opencode serve` as UID 1000 (a non-root user named `agent`), exposes a port bound to `127.0.0.1` on the host for attaching a terminal (not reachable from LAN or VPN), and has your workspace paths mounted read-write. Host directories are mounted into the container via configurable bind mounts — by default, your OpenCode configuration (read-write), session transcripts, and agent tooling directories. See [How-to: Configure mounts](../how-to/workspace-configuration.md#configure-mounts) for customization.
3030

3131
The opencode container runs with configurable resource limits. The `cpu` (default 2 cores) and `memory` (default 4 GB) settings control how much of the host's resources the container can consume, and are configurable per workspace via the TOML config. Other resource limits — `pids_limit` (256) and `mem_reservation` (512 MB) — are fixed and not configurable. Resource limit changes take effect on the next `jailoc up` invocation; running containers are not affected until restarted.
3232

@@ -45,7 +45,7 @@ The opencode container mounts several things at startup:
4545
| Mount | Direction | Purpose |
4646
|-------|-----------|---------|
4747
| Workspace paths | read-write | The directories the agent is working in |
48-
| Configurable mounts | per-mount | Host directories mounted into the container, controlled by the `mounts` config field. Defaults include OpenCode configuration (ro), session transcripts (rw), and agent tooling (ro). See [Configuration Reference](../reference/configuration.md#mounts) for the full list and merge rules. |
48+
| Configurable mounts | per-mount | Host directories mounted into the container, controlled by the `mounts` config field. Defaults include OpenCode configuration (rw — the agent needs write access to persist settings, install tools, and update its own configuration), session transcripts (rw), and agent tooling (ro). See [Configuration Reference](../reference/configuration.md#mounts) for the full list and merge rules. |
4949
| `/etc/jailoc` | read-only | jailoc's own runtime config, including allowed hosts |
5050
| SSH agent socket | read-write | Host SSH agent forwarded into the container (when `ssh_auth_sock = true`). Also mounts `~/.ssh/known_hosts` read-only for host key verification. |
5151
| `~/.gitconfig` | read-only | Host Git configuration (when `git_config = true`, the default) |

0 commit comments

Comments
 (0)