infinicode 1.0.0 → 2.1.0

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.
Files changed (159) hide show
  1. package/.opencode/plugins/home-logo-animation.tsx +120 -0
  2. package/.opencode/plugins/routing-mode-display.tsx +135 -0
  3. package/.opencode/themes/infinibot-gold.json +222 -0
  4. package/.opencode/tui.json +8 -0
  5. package/README.md +564 -72
  6. package/dist/ascii-video-animation.d.ts +2 -0
  7. package/dist/ascii-video-animation.js +243 -0
  8. package/dist/cli.js +199 -50
  9. package/dist/commands/console.d.ts +6 -0
  10. package/dist/commands/console.js +111 -0
  11. package/dist/commands/kernel-setup.d.ts +3 -0
  12. package/dist/commands/kernel-setup.js +303 -0
  13. package/dist/commands/mcp.d.ts +14 -0
  14. package/dist/commands/mcp.js +100 -0
  15. package/dist/commands/mission.d.ts +16 -0
  16. package/dist/commands/mission.js +301 -0
  17. package/dist/commands/models.d.ts +3 -1
  18. package/dist/commands/models.js +111 -55
  19. package/dist/commands/providers.d.ts +6 -0
  20. package/dist/commands/providers.js +95 -0
  21. package/dist/commands/run.d.ts +2 -1
  22. package/dist/commands/run.js +349 -59
  23. package/dist/commands/serve.d.ts +20 -0
  24. package/dist/commands/serve.js +132 -0
  25. package/dist/commands/setup.d.ts +1 -1
  26. package/dist/commands/setup.js +77 -44
  27. package/dist/commands/status.d.ts +2 -1
  28. package/dist/commands/status.js +46 -30
  29. package/dist/commands/workers.d.ts +5 -0
  30. package/dist/commands/workers.js +103 -0
  31. package/dist/kernel/autonomy/goal-loop.d.ts +49 -0
  32. package/dist/kernel/autonomy/goal-loop.js +113 -0
  33. package/dist/kernel/autonomy/index.d.ts +8 -0
  34. package/dist/kernel/autonomy/index.js +7 -0
  35. package/dist/kernel/browser/browser-controller.d.ts +57 -0
  36. package/dist/kernel/browser/browser-controller.js +175 -0
  37. package/dist/kernel/checkpoint-engine.d.ts +17 -0
  38. package/dist/kernel/checkpoint-engine.js +128 -0
  39. package/dist/kernel/command-system.d.ts +37 -0
  40. package/dist/kernel/command-system.js +239 -0
  41. package/dist/kernel/config-schema.d.ts +57 -0
  42. package/dist/kernel/config-schema.js +36 -0
  43. package/dist/kernel/event-bus.d.ts +19 -0
  44. package/dist/kernel/event-bus.js +65 -0
  45. package/dist/kernel/federation/auto-update.d.ts +36 -0
  46. package/dist/kernel/federation/auto-update.js +57 -0
  47. package/dist/kernel/federation/compute-router.d.ts +27 -0
  48. package/dist/kernel/federation/compute-router.js +44 -0
  49. package/dist/kernel/federation/config-sync.d.ts +33 -0
  50. package/dist/kernel/federation/config-sync.js +37 -0
  51. package/dist/kernel/federation/discovery.d.ts +11 -0
  52. package/dist/kernel/federation/discovery.js +44 -0
  53. package/dist/kernel/federation/event-bridge.d.ts +30 -0
  54. package/dist/kernel/federation/event-bridge.js +61 -0
  55. package/dist/kernel/federation/federation-plugin.d.ts +24 -0
  56. package/dist/kernel/federation/federation-plugin.js +35 -0
  57. package/dist/kernel/federation/federation.d.ts +135 -0
  58. package/dist/kernel/federation/federation.js +378 -0
  59. package/dist/kernel/federation/index.d.ts +33 -0
  60. package/dist/kernel/federation/index.js +24 -0
  61. package/dist/kernel/federation/lan-discovery.d.ts +43 -0
  62. package/dist/kernel/federation/lan-discovery.js +135 -0
  63. package/dist/kernel/federation/moltfed-adapter.d.ts +30 -0
  64. package/dist/kernel/federation/moltfed-adapter.js +52 -0
  65. package/dist/kernel/federation/moltfed-connector.d.ts +98 -0
  66. package/dist/kernel/federation/moltfed-connector.js +193 -0
  67. package/dist/kernel/federation/node-identity.d.ts +19 -0
  68. package/dist/kernel/federation/node-identity.js +86 -0
  69. package/dist/kernel/federation/peer-mesh.d.ts +46 -0
  70. package/dist/kernel/federation/peer-mesh.js +117 -0
  71. package/dist/kernel/federation/protocol.d.ts +20 -0
  72. package/dist/kernel/federation/protocol.js +61 -0
  73. package/dist/kernel/federation/role-context.d.ts +5 -0
  74. package/dist/kernel/federation/role-context.js +45 -0
  75. package/dist/kernel/federation/telemetry.d.ts +21 -0
  76. package/dist/kernel/federation/telemetry.js +138 -0
  77. package/dist/kernel/federation/transport-http.d.ts +44 -0
  78. package/dist/kernel/federation/transport-http.js +207 -0
  79. package/dist/kernel/federation/types.d.ts +212 -0
  80. package/dist/kernel/federation/types.js +3 -0
  81. package/dist/kernel/free-providers.d.ts +28 -0
  82. package/dist/kernel/free-providers.js +162 -0
  83. package/dist/kernel/frontend-scoring.d.ts +21 -0
  84. package/dist/kernel/frontend-scoring.js +125 -0
  85. package/dist/kernel/index.d.ts +63 -0
  86. package/dist/kernel/index.js +45 -0
  87. package/dist/kernel/kernel.d.ts +75 -0
  88. package/dist/kernel/kernel.js +223 -0
  89. package/dist/kernel/logger.d.ts +18 -0
  90. package/dist/kernel/logger.js +26 -0
  91. package/dist/kernel/mcp/index.d.ts +9 -0
  92. package/dist/kernel/mcp/index.js +8 -0
  93. package/dist/kernel/mcp/mcp-server.d.ts +27 -0
  94. package/dist/kernel/mcp/mcp-server.js +178 -0
  95. package/dist/kernel/mission-engine.d.ts +42 -0
  96. package/dist/kernel/mission-engine.js +160 -0
  97. package/dist/kernel/orchestrator.d.ts +51 -0
  98. package/dist/kernel/orchestrator.js +226 -0
  99. package/dist/kernel/plugin-manager.d.ts +28 -0
  100. package/dist/kernel/plugin-manager.js +76 -0
  101. package/dist/kernel/plugins/browser-plugin.d.ts +22 -0
  102. package/dist/kernel/plugins/browser-plugin.js +34 -0
  103. package/dist/kernel/plugins/dashboard-plugin.d.ts +17 -0
  104. package/dist/kernel/plugins/dashboard-plugin.js +72 -0
  105. package/dist/kernel/plugins/discord-plugin.d.ts +11 -0
  106. package/dist/kernel/plugins/discord-plugin.js +35 -0
  107. package/dist/kernel/plugins/metrics-plugin.d.ts +33 -0
  108. package/dist/kernel/plugins/metrics-plugin.js +86 -0
  109. package/dist/kernel/plugins/search-plugin.d.ts +17 -0
  110. package/dist/kernel/plugins/search-plugin.js +20 -0
  111. package/dist/kernel/plugins/slack-plugin.d.ts +11 -0
  112. package/dist/kernel/plugins/slack-plugin.js +35 -0
  113. package/dist/kernel/plugins/telegram-plugin.d.ts +20 -0
  114. package/dist/kernel/plugins/telegram-plugin.js +122 -0
  115. package/dist/kernel/policies.d.ts +33 -0
  116. package/dist/kernel/policies.js +105 -0
  117. package/dist/kernel/provider-discovery.d.ts +41 -0
  118. package/dist/kernel/provider-discovery.js +179 -0
  119. package/dist/kernel/provider-manager.d.ts +38 -0
  120. package/dist/kernel/provider-manager.js +206 -0
  121. package/dist/kernel/provider-url.d.ts +18 -0
  122. package/dist/kernel/provider-url.js +45 -0
  123. package/dist/kernel/providers/gemini-provider.d.ts +43 -0
  124. package/dist/kernel/providers/gemini-provider.js +203 -0
  125. package/dist/kernel/providers/ollama-provider.d.ts +44 -0
  126. package/dist/kernel/providers/ollama-provider.js +241 -0
  127. package/dist/kernel/providers/openai-compatible-provider.d.ts +43 -0
  128. package/dist/kernel/providers/openai-compatible-provider.js +233 -0
  129. package/dist/kernel/recovery-manager.d.ts +38 -0
  130. package/dist/kernel/recovery-manager.js +156 -0
  131. package/dist/kernel/router.d.ts +44 -0
  132. package/dist/kernel/router.js +222 -0
  133. package/dist/kernel/sample-missions.d.ts +11 -0
  134. package/dist/kernel/sample-missions.js +132 -0
  135. package/dist/kernel/scheduler.d.ts +30 -0
  136. package/dist/kernel/scheduler.js +147 -0
  137. package/dist/kernel/sdk/harness-sdk.d.ts +37 -0
  138. package/dist/kernel/sdk/harness-sdk.js +48 -0
  139. package/dist/kernel/sdk/plugin-sdk.d.ts +27 -0
  140. package/dist/kernel/sdk/plugin-sdk.js +40 -0
  141. package/dist/kernel/search/search-controller.d.ts +32 -0
  142. package/dist/kernel/search/search-controller.js +141 -0
  143. package/dist/kernel/setup.d.ts +13 -0
  144. package/dist/kernel/setup.js +59 -0
  145. package/dist/kernel/types.d.ts +479 -0
  146. package/dist/kernel/types.js +7 -0
  147. package/dist/kernel/verification-engine.d.ts +33 -0
  148. package/dist/kernel/verification-engine.js +287 -0
  149. package/dist/kernel/worker-runtime.d.ts +66 -0
  150. package/dist/kernel/worker-runtime.js +261 -0
  151. package/dist/kernel/workers/browser-worker.d.ts +6 -0
  152. package/dist/kernel/workers/browser-worker.js +92 -0
  153. package/dist/kernel/workers/builtin-workers.d.ts +20 -0
  154. package/dist/kernel/workers/builtin-workers.js +120 -0
  155. package/dist/kernel/workers/research-worker.d.ts +5 -0
  156. package/dist/kernel/workers/research-worker.js +90 -0
  157. package/dist/prompt-ascii-video-animation.d.ts +2 -0
  158. package/dist/prompt-ascii-video-animation.js +243 -0
  159. package/package.json +43 -9
@@ -0,0 +1,479 @@
1
+ /**
2
+ * OpenKernel — Core Type Definitions
3
+ *
4
+ * Provider-agnostic AI execution kernel types.
5
+ * Mission → Objectives → Tasks → Workers → Providers.
6
+ */
7
+ export type Capability = 'coding' | 'browser' | 'vision' | 'terminal' | 'planning' | 'reasoning' | 'filesystem' | 'search' | 'crawl' | 'ocr' | 'review' | 'summarize' | 'citations' | 'translation' | 'documentation' | 'architecture' | 'verification' | 'frontend' | 'design' | 'accessibility' | 'dataviz' | 'animation' | (string & {});
8
+ export type WorkerType = 'research' | 'browser' | 'coding' | 'architecture' | 'vision' | 'review' | 'documentation' | 'translation' | 'terminal' | 'verification' | 'frontend' | (string & {});
9
+ export type MissionStatus = 'NEW' | 'PLANNING' | 'READY' | 'RUNNING' | 'VERIFYING' | 'WAITING' | 'PAUSED' | 'FAILED' | 'COMPLETED' | 'CANCELLED';
10
+ export type TaskStatus = 'PENDING' | 'QUEUED' | 'RUNNING' | 'VERIFYING' | 'COMPLETED' | 'FAILED' | 'SKIPPED';
11
+ export type WorkerStatus = 'SPAWNED' | 'INITIALIZED' | 'EXECUTING' | 'VERIFYING' | 'COMPLETED' | 'FAILED' | 'DESTROYED';
12
+ export interface Objective {
13
+ id: string;
14
+ missionId: string;
15
+ description: string;
16
+ capabilities: Capability[];
17
+ acceptanceCriteria: string[];
18
+ taskIds: string[];
19
+ status: TaskStatus;
20
+ createdAt: number;
21
+ completedAt?: number;
22
+ }
23
+ export interface Task {
24
+ id: string;
25
+ objectiveId: string;
26
+ missionId: string;
27
+ description: string;
28
+ capabilities: Capability[];
29
+ dependencies: string[];
30
+ status: TaskStatus;
31
+ assignedWorkerId?: string;
32
+ providerId?: string;
33
+ modelId?: string;
34
+ input: TaskInput;
35
+ output?: TaskOutput;
36
+ attempts: number;
37
+ maxAttempts: number;
38
+ createdAt: number;
39
+ startedAt?: number;
40
+ completedAt?: number;
41
+ error?: string;
42
+ }
43
+ export interface TaskInput {
44
+ prompt: string;
45
+ context?: Record<string, unknown>;
46
+ files?: string[];
47
+ artifacts?: Artifact[];
48
+ }
49
+ export interface TaskOutput {
50
+ content: string;
51
+ artifacts?: Artifact[];
52
+ metrics?: TaskMetrics;
53
+ providerId?: string;
54
+ modelId?: string;
55
+ tokensIn?: number;
56
+ tokensOut?: number;
57
+ durationMs?: number;
58
+ }
59
+ export interface Artifact {
60
+ id: string;
61
+ type: 'file' | 'code' | 'document' | 'url' | 'data' | 'image';
62
+ path?: string;
63
+ content?: string;
64
+ mimeType?: string;
65
+ metadata?: Record<string, unknown>;
66
+ }
67
+ export interface TaskMetrics {
68
+ durationMs: number;
69
+ tokensIn: number;
70
+ tokensOut: number;
71
+ cost?: number;
72
+ retries: number;
73
+ }
74
+ export interface Mission {
75
+ id: string;
76
+ name: string;
77
+ description: string;
78
+ goal: string;
79
+ status: MissionStatus;
80
+ objectives: Objective[];
81
+ tasks: Task[];
82
+ policy: PolicyRef;
83
+ workspace: WorkspaceRef;
84
+ checkpoints: string[];
85
+ currentObjectiveId?: string;
86
+ currentTaskId?: string;
87
+ createdAt: number;
88
+ startedAt?: number;
89
+ completedAt?: number;
90
+ error?: string;
91
+ metadata?: Record<string, unknown>;
92
+ }
93
+ export interface WorkspaceRef {
94
+ root: string;
95
+ git?: {
96
+ branch?: string;
97
+ commit?: string;
98
+ dirty?: boolean;
99
+ };
100
+ }
101
+ export interface WorkerDefinition {
102
+ type: WorkerType;
103
+ capabilities: Capability[];
104
+ preferences: WorkerPreferences;
105
+ verification?: string;
106
+ }
107
+ export interface WorkerPreferences {
108
+ reasoning?: number;
109
+ speed?: number;
110
+ cost?: 'free' | 'low' | 'medium' | 'high';
111
+ contextLength?: number;
112
+ vision?: boolean;
113
+ }
114
+ export interface WorkerInstance {
115
+ id: string;
116
+ type: WorkerType;
117
+ capabilities: Capability[];
118
+ preferences: WorkerPreferences;
119
+ status: WorkerStatus;
120
+ missionId: string;
121
+ taskId?: string;
122
+ providerId?: string;
123
+ modelId?: string;
124
+ createdAt: number;
125
+ startedAt?: number;
126
+ completedAt?: number;
127
+ result?: TaskOutput;
128
+ error?: string;
129
+ }
130
+ export interface ProviderModel {
131
+ id: string;
132
+ name: string;
133
+ providerId: string;
134
+ contextLength: number;
135
+ capabilities: Capability[];
136
+ supportsStreaming: boolean;
137
+ supportsFunctionCalling: boolean;
138
+ supportsVision: boolean;
139
+ /**
140
+ * Reasoning/quality benchmark score (0–100). Spec input "Benchmark Scores".
141
+ * When absent, the router estimates it from parameter size / model family.
142
+ */
143
+ benchmarkScore?: number;
144
+ /**
145
+ * Max tokens accepted in a single request given the provider tier's rate
146
+ * limits (e.g. Groq free ≈ 12k TPM), which can be far below `contextLength`.
147
+ * Defaults to `contextLength` when unknown. Used by the router to avoid
148
+ * "request too large" errors on rate-limited free tiers.
149
+ */
150
+ maxRequestTokens?: number;
151
+ costPer1kTokens?: {
152
+ input?: number;
153
+ output?: number;
154
+ };
155
+ metadata?: Record<string, unknown>;
156
+ }
157
+ export interface ProviderInfo {
158
+ id: string;
159
+ name: string;
160
+ type: 'local' | 'cloud';
161
+ healthy: boolean;
162
+ baseURL?: string;
163
+ available: boolean;
164
+ lastCheckedAt?: number;
165
+ latencyMs?: number;
166
+ successRate?: number;
167
+ quotaRemaining?: number;
168
+ /**
169
+ * Provider-tier per-minute token limit (from rate-limit headers), applied to
170
+ * ALL of this provider's models unless a model overrides it. e.g. Groq free
171
+ * ≈ 12k, HF ≈ 400k. Used by the router to size requests.
172
+ */
173
+ maxRequestTokens?: number;
174
+ error?: string;
175
+ }
176
+ export interface ProviderCapabilities {
177
+ streaming: boolean;
178
+ functionCalling: boolean;
179
+ vision: boolean;
180
+ maxContextLength: number;
181
+ models: ProviderModel[];
182
+ }
183
+ export interface CompletionRequest {
184
+ model: string;
185
+ prompt: string;
186
+ systemPrompt?: string;
187
+ context?: Record<string, unknown>;
188
+ maxTokens?: number;
189
+ temperature?: number;
190
+ stream?: boolean;
191
+ tools?: ToolDefinition[];
192
+ artifacts?: Artifact[];
193
+ }
194
+ export interface CompletionChunk {
195
+ delta: string;
196
+ done: boolean;
197
+ providerId: string;
198
+ modelId: string;
199
+ tokensIn?: number;
200
+ tokensOut?: number;
201
+ }
202
+ export interface CompletionResult {
203
+ content: string;
204
+ providerId: string;
205
+ modelId: string;
206
+ tokensIn: number;
207
+ tokensOut: number;
208
+ durationMs: number;
209
+ cost?: number;
210
+ toolCalls?: ToolCall[];
211
+ artifacts?: Artifact[];
212
+ }
213
+ export interface ToolDefinition {
214
+ name: string;
215
+ description: string;
216
+ parameters: Record<string, unknown>;
217
+ }
218
+ export interface ToolCall {
219
+ name: string;
220
+ arguments: Record<string, unknown>;
221
+ }
222
+ export type PolicyName = 'free-first' | 'fastest' | 'highest-quality' | 'local-first' | 'privacy-first' | 'balanced' | 'offline' | (string & {});
223
+ export interface Policy {
224
+ name: PolicyName;
225
+ execution?: {
226
+ parallelism?: number;
227
+ timeout?: number;
228
+ };
229
+ routing?: {
230
+ mode?: 'free-first' | 'fastest' | 'quality' | 'local' | 'privacy' | 'balanced' | 'offline';
231
+ preferredProviders?: string[];
232
+ blockedProviders?: string[];
233
+ };
234
+ verification?: {
235
+ strict?: boolean;
236
+ levels?: string[];
237
+ };
238
+ checkpoint?: {
239
+ everyTask?: boolean;
240
+ intervalSeconds?: number;
241
+ };
242
+ retry?: {
243
+ maxAttempts?: number;
244
+ backoffMs?: number;
245
+ };
246
+ notifications?: {
247
+ channels?: string[];
248
+ };
249
+ }
250
+ export interface PolicyRef {
251
+ name: PolicyName;
252
+ policy: Policy;
253
+ }
254
+ export interface Checkpoint {
255
+ id: string;
256
+ missionId: string;
257
+ mission: Mission;
258
+ workerStates: WorkerInstanceState[];
259
+ timestamp: number;
260
+ reason: 'task' | 'interval' | 'pause' | 'crash' | 'manual';
261
+ }
262
+ export interface WorkerInstanceState {
263
+ workerId: string;
264
+ status: WorkerStatus;
265
+ taskId?: string;
266
+ providerId?: string;
267
+ modelId?: string;
268
+ partialOutput?: string;
269
+ }
270
+ export type KernelEventType = 'MISSION_STARTED' | 'MISSION_COMPLETED' | 'MISSION_FAILED' | 'MISSION_PAUSED' | 'MISSION_RESUMED' | 'MISSION_CANCELLED' | 'OBJECTIVE_STARTED' | 'OBJECTIVE_COMPLETED' | 'TASK_QUEUED' | 'TASK_STARTED' | 'TASK_COMPLETED' | 'TASK_FAILED' | 'WORKER_SPAWNED' | 'WORKER_EXITED' | 'ROUTING_DECISION' | 'MODEL_CHANGED' | 'PROVIDER_CHANGED' | 'CHECKPOINT' | 'VERIFY_SUCCESS' | 'VERIFY_FAILED' | 'RECOVERY' | 'PROVIDER_HEALTH' | 'NOTIFICATION' | 'LOG';
271
+ export interface KernelEvent<T = unknown> {
272
+ type: KernelEventType;
273
+ timestamp: number;
274
+ missionId?: string;
275
+ objectiveId?: string;
276
+ taskId?: string;
277
+ workerId?: string;
278
+ data?: T;
279
+ }
280
+ export type EventHandler<T = unknown> = (event: KernelEvent<T>) => void | Promise<void>;
281
+ export interface RoutingRequest {
282
+ capabilities: Capability[];
283
+ preferences: WorkerPreferences;
284
+ policy: Policy;
285
+ availableProviders: ProviderInfo[];
286
+ availableModels: ProviderModel[];
287
+ /**
288
+ * Estimated tokens in the request (prompt + context). When set, the router
289
+ * heavily penalizes models whose effective per-request limit is below it,
290
+ * preventing "request too large" failures on rate-limited tiers.
291
+ */
292
+ estimatedRequestTokens?: number;
293
+ }
294
+ export interface RoutingDecision {
295
+ providerId: string;
296
+ modelId: string;
297
+ score: number;
298
+ reason: string;
299
+ }
300
+ /** A single scored routing option, used to render the orchestrator's choice. */
301
+ export interface RoutingCandidate extends RoutingDecision {
302
+ providerName: string;
303
+ providerType: 'local' | 'cloud';
304
+ benchmarkScore: number;
305
+ }
306
+ /** Payload of the ROUTING_DECISION event — the ranked candidates + the winner. */
307
+ export interface RoutingDecisionEvent {
308
+ taskId: string;
309
+ workerType: string;
310
+ mode: string;
311
+ /** True when the choice was forced (worker pin, recovery override, or offline lock). */
312
+ locked: boolean;
313
+ chosen: RoutingCandidate;
314
+ candidates: RoutingCandidate[];
315
+ }
316
+ export interface VerificationResult {
317
+ passed: boolean;
318
+ checks: VerificationCheck[];
319
+ score: number;
320
+ summary: string;
321
+ }
322
+ export interface VerificationCheck {
323
+ name: string;
324
+ passed: boolean;
325
+ message: string;
326
+ durationMs?: number;
327
+ }
328
+ export type VerificationStage = 'objective' | 'compile' | 'tests' | 'lint' | 'browser' | 'expected-output' | 'quality' | 'llm-judge';
329
+ /**
330
+ * Frontend "worker request" acceptance criteria — the quality bar a frontend
331
+ * task must clear. Travels in `task.input.context.frontendAcceptance` and is
332
+ * enforced by the frontend-quality verifier. Any omitted field uses a default.
333
+ */
334
+ export interface FrontendAcceptance {
335
+ /** Pass threshold, 0–100 (default 85). */
336
+ threshold?: number;
337
+ /** Minimum distinct CSS class selectors (component proxy). */
338
+ minComponents?: number;
339
+ /** Minimum distinct theme selectors ([data-theme=…] / .theme-…). */
340
+ minThemes?: number;
341
+ /** Minimum distinct design-token custom properties (--token). */
342
+ minTokens?: number;
343
+ /** Frameworks that must NOT appear (hard gate). */
344
+ bannedFrameworks?: string[];
345
+ /** Require design tokens / responsive / animation / a11y sections. */
346
+ requireDesignTokens?: boolean;
347
+ requireResponsive?: boolean;
348
+ requireAnimation?: boolean;
349
+ requireAccessibility?: boolean;
350
+ /** Fail if placeholder/TODO/lorem content is present (hard gate). */
351
+ noPlaceholders?: boolean;
352
+ }
353
+ /** One line item of a frontend quality score. */
354
+ export interface FrontendScoreItem {
355
+ name: string;
356
+ weight: number;
357
+ earned: number;
358
+ detail: string;
359
+ }
360
+ export interface FrontendScore {
361
+ score: number;
362
+ passed: boolean;
363
+ threshold: number;
364
+ items: FrontendScoreItem[];
365
+ /** Actionable notes for the next attempt when the bar isn't met. */
366
+ feedback: string[];
367
+ }
368
+ export interface VerificationContext {
369
+ mission: Mission;
370
+ task: Task;
371
+ output: TaskOutput;
372
+ strict: boolean;
373
+ workspace: WorkspaceRef;
374
+ }
375
+ export interface Verifier {
376
+ stage: VerificationStage;
377
+ enabled(ctx: VerificationContext): boolean;
378
+ run(ctx: VerificationContext): Promise<VerificationCheck>;
379
+ }
380
+ export interface LlmJudgeOptions {
381
+ providerId?: string;
382
+ modelId?: string;
383
+ }
384
+ export type FailureType = '429' | 'timeout' | 'provider-down' | 'hallucination' | 'tool-failure' | 'verification-failure' | 'planning-failure' | 'browser-failure' | 'unknown';
385
+ export type RecoveryAction = 'retry' | 'rotate-provider' | 'spawn-different-worker' | 'replan' | 'checkpoint' | 'continue' | 'abort';
386
+ export interface RecoveryDecision {
387
+ action: RecoveryAction;
388
+ reason: string;
389
+ rotateToProviderId?: string;
390
+ rotateToModelId?: string;
391
+ newWorkerType?: WorkerType;
392
+ }
393
+ export interface PluginManifest {
394
+ name: string;
395
+ version: string;
396
+ description?: string;
397
+ subscriptions?: KernelEventType[];
398
+ commands?: PluginCommand[];
399
+ }
400
+ export interface PluginCommand {
401
+ name: string;
402
+ description: string;
403
+ handler: (args: string[], kernel: KernelLike) => Promise<void>;
404
+ }
405
+ export interface Plugin {
406
+ manifest: PluginManifest;
407
+ onEvent?(event: KernelEvent): void | Promise<void>;
408
+ onRegister?(kernel: KernelLike): void | Promise<void>;
409
+ onDestroy?(): void | Promise<void>;
410
+ }
411
+ export interface KernelLike {
412
+ execute(mission: MissionInput): Promise<Mission>;
413
+ pause(missionId: string): Promise<void>;
414
+ resume(missionId: string): Promise<Mission>;
415
+ cancel(missionId: string): Promise<void>;
416
+ retry(missionId: string): Promise<Mission>;
417
+ status(missionId: string): Promise<MissionStatus>;
418
+ subscribe(types: KernelEventType[], handler: EventHandler): () => void;
419
+ subscribeAll(handler: EventHandler): () => void;
420
+ registerWorker(definition: WorkerDefinition): void;
421
+ registerProvider(providerId: string, provider: ProviderInterface): void;
422
+ registerPlugin(plugin: Plugin): void;
423
+ registerPolicy(policy: Policy): void;
424
+ getMission(missionId: string): Mission | undefined;
425
+ listMissions(): Mission[];
426
+ listPlugins(): Plugin[];
427
+ getEventHistory(): KernelEvent[];
428
+ notify(message: string, missionId?: string): void;
429
+ /** Run an OpenKernel slash-command (e.g. "/status", "/goal build X"). */
430
+ command(input: string): Promise<CommandResult>;
431
+ }
432
+ /** Result of running a kernel command — a renderable text plus optional data. */
433
+ export interface CommandResult {
434
+ ok: boolean;
435
+ text: string;
436
+ data?: unknown;
437
+ }
438
+ export interface MissionInput {
439
+ name?: string;
440
+ description: string;
441
+ goal: string;
442
+ policy?: PolicyName;
443
+ workspace?: WorkspaceRef;
444
+ tasks?: MissionTaskInput[];
445
+ metadata?: Record<string, unknown>;
446
+ }
447
+ export interface MissionTaskInput {
448
+ description: string;
449
+ capabilities: Capability[];
450
+ dependencies?: string[];
451
+ input: TaskInput;
452
+ }
453
+ export interface ProviderVerifyResult {
454
+ ok: boolean;
455
+ latencyMs: number;
456
+ error?: string;
457
+ /** Per-minute token limit parsed from rate-limit headers, if provided. */
458
+ rateLimitTokens?: number;
459
+ }
460
+ export interface ProviderInterface {
461
+ info: ProviderInfo;
462
+ capabilities(): Promise<ProviderCapabilities>;
463
+ complete(request: CompletionRequest): Promise<CompletionResult>;
464
+ completeStream?(request: CompletionRequest): AsyncIterable<CompletionChunk>;
465
+ refresh?(): Promise<void>;
466
+ /**
467
+ * Actively verify the provider with a real, token-authenticated 1-token
468
+ * completion — proves reachability, a valid key, and a working chat/model.
469
+ * Preferred by the health check over a plain /models probe.
470
+ */
471
+ verify?(): Promise<ProviderVerifyResult>;
472
+ }
473
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
474
+ export interface Logger {
475
+ debug(message: string, ...args: unknown[]): void;
476
+ info(message: string, ...args: unknown[]): void;
477
+ warn(message: string, ...args: unknown[]): void;
478
+ error(message: string, ...args: unknown[]): void;
479
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * OpenKernel — Core Type Definitions
3
+ *
4
+ * Provider-agnostic AI execution kernel types.
5
+ * Mission → Objectives → Tasks → Workers → Providers.
6
+ */
7
+ export {};
@@ -0,0 +1,33 @@
1
+ /**
2
+ * OpenKernel — Verification Engine
3
+ *
4
+ * Pipeline: objective → compile → tests → lint → browser tests →
5
+ * expected output → LLM judge.
6
+ *
7
+ * The LLM judge is ALWAYS the last verifier. Never the first.
8
+ * Each stage is a Verifier; the engine runs enabled stages in order,
9
+ * short-circuits on hard failures (strict mode), and always runs the
10
+ * LLM judge last regardless of prior results.
11
+ */
12
+ import type { Logger, Mission, Policy, Task, VerificationResult, Verifier, WorkspaceRef } from './types.js';
13
+ import type { EventBus } from './event-bus.js';
14
+ import type { ProviderManager } from './provider-manager.js';
15
+ export interface VerificationEngineDeps {
16
+ eventBus: EventBus;
17
+ providerManager: ProviderManager;
18
+ logger: Logger;
19
+ }
20
+ export declare class VerificationEngine {
21
+ private deps;
22
+ private verifiers;
23
+ constructor(deps: VerificationEngineDeps);
24
+ registerVerifier(verifier: Verifier): void;
25
+ verify(mission: Mission, task: Task, policy: Policy): Promise<VerificationResult>;
26
+ private finalize;
27
+ private fail;
28
+ private registerBuiltins;
29
+ private llmJudgeVerifier;
30
+ private runLlmJudge;
31
+ private pickJudgeProvider;
32
+ }
33
+ export type { WorkspaceRef };