mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-02 13:39:41 +02:00
Knip-driven cleanup. All changes verified with tsc --noEmit, lint, and
build.
Removed (zero consumers):
- VERIFICATION_PROMPT constant + its barrel re-export
- createInitialOrchestratorPersistState factory
- transcriptWatcher singleton export
- createAnsiPatternFull / createAnsiPatternSimple factories
- TimerInfo interface + unused AiCheckResult/AiPlanCheckResult imports
in respawn-controller.ts
- 35 unused Zod z.infer \`*Input\` types in schemas.ts
- Dead re-exports: SessionMode from session.ts, AuthSessionRecord from
web/ports/index.ts, EnhancedPlanTask/CheckpointReview from
ralph-tracker.ts, 7 unused entries in utils/index.ts
- 14 event/config interfaces that lived only as JSDoc hints (no TS type
position usage): Session/Respawn/RalphLoop/RalphTracker/
SessionManager/SessionAutoOps/Subagent/TaskQueue/TaskTracker/
TranscriptWatcher/Image/OrchestratorLoop Events + RespawnPreset +
SessionOutput
Narrowed to module scope (kept but no longer exported):
- buildPermissionArgs in session-cli-builder.ts
- 28 type/interface declarations used only within their own file:
Ai{Idle,Plan}Check{Config,State}, BashToolParser{Events,Config},
FileStream/CreateStream{Options,Result}, PlanSubagentEvent,
SubagentCallback, RalphLoopConfig, RalphLoop{Events,Options},
ActiveTimerInfo, DetectionStatus, ActionLogEntry, AutoOpsCallbacks,
TunnelStatus, Timer/LRUMap/StaleExpirationMap Options, AuthState,
SessionListenerDeps, SseStreamManagerDeps, and 8 more
Docs: CLAUDE.md advice for global-regex `lastIndex` now points to the
remaining `execPattern()` helper instead of the deleted factories.
Knip delta: unused files 42→0, unused exports 161→16, unused types 92→0.
The 16 remaining exports are a mobile-test helper toolkit intentionally
kept for upcoming tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
133 lines
3.9 KiB
TypeScript
133 lines
3.9 KiB
TypeScript
/**
|
|
* @fileoverview Pure functions for building CLI arguments and environment variables
|
|
* for Claude and OpenCode CLI spawning.
|
|
*
|
|
* Extracted from Session to keep argument construction logic testable and
|
|
* separate from PTY lifecycle management.
|
|
*
|
|
* @module session-cli-builder
|
|
*/
|
|
|
|
import type { ClaudeMode } from './types.js';
|
|
import { getAugmentedPath } from './utils/index.js';
|
|
|
|
/**
|
|
* Build Claude CLI permission flags based on the configured mode.
|
|
* Returns an array of args to pass to the CLI.
|
|
*/
|
|
function buildPermissionArgs(claudeMode: ClaudeMode, allowedTools?: string): string[] {
|
|
switch (claudeMode) {
|
|
case 'dangerously-skip-permissions':
|
|
return ['--dangerously-skip-permissions'];
|
|
case 'allowedTools':
|
|
if (allowedTools) {
|
|
return ['--allowedTools', allowedTools];
|
|
}
|
|
// Fall back to normal mode if no tools specified
|
|
return [];
|
|
case 'normal':
|
|
default:
|
|
return [];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Build args for an interactive Claude CLI session (direct PTY, non-mux fallback).
|
|
*
|
|
* @param sessionId - The Codeman session ID (passed as --session-id to Claude)
|
|
* @param claudeMode - Permission mode for the CLI
|
|
* @param model - Optional model override (e.g., 'opus', 'sonnet')
|
|
* @param allowedTools - Optional comma-separated allowed tools list
|
|
* @returns Array of CLI arguments
|
|
*/
|
|
export function buildInteractiveArgs(
|
|
sessionId: string,
|
|
claudeMode: ClaudeMode,
|
|
model?: string,
|
|
allowedTools?: string
|
|
): string[] {
|
|
const args = [...buildPermissionArgs(claudeMode, allowedTools), '--session-id', sessionId];
|
|
if (model) args.push('--model', model);
|
|
return args;
|
|
}
|
|
|
|
/**
|
|
* Build args for a one-shot Claude CLI prompt (runPrompt mode).
|
|
*
|
|
* @param prompt - The prompt text to send
|
|
* @param model - Optional model override
|
|
* @returns Array of CLI arguments
|
|
*/
|
|
export function buildPromptArgs(prompt: string, model?: string): string[] {
|
|
const args = ['-p', '--verbose', '--dangerously-skip-permissions', '--output-format', 'stream-json'];
|
|
if (model) {
|
|
args.push('--model', model);
|
|
}
|
|
args.push(prompt);
|
|
return args;
|
|
}
|
|
|
|
/**
|
|
* Build environment variables for Claude CLI processes (direct PTY, non-mux).
|
|
*
|
|
* Augments process.env with:
|
|
* - UTF-8 locale settings
|
|
* - Augmented PATH (includes Claude CLI directory)
|
|
* - xterm-256color terminal type
|
|
* - Codeman session identification vars
|
|
*
|
|
* @param sessionId - The Codeman session ID
|
|
* @returns Environment variables object for pty.spawn
|
|
*/
|
|
export function buildClaudeEnv(sessionId: string): Record<string, string | undefined> {
|
|
return {
|
|
...process.env,
|
|
LANG: 'en_US.UTF-8',
|
|
LC_ALL: 'en_US.UTF-8',
|
|
PATH: getAugmentedPath(),
|
|
TERM: 'xterm-256color',
|
|
COLORTERM: undefined,
|
|
CLAUDECODE: undefined,
|
|
// Inform Claude it's running within Codeman (helps prevent self-termination)
|
|
CODEMAN_MUX: '1',
|
|
CODEMAN_SESSION_ID: sessionId,
|
|
CODEMAN_API_URL: process.env.CODEMAN_API_URL || 'http://localhost:3000',
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Build environment variables for mux-attached PTY sessions (tmux attach).
|
|
* Lighter than buildClaudeEnv — no PATH augmentation or Codeman vars needed
|
|
* since the mux session already has those set.
|
|
*
|
|
* @returns Environment variables object for pty.spawn
|
|
*/
|
|
export function buildMuxAttachEnv(): Record<string, string | undefined> {
|
|
return {
|
|
...process.env,
|
|
LANG: 'en_US.UTF-8',
|
|
LC_ALL: 'en_US.UTF-8',
|
|
TERM: 'xterm-256color',
|
|
COLORTERM: undefined,
|
|
CLAUDECODE: undefined,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Build environment variables for a direct shell session (non-mux fallback).
|
|
*
|
|
* @param sessionId - The Codeman session ID
|
|
* @returns Environment variables object for pty.spawn
|
|
*/
|
|
export function buildShellEnv(sessionId: string): Record<string, string | undefined> {
|
|
return {
|
|
...process.env,
|
|
LANG: 'en_US.UTF-8',
|
|
LC_ALL: 'en_US.UTF-8',
|
|
TERM: 'xterm-256color',
|
|
CODEMAN_MUX: '1',
|
|
CODEMAN_SESSION_ID: sessionId,
|
|
CODEMAN_API_URL: process.env.CODEMAN_API_URL || 'http://localhost:3000',
|
|
};
|
|
}
|