mirror of
https://github.com/qwibitai/nanoclaw.git
synced 2026-06-04 10:14:47 +08:00
c5d0ef8b4f
Container side: - agent-runner switches to Bun. Drops better-sqlite3 (native compile gone), drops tsc build step in-image AND the tsc-on-every-session-wake in the entrypoint — bun runs src/index.ts directly. bun:sqlite replaces better-sqlite3; cross-mount DB invariants (journal_mode=DELETE, busy_timeout) preserved. Named params converted from @name to $name because bun:sqlite does not auto-strip the prefix the way better-sqlite3 does. - Tests ported from vitest to bun:test (only describe/it/expect/before/afterEach used, API-compatible). vitest.config.ts excludes container/agent-runner/. - bun.lock replaces pnpm-lock.yaml + pnpm-workspace.yaml under container/agent-runner/. Host pnpm workspace does NOT include this tree. Dockerfile improvements (independent of Bun but bundled while touching the file): - tini as PID 1 for correct SIGTERM propagation (prevents half-written outbound.db on shutdown). - Extracted entrypoint.sh — readable and diffable vs the old inline printf. - BuildKit cache mounts for apt + bun install + pnpm install. - --no-install-recommends on apt, pinned CLAUDE_CODE_VERSION, AGENT_BROWSER, VERCEL, BUN_VERSION. - CJK fonts (~200MB) behind ARG INSTALL_CJK_FONTS=false; build.sh reads from .env; setup/container.ts reads the same .env so /setup and manual rebuild stay in sync. - PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 in case any postinstall tries to pull a redundant Chromium. - /home/node 755 (was 777). Host side: - src/container-runner.ts dynamic spawn command collapses from `pnpm exec tsc --outDir /tmp/dist … && node /tmp/dist/index.js` to `exec bun run /app/src/index.ts` — cold start ~200-500ms faster per wake. CI: - oven-sh/setup-bun@v2 alongside Node/pnpm. Adds explicit container typecheck (was documented in CLAUDE.md, not enforced) and `bun test` for agent-runner tests.
40 lines
1.3 KiB
Bash
Executable File
40 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Build the NanoClaw agent container image.
|
|
#
|
|
# Reads one optional build flag from ../.env:
|
|
# INSTALL_CJK_FONTS=true — add Chinese/Japanese/Korean fonts (~200MB)
|
|
# setup/container.ts reads the same file, so both build paths stay in sync.
|
|
# Callers can also override by exporting INSTALL_CJK_FONTS directly.
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
IMAGE_NAME="nanoclaw-agent"
|
|
TAG="${1:-latest}"
|
|
CONTAINER_RUNTIME="${CONTAINER_RUNTIME:-docker}"
|
|
|
|
# Caller's env takes precedence; fall back to .env.
|
|
if [ -z "${INSTALL_CJK_FONTS:-}" ] && [ -f "../.env" ]; then
|
|
INSTALL_CJK_FONTS="$(grep '^INSTALL_CJK_FONTS=' ../.env | tail -n1 | cut -d= -f2- | tr -d '"' | tr -d "'" | tr -d '[:space:]')"
|
|
fi
|
|
|
|
BUILD_ARGS=()
|
|
if [ "${INSTALL_CJK_FONTS:-false}" = "true" ]; then
|
|
echo "CJK fonts: enabled (adds ~200MB)"
|
|
BUILD_ARGS+=(--build-arg INSTALL_CJK_FONTS=true)
|
|
fi
|
|
|
|
echo "Building NanoClaw agent container image..."
|
|
echo "Image: ${IMAGE_NAME}:${TAG}"
|
|
|
|
${CONTAINER_RUNTIME} build "${BUILD_ARGS[@]}" -t "${IMAGE_NAME}:${TAG}" .
|
|
|
|
echo ""
|
|
echo "Build complete!"
|
|
echo "Image: ${IMAGE_NAME}:${TAG}"
|
|
echo ""
|
|
echo "Test with:"
|
|
echo " echo '{\"prompt\":\"What is 2+2?\",\"groupFolder\":\"test\",\"chatJid\":\"test@g.us\",\"isMain\":false}' | ${CONTAINER_RUNTIME} run -i ${IMAGE_NAME}:${TAG}"
|