@open330/oac-core 2026.2.17

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.
package/dist/index.js ADDED
@@ -0,0 +1,347 @@
1
+ // src/config.ts
2
+ import { z } from "zod";
3
+
4
+ // src/errors.ts
5
+ var REPO_ERROR_CODES = [
6
+ "REPO_NOT_FOUND",
7
+ "REPO_ARCHIVED",
8
+ "REPO_NO_PERMISSION",
9
+ "REPO_CLONE_FAILED"
10
+ ];
11
+ var DISCOVERY_ERROR_CODES = [
12
+ "SCANNER_FAILED",
13
+ "SCANNER_TIMEOUT",
14
+ "NO_TASKS_FOUND"
15
+ ];
16
+ var BUDGET_ERROR_CODES = ["BUDGET_INSUFFICIENT", "TOKENIZER_UNAVAILABLE"];
17
+ var EXECUTION_ERROR_CODES = [
18
+ "AGENT_NOT_AVAILABLE",
19
+ "AGENT_EXECUTION_FAILED",
20
+ "AGENT_TIMEOUT",
21
+ "AGENT_OOM",
22
+ "AGENT_TOKEN_LIMIT",
23
+ "AGENT_RATE_LIMITED",
24
+ "VALIDATION_LINT_FAILED",
25
+ "VALIDATION_TEST_FAILED",
26
+ "VALIDATION_DIFF_TOO_LARGE",
27
+ "VALIDATION_FORBIDDEN_PATTERN"
28
+ ];
29
+ var COMPLETION_ERROR_CODES = [
30
+ "PR_CREATION_FAILED",
31
+ "PR_PUSH_REJECTED",
32
+ "WEBHOOK_DELIVERY_FAILED"
33
+ ];
34
+ var CONFIG_ERROR_CODES = ["CONFIG_INVALID", "CONFIG_SECRET_MISSING"];
35
+ var SYSTEM_ERROR_CODES = ["NETWORK_ERROR", "DISK_SPACE_LOW", "GIT_LOCK_FAILED"];
36
+ var OAC_ERROR_CODES = [
37
+ ...REPO_ERROR_CODES,
38
+ ...DISCOVERY_ERROR_CODES,
39
+ ...BUDGET_ERROR_CODES,
40
+ ...EXECUTION_ERROR_CODES,
41
+ ...COMPLETION_ERROR_CODES,
42
+ ...CONFIG_ERROR_CODES,
43
+ ...SYSTEM_ERROR_CODES
44
+ ];
45
+ var OacError = class extends Error {
46
+ code;
47
+ severity;
48
+ context;
49
+ cause;
50
+ constructor(message, code, severity, context, cause) {
51
+ super(message);
52
+ this.name = "OacError";
53
+ this.code = code;
54
+ this.severity = severity;
55
+ this.context = context;
56
+ this.cause = cause;
57
+ }
58
+ };
59
+ function createError(code, message, defaultSeverity, options = {}) {
60
+ return new OacError(
61
+ message,
62
+ code,
63
+ options.severity ?? defaultSeverity,
64
+ options.context,
65
+ options.cause
66
+ );
67
+ }
68
+ function repoError(code, message, options = {}) {
69
+ return createError(code, message, "fatal", options);
70
+ }
71
+ function discoveryError(code, message, options = {}) {
72
+ return createError(code, message, "recoverable", options);
73
+ }
74
+ function budgetError(code, message, options = {}) {
75
+ return createError(code, message, "recoverable", options);
76
+ }
77
+ function executionError(code, message, options = {}) {
78
+ return createError(code, message, "recoverable", options);
79
+ }
80
+ function completionError(code, message, options = {}) {
81
+ return createError(code, message, "recoverable", options);
82
+ }
83
+ function configError(code, message, options = {}) {
84
+ return createError(code, message, "fatal", options);
85
+ }
86
+
87
+ // src/config.ts
88
+ var ENV_VAR_PATTERN = /\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g;
89
+ var DEFAULT_DISCOVERY_EXCLUDE = [
90
+ "node_modules",
91
+ "dist",
92
+ "build",
93
+ ".git",
94
+ "*.min.js",
95
+ "vendor/"
96
+ ];
97
+ var RepoTargetSchema = z.union([
98
+ z.string().min(1),
99
+ z.object({
100
+ name: z.string().min(1),
101
+ branch: z.string().min(1).optional()
102
+ }).strict()
103
+ ]);
104
+ var ProviderSchema = z.object({
105
+ id: z.string().min(1).default("claude-code"),
106
+ options: z.record(z.string(), z.unknown()).default({})
107
+ }).strict().default({});
108
+ var BudgetSchema = z.object({
109
+ totalTokens: z.number().int().positive().default(1e5),
110
+ reservePercent: z.number().min(0).max(1).default(0.1),
111
+ estimationPadding: z.number().positive().default(1.2)
112
+ }).strict().default({});
113
+ var DiscoveryScannersSchema = z.object({
114
+ lint: z.boolean().default(true),
115
+ todo: z.boolean().default(true),
116
+ testGap: z.boolean().default(true),
117
+ deadCode: z.boolean().default(false),
118
+ githubIssues: z.boolean().default(true)
119
+ }).strict().default({});
120
+ var DiscoverySchema = z.object({
121
+ scanners: DiscoveryScannersSchema,
122
+ issueLabels: z.array(z.string().min(1)).default(["good-first-issue", "help-wanted", "bug"]),
123
+ minPriority: z.number().int().min(0).max(100).default(20),
124
+ maxTasks: z.number().int().positive().default(50),
125
+ customScanners: z.array(z.string().min(1)).default([]),
126
+ exclude: z.array(z.string().min(1)).default([...DEFAULT_DISCOVERY_EXCLUDE])
127
+ }).strict().default({});
128
+ var ValidationSchema = z.object({
129
+ lint: z.boolean().default(true),
130
+ test: z.boolean().default(true),
131
+ typeCheck: z.boolean().default(true),
132
+ maxDiffLines: z.number().int().positive().default(500)
133
+ }).strict().default({});
134
+ var PrSchema = z.object({
135
+ draft: z.boolean().default(false),
136
+ labels: z.array(z.string().min(1)).default(["oac-contribution"]),
137
+ reviewers: z.array(z.string().min(1)).default([]),
138
+ assignees: z.array(z.string().min(1)).default([])
139
+ }).strict().default({});
140
+ var ExecutionSchema = z.object({
141
+ concurrency: z.number().int().positive().default(2),
142
+ taskTimeout: z.number().int().positive().default(300),
143
+ maxRetries: z.number().int().min(0).default(2),
144
+ mode: z.enum(["new-pr", "update-pr", "direct-commit"]).default("new-pr"),
145
+ branchPattern: z.string().min(1).default("oac/{date}/{task}"),
146
+ validation: ValidationSchema,
147
+ pr: PrSchema
148
+ }).strict().default({});
149
+ var LinearIntegrationSchema = z.object({
150
+ enabled: z.boolean().default(false),
151
+ apiKey: z.string().min(1).optional(),
152
+ teamId: z.string().min(1).optional()
153
+ }).strict().default({}).superRefine((value, ctx) => {
154
+ if (value.enabled && !value.apiKey) {
155
+ ctx.addIssue({
156
+ code: z.ZodIssueCode.custom,
157
+ path: ["apiKey"],
158
+ message: "Linear integration is enabled but apiKey is missing"
159
+ });
160
+ }
161
+ if (value.enabled && !value.teamId) {
162
+ ctx.addIssue({
163
+ code: z.ZodIssueCode.custom,
164
+ path: ["teamId"],
165
+ message: "Linear integration is enabled but teamId is missing"
166
+ });
167
+ }
168
+ });
169
+ var JiraIntegrationSchema = z.object({
170
+ enabled: z.boolean().default(false),
171
+ baseUrl: z.string().url().optional(),
172
+ email: z.string().min(1).optional(),
173
+ apiToken: z.string().min(1).optional(),
174
+ projectKey: z.string().min(1).optional()
175
+ }).strict().default({}).superRefine((value, ctx) => {
176
+ if (!value.enabled) {
177
+ return;
178
+ }
179
+ if (!value.baseUrl) {
180
+ ctx.addIssue({
181
+ code: z.ZodIssueCode.custom,
182
+ path: ["baseUrl"],
183
+ message: "Jira integration is enabled but baseUrl is missing"
184
+ });
185
+ }
186
+ if (!value.email) {
187
+ ctx.addIssue({
188
+ code: z.ZodIssueCode.custom,
189
+ path: ["email"],
190
+ message: "Jira integration is enabled but email is missing"
191
+ });
192
+ }
193
+ if (!value.apiToken) {
194
+ ctx.addIssue({
195
+ code: z.ZodIssueCode.custom,
196
+ path: ["apiToken"],
197
+ message: "Jira integration is enabled but apiToken is missing"
198
+ });
199
+ }
200
+ if (!value.projectKey) {
201
+ ctx.addIssue({
202
+ code: z.ZodIssueCode.custom,
203
+ path: ["projectKey"],
204
+ message: "Jira integration is enabled but projectKey is missing"
205
+ });
206
+ }
207
+ });
208
+ var CompletionSchema = z.object({
209
+ integrations: z.object({
210
+ linear: LinearIntegrationSchema,
211
+ jira: JiraIntegrationSchema
212
+ }).strict().default({}),
213
+ monitor: z.object({
214
+ enabled: z.boolean().default(false),
215
+ pollInterval: z.number().int().positive().default(300),
216
+ autoRespondToReviews: z.boolean().default(false),
217
+ autoDeleteBranch: z.boolean().default(true)
218
+ }).strict().default({})
219
+ }).strict().default({});
220
+ var TrackingSchema = z.object({
221
+ directory: z.string().min(1).default(".oac"),
222
+ autoCommit: z.boolean().default(false),
223
+ gitTracked: z.boolean().default(true)
224
+ }).strict().default({});
225
+ var DashboardSchema = z.object({
226
+ port: z.number().int().min(1).max(65535).default(3141),
227
+ openBrowser: z.boolean().default(true)
228
+ }).strict().default({});
229
+ var OacConfigSchema = z.object({
230
+ repos: z.array(RepoTargetSchema).default([]),
231
+ provider: ProviderSchema,
232
+ budget: BudgetSchema,
233
+ discovery: DiscoverySchema,
234
+ execution: ExecutionSchema,
235
+ completion: CompletionSchema,
236
+ tracking: TrackingSchema,
237
+ dashboard: DashboardSchema
238
+ }).strict();
239
+ var OacConfig = OacConfigSchema;
240
+ function defineConfig(config) {
241
+ return config;
242
+ }
243
+ function interpolateEnvVars(value, env = getProcessEnv(), path = []) {
244
+ return value.replaceAll(ENV_VAR_PATTERN, (_, variableName) => {
245
+ const interpolated = env[variableName];
246
+ if (interpolated !== void 0) {
247
+ return interpolated;
248
+ }
249
+ throw configError(
250
+ "CONFIG_SECRET_MISSING",
251
+ `Environment variable ${variableName} is referenced in config but not set`,
252
+ {
253
+ context: {
254
+ variableName,
255
+ path: path.length > 0 ? path.join(".") : "<root>"
256
+ }
257
+ }
258
+ );
259
+ });
260
+ }
261
+ function loadConfig(config = {}, options = {}) {
262
+ const env = options.env ?? getProcessEnv();
263
+ const interpolatedConfig = interpolateConfigEnvVars(config, env);
264
+ const parsed = OacConfigSchema.safeParse(interpolatedConfig);
265
+ if (parsed.success) {
266
+ return parsed.data;
267
+ }
268
+ throw configError("CONFIG_INVALID", "Invalid OAC configuration", {
269
+ context: {
270
+ issues: parsed.error.issues.map((issue) => ({
271
+ code: issue.code,
272
+ message: issue.message,
273
+ path: issue.path.join(".")
274
+ }))
275
+ }
276
+ });
277
+ }
278
+ function interpolateConfigEnvVars(value, env, path = []) {
279
+ if (typeof value === "string") {
280
+ return interpolateEnvVars(value, env, path);
281
+ }
282
+ if (Array.isArray(value)) {
283
+ return value.map((item, index) => interpolateConfigEnvVars(item, env, [...path, `${index}`]));
284
+ }
285
+ if (!isPlainObject(value)) {
286
+ return value;
287
+ }
288
+ const interpolatedObject = {};
289
+ for (const [key, nestedValue] of Object.entries(value)) {
290
+ interpolatedObject[key] = interpolateConfigEnvVars(nestedValue, env, [...path, key]);
291
+ }
292
+ return interpolatedObject;
293
+ }
294
+ function isPlainObject(value) {
295
+ return typeof value === "object" && value !== null && !Array.isArray(value);
296
+ }
297
+ function getProcessEnv() {
298
+ const globalProcess = globalThis;
299
+ return globalProcess.process?.env ?? {};
300
+ }
301
+
302
+ // src/event-bus.ts
303
+ import { EventEmitter } from "eventemitter3";
304
+ function createEventBus() {
305
+ return new EventEmitter();
306
+ }
307
+
308
+ // src/types.ts
309
+ var UNLIMITED_BUDGET = Number.MAX_SAFE_INTEGER;
310
+ export {
311
+ BUDGET_ERROR_CODES,
312
+ BudgetSchema,
313
+ COMPLETION_ERROR_CODES,
314
+ CONFIG_ERROR_CODES,
315
+ CompletionSchema,
316
+ DISCOVERY_ERROR_CODES,
317
+ DashboardSchema,
318
+ DiscoveryScannersSchema,
319
+ DiscoverySchema,
320
+ EXECUTION_ERROR_CODES,
321
+ ExecutionSchema,
322
+ JiraIntegrationSchema,
323
+ LinearIntegrationSchema,
324
+ OAC_ERROR_CODES,
325
+ OacConfig,
326
+ OacConfigSchema,
327
+ OacError,
328
+ PrSchema,
329
+ ProviderSchema,
330
+ REPO_ERROR_CODES,
331
+ RepoTargetSchema,
332
+ SYSTEM_ERROR_CODES,
333
+ TrackingSchema,
334
+ UNLIMITED_BUDGET,
335
+ ValidationSchema,
336
+ budgetError,
337
+ completionError,
338
+ configError,
339
+ createEventBus,
340
+ defineConfig,
341
+ discoveryError,
342
+ executionError,
343
+ interpolateEnvVars,
344
+ loadConfig,
345
+ repoError
346
+ };
347
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
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":[]}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@open330/oac-core",
3
+ "version": "2026.2.17",
4
+ "description": "Core types, config schema, and event bus for Open Agent Contribution",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/Open330/open-agent-contribution.git",
9
+ "directory": "packages/core"
10
+ },
11
+ "type": "module",
12
+ "main": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "import": "./dist/index.js",
17
+ "types": "./dist/index.d.ts"
18
+ }
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "engines": {
27
+ "node": ">=22.0.0"
28
+ },
29
+ "dependencies": {
30
+ "eventemitter3": "^5.0.1",
31
+ "zod": "^3.24.2"
32
+ },
33
+ "devDependencies": {
34
+ "tsup": "^8.3.6",
35
+ "typescript": "^5.7.3"
36
+ },
37
+ "scripts": {
38
+ "build": "tsup src/index.ts --format esm --dts",
39
+ "test": "vitest run",
40
+ "typecheck": "tsc --noEmit"
41
+ }
42
+ }