Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
99 changes: 99 additions & 0 deletions .github/scripts/commandcode_acp_smoke.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
// Real CLI compatibility check; no account or model calls required.
// Run: node .github/scripts/commandcode_acp_smoke.mjs
import assert from "node:assert/strict";
import { spawn } from "node:child_process";
import { mkdtemp, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { delimiter, dirname, join } from "node:path";
import { createInterface } from "node:readline";

const home = await mkdtemp(join(tmpdir(), "openab-commandcode-"));
// Match OpenAB's child environment; isolate HOME so CI cannot reuse credentials.
const env = {
HOME: home,
PATH: dirname(process.execPath) + delimiter + process.env.PATH,
};
for (const key of process.platform === "win32"
? ["USERNAME", "SystemRoot", "SystemDrive"]
: ["USER"]) {
if (process.env[key]) env[key] = process.env[key];
}
if (process.platform === "win32") env.USERPROFILE = home;

const child = spawn("command-code", ["acp"], {
cwd: home,
env,
stdio: ["pipe", "pipe", "inherit"],
});
const lines = createInterface({ input: child.stdout });
const pending = new Map();
let failure;
let nextId = 0;

function fail(error) {
failure = error;
for (const { reject } of pending.values()) reject(error);
}
child.on("error", fail);
child.stdin.on("error", fail);
child.on("exit", (code, signal) => fail(new Error(`CLI exited: ${code ?? signal}`)));
lines.on("line", (line) => {
try {
const message = JSON.parse(line);
assert.equal(message.jsonrpc, "2.0");
pending.get(message.id)?.resolve(message);
} catch (error) {
fail(error);
}
});

async function request(method, params) {
if (failure) throw failure;
const id = ++nextId;
let timer;
try {
return await new Promise((resolve, reject) => {
pending.set(id, { resolve, reject });
timer = setTimeout(() => reject(new Error(`${method} timed out`)), 30_000);
child.stdin.write(JSON.stringify({ jsonrpc: "2.0", id, method, params }) + "\n");
});
} finally {
clearTimeout(timer);
pending.delete(id);
}
}

try {
// Same handshake and capabilities as AcpConnection::initialize.
const init = await request("initialize", {
protocolVersion: 1,
clientCapabilities: {},
clientInfo: { name: "openab", version: "0.1.0" },
});
assert.equal(init.error, undefined);
assert.equal(init.result.protocolVersion, 1);
assert.equal(init.result.agentInfo.name, "Command Code");
assert.equal(init.result.agentCapabilities.loadSession, true);
console.log(`PASS initialize: Command Code ${init.result.agentInfo.version}`);

const relative = await request("session/new", { cwd: ".", mcpServers: [] });
assert.equal(relative.error?.code, -32602);
assert.match(relative.error.message, /absolute/i);
console.log("PASS session/new: relative project directories are rejected");

const session = await request("session/new", { cwd: home, mcpServers: [] });
assert.equal(session.error?.code, -32000);
assert.match(session.error.message, /not authenticated/i);
console.log("PASS session/new: structured authentication error on clean HOME");
} finally {
lines.close();
child.stdin.end();
if (child.exitCode === null && child.signalCode === null) {
await new Promise((resolve) => {
const timer = setTimeout(() => child.kill("SIGKILL"), 5_000);
child.once("close", () => { clearTimeout(timer); resolve(); });
child.kill();
});
}
await rm(home, { recursive: true, force: true });
}
3 changes: 2 additions & 1 deletion .github/scripts/test_node_base_arg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,11 @@ repo_expect() { # repo_expect <dockerfile> <target> <want_stdout>
fi
}
for f in Dockerfile.unified Dockerfile.package; do
for t in claude codex copilot gemini mimocode opencode pi; do repo_expect "$f" "$t" NODE22_VERSION; done
for t in claude codex commandcode copilot gemini mimocode opencode pi; do repo_expect "$f" "$t" NODE22_VERSION; done
repo_expect "$f" kimi NODE24_VERSION
for t in kiro cursor grok devin antigravity native agentcore; do repo_expect "$f" "$t" ''; done
done
repo_expect Dockerfile.commandcode '' NODE22_VERSION
echo "ok repository targets"

[ "$failures" -eq 0 ] || { echo "$failures test(s) failed"; exit 1; }
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ jobs:
fi

# Resolve variants
ALLOWED="kiro,claude,codex,copilot,cursor,devin,gemini,grok,kimi,mimocode,opencode,antigravity,pi,native,agentcore"
ALLOWED="kiro,claude,codex,commandcode,copilot,cursor,devin,gemini,grok,kimi,mimocode,opencode,antigravity,pi,native,agentcore"
if [ "$VARIANTS_INPUT" = "all" ] || [ -z "$VARIANTS_INPUT" ]; then
VARIANTS="$ALLOWED"
else
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-operator.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
# All agent variants built from Dockerfile.unified targets.
AGENTS: "kiro,claude,codex,copilot,cursor,devin,gemini,grok,kimi,mimocode,opencode,antigravity,pi,native,agentcore"
AGENTS: "kiro,claude,codex,commandcode,copilot,cursor,devin,gemini,grok,kimi,mimocode,opencode,antigravity,pi,native,agentcore"

jobs:
resolve-tag:
Expand Down
21 changes: 21 additions & 0 deletions .github/workflows/docker-smoke-test-unified.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ on:
- 'openab-agent/**'
- 'agy-acp/**'
- '.github/scripts/node_base_arg.sh'
- '.github/scripts/commandcode_acp_smoke.mjs'
- '.github/workflows/docker-smoke-test-unified.yml'

concurrency:
group: smoke-test-unified-${{ github.event.pull_request.number }}
Expand Down Expand Up @@ -52,6 +54,7 @@ jobs:
- { name: kiro, agent: "kiro-cli" }
- { name: claude, agent: "claude-agent-acp" }
- { name: codex, agent: "codex-acp" }
- { name: commandcode, agent: "command-code" }
- { name: copilot, agent: "copilot" }
- { name: cursor, agent: "cursor-agent" }
- { name: devin, agent: "devin" }
Expand Down Expand Up @@ -139,6 +142,24 @@ jobs:
'.result.agentInfo.name == "@agentclientprotocol/codex-acp"' \
>/dev/null

- name: Verify Command Code runtime version and defaults
if: matrix.target.name == 'commandcode'
run: |
EXPECTED=$(awk -F= '$1 == "ARG COMMAND_CODE_VERSION" {print $2; exit}' Dockerfile.unified)
test -n "$EXPECTED"
docker run --rm --entrypoint command-code openab-unified-commandcode:test --version \
| grep -Fx "$EXPECTED"
docker inspect --format '{{range .Config.Env}}{{println .}}{{end}}' openab-unified-commandcode:test \
| grep -Fx 'OPENAB_AGENT_COMMAND=command-code acp'
docker inspect --format '{{range .Config.Env}}{{println .}}{{end}}' openab-unified-commandcode:test \
| grep -Fx 'OPENAB_AGENT_AUTH_COMMAND=command-code login'

- name: Verify Command Code ACP handshake
if: matrix.target.name == 'commandcode'
run: |
docker run --rm -i --entrypoint node openab-unified-commandcode:test \
--input-type=module < .github/scripts/commandcode_acp_smoke.mjs

- name: Verify Kimi runtime version
if: matrix.target.name == 'kimi'
run: |
Expand Down
27 changes: 24 additions & 3 deletions .github/workflows/docker-smoke-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ on:
- 'Cargo.*'
- '.github/scripts/node_base_arg.sh'
- '.github/scripts/test_node_base_arg.sh'
- '.github/scripts/commandcode_acp_smoke.mjs'
- '.github/workflows/docker-smoke-test.yml'

concurrency:
group: smoke-test-${{ github.event.pull_request.number }}
Expand All @@ -29,6 +31,7 @@ jobs:
- { dockerfile: Dockerfile, suffix: "-unified", agent: "kiro-cli", agent_args: "acp --trust-all-tools", build_args: "--build-arg BUILD_MODE=unified" }
- { dockerfile: Dockerfile.claude, suffix: "-claude", agent: "claude-agent-acp", agent_args: "", build_args: "" }
- { dockerfile: Dockerfile.codex, suffix: "-codex", agent: "codex-acp", agent_args: "", build_args: "" }
- { dockerfile: Dockerfile.commandcode, suffix: "-commandcode", agent: "command-code", agent_args: "acp", build_args: "" }
- { dockerfile: Dockerfile.gemini, suffix: "-gemini", agent: "gemini", agent_args: "--acp", build_args: "" }
- { dockerfile: Dockerfile.copilot, suffix: "-copilot", agent: "copilot", agent_args: "--acp", build_args: "" }
- { dockerfile: Dockerfile.opencode, suffix: "-opencode", agent: "opencode", agent_args: "acp", build_args: "" }
Expand Down Expand Up @@ -97,6 +100,23 @@ jobs:
docker inspect --format '{{range .Config.Env}}{{println .}}{{end}}' openab-test-codex \
| grep -Fx 'OPENAB_AGENT_COMMAND=codex-acp'

- name: Verify Command Code version and defaults
if: matrix.variant.suffix == '-commandcode'
run: |
EXPECTED=$(awk -F= '$1 == "ARG COMMAND_CODE_VERSION" {print $2; exit}' Dockerfile.commandcode)
test -n "$EXPECTED"
docker run --rm --entrypoint command-code openab-test-commandcode --version | grep -Fx "$EXPECTED"
docker inspect --format '{{range .Config.Env}}{{println .}}{{end}}' openab-test-commandcode \
| grep -Fx 'OPENAB_AGENT_COMMAND=command-code acp'
docker inspect --format '{{range .Config.Env}}{{println .}}{{end}}' openab-test-commandcode \
| grep -Fx 'OPENAB_AGENT_AUTH_COMMAND=command-code login'

- name: Verify Command Code ACP handshake
if: matrix.variant.suffix == '-commandcode'
run: |
docker run --rm -i --entrypoint node openab-test-commandcode \
--input-type=module < .github/scripts/commandcode_acp_smoke.mjs

- name: Verify bumped runtime versions
if: matrix.variant.suffix == '' || matrix.variant.suffix == '-unified' || matrix.variant.suffix == '-copilot' || matrix.variant.suffix == '-devin' || matrix.variant.suffix == '-antigravity'
shell: bash
Expand Down Expand Up @@ -132,7 +152,7 @@ jobs:

- name: Verify agent responds
run: |
if [ "${{ matrix.variant.suffix }}" = "-codex" ]; then
if [ "${{ matrix.variant.suffix }}" = "-codex" ] || [ "${{ matrix.variant.suffix }}" = "-commandcode" ]; then
INIT='{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1,"clientCapabilities":{},"clientInfo":{"name":"ci-test","version":"0.0.1"}}}'
else
INIT='{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","clientCapabilities":{},"clientInfo":{"name":"ci-test","version":"0.0.1"}}}'
Expand All @@ -150,8 +170,8 @@ jobs:
if [ -n "$RESPONSE" ] && echo "$RESPONSE" | jq -e '.result.agentInfo.name' > /dev/null 2>&1; then
AGENT_NAME=$(echo "$RESPONSE" | jq -r '.result.agentInfo.name')
echo "✅ ACP handshake ok — agent=$AGENT_NAME"
elif [ "${{ matrix.variant.suffix }}" = "-codex" ]; then
echo "❌ Codex ACP handshake failed"
elif [ "${{ matrix.variant.suffix }}" = "-codex" ] || [ "${{ matrix.variant.suffix }}" = "-commandcode" ]; then
echo "❌ ACP handshake failed for ${{ matrix.variant.suffix }}"
exit 1
else
echo "⚠️ ACP handshake returned no response — falling back to CLI check"
Expand Down Expand Up @@ -210,6 +230,7 @@ jobs:
assert_line 'ARG CODEX_ACP_VERSION=2.0.0' Dockerfile.codex Dockerfile.package Dockerfile.unified
assert_line 'ARG CODEX_VERSION=0.166.0' Dockerfile.codex Dockerfile.package Dockerfile.unified
assert_line 'ARG COPILOT_VERSION=1.0.105' Dockerfile.copilot Dockerfile.package Dockerfile.unified
assert_line 'ARG COMMAND_CODE_VERSION=1.88.2' Dockerfile.commandcode Dockerfile.package Dockerfile.unified
assert_line 'ARG DEVIN_VERSION=3000.11.3' Dockerfile.devin Dockerfile.package Dockerfile.unified
assert_line 'ARG DEVIN_SHA256_AMD64=83b3b113c01bf2a3e9e100db08d77e6b086806a7754f091e20831bdfe215157e' Dockerfile.devin Dockerfile.package Dockerfile.unified
assert_line 'ARG DEVIN_SHA256_ARM64=21a2d7a8dea67987067cde7eb3fe7193a48daa8f8c3d50d414c603c4a2b67f15' Dockerfile.devin Dockerfile.package Dockerfile.unified
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/nightly-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ env:
# OPENAB_AGENT_COMMAND=openab-agent but does not ship that binary (a
# pre-existing bug across all lanes — see follow-up issue), so a nightly-pi
# tag would publish a runtime-broken image. Re-add once the pi target is fixed.
ALL_VARIANTS: 'kiro,claude,codex,copilot,cursor,devin,gemini,grok,kimi,mimocode,opencode,antigravity'
ALL_VARIANTS: 'kiro,claude,codex,commandcode,copilot,cursor,devin,gemini,grok,kimi,mimocode,opencode,antigravity'

jobs:
# ---------------------------------------------------------------------------
Expand Down Expand Up @@ -251,6 +251,10 @@ jobs:
REPORT="codex-acp $ACP + codex $CODE"
BUILD_ARGS="CODEX_ACP_VERSION=$ACP
CODEX_VERSION=$CODE" ;;
commandcode)
V=$(curl -fsSL --retry 3 https://registry.npmjs.org/command-code/latest | jq -r .version)
check_ver "$V"; REPORT="command-code $V"
BUILD_ARGS="COMMAND_CODE_VERSION=$V" ;;
copilot)
V=$(curl -fsSL --retry 3 https://registry.npmjs.org/@github/copilot/latest | jq -r .version)
check_ver "$V"; REPORT="copilot $V"
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/pr-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ on:
- antigravity
- claude
- codex
- commandcode
- copilot
- cursor
- devin
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pre-beta-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ on:
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
ALL_AGENTS: 'kiro,claude,codex,copilot,cursor,devin,gemini,grok,kimi,mimocode,opencode,antigravity,pi,native,agentcore'
ALL_AGENTS: 'kiro,claude,codex,commandcode,copilot,cursor,devin,gemini,grok,kimi,mimocode,opencode,antigravity,pi,native,agentcore'

jobs:
gate:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/snapshot-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ on:
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
ALL_VARIANTS: 'default,agentcore,antigravity,claude,codex,copilot,cursor,devin,gemini,grok,kimi,mimocode,native,opencode,pi'
ALL_VARIANTS: 'default,agentcore,antigravity,claude,codex,commandcode,copilot,cursor,devin,gemini,grok,kimi,mimocode,native,opencode,pi'

jobs:
matrix:
Expand Down
55 changes: 55 additions & 0 deletions Dockerfile.commandcode
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Standalone Command Code image.
# Usage: docker build -f Dockerfile.commandcode -t openab-commandcode .
# A prebuilt OpenAB builder may be selected with --build-arg BUILDER_IMAGE=...
ARG BUILDER_IMAGE=local_builder
ARG NODE22_VERSION=22.23.4

# Keep the Rust builder digest in sync with Dockerfile.unified.
FROM rust:1-bookworm@sha256:5e2214abe154fe26e39f64488952e5c991eeed1d6d6da7cc8381ae83927f0cfc AS local_builder
WORKDIR /build
COPY Cargo.toml Cargo.lock ./
COPY crates/openab-core/Cargo.toml crates/openab-core/Cargo.toml
COPY crates/openab-gateway/Cargo.toml crates/openab-gateway/Cargo.toml
COPY crates/openab-mcp/Cargo.toml crates/openab-mcp/Cargo.toml
COPY crates/openab-cp/Cargo.toml crates/openab-cp/Cargo.toml
RUN mkdir -p src crates/openab-core/src crates/openab-gateway/src crates/openab-mcp/src crates/openab-cp/src \
&& echo 'fn main() {}' > src/main.rs \
&& echo '' > crates/openab-core/src/lib.rs \
&& echo '' > crates/openab-gateway/src/lib.rs \
&& echo '' > crates/openab-mcp/src/lib.rs \
&& echo '' > crates/openab-cp/src/lib.rs \
&& cargo build --release --features unified \
&& rm -rf src crates/openab-core/src crates/openab-gateway/src crates/openab-mcp/src crates/openab-cp/src
COPY crates/ crates/
COPY src/ src/
RUN touch src/main.rs crates/openab-core/src/lib.rs crates/openab-gateway/src/lib.rs crates/openab-mcp/src/lib.rs crates/openab-cp/src/lib.rs \
&& cargo build --release --features unified

FROM ${BUILDER_IMAGE} AS builder
RUN test -x /build/target/release/openab

FROM node:${NODE22_VERSION}-trixie-slim AS base-node
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates curl procps ripgrep tini bubblewrap socat unzip git \
&& rm -rf /var/lib/apt/lists/*
RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \
-o /usr/share/keyrings/githubcli-archive-keyring.gpg && \
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" \
> /etc/apt/sources.list.d/github-cli.list && \
apt-get update && apt-get install -y --no-install-recommends gh && \
rm -rf /var/lib/apt/lists/*

FROM base-node AS commandcode
ARG COMMAND_CODE_VERSION=1.88.2
RUN npm install -g command-code@${COMMAND_CODE_VERSION} --retry 3
ENV HOME=/home/node
WORKDIR /home/node
COPY --from=builder --chown=node:node /build/target/release/openab /usr/local/bin/openab
RUN mkdir -p /home/node/.commandcode && chown -R node:node /home/node
USER node
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="command-code acp"
ENV OPENAB_AGENT_AUTH_COMMAND="command-code login"
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]
18 changes: 18 additions & 0 deletions Dockerfile.package
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,24 @@ ENV OPENAB_AGENT_AUTH_COMMAND="kimi"
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

# =============================================================================
# Target: commandcode
# =============================================================================
FROM base-node AS commandcode
ARG COMMAND_CODE_VERSION=1.88.2
RUN npm install -g command-code@${COMMAND_CODE_VERSION} --retry 3
ENV HOME=/home/node
WORKDIR /home/node
COPY --from=bins --chown=node:node /openab /usr/local/bin/openab
RUN mkdir -p /home/node/.commandcode && chown -R node:node /home/node
USER node
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="command-code acp"
ENV OPENAB_AGENT_AUTH_COMMAND="command-code login"
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

# =============================================================================
# Target: copilot
# =============================================================================
Expand Down
18 changes: 18 additions & 0 deletions Dockerfile.unified
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="kiro-cli acp --trust-all-tools"
ENV OPENAB_AGENT_AUTH_COMMAND="kiro-cli login --use-device-flow"

Check warning on line 130 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (kiro, kiro-cli)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand All @@ -147,7 +147,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="claude-agent-acp"
ENV OPENAB_AGENT_AUTH_COMMAND="claude auth login"

Check warning on line 150 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (claude, claude-agent-acp)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand All @@ -166,7 +166,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="codex-acp"
ENV OPENAB_AGENT_AUTH_COMMAND="codex login --device-auth"

Check warning on line 169 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (codex, codex-acp)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand All @@ -193,10 +193,28 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="kimi acp"
ENV OPENAB_AGENT_AUTH_COMMAND="kimi"

Check warning on line 196 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (kimi, kimi)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

# =============================================================================
# Target: commandcode
# =============================================================================
FROM base-node AS commandcode
ARG COMMAND_CODE_VERSION=1.88.2
RUN npm install -g command-code@${COMMAND_CODE_VERSION} --retry 3
ENV HOME=/home/node
WORKDIR /home/node
COPY --from=builder --chown=node:node /build/target/release/openab /usr/local/bin/openab
RUN mkdir -p /home/node/.commandcode && chown -R node:node /home/node
USER node
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="command-code acp"
ENV OPENAB_AGENT_AUTH_COMMAND="command-code login"

Check warning on line 214 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (commandcode, command-code)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

# =============================================================================
# Target: copilot
# =============================================================================
Expand All @@ -211,7 +229,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="copilot --acp --stdio"
ENV OPENAB_AGENT_AUTH_COMMAND="copilot login"

Check warning on line 232 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (copilot, copilot)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand All @@ -236,7 +254,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="cursor-agent acp"
ENV OPENAB_AGENT_AUTH_COMMAND="cursor-agent login"

Check warning on line 257 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (cursor, cursor-agent)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand All @@ -254,7 +272,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="gemini --acp"
ENV OPENAB_AGENT_AUTH_COMMAND="gemini auth"

Check warning on line 275 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (gemini, gemini)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand Down Expand Up @@ -285,7 +303,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="grok agent stdio"
ENV OPENAB_AGENT_AUTH_COMMAND="grok login --device-auth"

Check warning on line 306 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (grok, grok)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand All @@ -303,7 +321,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="mimo acp"
ENV OPENAB_AGENT_AUTH_COMMAND="mimo auth login --provider mimo --method \"MiMo Auto (free)\""

Check warning on line 324 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (mimocode, mimo)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand All @@ -321,7 +339,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="opencode acp"
ENV OPENAB_AGENT_AUTH_COMMAND="opencode auth login"

Check warning on line 342 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (opencode, opencode)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand Down Expand Up @@ -353,7 +371,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="devin acp"
ENV OPENAB_AGENT_AUTH_COMMAND="devin auth login --force-manual-token-flow"

Check warning on line 374 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (devin, devin)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand Down Expand Up @@ -386,7 +404,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="agy-acp"
ENV OPENAB_AGENT_AUTH_COMMAND="agy auth"

Check warning on line 407 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (antigravity, agy-acp)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand All @@ -405,7 +423,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="openab-agent"
ENV OPENAB_AGENT_AUTH_COMMAND="pi /login"

Check warning on line 426 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (pi, pi-acp)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand All @@ -422,7 +440,7 @@
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD pgrep -x openab || exit 1
ENV OPENAB_AGENT_COMMAND="openab-agent"
ENV OPENAB_AGENT_AUTH_COMMAND="openab-agent auth codex-oauth --no-browser"

Check warning on line 443 in Dockerfile.unified

View workflow job for this annotation

GitHub Actions / smoke-test-unified (native, openab-agent)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "OPENAB_AGENT_AUTH_COMMAND") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENTRYPOINT ["tini", "--"]
CMD ["openab", "run", "-c", "/etc/openab/config.toml"]

Expand Down
Loading
Loading