@open330/oac 2026.3.6 → 2026.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @open330/oac might be problematic. Click here for more details.

Files changed (52) hide show
  1. package/dist/budget/index.d.ts +78 -0
  2. package/dist/budget/index.js +17 -0
  3. package/dist/chunk-LQC5DLT7.js +317 -0
  4. package/dist/chunk-LQC5DLT7.js.map +1 -0
  5. package/dist/chunk-NZEI4RPP.js +1499 -0
  6. package/dist/chunk-NZEI4RPP.js.map +1 -0
  7. package/dist/{chunk-Z7KEQPGV.js → chunk-SZUDHVBF.js} +65 -89
  8. package/dist/chunk-SZUDHVBF.js.map +1 -0
  9. package/dist/chunk-TGZ2TGDA.js +348 -0
  10. package/dist/chunk-TGZ2TGDA.js.map +1 -0
  11. package/dist/chunk-UL66HWYF.js +392 -0
  12. package/dist/chunk-UL66HWYF.js.map +1 -0
  13. package/dist/chunk-VLR2VYFW.js +475 -0
  14. package/dist/chunk-VLR2VYFW.js.map +1 -0
  15. package/dist/chunk-ZPI2VQ7U.js +1732 -0
  16. package/dist/chunk-ZPI2VQ7U.js.map +1 -0
  17. package/dist/cli/cli.js +15 -0
  18. package/dist/cli/cli.js.map +1 -0
  19. package/dist/cli/index.js +18 -0
  20. package/dist/cli/index.js.map +1 -0
  21. package/dist/completion/index.d.ts +91 -0
  22. package/dist/completion/index.js +590 -0
  23. package/dist/completion/index.js.map +1 -0
  24. package/dist/core/index.d.ts +1403 -0
  25. package/dist/core/index.js +75 -0
  26. package/dist/core/index.js.map +1 -0
  27. package/dist/dashboard/index.d.ts +14 -0
  28. package/dist/dashboard/index.js +1257 -0
  29. package/dist/dashboard/index.js.map +1 -0
  30. package/dist/discovery/index.d.ts +115 -0
  31. package/dist/discovery/index.js +19 -0
  32. package/dist/discovery/index.js.map +1 -0
  33. package/dist/event-bus-CRLkpNo0.d.ts +91 -0
  34. package/dist/execution/index.d.ts +162 -0
  35. package/dist/execution/index.js +18 -0
  36. package/dist/execution/index.js.map +1 -0
  37. package/dist/repo/index.d.ts +33 -0
  38. package/dist/repo/index.js +19 -0
  39. package/dist/repo/index.js.map +1 -0
  40. package/dist/tracking/index.d.ts +357 -0
  41. package/dist/tracking/index.js +15 -0
  42. package/dist/tracking/index.js.map +1 -0
  43. package/dist/types-CYCwgojB.d.ts +34 -0
  44. package/dist/types-cJZwCZZX.d.ts +172 -0
  45. package/package.json +42 -20
  46. package/dist/chunk-Z7KEQPGV.js.map +0 -1
  47. package/dist/cli.js +0 -9
  48. package/dist/index.js +0 -12
  49. package/dist/index.js.map +0 -1
  50. /package/dist/{cli.js.map → budget/index.js.map} +0 -0
  51. /package/dist/{cli.d.ts → cli/cli.d.ts} +0 -0
  52. /package/dist/{index.d.ts → cli/index.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/execution/agents/claude-code.adapter.ts","../src/execution/agents/codex.adapter.ts","../src/execution/sandbox.ts","../src/execution/worker.ts","../src/execution/engine.ts"],"sourcesContent":["import { createInterface } from \"node:readline\";\n\nimport {\n type AgentProviderId,\n OacError,\n type TokenEstimate,\n executionError,\n} from \"../../core/index.js\";\nimport { execa } from \"execa\";\n\nimport type {\n AgentAvailability,\n AgentEvent,\n AgentExecuteParams,\n AgentExecution,\n AgentProvider,\n AgentResult,\n TokenEstimateParams,\n} from \"./agent.interface.js\";\n\ntype RunningProcess = ReturnType<typeof execa>;\n\ninterface TokenState {\n inputTokens: number;\n outputTokens: number;\n cumulativeTokens: number;\n}\n\ninterface TokenPatch {\n inputTokens?: number;\n outputTokens?: number;\n cumulativeTokens?: number;\n}\n\nclass AsyncEventQueue<T> implements AsyncIterable<T> {\n private readonly values: T[] = [];\n private readonly resolvers: Array<(value: IteratorResult<T>) => void> = [];\n private done = false;\n private pendingError: unknown;\n\n public push(value: T): void {\n if (this.done) {\n return;\n }\n\n const nextResolver = this.resolvers.shift();\n if (nextResolver) {\n nextResolver({ done: false, value });\n return;\n }\n\n this.values.push(value);\n }\n\n public close(): void {\n if (this.done) {\n return;\n }\n\n this.done = true;\n this.flush();\n }\n\n public fail(error: unknown): void {\n this.pendingError = error;\n this.done = true;\n this.flush();\n }\n\n public [Symbol.asyncIterator](): AsyncIterator<T> {\n return {\n next: async (): Promise<IteratorResult<T>> => {\n if (this.values.length > 0) {\n const value = this.values.shift();\n if (value === undefined) {\n return { done: true, value: undefined };\n }\n return { done: false, value };\n }\n\n if (this.pendingError !== undefined) {\n throw this.pendingError;\n }\n\n if (this.done) {\n return { done: true, value: undefined };\n }\n\n return new Promise<IteratorResult<T>>((resolve) => {\n this.resolvers.push(resolve);\n });\n },\n };\n }\n\n private flush(): void {\n for (const resolve of this.resolvers.splice(0)) {\n resolve({ done: true, value: undefined });\n }\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return undefined;\n }\n\n return Math.max(0, Math.floor(value));\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction parseJsonPayload(line: string): Record<string, unknown> | undefined {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n return undefined;\n }\n\n const candidates = [trimmed];\n const start = trimmed.indexOf(\"{\");\n const end = trimmed.lastIndexOf(\"}\");\n if (start >= 0 && end > start) {\n const fragment = trimmed.slice(start, end + 1);\n if (fragment !== trimmed) {\n candidates.push(fragment);\n }\n }\n\n for (const candidate of candidates) {\n try {\n const parsed = JSON.parse(candidate);\n if (isRecord(parsed)) {\n return parsed;\n }\n } catch {}\n }\n\n return undefined;\n}\n\nfunction patchTokenState(state: TokenState, patch: TokenPatch): AgentEvent | undefined {\n if (\n patch.inputTokens === undefined &&\n patch.outputTokens === undefined &&\n patch.cumulativeTokens === undefined\n ) {\n return undefined;\n }\n\n state.inputTokens = patch.inputTokens ?? state.inputTokens;\n state.outputTokens = patch.outputTokens ?? state.outputTokens;\n const computedTotal = state.inputTokens + state.outputTokens;\n state.cumulativeTokens = Math.max(\n state.cumulativeTokens,\n patch.cumulativeTokens ?? computedTotal,\n );\n\n return {\n type: \"tokens\",\n inputTokens: state.inputTokens,\n outputTokens: state.outputTokens,\n cumulativeTokens: state.cumulativeTokens,\n };\n}\n\nfunction parseTokenPatchFromPayload(payload: Record<string, unknown>): TokenPatch {\n const usage = isRecord(payload.usage) ? payload.usage : undefined;\n return {\n inputTokens: readNumber(\n payload.inputTokens ??\n payload.input_tokens ??\n payload.promptTokens ??\n payload.prompt_tokens ??\n usage?.inputTokens ??\n usage?.input_tokens ??\n usage?.promptTokens ??\n usage?.prompt_tokens,\n ),\n outputTokens: readNumber(\n payload.outputTokens ??\n payload.output_tokens ??\n payload.completionTokens ??\n payload.completion_tokens ??\n usage?.outputTokens ??\n usage?.output_tokens ??\n usage?.completionTokens ??\n usage?.completion_tokens,\n ),\n cumulativeTokens: readNumber(\n payload.cumulativeTokens ??\n payload.cumulative_tokens ??\n payload.totalTokens ??\n payload.total_tokens ??\n usage?.cumulativeTokens ??\n usage?.cumulative_tokens ??\n usage?.totalTokens ??\n usage?.total_tokens,\n ),\n };\n}\n\nfunction parseTokenPatchFromLine(line: string): TokenPatch {\n const inputMatch = line.match(/(?:input|prompt)\\s*tokens?\\s*[:=]\\s*(\\d+)/i);\n const outputMatch = line.match(/(?:output|completion)\\s*tokens?\\s*[:=]\\s*(\\d+)/i);\n const totalMatch = line.match(/(?:total|cumulative|used)\\s*tokens?\\s*[:=]\\s*(\\d+)/i);\n\n return {\n inputTokens: inputMatch ? Number.parseInt(inputMatch[1], 10) : undefined,\n outputTokens: outputMatch ? Number.parseInt(outputMatch[1], 10) : undefined,\n cumulativeTokens: totalMatch ? Number.parseInt(totalMatch[1], 10) : undefined,\n };\n}\n\nfunction parseTokenEvent(line: string, state: TokenState): AgentEvent | undefined {\n const payload = parseJsonPayload(line);\n const patch = payload ? parseTokenPatchFromPayload(payload) : parseTokenPatchFromLine(line);\n return patchTokenState(state, patch);\n}\n\nfunction normalizeFileAction(value: unknown): \"create\" | \"modify\" | \"delete\" | undefined {\n if (value !== \"create\" && value !== \"modify\" && value !== \"delete\") {\n return undefined;\n }\n return value;\n}\n\nfunction parseFileEditFromPayload(\n payload: Record<string, unknown>,\n): Extract<AgentEvent, { type: \"file_edit\" }> | undefined {\n if (payload.type === \"file_edit\") {\n const action = normalizeFileAction(payload.action);\n const path = readString(payload.path);\n if (action && path) {\n return {\n type: \"file_edit\",\n action,\n path,\n };\n }\n }\n\n const tool = readString(payload.tool ?? payload.tool_name ?? payload.name);\n const input = isRecord(payload.input) ? payload.input : undefined;\n const inputPath = readString(input?.path ?? input?.file_path ?? input?.filePath);\n if (!tool || !inputPath) {\n return undefined;\n }\n\n if (tool === \"create_file\") {\n return { type: \"file_edit\", action: \"create\", path: inputPath };\n }\n if (tool === \"delete_file\") {\n return { type: \"file_edit\", action: \"delete\", path: inputPath };\n }\n if (tool === \"write_file\" || tool === \"edit_file\" || tool === \"replace_file\") {\n return { type: \"file_edit\", action: \"modify\", path: inputPath };\n }\n\n return undefined;\n}\n\nfunction parseFileEditFromLine(\n line: string,\n): Extract<AgentEvent, { type: \"file_edit\" }> | undefined {\n const fileActionMatch = line.match(/\\b(created|modified|deleted)\\s+(?:file\\s+)?([^\\s\"'`]+)/i);\n if (!fileActionMatch) {\n return undefined;\n }\n\n const actionMap: Record<string, \"create\" | \"modify\" | \"delete\"> = {\n created: \"create\",\n modified: \"modify\",\n deleted: \"delete\",\n };\n\n const action = actionMap[fileActionMatch[1].toLowerCase()];\n const path = fileActionMatch[2]?.trim();\n if (!action || !path) {\n return undefined;\n }\n\n return {\n type: \"file_edit\",\n action,\n path,\n };\n}\n\nfunction parseFileEditEvent(line: string): Extract<AgentEvent, { type: \"file_edit\" }> | undefined {\n const payload = parseJsonPayload(line);\n return payload ? parseFileEditFromPayload(payload) : parseFileEditFromLine(line);\n}\n\nfunction parseToolUseEvent(line: string): Extract<AgentEvent, { type: \"tool_use\" }> | undefined {\n const payload = parseJsonPayload(line);\n if (!payload) {\n return undefined;\n }\n\n const tool = readString(payload.tool ?? payload.tool_name ?? payload.name);\n if (!tool) {\n return undefined;\n }\n\n return {\n type: \"tool_use\",\n tool,\n input: payload.input,\n };\n}\n\nfunction parseErrorEvent(\n line: string,\n stream: \"stdout\" | \"stderr\",\n): Extract<AgentEvent, { type: \"error\" }> | undefined {\n const payload = parseJsonPayload(line);\n if (payload?.type === \"error\") {\n const message = readString(payload.message) ?? \"Unknown Claude CLI error\";\n const recoverable = payload.recoverable !== false;\n return { type: \"error\", message, recoverable };\n }\n\n if (stream === \"stderr\" && /error|failed|exception/i.test(line)) {\n return { type: \"error\", message: line.trim(), recoverable: true };\n }\n\n return undefined;\n}\n\nfunction estimateTokenCount(text: string): number {\n if (text.length === 0) {\n return 0;\n }\n\n return Math.max(1, Math.ceil(text.length / 4));\n}\n\nfunction normalizeUnknownError(error: unknown, executionId: string): OacError {\n if (error instanceof OacError) {\n return error;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n if (/timed out|timeout/i.test(message)) {\n return executionError(\"AGENT_TIMEOUT\", `Claude execution timed out for ${executionId}`, {\n context: { executionId, message },\n cause: error,\n });\n }\n\n if (/out of memory|ENOMEM|heap/i.test(message)) {\n return executionError(\"AGENT_OOM\", `Claude execution ran out of memory for ${executionId}`, {\n context: { executionId, message },\n cause: error,\n });\n }\n\n if (/network|ECONN|ENOTFOUND|EAI_AGAIN/i.test(message)) {\n return new OacError(\n \"Claude execution failed due to network issues\",\n \"NETWORK_ERROR\",\n \"recoverable\",\n {\n executionId,\n message,\n },\n error,\n );\n }\n\n return executionError(\"AGENT_EXECUTION_FAILED\", `Claude execution failed for ${executionId}`, {\n context: { executionId, message },\n cause: error,\n });\n}\n\nfunction computeTotalTokens(state: TokenState): number {\n return Math.max(state.cumulativeTokens, state.inputTokens + state.outputTokens);\n}\n\nfunction normalizeExitCode(value: unknown): number {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n return 1;\n}\n\nfunction hasBooleanFlag(value: unknown, key: string): boolean {\n if (!isRecord(value)) {\n return false;\n }\n\n return value[key] === true;\n}\n\nfunction buildFailureMessage(stdout: string, stderr: string): string {\n const trimmedStderr = stderr.trim();\n if (trimmedStderr.length > 0) {\n return trimmedStderr;\n }\n\n const trimmedStdout = stdout.trim();\n if (trimmedStdout.length > 0) {\n return trimmedStdout;\n }\n\n return \"Claude CLI process exited with a non-zero status.\";\n}\n\nexport class ClaudeCodeAdapter implements AgentProvider {\n public readonly id: AgentProviderId = \"claude-code\";\n public readonly name = \"Claude Code\";\n\n private readonly runningExecutions = new Map<string, RunningProcess>();\n\n public async checkAvailability(): Promise<AgentAvailability> {\n try {\n const result = await execa(\"claude\", [\"--version\"], { reject: false });\n const version = result.stdout.trim().split(\"\\n\")[0];\n if (result.exitCode === 0) {\n return {\n available: true,\n version: version.length > 0 ? version : undefined,\n };\n }\n\n return {\n available: false,\n error: result.stderr.trim() || `claude --version exited with code ${result.exitCode}`,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n available: false,\n error: message,\n };\n }\n }\n\n public execute(params: AgentExecuteParams): AgentExecution {\n const startedAt = Date.now();\n const filesChanged = new Set<string>();\n const tokenState: TokenState = {\n inputTokens: 0,\n outputTokens: 0,\n cumulativeTokens: 0,\n };\n const eventQueue = new AsyncEventQueue<AgentEvent>();\n\n const processEnv: Record<string, string> = {\n ...Object.fromEntries(\n Object.entries(process.env).filter(\n (entry): entry is [string, string] =>\n typeof entry[1] === \"string\" &&\n // Strip Claude Code session markers to allow spawning a fresh Claude subprocess\n entry[0] !== \"CLAUDECODE\" &&\n entry[0] !== \"CLAUDE_CODE_SESSION\",\n ),\n ),\n ...params.env,\n OAC_TOKEN_BUDGET: `${params.tokenBudget}`,\n OAC_ALLOW_COMMITS: `${params.allowCommits}`,\n };\n\n const subprocess = execa(\"claude\", [\"-p\", params.prompt], {\n cwd: params.workingDirectory,\n env: processEnv,\n extendEnv: false,\n reject: false,\n timeout: params.timeoutMs,\n });\n\n this.runningExecutions.set(params.executionId, subprocess);\n\n const consumeStream = async (\n stream: NodeJS.ReadableStream | undefined,\n streamName: \"stdout\" | \"stderr\",\n ): Promise<void> => {\n if (!stream) {\n return;\n }\n\n const lineReader = createInterface({\n input: stream,\n crlfDelay: Number.POSITIVE_INFINITY,\n });\n\n for await (const line of lineReader) {\n eventQueue.push({\n type: \"output\",\n content: line,\n stream: streamName,\n });\n\n const tokenEvent = parseTokenEvent(line, tokenState);\n if (tokenEvent?.type === \"tokens\") {\n eventQueue.push(tokenEvent);\n }\n\n const fileEvent = parseFileEditEvent(line);\n if (fileEvent) {\n filesChanged.add(fileEvent.path);\n eventQueue.push(fileEvent);\n }\n\n const toolEvent = parseToolUseEvent(line);\n if (toolEvent) {\n eventQueue.push(toolEvent);\n }\n\n const errorEvent = parseErrorEvent(line, streamName);\n if (errorEvent) {\n eventQueue.push(errorEvent);\n }\n }\n };\n\n const stdoutDone = consumeStream(subprocess.stdout ?? undefined, \"stdout\");\n const stderrDone = consumeStream(subprocess.stderr ?? undefined, \"stderr\");\n\n const resultPromise = (async (): Promise<AgentResult> => {\n try {\n const settled = await subprocess;\n await Promise.all([stdoutDone, stderrDone]);\n\n const timedOut = hasBooleanFlag(settled, \"timedOut\");\n if (timedOut) {\n const timeoutError = executionError(\n \"AGENT_TIMEOUT\",\n `Claude execution timed out for ${params.executionId}`,\n {\n context: {\n executionId: params.executionId,\n timeoutMs: params.timeoutMs,\n },\n },\n );\n eventQueue.push({\n type: \"error\",\n message: timeoutError.message,\n recoverable: true,\n });\n throw timeoutError;\n }\n\n const canceled = hasBooleanFlag(settled, \"isCanceled\");\n if (canceled) {\n return {\n success: false,\n exitCode: normalizeExitCode(settled.exitCode),\n totalTokensUsed: computeTotalTokens(tokenState),\n filesChanged: [...filesChanged],\n duration: Date.now() - startedAt,\n error: \"Claude execution was cancelled.\",\n };\n }\n\n const exitCode = normalizeExitCode(settled.exitCode);\n const success = exitCode === 0;\n return {\n success,\n exitCode,\n totalTokensUsed: computeTotalTokens(tokenState),\n filesChanged: [...filesChanged],\n duration: Date.now() - startedAt,\n error: success ? undefined : buildFailureMessage(settled.stdout, settled.stderr),\n };\n } catch (error) {\n const normalized = normalizeUnknownError(error, params.executionId);\n eventQueue.push({\n type: \"error\",\n message: normalized.message,\n recoverable: normalized.severity !== \"fatal\",\n });\n eventQueue.fail(normalized);\n throw normalized;\n } finally {\n this.runningExecutions.delete(params.executionId);\n eventQueue.close();\n }\n })();\n\n return {\n executionId: params.executionId,\n providerId: this.id,\n events: eventQueue,\n result: resultPromise,\n pid: subprocess.pid,\n };\n }\n\n public async estimateTokens(params: TokenEstimateParams): Promise<TokenEstimate> {\n const contextTokens =\n params.contextTokens ?? params.targetFiles.length * 80 + params.targetFiles.join(\"\\n\").length;\n const promptTokens = estimateTokenCount(params.prompt);\n const expectedOutputTokens =\n params.expectedOutputTokens ?? Math.max(128, Math.ceil(promptTokens * 0.6));\n const totalEstimatedTokens = contextTokens + promptTokens + expectedOutputTokens;\n\n return {\n taskId: params.taskId,\n providerId: this.id,\n contextTokens,\n promptTokens,\n expectedOutputTokens,\n totalEstimatedTokens,\n confidence: 0.6,\n feasible: true,\n };\n }\n\n public async abort(executionId: string): Promise<void> {\n const running = this.runningExecutions.get(executionId);\n if (!running) {\n return;\n }\n\n running.kill(\"SIGTERM\");\n const forceKillTimer = setTimeout(() => {\n running.kill(\"SIGKILL\");\n }, 5_000);\n forceKillTimer.unref();\n\n try {\n await running;\n } catch {\n // Swallow process errors caused by shutdown.\n } finally {\n clearTimeout(forceKillTimer);\n }\n }\n}\n","import { stat } from \"node:fs/promises\";\nimport { createInterface } from \"node:readline\";\n\nimport {\n type AgentProviderId,\n OacError,\n type TokenEstimate,\n executionError,\n} from \"../../core/index.js\";\nimport { execa } from \"execa\";\n\nimport type {\n AgentAvailability,\n AgentEvent,\n AgentExecuteParams,\n AgentExecution,\n AgentProvider,\n AgentResult,\n TokenEstimateParams,\n} from \"./agent.interface.js\";\n\ntype RunningProcess = ReturnType<typeof execa>;\n\ninterface TokenState {\n inputTokens: number;\n outputTokens: number;\n cumulativeTokens: number;\n}\n\ninterface TokenPatch {\n inputTokens?: number;\n outputTokens?: number;\n cumulativeTokens?: number;\n}\n\nclass AsyncEventQueue<T> implements AsyncIterable<T> {\n private readonly values: T[] = [];\n private readonly resolvers: Array<(value: IteratorResult<T>) => void> = [];\n private done = false;\n private pendingError: unknown;\n\n public push(value: T): void {\n if (this.done) {\n return;\n }\n\n const nextResolver = this.resolvers.shift();\n if (nextResolver) {\n nextResolver({ done: false, value });\n return;\n }\n\n this.values.push(value);\n }\n\n public close(): void {\n if (this.done) {\n return;\n }\n\n this.done = true;\n this.flush();\n }\n\n public fail(error: unknown): void {\n this.pendingError = error;\n this.done = true;\n this.flush();\n }\n\n public [Symbol.asyncIterator](): AsyncIterator<T> {\n return {\n next: async (): Promise<IteratorResult<T>> => {\n if (this.values.length > 0) {\n const value = this.values.shift();\n if (value === undefined) {\n return { done: true, value: undefined };\n }\n return { done: false, value };\n }\n\n if (this.pendingError !== undefined) {\n throw this.pendingError;\n }\n\n if (this.done) {\n return { done: true, value: undefined };\n }\n\n return new Promise<IteratorResult<T>>((resolve) => {\n this.resolvers.push(resolve);\n });\n },\n };\n }\n\n private flush(): void {\n for (const resolve of this.resolvers.splice(0)) {\n resolve({ done: true, value: undefined });\n }\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return undefined;\n }\n\n return Math.max(0, Math.floor(value));\n}\n\nfunction parseJsonPayload(line: string): Record<string, unknown> | undefined {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n return undefined;\n }\n\n try {\n const parsed = JSON.parse(trimmed);\n if (isRecord(parsed)) {\n return parsed;\n }\n } catch {}\n\n return undefined;\n}\n\nfunction parseTokenPatchFromPayload(payload: Record<string, unknown>): TokenPatch {\n const usage = isRecord(payload.usage) ? payload.usage : undefined;\n return {\n inputTokens: readNumber(\n payload.inputTokens ??\n payload.input_tokens ??\n payload.promptTokens ??\n payload.prompt_tokens ??\n usage?.inputTokens ??\n usage?.input_tokens ??\n usage?.promptTokens ??\n usage?.prompt_tokens,\n ),\n outputTokens: readNumber(\n payload.outputTokens ??\n payload.output_tokens ??\n payload.completionTokens ??\n payload.completion_tokens ??\n usage?.outputTokens ??\n usage?.output_tokens ??\n usage?.completionTokens ??\n usage?.completion_tokens,\n ),\n cumulativeTokens: readNumber(\n payload.cumulativeTokens ??\n payload.cumulative_tokens ??\n payload.totalTokens ??\n payload.total_tokens ??\n usage?.cumulativeTokens ??\n usage?.cumulative_tokens ??\n usage?.totalTokens ??\n usage?.total_tokens,\n ),\n };\n}\n\nfunction patchTokenState(state: TokenState, patch: TokenPatch): AgentEvent | undefined {\n if (\n patch.inputTokens === undefined &&\n patch.outputTokens === undefined &&\n patch.cumulativeTokens === undefined\n ) {\n return undefined;\n }\n\n state.inputTokens = patch.inputTokens ?? state.inputTokens;\n state.outputTokens = patch.outputTokens ?? state.outputTokens;\n const computedTotal = state.inputTokens + state.outputTokens;\n state.cumulativeTokens = Math.max(\n state.cumulativeTokens,\n patch.cumulativeTokens ?? computedTotal,\n );\n\n return {\n type: \"tokens\",\n inputTokens: state.inputTokens,\n outputTokens: state.outputTokens,\n cumulativeTokens: state.cumulativeTokens,\n };\n}\n\nfunction parseTokenEvent(\n line: string,\n payload: Record<string, unknown> | undefined,\n state: TokenState,\n): AgentEvent | undefined {\n if (payload) {\n return patchTokenState(state, parseTokenPatchFromPayload(payload));\n }\n\n const inputMatch = line.match(/(?:input|prompt)\\s*tokens?\\s*[:=]\\s*(\\d+)/i);\n const outputMatch = line.match(/(?:output|completion)\\s*tokens?\\s*[:=]\\s*(\\d+)/i);\n const totalMatch = line.match(/(?:total|cumulative|used)\\s*tokens?\\s*[:=]\\s*(\\d+)/i);\n\n return patchTokenState(state, {\n inputTokens: inputMatch ? Number.parseInt(inputMatch[1], 10) : undefined,\n outputTokens: outputMatch ? Number.parseInt(outputMatch[1], 10) : undefined,\n cumulativeTokens: totalMatch ? Number.parseInt(totalMatch[1], 10) : undefined,\n });\n}\n\nfunction normalizeFileAction(value: unknown): \"create\" | \"modify\" | \"delete\" | undefined {\n if (value !== \"create\" && value !== \"modify\" && value !== \"delete\") {\n return undefined;\n }\n return value;\n}\n\nfunction parseFileEditFromPayload(\n payload: Record<string, unknown>,\n): Extract<AgentEvent, { type: \"file_edit\" }> | undefined {\n if (payload.type === \"file_edit\") {\n const action = normalizeFileAction(payload.action);\n const path = readString(payload.path);\n if (action && path) {\n return {\n type: \"file_edit\",\n action,\n path,\n };\n }\n }\n\n const tool = readString(payload.tool ?? payload.tool_name ?? payload.name);\n const input = isRecord(payload.input) ? payload.input : undefined;\n const inputPath = readString(input?.path ?? input?.file_path ?? input?.filePath);\n if (!tool || !inputPath) {\n return undefined;\n }\n\n if (tool === \"create_file\") {\n return { type: \"file_edit\", action: \"create\", path: inputPath };\n }\n if (tool === \"delete_file\") {\n return { type: \"file_edit\", action: \"delete\", path: inputPath };\n }\n if (tool === \"write_file\" || tool === \"edit_file\" || tool === \"replace_file\") {\n return { type: \"file_edit\", action: \"modify\", path: inputPath };\n }\n\n return undefined;\n}\n\nfunction parseToolUseFromPayload(\n payload: Record<string, unknown>,\n): Extract<AgentEvent, { type: \"tool_use\" }> | undefined {\n const tool = readString(payload.tool ?? payload.tool_name ?? payload.name);\n if (!tool) {\n return undefined;\n }\n\n return {\n type: \"tool_use\",\n tool,\n input: payload.input,\n };\n}\n\nfunction parseErrorFromPayload(\n payload: Record<string, unknown>,\n): Extract<AgentEvent, { type: \"error\" }> | undefined {\n if (payload.type !== \"error\") {\n return undefined;\n }\n\n return {\n type: \"error\",\n message: readString(payload.message) ?? \"Unknown Codex CLI error\",\n recoverable: payload.recoverable !== false,\n };\n}\n\nfunction estimateTokenCount(text: string): number {\n if (text.length === 0) {\n return 0;\n }\n\n return Math.max(1, Math.ceil(text.length / 4));\n}\n\nfunction normalizeUnknownError(error: unknown, executionId: string): OacError {\n if (error instanceof OacError) {\n return error;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n if (/timed out|timeout/i.test(message)) {\n return executionError(\"AGENT_TIMEOUT\", `Codex execution timed out for ${executionId}`, {\n context: { executionId, message },\n cause: error,\n });\n }\n\n if (/out of memory|ENOMEM|heap/i.test(message)) {\n return executionError(\"AGENT_OOM\", `Codex execution ran out of memory for ${executionId}`, {\n context: { executionId, message },\n cause: error,\n });\n }\n\n if (/rate.limit|429|too many requests|throttl/i.test(message)) {\n return executionError(\"AGENT_RATE_LIMITED\", `Codex execution rate-limited for ${executionId}`, {\n context: { executionId, message },\n cause: error,\n });\n }\n\n if (/network|ECONN|ENOTFOUND|EAI_AGAIN/i.test(message)) {\n return new OacError(\n \"Codex execution failed due to network issues\",\n \"NETWORK_ERROR\",\n \"recoverable\",\n {\n executionId,\n message,\n },\n error,\n );\n }\n\n return executionError(\"AGENT_EXECUTION_FAILED\", `Codex execution failed for ${executionId}`, {\n context: { executionId, message },\n cause: error,\n });\n}\n\nfunction computeTotalTokens(state: TokenState): number {\n return Math.max(state.cumulativeTokens, state.inputTokens + state.outputTokens);\n}\n\nfunction normalizeExitCode(value: unknown): number {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n return 1;\n}\n\nfunction hasBooleanFlag(value: unknown, key: string): boolean {\n if (!isRecord(value)) {\n return false;\n }\n\n return value[key] === true;\n}\n\nfunction buildFailureMessage(stdout: string, stderr: string): string {\n const trimmedStderr = stderr.trim();\n if (trimmedStderr.length > 0) {\n return trimmedStderr;\n }\n\n const trimmedStdout = stdout.trim();\n if (trimmedStdout.length > 0) {\n return trimmedStdout;\n }\n\n return \"Codex CLI process exited with a non-zero status.\";\n}\n\nfunction parseVersion(output: string): string | undefined {\n const match = output.match(/(\\d+\\.\\d+\\.\\d+)/);\n if (!match) {\n return undefined;\n }\n return match[1];\n}\n\nasync function estimateContextTokens(targetFiles: string[]): Promise<number> {\n let totalBytes = 0;\n for (const filePath of targetFiles) {\n try {\n const fileStat = await stat(filePath);\n if (fileStat.isFile()) {\n totalBytes += fileStat.size;\n }\n } catch {\n // Ignore missing files and treat as zero-context for estimation.\n }\n }\n\n return Math.ceil(totalBytes / 4);\n}\n\nexport class CodexAdapter implements AgentProvider {\n public readonly id: AgentProviderId = \"codex\";\n public readonly name = \"Codex CLI\";\n\n private readonly runningExecutions = new Map<string, RunningProcess>();\n\n public async checkAvailability(): Promise<AgentAvailability> {\n try {\n const result = await execa(\"codex\", [\"--version\"], { reject: false });\n if (result.exitCode === 0) {\n const versionLine = result.stdout.trim().split(\"\\n\")[0] ?? \"\";\n return {\n available: true,\n version: parseVersion(versionLine),\n };\n }\n\n return {\n available: false,\n error:\n result.stderr.trim() ||\n result.stdout.trim() ||\n `codex --version exited with code ${result.exitCode}`,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n available: false,\n error: message,\n };\n }\n }\n\n public execute(params: AgentExecuteParams): AgentExecution {\n const startedAt = Date.now();\n const filesChanged = new Set<string>();\n const tokenState: TokenState = {\n inputTokens: 0,\n outputTokens: 0,\n cumulativeTokens: 0,\n };\n const eventQueue = new AsyncEventQueue<AgentEvent>();\n\n const processEnv: Record<string, string> = {\n ...Object.fromEntries(\n Object.entries(process.env).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\",\n ),\n ),\n ...params.env,\n OAC_TOKEN_BUDGET: `${params.tokenBudget}`,\n OAC_ALLOW_COMMITS: `${params.allowCommits}`,\n };\n\n const subprocess = execa(\n \"codex\",\n [\"exec\", \"--full-auto\", \"-C\", params.workingDirectory, params.prompt],\n {\n cwd: params.workingDirectory,\n env: processEnv,\n reject: false,\n timeout: params.timeoutMs,\n },\n );\n\n this.runningExecutions.set(params.executionId, subprocess);\n\n const consumeStream = async (\n stream: NodeJS.ReadableStream | undefined,\n streamName: \"stdout\" | \"stderr\",\n ): Promise<void> => {\n if (!stream) {\n return;\n }\n\n const lineReader = createInterface({\n input: stream,\n crlfDelay: Number.POSITIVE_INFINITY,\n });\n\n for await (const line of lineReader) {\n eventQueue.push({\n type: \"output\",\n content: line,\n stream: streamName,\n });\n\n if (streamName === \"stdout\") {\n const payload = parseJsonPayload(line);\n const tokenEvent = parseTokenEvent(line, payload, tokenState);\n if (tokenEvent?.type === \"tokens\") {\n eventQueue.push(tokenEvent);\n }\n\n if (payload) {\n const fileEvent = parseFileEditFromPayload(payload);\n if (fileEvent) {\n filesChanged.add(fileEvent.path);\n eventQueue.push(fileEvent);\n }\n\n const toolEvent = parseToolUseFromPayload(payload);\n if (toolEvent) {\n eventQueue.push(toolEvent);\n }\n\n const errorEvent = parseErrorFromPayload(payload);\n if (errorEvent) {\n eventQueue.push(errorEvent);\n }\n }\n } else if (/error|failed|exception/i.test(line)) {\n eventQueue.push({\n type: \"error\",\n message: line.trim(),\n recoverable: true,\n });\n }\n }\n };\n\n const stdoutDone = consumeStream(subprocess.stdout ?? undefined, \"stdout\");\n const stderrDone = consumeStream(subprocess.stderr ?? undefined, \"stderr\");\n\n const resultPromise = (async (): Promise<AgentResult> => {\n try {\n const settled = await subprocess;\n await Promise.all([stdoutDone, stderrDone]);\n\n const timedOut = hasBooleanFlag(settled, \"timedOut\");\n if (timedOut) {\n const timeoutError = executionError(\n \"AGENT_TIMEOUT\",\n `Codex execution timed out for ${params.executionId}`,\n {\n context: {\n executionId: params.executionId,\n timeoutMs: params.timeoutMs,\n },\n },\n );\n eventQueue.push({\n type: \"error\",\n message: timeoutError.message,\n recoverable: true,\n });\n throw timeoutError;\n }\n\n const canceled = hasBooleanFlag(settled, \"isCanceled\");\n if (canceled) {\n return {\n success: false,\n exitCode: normalizeExitCode(settled.exitCode),\n totalTokensUsed: computeTotalTokens(tokenState),\n filesChanged: [...filesChanged],\n duration: Date.now() - startedAt,\n error: \"Codex execution was cancelled.\",\n };\n }\n\n const exitCode = normalizeExitCode(settled.exitCode);\n const success = exitCode === 0;\n return {\n success,\n exitCode,\n totalTokensUsed: computeTotalTokens(tokenState),\n filesChanged: [...filesChanged],\n duration: Date.now() - startedAt,\n error: success ? undefined : buildFailureMessage(settled.stdout, settled.stderr),\n };\n } catch (error) {\n const normalized = normalizeUnknownError(error, params.executionId);\n eventQueue.push({\n type: \"error\",\n message: normalized.message,\n recoverable: normalized.severity !== \"fatal\",\n });\n eventQueue.fail(normalized);\n throw normalized;\n } finally {\n this.runningExecutions.delete(params.executionId);\n eventQueue.close();\n }\n })();\n\n return {\n executionId: params.executionId,\n providerId: this.id,\n events: eventQueue,\n result: resultPromise,\n pid: subprocess.pid,\n };\n }\n\n public async estimateTokens(params: TokenEstimateParams): Promise<TokenEstimate> {\n const baseTokens = params.targetFiles.length * 2_000;\n const promptTokens = estimateTokenCount(params.prompt);\n const contextTokens = await estimateContextTokens(params.targetFiles);\n const expectedOutputTokens = baseTokens;\n const totalEstimatedTokens = contextTokens + promptTokens + expectedOutputTokens;\n\n return {\n taskId: params.taskId,\n providerId: this.id,\n contextTokens,\n promptTokens,\n expectedOutputTokens,\n totalEstimatedTokens,\n confidence: 0.6,\n feasible: totalEstimatedTokens < 200_000,\n };\n }\n\n public async abort(executionId: string): Promise<void> {\n const running = this.runningExecutions.get(executionId);\n if (!running) {\n return;\n }\n\n running.kill(\"SIGTERM\");\n const forceKillTimer = setTimeout(() => {\n running.kill(\"SIGKILL\");\n }, 2_000);\n forceKillTimer.unref();\n\n try {\n await running;\n } catch {\n // Swallow process errors caused by shutdown.\n } finally {\n clearTimeout(forceKillTimer);\n }\n }\n}\n","import { mkdir } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\n\nimport { simpleGit } from \"simple-git\";\n\nexport interface SandboxContext {\n path: string;\n branchName: string;\n cleanup(): Promise<void>;\n}\n\n/**\n * Mutex that serializes all git worktree operations (add/remove/prune)\n * to avoid .git/config lock races when running concurrent tasks.\n */\nlet worktreeLock = Promise.resolve();\n\nfunction withWorktreeLock<T>(fn: () => Promise<T>): Promise<T> {\n const next = worktreeLock.then(fn, fn);\n worktreeLock = next.then(() => {}, () => {});\n return next;\n}\n\nfunction getWorktreePath(repoPath: string, branchName: string): string {\n return resolve(join(repoPath, \"..\", \".oac-worktrees\", branchName));\n}\n\nexport async function createSandbox(\n repoPath: string,\n branchName: string,\n baseBranch: string,\n): Promise<SandboxContext> {\n const worktreePath = getWorktreePath(repoPath, branchName);\n const worktreeRoot = resolve(join(repoPath, \"..\", \".oac-worktrees\"));\n const git = simpleGit(repoPath);\n\n await withWorktreeLock(async () => {\n await mkdir(worktreeRoot, { recursive: true });\n await git.raw([\"worktree\", \"add\", worktreePath, \"-b\", branchName, `origin/${baseBranch}`]);\n });\n\n let cleanedUp = false;\n\n return {\n path: worktreePath,\n branchName,\n cleanup: async (): Promise<void> => {\n if (cleanedUp) {\n return;\n }\n\n cleanedUp = true;\n\n await withWorktreeLock(async () => {\n try {\n await git.raw([\"worktree\", \"remove\", worktreePath, \"--force\"]);\n } finally {\n try {\n await git.raw([\"worktree\", \"prune\"]);\n } catch {\n // Ignore cleanup pruning errors.\n }\n }\n });\n },\n };\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport {\n type ExecutionResult,\n OacError,\n type OacEventBus,\n type Task,\n executionError,\n} from \"../core/index.js\";\n\nimport type { AgentEvent, AgentProvider, AgentResult } from \"./agents/agent.interface.js\";\nimport type { SandboxContext } from \"./sandbox.js\";\n\nconst DEFAULT_TOKEN_BUDGET = 50_000;\nconst DEFAULT_TIMEOUT_MS = 300_000;\n\nexport interface ExecuteTaskOptions {\n executionId?: string;\n tokenBudget?: number;\n timeoutMs?: number;\n allowCommits?: boolean;\n}\n\nfunction readPositiveNumber(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n return undefined;\n }\n\n return Math.floor(value);\n}\n\nfunction readMetadataNumber(task: Task, key: string): number | undefined {\n return readPositiveNumber(task.metadata[key]);\n}\n\nfunction buildTaskPrompt(task: Task): string {\n const fileList = task.targetFiles.length > 0 ? task.targetFiles.join(\"\\n\") : \"(none provided)\";\n\n const lines = [\n \"You are implementing a scoped repository contribution task.\",\n `Task ID: ${task.id}`,\n `Title: ${task.title}`,\n `Source: ${task.source}`,\n `Priority: ${task.priority}`,\n `Complexity: ${task.complexity}`,\n `Execution mode: ${task.executionMode}`,\n ];\n\n if (task.linkedIssue) {\n lines.push(\n \"\",\n `GitHub Issue #${task.linkedIssue.number}: ${task.linkedIssue.url}`,\n task.linkedIssue.labels.length > 0\n ? `Labels: ${task.linkedIssue.labels.join(\", \")}`\n : \"\",\n \"Resolve this issue completely. Read the issue description carefully and implement the fix.\",\n );\n }\n\n lines.push(\n \"\",\n \"Description:\",\n task.description,\n \"\",\n \"Target files:\",\n fileList,\n \"\",\n \"Apply minimal, safe changes and ensure the repository remains buildable.\",\n );\n\n return lines.filter((l) => l !== undefined).join(\"\\n\");\n}\n\nfunction stageFromEvent(event: AgentEvent): string {\n switch (event.type) {\n case \"output\":\n return event.stream;\n case \"tokens\":\n return \"tokens\";\n case \"file_edit\":\n return `file:${event.action}`;\n case \"tool_use\":\n return `tool:${event.tool}`;\n case \"error\":\n return event.recoverable ? \"agent-warning\" : \"agent-error\";\n default:\n return \"running\";\n }\n}\n\nfunction mergeExecutionResult(\n result: AgentResult,\n observedTokens: number,\n observedFiles: Set<string>,\n startedAt: number,\n): ExecutionResult {\n for (const changedFile of result.filesChanged) {\n observedFiles.add(changedFile);\n }\n\n return {\n success: result.success,\n exitCode: result.exitCode,\n totalTokensUsed: Math.max(result.totalTokensUsed, observedTokens),\n filesChanged: [...observedFiles],\n duration: result.duration > 0 ? result.duration : Date.now() - startedAt,\n error: result.error,\n };\n}\n\nfunction normalizeExecutionError(error: unknown, task: Task, executionId: string): OacError {\n if (error instanceof OacError) {\n return error;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n if (/timed out|timeout/i.test(message)) {\n return executionError(\"AGENT_TIMEOUT\", `Task ${task.id} timed out during execution.`, {\n context: {\n taskId: task.id,\n executionId,\n message,\n },\n cause: error,\n });\n }\n\n return executionError(\"AGENT_EXECUTION_FAILED\", `Task ${task.id} failed during execution.`, {\n context: {\n taskId: task.id,\n executionId,\n message,\n },\n cause: error,\n });\n}\n\nexport async function executeTask(\n agent: AgentProvider,\n task: Task,\n sandbox: SandboxContext,\n eventBus: OacEventBus,\n options: ExecuteTaskOptions = {},\n): Promise<ExecutionResult> {\n const executionId = options.executionId ?? randomUUID();\n const tokenBudget =\n options.tokenBudget ?? readMetadataNumber(task, \"tokenBudget\") ?? DEFAULT_TOKEN_BUDGET;\n const timeoutMs =\n options.timeoutMs ?? readMetadataNumber(task, \"timeoutMs\") ?? DEFAULT_TIMEOUT_MS;\n const allowCommits = options.allowCommits ?? true;\n\n const startedAt = Date.now();\n let observedTokens = 0;\n const observedFiles = new Set<string>();\n\n const execution = agent.execute({\n executionId,\n workingDirectory: sandbox.path,\n prompt: buildTaskPrompt(task),\n targetFiles: task.targetFiles,\n tokenBudget,\n allowCommits,\n timeoutMs,\n });\n\n const streamPromise = (async (): Promise<void> => {\n for await (const event of execution.events) {\n if (event.type === \"tokens\") {\n observedTokens = Math.max(observedTokens, event.cumulativeTokens);\n }\n\n if (event.type === \"file_edit\") {\n observedFiles.add(event.path);\n }\n\n eventBus.emit(\"execution:progress\", {\n jobId: executionId,\n tokensUsed: observedTokens,\n stage: stageFromEvent(event),\n });\n }\n })();\n\n try {\n const result = await execution.result;\n await streamPromise;\n return mergeExecutionResult(result, observedTokens, observedFiles, startedAt);\n } catch (error) {\n try {\n await streamPromise;\n } catch {\n // Ignore stream failures and surface the primary execution error.\n }\n throw normalizeExecutionError(error, task, executionId);\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { setTimeout as delay } from \"node:timers/promises\";\n\nimport {\n type ExecutionPlan,\n type ExecutionResult,\n OacError,\n type OacEventBus,\n type Task,\n type TokenEstimate,\n executionError,\n} from \"../core/index.js\";\nimport PQueue from \"p-queue\";\n\nimport type { AgentProvider } from \"./agents/agent.interface.js\";\nimport { createSandbox } from \"./sandbox.js\";\nimport { executeTask } from \"./worker.js\";\n\nconst DEFAULT_CONCURRENCY = 2;\nconst DEFAULT_MAX_ATTEMPTS = 2;\nconst DEFAULT_TIMEOUT_MS = 300_000;\nconst DEFAULT_TOKEN_BUDGET = 50_000;\n\nexport type JobStatus = \"queued\" | \"running\" | \"completed\" | \"failed\" | \"retrying\" | \"aborted\";\n\nexport interface Job {\n id: string;\n task: Task;\n estimate: TokenEstimate;\n status: JobStatus;\n attempts: number;\n maxAttempts: number;\n createdAt: number;\n startedAt?: number;\n completedAt?: number;\n result?: ExecutionResult;\n error?: OacError;\n workerId?: string;\n}\n\nexport interface ExecutionEngineConfig {\n concurrency?: number;\n maxAttempts?: number;\n repoPath?: string;\n baseBranch?: string;\n branchPrefix?: string;\n taskTimeoutMs?: number;\n defaultTokenBudget?: number;\n}\n\nexport interface RunResult {\n jobs: Job[];\n completed: Job[];\n failed: Job[];\n aborted: Job[];\n}\n\ninterface ActiveJobState {\n job: Job;\n agent: AgentProvider;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction toErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\nfunction sanitizeBranchSegment(value: string): string {\n const sanitized = value\n .toLowerCase()\n .replace(/[^a-z0-9/_-]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^[-/]+|[-/]+$/g, \"\");\n return sanitized || \"task\";\n}\n\nexport function isTransientError(error: OacError): boolean {\n return (\n error.code === \"AGENT_TIMEOUT\" ||\n error.code === \"AGENT_OOM\" ||\n error.code === \"AGENT_RATE_LIMITED\" ||\n error.code === \"NETWORK_ERROR\" ||\n error.code === \"GIT_LOCK_FAILED\"\n );\n}\n\nexport class ExecutionEngine {\n private readonly queue: PQueue;\n private readonly jobs = new Map<string, Job>();\n private readonly activeJobs = new Map<string, ActiveJobState>();\n private readonly concurrency: number;\n private readonly maxAttempts: number;\n private readonly repoPath: string;\n private readonly baseBranch: string;\n private readonly branchPrefix: string;\n private readonly taskTimeoutMs: number;\n private readonly defaultTokenBudget: number;\n\n private aborted = false;\n private nextAgentIndex = 0;\n\n public constructor(\n private readonly agents: AgentProvider[],\n private readonly eventBus: OacEventBus,\n config: ExecutionEngineConfig = {},\n ) {\n if (agents.length === 0) {\n throw executionError(\n \"AGENT_NOT_AVAILABLE\",\n \"ExecutionEngine requires at least one agent provider\",\n );\n }\n\n this.concurrency = Math.max(1, config.concurrency ?? DEFAULT_CONCURRENCY);\n this.maxAttempts = Math.max(1, config.maxAttempts ?? DEFAULT_MAX_ATTEMPTS);\n this.repoPath = config.repoPath ?? process.cwd();\n this.baseBranch = config.baseBranch ?? \"main\";\n this.branchPrefix = config.branchPrefix ?? \"oac\";\n this.taskTimeoutMs = Math.max(1, config.taskTimeoutMs ?? DEFAULT_TIMEOUT_MS);\n this.defaultTokenBudget = Math.max(1, config.defaultTokenBudget ?? DEFAULT_TOKEN_BUDGET);\n\n this.queue = new PQueue({\n concurrency: this.concurrency,\n autoStart: false,\n });\n }\n\n public enqueue(plan: ExecutionPlan): Job[] {\n const enqueuedJobs: Job[] = [];\n\n for (const { task, estimate } of plan.selectedTasks) {\n const job: Job = {\n id: randomUUID(),\n task,\n estimate,\n status: \"queued\",\n attempts: 0,\n maxAttempts: this.maxAttempts,\n createdAt: Date.now(),\n };\n\n this.jobs.set(job.id, job);\n enqueuedJobs.push(job);\n this.schedule(job);\n }\n\n return enqueuedJobs;\n }\n\n public async run(): Promise<RunResult> {\n this.aborted = false;\n this.queue.start();\n await this.queue.onIdle();\n return this.buildRunResult();\n }\n\n public async abort(): Promise<void> {\n this.aborted = true;\n this.queue.pause();\n this.queue.clear();\n\n const abortError = executionError(\"AGENT_EXECUTION_FAILED\", \"Execution aborted by user.\");\n\n for (const job of this.jobs.values()) {\n if (job.status === \"queued\" || job.status === \"retrying\") {\n job.status = \"aborted\";\n job.completedAt = Date.now();\n job.error = abortError;\n }\n }\n\n await Promise.all(\n [...this.activeJobs.values()].map(async ({ job, agent }) => {\n job.status = \"aborted\";\n job.completedAt = Date.now();\n job.error = abortError;\n this.eventBus.emit(\"execution:failed\", {\n jobId: job.id,\n error: abortError,\n });\n\n try {\n await agent.abort(job.id);\n } catch {\n // Ignore agent abort errors and continue shutdown.\n }\n }),\n );\n }\n\n private schedule(job: Job, delayMs = 0): void {\n void this.queue\n .add(\n async () => {\n if (delayMs > 0) {\n await delay(delayMs);\n }\n await this.runJob(job);\n },\n { priority: job.task.priority },\n )\n .catch((error: unknown) => {\n const normalized = this.normalizeError(error, job);\n job.status = \"failed\";\n job.completedAt = Date.now();\n job.error = normalized;\n this.eventBus.emit(\"execution:failed\", {\n jobId: job.id,\n error: normalized,\n });\n });\n }\n\n private async runJob(job: Job): Promise<void> {\n if (this.aborted || job.status === \"aborted\") {\n return;\n }\n\n job.attempts += 1;\n job.status = \"running\";\n job.startedAt ??= Date.now();\n\n const agent = this.selectAgent();\n job.workerId = agent.id;\n this.activeJobs.set(job.id, { job, agent });\n\n this.eventBus.emit(\"execution:started\", {\n jobId: job.id,\n task: job.task,\n agent: agent.id,\n });\n\n let sandboxCleanup: (() => Promise<void>) | undefined;\n\n try {\n const branchName = this.createBranchName(job);\n const sandbox = await createSandbox(this.repoPath, branchName, this.baseBranch);\n sandboxCleanup = sandbox.cleanup;\n\n const result = await executeTask(agent, job.task, sandbox, this.eventBus, {\n executionId: job.id,\n tokenBudget:\n job.estimate.totalEstimatedTokens > 0\n ? job.estimate.totalEstimatedTokens\n : this.defaultTokenBudget,\n timeoutMs: this.taskTimeoutMs,\n allowCommits: true,\n });\n\n job.result = result;\n job.completedAt = Date.now();\n\n if (result.success) {\n job.status = \"completed\";\n this.eventBus.emit(\"execution:completed\", {\n jobId: job.id,\n result,\n });\n return;\n }\n\n const failure = executionError(\n \"AGENT_EXECUTION_FAILED\",\n result.error ?? `Task ${job.task.id} exited with code ${result.exitCode}.`,\n {\n context: {\n taskId: job.task.id,\n jobId: job.id,\n exitCode: result.exitCode,\n attempt: job.attempts,\n },\n },\n );\n await this.handleFailure(job, failure);\n } catch (error) {\n const normalized = this.normalizeError(error, job);\n await this.handleFailure(job, normalized);\n } finally {\n this.activeJobs.delete(job.id);\n\n if (sandboxCleanup) {\n try {\n await sandboxCleanup();\n } catch (cleanupError) {\n const cleanupMessage = toErrorMessage(cleanupError);\n job.error ??= executionError(\n \"AGENT_EXECUTION_FAILED\",\n `Sandbox cleanup failed for job ${job.id}`,\n {\n context: {\n jobId: job.id,\n cleanupError: cleanupMessage,\n },\n cause: cleanupError,\n },\n );\n }\n }\n }\n }\n\n private async handleFailure(job: Job, error: OacError): Promise<void> {\n job.error = error;\n\n if (this.aborted || job.status === \"aborted\") {\n job.status = \"aborted\";\n job.completedAt = Date.now();\n return;\n }\n\n if (job.attempts < job.maxAttempts && isTransientError(error)) {\n job.status = \"retrying\";\n const retryDelay =\n error.code === \"AGENT_RATE_LIMITED\"\n ? Math.min(60_000, 10_000 * 2 ** (job.attempts - 1))\n : Math.min(5_000, job.attempts * 1_000);\n this.schedule(job, retryDelay);\n return;\n }\n\n job.status = \"failed\";\n job.completedAt = Date.now();\n this.eventBus.emit(\"execution:failed\", {\n jobId: job.id,\n error,\n });\n }\n\n private selectAgent(): AgentProvider {\n const agent = this.agents[this.nextAgentIndex % this.agents.length];\n this.nextAgentIndex = (this.nextAgentIndex + 1) % this.agents.length;\n return agent;\n }\n\n private createBranchName(job: Job): string {\n const dateSegment = new Date().toISOString().slice(0, 10).replaceAll(\"-\", \"\");\n const taskSegment = sanitizeBranchSegment(job.task.id);\n return `${this.branchPrefix}/${dateSegment}/${taskSegment}-${job.id.slice(0, 8)}-a${job.attempts}`;\n }\n\n private normalizeError(error: unknown, job: Job): OacError {\n if (error instanceof OacError) {\n return error;\n }\n\n const message = toErrorMessage(error);\n if (/timed out|timeout/i.test(message)) {\n return executionError(\"AGENT_TIMEOUT\", `Job ${job.id} timed out.`, {\n context: {\n jobId: job.id,\n taskId: job.task.id,\n message,\n attempt: job.attempts,\n },\n cause: error,\n });\n }\n\n if (/out of memory|ENOMEM|heap/i.test(message)) {\n return executionError(\"AGENT_OOM\", `Job ${job.id} ran out of memory.`, {\n context: {\n jobId: job.id,\n taskId: job.task.id,\n message,\n attempt: job.attempts,\n },\n cause: error,\n });\n }\n\n if (/network|ECONN|ENOTFOUND|EAI_AGAIN/i.test(message)) {\n return new OacError(\n `Job ${job.id} failed due to a network error.`,\n \"NETWORK_ERROR\",\n \"recoverable\",\n {\n jobId: job.id,\n taskId: job.task.id,\n message,\n attempt: job.attempts,\n },\n error,\n );\n }\n\n if (/index\\.lock|cannot lock ref|Unable to create '.+?\\.git\\/index\\.lock'/i.test(message)) {\n return new OacError(\n `Job ${job.id} failed due to a git lock conflict.`,\n \"GIT_LOCK_FAILED\",\n \"recoverable\",\n {\n jobId: job.id,\n taskId: job.task.id,\n message,\n attempt: job.attempts,\n },\n error,\n );\n }\n\n if (isRecord(error) && error.name === \"AbortError\") {\n return executionError(\"AGENT_EXECUTION_FAILED\", `Job ${job.id} was aborted.`, {\n context: {\n jobId: job.id,\n taskId: job.task.id,\n attempt: job.attempts,\n },\n cause: error,\n });\n }\n\n return executionError(\"AGENT_EXECUTION_FAILED\", `Job ${job.id} failed unexpectedly.`, {\n context: {\n jobId: job.id,\n taskId: job.task.id,\n message,\n attempt: job.attempts,\n },\n cause: error,\n });\n }\n\n private buildRunResult(): RunResult {\n const jobs = [...this.jobs.values()];\n\n return {\n jobs,\n completed: jobs.filter((job) => job.status === \"completed\"),\n failed: jobs.filter((job) => job.status === \"failed\"),\n aborted: jobs.filter((job) => job.status === \"aborted\"),\n };\n }\n}\n"],"mappings":"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","names":["resolve","createInterface","execa","AsyncEventQueue","resolve","isRecord","readString","readNumber","parseJsonPayload","parseTokenPatchFromPayload","patchTokenState","parseTokenEvent","normalizeFileAction","parseFileEditFromPayload","estimateTokenCount","normalizeUnknownError","computeTotalTokens","normalizeExitCode","hasBooleanFlag","buildFailureMessage","createInterface","randomUUID","DEFAULT_TIMEOUT_MS","DEFAULT_TOKEN_BUDGET","isRecord","randomUUID"]}
@@ -1,8 +1,39 @@
1
- // src/cli.ts
2
- import { readFile as readFile5 } from "fs/promises";
1
+ import {
2
+ cloneRepo,
3
+ resolveRepo
4
+ } from "./chunk-VLR2VYFW.js";
5
+ import {
6
+ CompositeScanner,
7
+ GitHubIssuesScanner,
8
+ LintScanner,
9
+ TestGapScanner,
10
+ TodoScanner,
11
+ rankTasks
12
+ } from "./chunk-ZPI2VQ7U.js";
13
+ import {
14
+ buildExecutionPlan,
15
+ estimateTokens
16
+ } from "./chunk-UL66HWYF.js";
17
+ import {
18
+ ClaudeCodeAdapter,
19
+ CodexAdapter,
20
+ createSandbox,
21
+ executeTask
22
+ } from "./chunk-NZEI4RPP.js";
23
+ import {
24
+ UNLIMITED_BUDGET,
25
+ createEventBus,
26
+ loadConfig
27
+ } from "./chunk-TGZ2TGDA.js";
28
+ import {
29
+ contributionLogSchema,
30
+ writeContributionLog
31
+ } from "./chunk-LQC5DLT7.js";
32
+
33
+ // src/cli/cli.ts
3
34
  import { Command as Command9 } from "commander";
4
35
 
5
- // src/commands/doctor.ts
36
+ // src/cli/commands/doctor.ts
6
37
  import { spawn } from "child_process";
7
38
  import chalk, { Chalk } from "chalk";
8
39
  import { Command } from "commander";
@@ -239,7 +270,7 @@ function runCommand(command, args) {
239
270
  });
240
271
  }
241
272
 
242
- // src/commands/init.ts
273
+ // src/cli/commands/init.ts
243
274
  import { constants as fsConstants } from "fs";
244
275
  import { access, mkdir, writeFile } from "fs/promises";
245
276
  import { resolve } from "path";
@@ -418,10 +449,9 @@ async function pathExists(path) {
418
449
  }
419
450
  }
420
451
 
421
- // src/commands/leaderboard.ts
452
+ // src/cli/commands/leaderboard.ts
422
453
  import { readFile, readdir } from "fs/promises";
423
454
  import { resolve as resolve2 } from "path";
424
- import { contributionLogSchema } from "@open330/oac-tracking";
425
455
  import Table from "cli-table3";
426
456
  import { Command as Command3 } from "commander";
427
457
  function createLeaderboardCommand() {
@@ -628,10 +658,9 @@ function isFileNotFoundError(error) {
628
658
  return error.code === "ENOENT";
629
659
  }
630
660
 
631
- // src/commands/log.ts
661
+ // src/cli/commands/log.ts
632
662
  import { readFile as readFile2, readdir as readdir2 } from "fs/promises";
633
663
  import { resolve as resolve3 } from "path";
634
- import { contributionLogSchema as contributionLogSchema2 } from "@open330/oac-tracking";
635
664
  import Table2 from "cli-table3";
636
665
  import { Command as Command4 } from "commander";
637
666
  function createLogCommand() {
@@ -709,7 +738,7 @@ async function readContributionLogs2(repoPath) {
709
738
  try {
710
739
  const content = await readFile2(filePath, "utf8");
711
740
  const payload = JSON.parse(content);
712
- const parsed = contributionLogSchema2.safeParse(payload);
741
+ const parsed = contributionLogSchema.safeParse(payload);
713
742
  return parsed.success ? parsed.data : null;
714
743
  } catch {
715
744
  return null;
@@ -762,17 +791,7 @@ function isFileNotFoundError2(error) {
762
791
  return code === "ENOENT";
763
792
  }
764
793
 
765
- // src/commands/plan.ts
766
- import { buildExecutionPlan, estimateTokens } from "@open330/oac-budget";
767
- import {
768
- CompositeScanner,
769
- LintScanner,
770
- TodoScanner,
771
- rankTasks
772
- } from "@open330/oac-discovery";
773
- import { cloneRepo, resolveRepo } from "@open330/oac-repo";
774
-
775
- // src/github-auth.ts
794
+ // src/cli/github-auth.ts
776
795
  import { execFileSync } from "child_process";
777
796
  function ensureGitHubAuth() {
778
797
  const githubToken = process.env.GITHUB_TOKEN?.trim();
@@ -828,18 +847,17 @@ function checkGitHubScopes(required = ["repo"]) {
828
847
  }
829
848
  }
830
849
 
831
- // src/commands/plan.ts
850
+ // src/cli/commands/plan.ts
832
851
  import chalk3, { Chalk as Chalk3 } from "chalk";
833
852
  import Table3 from "cli-table3";
834
853
  import { Command as Command5 } from "commander";
835
854
  import ora from "ora";
836
855
 
837
- // src/config-loader.ts
856
+ // src/cli/config-loader.ts
838
857
  import { constants as fsConstants2 } from "fs";
839
858
  import { access as access2, readFile as readFile3 } from "fs/promises";
840
859
  import { resolve as resolve4 } from "path";
841
860
  import { pathToFileURL } from "url";
842
- import { loadConfig } from "@open330/oac-core";
843
861
  var LEGACY_DEFINE_CONFIG_IMPORT = /@(?:open330\/oac-core|oac\/core)/;
844
862
  var LEGACY_DEFINE_CONFIG_IMPORT_LINE = /^\s*import\s*\{\s*defineConfig\s*\}\s*from\s*["']@(?:open330\/oac-core|oac\/core)["'];\s*$/m;
845
863
  var LEGACY_DEFINE_CONFIG_EXPORT = /export\s+default\s+defineConfig\s*\(/;
@@ -909,7 +927,7 @@ async function pathExists2(path) {
909
927
  }
910
928
  }
911
929
 
912
- // src/commands/plan.ts
930
+ // src/cli/commands/plan.ts
913
931
  function createPlanCommand() {
914
932
  const command = new Command5("plan");
915
933
  command.description("Build an execution plan from discovered tasks").option("--repo <owner/repo>", "Target repository (owner/repo or GitHub URL)").option("--tokens <number>", "Token budget for planning", parseInteger3).option("--provider <id>", "Agent provider id").action(async (options, cmd) => {
@@ -1117,29 +1135,8 @@ function truncate(value, maxLength) {
1117
1135
  return `${value.slice(0, Math.max(0, maxLength - 3))}...`;
1118
1136
  }
1119
1137
 
1120
- // src/commands/run.ts
1138
+ // src/cli/commands/run.ts
1121
1139
  import { randomUUID } from "crypto";
1122
- import { buildExecutionPlan as buildExecutionPlan2, estimateTokens as estimateTokens2 } from "@open330/oac-budget";
1123
- import {
1124
- UNLIMITED_BUDGET,
1125
- createEventBus
1126
- } from "@open330/oac-core";
1127
- import {
1128
- CompositeScanner as CompositeScanner2,
1129
- GitHubIssuesScanner,
1130
- LintScanner as LintScanner2,
1131
- TestGapScanner,
1132
- TodoScanner as TodoScanner2,
1133
- rankTasks as rankTasks2
1134
- } from "@open330/oac-discovery";
1135
- import {
1136
- ClaudeCodeAdapter,
1137
- CodexAdapter,
1138
- createSandbox,
1139
- executeTask as workerExecuteTask
1140
- } from "@open330/oac-execution";
1141
- import { cloneRepo as cloneRepo2, resolveRepo as resolveRepo2 } from "@open330/oac-repo";
1142
- import { writeContributionLog } from "@open330/oac-tracking";
1143
1140
  import chalk4, { Chalk as Chalk4 } from "chalk";
1144
1141
  import Table4 from "cli-table3";
1145
1142
  import { Command as Command6 } from "commander";
@@ -1201,10 +1198,10 @@ function createRunCommand() {
1201
1198
  );
1202
1199
  }
1203
1200
  const resolveSpinner = createSpinner2(outputJson, "Resolving repository...");
1204
- const resolvedRepo = await resolveRepo2(repoInput);
1201
+ const resolvedRepo = await resolveRepo(repoInput);
1205
1202
  resolveSpinner?.succeed(`Resolved ${resolvedRepo.fullName}`);
1206
1203
  const cloneSpinner = createSpinner2(outputJson, "Preparing local clone...");
1207
- await cloneRepo2(resolvedRepo);
1204
+ await cloneRepo(resolvedRepo);
1208
1205
  cloneSpinner?.succeed(`Repository ready at ${resolvedRepo.localPath}`);
1209
1206
  const scanSpinner = createSpinner2(
1210
1207
  outputJson,
@@ -1216,7 +1213,7 @@ function createRunCommand() {
1216
1213
  repo: resolvedRepo
1217
1214
  });
1218
1215
  scanSpinner?.succeed(`Discovered ${scannedTasks.length} raw task(s)`);
1219
- let candidateTasks = rankTasks2(scannedTasks).filter((task) => task.priority >= minPriority);
1216
+ let candidateTasks = rankTasks(scannedTasks).filter((task) => task.priority >= minPriority);
1220
1217
  if (options.source) {
1221
1218
  candidateTasks = candidateTasks.filter((task) => task.source === options.source);
1222
1219
  }
@@ -1250,7 +1247,7 @@ function createRunCommand() {
1250
1247
  );
1251
1248
  const estimates = await estimateTaskMap2(candidateTasks, providerId);
1252
1249
  estimateSpinner?.succeed("Token estimation completed");
1253
- const plan = buildExecutionPlan2(candidateTasks, estimates, totalBudget);
1250
+ const plan = buildExecutionPlan(candidateTasks, estimates, totalBudget);
1254
1251
  if (options.dryRun) {
1255
1252
  const dryRunSummary = {
1256
1253
  runId,
@@ -1576,20 +1573,20 @@ function selectScannersFromConfig2(config, hasGitHubAuth) {
1576
1573
  }
1577
1574
  const uniqueEnabled = [...new Set(enabled)];
1578
1575
  const scannerInstances = uniqueEnabled.map((scannerName) => {
1579
- if (scannerName === "lint") return new LintScanner2();
1576
+ if (scannerName === "lint") return new LintScanner();
1580
1577
  if (scannerName === "github-issues") return new GitHubIssuesScanner();
1581
1578
  if (scannerName === "test-gap") return new TestGapScanner();
1582
- return new TodoScanner2();
1579
+ return new TodoScanner();
1583
1580
  });
1584
1581
  return {
1585
1582
  enabled: uniqueEnabled,
1586
- scanner: new CompositeScanner2(scannerInstances)
1583
+ scanner: new CompositeScanner(scannerInstances)
1587
1584
  };
1588
1585
  }
1589
1586
  async function estimateTaskMap2(tasks, providerId) {
1590
1587
  const entries = await Promise.all(
1591
1588
  tasks.map(async (task) => {
1592
- const estimate = await estimateTokens2(task, providerId);
1589
+ const estimate = await estimateTokens(task, providerId);
1593
1590
  return [task.id, estimate];
1594
1591
  })
1595
1592
  );
@@ -1607,7 +1604,7 @@ async function executeWithAgent(input2) {
1607
1604
  cleanup: sandbox.cleanup
1608
1605
  };
1609
1606
  try {
1610
- const result = await workerExecuteTask(input2.adapter, input2.task, sandbox, eventBus, {
1607
+ const result = await executeTask(input2.adapter, input2.task, sandbox, eventBus, {
1611
1608
  tokenBudget: input2.estimate.totalEstimatedTokens,
1612
1609
  timeoutMs: input2.timeoutSeconds * 1e3
1613
1610
  });
@@ -1966,16 +1963,7 @@ function truncate2(value, maxLength) {
1966
1963
  return `${value.slice(0, Math.max(0, maxLength - 3))}...`;
1967
1964
  }
1968
1965
 
1969
- // src/commands/scan.ts
1970
- import {
1971
- CompositeScanner as CompositeScanner3,
1972
- GitHubIssuesScanner as GitHubIssuesScanner2,
1973
- LintScanner as LintScanner3,
1974
- TestGapScanner as TestGapScanner2,
1975
- TodoScanner as TodoScanner3,
1976
- rankTasks as rankTasks3
1977
- } from "@open330/oac-discovery";
1978
- import { cloneRepo as cloneRepo3, resolveRepo as resolveRepo3 } from "@open330/oac-repo";
1966
+ // src/cli/commands/scan.ts
1979
1967
  import chalk5, { Chalk as Chalk5 } from "chalk";
1980
1968
  import Table5 from "cli-table3";
1981
1969
  import { Command as Command7 } from "commander";
@@ -2003,10 +1991,10 @@ function createScanCommand() {
2003
1991
  );
2004
1992
  }
2005
1993
  const resolveSpinner = createSpinner3(outputJson, "Resolving repository...");
2006
- const resolvedRepo = await resolveRepo3(repoInput);
1994
+ const resolvedRepo = await resolveRepo(repoInput);
2007
1995
  resolveSpinner?.succeed(`Resolved ${resolvedRepo.fullName}`);
2008
1996
  const cloneSpinner = createSpinner3(outputJson, "Preparing local clone...");
2009
- await cloneRepo3(resolvedRepo);
1997
+ await cloneRepo(resolvedRepo);
2010
1998
  cloneSpinner?.succeed(`Repository ready at ${resolvedRepo.localPath}`);
2011
1999
  const scanSpinner = createSpinner3(
2012
2000
  outputJson,
@@ -2018,7 +2006,7 @@ function createScanCommand() {
2018
2006
  repo: resolvedRepo
2019
2007
  });
2020
2008
  scanSpinner?.succeed(`Scanned ${resolvedRepo.fullName}`);
2021
- const rankedTasks = rankTasks3(scannedTasks).filter(
2009
+ const rankedTasks = rankTasks(scannedTasks).filter(
2022
2010
  (task) => task.priority >= options.minPriority
2023
2011
  );
2024
2012
  if (outputJson) {
@@ -2141,15 +2129,15 @@ function selectScanners(scannerOption, config, hasGitHubAuth = false) {
2141
2129
  );
2142
2130
  }
2143
2131
  const scannerInstances = uniqueEnabled.map((name) => {
2144
- if (name === "lint") return new LintScanner3();
2145
- if (name === "github-issues") return new GitHubIssuesScanner2();
2146
- if (name === "test-gap") return new TestGapScanner2();
2147
- return new TodoScanner3();
2132
+ if (name === "lint") return new LintScanner();
2133
+ if (name === "github-issues") return new GitHubIssuesScanner();
2134
+ if (name === "test-gap") return new TestGapScanner();
2135
+ return new TodoScanner();
2148
2136
  });
2149
2137
  return {
2150
2138
  enabled: uniqueEnabled,
2151
2139
  unknown,
2152
- scanner: new CompositeScanner3(scannerInstances)
2140
+ scanner: new CompositeScanner(scannerInstances)
2153
2141
  };
2154
2142
  }
2155
2143
  function scannersFromConfig(config, hasGitHubAuth = false) {
@@ -2182,7 +2170,7 @@ function truncate3(value, maxLength) {
2182
2170
  return `${value.slice(0, Math.max(0, maxLength - 3))}...`;
2183
2171
  }
2184
2172
 
2185
- // src/commands/status.ts
2173
+ // src/cli/commands/status.ts
2186
2174
  import { readFile as readFile4 } from "fs/promises";
2187
2175
  import { resolve as resolve5 } from "path";
2188
2176
  import { Command as Command8 } from "commander";
@@ -2349,19 +2337,7 @@ function isFileNotFoundError3(error) {
2349
2337
  return error.code === "ENOENT";
2350
2338
  }
2351
2339
 
2352
- // src/cli.ts
2353
- async function readCliVersion() {
2354
- try {
2355
- const packageJsonPath = new URL("../package.json", import.meta.url);
2356
- const packageJsonRaw = await readFile5(packageJsonPath, "utf8");
2357
- const packageJson = JSON.parse(packageJsonRaw);
2358
- if (typeof packageJson.version === "string" && packageJson.version.length > 0) {
2359
- return packageJson.version;
2360
- }
2361
- } catch {
2362
- }
2363
- return "0.0.0";
2364
- }
2340
+ // src/cli/cli.ts
2365
2341
  function registerCommands(program) {
2366
2342
  program.addCommand(createInitCommand());
2367
2343
  program.addCommand(createDoctorCommand());
@@ -2373,7 +2349,7 @@ function registerCommands(program) {
2373
2349
  program.addCommand(createStatusCommand());
2374
2350
  }
2375
2351
  async function createCliProgram() {
2376
- const version = await readCliVersion();
2352
+ const version = true ? "2026.4.1" : "0.0.0";
2377
2353
  const program = new Command9();
2378
2354
  program.name("oac").description("Open Agent Contribution CLI").version(version).option("--config <path>", "Config file path", "oac.config.ts").option("--verbose", "Enable verbose logging", false).option("--json", "Output machine-readable JSON", false).option("--no-color", "Disable ANSI colors");
2379
2355
  registerCommands(program);
@@ -2388,4 +2364,4 @@ export {
2388
2364
  createCliProgram,
2389
2365
  runCli
2390
2366
  };
2391
- //# sourceMappingURL=chunk-Z7KEQPGV.js.map
2367
+ //# sourceMappingURL=chunk-SZUDHVBF.js.map