@almadar/integrations 1.0.13 → 1.0.15
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.d.ts +27 -2
- package/dist/index.js +164 -35
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
package/dist/index.d.ts
CHANGED
|
@@ -101,12 +101,22 @@ declare class EmailIntegration extends BaseIntegration {
|
|
|
101
101
|
|
|
102
102
|
/**
|
|
103
103
|
* LLM integration using @almadar/llm
|
|
104
|
+
*
|
|
105
|
+
* Provides 4 actions:
|
|
106
|
+
* - generate: Generate text content from a prompt
|
|
107
|
+
* - classify: Classify text into predefined categories
|
|
108
|
+
* - extract: Extract structured data from text using a schema
|
|
109
|
+
* - summarize: Summarize long text content
|
|
104
110
|
*/
|
|
105
111
|
declare class LLMIntegration extends BaseIntegration {
|
|
106
112
|
private client;
|
|
107
113
|
private provider;
|
|
108
114
|
constructor(config: IntegrationConfig);
|
|
109
|
-
|
|
115
|
+
/**
|
|
116
|
+
* Lazily create client — avoids throwing on construction if API key is missing.
|
|
117
|
+
* The client will throw a clear error when actually used without a key.
|
|
118
|
+
*/
|
|
119
|
+
private getClient;
|
|
110
120
|
execute(action: string, params: Record<string, unknown>): Promise<IntegrationResult>;
|
|
111
121
|
private generate;
|
|
112
122
|
private classify;
|
|
@@ -186,4 +196,19 @@ declare class GitHubIntegration extends BaseIntegration {
|
|
|
186
196
|
private getAPIConfig;
|
|
187
197
|
}
|
|
188
198
|
|
|
189
|
-
|
|
199
|
+
/**
|
|
200
|
+
* CLI integration for Almadar CLI commands.
|
|
201
|
+
*
|
|
202
|
+
* Wraps `@almadar/cli` commands (validate, compile) as integration actions.
|
|
203
|
+
* This runs server-side and executes CLI commands as child processes.
|
|
204
|
+
*
|
|
205
|
+
* Actions:
|
|
206
|
+
* - validate: Validate an orbital schema and return structured results
|
|
207
|
+
*/
|
|
208
|
+
declare class CLIIntegration extends BaseIntegration {
|
|
209
|
+
constructor(config: IntegrationConfig);
|
|
210
|
+
execute(action: string, params: Record<string, unknown>): Promise<IntegrationResult>;
|
|
211
|
+
private validate;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export { BaseIntegration, CLIIntegration, ConsoleLogger, DeepAgentIntegration, EmailIntegration, GitHubIntegration, IntegrationConfig, type IntegrationConstructor, IntegrationErrorCode, IntegrationLogger, IntegrationResult, LLMIntegration, type RetryConfig, StripeIntegration, TwilioIntegration, YouTubeIntegration, getIntegration, getRegisteredIntegrations, isKnownIntegration, registerIntegration, withRetry };
|
package/dist/index.js
CHANGED
|
@@ -4,9 +4,12 @@ import { google } from 'googleapis';
|
|
|
4
4
|
import twilio from 'twilio';
|
|
5
5
|
import sgMail from '@sendgrid/mail';
|
|
6
6
|
import { Resend } from 'resend';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { getAvailableProvider, LLMClient } from '@almadar/llm';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { execSync, spawn } from 'child_process';
|
|
10
|
+
import { mkdtempSync, writeFileSync, rmSync, promises } from 'fs';
|
|
9
11
|
import { join } from 'path';
|
|
12
|
+
import { tmpdir } from 'os';
|
|
10
13
|
|
|
11
14
|
// src/core/logger.ts
|
|
12
15
|
var ConsoleLogger = class {
|
|
@@ -633,24 +636,27 @@ var EmailIntegration = class extends BaseIntegration {
|
|
|
633
636
|
}
|
|
634
637
|
};
|
|
635
638
|
registerIntegration("email", EmailIntegration);
|
|
636
|
-
|
|
637
|
-
// src/integrations/llm/index.ts
|
|
638
639
|
var LLMIntegration = class extends BaseIntegration {
|
|
639
640
|
constructor(config) {
|
|
640
641
|
super(config);
|
|
641
|
-
this.
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
} catch (error) {
|
|
646
|
-
throw new Error(`Failed to initialize LLM client: ${error}`);
|
|
647
|
-
}
|
|
642
|
+
this.client = null;
|
|
643
|
+
const configuredProvider = config.env.PROVIDER;
|
|
644
|
+
this.provider = configuredProvider || getAvailableProvider() || "anthropic";
|
|
645
|
+
this.logger.info(`LLM integration initialized (provider: ${this.provider})`);
|
|
648
646
|
}
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
647
|
+
/**
|
|
648
|
+
* Lazily create client — avoids throwing on construction if API key is missing.
|
|
649
|
+
* The client will throw a clear error when actually used without a key.
|
|
650
|
+
*/
|
|
651
|
+
getClient() {
|
|
652
|
+
if (!this.client) {
|
|
653
|
+
this.client = new LLMClient({
|
|
654
|
+
provider: this.provider,
|
|
655
|
+
temperature: 0.7,
|
|
656
|
+
trackTokens: true
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
return this.client;
|
|
654
660
|
}
|
|
655
661
|
async execute(action, params) {
|
|
656
662
|
const validation = this.validateParams(action, params);
|
|
@@ -667,7 +673,6 @@ var LLMIntegration = class extends BaseIntegration {
|
|
|
667
673
|
};
|
|
668
674
|
}
|
|
669
675
|
const startTime = Date.now();
|
|
670
|
-
let retries = 0;
|
|
671
676
|
try {
|
|
672
677
|
let data;
|
|
673
678
|
switch (action) {
|
|
@@ -689,44 +694,91 @@ var LLMIntegration = class extends BaseIntegration {
|
|
|
689
694
|
return {
|
|
690
695
|
success: true,
|
|
691
696
|
data,
|
|
692
|
-
metadata: this.createMetadata(action, Date.now() - startTime
|
|
697
|
+
metadata: this.createMetadata(action, Date.now() - startTime)
|
|
693
698
|
};
|
|
694
699
|
} catch (error) {
|
|
695
700
|
return this.handleError(action, error);
|
|
696
701
|
}
|
|
697
702
|
}
|
|
698
703
|
async generate(params) {
|
|
699
|
-
const {
|
|
704
|
+
const {
|
|
705
|
+
systemPrompt,
|
|
706
|
+
userPrompt,
|
|
707
|
+
model,
|
|
708
|
+
temperature,
|
|
709
|
+
maxTokens
|
|
710
|
+
} = params;
|
|
700
711
|
this.logger.debug("Generating content", { model, temperature });
|
|
712
|
+
const client = model ? new LLMClient({ provider: this.provider, model, temperature: temperature ?? 0.7 }) : this.getClient();
|
|
713
|
+
const response = await client.callWithMetadata({
|
|
714
|
+
systemPrompt: systemPrompt || "You are a helpful assistant.",
|
|
715
|
+
userPrompt,
|
|
716
|
+
maxTokens: maxTokens ?? 1024,
|
|
717
|
+
temperature,
|
|
718
|
+
skipSchemaValidation: true
|
|
719
|
+
});
|
|
701
720
|
return {
|
|
702
|
-
content:
|
|
703
|
-
usage:
|
|
721
|
+
content: response.data,
|
|
722
|
+
usage: response.usage ? {
|
|
723
|
+
promptTokens: response.usage.promptTokens,
|
|
724
|
+
completionTokens: response.usage.completionTokens,
|
|
725
|
+
totalTokens: response.usage.totalTokens
|
|
726
|
+
} : { tokens: 0 }
|
|
704
727
|
};
|
|
705
728
|
}
|
|
706
729
|
async classify(params) {
|
|
707
730
|
const { text, categories, model } = params;
|
|
708
731
|
this.logger.debug("Classifying text", { categories });
|
|
709
|
-
|
|
710
|
-
category: categories
|
|
711
|
-
confidence: 0.
|
|
712
|
-
reasoning:
|
|
713
|
-
};
|
|
732
|
+
const ClassificationSchema = z.object({
|
|
733
|
+
category: z.enum(categories),
|
|
734
|
+
confidence: z.number().min(0).max(1),
|
|
735
|
+
reasoning: z.string()
|
|
736
|
+
});
|
|
737
|
+
const client = model ? new LLMClient({ provider: this.provider, model, temperature: 0.1 }) : this.getClient();
|
|
738
|
+
const result = await client.call({
|
|
739
|
+
systemPrompt: `You are a text classifier. Classify the given text into one of these categories: ${categories.join(", ")}. Return JSON with: category, confidence (0-1), and reasoning.`,
|
|
740
|
+
userPrompt: text,
|
|
741
|
+
schema: ClassificationSchema,
|
|
742
|
+
temperature: 0.1
|
|
743
|
+
});
|
|
744
|
+
return result;
|
|
714
745
|
}
|
|
715
746
|
async extract(params) {
|
|
716
747
|
const { text, schema, model } = params;
|
|
717
748
|
this.logger.debug("Extracting structured data", { schema });
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
749
|
+
const ExtractSchema = z.record(z.unknown());
|
|
750
|
+
const client = model ? new LLMClient({ provider: this.provider, model, temperature: 0.2 }) : this.getClient();
|
|
751
|
+
const schemaDescription = JSON.stringify(schema, null, 2);
|
|
752
|
+
const result = await client.call({
|
|
753
|
+
systemPrompt: `You are a structured data extractor. Extract data from the given text according to this schema:
|
|
754
|
+
|
|
755
|
+
${schemaDescription}
|
|
756
|
+
|
|
757
|
+
Return ONLY valid JSON matching the schema.`,
|
|
758
|
+
userPrompt: text,
|
|
759
|
+
schema: ExtractSchema,
|
|
760
|
+
temperature: 0.2,
|
|
761
|
+
skipSchemaValidation: true
|
|
762
|
+
});
|
|
763
|
+
return result;
|
|
722
764
|
}
|
|
723
765
|
async summarize(params) {
|
|
724
766
|
const { text, maxLength, style, model } = params;
|
|
725
767
|
this.logger.debug("Summarizing text", { maxLength, style });
|
|
726
|
-
|
|
727
|
-
summary:
|
|
728
|
-
keyPoints:
|
|
729
|
-
};
|
|
768
|
+
const SummarySchema = z.object({
|
|
769
|
+
summary: z.string(),
|
|
770
|
+
keyPoints: z.array(z.string())
|
|
771
|
+
});
|
|
772
|
+
const styleInstructions = style === "bullet" ? "Use bullet points." : style === "detailed" ? "Be thorough and detailed." : "Be concise.";
|
|
773
|
+
const lengthInstructions = maxLength ? `Keep the summary under ${maxLength} words.` : "";
|
|
774
|
+
const client = model ? new LLMClient({ provider: this.provider, model, temperature: 0.3 }) : this.getClient();
|
|
775
|
+
const result = await client.call({
|
|
776
|
+
systemPrompt: `You are a text summarizer. ${styleInstructions} ${lengthInstructions} Return JSON with: summary (string) and keyPoints (array of strings).`,
|
|
777
|
+
userPrompt: text,
|
|
778
|
+
schema: SummarySchema,
|
|
779
|
+
temperature: 0.3
|
|
780
|
+
});
|
|
781
|
+
return result;
|
|
730
782
|
}
|
|
731
783
|
};
|
|
732
784
|
registerIntegration("llm", LLMIntegration);
|
|
@@ -1330,7 +1382,84 @@ var GitHubIntegration = class extends BaseIntegration {
|
|
|
1330
1382
|
}
|
|
1331
1383
|
};
|
|
1332
1384
|
registerIntegration("github", GitHubIntegration);
|
|
1385
|
+
var CLIIntegration = class extends BaseIntegration {
|
|
1386
|
+
constructor(config) {
|
|
1387
|
+
super(config);
|
|
1388
|
+
this.logger.info("CLI integration initialized");
|
|
1389
|
+
}
|
|
1390
|
+
async execute(action, params) {
|
|
1391
|
+
const startTime = Date.now();
|
|
1392
|
+
try {
|
|
1393
|
+
let data;
|
|
1394
|
+
switch (action) {
|
|
1395
|
+
case "validate":
|
|
1396
|
+
data = await this.validate(params);
|
|
1397
|
+
break;
|
|
1398
|
+
default:
|
|
1399
|
+
throw new Error(`Unknown CLI action: ${action}`);
|
|
1400
|
+
}
|
|
1401
|
+
return {
|
|
1402
|
+
success: true,
|
|
1403
|
+
data,
|
|
1404
|
+
metadata: this.createMetadata(action, Date.now() - startTime)
|
|
1405
|
+
};
|
|
1406
|
+
} catch (error) {
|
|
1407
|
+
return this.handleError(action, error);
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1410
|
+
async validate(params) {
|
|
1411
|
+
const { schema } = params;
|
|
1412
|
+
if (!schema || typeof schema !== "string") {
|
|
1413
|
+
throw new Error('validate requires a "schema" parameter (string)');
|
|
1414
|
+
}
|
|
1415
|
+
const tempDir = mkdtempSync(join(tmpdir(), "almadar-validate-"));
|
|
1416
|
+
const schemaPath = join(tempDir, "schema.orb");
|
|
1417
|
+
try {
|
|
1418
|
+
writeFileSync(schemaPath, schema, "utf-8");
|
|
1419
|
+
this.logger.debug("Validating schema", { path: schemaPath });
|
|
1420
|
+
const output = execSync(
|
|
1421
|
+
`npx @almadar/cli validate "${schemaPath}" --format=json`,
|
|
1422
|
+
{
|
|
1423
|
+
encoding: "utf-8",
|
|
1424
|
+
timeout: 3e4,
|
|
1425
|
+
cwd: tempDir,
|
|
1426
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
1427
|
+
}
|
|
1428
|
+
);
|
|
1429
|
+
const result = JSON.parse(output.trim());
|
|
1430
|
+
return {
|
|
1431
|
+
valid: result.valid ?? true,
|
|
1432
|
+
errors: result.errors || [],
|
|
1433
|
+
warnings: result.warnings || [],
|
|
1434
|
+
summary: result.summary || ""
|
|
1435
|
+
};
|
|
1436
|
+
} catch (error) {
|
|
1437
|
+
const execError = error;
|
|
1438
|
+
if (execError.stdout) {
|
|
1439
|
+
try {
|
|
1440
|
+
const result = JSON.parse(execError.stdout.trim());
|
|
1441
|
+
return {
|
|
1442
|
+
valid: false,
|
|
1443
|
+
errors: result.errors || [],
|
|
1444
|
+
warnings: result.warnings || [],
|
|
1445
|
+
summary: result.summary || ""
|
|
1446
|
+
};
|
|
1447
|
+
} catch {
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
throw new Error(
|
|
1451
|
+
`CLI validation failed: ${execError.message || String(error)}`
|
|
1452
|
+
);
|
|
1453
|
+
} finally {
|
|
1454
|
+
try {
|
|
1455
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
1456
|
+
} catch {
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
}
|
|
1460
|
+
};
|
|
1461
|
+
registerIntegration("cli", CLIIntegration);
|
|
1333
1462
|
|
|
1334
|
-
export { BaseIntegration, ConsoleLogger, DeepAgentIntegration, EmailIntegration, GitHubIntegration, IntegrationFactory, LLMIntegration, StripeIntegration, TwilioIntegration, YouTubeIntegration, getIntegration, getRegisteredIntegrations, isKnownIntegration, registerIntegration, validateParams, withRetry };
|
|
1463
|
+
export { BaseIntegration, CLIIntegration, ConsoleLogger, DeepAgentIntegration, EmailIntegration, GitHubIntegration, IntegrationFactory, LLMIntegration, StripeIntegration, TwilioIntegration, YouTubeIntegration, getIntegration, getRegisteredIntegrations, isKnownIntegration, registerIntegration, validateParams, withRetry };
|
|
1335
1464
|
//# sourceMappingURL=index.js.map
|
|
1336
1465
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/logger.ts","../src/core/validation.ts","../src/core/retry.ts","../src/core/BaseIntegration.ts","../src/registry.ts","../src/factory.ts","../src/integrations/stripe/index.ts","../src/integrations/youtube/index.ts","../src/integrations/twilio/index.ts","../src/integrations/email/index.ts","../src/integrations/llm/index.ts","../src/integrations/deepagent/index.ts","../src/types.ts","../src/integrations/github/github-git.ts","../src/integrations/github/github-api.ts","../src/integrations/github/index.ts"],"names":["fs"],"mappings":"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","file":"index.js","sourcesContent":["import { IntegrationLogger } from '../types';\n\n/**\n * Console-based logger implementation\n */\nexport class ConsoleLogger implements IntegrationLogger {\n private level: 'debug' | 'info' | 'warn' | 'error';\n\n constructor(level: 'debug' | 'info' | 'warn' | 'error' = 'info') {\n this.level = level;\n }\n\n debug(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('debug')) {\n console.debug(`[DEBUG] ${message}`, meta || '');\n }\n }\n\n info(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('info')) {\n console.log(`[INFO] ${message}`, meta || '');\n }\n }\n\n warn(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('warn')) {\n console.warn(`[WARN] ${message}`, meta || '');\n }\n }\n\n error(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('error')) {\n console.error(`[ERROR] ${message}`, meta || '');\n }\n }\n\n private shouldLog(level: string): boolean {\n const levels = ['debug', 'info', 'warn', 'error'];\n return levels.indexOf(level) >= levels.indexOf(this.level);\n }\n}\n","import type { ValidationResult, ValidationError } from '../types';\n\n// Import integrators registry from the package main export (JSON is inlined in the bundle)\nimport { integratorsRegistry } from '@almadar/patterns';\n\n/**\n * Validate action params against registry schema\n */\nexport function validateParams(\n integration: string,\n action: string,\n params: Record<string, unknown>,\n): ValidationResult {\n const registry = (integratorsRegistry as any).integrators[integration];\n\n if (!registry) {\n return {\n valid: false,\n errors: [\n {\n param: 'integration',\n message: `Unknown integration: ${integration}`,\n },\n ],\n };\n }\n\n const actionDef = registry.actions.find((a: any) => a.name === action);\n\n if (!actionDef) {\n return {\n valid: false,\n errors: [{ param: 'action', message: `Unknown action: ${action}` }],\n };\n }\n\n const errors: ValidationError[] = [];\n\n // Check required params\n for (const paramDef of actionDef.params) {\n if (paramDef.required && !(paramDef.name in params)) {\n errors.push({\n param: paramDef.name,\n message: `Missing required parameter: ${paramDef.name}`,\n });\n }\n\n // Type validation\n if (paramDef.name in params) {\n const value = params[paramDef.name];\n const expectedType = paramDef.type;\n const actualType = typeof value;\n\n if (expectedType === 'number' && actualType !== 'number') {\n errors.push({\n param: paramDef.name,\n message: `Expected ${expectedType}, got ${actualType}`,\n });\n }\n\n if (expectedType === 'string' && actualType !== 'string') {\n errors.push({\n param: paramDef.name,\n message: `Expected ${expectedType}, got ${actualType}`,\n });\n }\n\n if (expectedType === 'array' && !Array.isArray(value)) {\n errors.push({\n param: paramDef.name,\n message: `Expected array, got ${actualType}`,\n });\n }\n\n if (\n expectedType === 'object' &&\n (actualType !== 'object' || Array.isArray(value) || value === null)\n ) {\n errors.push({\n param: paramDef.name,\n message: `Expected object, got ${actualType}`,\n });\n }\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n","import type { IntegrationError, IntegrationErrorCode } from '../types';\n\n/**\n * Retry configuration\n */\nexport interface RetryConfig {\n maxAttempts: number;\n backoffMs: number;\n maxBackoffMs?: number;\n retryableErrors?: IntegrationErrorCode[];\n}\n\n/**\n * Execute a function with retry logic\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n config: RetryConfig,\n): Promise<T> {\n const {\n maxAttempts,\n backoffMs,\n maxBackoffMs = 30000,\n retryableErrors,\n } = config;\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n\n // Check if error is retryable\n if (\n error &&\n typeof error === 'object' &&\n 'code' in error &&\n retryableErrors\n ) {\n const integrationError = error as IntegrationError;\n if (!retryableErrors.includes(integrationError.code)) {\n throw error;\n }\n }\n\n // Last attempt, throw\n if (attempt === maxAttempts) {\n throw error;\n }\n\n // Wait before retry (exponential backoff)\n const delay = Math.min(\n backoffMs * Math.pow(2, attempt - 1),\n maxBackoffMs,\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n","import type {\n IntegrationConfig,\n IntegrationResult,\n IntegrationLogger,\n IntegrationError,\n} from '../types';\nimport { ConsoleLogger } from './logger';\nimport { validateParams } from './validation';\nimport { withRetry } from './retry';\n\n/**\n * Base class for all integrations\n */\nexport abstract class BaseIntegration {\n protected config: IntegrationConfig;\n protected logger: IntegrationLogger;\n\n constructor(config: IntegrationConfig) {\n this.config = config;\n this.logger = config.logger || new ConsoleLogger();\n }\n\n /**\n * Execute an action\n */\n abstract execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult>;\n\n /**\n * Validate action params against registry\n */\n protected validateParams(\n action: string,\n params: Record<string, unknown>,\n ): ReturnType<typeof validateParams> {\n return validateParams(this.config.name, action, params);\n }\n\n /**\n * Handle errors uniformly\n */\n protected handleError(action: string, error: unknown): IntegrationResult {\n this.logger.error(`Integration error in ${this.config.name}.${action}`, {\n error,\n });\n\n const integrationError =\n error instanceof Error\n ? error\n : new Error(String(error));\n\n return {\n success: false,\n error: integrationError as IntegrationError,\n metadata: this.createMetadata(action, 0, 0),\n };\n }\n\n /**\n * Create metadata for result\n */\n protected createMetadata(\n action: string,\n duration: number,\n retries: number = 0,\n ): IntegrationResult['metadata'] {\n return {\n integration: this.config.name,\n action,\n duration,\n retries,\n timestamp: Date.now(),\n };\n }\n\n /**\n * Execute with retry logic\n */\n protected async executeWithRetry<T>(\n fn: () => Promise<T>,\n ): Promise<T> {\n if (!this.config.retry) {\n return fn();\n }\n\n return withRetry(fn, {\n maxAttempts: this.config.retry.maxAttempts,\n backoffMs: this.config.retry.backoffMs,\n maxBackoffMs: this.config.retry.maxBackoffMs,\n retryableErrors: [\n 'TIMEOUT_ERROR',\n 'NETWORK_ERROR',\n 'RATE_LIMIT_ERROR',\n ],\n });\n }\n}\n","import type { IntegrationConfig } from './types';\nimport { BaseIntegration } from './core/BaseIntegration';\n\n/**\n * Integration constructor type\n */\nexport type IntegrationConstructor = new (\n config: IntegrationConfig,\n) => BaseIntegration;\n\n/**\n * Integration registry (populated as integrations are imported)\n */\nexport const INTEGRATION_REGISTRY: Record<string, IntegrationConstructor> = {};\n\n/**\n * Register an integration\n */\nexport function registerIntegration(\n name: string,\n constructor: IntegrationConstructor,\n): void {\n INTEGRATION_REGISTRY[name] = constructor;\n}\n\n/**\n * Get integration constructor by name\n */\nexport function getIntegration(\n name: string,\n): IntegrationConstructor | undefined {\n return INTEGRATION_REGISTRY[name];\n}\n\n/**\n * Check if integration is known\n */\nexport function isKnownIntegration(name: string): boolean {\n return name in INTEGRATION_REGISTRY;\n}\n\n/**\n * Get all registered integration names\n */\nexport function getRegisteredIntegrations(): string[] {\n return Object.keys(INTEGRATION_REGISTRY);\n}\n","import type { IntegrationConfig, IntegrationResult } from './types';\nimport { BaseIntegration } from './core/BaseIntegration';\nimport { getIntegration } from './registry';\n\n/**\n * Factory for creating and managing integration instances\n */\nexport class IntegrationFactory {\n private instances: Map<string, BaseIntegration> = new Map();\n private configs: Map<string, IntegrationConfig> = new Map();\n\n /**\n * Configure an integration (doesn't instantiate yet)\n */\n configure(name: string, config: Omit<IntegrationConfig, 'name'>): void {\n this.configs.set(name, { name, ...config });\n }\n\n /**\n * Get or create an integration instance\n */\n get(name: string): BaseIntegration {\n // Return existing instance\n if (this.instances.has(name)) {\n return this.instances.get(name)!;\n }\n\n // Get constructor\n const Constructor = getIntegration(name);\n if (!Constructor) {\n throw new Error(`Unknown integration: ${name}. Make sure it's imported.`);\n }\n\n // Get config\n const config = this.configs.get(name);\n if (!config) {\n throw new Error(\n `Integration not configured: ${name}. Call configure() first.`,\n );\n }\n\n // Create instance\n const instance = new Constructor(config);\n this.instances.set(name, instance);\n\n return instance;\n }\n\n /**\n * Execute an action on an integration\n */\n async execute(\n integration: string,\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n const instance = this.get(integration);\n return await instance.execute(action, params);\n }\n\n /**\n * Check if integration is configured\n */\n isConfigured(name: string): boolean {\n return this.configs.has(name);\n }\n\n /**\n * Clear all instances (useful for testing)\n */\n clear(): void {\n this.instances.clear();\n }\n\n /**\n * Clear all instances and configs\n */\n reset(): void {\n this.instances.clear();\n this.configs.clear();\n }\n}\n","import Stripe from 'stripe';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * Stripe integration for payment processing\n */\nexport class StripeIntegration extends BaseIntegration {\n private client: Stripe;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const apiKey = config.env.STRIPE_SECRET_KEY;\n if (!apiKey) {\n throw new Error('STRIPE_SECRET_KEY not configured');\n }\n\n this.client = new Stripe(apiKey, {\n apiVersion: '2025-02-24.acacia',\n });\n\n this.logger.info('Stripe integration initialized');\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'createPaymentIntent':\n data = await this.executeWithRetry(() =>\n this.createPaymentIntent(params),\n );\n break;\n case 'confirmPayment':\n data = await this.executeWithRetry(() => this.confirmPayment(params));\n break;\n case 'refund':\n data = await this.executeWithRetry(() => this.refund(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async createPaymentIntent(params: Record<string, unknown>) {\n const { amount, currency, metadata } = params;\n\n this.logger.debug('Creating payment intent', { amount, currency });\n\n return await this.client.paymentIntents.create({\n amount: amount as number,\n currency: currency as string,\n metadata: metadata as Stripe.MetadataParam | undefined,\n });\n }\n\n private async confirmPayment(params: Record<string, unknown>) {\n const { paymentIntentId } = params;\n\n this.logger.debug('Confirming payment', { paymentIntentId });\n\n return await this.client.paymentIntents.confirm(paymentIntentId as string);\n }\n\n private async refund(params: Record<string, unknown>) {\n const { paymentIntentId, amount } = params;\n\n this.logger.debug('Creating refund', { paymentIntentId, amount });\n\n return await this.client.refunds.create({\n payment_intent: paymentIntentId as string,\n amount: amount as number | undefined,\n });\n }\n}\n\n// Auto-register\nregisterIntegration('stripe', StripeIntegration);\n","import { google, youtube_v3 } from 'googleapis';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * YouTube Data API integration\n */\nexport class YouTubeIntegration extends BaseIntegration {\n private client: youtube_v3.Youtube;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const apiKey = config.env.YOUTUBE_API_KEY;\n if (!apiKey) {\n throw new Error('YOUTUBE_API_KEY not configured');\n }\n\n this.client = google.youtube({\n version: 'v3',\n auth: apiKey,\n });\n\n this.logger.info('YouTube integration initialized');\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'search':\n data = await this.executeWithRetry(() => this.search(params));\n break;\n case 'getVideo':\n data = await this.executeWithRetry(() => this.getVideo(params));\n break;\n case 'getChannel':\n data = await this.executeWithRetry(() => this.getChannel(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async search(params: Record<string, unknown>) {\n const { query, maxResults, type } = params;\n\n this.logger.debug('Searching YouTube', { query, maxResults, type });\n\n const response = await this.client.search.list({\n part: ['snippet'],\n q: query as string,\n maxResults: (maxResults as number) || 10,\n type: type ? [type as string] : undefined,\n });\n\n return response.data.items?.map((item) => ({\n videoId: item.id?.videoId,\n title: item.snippet?.title,\n thumbnail: item.snippet?.thumbnails?.default?.url,\n description: item.snippet?.description,\n }));\n }\n\n private async getVideo(params: Record<string, unknown>) {\n const { videoId } = params;\n\n this.logger.debug('Getting video details', { videoId });\n\n const response = await this.client.videos.list({\n part: ['snippet', 'statistics'],\n id: [videoId as string],\n });\n\n const video = response.data.items?.[0];\n if (!video) {\n throw new Error(`Video not found: ${videoId}`);\n }\n\n return {\n title: video.snippet?.title,\n description: video.snippet?.description,\n viewCount: video.statistics?.viewCount,\n likeCount: video.statistics?.likeCount,\n };\n }\n\n private async getChannel(params: Record<string, unknown>) {\n const { channelId } = params;\n\n this.logger.debug('Getting channel details', { channelId });\n\n const response = await this.client.channels.list({\n part: ['snippet', 'statistics'],\n id: [channelId as string],\n });\n\n const channel = response.data.items?.[0];\n if (!channel) {\n throw new Error(`Channel not found: ${channelId}`);\n }\n\n return {\n name: channel.snippet?.title,\n description: channel.snippet?.description,\n subscriberCount: channel.statistics?.subscriberCount,\n };\n }\n}\n\n// Auto-register\nregisterIntegration('youtube', YouTubeIntegration);\n","import twilio from 'twilio';\nimport type { Twilio } from 'twilio';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * Twilio messaging integration\n */\nexport class TwilioIntegration extends BaseIntegration {\n private client: Twilio;\n private phoneNumber: string;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const accountSid = config.env.TWILIO_ACCOUNT_SID;\n const authToken = config.env.TWILIO_AUTH_TOKEN;\n this.phoneNumber = config.env.TWILIO_PHONE_NUMBER || '';\n\n if (!accountSid || !authToken) {\n throw new Error('TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN not configured');\n }\n\n this.client = twilio(accountSid, authToken);\n\n this.logger.info('Twilio integration initialized');\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'sendSMS':\n data = await this.executeWithRetry(() => this.sendSMS(params));\n break;\n case 'sendWhatsApp':\n data = await this.executeWithRetry(() => this.sendWhatsApp(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async sendSMS(params: Record<string, unknown>) {\n const { to, body } = params;\n\n this.logger.debug('Sending SMS', { to });\n\n const message = await this.client.messages.create({\n from: this.phoneNumber,\n to: to as string,\n body: body as string,\n });\n\n return {\n sid: message.sid,\n status: message.status,\n };\n }\n\n private async sendWhatsApp(params: Record<string, unknown>) {\n const { to, body } = params;\n\n this.logger.debug('Sending WhatsApp message', { to });\n\n const message = await this.client.messages.create({\n from: `whatsapp:${this.phoneNumber}`,\n to: `whatsapp:${to}`,\n body: body as string,\n });\n\n return {\n sid: message.sid,\n status: message.status,\n };\n }\n}\n\n// Auto-register\nregisterIntegration('twilio', TwilioIntegration);\n","import sgMail from '@sendgrid/mail';\nimport { Resend } from 'resend';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\n\ntype EmailProvider = 'sendgrid' | 'resend';\n\n/**\n * Email integration (SendGrid/Resend)\n */\nexport class EmailIntegration extends BaseIntegration {\n private provider: EmailProvider;\n private fromEmail: string;\n private resendClient?: Resend;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n this.provider = (config.env.PROVIDER as EmailProvider) || 'sendgrid';\n this.fromEmail = config.env.FROM_EMAIL || 'noreply@example.com';\n\n if (this.provider === 'sendgrid') {\n const apiKey = config.env.SENDGRID_API_KEY;\n if (!apiKey) {\n throw new Error('SENDGRID_API_KEY not configured');\n }\n sgMail.setApiKey(apiKey);\n } else if (this.provider === 'resend') {\n const apiKey = config.env.RESEND_API_KEY;\n if (!apiKey) {\n throw new Error('RESEND_API_KEY not configured');\n }\n this.resendClient = new Resend(apiKey);\n }\n\n this.logger.info(`Email integration initialized (${this.provider})`);\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'send':\n data = await this.executeWithRetry(() => this.send(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async send(params: Record<string, unknown>) {\n const { to, subject, body, from } = params;\n\n this.logger.debug('Sending email', { to, subject, provider: this.provider });\n\n if (this.provider === 'sendgrid') {\n return await this.sendViaSendGrid(\n to as string,\n subject as string,\n body as string,\n (from as string) || this.fromEmail,\n );\n } else if (this.provider === 'resend') {\n return await this.sendViaResend(\n to as string,\n subject as string,\n body as string,\n (from as string) || this.fromEmail,\n );\n }\n\n throw new Error(`Unknown email provider: ${this.provider}`);\n }\n\n private async sendViaSendGrid(\n to: string,\n subject: string,\n body: string,\n from: string,\n ) {\n const msg = {\n to,\n from,\n subject,\n html: body,\n };\n\n const response = await sgMail.send(msg);\n\n return {\n id: response[0].headers['x-message-id'],\n status: 'sent',\n };\n }\n\n private async sendViaResend(\n to: string,\n subject: string,\n body: string,\n from: string,\n ) {\n if (!this.resendClient) {\n throw new Error('Resend client not initialized');\n }\n\n const response = await this.resendClient.emails.send({\n from,\n to,\n subject,\n html: body,\n });\n\n return {\n id: response.data?.id,\n status: 'sent',\n };\n }\n}\n\n// Auto-register\nregisterIntegration('email', EmailIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n// Import from @almadar/llm package\n// Note: This assumes the package exports these types and functions\n// Adjust imports based on actual @almadar/llm API\ntype LLMClient = any; // Will be replaced with actual type from @almadar/llm\n\n/**\n * LLM integration using @almadar/llm\n */\nexport class LLMIntegration extends BaseIntegration {\n private client: LLMClient;\n private provider: string;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n this.provider = config.env.PROVIDER || 'anthropic';\n\n // Initialize LLM client from @almadar/llm\n // This will be implemented once @almadar/llm is available\n try {\n // Example: this.client = createLLMClient({ provider: this.provider, apiKey: ... });\n // For now, we'll create a placeholder\n this.client = this.createLLMClient(config.env);\n this.logger.info(`LLM integration initialized (${this.provider})`);\n } catch (error) {\n throw new Error(`Failed to initialize LLM client: ${error}`);\n }\n }\n\n private createLLMClient(env: Record<string, string>): LLMClient {\n // Placeholder - will use actual @almadar/llm when available\n // Example implementation:\n // if (this.provider === 'anthropic') {\n // return new AnthropicClient(env.ANTHROPIC_API_KEY);\n // } else if (this.provider === 'openai') {\n // return new OpenAIClient(env.OPENAI_API_KEY);\n // }\n \n // For now, return a basic client structure\n return {\n provider: this.provider,\n apiKey: env.ANTHROPIC_API_KEY || env.OPENAI_API_KEY,\n };\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'generate':\n data = await this.executeWithRetry(() => this.generate(params));\n break;\n case 'classify':\n data = await this.executeWithRetry(() => this.classify(params));\n break;\n case 'extract':\n data = await this.executeWithRetry(() => this.extract(params));\n break;\n case 'summarize':\n data = await this.executeWithRetry(() => this.summarize(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async generate(params: Record<string, unknown>) {\n const { systemPrompt, userPrompt, model, temperature, maxTokens } = params;\n\n this.logger.debug('Generating content', { model, temperature });\n\n // Use @almadar/llm client to generate\n // Placeholder implementation\n // const response = await this.client.generate({\n // systemPrompt,\n // userPrompt,\n // model,\n // temperature,\n // maxTokens,\n // });\n\n return {\n content: 'Generated content placeholder',\n usage: { tokens: 0 },\n };\n }\n\n private async classify(params: Record<string, unknown>) {\n const { text, categories, model } = params;\n\n this.logger.debug('Classifying text', { categories });\n\n // Use @almadar/llm client to classify\n // Placeholder implementation\n return {\n category: (categories as string[])[0],\n confidence: 0.95,\n reasoning: 'Classification reasoning placeholder',\n };\n }\n\n private async extract(params: Record<string, unknown>) {\n const { text, schema, model } = params;\n\n this.logger.debug('Extracting structured data', { schema });\n\n // Use @almadar/llm client to extract\n // Placeholder implementation\n return {\n data: {},\n confidence: 0.9,\n };\n }\n\n private async summarize(params: Record<string, unknown>) {\n const { text, maxLength, style, model } = params;\n\n this.logger.debug('Summarizing text', { maxLength, style });\n\n // Use @almadar/llm client to summarize\n // Placeholder implementation\n return {\n summary: 'Summary placeholder',\n keyPoints: [],\n };\n }\n}\n\n// Auto-register\nregisterIntegration('llm', LLMIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * DeepAgent integration for AI code generation\n */\nexport class DeepAgentIntegration extends BaseIntegration {\n private apiUrl: string;\n private apiKey: string;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n this.apiUrl = config.env.DEEPAGENT_API_URL || 'http://localhost:3000';\n this.apiKey = config.env.DEEPAGENT_API_KEY || '';\n\n this.logger.info('DeepAgent integration initialized', { apiUrl: this.apiUrl });\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'sendMessage':\n data = await this.executeWithRetry(() => this.sendMessage(params));\n break;\n case 'cancelGeneration':\n data = await this.executeWithRetry(() =>\n this.cancelGeneration(params),\n );\n break;\n case 'validateSchema':\n data = await this.executeWithRetry(() => this.validateSchema(params));\n break;\n case 'compileSchema':\n data = await this.executeWithRetry(() => this.compileSchema(params));\n break;\n case 'getThreadHistory':\n data = await this.executeWithRetry(() =>\n this.getThreadHistory(params),\n );\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async sendMessage(params: Record<string, unknown>) {\n const { message, threadId, skill, context } = params;\n\n this.logger.debug('Sending message to DeepAgent', { threadId, skill });\n\n const response = await this.request('/api/agent/message', {\n message,\n threadId,\n skill,\n context,\n });\n\n return response;\n }\n\n private async cancelGeneration(params: Record<string, unknown>) {\n const { threadId } = params;\n\n this.logger.debug('Cancelling generation', { threadId });\n\n const response = await this.request('/api/agent/cancel', {\n threadId,\n });\n\n return response;\n }\n\n private async validateSchema(params: Record<string, unknown>) {\n const { schema } = params;\n\n this.logger.debug('Validating schema');\n\n const response = await this.request('/api/schema/validate', {\n schema,\n });\n\n return response;\n }\n\n private async compileSchema(params: Record<string, unknown>) {\n const { schema, shell } = params;\n\n this.logger.debug('Compiling schema', { shell });\n\n const response = await this.request('/api/schema/compile', {\n schema,\n shell,\n });\n\n return response;\n }\n\n private async getThreadHistory(params: Record<string, unknown>) {\n const { threadId } = params;\n\n this.logger.debug('Getting thread history', { threadId });\n\n const response = await this.request('/api/agent/history', {\n threadId,\n });\n\n return response;\n }\n\n private async request(endpoint: string, body: Record<string, unknown>) {\n const url = `${this.apiUrl}${endpoint}`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(this.apiKey ? { Authorization: `Bearer ${this.apiKey}` } : {}),\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n throw new Error(\n `DeepAgent request failed: ${response.status} ${response.statusText}`,\n );\n }\n\n return await response.json();\n }\n}\n\n// Auto-register\nregisterIntegration('deepagent', DeepAgentIntegration);\n","/**\n * Core types for Almadar integrations\n */\n\n/**\n * Configuration for an integration instance\n */\nexport interface IntegrationConfig {\n /** Integration name (matches registry) */\n name: string;\n\n /** Environment variables (API keys, secrets) */\n env: Record<string, string>;\n\n /** Optional logger */\n logger?: IntegrationLogger;\n\n /** Optional rate limiting config */\n rateLimit?: {\n requestsPerSecond: number;\n burstSize: number;\n };\n\n /** Optional timeout (ms) */\n timeout?: number;\n\n /** Optional retry config */\n retry?: {\n maxAttempts: number;\n backoffMs: number;\n maxBackoffMs?: number;\n };\n}\n\n/**\n * Result of an integration action call\n */\nexport interface IntegrationResult<T = unknown> {\n /** Success flag */\n success: boolean;\n\n /** Response data (on success) */\n data?: T;\n\n /** Error (on failure) */\n error?: IntegrationError;\n\n /** Metadata (timing, retries, etc.) */\n metadata: {\n integration: string;\n action: string;\n duration: number;\n retries: number;\n timestamp: number;\n };\n}\n\n/**\n * Integration error codes\n */\nexport type IntegrationErrorCode =\n | 'VALIDATION_ERROR'\n | 'AUTH_ERROR'\n | 'RATE_LIMIT_ERROR'\n | 'TIMEOUT_ERROR'\n | 'NETWORK_ERROR'\n | 'SERVICE_ERROR'\n | 'UNKNOWN_ERROR';\n\n/**\n * Integration error\n */\nexport class IntegrationError extends Error {\n code: IntegrationErrorCode;\n integration?: string;\n action?: string;\n details?: unknown;\n\n constructor(\n message: string,\n code: IntegrationErrorCode = 'UNKNOWN_ERROR',\n details?: unknown,\n ) {\n super(message);\n this.name = 'IntegrationError';\n this.code = code;\n this.details = details;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n integration: this.integration,\n action: this.action,\n details: this.details,\n };\n }\n}\n\n/**\n * Logger interface\n */\nexport interface IntegrationLogger {\n debug(message: string, meta?: Record<string, unknown>): void;\n info(message: string, meta?: Record<string, unknown>): void;\n warn(message: string, meta?: Record<string, unknown>): void;\n error(message: string, meta?: Record<string, unknown>): void;\n}\n\n/**\n * Validation result\n */\nexport interface ValidationResult {\n valid: boolean;\n errors: ValidationError[];\n}\n\n/**\n * Validation error\n */\nexport interface ValidationError {\n param: string;\n message: string;\n}\n","/**\n * Git CLI operations for GitHub integration\n */\n\nimport { spawn } from 'child_process';\nimport { promises as fs } from 'fs';\nimport { join } from 'path';\nimport { IntegrationError } from '../../types';\nimport type {\n GitHubCloneParams,\n GitHubCreateBranchParams,\n GitHubCommitParams,\n GitHubPushParams,\n} from './types';\n\n/**\n * Execute a git command\n */\nasync function execGit(\n args: string[],\n cwd: string,\n env?: Record<string, string>\n): Promise<{ stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n const proc = spawn('git', args, {\n cwd,\n env: { ...process.env, ...env },\n stdio: 'pipe',\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n proc.on('close', (code) => {\n if (code === 0) {\n resolve({ stdout, stderr });\n } else {\n reject(\n new IntegrationError(\n `Git command failed: ${args.join(' ')}\\n${stderr}`,\n 'SERVICE_ERROR',\n { code, stderr }\n )\n );\n }\n });\n\n proc.on('error', (error) => {\n reject(\n new IntegrationError(\n `Failed to execute git: ${error.message}`,\n 'SERVICE_ERROR',\n { error }\n )\n );\n });\n });\n}\n\n/**\n * Clone a repository\n */\nexport async function cloneRepo(\n params: GitHubCloneParams,\n token: string\n): Promise<void> {\n const { repoUrl, targetDir, branch, depth = 1 } = params;\n\n // Inject token into URL for authentication\n const authUrl = injectTokenIntoUrl(repoUrl, token);\n\n const args = ['clone'];\n\n if (depth > 0) {\n args.push('--depth', depth.toString());\n }\n\n if (branch) {\n args.push('--branch', branch);\n }\n\n args.push(authUrl, targetDir);\n\n try {\n await execGit(args, process.cwd());\n\n // Immediately scrub the token from git config\n await scrubTokenFromRemote(targetDir, repoUrl);\n } catch (error) {\n throw new IntegrationError(\n `Failed to clone repository: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { repoUrl, error }\n );\n }\n}\n\n/**\n * Create a new branch\n */\nexport async function createBranch(\n params: GitHubCreateBranchParams,\n workDir: string\n): Promise<void> {\n const { branchName, baseBranch } = params;\n const cwd = params.workDir || workDir;\n\n try {\n // If baseBranch is specified, check it out first\n if (baseBranch) {\n await execGit(['checkout', baseBranch], cwd);\n }\n\n // Create and checkout new branch\n await execGit(['checkout', '-b', branchName], cwd);\n } catch (error) {\n throw new IntegrationError(\n `Failed to create branch: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { branchName, baseBranch, error }\n );\n }\n}\n\n/**\n * Commit changes\n */\nexport async function commit(\n params: GitHubCommitParams,\n workDir: string\n): Promise<void> {\n const { message, files } = params;\n const cwd = params.workDir || workDir;\n\n try {\n // Stage files\n if (files && files.length > 0) {\n await execGit(['add', ...files], cwd);\n } else {\n // Stage all changes\n await execGit(['add', '.'], cwd);\n }\n\n // Commit\n await execGit(['commit', '-m', message], cwd);\n } catch (error) {\n throw new IntegrationError(\n `Failed to commit: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { message, error }\n );\n }\n}\n\n/**\n * Push branch to remote\n */\nexport async function push(\n params: GitHubPushParams,\n workDir: string,\n token: string\n): Promise<void> {\n const { branchName, force = false } = params;\n const cwd = params.workDir || workDir;\n\n // Security: Never allow force push to protected branches\n const protectedBranches = ['main', 'master', 'production', 'prod'];\n if (force && protectedBranches.includes(branchName.toLowerCase())) {\n throw new IntegrationError(\n `Force push to protected branch '${branchName}' is not allowed`,\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n // Create a temporary credential helper script\n const credHelper = await createTempCredentialHelper(token);\n\n const args = ['push'];\n\n if (force) {\n args.push('--force');\n }\n\n args.push('-u', 'origin', branchName);\n\n // Use GIT_ASKPASS for authentication\n await execGit(args, cwd, {\n GIT_ASKPASS: credHelper,\n GIT_TERMINAL_PROMPT: '0',\n });\n\n // Clean up credential helper\n await fs.unlink(credHelper);\n } catch (error) {\n throw new IntegrationError(\n `Failed to push: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { branchName, error }\n );\n }\n}\n\n/**\n * Inject token into repository URL for authentication\n */\nfunction injectTokenIntoUrl(repoUrl: string, token: string): string {\n const url = new URL(repoUrl);\n url.username = 'x-access-token';\n url.password = token;\n return url.toString();\n}\n\n/**\n * Remove token from git remote URL (security measure)\n */\nasync function scrubTokenFromRemote(workDir: string, originalUrl: string): Promise<void> {\n try {\n // Parse the URL to ensure it's clean (no credentials)\n const url = new URL(originalUrl);\n url.username = '';\n url.password = '';\n const cleanUrl = url.toString();\n\n await execGit(['remote', 'set-url', 'origin', cleanUrl], workDir);\n } catch (error) {\n // Log but don't fail - the clone succeeded\n console.error('Warning: Failed to scrub token from remote URL:', error);\n }\n}\n\n/**\n * Create a temporary credential helper script for GIT_ASKPASS\n */\nasync function createTempCredentialHelper(token: string): Promise<string> {\n const tmpDir = process.env.TMPDIR || '/tmp';\n const helperPath = join(tmpDir, `git-cred-${Date.now()}.sh`);\n\n const script = `#!/bin/sh\\necho \"${token}\"`;\n\n await fs.writeFile(helperPath, script, { mode: 0o700 });\n\n return helperPath;\n}\n\n/**\n * Get current branch name\n */\nexport async function getCurrentBranch(workDir: string): Promise<string> {\n try {\n const { stdout } = await execGit(['branch', '--show-current'], workDir);\n return stdout.trim();\n } catch (error) {\n throw new IntegrationError(\n `Failed to get current branch: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { error }\n );\n }\n}\n\n/**\n * Check if working directory has uncommitted changes\n */\nexport async function hasUncommittedChanges(workDir: string): Promise<boolean> {\n try {\n const { stdout } = await execGit(['status', '--porcelain'], workDir);\n return stdout.trim().length > 0;\n } catch (error) {\n throw new IntegrationError(\n `Failed to check git status: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { error }\n );\n }\n}\n","/**\n * GitHub REST API client\n */\n\nimport { IntegrationError } from '../../types';\nimport type {\n GitHubCreatePRParams,\n GitHubGetPRCommentsParams,\n GitHubListIssuesParams,\n GitHubGetIssueParams,\n GitHubPullRequest,\n GitHubIssue,\n GitHubComment,\n GitHubRateLimit,\n} from './types';\n\n/**\n * GitHub API client configuration\n */\nexport interface GitHubAPIConfig {\n token: string;\n owner: string;\n repo: string;\n}\n\n/**\n * GitHub API response\n */\ninterface GitHubAPIResponse<T> {\n data: T;\n rateLimit: GitHubRateLimit;\n}\n\n/**\n * Execute a GitHub API request\n */\nasync function githubFetch<T>(\n endpoint: string,\n config: GitHubAPIConfig,\n options: RequestInit = {}\n): Promise<GitHubAPIResponse<T>> {\n const url = `https://api.github.com${endpoint}`;\n\n const headers = {\n 'Authorization': `Bearer ${config.token}`,\n 'Accept': 'application/vnd.github+json',\n 'X-GitHub-Api-Version': '2022-11-28',\n ...options.headers,\n };\n\n try {\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n // Extract rate limit info\n const rateLimit: GitHubRateLimit = {\n remaining: parseInt(response.headers.get('x-ratelimit-remaining') || '0', 10),\n limit: parseInt(response.headers.get('x-ratelimit-limit') || '5000', 10),\n reset: parseInt(response.headers.get('x-ratelimit-reset') || '0', 10),\n };\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: response.statusText }));\n\n // Handle rate limiting\n if (response.status === 429) {\n throw new IntegrationError(\n 'GitHub API rate limit exceeded',\n 'RATE_LIMIT_ERROR',\n { rateLimit, error }\n );\n }\n\n // Handle authentication errors\n if (response.status === 401 || response.status === 403) {\n throw new IntegrationError(\n `GitHub API authentication failed: ${error.message || response.statusText}`,\n 'AUTH_ERROR',\n { status: response.status, error }\n );\n }\n\n throw new IntegrationError(\n `GitHub API request failed: ${error.message || response.statusText}`,\n 'SERVICE_ERROR',\n { status: response.status, error }\n );\n }\n\n const data = await response.json();\n\n return { data, rateLimit };\n } catch (error) {\n if (error instanceof IntegrationError) {\n throw error;\n }\n\n throw new IntegrationError(\n `GitHub API request failed: ${error instanceof Error ? error.message : String(error)}`,\n 'NETWORK_ERROR',\n { error }\n );\n }\n}\n\n/**\n * Create a pull request\n */\nexport async function createPR(\n params: GitHubCreatePRParams,\n config: GitHubAPIConfig\n): Promise<GitHubPullRequest> {\n const { title, body, baseBranch, headBranch, draft = false } = params;\n\n const endpoint = `/repos/${config.owner}/${config.repo}/pulls`;\n\n const { data } = await githubFetch<GitHubPullRequest>(endpoint, config, {\n method: 'POST',\n body: JSON.stringify({\n title,\n body,\n base: baseBranch,\n head: headBranch,\n draft,\n }),\n });\n\n return data;\n}\n\n/**\n * Get pull request comments\n */\nexport async function getPRComments(\n params: GitHubGetPRCommentsParams,\n config: GitHubAPIConfig\n): Promise<GitHubComment[]> {\n const { prNumber } = params;\n\n const endpoint = `/repos/${config.owner}/${config.repo}/pulls/${prNumber}/comments`;\n\n const { data } = await githubFetch<GitHubComment[]>(endpoint, config);\n\n return data;\n}\n\n/**\n * List repository issues\n */\nexport async function listIssues(\n params: GitHubListIssuesParams,\n config: GitHubAPIConfig\n): Promise<GitHubIssue[]> {\n const { state = 'open', labels = [], limit = 30 } = params;\n\n const queryParams = new URLSearchParams({\n state,\n per_page: Math.min(limit, 100).toString(),\n });\n\n if (labels.length > 0) {\n queryParams.append('labels', labels.join(','));\n }\n\n const endpoint = `/repos/${config.owner}/${config.repo}/issues?${queryParams}`;\n\n const { data } = await githubFetch<GitHubIssue[]>(endpoint, config);\n\n return data;\n}\n\n/**\n * Get issue details\n */\nexport async function getIssue(\n params: GitHubGetIssueParams,\n config: GitHubAPIConfig\n): Promise<{ issue: GitHubIssue; comments: GitHubComment[] }> {\n const { issueNumber } = params;\n\n // Get issue details\n const issueEndpoint = `/repos/${config.owner}/${config.repo}/issues/${issueNumber}`;\n const { data: issue } = await githubFetch<GitHubIssue>(issueEndpoint, config);\n\n // Get issue comments\n const commentsEndpoint = `/repos/${config.owner}/${config.repo}/issues/${issueNumber}/comments`;\n const { data: comments } = await githubFetch<GitHubComment[]>(commentsEndpoint, config);\n\n return { issue, comments };\n}\n\n/**\n * Get current rate limit status\n */\nexport async function getRateLimit(config: GitHubAPIConfig): Promise<GitHubRateLimit> {\n const endpoint = '/rate_limit';\n\n const { data } = await githubFetch<{ rate: GitHubRateLimit }>(endpoint, config);\n\n return data.rate;\n}\n\n/**\n * Parse repository owner and name from URL\n */\nexport function parseRepoUrl(repoUrl: string): { owner: string; repo: string } {\n try {\n const url = new URL(repoUrl);\n const pathParts = url.pathname.split('/').filter(Boolean);\n\n if (pathParts.length < 2) {\n throw new Error('Invalid repository URL format');\n }\n\n const owner = pathParts[0];\n const repo = pathParts[1].replace(/\\.git$/, '');\n\n return { owner, repo };\n } catch (error) {\n throw new IntegrationError(\n `Failed to parse repository URL: ${repoUrl}`,\n 'VALIDATION_ERROR',\n { error }\n );\n }\n}\n","/**\n * GitHub Integration for Almadar\n * Provides git operations and GitHub API access for the agent\n */\n\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\nimport * as GitOps from './github-git';\nimport * as GitHubAPI from './github-api';\nimport type {\n GitHubCloneParams,\n GitHubCreateBranchParams,\n GitHubCommitParams,\n GitHubPushParams,\n GitHubCreatePRParams,\n GitHubGetPRCommentsParams,\n GitHubListIssuesParams,\n GitHubGetIssueParams,\n} from './types';\n\n/**\n * GitHub integration class\n */\nexport class GitHubIntegration extends BaseIntegration {\n private token: string;\n private owner: string;\n private repo: string;\n private workDir: string;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n this.token = config.env.GITHUB_TOKEN;\n if (!this.token) {\n throw new Error('GITHUB_TOKEN not configured');\n }\n\n this.owner = config.env.GITHUB_OWNER || '';\n this.repo = config.env.GITHUB_REPO || '';\n this.workDir = config.env.GITHUB_WORK_DIR || process.cwd();\n\n this.logger.info('GitHub integration initialized', {\n owner: this.owner,\n repo: this.repo,\n });\n }\n\n /**\n * Execute a GitHub action\n */\n async execute(\n action: string,\n params: Record<string, unknown>\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'cloneRepo':\n data = await this.executeWithRetry(() =>\n this.cloneRepo(params as unknown as GitHubCloneParams)\n );\n break;\n\n case 'createBranch':\n data = await this.executeWithRetry(() =>\n this.createBranch(params as unknown as GitHubCreateBranchParams)\n );\n break;\n\n case 'commit':\n data = await this.executeWithRetry(() =>\n this.commit(params as unknown as GitHubCommitParams)\n );\n break;\n\n case 'push':\n data = await this.executeWithRetry(() =>\n this.push(params as unknown as GitHubPushParams)\n );\n break;\n\n case 'createPR':\n data = await this.executeWithRetry(() =>\n this.createPR(params as unknown as GitHubCreatePRParams)\n );\n break;\n\n case 'getPRComments':\n data = await this.executeWithRetry(() =>\n this.getPRComments(params as unknown as GitHubGetPRCommentsParams)\n );\n break;\n\n case 'listIssues':\n data = await this.executeWithRetry(() =>\n this.listIssues(params as unknown as GitHubListIssuesParams)\n );\n break;\n\n case 'getIssue':\n data = await this.executeWithRetry(() =>\n this.getIssue(params as unknown as GitHubGetIssueParams)\n );\n break;\n\n default:\n throw new Error(`Unknown GitHub action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n /**\n * Clone a repository\n */\n private async cloneRepo(params: GitHubCloneParams): Promise<{ message: string }> {\n this.logger.debug('Cloning repository', { repoUrl: params.repoUrl });\n\n // If owner/repo not set, parse from URL\n if (!this.owner || !this.repo) {\n const parsed = GitHubAPI.parseRepoUrl(params.repoUrl);\n this.owner = parsed.owner;\n this.repo = parsed.repo;\n }\n\n await GitOps.cloneRepo(params, this.token);\n\n return {\n message: `Successfully cloned ${params.repoUrl} to ${params.targetDir}`,\n };\n }\n\n /**\n * Create a branch\n */\n private async createBranch(params: GitHubCreateBranchParams): Promise<{ message: string }> {\n this.logger.debug('Creating branch', { branchName: params.branchName });\n\n await GitOps.createBranch(params, this.workDir);\n\n return {\n message: `Successfully created branch: ${params.branchName}`,\n };\n }\n\n /**\n * Commit changes\n */\n private async commit(params: GitHubCommitParams): Promise<{ message: string }> {\n this.logger.debug('Committing changes', { message: params.message });\n\n await GitOps.commit(params, this.workDir);\n\n return {\n message: `Successfully committed changes: ${params.message}`,\n };\n }\n\n /**\n * Push branch\n */\n private async push(params: GitHubPushParams): Promise<{ message: string }> {\n this.logger.debug('Pushing branch', { branchName: params.branchName });\n\n await GitOps.push(params, this.workDir, this.token);\n\n return {\n message: `Successfully pushed branch: ${params.branchName}`,\n };\n }\n\n /**\n * Create a pull request\n */\n private async createPR(params: GitHubCreatePRParams) {\n this.logger.debug('Creating pull request', { title: params.title });\n\n const apiConfig = this.getAPIConfig();\n const pr = await GitHubAPI.createPR(params, apiConfig);\n\n this.logger.info('Pull request created', { number: pr.number, url: pr.url });\n\n return pr;\n }\n\n /**\n * Get PR comments\n */\n private async getPRComments(params: GitHubGetPRCommentsParams) {\n this.logger.debug('Getting PR comments', { prNumber: params.prNumber });\n\n const apiConfig = this.getAPIConfig();\n const comments = await GitHubAPI.getPRComments(params, apiConfig);\n\n return { comments };\n }\n\n /**\n * List issues\n */\n private async listIssues(params: GitHubListIssuesParams) {\n this.logger.debug('Listing issues', params as unknown as Record<string, unknown>);\n\n const apiConfig = this.getAPIConfig();\n const issues = await GitHubAPI.listIssues(params, apiConfig);\n\n return { issues };\n }\n\n /**\n * Get issue details\n */\n private async getIssue(params: GitHubGetIssueParams) {\n this.logger.debug('Getting issue', { issueNumber: params.issueNumber });\n\n const apiConfig = this.getAPIConfig();\n const result = await GitHubAPI.getIssue(params, apiConfig);\n\n return result;\n }\n\n /**\n * Get API config for GitHub API calls\n */\n private getAPIConfig(): GitHubAPI.GitHubAPIConfig {\n if (!this.owner || !this.repo) {\n throw new Error(\n 'GitHub owner and repo must be configured. Either set GITHUB_OWNER/GITHUB_REPO or clone a repository first.'\n );\n }\n\n return {\n token: this.token,\n owner: this.owner,\n repo: this.repo,\n };\n }\n}\n\n// Auto-register the integration\nregisterIntegration('github', GitHubIntegration);\n\n// Export types\nexport * from './types';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/logger.ts","../src/core/validation.ts","../src/core/retry.ts","../src/core/BaseIntegration.ts","../src/registry.ts","../src/factory.ts","../src/integrations/stripe/index.ts","../src/integrations/youtube/index.ts","../src/integrations/twilio/index.ts","../src/integrations/email/index.ts","../src/integrations/llm/index.ts","../src/integrations/deepagent/index.ts","../src/types.ts","../src/integrations/github/github-git.ts","../src/integrations/github/github-api.ts","../src/integrations/github/index.ts","../src/integrations/cli/index.ts"],"names":["fs","join"],"mappings":"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","file":"index.js","sourcesContent":["import { IntegrationLogger } from '../types';\n\n/**\n * Console-based logger implementation\n */\nexport class ConsoleLogger implements IntegrationLogger {\n private level: 'debug' | 'info' | 'warn' | 'error';\n\n constructor(level: 'debug' | 'info' | 'warn' | 'error' = 'info') {\n this.level = level;\n }\n\n debug(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('debug')) {\n console.debug(`[DEBUG] ${message}`, meta || '');\n }\n }\n\n info(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('info')) {\n console.log(`[INFO] ${message}`, meta || '');\n }\n }\n\n warn(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('warn')) {\n console.warn(`[WARN] ${message}`, meta || '');\n }\n }\n\n error(message: string, meta?: Record<string, unknown>): void {\n if (this.shouldLog('error')) {\n console.error(`[ERROR] ${message}`, meta || '');\n }\n }\n\n private shouldLog(level: string): boolean {\n const levels = ['debug', 'info', 'warn', 'error'];\n return levels.indexOf(level) >= levels.indexOf(this.level);\n }\n}\n","import type { ValidationResult, ValidationError } from '../types';\n\n// Import integrators registry from the package main export (JSON is inlined in the bundle)\nimport { integratorsRegistry } from '@almadar/patterns';\n\n/**\n * Validate action params against registry schema\n */\nexport function validateParams(\n integration: string,\n action: string,\n params: Record<string, unknown>,\n): ValidationResult {\n const registry = (integratorsRegistry as any).integrators[integration];\n\n if (!registry) {\n return {\n valid: false,\n errors: [\n {\n param: 'integration',\n message: `Unknown integration: ${integration}`,\n },\n ],\n };\n }\n\n const actionDef = registry.actions.find((a: any) => a.name === action);\n\n if (!actionDef) {\n return {\n valid: false,\n errors: [{ param: 'action', message: `Unknown action: ${action}` }],\n };\n }\n\n const errors: ValidationError[] = [];\n\n // Check required params\n for (const paramDef of actionDef.params) {\n if (paramDef.required && !(paramDef.name in params)) {\n errors.push({\n param: paramDef.name,\n message: `Missing required parameter: ${paramDef.name}`,\n });\n }\n\n // Type validation\n if (paramDef.name in params) {\n const value = params[paramDef.name];\n const expectedType = paramDef.type;\n const actualType = typeof value;\n\n if (expectedType === 'number' && actualType !== 'number') {\n errors.push({\n param: paramDef.name,\n message: `Expected ${expectedType}, got ${actualType}`,\n });\n }\n\n if (expectedType === 'string' && actualType !== 'string') {\n errors.push({\n param: paramDef.name,\n message: `Expected ${expectedType}, got ${actualType}`,\n });\n }\n\n if (expectedType === 'array' && !Array.isArray(value)) {\n errors.push({\n param: paramDef.name,\n message: `Expected array, got ${actualType}`,\n });\n }\n\n if (\n expectedType === 'object' &&\n (actualType !== 'object' || Array.isArray(value) || value === null)\n ) {\n errors.push({\n param: paramDef.name,\n message: `Expected object, got ${actualType}`,\n });\n }\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n","import type { IntegrationError, IntegrationErrorCode } from '../types';\n\n/**\n * Retry configuration\n */\nexport interface RetryConfig {\n maxAttempts: number;\n backoffMs: number;\n maxBackoffMs?: number;\n retryableErrors?: IntegrationErrorCode[];\n}\n\n/**\n * Execute a function with retry logic\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n config: RetryConfig,\n): Promise<T> {\n const {\n maxAttempts,\n backoffMs,\n maxBackoffMs = 30000,\n retryableErrors,\n } = config;\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n\n // Check if error is retryable\n if (\n error &&\n typeof error === 'object' &&\n 'code' in error &&\n retryableErrors\n ) {\n const integrationError = error as IntegrationError;\n if (!retryableErrors.includes(integrationError.code)) {\n throw error;\n }\n }\n\n // Last attempt, throw\n if (attempt === maxAttempts) {\n throw error;\n }\n\n // Wait before retry (exponential backoff)\n const delay = Math.min(\n backoffMs * Math.pow(2, attempt - 1),\n maxBackoffMs,\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n","import type {\n IntegrationConfig,\n IntegrationResult,\n IntegrationLogger,\n IntegrationError,\n} from '../types';\nimport { ConsoleLogger } from './logger';\nimport { validateParams } from './validation';\nimport { withRetry } from './retry';\n\n/**\n * Base class for all integrations\n */\nexport abstract class BaseIntegration {\n protected config: IntegrationConfig;\n protected logger: IntegrationLogger;\n\n constructor(config: IntegrationConfig) {\n this.config = config;\n this.logger = config.logger || new ConsoleLogger();\n }\n\n /**\n * Execute an action\n */\n abstract execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult>;\n\n /**\n * Validate action params against registry\n */\n protected validateParams(\n action: string,\n params: Record<string, unknown>,\n ): ReturnType<typeof validateParams> {\n return validateParams(this.config.name, action, params);\n }\n\n /**\n * Handle errors uniformly\n */\n protected handleError(action: string, error: unknown): IntegrationResult {\n this.logger.error(`Integration error in ${this.config.name}.${action}`, {\n error,\n });\n\n const integrationError =\n error instanceof Error\n ? error\n : new Error(String(error));\n\n return {\n success: false,\n error: integrationError as IntegrationError,\n metadata: this.createMetadata(action, 0, 0),\n };\n }\n\n /**\n * Create metadata for result\n */\n protected createMetadata(\n action: string,\n duration: number,\n retries: number = 0,\n ): IntegrationResult['metadata'] {\n return {\n integration: this.config.name,\n action,\n duration,\n retries,\n timestamp: Date.now(),\n };\n }\n\n /**\n * Execute with retry logic\n */\n protected async executeWithRetry<T>(\n fn: () => Promise<T>,\n ): Promise<T> {\n if (!this.config.retry) {\n return fn();\n }\n\n return withRetry(fn, {\n maxAttempts: this.config.retry.maxAttempts,\n backoffMs: this.config.retry.backoffMs,\n maxBackoffMs: this.config.retry.maxBackoffMs,\n retryableErrors: [\n 'TIMEOUT_ERROR',\n 'NETWORK_ERROR',\n 'RATE_LIMIT_ERROR',\n ],\n });\n }\n}\n","import type { IntegrationConfig } from './types';\nimport { BaseIntegration } from './core/BaseIntegration';\n\n/**\n * Integration constructor type\n */\nexport type IntegrationConstructor = new (\n config: IntegrationConfig,\n) => BaseIntegration;\n\n/**\n * Integration registry (populated as integrations are imported)\n */\nexport const INTEGRATION_REGISTRY: Record<string, IntegrationConstructor> = {};\n\n/**\n * Register an integration\n */\nexport function registerIntegration(\n name: string,\n constructor: IntegrationConstructor,\n): void {\n INTEGRATION_REGISTRY[name] = constructor;\n}\n\n/**\n * Get integration constructor by name\n */\nexport function getIntegration(\n name: string,\n): IntegrationConstructor | undefined {\n return INTEGRATION_REGISTRY[name];\n}\n\n/**\n * Check if integration is known\n */\nexport function isKnownIntegration(name: string): boolean {\n return name in INTEGRATION_REGISTRY;\n}\n\n/**\n * Get all registered integration names\n */\nexport function getRegisteredIntegrations(): string[] {\n return Object.keys(INTEGRATION_REGISTRY);\n}\n","import type { IntegrationConfig, IntegrationResult } from './types';\nimport { BaseIntegration } from './core/BaseIntegration';\nimport { getIntegration } from './registry';\n\n/**\n * Factory for creating and managing integration instances\n */\nexport class IntegrationFactory {\n private instances: Map<string, BaseIntegration> = new Map();\n private configs: Map<string, IntegrationConfig> = new Map();\n\n /**\n * Configure an integration (doesn't instantiate yet)\n */\n configure(name: string, config: Omit<IntegrationConfig, 'name'>): void {\n this.configs.set(name, { name, ...config });\n }\n\n /**\n * Get or create an integration instance\n */\n get(name: string): BaseIntegration {\n // Return existing instance\n if (this.instances.has(name)) {\n return this.instances.get(name)!;\n }\n\n // Get constructor\n const Constructor = getIntegration(name);\n if (!Constructor) {\n throw new Error(`Unknown integration: ${name}. Make sure it's imported.`);\n }\n\n // Get config\n const config = this.configs.get(name);\n if (!config) {\n throw new Error(\n `Integration not configured: ${name}. Call configure() first.`,\n );\n }\n\n // Create instance\n const instance = new Constructor(config);\n this.instances.set(name, instance);\n\n return instance;\n }\n\n /**\n * Execute an action on an integration\n */\n async execute(\n integration: string,\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n const instance = this.get(integration);\n return await instance.execute(action, params);\n }\n\n /**\n * Check if integration is configured\n */\n isConfigured(name: string): boolean {\n return this.configs.has(name);\n }\n\n /**\n * Clear all instances (useful for testing)\n */\n clear(): void {\n this.instances.clear();\n }\n\n /**\n * Clear all instances and configs\n */\n reset(): void {\n this.instances.clear();\n this.configs.clear();\n }\n}\n","import Stripe from 'stripe';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * Stripe integration for payment processing\n */\nexport class StripeIntegration extends BaseIntegration {\n private client: Stripe;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const apiKey = config.env.STRIPE_SECRET_KEY;\n if (!apiKey) {\n throw new Error('STRIPE_SECRET_KEY not configured');\n }\n\n this.client = new Stripe(apiKey, {\n apiVersion: '2025-02-24.acacia',\n });\n\n this.logger.info('Stripe integration initialized');\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'createPaymentIntent':\n data = await this.executeWithRetry(() =>\n this.createPaymentIntent(params),\n );\n break;\n case 'confirmPayment':\n data = await this.executeWithRetry(() => this.confirmPayment(params));\n break;\n case 'refund':\n data = await this.executeWithRetry(() => this.refund(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async createPaymentIntent(params: Record<string, unknown>) {\n const { amount, currency, metadata } = params;\n\n this.logger.debug('Creating payment intent', { amount, currency });\n\n return await this.client.paymentIntents.create({\n amount: amount as number,\n currency: currency as string,\n metadata: metadata as Stripe.MetadataParam | undefined,\n });\n }\n\n private async confirmPayment(params: Record<string, unknown>) {\n const { paymentIntentId } = params;\n\n this.logger.debug('Confirming payment', { paymentIntentId });\n\n return await this.client.paymentIntents.confirm(paymentIntentId as string);\n }\n\n private async refund(params: Record<string, unknown>) {\n const { paymentIntentId, amount } = params;\n\n this.logger.debug('Creating refund', { paymentIntentId, amount });\n\n return await this.client.refunds.create({\n payment_intent: paymentIntentId as string,\n amount: amount as number | undefined,\n });\n }\n}\n\n// Auto-register\nregisterIntegration('stripe', StripeIntegration);\n","import { google, youtube_v3 } from 'googleapis';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * YouTube Data API integration\n */\nexport class YouTubeIntegration extends BaseIntegration {\n private client: youtube_v3.Youtube;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const apiKey = config.env.YOUTUBE_API_KEY;\n if (!apiKey) {\n throw new Error('YOUTUBE_API_KEY not configured');\n }\n\n this.client = google.youtube({\n version: 'v3',\n auth: apiKey,\n });\n\n this.logger.info('YouTube integration initialized');\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'search':\n data = await this.executeWithRetry(() => this.search(params));\n break;\n case 'getVideo':\n data = await this.executeWithRetry(() => this.getVideo(params));\n break;\n case 'getChannel':\n data = await this.executeWithRetry(() => this.getChannel(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async search(params: Record<string, unknown>) {\n const { query, maxResults, type } = params;\n\n this.logger.debug('Searching YouTube', { query, maxResults, type });\n\n const response = await this.client.search.list({\n part: ['snippet'],\n q: query as string,\n maxResults: (maxResults as number) || 10,\n type: type ? [type as string] : undefined,\n });\n\n return response.data.items?.map((item) => ({\n videoId: item.id?.videoId,\n title: item.snippet?.title,\n thumbnail: item.snippet?.thumbnails?.default?.url,\n description: item.snippet?.description,\n }));\n }\n\n private async getVideo(params: Record<string, unknown>) {\n const { videoId } = params;\n\n this.logger.debug('Getting video details', { videoId });\n\n const response = await this.client.videos.list({\n part: ['snippet', 'statistics'],\n id: [videoId as string],\n });\n\n const video = response.data.items?.[0];\n if (!video) {\n throw new Error(`Video not found: ${videoId}`);\n }\n\n return {\n title: video.snippet?.title,\n description: video.snippet?.description,\n viewCount: video.statistics?.viewCount,\n likeCount: video.statistics?.likeCount,\n };\n }\n\n private async getChannel(params: Record<string, unknown>) {\n const { channelId } = params;\n\n this.logger.debug('Getting channel details', { channelId });\n\n const response = await this.client.channels.list({\n part: ['snippet', 'statistics'],\n id: [channelId as string],\n });\n\n const channel = response.data.items?.[0];\n if (!channel) {\n throw new Error(`Channel not found: ${channelId}`);\n }\n\n return {\n name: channel.snippet?.title,\n description: channel.snippet?.description,\n subscriberCount: channel.statistics?.subscriberCount,\n };\n }\n}\n\n// Auto-register\nregisterIntegration('youtube', YouTubeIntegration);\n","import twilio from 'twilio';\nimport type { Twilio } from 'twilio';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * Twilio messaging integration\n */\nexport class TwilioIntegration extends BaseIntegration {\n private client: Twilio;\n private phoneNumber: string;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n const accountSid = config.env.TWILIO_ACCOUNT_SID;\n const authToken = config.env.TWILIO_AUTH_TOKEN;\n this.phoneNumber = config.env.TWILIO_PHONE_NUMBER || '';\n\n if (!accountSid || !authToken) {\n throw new Error('TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN not configured');\n }\n\n this.client = twilio(accountSid, authToken);\n\n this.logger.info('Twilio integration initialized');\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'sendSMS':\n data = await this.executeWithRetry(() => this.sendSMS(params));\n break;\n case 'sendWhatsApp':\n data = await this.executeWithRetry(() => this.sendWhatsApp(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async sendSMS(params: Record<string, unknown>) {\n const { to, body } = params;\n\n this.logger.debug('Sending SMS', { to });\n\n const message = await this.client.messages.create({\n from: this.phoneNumber,\n to: to as string,\n body: body as string,\n });\n\n return {\n sid: message.sid,\n status: message.status,\n };\n }\n\n private async sendWhatsApp(params: Record<string, unknown>) {\n const { to, body } = params;\n\n this.logger.debug('Sending WhatsApp message', { to });\n\n const message = await this.client.messages.create({\n from: `whatsapp:${this.phoneNumber}`,\n to: `whatsapp:${to}`,\n body: body as string,\n });\n\n return {\n sid: message.sid,\n status: message.status,\n };\n }\n}\n\n// Auto-register\nregisterIntegration('twilio', TwilioIntegration);\n","import sgMail from '@sendgrid/mail';\nimport { Resend } from 'resend';\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\n\ntype EmailProvider = 'sendgrid' | 'resend';\n\n/**\n * Email integration (SendGrid/Resend)\n */\nexport class EmailIntegration extends BaseIntegration {\n private provider: EmailProvider;\n private fromEmail: string;\n private resendClient?: Resend;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n this.provider = (config.env.PROVIDER as EmailProvider) || 'sendgrid';\n this.fromEmail = config.env.FROM_EMAIL || 'noreply@example.com';\n\n if (this.provider === 'sendgrid') {\n const apiKey = config.env.SENDGRID_API_KEY;\n if (!apiKey) {\n throw new Error('SENDGRID_API_KEY not configured');\n }\n sgMail.setApiKey(apiKey);\n } else if (this.provider === 'resend') {\n const apiKey = config.env.RESEND_API_KEY;\n if (!apiKey) {\n throw new Error('RESEND_API_KEY not configured');\n }\n this.resendClient = new Resend(apiKey);\n }\n\n this.logger.info(`Email integration initialized (${this.provider})`);\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'send':\n data = await this.executeWithRetry(() => this.send(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async send(params: Record<string, unknown>) {\n const { to, subject, body, from } = params;\n\n this.logger.debug('Sending email', { to, subject, provider: this.provider });\n\n if (this.provider === 'sendgrid') {\n return await this.sendViaSendGrid(\n to as string,\n subject as string,\n body as string,\n (from as string) || this.fromEmail,\n );\n } else if (this.provider === 'resend') {\n return await this.sendViaResend(\n to as string,\n subject as string,\n body as string,\n (from as string) || this.fromEmail,\n );\n }\n\n throw new Error(`Unknown email provider: ${this.provider}`);\n }\n\n private async sendViaSendGrid(\n to: string,\n subject: string,\n body: string,\n from: string,\n ) {\n const msg = {\n to,\n from,\n subject,\n html: body,\n };\n\n const response = await sgMail.send(msg);\n\n return {\n id: response[0].headers['x-message-id'],\n status: 'sent',\n };\n }\n\n private async sendViaResend(\n to: string,\n subject: string,\n body: string,\n from: string,\n ) {\n if (!this.resendClient) {\n throw new Error('Resend client not initialized');\n }\n\n const response = await this.resendClient.emails.send({\n from,\n to,\n subject,\n html: body,\n });\n\n return {\n id: response.data?.id,\n status: 'sent',\n };\n }\n}\n\n// Auto-register\nregisterIntegration('email', EmailIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\nimport {\n LLMClient,\n getAvailableProvider,\n type LLMCallOptions,\n type LLMProvider,\n} from '@almadar/llm';\nimport { z } from 'zod';\n\n/**\n * LLM integration using @almadar/llm\n *\n * Provides 4 actions:\n * - generate: Generate text content from a prompt\n * - classify: Classify text into predefined categories\n * - extract: Extract structured data from text using a schema\n * - summarize: Summarize long text content\n */\nexport class LLMIntegration extends BaseIntegration {\n private client: LLMClient | null = null;\n private provider: LLMProvider;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n // Determine provider from config or auto-detect from available API keys\n const configuredProvider = config.env.PROVIDER as LLMProvider | undefined;\n this.provider = configuredProvider || getAvailableProvider() || 'anthropic';\n\n this.logger.info(`LLM integration initialized (provider: ${this.provider})`);\n }\n\n /**\n * Lazily create client — avoids throwing on construction if API key is missing.\n * The client will throw a clear error when actually used without a key.\n */\n private getClient(): LLMClient {\n if (!this.client) {\n this.client = new LLMClient({\n provider: this.provider,\n temperature: 0.7,\n trackTokens: true,\n });\n }\n return this.client;\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'generate':\n data = await this.executeWithRetry(() => this.generate(params));\n break;\n case 'classify':\n data = await this.executeWithRetry(() => this.classify(params));\n break;\n case 'extract':\n data = await this.executeWithRetry(() => this.extract(params));\n break;\n case 'summarize':\n data = await this.executeWithRetry(() => this.summarize(params));\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async generate(params: Record<string, unknown>) {\n const {\n systemPrompt,\n userPrompt,\n model,\n temperature,\n maxTokens,\n } = params as {\n systemPrompt?: string;\n userPrompt: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n };\n\n this.logger.debug('Generating content', { model, temperature });\n\n const client = model\n ? new LLMClient({ provider: this.provider, model, temperature: temperature ?? 0.7 })\n : this.getClient();\n\n const response = await client.callWithMetadata<string>({\n systemPrompt: systemPrompt || 'You are a helpful assistant.',\n userPrompt,\n maxTokens: maxTokens ?? 1024,\n temperature,\n skipSchemaValidation: true,\n });\n\n return {\n content: response.data,\n usage: response.usage\n ? {\n promptTokens: response.usage.promptTokens,\n completionTokens: response.usage.completionTokens,\n totalTokens: response.usage.totalTokens,\n }\n : { tokens: 0 },\n };\n }\n\n private async classify(params: Record<string, unknown>) {\n const { text, categories, model } = params as {\n text: string;\n categories: string[];\n model?: string;\n };\n\n this.logger.debug('Classifying text', { categories });\n\n const ClassificationSchema = z.object({\n category: z.enum(categories as [string, ...string[]]),\n confidence: z.number().min(0).max(1),\n reasoning: z.string(),\n });\n\n const client = model\n ? new LLMClient({ provider: this.provider, model, temperature: 0.1 })\n : this.getClient();\n\n const result = await client.call({\n systemPrompt: `You are a text classifier. Classify the given text into one of these categories: ${categories.join(', ')}. Return JSON with: category, confidence (0-1), and reasoning.`,\n userPrompt: text,\n schema: ClassificationSchema,\n temperature: 0.1,\n });\n\n return result;\n }\n\n private async extract(params: Record<string, unknown>) {\n const { text, schema, model } = params as {\n text: string;\n schema: Record<string, unknown>;\n model?: string;\n };\n\n this.logger.debug('Extracting structured data', { schema });\n\n // Build a Zod schema from the JSON schema description.\n // For complex schemas, we use z.record to accept any shape and let the LLM\n // follow the schema description in the prompt.\n const ExtractSchema = z.record(z.unknown());\n\n const client = model\n ? new LLMClient({ provider: this.provider, model, temperature: 0.2 })\n : this.getClient();\n\n const schemaDescription = JSON.stringify(schema, null, 2);\n\n const result = await client.call({\n systemPrompt: `You are a structured data extractor. Extract data from the given text according to this schema:\\n\\n${schemaDescription}\\n\\nReturn ONLY valid JSON matching the schema.`,\n userPrompt: text,\n schema: ExtractSchema,\n temperature: 0.2,\n skipSchemaValidation: true,\n });\n\n return result;\n }\n\n private async summarize(params: Record<string, unknown>) {\n const { text, maxLength, style, model } = params as {\n text: string;\n maxLength?: number;\n style?: string;\n model?: string;\n };\n\n this.logger.debug('Summarizing text', { maxLength, style });\n\n const SummarySchema = z.object({\n summary: z.string(),\n keyPoints: z.array(z.string()),\n });\n\n const styleInstructions = style === 'bullet'\n ? 'Use bullet points.'\n : style === 'detailed'\n ? 'Be thorough and detailed.'\n : 'Be concise.';\n\n const lengthInstructions = maxLength\n ? `Keep the summary under ${maxLength} words.`\n : '';\n\n const client = model\n ? new LLMClient({ provider: this.provider, model, temperature: 0.3 })\n : this.getClient();\n\n const result = await client.call({\n systemPrompt: `You are a text summarizer. ${styleInstructions} ${lengthInstructions} Return JSON with: summary (string) and keyPoints (array of strings).`,\n userPrompt: text,\n schema: SummarySchema,\n temperature: 0.3,\n });\n\n return result;\n }\n}\n\n// Auto-register\nregisterIntegration('llm', LLMIntegration);\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\n\n/**\n * DeepAgent integration for AI code generation\n */\nexport class DeepAgentIntegration extends BaseIntegration {\n private apiUrl: string;\n private apiKey: string;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n this.apiUrl = config.env.DEEPAGENT_API_URL || 'http://localhost:3000';\n this.apiKey = config.env.DEEPAGENT_API_KEY || '';\n\n this.logger.info('DeepAgent integration initialized', { apiUrl: this.apiUrl });\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'sendMessage':\n data = await this.executeWithRetry(() => this.sendMessage(params));\n break;\n case 'cancelGeneration':\n data = await this.executeWithRetry(() =>\n this.cancelGeneration(params),\n );\n break;\n case 'validateSchema':\n data = await this.executeWithRetry(() => this.validateSchema(params));\n break;\n case 'compileSchema':\n data = await this.executeWithRetry(() => this.compileSchema(params));\n break;\n case 'getThreadHistory':\n data = await this.executeWithRetry(() =>\n this.getThreadHistory(params),\n );\n break;\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async sendMessage(params: Record<string, unknown>) {\n const { message, threadId, skill, context } = params;\n\n this.logger.debug('Sending message to DeepAgent', { threadId, skill });\n\n const response = await this.request('/api/agent/message', {\n message,\n threadId,\n skill,\n context,\n });\n\n return response;\n }\n\n private async cancelGeneration(params: Record<string, unknown>) {\n const { threadId } = params;\n\n this.logger.debug('Cancelling generation', { threadId });\n\n const response = await this.request('/api/agent/cancel', {\n threadId,\n });\n\n return response;\n }\n\n private async validateSchema(params: Record<string, unknown>) {\n const { schema } = params;\n\n this.logger.debug('Validating schema');\n\n const response = await this.request('/api/schema/validate', {\n schema,\n });\n\n return response;\n }\n\n private async compileSchema(params: Record<string, unknown>) {\n const { schema, shell } = params;\n\n this.logger.debug('Compiling schema', { shell });\n\n const response = await this.request('/api/schema/compile', {\n schema,\n shell,\n });\n\n return response;\n }\n\n private async getThreadHistory(params: Record<string, unknown>) {\n const { threadId } = params;\n\n this.logger.debug('Getting thread history', { threadId });\n\n const response = await this.request('/api/agent/history', {\n threadId,\n });\n\n return response;\n }\n\n private async request(endpoint: string, body: Record<string, unknown>) {\n const url = `${this.apiUrl}${endpoint}`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(this.apiKey ? { Authorization: `Bearer ${this.apiKey}` } : {}),\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n throw new Error(\n `DeepAgent request failed: ${response.status} ${response.statusText}`,\n );\n }\n\n return await response.json();\n }\n}\n\n// Auto-register\nregisterIntegration('deepagent', DeepAgentIntegration);\n","/**\n * Core types for Almadar integrations\n */\n\n/**\n * Configuration for an integration instance\n */\nexport interface IntegrationConfig {\n /** Integration name (matches registry) */\n name: string;\n\n /** Environment variables (API keys, secrets) */\n env: Record<string, string>;\n\n /** Optional logger */\n logger?: IntegrationLogger;\n\n /** Optional rate limiting config */\n rateLimit?: {\n requestsPerSecond: number;\n burstSize: number;\n };\n\n /** Optional timeout (ms) */\n timeout?: number;\n\n /** Optional retry config */\n retry?: {\n maxAttempts: number;\n backoffMs: number;\n maxBackoffMs?: number;\n };\n}\n\n/**\n * Result of an integration action call\n */\nexport interface IntegrationResult<T = unknown> {\n /** Success flag */\n success: boolean;\n\n /** Response data (on success) */\n data?: T;\n\n /** Error (on failure) */\n error?: IntegrationError;\n\n /** Metadata (timing, retries, etc.) */\n metadata: {\n integration: string;\n action: string;\n duration: number;\n retries: number;\n timestamp: number;\n };\n}\n\n/**\n * Integration error codes\n */\nexport type IntegrationErrorCode =\n | 'VALIDATION_ERROR'\n | 'AUTH_ERROR'\n | 'RATE_LIMIT_ERROR'\n | 'TIMEOUT_ERROR'\n | 'NETWORK_ERROR'\n | 'SERVICE_ERROR'\n | 'UNKNOWN_ERROR';\n\n/**\n * Integration error\n */\nexport class IntegrationError extends Error {\n code: IntegrationErrorCode;\n integration?: string;\n action?: string;\n details?: unknown;\n\n constructor(\n message: string,\n code: IntegrationErrorCode = 'UNKNOWN_ERROR',\n details?: unknown,\n ) {\n super(message);\n this.name = 'IntegrationError';\n this.code = code;\n this.details = details;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n integration: this.integration,\n action: this.action,\n details: this.details,\n };\n }\n}\n\n/**\n * Logger interface\n */\nexport interface IntegrationLogger {\n debug(message: string, meta?: Record<string, unknown>): void;\n info(message: string, meta?: Record<string, unknown>): void;\n warn(message: string, meta?: Record<string, unknown>): void;\n error(message: string, meta?: Record<string, unknown>): void;\n}\n\n/**\n * Validation result\n */\nexport interface ValidationResult {\n valid: boolean;\n errors: ValidationError[];\n}\n\n/**\n * Validation error\n */\nexport interface ValidationError {\n param: string;\n message: string;\n}\n","/**\n * Git CLI operations for GitHub integration\n */\n\nimport { spawn } from 'child_process';\nimport { promises as fs } from 'fs';\nimport { join } from 'path';\nimport { IntegrationError } from '../../types';\nimport type {\n GitHubCloneParams,\n GitHubCreateBranchParams,\n GitHubCommitParams,\n GitHubPushParams,\n} from './types';\n\n/**\n * Execute a git command\n */\nasync function execGit(\n args: string[],\n cwd: string,\n env?: Record<string, string>\n): Promise<{ stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n const proc = spawn('git', args, {\n cwd,\n env: { ...process.env, ...env },\n stdio: 'pipe',\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n proc.on('close', (code) => {\n if (code === 0) {\n resolve({ stdout, stderr });\n } else {\n reject(\n new IntegrationError(\n `Git command failed: ${args.join(' ')}\\n${stderr}`,\n 'SERVICE_ERROR',\n { code, stderr }\n )\n );\n }\n });\n\n proc.on('error', (error) => {\n reject(\n new IntegrationError(\n `Failed to execute git: ${error.message}`,\n 'SERVICE_ERROR',\n { error }\n )\n );\n });\n });\n}\n\n/**\n * Clone a repository\n */\nexport async function cloneRepo(\n params: GitHubCloneParams,\n token: string\n): Promise<void> {\n const { repoUrl, targetDir, branch, depth = 1 } = params;\n\n // Inject token into URL for authentication\n const authUrl = injectTokenIntoUrl(repoUrl, token);\n\n const args = ['clone'];\n\n if (depth > 0) {\n args.push('--depth', depth.toString());\n }\n\n if (branch) {\n args.push('--branch', branch);\n }\n\n args.push(authUrl, targetDir);\n\n try {\n await execGit(args, process.cwd());\n\n // Immediately scrub the token from git config\n await scrubTokenFromRemote(targetDir, repoUrl);\n } catch (error) {\n throw new IntegrationError(\n `Failed to clone repository: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { repoUrl, error }\n );\n }\n}\n\n/**\n * Create a new branch\n */\nexport async function createBranch(\n params: GitHubCreateBranchParams,\n workDir: string\n): Promise<void> {\n const { branchName, baseBranch } = params;\n const cwd = params.workDir || workDir;\n\n try {\n // If baseBranch is specified, check it out first\n if (baseBranch) {\n await execGit(['checkout', baseBranch], cwd);\n }\n\n // Create and checkout new branch\n await execGit(['checkout', '-b', branchName], cwd);\n } catch (error) {\n throw new IntegrationError(\n `Failed to create branch: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { branchName, baseBranch, error }\n );\n }\n}\n\n/**\n * Commit changes\n */\nexport async function commit(\n params: GitHubCommitParams,\n workDir: string\n): Promise<void> {\n const { message, files } = params;\n const cwd = params.workDir || workDir;\n\n try {\n // Stage files\n if (files && files.length > 0) {\n await execGit(['add', ...files], cwd);\n } else {\n // Stage all changes\n await execGit(['add', '.'], cwd);\n }\n\n // Commit\n await execGit(['commit', '-m', message], cwd);\n } catch (error) {\n throw new IntegrationError(\n `Failed to commit: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { message, error }\n );\n }\n}\n\n/**\n * Push branch to remote\n */\nexport async function push(\n params: GitHubPushParams,\n workDir: string,\n token: string\n): Promise<void> {\n const { branchName, force = false } = params;\n const cwd = params.workDir || workDir;\n\n // Security: Never allow force push to protected branches\n const protectedBranches = ['main', 'master', 'production', 'prod'];\n if (force && protectedBranches.includes(branchName.toLowerCase())) {\n throw new IntegrationError(\n `Force push to protected branch '${branchName}' is not allowed`,\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n // Create a temporary credential helper script\n const credHelper = await createTempCredentialHelper(token);\n\n const args = ['push'];\n\n if (force) {\n args.push('--force');\n }\n\n args.push('-u', 'origin', branchName);\n\n // Use GIT_ASKPASS for authentication\n await execGit(args, cwd, {\n GIT_ASKPASS: credHelper,\n GIT_TERMINAL_PROMPT: '0',\n });\n\n // Clean up credential helper\n await fs.unlink(credHelper);\n } catch (error) {\n throw new IntegrationError(\n `Failed to push: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { branchName, error }\n );\n }\n}\n\n/**\n * Inject token into repository URL for authentication\n */\nfunction injectTokenIntoUrl(repoUrl: string, token: string): string {\n const url = new URL(repoUrl);\n url.username = 'x-access-token';\n url.password = token;\n return url.toString();\n}\n\n/**\n * Remove token from git remote URL (security measure)\n */\nasync function scrubTokenFromRemote(workDir: string, originalUrl: string): Promise<void> {\n try {\n // Parse the URL to ensure it's clean (no credentials)\n const url = new URL(originalUrl);\n url.username = '';\n url.password = '';\n const cleanUrl = url.toString();\n\n await execGit(['remote', 'set-url', 'origin', cleanUrl], workDir);\n } catch (error) {\n // Log but don't fail - the clone succeeded\n console.error('Warning: Failed to scrub token from remote URL:', error);\n }\n}\n\n/**\n * Create a temporary credential helper script for GIT_ASKPASS\n */\nasync function createTempCredentialHelper(token: string): Promise<string> {\n const tmpDir = process.env.TMPDIR || '/tmp';\n const helperPath = join(tmpDir, `git-cred-${Date.now()}.sh`);\n\n const script = `#!/bin/sh\\necho \"${token}\"`;\n\n await fs.writeFile(helperPath, script, { mode: 0o700 });\n\n return helperPath;\n}\n\n/**\n * Get current branch name\n */\nexport async function getCurrentBranch(workDir: string): Promise<string> {\n try {\n const { stdout } = await execGit(['branch', '--show-current'], workDir);\n return stdout.trim();\n } catch (error) {\n throw new IntegrationError(\n `Failed to get current branch: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { error }\n );\n }\n}\n\n/**\n * Check if working directory has uncommitted changes\n */\nexport async function hasUncommittedChanges(workDir: string): Promise<boolean> {\n try {\n const { stdout } = await execGit(['status', '--porcelain'], workDir);\n return stdout.trim().length > 0;\n } catch (error) {\n throw new IntegrationError(\n `Failed to check git status: ${error instanceof Error ? error.message : String(error)}`,\n 'SERVICE_ERROR',\n { error }\n );\n }\n}\n","/**\n * GitHub REST API client\n */\n\nimport { IntegrationError } from '../../types';\nimport type {\n GitHubCreatePRParams,\n GitHubGetPRCommentsParams,\n GitHubListIssuesParams,\n GitHubGetIssueParams,\n GitHubPullRequest,\n GitHubIssue,\n GitHubComment,\n GitHubRateLimit,\n} from './types';\n\n/**\n * GitHub API client configuration\n */\nexport interface GitHubAPIConfig {\n token: string;\n owner: string;\n repo: string;\n}\n\n/**\n * GitHub API response\n */\ninterface GitHubAPIResponse<T> {\n data: T;\n rateLimit: GitHubRateLimit;\n}\n\n/**\n * Execute a GitHub API request\n */\nasync function githubFetch<T>(\n endpoint: string,\n config: GitHubAPIConfig,\n options: RequestInit = {}\n): Promise<GitHubAPIResponse<T>> {\n const url = `https://api.github.com${endpoint}`;\n\n const headers = {\n 'Authorization': `Bearer ${config.token}`,\n 'Accept': 'application/vnd.github+json',\n 'X-GitHub-Api-Version': '2022-11-28',\n ...options.headers,\n };\n\n try {\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n // Extract rate limit info\n const rateLimit: GitHubRateLimit = {\n remaining: parseInt(response.headers.get('x-ratelimit-remaining') || '0', 10),\n limit: parseInt(response.headers.get('x-ratelimit-limit') || '5000', 10),\n reset: parseInt(response.headers.get('x-ratelimit-reset') || '0', 10),\n };\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: response.statusText }));\n\n // Handle rate limiting\n if (response.status === 429) {\n throw new IntegrationError(\n 'GitHub API rate limit exceeded',\n 'RATE_LIMIT_ERROR',\n { rateLimit, error }\n );\n }\n\n // Handle authentication errors\n if (response.status === 401 || response.status === 403) {\n throw new IntegrationError(\n `GitHub API authentication failed: ${error.message || response.statusText}`,\n 'AUTH_ERROR',\n { status: response.status, error }\n );\n }\n\n throw new IntegrationError(\n `GitHub API request failed: ${error.message || response.statusText}`,\n 'SERVICE_ERROR',\n { status: response.status, error }\n );\n }\n\n const data = await response.json();\n\n return { data, rateLimit };\n } catch (error) {\n if (error instanceof IntegrationError) {\n throw error;\n }\n\n throw new IntegrationError(\n `GitHub API request failed: ${error instanceof Error ? error.message : String(error)}`,\n 'NETWORK_ERROR',\n { error }\n );\n }\n}\n\n/**\n * Create a pull request\n */\nexport async function createPR(\n params: GitHubCreatePRParams,\n config: GitHubAPIConfig\n): Promise<GitHubPullRequest> {\n const { title, body, baseBranch, headBranch, draft = false } = params;\n\n const endpoint = `/repos/${config.owner}/${config.repo}/pulls`;\n\n const { data } = await githubFetch<GitHubPullRequest>(endpoint, config, {\n method: 'POST',\n body: JSON.stringify({\n title,\n body,\n base: baseBranch,\n head: headBranch,\n draft,\n }),\n });\n\n return data;\n}\n\n/**\n * Get pull request comments\n */\nexport async function getPRComments(\n params: GitHubGetPRCommentsParams,\n config: GitHubAPIConfig\n): Promise<GitHubComment[]> {\n const { prNumber } = params;\n\n const endpoint = `/repos/${config.owner}/${config.repo}/pulls/${prNumber}/comments`;\n\n const { data } = await githubFetch<GitHubComment[]>(endpoint, config);\n\n return data;\n}\n\n/**\n * List repository issues\n */\nexport async function listIssues(\n params: GitHubListIssuesParams,\n config: GitHubAPIConfig\n): Promise<GitHubIssue[]> {\n const { state = 'open', labels = [], limit = 30 } = params;\n\n const queryParams = new URLSearchParams({\n state,\n per_page: Math.min(limit, 100).toString(),\n });\n\n if (labels.length > 0) {\n queryParams.append('labels', labels.join(','));\n }\n\n const endpoint = `/repos/${config.owner}/${config.repo}/issues?${queryParams}`;\n\n const { data } = await githubFetch<GitHubIssue[]>(endpoint, config);\n\n return data;\n}\n\n/**\n * Get issue details\n */\nexport async function getIssue(\n params: GitHubGetIssueParams,\n config: GitHubAPIConfig\n): Promise<{ issue: GitHubIssue; comments: GitHubComment[] }> {\n const { issueNumber } = params;\n\n // Get issue details\n const issueEndpoint = `/repos/${config.owner}/${config.repo}/issues/${issueNumber}`;\n const { data: issue } = await githubFetch<GitHubIssue>(issueEndpoint, config);\n\n // Get issue comments\n const commentsEndpoint = `/repos/${config.owner}/${config.repo}/issues/${issueNumber}/comments`;\n const { data: comments } = await githubFetch<GitHubComment[]>(commentsEndpoint, config);\n\n return { issue, comments };\n}\n\n/**\n * Get current rate limit status\n */\nexport async function getRateLimit(config: GitHubAPIConfig): Promise<GitHubRateLimit> {\n const endpoint = '/rate_limit';\n\n const { data } = await githubFetch<{ rate: GitHubRateLimit }>(endpoint, config);\n\n return data.rate;\n}\n\n/**\n * Parse repository owner and name from URL\n */\nexport function parseRepoUrl(repoUrl: string): { owner: string; repo: string } {\n try {\n const url = new URL(repoUrl);\n const pathParts = url.pathname.split('/').filter(Boolean);\n\n if (pathParts.length < 2) {\n throw new Error('Invalid repository URL format');\n }\n\n const owner = pathParts[0];\n const repo = pathParts[1].replace(/\\.git$/, '');\n\n return { owner, repo };\n } catch (error) {\n throw new IntegrationError(\n `Failed to parse repository URL: ${repoUrl}`,\n 'VALIDATION_ERROR',\n { error }\n );\n }\n}\n","/**\n * GitHub Integration for Almadar\n * Provides git operations and GitHub API access for the agent\n */\n\nimport { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\nimport * as GitOps from './github-git';\nimport * as GitHubAPI from './github-api';\nimport type {\n GitHubCloneParams,\n GitHubCreateBranchParams,\n GitHubCommitParams,\n GitHubPushParams,\n GitHubCreatePRParams,\n GitHubGetPRCommentsParams,\n GitHubListIssuesParams,\n GitHubGetIssueParams,\n} from './types';\n\n/**\n * GitHub integration class\n */\nexport class GitHubIntegration extends BaseIntegration {\n private token: string;\n private owner: string;\n private repo: string;\n private workDir: string;\n\n constructor(config: IntegrationConfig) {\n super(config);\n\n this.token = config.env.GITHUB_TOKEN;\n if (!this.token) {\n throw new Error('GITHUB_TOKEN not configured');\n }\n\n this.owner = config.env.GITHUB_OWNER || '';\n this.repo = config.env.GITHUB_REPO || '';\n this.workDir = config.env.GITHUB_WORK_DIR || process.cwd();\n\n this.logger.info('GitHub integration initialized', {\n owner: this.owner,\n repo: this.repo,\n });\n }\n\n /**\n * Execute a GitHub action\n */\n async execute(\n action: string,\n params: Record<string, unknown>\n ): Promise<IntegrationResult> {\n // Validate params against registry\n const validation = this.validateParams(action, params);\n if (!validation.valid) {\n return {\n success: false,\n error: {\n name: 'IntegrationError',\n message: 'Validation failed',\n code: 'VALIDATION_ERROR',\n details: validation.errors,\n } as IntegrationError,\n metadata: this.createMetadata(action, 0),\n };\n }\n\n const startTime = Date.now();\n let retries = 0;\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'cloneRepo':\n data = await this.executeWithRetry(() =>\n this.cloneRepo(params as unknown as GitHubCloneParams)\n );\n break;\n\n case 'createBranch':\n data = await this.executeWithRetry(() =>\n this.createBranch(params as unknown as GitHubCreateBranchParams)\n );\n break;\n\n case 'commit':\n data = await this.executeWithRetry(() =>\n this.commit(params as unknown as GitHubCommitParams)\n );\n break;\n\n case 'push':\n data = await this.executeWithRetry(() =>\n this.push(params as unknown as GitHubPushParams)\n );\n break;\n\n case 'createPR':\n data = await this.executeWithRetry(() =>\n this.createPR(params as unknown as GitHubCreatePRParams)\n );\n break;\n\n case 'getPRComments':\n data = await this.executeWithRetry(() =>\n this.getPRComments(params as unknown as GitHubGetPRCommentsParams)\n );\n break;\n\n case 'listIssues':\n data = await this.executeWithRetry(() =>\n this.listIssues(params as unknown as GitHubListIssuesParams)\n );\n break;\n\n case 'getIssue':\n data = await this.executeWithRetry(() =>\n this.getIssue(params as unknown as GitHubGetIssueParams)\n );\n break;\n\n default:\n throw new Error(`Unknown GitHub action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime, retries),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n /**\n * Clone a repository\n */\n private async cloneRepo(params: GitHubCloneParams): Promise<{ message: string }> {\n this.logger.debug('Cloning repository', { repoUrl: params.repoUrl });\n\n // If owner/repo not set, parse from URL\n if (!this.owner || !this.repo) {\n const parsed = GitHubAPI.parseRepoUrl(params.repoUrl);\n this.owner = parsed.owner;\n this.repo = parsed.repo;\n }\n\n await GitOps.cloneRepo(params, this.token);\n\n return {\n message: `Successfully cloned ${params.repoUrl} to ${params.targetDir}`,\n };\n }\n\n /**\n * Create a branch\n */\n private async createBranch(params: GitHubCreateBranchParams): Promise<{ message: string }> {\n this.logger.debug('Creating branch', { branchName: params.branchName });\n\n await GitOps.createBranch(params, this.workDir);\n\n return {\n message: `Successfully created branch: ${params.branchName}`,\n };\n }\n\n /**\n * Commit changes\n */\n private async commit(params: GitHubCommitParams): Promise<{ message: string }> {\n this.logger.debug('Committing changes', { message: params.message });\n\n await GitOps.commit(params, this.workDir);\n\n return {\n message: `Successfully committed changes: ${params.message}`,\n };\n }\n\n /**\n * Push branch\n */\n private async push(params: GitHubPushParams): Promise<{ message: string }> {\n this.logger.debug('Pushing branch', { branchName: params.branchName });\n\n await GitOps.push(params, this.workDir, this.token);\n\n return {\n message: `Successfully pushed branch: ${params.branchName}`,\n };\n }\n\n /**\n * Create a pull request\n */\n private async createPR(params: GitHubCreatePRParams) {\n this.logger.debug('Creating pull request', { title: params.title });\n\n const apiConfig = this.getAPIConfig();\n const pr = await GitHubAPI.createPR(params, apiConfig);\n\n this.logger.info('Pull request created', { number: pr.number, url: pr.url });\n\n return pr;\n }\n\n /**\n * Get PR comments\n */\n private async getPRComments(params: GitHubGetPRCommentsParams) {\n this.logger.debug('Getting PR comments', { prNumber: params.prNumber });\n\n const apiConfig = this.getAPIConfig();\n const comments = await GitHubAPI.getPRComments(params, apiConfig);\n\n return { comments };\n }\n\n /**\n * List issues\n */\n private async listIssues(params: GitHubListIssuesParams) {\n this.logger.debug('Listing issues', params as unknown as Record<string, unknown>);\n\n const apiConfig = this.getAPIConfig();\n const issues = await GitHubAPI.listIssues(params, apiConfig);\n\n return { issues };\n }\n\n /**\n * Get issue details\n */\n private async getIssue(params: GitHubGetIssueParams) {\n this.logger.debug('Getting issue', { issueNumber: params.issueNumber });\n\n const apiConfig = this.getAPIConfig();\n const result = await GitHubAPI.getIssue(params, apiConfig);\n\n return result;\n }\n\n /**\n * Get API config for GitHub API calls\n */\n private getAPIConfig(): GitHubAPI.GitHubAPIConfig {\n if (!this.owner || !this.repo) {\n throw new Error(\n 'GitHub owner and repo must be configured. Either set GITHUB_OWNER/GITHUB_REPO or clone a repository first.'\n );\n }\n\n return {\n token: this.token,\n owner: this.owner,\n repo: this.repo,\n };\n }\n}\n\n// Auto-register the integration\nregisterIntegration('github', GitHubIntegration);\n\n// Export types\nexport * from './types';\n","import { BaseIntegration } from '../../core/BaseIntegration';\nimport type { IntegrationConfig, IntegrationResult, IntegrationError } from '../../types';\nimport { registerIntegration } from '../../registry';\nimport { execSync } from 'child_process';\nimport { writeFileSync, mkdtempSync, rmSync } from 'fs';\nimport { join } from 'path';\nimport { tmpdir } from 'os';\n\n/**\n * CLI integration for Almadar CLI commands.\n *\n * Wraps `@almadar/cli` commands (validate, compile) as integration actions.\n * This runs server-side and executes CLI commands as child processes.\n *\n * Actions:\n * - validate: Validate an orbital schema and return structured results\n */\nexport class CLIIntegration extends BaseIntegration {\n constructor(config: IntegrationConfig) {\n super(config);\n this.logger.info('CLI integration initialized');\n }\n\n async execute(\n action: string,\n params: Record<string, unknown>,\n ): Promise<IntegrationResult> {\n const startTime = Date.now();\n\n try {\n let data: unknown;\n\n switch (action) {\n case 'validate':\n data = await this.validate(params);\n break;\n default:\n throw new Error(`Unknown CLI action: ${action}`);\n }\n\n return {\n success: true,\n data,\n metadata: this.createMetadata(action, Date.now() - startTime),\n };\n } catch (error) {\n return this.handleError(action, error);\n }\n }\n\n private async validate(params: Record<string, unknown>) {\n const { schema } = params as { schema: string };\n\n if (!schema || typeof schema !== 'string') {\n throw new Error('validate requires a \"schema\" parameter (string)');\n }\n\n // Create temp directory for the schema file\n const tempDir = mkdtempSync(join(tmpdir(), 'almadar-validate-'));\n const schemaPath = join(tempDir, 'schema.orb');\n\n try {\n // Write schema content to temp file\n writeFileSync(schemaPath, schema, 'utf-8');\n\n this.logger.debug('Validating schema', { path: schemaPath });\n\n // Run CLI validation\n const output = execSync(\n `npx @almadar/cli validate \"${schemaPath}\" --format=json`,\n {\n encoding: 'utf-8',\n timeout: 30000,\n cwd: tempDir,\n stdio: ['pipe', 'pipe', 'pipe'],\n },\n );\n\n // Parse JSON output\n const result = JSON.parse(output.trim());\n\n return {\n valid: result.valid ?? true,\n errors: result.errors || [],\n warnings: result.warnings || [],\n summary: result.summary || '',\n };\n } catch (error: unknown) {\n // CLI may return non-zero exit code for validation failures\n const execError = error as { stdout?: string; stderr?: string; message?: string };\n if (execError.stdout) {\n try {\n const result = JSON.parse(execError.stdout.trim());\n return {\n valid: false,\n errors: result.errors || [],\n warnings: result.warnings || [],\n summary: result.summary || '',\n };\n } catch {\n // stdout wasn't valid JSON, fall through\n }\n }\n\n // Actual execution failure\n throw new Error(\n `CLI validation failed: ${execError.message || String(error)}`,\n );\n } finally {\n // Cleanup temp directory\n try {\n rmSync(tempDir, { recursive: true, force: true });\n } catch {\n // Best-effort cleanup\n }\n }\n }\n}\n\n// Auto-register\nregisterIntegration('cli', CLIIntegration);\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@almadar/integrations",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.15",
|
|
4
4
|
"description": "External service integrations for Almadar applications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -34,9 +34,10 @@
|
|
|
34
34
|
"resend": "^4.0.1",
|
|
35
35
|
"googleapis": "^144.0.0",
|
|
36
36
|
"dotenv": "^16.4.0",
|
|
37
|
-
"
|
|
38
|
-
"@almadar/
|
|
39
|
-
"@almadar/patterns": "1.
|
|
37
|
+
"zod": "^3.23.0",
|
|
38
|
+
"@almadar/core": "1.0.17",
|
|
39
|
+
"@almadar/patterns": "1.1.1",
|
|
40
|
+
"@almadar/llm": "1.0.16"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
43
|
"@types/node": "^20.0.0",
|