mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-09-30 12:39:42 +02:00
SessionMode gains 'grok', a first-class backend alongside Claude Code,
shell, OpenCode, Codex, Gemini, Antigravity and Pi: its own PTY, tmux
session, charcoal tab identity ('gk' badge), welcome button, run-mode
entry, cron agentType, Docker and remote-SSH command defaults, and
clone-repo Brain option. Flag surface verified live against grok 1.0.5.
Grok mixes two existing shapes and the wiring follows from that:
- Codex-shaped on permissions: the bypass switch is GrokConfig.alwaysApprove
(--always-approve, grok's bypassPermissions mode; config-level deny rules
still apply on top). The Run button sends it true, like runAntigravity(),
and clampExternalCliBypassForOwner() puts grok in the only-if-sent branch:
a bare grok spawn is grok's own ask-mode default, which is already safe,
so only a sent config needs the flag forced off. Cron needs nothing for
the same reason.
- OpenCode-shaped on rendering: grok is a fullscreen alternate-screen TUI
with mouse support, so it stays OUT of isAltScreenStripMode() and lands
on the narrow tmux-attach strip and the 'buffer' local-echo fallthrough
(unmeasured against an authenticated composer; documented fallback is the
'off' branch).
- Pi-shaped on resolution: 'grok' has npm squatters (@vibe-kit/grok-cli
also installs a grok bin), so grok-cli-resolver.ts version-probes every
candidate (grok --version, killSignal SIGKILL, VITEST-gated) and
GET /api/grok/status surfaces path AND version; GROK_VERSION_REGEX is
shared with the dependency registry so doctor and run mode cannot drift.
Env allowlist gains GROK_* plus the XAI_* vendor namespace (XAI_API_KEY is
grok's documented headless auth var), the same narrow-vendor reasoning as
GOOGLE_* for gemini. Resume is id-regexed on purpose: grok's own --resume
also matches session titles, which are arbitrary user strings that must
never reach the bash -c spawn line.
Docker: grok is not on npm, so the agent image installs it in its own step
(xAI's installer has no --dir override; the binary is copied to
/usr/local/bin and root's ~/.grok dropped in the same layer), and
credentials are seeded per-file (auth.json, config.toml, pager.toml; the
dir also holds sessions/, memory/ and the ~160MB binary). Remote SSH routes
through the login-shell wrapper like the other agent CLIs.
Verified end to end on an isolated CODEMAN_INSTANCE with grok 1.0.5
installed: /api/grok/status resolves and reports the probed version,
quick-start spawns a pane whose command line ends in 'grok
--always-approve', the real TUI renders (OAuth device screen on an
unauthenticated box), and grokConfig round-trips through state.json.
Docs: docs/grok-integration.md (user guide) + docs/grok-integration-plan.md
(decisions, verification record, follow-ups).
Tests: test/grok-mode.test.ts, test/grok-cli-resolver.test.ts, plus
extended clamp/system-routes/render-index-html/run-mode-ui/mobile-overview/
local-echo-gating coverage. npm test (the CI gate) green: 5910 tests.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
175 lines
5.1 KiB
JSON
175 lines
5.1 KiB
JSON
{
|
|
"name": "aicodeman",
|
|
"version": "1.21.0",
|
|
"description": "Mission control for AI coding agents - run 20 autonomous agents with real-time monitoring and session persistence",
|
|
"type": "module",
|
|
"main": "dist/index.js",
|
|
"types": "dist/index.d.ts",
|
|
"bin": {
|
|
"aicodeman": "./dist/index.js",
|
|
"codeman": "./dist/index.js"
|
|
},
|
|
"scripts": {
|
|
"postinstall": "node scripts/postinstall.js",
|
|
"build": "node scripts/build.mjs",
|
|
"build:gesture": "node scripts/build-gesture-bundle.mjs",
|
|
"start": "NODE_COMPILE_CACHE=${HOME}/.codeman/compile-cache node dist/index.js",
|
|
"dev": "tsx src/index.ts web",
|
|
"web": "node dist/index.js web",
|
|
"clean": "rm -rf dist",
|
|
"test": "vitest run --config config/vitest.ci.config.ts",
|
|
"test:watch": "vitest --config config/vitest.ci.config.ts",
|
|
"test:coverage": "vitest run --config config/vitest.ci.config.ts --coverage",
|
|
"test:ci": "vitest run --config config/vitest.ci.config.ts",
|
|
"test:browser": "vitest run --config config/vitest.browser.config.ts",
|
|
"test:perf": "vitest run --config config/vitest.perf.config.ts",
|
|
"test:all": "vitest run --config config/vitest.config.ts",
|
|
"pretest:mobile": "node scripts/prepare-test-vendor.mjs",
|
|
"test:mobile": "vitest run --config test/mobile/vitest.config.ts",
|
|
"check:frontend-syntax": "node scripts/check-frontend-syntax.mjs",
|
|
"fix:node-pty": "node scripts/fix-node-pty.mjs",
|
|
"typecheck": "tsc --noEmit",
|
|
"lint": "eslint --config config/eslint.config.js 'src/**/*.ts'",
|
|
"lint:fix": "eslint --config config/eslint.config.js 'src/**/*.ts' --fix",
|
|
"format": "prettier --write 'src/**/*.ts' 'src/web/public/**/*.{js,css,html,json}'",
|
|
"format:check": "prettier --check 'src/**/*.ts' 'src/web/public/**/*.{js,css,html,json}'",
|
|
"check:public-assets": "node scripts/check-public-assets.mjs",
|
|
"capture:subagents": "node scripts/capture-subagent-screenshots.mjs",
|
|
"changeset": "changeset",
|
|
"version-packages": "changeset version && npm install --package-lock-only && node scripts/check-lockfile-sync.mjs",
|
|
"check:lockfile": "node scripts/check-lockfile-sync.mjs",
|
|
"knip": "npx --yes knip@latest --config config/knip.json",
|
|
"release": "changeset publish"
|
|
},
|
|
"prettier": {
|
|
"singleQuote": true,
|
|
"semi": true,
|
|
"tabWidth": 2,
|
|
"printWidth": 120,
|
|
"trailingComma": "es5",
|
|
"endOfLine": "lf"
|
|
},
|
|
"workspaces": [
|
|
".",
|
|
"packages/*"
|
|
],
|
|
"keywords": [
|
|
"claude-code",
|
|
"claude-ai",
|
|
"claude",
|
|
"anthropic",
|
|
"opencode",
|
|
"codex",
|
|
"antigravity",
|
|
"pi",
|
|
"grok",
|
|
"gemini-cli",
|
|
"ai-agents",
|
|
"agent",
|
|
"session-manager",
|
|
"self-hosted",
|
|
"developer-tools",
|
|
"tmux",
|
|
"terminal",
|
|
"xterm",
|
|
"docker",
|
|
"mosh",
|
|
"local-echo",
|
|
"web-dashboard",
|
|
"cli",
|
|
"llm",
|
|
"automation"
|
|
],
|
|
"author": "arkon",
|
|
"license": "MIT",
|
|
"dependencies": {
|
|
"@fastify/compress": "^8.3.1",
|
|
"@fastify/cookie": "^11.0.2",
|
|
"@fastify/multipart": "^10.0.0",
|
|
"@fastify/static": "^10.1.3",
|
|
"@fastify/websocket": "^11.2.0",
|
|
"@xterm/addon-fit": "^0.11.0",
|
|
"@xterm/addon-serialize": "^0.14.0",
|
|
"@xterm/addon-unicode11": "^0.9.0",
|
|
"@xterm/addon-webgl": "^0.19.0",
|
|
"@xterm/xterm": "^6.0.0",
|
|
"chalk": "^5.3.0",
|
|
"chokidar": "^3.6.0",
|
|
"commander": "^12.1.0",
|
|
"fastify": "^5.8.5",
|
|
"heic-decode": "^2.1.0",
|
|
"jpeg-js": "^0.4.4",
|
|
"node-pty": "^1.1.0",
|
|
"qrcode": "^1.5.4",
|
|
"uuid": "^14.0.0",
|
|
"web-push": "^3.6.7",
|
|
"ws": "^8.21.0",
|
|
"zod": "^4.3.6"
|
|
},
|
|
"devDependencies": {
|
|
"@changesets/cli": "^2.29.8",
|
|
"@eslint/js": "^9.0.0",
|
|
"@remotion/cli": "4.0.473",
|
|
"@remotion/transitions": "4.0.473",
|
|
"@types/node": "^20.19.33",
|
|
"@types/pngjs": "^6.0.5",
|
|
"@types/qrcode": "^1.5.6",
|
|
"@types/react": "^19.2.14",
|
|
"@types/uuid": "^10.0.0",
|
|
"@types/web-push": "^3.6.4",
|
|
"@types/ws": "^8.18.1",
|
|
"@vitest/coverage-v8": "^4.1.8",
|
|
"agent-browser": "^0.6.0",
|
|
"esbuild": "^0.27.3",
|
|
"eslint": "^9.0.0",
|
|
"pixelmatch": "^6.0.0",
|
|
"playwright": "^1.58.0",
|
|
"pngjs": "^7.0.0",
|
|
"postcss": "^8.5.15",
|
|
"prettier": "^3.4.0",
|
|
"puppeteer": "^24.36.0",
|
|
"remotion": "4.0.473",
|
|
"tsx": "^4.15.0",
|
|
"typescript": "^5.9.3",
|
|
"typescript-eslint": "^8.0.0",
|
|
"vitest": "^4.1.8"
|
|
},
|
|
"optionalDependencies": {
|
|
"@remotion/compositor-linux-x64-gnu": "^4.0.432",
|
|
"@rspack/binding-linux-x64-gnu": "^1.7.7"
|
|
},
|
|
"overrides": {
|
|
"basic-ftp": "^5.3.1",
|
|
"fast-uri": "^3.1.2",
|
|
"flatted": "^3.4.2",
|
|
"anymatch": {
|
|
"picomatch": "^2.3.2"
|
|
},
|
|
"micromatch": {
|
|
"picomatch": "^2.3.2"
|
|
},
|
|
"readdirp": {
|
|
"picomatch": "^2.3.2"
|
|
}
|
|
},
|
|
"engines": {
|
|
"node": ">=22.0.0"
|
|
},
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/Ark0N/Codeman.git"
|
|
},
|
|
"bugs": {
|
|
"url": "https://github.com/Ark0N/Codeman/issues"
|
|
},
|
|
"homepage": "https://github.com/Ark0N/Codeman#readme",
|
|
"files": [
|
|
"dist",
|
|
"scripts/postinstall.js",
|
|
"scripts/fix-node-pty.mjs",
|
|
"skills",
|
|
"LICENSE",
|
|
"README.md"
|
|
]
|
|
}
|