vibeman 0.0.0 → 0.0.2
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/README.md +12 -0
- package/dist/index.js +114 -0
- package/dist/runtime/api/.tsbuildinfo +1 -0
- package/dist/runtime/api/agent/agent-service.d.ts +224 -0
- package/dist/runtime/api/agent/agent-service.js +895 -0
- package/dist/runtime/api/agent/ai-providers/claude-code-adapter.d.ts +61 -0
- package/dist/runtime/api/agent/ai-providers/claude-code-adapter.js +362 -0
- package/dist/runtime/api/agent/ai-providers/codex-cli-provider.d.ts +34 -0
- package/dist/runtime/api/agent/ai-providers/codex-cli-provider.js +315 -0
- package/dist/runtime/api/agent/ai-providers/index.d.ts +9 -0
- package/dist/runtime/api/agent/ai-providers/index.js +7 -0
- package/dist/runtime/api/agent/ai-providers/types.d.ts +182 -0
- package/dist/runtime/api/agent/ai-providers/types.js +5 -0
- package/dist/runtime/api/agent/codex-cli-provider.test.d.ts +1 -0
- package/dist/runtime/api/agent/codex-cli-provider.test.js +125 -0
- package/dist/runtime/api/agent/core-agent-service.d.ts +119 -0
- package/dist/runtime/api/agent/core-agent-service.js +267 -0
- package/dist/runtime/api/agent/parsers.d.ts +16 -0
- package/dist/runtime/api/agent/parsers.js +308 -0
- package/dist/runtime/api/agent/prompt-service.d.ts +30 -0
- package/dist/runtime/api/agent/prompt-service.js +449 -0
- package/dist/runtime/api/agent/prompt-service.test.d.ts +1 -0
- package/dist/runtime/api/agent/prompt-service.test.js +230 -0
- package/dist/runtime/api/agent/routing-policy.d.ts +188 -0
- package/dist/runtime/api/agent/routing-policy.js +246 -0
- package/dist/runtime/api/api/router-helpers.d.ts +32 -0
- package/dist/runtime/api/api/router-helpers.js +31 -0
- package/dist/runtime/api/api/routers/ai.d.ts +188 -0
- package/dist/runtime/api/api/routers/ai.js +395 -0
- package/dist/runtime/api/api/routers/executions.d.ts +98 -0
- package/dist/runtime/api/api/routers/executions.js +94 -0
- package/dist/runtime/api/api/routers/git.d.ts +45 -0
- package/dist/runtime/api/api/routers/git.js +35 -0
- package/dist/runtime/api/api/routers/provider-config.d.ts +165 -0
- package/dist/runtime/api/api/routers/provider-config.js +252 -0
- package/dist/runtime/api/api/routers/settings.d.ts +139 -0
- package/dist/runtime/api/api/routers/settings.js +113 -0
- package/dist/runtime/api/api/routers/tasks.d.ts +141 -0
- package/dist/runtime/api/api/routers/tasks.js +238 -0
- package/dist/runtime/api/api/routers/workflows.d.ts +267 -0
- package/dist/runtime/api/api/routers/workflows.js +310 -0
- package/dist/runtime/api/api/routers/worktrees.d.ts +101 -0
- package/dist/runtime/api/api/routers/worktrees.js +80 -0
- package/dist/runtime/api/api/trpc.d.ts +118 -0
- package/dist/runtime/api/api/trpc.js +34 -0
- package/dist/runtime/api/index.d.ts +9 -0
- package/dist/runtime/api/index.js +117 -0
- package/dist/runtime/api/lib/id-generator.d.ts +70 -0
- package/dist/runtime/api/lib/id-generator.js +123 -0
- package/dist/runtime/api/lib/image-paste-drop-extension.d.ts +26 -0
- package/dist/runtime/api/lib/image-paste-drop-extension.js +125 -0
- package/dist/runtime/api/lib/local-config.d.ts +245 -0
- package/dist/runtime/api/lib/local-config.js +288 -0
- package/dist/runtime/api/lib/logger.d.ts +11 -0
- package/dist/runtime/api/lib/logger.js +188 -0
- package/dist/runtime/api/lib/markdown-utils.d.ts +8 -0
- package/dist/runtime/api/lib/markdown-utils.js +282 -0
- package/dist/runtime/api/lib/markdown-utils.test.d.ts +1 -0
- package/dist/runtime/api/lib/markdown-utils.test.js +348 -0
- package/dist/runtime/api/lib/provider-detection.d.ts +59 -0
- package/dist/runtime/api/lib/provider-detection.js +244 -0
- package/dist/runtime/api/lib/server/agent-service-singleton.d.ts +6 -0
- package/dist/runtime/api/lib/server/agent-service-singleton.js +27 -0
- package/dist/runtime/api/lib/server/bootstrap.d.ts +38 -0
- package/dist/runtime/api/lib/server/bootstrap.js +197 -0
- package/dist/runtime/api/lib/server/git-service-singleton.d.ts +6 -0
- package/dist/runtime/api/lib/server/git-service-singleton.js +47 -0
- package/dist/runtime/api/lib/server/project-root.d.ts +2 -0
- package/dist/runtime/api/lib/server/project-root.js +61 -0
- package/dist/runtime/api/lib/server/task-service-singleton.d.ts +7 -0
- package/dist/runtime/api/lib/server/task-service-singleton.js +58 -0
- package/dist/runtime/api/lib/server/vibing-orchestrator-singleton.d.ts +7 -0
- package/dist/runtime/api/lib/server/vibing-orchestrator-singleton.js +57 -0
- package/dist/runtime/api/lib/tiptap-utils.clamp-selection.test.d.ts +1 -0
- package/dist/runtime/api/lib/tiptap-utils.clamp-selection.test.js +27 -0
- package/dist/runtime/api/lib/tiptap-utils.d.ts +130 -0
- package/dist/runtime/api/lib/tiptap-utils.js +327 -0
- package/dist/runtime/api/lib/trpc/client.d.ts +1 -0
- package/dist/runtime/api/lib/trpc/client.js +5 -0
- package/dist/runtime/api/lib/trpc/server.d.ts +915 -0
- package/dist/runtime/api/lib/trpc/server.js +11 -0
- package/dist/runtime/api/lib/trpc/ws-server.d.ts +8 -0
- package/dist/runtime/api/lib/trpc/ws-server.js +33 -0
- package/dist/runtime/api/persistence/database-service.d.ts +14 -0
- package/dist/runtime/api/persistence/database-service.js +74 -0
- package/dist/runtime/api/persistence/execution-log-persistence.d.ts +90 -0
- package/dist/runtime/api/persistence/execution-log-persistence.js +410 -0
- package/dist/runtime/api/persistence/execution-log-persistence.test.d.ts +1 -0
- package/dist/runtime/api/persistence/execution-log-persistence.test.js +170 -0
- package/dist/runtime/api/router.d.ts +918 -0
- package/dist/runtime/api/router.js +34 -0
- package/dist/runtime/api/settings-service.d.ts +110 -0
- package/dist/runtime/api/settings-service.js +613 -0
- package/dist/runtime/api/tasks/file-watcher.d.ts +23 -0
- package/dist/runtime/api/tasks/file-watcher.js +88 -0
- package/dist/runtime/api/tasks/task-file-parser.d.ts +13 -0
- package/dist/runtime/api/tasks/task-file-parser.js +161 -0
- package/dist/runtime/api/tasks/task-service.d.ts +36 -0
- package/dist/runtime/api/tasks/task-service.js +173 -0
- package/dist/runtime/api/types/index.d.ts +179 -0
- package/dist/runtime/api/types/index.js +1 -0
- package/dist/runtime/api/types/settings.d.ts +81 -0
- package/dist/runtime/api/types/settings.js +2 -0
- package/dist/runtime/api/types.d.ts +2 -0
- package/dist/runtime/api/types.js +1 -0
- package/dist/runtime/api/utils/env.d.ts +6 -0
- package/dist/runtime/api/utils/env.js +12 -0
- package/dist/runtime/api/utils/stripNextEnv.d.ts +7 -0
- package/dist/runtime/api/utils/stripNextEnv.js +22 -0
- package/dist/runtime/api/utils/title-slug.d.ts +6 -0
- package/dist/runtime/api/utils/title-slug.js +77 -0
- package/dist/runtime/api/utils/url.d.ts +2 -0
- package/dist/runtime/api/utils/url.js +19 -0
- package/dist/runtime/api/vcs/git-history-service.d.ts +57 -0
- package/dist/runtime/api/vcs/git-history-service.js +228 -0
- package/dist/runtime/api/vcs/git-service.d.ts +127 -0
- package/dist/runtime/api/vcs/git-service.js +284 -0
- package/dist/runtime/api/vcs/worktree-service.d.ts +93 -0
- package/dist/runtime/api/vcs/worktree-service.js +506 -0
- package/dist/runtime/api/vcs/worktree-service.test.d.ts +1 -0
- package/dist/runtime/api/vcs/worktree-service.test.js +20 -0
- package/dist/runtime/api/workflows/quality-pipeline.d.ts +58 -0
- package/dist/runtime/api/workflows/quality-pipeline.js +400 -0
- package/dist/runtime/api/workflows/vibing-orchestrator.d.ts +318 -0
- package/dist/runtime/api/workflows/vibing-orchestrator.js +1860 -0
- package/dist/runtime/web/.next/BUILD_ID +1 -0
- package/dist/runtime/web/.next/app-build-manifest.json +59 -0
- package/dist/runtime/web/.next/app-path-routes-manifest.json +7 -0
- package/dist/runtime/web/.next/build-manifest.json +33 -0
- package/dist/runtime/web/.next/package.json +1 -0
- package/dist/runtime/web/.next/prerender-manifest.json +61 -0
- package/dist/runtime/web/.next/react-loadable-manifest.json +39 -0
- package/dist/runtime/web/.next/required-server-files.json +334 -0
- package/dist/runtime/web/.next/routes-manifest.json +62 -0
- package/dist/runtime/web/.next/server/app/_not-found/page.js +2 -0
- package/dist/runtime/web/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/dist/runtime/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/dist/runtime/web/.next/server/app/_not-found.html +7 -0
- package/dist/runtime/web/.next/server/app/_not-found.meta +8 -0
- package/dist/runtime/web/.next/server/app/_not-found.rsc +22 -0
- package/dist/runtime/web/.next/server/app/api/health/route.js +1 -0
- package/dist/runtime/web/.next/server/app/api/health/route.js.nft.json +1 -0
- package/dist/runtime/web/.next/server/app/api/health/route_client-reference-manifest.js +1 -0
- package/dist/runtime/web/.next/server/app/api/images/[...path]/route.js +1 -0
- package/dist/runtime/web/.next/server/app/api/images/[...path]/route.js.nft.json +1 -0
- package/dist/runtime/web/.next/server/app/api/images/[...path]/route_client-reference-manifest.js +1 -0
- package/dist/runtime/web/.next/server/app/api/upload/route.js +1 -0
- package/dist/runtime/web/.next/server/app/api/upload/route.js.nft.json +1 -0
- package/dist/runtime/web/.next/server/app/api/upload/route_client-reference-manifest.js +1 -0
- package/dist/runtime/web/.next/server/app/index.html +7 -0
- package/dist/runtime/web/.next/server/app/index.meta +7 -0
- package/dist/runtime/web/.next/server/app/index.rsc +27 -0
- package/dist/runtime/web/.next/server/app/page.js +147 -0
- package/dist/runtime/web/.next/server/app/page.js.nft.json +1 -0
- package/dist/runtime/web/.next/server/app/page_client-reference-manifest.js +1 -0
- package/dist/runtime/web/.next/server/app-paths-manifest.json +7 -0
- package/dist/runtime/web/.next/server/chunks/217.js +1 -0
- package/dist/runtime/web/.next/server/chunks/383.js +6 -0
- package/dist/runtime/web/.next/server/chunks/458.js +1 -0
- package/dist/runtime/web/.next/server/chunks/576.js +18 -0
- package/dist/runtime/web/.next/server/chunks/635.js +22 -0
- package/dist/runtime/web/.next/server/chunks/761.js +1 -0
- package/dist/runtime/web/.next/server/chunks/777.js +3 -0
- package/dist/runtime/web/.next/server/chunks/825.js +1 -0
- package/dist/runtime/web/.next/server/chunks/838.js +1 -0
- package/dist/runtime/web/.next/server/chunks/973.js +15 -0
- package/dist/runtime/web/.next/server/functions-config-manifest.json +4 -0
- package/dist/runtime/web/.next/server/middleware-build-manifest.js +1 -0
- package/dist/runtime/web/.next/server/middleware-manifest.json +6 -0
- package/dist/runtime/web/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/dist/runtime/web/.next/server/next-font-manifest.js +1 -0
- package/dist/runtime/web/.next/server/next-font-manifest.json +1 -0
- package/dist/runtime/web/.next/server/pages/404.html +7 -0
- package/dist/runtime/web/.next/server/pages/500.html +1 -0
- package/dist/runtime/web/.next/server/pages/_app.js +1 -0
- package/dist/runtime/web/.next/server/pages/_app.js.nft.json +1 -0
- package/dist/runtime/web/.next/server/pages/_document.js +1 -0
- package/dist/runtime/web/.next/server/pages/_document.js.nft.json +1 -0
- package/dist/runtime/web/.next/server/pages/_error.js +19 -0
- package/dist/runtime/web/.next/server/pages/_error.js.nft.json +1 -0
- package/dist/runtime/web/.next/server/pages-manifest.json +6 -0
- package/dist/runtime/web/.next/server/server-reference-manifest.js +1 -0
- package/dist/runtime/web/.next/server/server-reference-manifest.json +1 -0
- package/dist/runtime/web/.next/server/webpack-runtime.js +1 -0
- package/dist/runtime/web/.next/static/chunks/18-15c10d3288afef2e.js +1 -0
- package/dist/runtime/web/.next/static/chunks/1c0ca389.537bbe362e3ffbd9.js +3 -0
- package/dist/runtime/web/.next/static/chunks/22747d63-ad5da0c19f4cfe41.js +71 -0
- package/dist/runtime/web/.next/static/chunks/277-0142a939f08738c3.js +63 -0
- package/dist/runtime/web/.next/static/chunks/355.056c2645878a799a.js +1 -0
- package/dist/runtime/web/.next/static/chunks/420.a5ccf151c9e2b2f1.js +1 -0
- package/dist/runtime/web/.next/static/chunks/439.1be0c6242fd248d5.js +15 -0
- package/dist/runtime/web/.next/static/chunks/440.c52e7c0f797e22b2.js +1 -0
- package/dist/runtime/web/.next/static/chunks/575-e2478287c27da87b.js +1 -0
- package/dist/runtime/web/.next/static/chunks/691.920d88c115087314.js +1 -0
- package/dist/runtime/web/.next/static/chunks/765-e838910065b50c3d.js +1 -0
- package/dist/runtime/web/.next/static/chunks/87c73c54-09e1ba5c70e60a51.js +1 -0
- package/dist/runtime/web/.next/static/chunks/891cff7f.0f71fc028f87e683.js +1 -0
- package/dist/runtime/web/.next/static/chunks/8bb4d8db-3e2aa02b0a2384b9.js +1 -0
- package/dist/runtime/web/.next/static/chunks/9af238c7-271a911d4e99ab18.js +1 -0
- package/dist/runtime/web/.next/static/chunks/app/_not-found/page-1cb74d1cba27d0ab.js +1 -0
- package/dist/runtime/web/.next/static/chunks/app/api/health/route-105a61ae865ba536.js +1 -0
- package/dist/runtime/web/.next/static/chunks/app/api/images/[...path]/route-105a61ae865ba536.js +1 -0
- package/dist/runtime/web/.next/static/chunks/app/api/upload/route-105a61ae865ba536.js +1 -0
- package/dist/runtime/web/.next/static/chunks/app/layout-8435322f09fd0975.js +1 -0
- package/dist/runtime/web/.next/static/chunks/app/page-8c3ba579efc6f918.js +1 -0
- package/dist/runtime/web/.next/static/chunks/cac567b0-5b77dd12911823cd.js +1 -0
- package/dist/runtime/web/.next/static/chunks/framework-2518f1345b5b2806.js +1 -0
- package/dist/runtime/web/.next/static/chunks/main-17665e5e39de9a8a.js +1 -0
- package/dist/runtime/web/.next/static/chunks/main-app-c0b0f5ba4f7f9d75.js +1 -0
- package/dist/runtime/web/.next/static/chunks/pages/_app-d6f6b3bbc3d81ee1.js +1 -0
- package/dist/runtime/web/.next/static/chunks/pages/_error-75a96cf1997cc3b9.js +1 -0
- package/dist/runtime/web/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/dist/runtime/web/.next/static/chunks/webpack-c8de37305b4635cf.js +1 -0
- package/dist/runtime/web/.next/static/css/08c950681f1a9a92.css +1 -0
- package/dist/runtime/web/.next/static/css/2728291c68f99cb1.css +3 -0
- package/dist/runtime/web/.next/static/css/521bd69cc298cd1a.css +1 -0
- package/dist/runtime/web/.next/static/css/537e22821e101b87.css +1 -0
- package/dist/runtime/web/.next/static/mRpNgPfbYR_0wrODzlg_4/_buildManifest.js +1 -0
- package/dist/runtime/web/.next/static/mRpNgPfbYR_0wrODzlg_4/_ssgManifest.js +1 -0
- package/dist/runtime/web/.next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
- package/dist/runtime/web/.next/static/media/21350d82a1f187e9-s.woff2 +0 -0
- package/dist/runtime/web/.next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
- package/dist/runtime/web/.next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
- package/dist/runtime/web/.next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
- package/dist/runtime/web/.next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
- package/dist/runtime/web/.next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
- package/dist/runtime/web/package.json +65 -0
- package/dist/runtime/web/server.js +44 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +84 -7
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Agent Service - Pure AI Execution Engine
|
|
3
|
+
* Provider-agnostic AI execution service
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { AIProvider, ExecutionOptions, ExecutionMessage, ModelInfo, ProviderStatus } from './ai-providers/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Execution state tracking
|
|
9
|
+
*/
|
|
10
|
+
export interface ExecutionState {
|
|
11
|
+
id: string;
|
|
12
|
+
provider: string;
|
|
13
|
+
status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
|
|
14
|
+
startTime: string;
|
|
15
|
+
endTime?: string;
|
|
16
|
+
error?: string;
|
|
17
|
+
messages: ExecutionMessage[];
|
|
18
|
+
result?: string;
|
|
19
|
+
usage?: {
|
|
20
|
+
promptTokens: number;
|
|
21
|
+
completionTokens: number;
|
|
22
|
+
totalTokens: number;
|
|
23
|
+
cost?: number;
|
|
24
|
+
};
|
|
25
|
+
abortController?: AbortController;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Execution request
|
|
29
|
+
*/
|
|
30
|
+
export interface ExecutionRequest {
|
|
31
|
+
prompt: string;
|
|
32
|
+
options?: ExecutionOptions;
|
|
33
|
+
provider?: string;
|
|
34
|
+
metadata?: Record<string, any>;
|
|
35
|
+
executionId?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Execution update event
|
|
39
|
+
*/
|
|
40
|
+
export interface ExecutionUpdate {
|
|
41
|
+
executionId: string;
|
|
42
|
+
status: ExecutionState['status'];
|
|
43
|
+
message?: ExecutionMessage;
|
|
44
|
+
error?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Agent Service Configuration
|
|
48
|
+
*/
|
|
49
|
+
export interface AgentServiceConfig {
|
|
50
|
+
defaultProvider?: string;
|
|
51
|
+
executionTimeout?: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Pure AI Execution Service
|
|
55
|
+
* Manages AI providers and executions without business logic
|
|
56
|
+
*/
|
|
57
|
+
export declare class CoreAgentService extends EventEmitter {
|
|
58
|
+
private providers;
|
|
59
|
+
private defaultProvider;
|
|
60
|
+
private executions;
|
|
61
|
+
private config;
|
|
62
|
+
constructor(config?: AgentServiceConfig);
|
|
63
|
+
/**
|
|
64
|
+
* Register an AI provider
|
|
65
|
+
*/
|
|
66
|
+
registerProvider(name: string, provider: AIProvider): void;
|
|
67
|
+
/**
|
|
68
|
+
* Set default provider
|
|
69
|
+
*/
|
|
70
|
+
setDefaultProvider(name: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* Get default provider name
|
|
73
|
+
*/
|
|
74
|
+
getDefaultProvider(): string | null;
|
|
75
|
+
/**
|
|
76
|
+
* Get provider by name
|
|
77
|
+
*/
|
|
78
|
+
getProvider(name: string): AIProvider | null;
|
|
79
|
+
/**
|
|
80
|
+
* Get all registered providers
|
|
81
|
+
*/
|
|
82
|
+
getProviders(): Map<string, AIProvider>;
|
|
83
|
+
/**
|
|
84
|
+
* Execute a prompt with streaming
|
|
85
|
+
*/
|
|
86
|
+
execute(request: ExecutionRequest): Promise<string>;
|
|
87
|
+
/**
|
|
88
|
+
* Get execution status
|
|
89
|
+
*/
|
|
90
|
+
getExecutionStatus(executionId: string): ExecutionState | null;
|
|
91
|
+
/**
|
|
92
|
+
* Get execution messages
|
|
93
|
+
*/
|
|
94
|
+
getExecutionMessages(executionId: string): ExecutionMessage[];
|
|
95
|
+
/**
|
|
96
|
+
* Stop an execution
|
|
97
|
+
*/
|
|
98
|
+
stopExecution(executionId: string): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Get all executions
|
|
101
|
+
*/
|
|
102
|
+
getAllExecutions(): ExecutionState[];
|
|
103
|
+
/**
|
|
104
|
+
* Clear completed executions
|
|
105
|
+
*/
|
|
106
|
+
clearCompletedExecutions(): number;
|
|
107
|
+
/**
|
|
108
|
+
* Validate all providers
|
|
109
|
+
*/
|
|
110
|
+
validateProviders(): Promise<Map<string, ProviderStatus>>;
|
|
111
|
+
/**
|
|
112
|
+
* Get available models from all providers
|
|
113
|
+
*/
|
|
114
|
+
getAvailableModels(): Promise<ModelInfo[]>;
|
|
115
|
+
/**
|
|
116
|
+
* Generate execution ID
|
|
117
|
+
*/
|
|
118
|
+
private generateExecutionId;
|
|
119
|
+
}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Agent Service - Pure AI Execution Engine
|
|
3
|
+
* Provider-agnostic AI execution service
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { log } from '../lib/logger.js';
|
|
7
|
+
import { generateId } from '../lib/id-generator.js';
|
|
8
|
+
/**
|
|
9
|
+
* Pure AI Execution Service
|
|
10
|
+
* Manages AI providers and executions without business logic
|
|
11
|
+
*/
|
|
12
|
+
export class CoreAgentService extends EventEmitter {
|
|
13
|
+
constructor(config = {}) {
|
|
14
|
+
super();
|
|
15
|
+
this.providers = new Map();
|
|
16
|
+
this.defaultProvider = null;
|
|
17
|
+
this.executions = new Map();
|
|
18
|
+
this.config = {
|
|
19
|
+
executionTimeout: config.executionTimeout || 30 * 60 * 1000, // 30 minutes
|
|
20
|
+
...config,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Register an AI provider
|
|
25
|
+
*/
|
|
26
|
+
registerProvider(name, provider) {
|
|
27
|
+
this.providers.set(name, provider);
|
|
28
|
+
log.debug(`Registered AI provider: ${name}`, undefined, 'core-agent-service');
|
|
29
|
+
// Set as default if it's the first provider or matches config
|
|
30
|
+
if (!this.defaultProvider || name === this.config.defaultProvider) {
|
|
31
|
+
this.defaultProvider = name;
|
|
32
|
+
log.debug(`Set default provider: ${name}`, undefined, 'core-agent-service');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Set default provider
|
|
37
|
+
*/
|
|
38
|
+
setDefaultProvider(name) {
|
|
39
|
+
if (!this.providers.has(name)) {
|
|
40
|
+
throw new Error(`Provider ${name} not registered`);
|
|
41
|
+
}
|
|
42
|
+
this.defaultProvider = name;
|
|
43
|
+
log.debug(`Changed default provider to: ${name}`, undefined, 'core-agent-service');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get default provider name
|
|
47
|
+
*/
|
|
48
|
+
getDefaultProvider() {
|
|
49
|
+
return this.defaultProvider;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get provider by name
|
|
53
|
+
*/
|
|
54
|
+
getProvider(name) {
|
|
55
|
+
return this.providers.get(name) || null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get all registered providers
|
|
59
|
+
*/
|
|
60
|
+
getProviders() {
|
|
61
|
+
return new Map(this.providers);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Execute a prompt with streaming
|
|
65
|
+
*/
|
|
66
|
+
async execute(request) {
|
|
67
|
+
// Determine which provider to use
|
|
68
|
+
const providerName = request.provider || this.defaultProvider;
|
|
69
|
+
if (!providerName) {
|
|
70
|
+
throw new Error('No provider specified and no default provider set');
|
|
71
|
+
}
|
|
72
|
+
const provider = this.providers.get(providerName);
|
|
73
|
+
if (!provider) {
|
|
74
|
+
throw new Error(`Provider ${providerName} not found`);
|
|
75
|
+
}
|
|
76
|
+
const executionId = request.executionId || this.generateExecutionId();
|
|
77
|
+
const abortController = new AbortController();
|
|
78
|
+
// Set timeout
|
|
79
|
+
const timeoutId = setTimeout(() => {
|
|
80
|
+
abortController.abort();
|
|
81
|
+
}, this.config.executionTimeout);
|
|
82
|
+
const execution = {
|
|
83
|
+
id: executionId,
|
|
84
|
+
provider: provider.name,
|
|
85
|
+
status: 'pending',
|
|
86
|
+
startTime: new Date().toISOString(),
|
|
87
|
+
messages: [],
|
|
88
|
+
abortController,
|
|
89
|
+
};
|
|
90
|
+
this.executions.set(executionId, execution);
|
|
91
|
+
// Emit execution created event
|
|
92
|
+
this.emit('executionCreated', { executionId, provider: execution.provider });
|
|
93
|
+
try {
|
|
94
|
+
execution.status = 'running';
|
|
95
|
+
this.emit('executionStarted', { executionId });
|
|
96
|
+
const options = {
|
|
97
|
+
...request.options,
|
|
98
|
+
abortSignal: abortController.signal,
|
|
99
|
+
};
|
|
100
|
+
let result = '';
|
|
101
|
+
const messages = [];
|
|
102
|
+
// Execute with streaming
|
|
103
|
+
for await (const message of provider.execute(request.prompt, options)) {
|
|
104
|
+
execution.messages.push(message);
|
|
105
|
+
// Emit message events
|
|
106
|
+
this.emit('executionMessage', {
|
|
107
|
+
executionId,
|
|
108
|
+
message,
|
|
109
|
+
});
|
|
110
|
+
// Collect assistant messages
|
|
111
|
+
if (message.type === 'assistant') {
|
|
112
|
+
const content = message.content;
|
|
113
|
+
messages.push(content);
|
|
114
|
+
// Emit update for UI streaming
|
|
115
|
+
this.emit('executionUpdate', {
|
|
116
|
+
executionId,
|
|
117
|
+
status: execution.status,
|
|
118
|
+
message,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// Handle result
|
|
122
|
+
if (message.type === 'result') {
|
|
123
|
+
const resultMsg = message;
|
|
124
|
+
if (resultMsg.success) {
|
|
125
|
+
result = resultMsg.result || messages.join('\n');
|
|
126
|
+
execution.result = result;
|
|
127
|
+
execution.usage = resultMsg.usage;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
throw new Error(resultMsg.error || 'Execution failed');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Mark as completed
|
|
135
|
+
execution.status = 'completed';
|
|
136
|
+
execution.endTime = new Date().toISOString();
|
|
137
|
+
clearTimeout(timeoutId);
|
|
138
|
+
// Emit completion event
|
|
139
|
+
this.emit('executionCompleted', {
|
|
140
|
+
executionId,
|
|
141
|
+
result,
|
|
142
|
+
usage: execution.usage,
|
|
143
|
+
});
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
clearTimeout(timeoutId);
|
|
148
|
+
// Handle cancellation
|
|
149
|
+
if (abortController.signal.aborted) {
|
|
150
|
+
execution.status = 'cancelled';
|
|
151
|
+
execution.error = 'Execution cancelled';
|
|
152
|
+
this.emit('executionCancelled', { executionId });
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
execution.status = 'failed';
|
|
156
|
+
execution.error = error instanceof Error ? error.message : String(error);
|
|
157
|
+
this.emit('executionFailed', {
|
|
158
|
+
executionId,
|
|
159
|
+
error: execution.error,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
execution.endTime = new Date().toISOString();
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get execution status
|
|
168
|
+
*/
|
|
169
|
+
getExecutionStatus(executionId) {
|
|
170
|
+
const execution = this.executions.get(executionId);
|
|
171
|
+
if (!execution)
|
|
172
|
+
return null;
|
|
173
|
+
// Return copy without internal fields
|
|
174
|
+
const { abortController, ...publicState } = execution;
|
|
175
|
+
return publicState;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get execution messages
|
|
179
|
+
*/
|
|
180
|
+
getExecutionMessages(executionId) {
|
|
181
|
+
const execution = this.executions.get(executionId);
|
|
182
|
+
return execution ? [...execution.messages] : [];
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Stop an execution
|
|
186
|
+
*/
|
|
187
|
+
async stopExecution(executionId) {
|
|
188
|
+
const execution = this.executions.get(executionId);
|
|
189
|
+
if (!execution) {
|
|
190
|
+
throw new Error(`Execution ${executionId} not found`);
|
|
191
|
+
}
|
|
192
|
+
if (execution.status !== 'running') {
|
|
193
|
+
throw new Error(`Execution ${executionId} is not running`);
|
|
194
|
+
}
|
|
195
|
+
if (execution.abortController) {
|
|
196
|
+
execution.abortController.abort();
|
|
197
|
+
execution.status = 'cancelled';
|
|
198
|
+
execution.endTime = new Date().toISOString();
|
|
199
|
+
this.emit('executionCancelled', { executionId });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get all executions
|
|
204
|
+
*/
|
|
205
|
+
getAllExecutions() {
|
|
206
|
+
return Array.from(this.executions.values()).map((e) => {
|
|
207
|
+
const { abortController, ...publicState } = e;
|
|
208
|
+
return publicState;
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Clear completed executions
|
|
213
|
+
*/
|
|
214
|
+
clearCompletedExecutions() {
|
|
215
|
+
let cleared = 0;
|
|
216
|
+
for (const [id, execution] of this.executions) {
|
|
217
|
+
if (['completed', 'failed', 'cancelled'].includes(execution.status)) {
|
|
218
|
+
this.executions.delete(id);
|
|
219
|
+
cleared++;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return cleared;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Validate all providers
|
|
226
|
+
*/
|
|
227
|
+
async validateProviders() {
|
|
228
|
+
const results = new Map();
|
|
229
|
+
for (const [name, provider] of this.providers) {
|
|
230
|
+
try {
|
|
231
|
+
const status = await provider.validateSetup();
|
|
232
|
+
results.set(name, status);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
results.set(name, {
|
|
236
|
+
available: false,
|
|
237
|
+
error: error instanceof Error ? error.message : String(error),
|
|
238
|
+
models: [],
|
|
239
|
+
capabilities: provider.getCapabilities(),
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return results;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get available models from all providers
|
|
247
|
+
*/
|
|
248
|
+
async getAvailableModels() {
|
|
249
|
+
const models = [];
|
|
250
|
+
for (const [name, provider] of this.providers) {
|
|
251
|
+
try {
|
|
252
|
+
const providerModels = await provider.detectAvailableModels();
|
|
253
|
+
models.push(...providerModels);
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
log.warn(`Failed to get models from provider ${name}`, error, 'core-agent-service');
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return models;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Generate execution ID
|
|
263
|
+
*/
|
|
264
|
+
generateExecutionId() {
|
|
265
|
+
return generateId('exec');
|
|
266
|
+
}
|
|
267
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function parseImprovementResult(result: string, originalData: {
|
|
2
|
+
title: string;
|
|
3
|
+
type: string;
|
|
4
|
+
priority: string;
|
|
5
|
+
content: string;
|
|
6
|
+
}): {
|
|
7
|
+
type: string;
|
|
8
|
+
priority: string;
|
|
9
|
+
content: string;
|
|
10
|
+
title?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function parseReviewResult(result: string): {
|
|
13
|
+
reviewSummary: string;
|
|
14
|
+
recommendations: string[];
|
|
15
|
+
qualityScore: number;
|
|
16
|
+
};
|