Skip to content

Commit 527fec6

Browse files
committed
refactor(lib): split long functions for lint constraints
1 parent da9c616 commit 527fec6

2 files changed

Lines changed: 69 additions & 45 deletions

File tree

packages/lib/src/core/templates-entrypoint/codex.ts

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -135,14 +135,13 @@ if [[ -s /etc/zsh/zshrc ]] && ! grep -q "zz-codex-resume.sh" /etc/zsh/zshrc 2>/d
135135
printf "%s\\n" "if [ -f /etc/profile.d/zz-codex-resume.sh ]; then source /etc/profile.d/zz-codex-resume.sh; fi" >> /etc/zsh/zshrc
136136
fi`
137137

138-
export const renderEntrypointAgentsNotice = (config: TemplateConfig): string =>
139-
String.raw`# Ensure global AGENTS.md exists for container context
140-
AGENTS_PATH="${config.codexHome}/AGENTS.md"
141-
LEGACY_AGENTS_PATH="/home/${config.sshUser}/AGENTS.md"
142-
PROJECT_LINE="Рабочая папка проекта (git clone): ${config.targetDir}"
143-
WORKSPACES_LINE="Доступные workspace пути: ${config.targetDir}"
138+
const entrypointAgentsNoticeTemplate = String.raw`# Ensure global AGENTS.md exists for container context
139+
AGENTS_PATH="__CODEX_HOME__/AGENTS.md"
140+
LEGACY_AGENTS_PATH="/home/__SSH_USER__/AGENTS.md"
141+
PROJECT_LINE="Рабочая папка проекта (git clone): __TARGET_DIR__"
142+
WORKSPACES_LINE="Доступные workspace пути: __TARGET_DIR__"
144143
WORKSPACE_INFO_LINE="Контекст workspace: repository"
145-
FOCUS_LINE="Фокус задачи: работай только в workspace, который запрашивает пользователь. Текущий workspace: ${config.targetDir}"
144+
FOCUS_LINE="Фокус задачи: работай только в workspace, который запрашивает пользователь. Текущий workspace: __TARGET_DIR__"
146145
ISSUE_AGENTS_HINT_LINE="Issue AGENTS.md: n/a"
147146
INTERNET_LINE="Доступ к интернету: есть. Если чего-то не знаешь — ищи в интернете или по кодовой базе."
148147
if [[ "$REPO_REF" == issue-* ]]; then
@@ -159,7 +158,7 @@ if [[ "$REPO_REF" == issue-* ]]; then
159158
else
160159
WORKSPACE_INFO_LINE="Контекст workspace: issue #\${ISSUE_ID}"
161160
fi
162-
ISSUE_AGENTS_HINT_LINE="Issue AGENTS.md: ${config.targetDir}/AGENTS.md"
161+
ISSUE_AGENTS_HINT_LINE="Issue AGENTS.md: __TARGET_DIR__/AGENTS.md"
163162
elif [[ "$REPO_REF" == refs/pull/*/head ]]; then
164163
PR_ID="$(printf "%s" "$REPO_REF" | sed -E 's#^refs/pull/([0-9]+)/head$#\1#')"
165164
if [[ -n "$PR_ID" ]]; then
@@ -171,10 +170,10 @@ fi
171170
if [[ ! -f "$AGENTS_PATH" ]]; then
172171
cat <<'AGENTS_EOF' > "$AGENTS_PATH"
173172
Ты автономный агент, который имеет полностью все права управления контейнером. У тебя есть доступ к командам sudo, gh, codex, git, node, pnpm и всем остальным другим. Проекты с которыми идёт работа лежат по пути ~
174-
Рабочая папка проекта (git clone): ${config.targetDir}
175-
Доступные workspace пути: ${config.targetDir}
173+
Рабочая папка проекта (git clone): __TARGET_DIR__
174+
Доступные workspace пути: __TARGET_DIR__
176175
Контекст workspace: repository
177-
Фокус задачи: работай только в workspace, который запрашивает пользователь. Текущий workspace: ${config.targetDir}
176+
Фокус задачи: работай только в workspace, который запрашивает пользователь. Текущий workspace: __TARGET_DIR__
178177
Issue AGENTS.md: n/a
179178
Доступ к интернету: есть. Если чего-то не знаешь — ищи в интернете или по кодовой базе.
180179
Если ты видишь файлы AGENTS.md внутри проекта, ты обязан их читать и соблюдать инструкции.
@@ -220,3 +219,9 @@ if [[ -f "$LEGACY_AGENTS_PATH" && -f "$AGENTS_PATH" ]]; then
220219
rm -f "$LEGACY_AGENTS_PATH"
221220
fi
222221
fi`
222+
223+
export const renderEntrypointAgentsNotice = (config: TemplateConfig): string =>
224+
entrypointAgentsNoticeTemplate
225+
.replaceAll("__CODEX_HOME__", config.codexHome)
226+
.replaceAll("__SSH_USER__", config.sshUser)
227+
.replaceAll("__TARGET_DIR__", config.targetDir)

packages/lib/src/usecases/actions/docker-up.ts

Lines changed: 53 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ const logSshAccess = (
4747
})
4848

4949
type CloneState = "pending" | "done" | "failed"
50+
type DockerUpError = CloneFailedError | DockerCommandError | PlatformError
51+
type DockerUpEnvironment = CommandExecutor.CommandExecutor | FileSystem.FileSystem | Path.Path
5052

5153
const checkCloneState = (
5254
cwd: string,
@@ -101,58 +103,75 @@ const waitForCloneCompletion = (
101103
}
102104
})
103105

104-
export const runDockerUpIfNeeded = (
106+
const runDockerComposeUpByMode = (
105107
resolvedOutDir: string,
106-
projectConfig: CreateCommand["config"],
107-
runUp: boolean,
108-
waitForClone: boolean,
109108
force: boolean,
110109
forceEnv: boolean
111-
): Effect.Effect<
112-
void,
113-
CloneFailedError | DockerCommandError | PlatformError,
114-
CommandExecutor.CommandExecutor | FileSystem.FileSystem | Path.Path
115-
> =>
110+
): Effect.Effect<void, DockerCommandError | PlatformError, CommandExecutor.CommandExecutor> =>
116111
Effect.gen(function*(_) {
117-
if (!runUp) {
118-
return
119-
}
120112
if (force) {
121113
yield* _(Effect.log("Force enabled: wiping docker compose volumes (docker compose down -v)..."))
122114
yield* _(runDockerComposeDownVolumes(resolvedOutDir))
123115
yield* _(Effect.log("Running: docker compose up -d --build"))
124116
yield* _(runDockerComposeUp(resolvedOutDir))
125-
} else if (forceEnv) {
117+
return
118+
}
119+
if (forceEnv) {
126120
yield* _(Effect.log("Force env enabled: resetting env defaults and recreating containers (volumes preserved)..."))
127121
yield* _(runDockerComposeUpRecreate(resolvedOutDir))
128-
} else {
129-
yield* _(Effect.log("Running: docker compose up -d --build"))
130-
yield* _(runDockerComposeUp(resolvedOutDir))
122+
return
131123
}
124+
yield* _(Effect.log("Running: docker compose up -d --build"))
125+
yield* _(runDockerComposeUp(resolvedOutDir))
126+
})
132127

133-
const ensureBridgeAccess = (containerName: string) =>
134-
runDockerInspectContainerBridgeIp(resolvedOutDir, containerName).pipe(
135-
Effect.flatMap((bridgeIp) =>
136-
bridgeIp.length > 0
137-
? Effect.void
138-
: runDockerNetworkConnectBridge(resolvedOutDir, containerName)
128+
const ensureContainerBridgeAccess = (
129+
resolvedOutDir: string,
130+
containerName: string
131+
): Effect.Effect<void, never, CommandExecutor.CommandExecutor> =>
132+
runDockerInspectContainerBridgeIp(resolvedOutDir, containerName).pipe(
133+
Effect.flatMap((bridgeIp) =>
134+
bridgeIp.length > 0
135+
? Effect.void
136+
: runDockerNetworkConnectBridge(resolvedOutDir, containerName)
137+
),
138+
Effect.matchEffect({
139+
onFailure: (error) =>
140+
Effect.logWarning(
141+
`Failed to connect ${containerName} to bridge network: ${
142+
error instanceof Error ? error.message : String(error)
143+
}`
139144
),
140-
Effect.matchEffect({
141-
onFailure: (error) =>
142-
Effect.logWarning(
143-
`Failed to connect ${containerName} to bridge network: ${
144-
error instanceof Error ? error.message : String(error)
145-
}`
146-
),
147-
onSuccess: () => Effect.void
148-
})
149-
)
145+
onSuccess: () => Effect.void
146+
})
147+
)
150148

149+
const ensureBridgeAccess = (
150+
resolvedOutDir: string,
151+
projectConfig: CreateCommand["config"]
152+
): Effect.Effect<void, never, CommandExecutor.CommandExecutor> =>
153+
Effect.gen(function*(_) {
151154
// Make container ports reachable from other (non-compose) containers by IP.
152-
yield* _(ensureBridgeAccess(projectConfig.containerName))
155+
yield* _(ensureContainerBridgeAccess(resolvedOutDir, projectConfig.containerName))
153156
if (projectConfig.enableMcpPlaywright) {
154-
yield* _(ensureBridgeAccess(`${projectConfig.containerName}-browser`))
157+
yield* _(ensureContainerBridgeAccess(resolvedOutDir, `${projectConfig.containerName}-browser`))
158+
}
159+
})
160+
161+
export const runDockerUpIfNeeded = (
162+
resolvedOutDir: string,
163+
projectConfig: CreateCommand["config"],
164+
runUp: boolean,
165+
waitForClone: boolean,
166+
force: boolean,
167+
forceEnv: boolean
168+
): Effect.Effect<void, DockerUpError, DockerUpEnvironment> =>
169+
Effect.gen(function*(_) {
170+
if (!runUp) {
171+
return
155172
}
173+
yield* _(runDockerComposeUpByMode(resolvedOutDir, force, forceEnv))
174+
yield* _(ensureBridgeAccess(resolvedOutDir, projectConfig))
156175

157176
if (waitForClone) {
158177
yield* _(Effect.log("Streaming container logs until clone completes..."))

0 commit comments

Comments
 (0)