@anastops/adapters 0.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 (49) hide show
  1. package/dist/aider/aider-adapter.d.ts +25 -0
  2. package/dist/aider/aider-adapter.d.ts.map +1 -0
  3. package/dist/aider/aider-adapter.js +99 -0
  4. package/dist/aider/aider-adapter.js.map +1 -0
  5. package/dist/base/base-adapter.d.ts +113 -0
  6. package/dist/base/base-adapter.d.ts.map +1 -0
  7. package/dist/base/base-adapter.js +227 -0
  8. package/dist/base/base-adapter.js.map +1 -0
  9. package/dist/base/detached-exec.d.ts +38 -0
  10. package/dist/base/detached-exec.d.ts.map +1 -0
  11. package/dist/base/detached-exec.js +146 -0
  12. package/dist/base/detached-exec.js.map +1 -0
  13. package/dist/claude/claude-adapter.d.ts +65 -0
  14. package/dist/claude/claude-adapter.d.ts.map +1 -0
  15. package/dist/claude/claude-adapter.js +364 -0
  16. package/dist/claude/claude-adapter.js.map +1 -0
  17. package/dist/codex/codex-adapter.d.ts +33 -0
  18. package/dist/codex/codex-adapter.d.ts.map +1 -0
  19. package/dist/codex/codex-adapter.js +108 -0
  20. package/dist/codex/codex-adapter.js.map +1 -0
  21. package/dist/copilot/copilot-adapter.d.ts +26 -0
  22. package/dist/copilot/copilot-adapter.d.ts.map +1 -0
  23. package/dist/copilot/copilot-adapter.js +92 -0
  24. package/dist/copilot/copilot-adapter.js.map +1 -0
  25. package/dist/cursor/cursor-adapter.d.ts +33 -0
  26. package/dist/cursor/cursor-adapter.d.ts.map +1 -0
  27. package/dist/cursor/cursor-adapter.js +120 -0
  28. package/dist/cursor/cursor-adapter.js.map +1 -0
  29. package/dist/gemini/gemini-adapter.d.ts +33 -0
  30. package/dist/gemini/gemini-adapter.d.ts.map +1 -0
  31. package/dist/gemini/gemini-adapter.js +111 -0
  32. package/dist/gemini/gemini-adapter.js.map +1 -0
  33. package/dist/grok/grok-adapter.d.ts +32 -0
  34. package/dist/grok/grok-adapter.d.ts.map +1 -0
  35. package/dist/grok/grok-adapter.js +101 -0
  36. package/dist/grok/grok-adapter.js.map +1 -0
  37. package/dist/index.d.ts +21 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +22 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/local/local-adapter.d.ts +91 -0
  42. package/dist/local/local-adapter.d.ts.map +1 -0
  43. package/dist/local/local-adapter.js +165 -0
  44. package/dist/local/local-adapter.js.map +1 -0
  45. package/dist/registry.d.ts +57 -0
  46. package/dist/registry.d.ts.map +1 -0
  47. package/dist/registry.js +152 -0
  48. package/dist/registry.js.map +1 -0
  49. package/package.json +65 -0
@@ -0,0 +1,101 @@
1
+ /**
2
+ * GrokAdapter - xAI Grok CLI adapter
3
+ *
4
+ * Integrates with xAI's Grok for AI assistance.
5
+ * Uses `-p, --prompt` for headless mode execution.
6
+ */
7
+ import { BaseAdapter } from '../base/base-adapter.js';
8
+ import { detachedExec } from '../base/detached-exec.js';
9
+ export class GrokAdapter extends BaseAdapter {
10
+ type = 'grok';
11
+ name = 'xAI Grok';
12
+ constructor(config) {
13
+ super({
14
+ command: '/Users/yishai.tamir/.nvm/versions/node/v20.19.4/bin/grok',
15
+ defaultArgs: [],
16
+ defaultTimeout: 600000, // 10 minutes
17
+ useDetachedExec: true,
18
+ ...config,
19
+ });
20
+ }
21
+ isAuthenticated() {
22
+ return Promise.resolve(process.env['GROK_API_KEY'] !== undefined || process.env['XAI_API_KEY'] !== undefined);
23
+ }
24
+ /**
25
+ * Execute using Grok CLI with --prompt for headless mode
26
+ */
27
+ async execute(request, options) {
28
+ const startTime = Date.now();
29
+ const cwd = options?.workingDir ?? request.working_dir ?? this.config.workingDir ?? process.cwd();
30
+ const timeout = options?.timeout ?? request.timeout ?? this.config.defaultTimeout ?? 600000;
31
+ // Build CLI arguments for headless mode
32
+ const args = [
33
+ '--prompt', request.prompt, // Headless mode
34
+ '--directory', cwd,
35
+ ];
36
+ // Model selection
37
+ const model = request.model ?? this.getDefaultModel();
38
+ if (model !== 'grok-default') {
39
+ args.push('--model', model);
40
+ }
41
+ // Execute with detached process
42
+ const result = await detachedExec(this.config.command, args, {
43
+ cwd,
44
+ timeout,
45
+ env: process.env,
46
+ signal: options?.signal,
47
+ });
48
+ if (result.failed) {
49
+ const errorDetails = [
50
+ `Exit code: ${result.exitCode}`,
51
+ `Stdout: ${result.stdout.slice(0, 500) || '(empty)'}`,
52
+ `Stderr: ${result.stderr.slice(0, 500) || '(empty)'}`,
53
+ ].join(' | ');
54
+ throw new Error(`Grok CLI failed: ${errorDetails}`);
55
+ }
56
+ const latencyMs = Date.now() - startTime;
57
+ const content = result.stdout.trim();
58
+ const usage = this.estimateUsage(request.prompt, content);
59
+ return {
60
+ content: content || 'Task completed',
61
+ model,
62
+ usage,
63
+ finish_reason: 'stop',
64
+ metadata: {
65
+ latency_ms: latencyMs,
66
+ provider: this.type,
67
+ exit_code: result.exitCode,
68
+ },
69
+ };
70
+ }
71
+ buildArgs(_request) {
72
+ // Not used - we override execute() directly
73
+ return [];
74
+ }
75
+ parseOutput(output) {
76
+ return output.trim();
77
+ }
78
+ getDefaultModel() {
79
+ return 'grok-4-latest';
80
+ }
81
+ parseVersion(output) {
82
+ const match = /(\d+\.\d+\.\d+)/.exec(output);
83
+ return match?.[1] ?? output.trim();
84
+ }
85
+ getAvailableModels() {
86
+ return ['grok-4-latest', 'grok-code-fast-1', 'grok-2'];
87
+ }
88
+ supportsStreaming() {
89
+ return true;
90
+ }
91
+ getContextWindow() {
92
+ return 128000;
93
+ }
94
+ getCostPer1kInput() {
95
+ return 0.005;
96
+ }
97
+ getCostPer1kOutput() {
98
+ return 0.015;
99
+ }
100
+ }
101
+ //# sourceMappingURL=grok-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok-adapter.js","sourceRoot":"","sources":["../../src/grok/grok-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @anastops/adapters
3
+ *
4
+ * AI provider adapters for Anastops
5
+ * Supports: Claude, Cursor, Codex, Gemini, Grok, Copilot, Aider
6
+ */
7
+ export { BaseAdapter } from './base/base-adapter.js';
8
+ export type { AIProviderAdapter, AdapterConfig, ExecuteOptions } from './base/base-adapter.js';
9
+ export { detachedExec } from './base/detached-exec.js';
10
+ export type { DetachedExecOptions, DetachedExecResult } from './base/detached-exec.js';
11
+ export { ClaudeAdapter } from './claude/claude-adapter.js';
12
+ export { CursorAdapter } from './cursor/cursor-adapter.js';
13
+ export { CodexAdapter } from './codex/codex-adapter.js';
14
+ export { GeminiAdapter } from './gemini/gemini-adapter.js';
15
+ export { GrokAdapter } from './grok/grok-adapter.js';
16
+ export { CopilotAdapter } from './copilot/copilot-adapter.js';
17
+ export { AiderAdapter } from './aider/aider-adapter.js';
18
+ export { LocalAdapter } from './local/local-adapter.js';
19
+ export { AdapterRegistry, getAdapter, listAdapters } from './registry.js';
20
+ export type { ProviderType, AIRequest, AIResponse, AIChunk, ProviderCapabilities, HealthStatus, } from '@anastops/core';
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG/F,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGvF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG1E,YAAY,EACV,YAAY,EACZ,SAAS,EACT,UAAU,EACV,OAAO,EACP,oBAAoB,EACpB,YAAY,GACb,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @anastops/adapters
3
+ *
4
+ * AI provider adapters for Anastops
5
+ * Supports: Claude, Cursor, Codex, Gemini, Grok, Copilot, Aider
6
+ */
7
+ // Base adapter
8
+ export { BaseAdapter } from './base/base-adapter.js';
9
+ // Detached process execution utility (for running CLI without SIGTERM from Cursor)
10
+ export { detachedExec } from './base/detached-exec.js';
11
+ // Provider adapters
12
+ export { ClaudeAdapter } from './claude/claude-adapter.js';
13
+ export { CursorAdapter } from './cursor/cursor-adapter.js';
14
+ export { CodexAdapter } from './codex/codex-adapter.js';
15
+ export { GeminiAdapter } from './gemini/gemini-adapter.js';
16
+ export { GrokAdapter } from './grok/grok-adapter.js';
17
+ export { CopilotAdapter } from './copilot/copilot-adapter.js';
18
+ export { AiderAdapter } from './aider/aider-adapter.js';
19
+ export { LocalAdapter } from './local/local-adapter.js';
20
+ // Adapter registry
21
+ export { AdapterRegistry, getAdapter, listAdapters } from './registry.js';
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,mFAAmF;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * LocalAdapter - In-memory local execution adapter
3
+ *
4
+ * Provides simple in-memory execution for Tier 1 tasks:
5
+ * - Basic text transformations
6
+ * - Simple formatting operations
7
+ * - Variable renaming
8
+ * - Lightweight operations that don't require external CLIs
9
+ *
10
+ * No external dependencies or authentication required.
11
+ */
12
+ import type { AIRequest, ProviderType, AIResponse } from '@anastops/core';
13
+ import { BaseAdapter, type AdapterConfig, type ExecuteOptions } from '../base/base-adapter.js';
14
+ export declare class LocalAdapter extends BaseAdapter {
15
+ readonly type: ProviderType;
16
+ readonly name = "Local (In-Memory)";
17
+ constructor(config?: Partial<AdapterConfig>);
18
+ /**
19
+ * Local execution always authenticated (no auth needed)
20
+ */
21
+ isAuthenticated(): Promise<boolean>;
22
+ /**
23
+ * Override execute for in-memory processing
24
+ * No CLI execution - pure JavaScript/TypeScript transforms
25
+ */
26
+ execute(request: AIRequest, _options?: ExecuteOptions): Promise<AIResponse>;
27
+ /**
28
+ * Process prompt locally in-memory
29
+ * MVP: Simple echo with prefix
30
+ * Future: Implement actual transforms
31
+ */
32
+ private processLocally;
33
+ /**
34
+ * Build args - not used for local execution
35
+ */
36
+ protected buildArgs(): string[];
37
+ /**
38
+ * Parse output - identity function for local
39
+ */
40
+ protected parseOutput(output: string): string;
41
+ /**
42
+ * Default model name for local execution
43
+ */
44
+ protected getDefaultModel(): string;
45
+ /**
46
+ * Parse version - local has no version
47
+ */
48
+ protected parseVersion(): string;
49
+ /**
50
+ * Available models for local execution
51
+ */
52
+ protected getAvailableModels(): string[];
53
+ /**
54
+ * Local execution has no external tools
55
+ */
56
+ protected getAvailableTools(): string[];
57
+ /**
58
+ * Local execution doesn't support permissions
59
+ */
60
+ protected supportsPermissions(): boolean;
61
+ /**
62
+ * Available modes for local execution
63
+ */
64
+ protected getAvailableModes(): string[];
65
+ /**
66
+ * Local execution doesn't support streaming
67
+ */
68
+ protected supportsStreaming(): boolean;
69
+ /**
70
+ * Context window for local execution
71
+ * Smaller than external providers
72
+ */
73
+ protected getContextWindow(): number;
74
+ /**
75
+ * Local execution is free
76
+ */
77
+ protected getCostPer1kInput(): number;
78
+ /**
79
+ * Local execution is free
80
+ */
81
+ protected getCostPer1kOutput(): number;
82
+ /**
83
+ * Override isInstalled - local is always "installed"
84
+ */
85
+ isInstalled(): Promise<boolean>;
86
+ /**
87
+ * Override getVersion - return static version
88
+ */
89
+ getVersion(): Promise<string | null>;
90
+ }
91
+ //# sourceMappingURL=local-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-adapter.d.ts","sourceRoot":"","sources":["../../src/local/local-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE1E,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE/F,qBAAa,YAAa,SAAQ,WAAW;IAC3C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAW;IACtC,QAAQ,CAAC,IAAI,uBAAuB;gBAExB,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAS3C;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAIzC;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IAkCjF;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,SAAS,CAAC,SAAS,IAAI,MAAM,EAAE;IAI/B;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI7C;;OAEG;IACH,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhC;;OAEG;IACH,SAAS,CAAC,kBAAkB,IAAI,MAAM,EAAE;IAIxC;;OAEG;IACH,SAAS,CAAC,iBAAiB,IAAI,MAAM,EAAE;IAIvC;;OAEG;IACH,SAAS,CAAC,mBAAmB,IAAI,OAAO;IAIxC;;OAEG;IACH,SAAS,CAAC,iBAAiB,IAAI,MAAM,EAAE;IAIvC;;OAEG;IACH,SAAS,CAAC,iBAAiB,IAAI,OAAO;IAItC;;;OAGG;IACH,SAAS,CAAC,gBAAgB,IAAI,MAAM;IAIpC;;OAEG;IACH,SAAS,CAAC,iBAAiB,IAAI,MAAM;IAIrC;;OAEG;IACH,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAItC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAG3C"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * LocalAdapter - In-memory local execution adapter
3
+ *
4
+ * Provides simple in-memory execution for Tier 1 tasks:
5
+ * - Basic text transformations
6
+ * - Simple formatting operations
7
+ * - Variable renaming
8
+ * - Lightweight operations that don't require external CLIs
9
+ *
10
+ * No external dependencies or authentication required.
11
+ */
12
+ import { BaseAdapter } from '../base/base-adapter.js';
13
+ export class LocalAdapter extends BaseAdapter {
14
+ type = 'local';
15
+ name = 'Local (In-Memory)';
16
+ constructor(config) {
17
+ super({
18
+ command: 'echo', // Dummy command, not actually used
19
+ defaultArgs: [],
20
+ defaultTimeout: 5000, // Fast timeout for local execution
21
+ ...config,
22
+ });
23
+ }
24
+ /**
25
+ * Local execution always authenticated (no auth needed)
26
+ */
27
+ async isAuthenticated() {
28
+ return true;
29
+ }
30
+ /**
31
+ * Override execute for in-memory processing
32
+ * No CLI execution - pure JavaScript/TypeScript transforms
33
+ */
34
+ async execute(request, _options) {
35
+ const startTime = Date.now();
36
+ try {
37
+ // Simple in-memory execution for tier 1 tasks
38
+ const { prompt } = request;
39
+ // For MVP: Echo back with prefix
40
+ // Future: Implement actual WASM/JS transforms for:
41
+ // - Code formatting
42
+ // - Variable renaming
43
+ // - Simple refactoring
44
+ const content = this.processLocally(prompt);
45
+ const latencyMs = Date.now() - startTime;
46
+ const usage = this.estimateUsage(request.prompt, content);
47
+ return {
48
+ content,
49
+ model: request.model ?? this.getDefaultModel(),
50
+ usage,
51
+ finish_reason: 'stop',
52
+ metadata: {
53
+ latency_ms: latencyMs,
54
+ provider: this.type,
55
+ execution_mode: 'in-memory',
56
+ },
57
+ };
58
+ }
59
+ catch (error) {
60
+ const errorMsg = error instanceof Error ? error.message : String(error);
61
+ throw new Error(`Local execution failed: ${errorMsg}`);
62
+ }
63
+ }
64
+ /**
65
+ * Process prompt locally in-memory
66
+ * MVP: Simple echo with prefix
67
+ * Future: Implement actual transforms
68
+ */
69
+ processLocally(prompt) {
70
+ // MVP implementation: Echo back with prefix
71
+ // This satisfies Tier 1 routing requirements
72
+ return `Local execution: ${prompt}`;
73
+ // Future implementations could include:
74
+ // - Code formatting via Prettier/ESLint
75
+ // - Variable renaming via AST transforms
76
+ // - Simple text transformations
77
+ // - Template expansions
78
+ }
79
+ /**
80
+ * Build args - not used for local execution
81
+ */
82
+ buildArgs() {
83
+ return [];
84
+ }
85
+ /**
86
+ * Parse output - identity function for local
87
+ */
88
+ parseOutput(output) {
89
+ return output.trim();
90
+ }
91
+ /**
92
+ * Default model name for local execution
93
+ */
94
+ getDefaultModel() {
95
+ return 'agent-booster';
96
+ }
97
+ /**
98
+ * Parse version - local has no version
99
+ */
100
+ parseVersion() {
101
+ return '1.0.0-local';
102
+ }
103
+ /**
104
+ * Available models for local execution
105
+ */
106
+ getAvailableModels() {
107
+ return ['agent-booster'];
108
+ }
109
+ /**
110
+ * Local execution has no external tools
111
+ */
112
+ getAvailableTools() {
113
+ return [];
114
+ }
115
+ /**
116
+ * Local execution doesn't support permissions
117
+ */
118
+ supportsPermissions() {
119
+ return false;
120
+ }
121
+ /**
122
+ * Available modes for local execution
123
+ */
124
+ getAvailableModes() {
125
+ return ['transform', 'format', 'rename'];
126
+ }
127
+ /**
128
+ * Local execution doesn't support streaming
129
+ */
130
+ supportsStreaming() {
131
+ return false;
132
+ }
133
+ /**
134
+ * Context window for local execution
135
+ * Smaller than external providers
136
+ */
137
+ getContextWindow() {
138
+ return 4096;
139
+ }
140
+ /**
141
+ * Local execution is free
142
+ */
143
+ getCostPer1kInput() {
144
+ return 0;
145
+ }
146
+ /**
147
+ * Local execution is free
148
+ */
149
+ getCostPer1kOutput() {
150
+ return 0;
151
+ }
152
+ /**
153
+ * Override isInstalled - local is always "installed"
154
+ */
155
+ async isInstalled() {
156
+ return true;
157
+ }
158
+ /**
159
+ * Override getVersion - return static version
160
+ */
161
+ async getVersion() {
162
+ return '1.0.0-local';
163
+ }
164
+ }
165
+ //# sourceMappingURL=local-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-adapter.js","sourceRoot":"","sources":["../../src/local/local-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Adapter Registry - Central registry for all provider adapters
3
+ */
4
+ import type { ProviderType, ProviderCapabilities } from '@anastops/core';
5
+ import type { AIProviderAdapter } from './base/base-adapter.js';
6
+ export declare class AdapterRegistry {
7
+ private adapters;
8
+ private static instance;
9
+ private constructor();
10
+ static getInstance(): AdapterRegistry;
11
+ /**
12
+ * Register an adapter
13
+ */
14
+ register(adapter: AIProviderAdapter): void;
15
+ /**
16
+ * Get an adapter by type
17
+ */
18
+ get(type: ProviderType): AIProviderAdapter | undefined;
19
+ /**
20
+ * List all registered adapters
21
+ */
22
+ list(): AIProviderAdapter[];
23
+ /**
24
+ * List all adapter types
25
+ */
26
+ listTypes(): ProviderType[];
27
+ /**
28
+ * Get capabilities for all adapters
29
+ */
30
+ getAllCapabilities(): Promise<Map<ProviderType, ProviderCapabilities>>;
31
+ /**
32
+ * Health check timeout in milliseconds
33
+ */
34
+ private static readonly HEALTH_CHECK_TIMEOUT;
35
+ /**
36
+ * Get all healthy adapters with timeout protection
37
+ */
38
+ getHealthyAdapters(): Promise<AIProviderAdapter[]>;
39
+ /**
40
+ * Find best adapter for a task based on requirements
41
+ */
42
+ findBestAdapter(requirements: {
43
+ minContextWindow?: number;
44
+ needsStreaming?: boolean;
45
+ maxCostPer1k?: number;
46
+ preferredType?: ProviderType;
47
+ }): Promise<AIProviderAdapter | null>;
48
+ }
49
+ /**
50
+ * Get an adapter by type (convenience function)
51
+ */
52
+ export declare function getAdapter(type: ProviderType): AIProviderAdapter | undefined;
53
+ /**
54
+ * List all adapters (convenience function)
55
+ */
56
+ export declare function listAdapters(): AIProviderAdapter[];
57
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAShE,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAmD;IACnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgC;IAEvD,OAAO;IAYP,MAAM,CAAC,WAAW,IAAI,eAAe;IAOrC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAI1C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,iBAAiB,GAAG,SAAS;IAItD;;OAEG;IACH,IAAI,IAAI,iBAAiB,EAAE;IAI3B;;OAEG;IACH,SAAS,IAAI,YAAY,EAAE;IAI3B;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;IAW5E;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAEpD;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAqBxD;;OAEG;IACG,eAAe,CAAC,YAAY,EAAE;QAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,YAAY,CAAC;KAC9B,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CAkEtC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,iBAAiB,GAAG,SAAS,CAE5E;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,iBAAiB,EAAE,CAElD"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Adapter Registry - Central registry for all provider adapters
3
+ */
4
+ import { AiderAdapter } from './aider/aider-adapter.js';
5
+ import { ClaudeAdapter } from './claude/claude-adapter.js';
6
+ import { CodexAdapter } from './codex/codex-adapter.js';
7
+ import { CopilotAdapter } from './copilot/copilot-adapter.js';
8
+ import { CursorAdapter } from './cursor/cursor-adapter.js';
9
+ import { GeminiAdapter } from './gemini/gemini-adapter.js';
10
+ import { GrokAdapter } from './grok/grok-adapter.js';
11
+ import { LocalAdapter } from './local/local-adapter.js';
12
+ export class AdapterRegistry {
13
+ adapters = new Map();
14
+ static instance = null;
15
+ constructor() {
16
+ // Register default adapters
17
+ this.register(new ClaudeAdapter());
18
+ this.register(new CursorAdapter());
19
+ this.register(new CodexAdapter());
20
+ this.register(new GeminiAdapter());
21
+ this.register(new GrokAdapter());
22
+ this.register(new CopilotAdapter());
23
+ this.register(new AiderAdapter());
24
+ this.register(new LocalAdapter());
25
+ }
26
+ static getInstance() {
27
+ if (AdapterRegistry.instance === null) {
28
+ AdapterRegistry.instance = new AdapterRegistry();
29
+ }
30
+ return AdapterRegistry.instance;
31
+ }
32
+ /**
33
+ * Register an adapter
34
+ */
35
+ register(adapter) {
36
+ this.adapters.set(adapter.type, adapter);
37
+ }
38
+ /**
39
+ * Get an adapter by type
40
+ */
41
+ get(type) {
42
+ return this.adapters.get(type);
43
+ }
44
+ /**
45
+ * List all registered adapters
46
+ */
47
+ list() {
48
+ return Array.from(this.adapters.values());
49
+ }
50
+ /**
51
+ * List all adapter types
52
+ */
53
+ listTypes() {
54
+ return Array.from(this.adapters.keys());
55
+ }
56
+ /**
57
+ * Get capabilities for all adapters
58
+ */
59
+ async getAllCapabilities() {
60
+ const capabilities = new Map();
61
+ for (const [type, adapter] of this.adapters) {
62
+ const caps = await adapter.getCapabilities();
63
+ capabilities.set(type, caps);
64
+ }
65
+ return capabilities;
66
+ }
67
+ /**
68
+ * Health check timeout in milliseconds
69
+ */
70
+ static HEALTH_CHECK_TIMEOUT = 5000;
71
+ /**
72
+ * Get all healthy adapters with timeout protection
73
+ */
74
+ async getHealthyAdapters() {
75
+ const adaptersArray = Array.from(this.adapters.values());
76
+ const results = await Promise.allSettled(adaptersArray.map(async (adapter) => {
77
+ const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Health check timeout')), AdapterRegistry.HEALTH_CHECK_TIMEOUT));
78
+ const status = await Promise.race([adapter.healthCheck(), timeoutPromise]);
79
+ return { adapter, healthy: status.healthy };
80
+ }));
81
+ return results
82
+ .filter((result) => result.status === 'fulfilled' && result.value.healthy)
83
+ .map((result) => result.value.adapter);
84
+ }
85
+ /**
86
+ * Find best adapter for a task based on requirements
87
+ */
88
+ async findBestAdapter(requirements) {
89
+ // If preferred type is specified and healthy, use it
90
+ if (requirements.preferredType !== undefined) {
91
+ const preferred = this.adapters.get(requirements.preferredType);
92
+ if (preferred !== undefined) {
93
+ const status = await preferred.healthCheck();
94
+ if (status.healthy) {
95
+ return preferred;
96
+ }
97
+ }
98
+ }
99
+ // Find matching adapters
100
+ const candidates = [];
101
+ for (const adapter of this.adapters.values()) {
102
+ const [status, caps] = await Promise.all([
103
+ adapter.healthCheck(),
104
+ adapter.getCapabilities(),
105
+ ]);
106
+ if (!status.healthy || !caps.installed || !caps.authenticated) {
107
+ continue;
108
+ }
109
+ // Check requirements
110
+ if (requirements.minContextWindow !== undefined &&
111
+ caps.context_window < requirements.minContextWindow) {
112
+ continue;
113
+ }
114
+ if (requirements.needsStreaming === true && !caps.streaming) {
115
+ continue;
116
+ }
117
+ if (requirements.maxCostPer1k !== undefined &&
118
+ caps.cost_per_1k_input > requirements.maxCostPer1k) {
119
+ continue;
120
+ }
121
+ candidates.push(adapter);
122
+ }
123
+ if (candidates.length === 0) {
124
+ return null;
125
+ }
126
+ // Return cheapest option by default
127
+ const caps = await Promise.all(candidates.map((a) => a.getCapabilities()));
128
+ let bestIdx = 0;
129
+ let bestCost = caps[0]?.cost_per_1k_input ?? Infinity;
130
+ for (let i = 1; i < caps.length; i++) {
131
+ const cost = caps[i]?.cost_per_1k_input ?? Infinity;
132
+ if (cost < bestCost) {
133
+ bestCost = cost;
134
+ bestIdx = i;
135
+ }
136
+ }
137
+ return candidates[bestIdx] ?? null;
138
+ }
139
+ }
140
+ /**
141
+ * Get an adapter by type (convenience function)
142
+ */
143
+ export function getAdapter(type) {
144
+ return AdapterRegistry.getInstance().get(type);
145
+ }
146
+ /**
147
+ * List all adapters (convenience function)
148
+ */
149
+ export function listAdapters() {
150
+ return AdapterRegistry.getInstance().list();
151
+ }
152
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,OAAO,eAAe;IAClB,QAAQ,GAAyC,IAAI,GAAG,EAAE,CAAC;IAC3D,MAAM,CAAC,QAAQ,GAA2B,IAAI,CAAC;IAEvD;QACE,4BAA4B;QAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,eAAe,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtC,eAAe,CAAC,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACnD,CAAC;QACD,OAAO,eAAe,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAA0B;QACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAkB;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAsC,CAAC;QAEnE,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC;YAC7C,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,MAAM,CAAU,oBAAoB,GAAG,IAAI,CAAC;IAEpD;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAClC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CACtD,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAClG,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;YAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9C,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,MAAM,EAAsF,EAAE,CACrG,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CACtD;aACA,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,YAKrB;QACC,qDAAqD;QACrD,IAAI,YAAY,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;YAChE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;gBAC7C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,MAAM,UAAU,GAAwB,EAAE,CAAC;QAE3C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvC,OAAO,CAAC,WAAW,EAAE;gBACrB,OAAO,CAAC,eAAe,EAAE;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC9D,SAAS;YACX,CAAC;YAED,qBAAqB;YACrB,IACE,YAAY,CAAC,gBAAgB,KAAK,SAAS;gBAC3C,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,gBAAgB,EACnD,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,YAAY,CAAC,cAAc,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC5D,SAAS;YACX,CAAC;YAED,IACE,YAAY,CAAC,YAAY,KAAK,SAAS;gBACvC,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC,YAAY,EAClD,CAAC;gBACD,SAAS;YACX,CAAC;YAED,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oCAAoC;QACpC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QAC3E,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,iBAAiB,IAAI,QAAQ,CAAC;QAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,iBAAiB,IAAI,QAAQ,CAAC;YACpD,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACpB,QAAQ,GAAG,IAAI,CAAC;gBAChB,OAAO,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;;AAGH;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAkB;IAC3C,OAAO,eAAe,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,eAAe,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC"}