@open330/oac-core
Advanced tools
+1
-1
@@ -1437,3 +1437,3 @@ import { z } from 'zod'; | ||
| type AgentProviderId = "claude-code" | "codex-cli" | "opencode" | (string & {}); | ||
| type AgentProviderId = "claude-code" | "codex" | "opencode" | (string & {}); | ||
| /** | ||
@@ -1440,0 +1440,0 @@ * Sentinel value representing an unlimited token budget. |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/config.ts","../src/errors.ts","../src/event-bus.ts","../src/types.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { configError } from \"./errors.js\";\n\nconst ENV_VAR_PATTERN = /\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g;\n\nconst DEFAULT_DISCOVERY_EXCLUDE = [\n \"node_modules\",\n \"dist\",\n \"build\",\n \".git\",\n \"*.min.js\",\n \"vendor/\",\n] as const;\n\nexport const RepoTargetSchema = z.union([\n z.string().min(1),\n z\n .object({\n name: z.string().min(1),\n branch: z.string().min(1).optional(),\n })\n .strict(),\n]);\n\nexport const ProviderSchema = z\n .object({\n id: z.string().min(1).default(\"claude-code\"),\n options: z.record(z.string(), z.unknown()).default({}),\n })\n .strict()\n .default({});\n\nexport const BudgetSchema = z\n .object({\n totalTokens: z.number().int().positive().default(100_000),\n reservePercent: z.number().min(0).max(1).default(0.1),\n estimationPadding: z.number().positive().default(1.2),\n })\n .strict()\n .default({});\n\nexport const DiscoveryScannersSchema = z\n .object({\n lint: z.boolean().default(true),\n todo: z.boolean().default(true),\n testGap: z.boolean().default(true),\n deadCode: z.boolean().default(false),\n githubIssues: z.boolean().default(true),\n })\n .strict()\n .default({});\n\nexport const DiscoverySchema = z\n .object({\n scanners: DiscoveryScannersSchema,\n issueLabels: z.array(z.string().min(1)).default([\"good-first-issue\", \"help-wanted\", \"bug\"]),\n minPriority: z.number().int().min(0).max(100).default(20),\n maxTasks: z.number().int().positive().default(50),\n customScanners: z.array(z.string().min(1)).default([]),\n exclude: z.array(z.string().min(1)).default([...DEFAULT_DISCOVERY_EXCLUDE]),\n })\n .strict()\n .default({});\n\nexport const ValidationSchema = z\n .object({\n lint: z.boolean().default(true),\n test: z.boolean().default(true),\n typeCheck: z.boolean().default(true),\n maxDiffLines: z.number().int().positive().default(500),\n })\n .strict()\n .default({});\n\nexport const PrSchema = z\n .object({\n draft: z.boolean().default(false),\n labels: z.array(z.string().min(1)).default([\"oac-contribution\"]),\n reviewers: z.array(z.string().min(1)).default([]),\n assignees: z.array(z.string().min(1)).default([]),\n })\n .strict()\n .default({});\n\nexport const ExecutionSchema = z\n .object({\n concurrency: z.number().int().positive().default(2),\n taskTimeout: z.number().int().positive().default(300),\n maxRetries: z.number().int().min(0).default(2),\n mode: z.enum([\"new-pr\", \"update-pr\", \"direct-commit\"]).default(\"new-pr\"),\n branchPattern: z.string().min(1).default(\"oac/{date}/{task}\"),\n validation: ValidationSchema,\n pr: PrSchema,\n })\n .strict()\n .default({});\n\nexport const LinearIntegrationSchema = z\n .object({\n enabled: z.boolean().default(false),\n apiKey: z.string().min(1).optional(),\n teamId: z.string().min(1).optional(),\n })\n .strict()\n .default({})\n .superRefine((value, ctx) => {\n if (value.enabled && !value.apiKey) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"apiKey\"],\n message: \"Linear integration is enabled but apiKey is missing\",\n });\n }\n if (value.enabled && !value.teamId) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"teamId\"],\n message: \"Linear integration is enabled but teamId is missing\",\n });\n }\n });\n\nexport const JiraIntegrationSchema = z\n .object({\n enabled: z.boolean().default(false),\n baseUrl: z.string().url().optional(),\n email: z.string().min(1).optional(),\n apiToken: z.string().min(1).optional(),\n projectKey: z.string().min(1).optional(),\n })\n .strict()\n .default({})\n .superRefine((value, ctx) => {\n if (!value.enabled) {\n return;\n }\n\n if (!value.baseUrl) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"baseUrl\"],\n message: \"Jira integration is enabled but baseUrl is missing\",\n });\n }\n if (!value.email) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"email\"],\n message: \"Jira integration is enabled but email is missing\",\n });\n }\n if (!value.apiToken) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"apiToken\"],\n message: \"Jira integration is enabled but apiToken is missing\",\n });\n }\n if (!value.projectKey) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"projectKey\"],\n message: \"Jira integration is enabled but projectKey is missing\",\n });\n }\n });\n\nexport const CompletionSchema = z\n .object({\n integrations: z\n .object({\n linear: LinearIntegrationSchema,\n jira: JiraIntegrationSchema,\n })\n .strict()\n .default({}),\n monitor: z\n .object({\n enabled: z.boolean().default(false),\n pollInterval: z.number().int().positive().default(300),\n autoRespondToReviews: z.boolean().default(false),\n autoDeleteBranch: z.boolean().default(true),\n })\n .strict()\n .default({}),\n })\n .strict()\n .default({});\n\nexport const TrackingSchema = z\n .object({\n directory: z.string().min(1).default(\".oac\"),\n autoCommit: z.boolean().default(false),\n gitTracked: z.boolean().default(true),\n })\n .strict()\n .default({});\n\nexport const DashboardSchema = z\n .object({\n port: z.number().int().min(1).max(65535).default(3141),\n openBrowser: z.boolean().default(true),\n })\n .strict()\n .default({});\n\nexport const OacConfigSchema = z\n .object({\n repos: z.array(RepoTargetSchema).default([]),\n provider: ProviderSchema,\n budget: BudgetSchema,\n discovery: DiscoverySchema,\n execution: ExecutionSchema,\n completion: CompletionSchema,\n tracking: TrackingSchema,\n dashboard: DashboardSchema,\n })\n .strict();\n\nexport const OacConfig = OacConfigSchema;\nexport type OacConfig = z.output<typeof OacConfigSchema>;\nexport type OacConfigInput = z.input<typeof OacConfigSchema>;\n\nexport interface LoadConfigOptions {\n env?: Record<string, string | undefined>;\n}\n\nexport function defineConfig(config: OacConfigInput): OacConfigInput {\n return config;\n}\n\nexport function interpolateEnvVars(\n value: string,\n env: Record<string, string | undefined> = getProcessEnv(),\n path: string[] = [],\n): string {\n return value.replaceAll(ENV_VAR_PATTERN, (_, variableName: string) => {\n const interpolated = env[variableName];\n if (interpolated !== undefined) {\n return interpolated;\n }\n\n throw configError(\n \"CONFIG_SECRET_MISSING\",\n `Environment variable ${variableName} is referenced in config but not set`,\n {\n context: {\n variableName,\n path: path.length > 0 ? path.join(\".\") : \"<root>\",\n },\n },\n );\n });\n}\n\nexport function loadConfig(config: unknown = {}, options: LoadConfigOptions = {}): OacConfig {\n const env = options.env ?? getProcessEnv();\n const interpolatedConfig = interpolateConfigEnvVars(config, env);\n const parsed = OacConfigSchema.safeParse(interpolatedConfig);\n\n if (parsed.success) {\n return parsed.data;\n }\n\n throw configError(\"CONFIG_INVALID\", \"Invalid OAC configuration\", {\n context: {\n issues: parsed.error.issues.map((issue) => ({\n code: issue.code,\n message: issue.message,\n path: issue.path.join(\".\"),\n })),\n },\n });\n}\n\nfunction interpolateConfigEnvVars(\n value: unknown,\n env: Record<string, string | undefined>,\n path: string[] = [],\n): unknown {\n if (typeof value === \"string\") {\n return interpolateEnvVars(value, env, path);\n }\n\n if (Array.isArray(value)) {\n return value.map((item, index) => interpolateConfigEnvVars(item, env, [...path, `${index}`]));\n }\n\n if (!isPlainObject(value)) {\n return value;\n }\n\n const interpolatedObject: Record<string, unknown> = {};\n\n for (const [key, nestedValue] of Object.entries(value)) {\n interpolatedObject[key] = interpolateConfigEnvVars(nestedValue, env, [...path, key]);\n }\n\n return interpolatedObject;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction getProcessEnv(): Record<string, string | undefined> {\n const globalProcess = globalThis as {\n process?: { env?: Record<string, string | undefined> };\n };\n return globalProcess.process?.env ?? {};\n}\n","export type OacErrorSeverity = \"fatal\" | \"recoverable\" | \"warning\";\n\nexport const REPO_ERROR_CODES = [\n \"REPO_NOT_FOUND\",\n \"REPO_ARCHIVED\",\n \"REPO_NO_PERMISSION\",\n \"REPO_CLONE_FAILED\",\n] as const;\n\nexport const DISCOVERY_ERROR_CODES = [\n \"SCANNER_FAILED\",\n \"SCANNER_TIMEOUT\",\n \"NO_TASKS_FOUND\",\n] as const;\n\nexport const BUDGET_ERROR_CODES = [\"BUDGET_INSUFFICIENT\", \"TOKENIZER_UNAVAILABLE\"] as const;\n\nexport const EXECUTION_ERROR_CODES = [\n \"AGENT_NOT_AVAILABLE\",\n \"AGENT_EXECUTION_FAILED\",\n \"AGENT_TIMEOUT\",\n \"AGENT_OOM\",\n \"AGENT_TOKEN_LIMIT\",\n \"AGENT_RATE_LIMITED\",\n \"VALIDATION_LINT_FAILED\",\n \"VALIDATION_TEST_FAILED\",\n \"VALIDATION_DIFF_TOO_LARGE\",\n \"VALIDATION_FORBIDDEN_PATTERN\",\n] as const;\n\nexport const COMPLETION_ERROR_CODES = [\n \"PR_CREATION_FAILED\",\n \"PR_PUSH_REJECTED\",\n \"WEBHOOK_DELIVERY_FAILED\",\n] as const;\n\nexport const CONFIG_ERROR_CODES = [\"CONFIG_INVALID\", \"CONFIG_SECRET_MISSING\"] as const;\n\nexport const SYSTEM_ERROR_CODES = [\"NETWORK_ERROR\", \"DISK_SPACE_LOW\", \"GIT_LOCK_FAILED\"] as const;\n\nexport const OAC_ERROR_CODES = [\n ...REPO_ERROR_CODES,\n ...DISCOVERY_ERROR_CODES,\n ...BUDGET_ERROR_CODES,\n ...EXECUTION_ERROR_CODES,\n ...COMPLETION_ERROR_CODES,\n ...CONFIG_ERROR_CODES,\n ...SYSTEM_ERROR_CODES,\n] as const;\n\nexport type RepoErrorCode = (typeof REPO_ERROR_CODES)[number];\nexport type DiscoveryErrorCode = (typeof DISCOVERY_ERROR_CODES)[number];\nexport type BudgetErrorCode = (typeof BUDGET_ERROR_CODES)[number];\nexport type ExecutionErrorCode = (typeof EXECUTION_ERROR_CODES)[number];\nexport type CompletionErrorCode = (typeof COMPLETION_ERROR_CODES)[number];\nexport type ConfigErrorCode = (typeof CONFIG_ERROR_CODES)[number];\nexport type SystemErrorCode = (typeof SYSTEM_ERROR_CODES)[number];\nexport type OacErrorCode = (typeof OAC_ERROR_CODES)[number];\n\nexport interface OacErrorOptions {\n severity?: OacErrorSeverity;\n context?: Record<string, unknown>;\n cause?: unknown;\n}\n\nexport class OacError extends Error {\n public readonly code: OacErrorCode;\n public readonly severity: OacErrorSeverity;\n public readonly context?: Record<string, unknown>;\n public override readonly cause?: unknown;\n\n public constructor(\n message: string,\n code: OacErrorCode,\n severity: OacErrorSeverity,\n context?: Record<string, unknown>,\n cause?: unknown,\n ) {\n super(message);\n this.name = \"OacError\";\n this.code = code;\n this.severity = severity;\n this.context = context;\n this.cause = cause;\n }\n}\n\nfunction createError(\n code: OacErrorCode,\n message: string,\n defaultSeverity: OacErrorSeverity,\n options: OacErrorOptions = {},\n): OacError {\n return new OacError(\n message,\n code,\n options.severity ?? defaultSeverity,\n options.context,\n options.cause,\n );\n}\n\nexport function repoError(\n code: RepoErrorCode,\n message: string,\n options: OacErrorOptions = {},\n): OacError {\n return createError(code, message, \"fatal\", options);\n}\n\nexport function discoveryError(\n code: DiscoveryErrorCode,\n message: string,\n options: OacErrorOptions = {},\n): OacError {\n return createError(code, message, \"recoverable\", options);\n}\n\nexport function budgetError(\n code: BudgetErrorCode,\n message: string,\n options: OacErrorOptions = {},\n): OacError {\n return createError(code, message, \"recoverable\", options);\n}\n\nexport function executionError(\n code: ExecutionErrorCode,\n message: string,\n options: OacErrorOptions = {},\n): OacError {\n return createError(code, message, \"recoverable\", options);\n}\n\nexport function completionError(\n code: CompletionErrorCode,\n message: string,\n options: OacErrorOptions = {},\n): OacError {\n return createError(code, message, \"recoverable\", options);\n}\n\nexport function configError(\n code: ConfigErrorCode,\n message: string,\n options: OacErrorOptions = {},\n): OacError {\n return createError(code, message, \"fatal\", options);\n}\n","import { EventEmitter } from \"eventemitter3\";\n\nimport type { OacError } from \"./errors.js\";\nimport type { ExecutionResult, ResolvedRepo, RunSummary, Task, TokenEstimate } from \"./types.js\";\n\nexport interface OacEvents {\n \"repo:resolved\": { repo: ResolvedRepo };\n \"task:discovered\": { tasks: Task[] };\n \"task:selected\": { task: Task; reason: string };\n \"budget:estimated\": { task: Task; estimate: TokenEstimate };\n \"execution:started\": { jobId: string; task: Task; agent: string };\n \"execution:progress\": { jobId: string; tokensUsed: number; stage: string };\n \"execution:completed\": { jobId: string; result: ExecutionResult };\n \"execution:failed\": { jobId: string; error: OacError };\n \"pr:created\": { jobId: string; prUrl: string };\n \"pr:merged\": { jobId: string; prUrl: string };\n \"run:completed\": { summary: RunSummary };\n}\n\ntype OacEventArgs = {\n [K in keyof OacEvents]: [payload: OacEvents[K]];\n};\n\nexport type OacEventBus = EventEmitter<OacEventArgs>;\n\nexport function createEventBus(): OacEventBus {\n return new EventEmitter<OacEventArgs>();\n}\n","export type AgentProviderId = \"claude-code\" | \"codex-cli\" | \"opencode\" | (string & {});\n\n/**\n * Sentinel value representing an unlimited token budget.\n * Uses MAX_SAFE_INTEGER (passes Number.isFinite() checks in budget planner).\n */\nexport const UNLIMITED_BUDGET = Number.MAX_SAFE_INTEGER;\n\nexport interface ResolvedRepo {\n fullName: string;\n owner: string;\n name: string;\n localPath: string;\n worktreePath: string;\n meta: {\n defaultBranch: string;\n language?: string;\n languages: Record<string, number>;\n size: number;\n stars: number;\n openIssuesCount: number;\n topics: string[];\n license?: string;\n isArchived: boolean;\n isFork: boolean;\n permissions: {\n admin: boolean;\n maintain: boolean;\n push: boolean;\n triage: boolean;\n pull: boolean;\n };\n };\n git: {\n headSha: string;\n remoteUrl: string;\n isShallowClone: boolean;\n };\n}\n\nexport type TaskSource = \"lint\" | \"todo\" | \"test-gap\" | \"dead-code\" | \"github-issue\" | \"custom\";\n\nexport type TaskComplexity = \"trivial\" | \"simple\" | \"moderate\" | \"complex\";\n\nexport type ExecutionMode = \"new-pr\" | \"update-pr\" | \"direct-commit\";\n\nexport interface Task {\n id: string;\n source: TaskSource;\n title: string;\n description: string;\n targetFiles: string[];\n priority: number;\n complexity: TaskComplexity;\n executionMode: ExecutionMode;\n linkedIssue?: {\n number: number;\n url: string;\n labels: string[];\n };\n metadata: Record<string, unknown>;\n discoveredAt: string;\n}\n\nexport interface TokenEstimate {\n taskId: string;\n providerId: AgentProviderId;\n contextTokens: number;\n promptTokens: number;\n expectedOutputTokens: number;\n totalEstimatedTokens: number;\n confidence: number;\n feasible: boolean;\n estimatedCostUsd?: number;\n}\n\nexport interface ExecutionPlan {\n totalBudget: number;\n selectedTasks: Array<{\n task: Task;\n estimate: TokenEstimate;\n cumulativeBudgetUsed: number;\n }>;\n deferredTasks: Array<{\n task: Task;\n estimate: TokenEstimate;\n reason: \"budget_exceeded\" | \"low_confidence\" | \"too_complex\";\n }>;\n reserveTokens: number;\n remainingTokens: number;\n}\n\nexport interface ContributionTask {\n taskId: string;\n title: string;\n source: TaskSource;\n complexity: TaskComplexity;\n status: \"success\" | \"partial\" | \"failed\";\n tokensUsed: number;\n duration: number;\n filesChanged: string[];\n pr?: {\n number: number;\n url: string;\n status: \"open\" | \"merged\" | \"closed\";\n };\n linkedIssue?: {\n number: number;\n url: string;\n };\n error?: string;\n}\n\nexport interface ContributionLog {\n version: \"1.0\";\n runId: string;\n timestamp: string;\n contributor: {\n githubUsername: string;\n email?: string;\n };\n repo: {\n fullName: string;\n headSha: string;\n defaultBranch: string;\n };\n budget: {\n provider: AgentProviderId;\n totalTokensBudgeted: number;\n totalTokensUsed: number;\n estimatedCostUsd?: number;\n };\n tasks: ContributionTask[];\n metrics: {\n tasksDiscovered: number;\n tasksAttempted: number;\n tasksSucceeded: number;\n tasksFailed: number;\n totalDuration: number;\n totalFilesChanged: number;\n totalLinesAdded: number;\n totalLinesRemoved: number;\n };\n}\n\nexport interface ExecutionResult {\n success: boolean;\n exitCode: number;\n totalTokensUsed: number;\n filesChanged: string[];\n duration: number;\n error?: string;\n}\n\nexport interface RunSummary {\n runId: string;\n repo: string;\n provider: AgentProviderId;\n startedAt: string;\n completedAt: string;\n duration: number;\n budget: {\n totalTokens: number;\n reserveTokens: number;\n usedTokens: number;\n remainingTokens: number;\n estimatedCostUsd?: number;\n };\n tasks: {\n discovered: number;\n selected: number;\n attempted: number;\n succeeded: number;\n failed: number;\n deferred: number;\n };\n pullRequests: {\n created: number;\n merged: number;\n urls: string[];\n };\n}\n"],"mappings":"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","names":[]} | ||
| {"version":3,"sources":["../src/config.ts","../src/errors.ts","../src/event-bus.ts","../src/types.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { configError } from \"./errors.js\";\n\nconst ENV_VAR_PATTERN = /\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g;\n\nconst DEFAULT_DISCOVERY_EXCLUDE = [\n \"node_modules\",\n \"dist\",\n \"build\",\n \".git\",\n \"*.min.js\",\n \"vendor/\",\n] as const;\n\nexport const RepoTargetSchema = z.union([\n z.string().min(1),\n z\n .object({\n name: z.string().min(1),\n branch: z.string().min(1).optional(),\n })\n .strict(),\n]);\n\nexport const ProviderSchema = z\n .object({\n id: z.string().min(1).default(\"claude-code\"),\n options: z.record(z.string(), z.unknown()).default({}),\n })\n .strict()\n .default({});\n\nexport const BudgetSchema = z\n .object({\n totalTokens: z.number().int().positive().default(100_000),\n reservePercent: z.number().min(0).max(1).default(0.1),\n estimationPadding: z.number().positive().default(1.2),\n })\n .strict()\n .default({});\n\nexport const DiscoveryScannersSchema = z\n .object({\n lint: z.boolean().default(true),\n todo: z.boolean().default(true),\n testGap: z.boolean().default(true),\n deadCode: z.boolean().default(false),\n githubIssues: z.boolean().default(true),\n })\n .strict()\n .default({});\n\nexport const DiscoverySchema = z\n .object({\n scanners: DiscoveryScannersSchema,\n issueLabels: z.array(z.string().min(1)).default([\"good-first-issue\", \"help-wanted\", \"bug\"]),\n minPriority: z.number().int().min(0).max(100).default(20),\n maxTasks: z.number().int().positive().default(50),\n customScanners: z.array(z.string().min(1)).default([]),\n exclude: z.array(z.string().min(1)).default([...DEFAULT_DISCOVERY_EXCLUDE]),\n })\n .strict()\n .default({});\n\nexport const ValidationSchema = z\n .object({\n lint: z.boolean().default(true),\n test: z.boolean().default(true),\n typeCheck: z.boolean().default(true),\n maxDiffLines: z.number().int().positive().default(500),\n })\n .strict()\n .default({});\n\nexport const PrSchema = z\n .object({\n draft: z.boolean().default(false),\n labels: z.array(z.string().min(1)).default([\"oac-contribution\"]),\n reviewers: z.array(z.string().min(1)).default([]),\n assignees: z.array(z.string().min(1)).default([]),\n })\n .strict()\n .default({});\n\nexport const ExecutionSchema = z\n .object({\n concurrency: z.number().int().positive().default(2),\n taskTimeout: z.number().int().positive().default(300),\n maxRetries: z.number().int().min(0).default(2),\n mode: z.enum([\"new-pr\", \"update-pr\", \"direct-commit\"]).default(\"new-pr\"),\n branchPattern: z.string().min(1).default(\"oac/{date}/{task}\"),\n validation: ValidationSchema,\n pr: PrSchema,\n })\n .strict()\n .default({});\n\nexport const LinearIntegrationSchema = z\n .object({\n enabled: z.boolean().default(false),\n apiKey: z.string().min(1).optional(),\n teamId: z.string().min(1).optional(),\n })\n .strict()\n .default({})\n .superRefine((value, ctx) => {\n if (value.enabled && !value.apiKey) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"apiKey\"],\n message: \"Linear integration is enabled but apiKey is missing\",\n });\n }\n if (value.enabled && !value.teamId) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"teamId\"],\n message: \"Linear integration is enabled but teamId is missing\",\n });\n }\n });\n\nexport const JiraIntegrationSchema = z\n .object({\n enabled: z.boolean().default(false),\n baseUrl: z.string().url().optional(),\n email: z.string().min(1).optional(),\n apiToken: z.string().min(1).optional(),\n projectKey: z.string().min(1).optional(),\n })\n .strict()\n .default({})\n .superRefine((value, ctx) => {\n if (!value.enabled) {\n return;\n }\n\n if (!value.baseUrl) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"baseUrl\"],\n message: \"Jira integration is enabled but baseUrl is missing\",\n });\n }\n if (!value.email) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"email\"],\n message: \"Jira integration is enabled but email is missing\",\n });\n }\n if (!value.apiToken) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"apiToken\"],\n message: \"Jira integration is enabled but apiToken is missing\",\n });\n }\n if (!value.projectKey) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"projectKey\"],\n message: \"Jira integration is enabled but projectKey is missing\",\n });\n }\n });\n\nexport const CompletionSchema = z\n .object({\n integrations: z\n .object({\n linear: LinearIntegrationSchema,\n jira: JiraIntegrationSchema,\n })\n .strict()\n .default({}),\n monitor: z\n .object({\n enabled: z.boolean().default(false),\n pollInterval: z.number().int().positive().default(300),\n autoRespondToReviews: z.boolean().default(false),\n autoDeleteBranch: z.boolean().default(true),\n })\n .strict()\n .default({}),\n })\n .strict()\n .default({});\n\nexport const TrackingSchema = z\n .object({\n directory: z.string().min(1).default(\".oac\"),\n autoCommit: z.boolean().default(false),\n gitTracked: z.boolean().default(true),\n })\n .strict()\n .default({});\n\nexport const DashboardSchema = z\n .object({\n port: z.number().int().min(1).max(65535).default(3141),\n openBrowser: z.boolean().default(true),\n })\n .strict()\n .default({});\n\nexport const OacConfigSchema = z\n .object({\n repos: z.array(RepoTargetSchema).default([]),\n provider: ProviderSchema,\n budget: BudgetSchema,\n discovery: DiscoverySchema,\n execution: ExecutionSchema,\n completion: CompletionSchema,\n tracking: TrackingSchema,\n dashboard: DashboardSchema,\n })\n .strict();\n\nexport const OacConfig = OacConfigSchema;\nexport type OacConfig = z.output<typeof OacConfigSchema>;\nexport type OacConfigInput = z.input<typeof OacConfigSchema>;\n\nexport interface LoadConfigOptions {\n env?: Record<string, string | undefined>;\n}\n\nexport function defineConfig(config: OacConfigInput): OacConfigInput {\n return config;\n}\n\nexport function interpolateEnvVars(\n value: string,\n env: Record<string, string | undefined> = getProcessEnv(),\n path: string[] = [],\n): string {\n return value.replaceAll(ENV_VAR_PATTERN, (_, variableName: string) => {\n const interpolated = env[variableName];\n if (interpolated !== undefined) {\n return interpolated;\n }\n\n throw configError(\n \"CONFIG_SECRET_MISSING\",\n `Environment variable ${variableName} is referenced in config but not set`,\n {\n context: {\n variableName,\n path: path.length > 0 ? path.join(\".\") : \"<root>\",\n },\n },\n );\n });\n}\n\nexport function loadConfig(config: unknown = {}, options: LoadConfigOptions = {}): OacConfig {\n const env = options.env ?? getProcessEnv();\n const interpolatedConfig = interpolateConfigEnvVars(config, env);\n const parsed = OacConfigSchema.safeParse(interpolatedConfig);\n\n if (parsed.success) {\n return parsed.data;\n }\n\n throw configError(\"CONFIG_INVALID\", \"Invalid OAC configuration\", {\n context: {\n issues: parsed.error.issues.map((issue) => ({\n code: issue.code,\n message: issue.message,\n path: issue.path.join(\".\"),\n })),\n },\n });\n}\n\nfunction interpolateConfigEnvVars(\n value: unknown,\n env: Record<string, string | undefined>,\n path: string[] = [],\n): unknown {\n if (typeof value === \"string\") {\n return interpolateEnvVars(value, env, path);\n }\n\n if (Array.isArray(value)) {\n return value.map((item, index) => interpolateConfigEnvVars(item, env, [...path, `${index}`]));\n }\n\n if (!isPlainObject(value)) {\n return value;\n }\n\n const interpolatedObject: Record<string, unknown> = {};\n\n for (const [key, nestedValue] of Object.entries(value)) {\n interpolatedObject[key] = interpolateConfigEnvVars(nestedValue, env, [...path, key]);\n }\n\n return interpolatedObject;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction getProcessEnv(): Record<string, string | undefined> {\n const globalProcess = globalThis as {\n process?: { env?: Record<string, string | undefined> };\n };\n return globalProcess.process?.env ?? {};\n}\n","export type OacErrorSeverity = \"fatal\" | \"recoverable\" | \"warning\";\n\nexport const REPO_ERROR_CODES = [\n \"REPO_NOT_FOUND\",\n \"REPO_ARCHIVED\",\n \"REPO_NO_PERMISSION\",\n \"REPO_CLONE_FAILED\",\n] as const;\n\nexport const DISCOVERY_ERROR_CODES = [\n \"SCANNER_FAILED\",\n \"SCANNER_TIMEOUT\",\n \"NO_TASKS_FOUND\",\n] as const;\n\nexport const BUDGET_ERROR_CODES = [\"BUDGET_INSUFFICIENT\", \"TOKENIZER_UNAVAILABLE\"] as const;\n\nexport const EXECUTION_ERROR_CODES = [\n \"AGENT_NOT_AVAILABLE\",\n \"AGENT_EXECUTION_FAILED\",\n \"AGENT_TIMEOUT\",\n \"AGENT_OOM\",\n \"AGENT_TOKEN_LIMIT\",\n \"AGENT_RATE_LIMITED\",\n \"VALIDATION_LINT_FAILED\",\n \"VALIDATION_TEST_FAILED\",\n \"VALIDATION_DIFF_TOO_LARGE\",\n \"VALIDATION_FORBIDDEN_PATTERN\",\n] as const;\n\nexport const COMPLETION_ERROR_CODES = [\n \"PR_CREATION_FAILED\",\n \"PR_PUSH_REJECTED\",\n \"WEBHOOK_DELIVERY_FAILED\",\n] as const;\n\nexport const CONFIG_ERROR_CODES = [\"CONFIG_INVALID\", \"CONFIG_SECRET_MISSING\"] as const;\n\nexport const SYSTEM_ERROR_CODES = [\"NETWORK_ERROR\", \"DISK_SPACE_LOW\", \"GIT_LOCK_FAILED\"] as const;\n\nexport const OAC_ERROR_CODES = [\n ...REPO_ERROR_CODES,\n ...DISCOVERY_ERROR_CODES,\n ...BUDGET_ERROR_CODES,\n ...EXECUTION_ERROR_CODES,\n ...COMPLETION_ERROR_CODES,\n ...CONFIG_ERROR_CODES,\n ...SYSTEM_ERROR_CODES,\n] as const;\n\nexport type RepoErrorCode = (typeof REPO_ERROR_CODES)[number];\nexport type DiscoveryErrorCode = (typeof DISCOVERY_ERROR_CODES)[number];\nexport type BudgetErrorCode = (typeof BUDGET_ERROR_CODES)[number];\nexport type ExecutionErrorCode = (typeof EXECUTION_ERROR_CODES)[number];\nexport type CompletionErrorCode = (typeof COMPLETION_ERROR_CODES)[number];\nexport type ConfigErrorCode = (typeof CONFIG_ERROR_CODES)[number];\nexport type SystemErrorCode = (typeof SYSTEM_ERROR_CODES)[number];\nexport type OacErrorCode = (typeof OAC_ERROR_CODES)[number];\n\nexport interface OacErrorOptions {\n severity?: OacErrorSeverity;\n context?: Record<string, unknown>;\n cause?: unknown;\n}\n\nexport class OacError extends Error {\n public readonly code: OacErrorCode;\n public readonly severity: OacErrorSeverity;\n public readonly context?: Record<string, unknown>;\n public override readonly cause?: unknown;\n\n public constructor(\n message: string,\n code: OacErrorCode,\n severity: OacErrorSeverity,\n context?: Record<string, unknown>,\n cause?: unknown,\n ) {\n super(message);\n this.name = \"OacError\";\n this.code = code;\n this.severity = severity;\n this.context = context;\n this.cause = cause;\n }\n}\n\nfunction createError(\n code: OacErrorCode,\n message: string,\n defaultSeverity: OacErrorSeverity,\n options: OacErrorOptions = {},\n): OacError {\n return new OacError(\n message,\n code,\n options.severity ?? defaultSeverity,\n options.context,\n options.cause,\n );\n}\n\nexport function repoError(\n code: RepoErrorCode,\n message: string,\n options: OacErrorOptions = {},\n): OacError {\n return createError(code, message, \"fatal\", options);\n}\n\nexport function discoveryError(\n code: DiscoveryErrorCode,\n message: string,\n options: OacErrorOptions = {},\n): OacError {\n return createError(code, message, \"recoverable\", options);\n}\n\nexport function budgetError(\n code: BudgetErrorCode,\n message: string,\n options: OacErrorOptions = {},\n): OacError {\n return createError(code, message, \"recoverable\", options);\n}\n\nexport function executionError(\n code: ExecutionErrorCode,\n message: string,\n options: OacErrorOptions = {},\n): OacError {\n return createError(code, message, \"recoverable\", options);\n}\n\nexport function completionError(\n code: CompletionErrorCode,\n message: string,\n options: OacErrorOptions = {},\n): OacError {\n return createError(code, message, \"recoverable\", options);\n}\n\nexport function configError(\n code: ConfigErrorCode,\n message: string,\n options: OacErrorOptions = {},\n): OacError {\n return createError(code, message, \"fatal\", options);\n}\n","import { EventEmitter } from \"eventemitter3\";\n\nimport type { OacError } from \"./errors.js\";\nimport type { ExecutionResult, ResolvedRepo, RunSummary, Task, TokenEstimate } from \"./types.js\";\n\nexport interface OacEvents {\n \"repo:resolved\": { repo: ResolvedRepo };\n \"task:discovered\": { tasks: Task[] };\n \"task:selected\": { task: Task; reason: string };\n \"budget:estimated\": { task: Task; estimate: TokenEstimate };\n \"execution:started\": { jobId: string; task: Task; agent: string };\n \"execution:progress\": { jobId: string; tokensUsed: number; stage: string };\n \"execution:completed\": { jobId: string; result: ExecutionResult };\n \"execution:failed\": { jobId: string; error: OacError };\n \"pr:created\": { jobId: string; prUrl: string };\n \"pr:merged\": { jobId: string; prUrl: string };\n \"run:completed\": { summary: RunSummary };\n}\n\ntype OacEventArgs = {\n [K in keyof OacEvents]: [payload: OacEvents[K]];\n};\n\nexport type OacEventBus = EventEmitter<OacEventArgs>;\n\nexport function createEventBus(): OacEventBus {\n return new EventEmitter<OacEventArgs>();\n}\n","export type AgentProviderId = \"claude-code\" | \"codex\" | \"opencode\" | (string & {});\n\n/**\n * Sentinel value representing an unlimited token budget.\n * Uses MAX_SAFE_INTEGER (passes Number.isFinite() checks in budget planner).\n */\nexport const UNLIMITED_BUDGET = Number.MAX_SAFE_INTEGER;\n\nexport interface ResolvedRepo {\n fullName: string;\n owner: string;\n name: string;\n localPath: string;\n worktreePath: string;\n meta: {\n defaultBranch: string;\n language?: string;\n languages: Record<string, number>;\n size: number;\n stars: number;\n openIssuesCount: number;\n topics: string[];\n license?: string;\n isArchived: boolean;\n isFork: boolean;\n permissions: {\n admin: boolean;\n maintain: boolean;\n push: boolean;\n triage: boolean;\n pull: boolean;\n };\n };\n git: {\n headSha: string;\n remoteUrl: string;\n isShallowClone: boolean;\n };\n}\n\nexport type TaskSource = \"lint\" | \"todo\" | \"test-gap\" | \"dead-code\" | \"github-issue\" | \"custom\";\n\nexport type TaskComplexity = \"trivial\" | \"simple\" | \"moderate\" | \"complex\";\n\nexport type ExecutionMode = \"new-pr\" | \"update-pr\" | \"direct-commit\";\n\nexport interface Task {\n id: string;\n source: TaskSource;\n title: string;\n description: string;\n targetFiles: string[];\n priority: number;\n complexity: TaskComplexity;\n executionMode: ExecutionMode;\n linkedIssue?: {\n number: number;\n url: string;\n labels: string[];\n };\n metadata: Record<string, unknown>;\n discoveredAt: string;\n}\n\nexport interface TokenEstimate {\n taskId: string;\n providerId: AgentProviderId;\n contextTokens: number;\n promptTokens: number;\n expectedOutputTokens: number;\n totalEstimatedTokens: number;\n confidence: number;\n feasible: boolean;\n estimatedCostUsd?: number;\n}\n\nexport interface ExecutionPlan {\n totalBudget: number;\n selectedTasks: Array<{\n task: Task;\n estimate: TokenEstimate;\n cumulativeBudgetUsed: number;\n }>;\n deferredTasks: Array<{\n task: Task;\n estimate: TokenEstimate;\n reason: \"budget_exceeded\" | \"low_confidence\" | \"too_complex\";\n }>;\n reserveTokens: number;\n remainingTokens: number;\n}\n\nexport interface ContributionTask {\n taskId: string;\n title: string;\n source: TaskSource;\n complexity: TaskComplexity;\n status: \"success\" | \"partial\" | \"failed\";\n tokensUsed: number;\n duration: number;\n filesChanged: string[];\n pr?: {\n number: number;\n url: string;\n status: \"open\" | \"merged\" | \"closed\";\n };\n linkedIssue?: {\n number: number;\n url: string;\n };\n error?: string;\n}\n\nexport interface ContributionLog {\n version: \"1.0\";\n runId: string;\n timestamp: string;\n contributor: {\n githubUsername: string;\n email?: string;\n };\n repo: {\n fullName: string;\n headSha: string;\n defaultBranch: string;\n };\n budget: {\n provider: AgentProviderId;\n totalTokensBudgeted: number;\n totalTokensUsed: number;\n estimatedCostUsd?: number;\n };\n tasks: ContributionTask[];\n metrics: {\n tasksDiscovered: number;\n tasksAttempted: number;\n tasksSucceeded: number;\n tasksFailed: number;\n totalDuration: number;\n totalFilesChanged: number;\n totalLinesAdded: number;\n totalLinesRemoved: number;\n };\n}\n\nexport interface ExecutionResult {\n success: boolean;\n exitCode: number;\n totalTokensUsed: number;\n filesChanged: string[];\n duration: number;\n error?: string;\n}\n\nexport interface RunSummary {\n runId: string;\n repo: string;\n provider: AgentProviderId;\n startedAt: string;\n completedAt: string;\n duration: number;\n budget: {\n totalTokens: number;\n reserveTokens: number;\n usedTokens: number;\n remainingTokens: number;\n estimatedCostUsd?: number;\n };\n tasks: {\n discovered: number;\n selected: number;\n attempted: number;\n succeeded: number;\n failed: number;\n deferred: number;\n };\n pullRequests: {\n created: number;\n merged: number;\n urls: string[];\n };\n}\n"],"mappings":"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","names":[]} |
+1
-1
| { | ||
| "name": "@open330/oac-core", | ||
| "version": "2026.3.2", | ||
| "version": "2026.3.3", | ||
| "description": "Core types, config schema, and event bus for Open Agent Contribution", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
96731
-0.01%