@marktoflow/integrations 2.0.0-alpha.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1341 -0
- package/dist/adapters/claude-agent-hooks.d.ts.map +1 -0
- package/dist/adapters/claude-agent-hooks.js +339 -0
- package/dist/adapters/claude-agent-hooks.js.map +1 -0
- package/dist/adapters/claude-agent-types.d.ts +426 -0
- package/dist/adapters/claude-agent-types.d.ts.map +1 -0
- package/dist/adapters/claude-agent-types.js +62 -0
- package/dist/adapters/claude-agent-types.js.map +1 -0
- package/dist/adapters/claude-agent-workflow.d.ts +393 -0
- package/dist/adapters/claude-agent-workflow.d.ts.map +1 -0
- package/dist/adapters/claude-agent-workflow.js +445 -0
- package/dist/adapters/claude-agent-workflow.js.map +1 -0
- package/dist/adapters/claude-agent.d.ts +189 -0
- package/dist/adapters/claude-agent.d.ts.map +1 -0
- package/dist/adapters/claude-agent.js +504 -0
- package/dist/adapters/claude-agent.js.map +1 -0
- package/dist/adapters/claude-code.d.ts +34 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +89 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/codex-types.d.ts +463 -0
- package/dist/adapters/codex-types.d.ts.map +1 -0
- package/dist/adapters/codex-types.js +53 -0
- package/dist/adapters/codex-types.js.map +1 -0
- package/dist/adapters/codex-workflow.d.ts +414 -0
- package/dist/adapters/codex-workflow.d.ts.map +1 -0
- package/dist/adapters/codex-workflow.js +470 -0
- package/dist/adapters/codex-workflow.js.map +1 -0
- package/dist/adapters/codex.d.ts +154 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +416 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/github-copilot-types.d.ts +1012 -0
- package/dist/adapters/github-copilot-types.d.ts.map +1 -0
- package/dist/adapters/github-copilot-types.js +80 -0
- package/dist/adapters/github-copilot-types.js.map +1 -0
- package/dist/adapters/github-copilot-workflow.d.ts +462 -0
- package/dist/adapters/github-copilot-workflow.d.ts.map +1 -0
- package/dist/adapters/github-copilot-workflow.js +473 -0
- package/dist/adapters/github-copilot-workflow.js.map +1 -0
- package/dist/adapters/github-copilot.d.ts +280 -0
- package/dist/adapters/github-copilot.d.ts.map +1 -0
- package/dist/adapters/github-copilot.js +468 -0
- package/dist/adapters/github-copilot.js.map +1 -0
- package/dist/adapters/ollama.d.ts.map +1 -0
- package/dist/adapters/ollama.js +9 -0
- package/dist/adapters/ollama.js.map +1 -0
- package/dist/adapters/opencode.d.ts +41 -0
- package/dist/adapters/opencode.d.ts.map +1 -0
- package/dist/adapters/opencode.js +148 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +161 -0
- package/dist/index.js.map +1 -0
- package/dist/services/ai-browser.d.ts +112 -0
- package/dist/services/ai-browser.d.ts.map +1 -0
- package/dist/services/ai-browser.js +363 -0
- package/dist/services/ai-browser.js.map +1 -0
- package/dist/services/airtable.d.ts.map +1 -0
- package/dist/services/airtable.js +295 -0
- package/dist/services/airtable.js.map +1 -0
- package/dist/services/asana.d.ts +159 -0
- package/dist/services/asana.d.ts.map +1 -0
- package/dist/services/asana.js +196 -0
- package/dist/services/asana.js.map +1 -0
- package/dist/services/aws-s3.d.ts +89 -0
- package/dist/services/aws-s3.d.ts.map +1 -0
- package/dist/services/aws-s3.js +154 -0
- package/dist/services/aws-s3.js.map +1 -0
- package/dist/services/confluence.d.ts.map +1 -0
- package/dist/services/confluence.js +356 -0
- package/dist/services/confluence.js.map +1 -0
- package/dist/services/discord.d.ts.map +1 -0
- package/dist/services/discord.js +279 -0
- package/dist/services/discord.js.map +1 -0
- package/dist/services/dropbox.d.ts +134 -0
- package/dist/services/dropbox.d.ts.map +1 -0
- package/dist/services/dropbox.js +190 -0
- package/dist/services/dropbox.js.map +1 -0
- package/dist/services/github.d.ts.map +1 -0
- package/dist/services/github.js +13 -0
- package/dist/services/github.js.map +1 -0
- package/dist/services/gmail-trigger.d.ts.map +1 -0
- package/dist/services/gmail-trigger.js +172 -0
- package/dist/services/gmail-trigger.js.map +1 -0
- package/dist/services/gmail.d.ts.map +1 -0
- package/dist/services/gmail.js +372 -0
- package/dist/services/gmail.js.map +1 -0
- package/dist/services/google-calendar.d.ts.map +1 -0
- package/dist/services/google-calendar.js +357 -0
- package/dist/services/google-calendar.js.map +1 -0
- package/dist/services/google-docs.d.ts.map +1 -0
- package/dist/services/google-docs.js +332 -0
- package/dist/services/google-docs.js.map +1 -0
- package/dist/services/google-drive.d.ts.map +1 -0
- package/dist/services/google-drive.js +327 -0
- package/dist/services/google-drive.js.map +1 -0
- package/dist/services/google-sheets.d.ts.map +1 -0
- package/dist/services/google-sheets.js +391 -0
- package/dist/services/google-sheets.js.map +1 -0
- package/dist/services/http.d.ts.map +1 -0
- package/dist/services/http.js +284 -0
- package/dist/services/http.js.map +1 -0
- package/dist/services/jira.d.ts.map +1 -0
- package/dist/services/jira.js +35 -0
- package/dist/services/jira.js.map +1 -0
- package/dist/services/linear.d.ts.map +1 -0
- package/dist/services/linear.js +326 -0
- package/dist/services/linear.js.map +1 -0
- package/dist/services/mailchimp.d.ts +169 -0
- package/dist/services/mailchimp.d.ts.map +1 -0
- package/dist/services/mailchimp.js +180 -0
- package/dist/services/mailchimp.js.map +1 -0
- package/dist/services/mysql.d.ts.map +1 -0
- package/dist/services/mysql.js +250 -0
- package/dist/services/mysql.js.map +1 -0
- package/dist/services/notion.d.ts.map +1 -0
- package/dist/services/notion.js +358 -0
- package/dist/services/notion.js.map +1 -0
- package/dist/services/outlook-trigger.d.ts.map +1 -0
- package/dist/services/outlook-trigger.js +204 -0
- package/dist/services/outlook-trigger.js.map +1 -0
- package/dist/services/outlook.d.ts.map +1 -0
- package/dist/services/outlook.js +486 -0
- package/dist/services/outlook.js.map +1 -0
- package/dist/services/playwright.d.ts +678 -0
- package/dist/services/playwright.d.ts.map +1 -0
- package/dist/services/playwright.js +1141 -0
- package/dist/services/playwright.js.map +1 -0
- package/dist/services/postgres.d.ts.map +1 -0
- package/dist/services/postgres.js +230 -0
- package/dist/services/postgres.js.map +1 -0
- package/dist/services/sendgrid.d.ts +43 -0
- package/dist/services/sendgrid.d.ts.map +1 -0
- package/dist/services/sendgrid.js +87 -0
- package/dist/services/sendgrid.js.map +1 -0
- package/dist/services/shopify.d.ts +160 -0
- package/dist/services/shopify.d.ts.map +1 -0
- package/dist/services/shopify.js +166 -0
- package/dist/services/shopify.js.map +1 -0
- package/dist/services/slack-socket.d.ts.map +1 -0
- package/dist/services/slack-socket.js +48 -0
- package/dist/services/slack-socket.js.map +1 -0
- package/dist/services/slack.d.ts.map +1 -0
- package/dist/services/slack.js +11 -0
- package/dist/services/slack.js.map +1 -0
- package/dist/services/stripe.d.ts +275 -0
- package/dist/services/stripe.d.ts.map +1 -0
- package/dist/services/stripe.js +229 -0
- package/dist/services/stripe.js.map +1 -0
- package/dist/services/supabase.d.ts.map +1 -0
- package/dist/services/supabase.js +328 -0
- package/dist/services/supabase.js.map +1 -0
- package/dist/services/teams.d.ts +224 -0
- package/dist/services/teams.d.ts.map +1 -0
- package/dist/services/teams.js +229 -0
- package/dist/services/teams.js.map +1 -0
- package/dist/services/telegram.d.ts.map +1 -0
- package/dist/services/telegram.js +247 -0
- package/dist/services/telegram.js.map +1 -0
- package/dist/services/trello.d.ts +160 -0
- package/dist/services/trello.d.ts.map +1 -0
- package/dist/services/trello.js +194 -0
- package/dist/services/trello.js.map +1 -0
- package/dist/services/twilio.d.ts +126 -0
- package/dist/services/twilio.d.ts.map +1 -0
- package/dist/services/twilio.js +153 -0
- package/dist/services/twilio.js.map +1 -0
- package/dist/services/whatsapp.d.ts.map +1 -0
- package/dist/services/whatsapp.js +253 -0
- package/dist/services/whatsapp.js.map +1 -0
- package/dist/services/zendesk.d.ts +134 -0
- package/dist/services/zendesk.d.ts.map +1 -0
- package/dist/services/zendesk.js +148 -0
- package/dist/services/zendesk.js.map +1 -0
- package/dist/tools/script.d.ts +21 -0
- package/dist/tools/script.d.ts.map +1 -0
- package/dist/tools/script.js +136 -0
- package/dist/tools/script.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent SDK Adapter for marktoflow
|
|
3
|
+
*
|
|
4
|
+
* This adapter provides deep integration with the Claude Agent SDK,
|
|
5
|
+
* enabling agentic workflows with built-in tools, MCP support,
|
|
6
|
+
* session management, and streaming capabilities.
|
|
7
|
+
*
|
|
8
|
+
* Unlike the CLI-based claude-code adapter, this uses the SDK directly
|
|
9
|
+
* for lower latency and richer functionality.
|
|
10
|
+
*/
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Claude Agent Client
|
|
13
|
+
// ============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Client for interacting with Claude via the Agent SDK
|
|
16
|
+
*
|
|
17
|
+
* Provides multiple interfaces for different use cases:
|
|
18
|
+
* - generate(): Simple prompt-response (compatible with old interface)
|
|
19
|
+
* - query(): Full agentic capabilities with streaming
|
|
20
|
+
* - runWithTools(): Execute with specific built-in tools
|
|
21
|
+
* - runWithSubagents(): Delegate to specialized subagents
|
|
22
|
+
*/
|
|
23
|
+
export class ClaudeAgentClient {
|
|
24
|
+
sdk = null;
|
|
25
|
+
options;
|
|
26
|
+
currentQuery = null;
|
|
27
|
+
sessionId = null;
|
|
28
|
+
constructor(options = {}) {
|
|
29
|
+
this.options = {
|
|
30
|
+
permissionMode: 'acceptEdits',
|
|
31
|
+
maxTurns: 50,
|
|
32
|
+
...options,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Initialize the Agent SDK (lazy loading)
|
|
37
|
+
*/
|
|
38
|
+
async getSDK() {
|
|
39
|
+
if (!this.sdk) {
|
|
40
|
+
try {
|
|
41
|
+
// Dynamic import of the Agent SDK (optional dependency)
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
43
|
+
const module = await import(/* webpackIgnore: true */ '@anthropic-ai/claude-agent-sdk').catch(() => null);
|
|
44
|
+
if (!module) {
|
|
45
|
+
throw new Error('SDK not installed');
|
|
46
|
+
}
|
|
47
|
+
this.sdk = module;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
throw new Error(`Failed to load Claude Agent SDK. Install it with: npm install @anthropic-ai/claude-agent-sdk\n` +
|
|
51
|
+
`Original error: ${error}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return this.sdk;
|
|
55
|
+
}
|
|
56
|
+
// ============================================================================
|
|
57
|
+
// Simple Interface (backwards compatible)
|
|
58
|
+
// ============================================================================
|
|
59
|
+
/**
|
|
60
|
+
* Generate a response from Claude (simple interface)
|
|
61
|
+
*
|
|
62
|
+
* This method is compatible with the old CLI-based interface,
|
|
63
|
+
* but uses the Agent SDK under the hood for better performance.
|
|
64
|
+
*
|
|
65
|
+
* @param inputs - Prompt string or object with prompt and options
|
|
66
|
+
* @returns The generated response text
|
|
67
|
+
*/
|
|
68
|
+
async generate(inputs) {
|
|
69
|
+
const prompt = typeof inputs === 'string' ? inputs : inputs.prompt;
|
|
70
|
+
const modelOverride = typeof inputs === 'string' ? undefined : inputs.model;
|
|
71
|
+
const result = await this.run(prompt, {
|
|
72
|
+
...this.options,
|
|
73
|
+
model: modelOverride || this.options.model,
|
|
74
|
+
// For simple generation, limit tools
|
|
75
|
+
allowedTools: [],
|
|
76
|
+
});
|
|
77
|
+
return result.result || '';
|
|
78
|
+
}
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// Full Agentic Interface
|
|
81
|
+
// ============================================================================
|
|
82
|
+
/**
|
|
83
|
+
* Run an agentic query with full capabilities
|
|
84
|
+
*
|
|
85
|
+
* @param prompt - The task for the agent to perform
|
|
86
|
+
* @param options - Override options for this query
|
|
87
|
+
* @returns Complete result with all messages and metadata
|
|
88
|
+
*/
|
|
89
|
+
async run(prompt, options) {
|
|
90
|
+
const messages = [];
|
|
91
|
+
const mergedOptions = { ...this.options, ...options };
|
|
92
|
+
for await (const message of this.query(prompt, mergedOptions)) {
|
|
93
|
+
messages.push(message);
|
|
94
|
+
}
|
|
95
|
+
// Extract result from the last message
|
|
96
|
+
const lastMessage = messages[messages.length - 1];
|
|
97
|
+
if (lastMessage?.type === 'result') {
|
|
98
|
+
const result = lastMessage;
|
|
99
|
+
this.sessionId = result.session_id || null;
|
|
100
|
+
return {
|
|
101
|
+
result: result.result,
|
|
102
|
+
error: result.error,
|
|
103
|
+
durationMs: result.duration_ms || 0,
|
|
104
|
+
costUsd: result.total_cost_usd || 0,
|
|
105
|
+
usage: {
|
|
106
|
+
inputTokens: result.usage?.input_tokens || 0,
|
|
107
|
+
outputTokens: result.usage?.output_tokens || 0,
|
|
108
|
+
cacheCreationTokens: result.usage?.cache_creation_input_tokens,
|
|
109
|
+
cacheReadTokens: result.usage?.cache_read_input_tokens,
|
|
110
|
+
},
|
|
111
|
+
sessionId: result.session_id,
|
|
112
|
+
structuredOutput: result.structured_output,
|
|
113
|
+
messages,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// No result message, construct from assistant messages
|
|
117
|
+
const assistantMessages = messages.filter((m) => m.type === 'assistant');
|
|
118
|
+
const lastAssistant = assistantMessages[assistantMessages.length - 1];
|
|
119
|
+
let resultText = '';
|
|
120
|
+
if (lastAssistant?.type === 'assistant' && lastAssistant.message) {
|
|
121
|
+
const content = lastAssistant.message.content;
|
|
122
|
+
if (typeof content === 'string') {
|
|
123
|
+
resultText = content;
|
|
124
|
+
}
|
|
125
|
+
else if (Array.isArray(content)) {
|
|
126
|
+
resultText = content
|
|
127
|
+
.filter((c) => c.type === 'text')
|
|
128
|
+
.map((c) => c.text)
|
|
129
|
+
.join('\n');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
result: resultText,
|
|
134
|
+
durationMs: 0,
|
|
135
|
+
costUsd: 0,
|
|
136
|
+
usage: { inputTokens: 0, outputTokens: 0 },
|
|
137
|
+
messages,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Stream messages from an agentic query
|
|
142
|
+
*
|
|
143
|
+
* @param prompt - The task for the agent to perform
|
|
144
|
+
* @param callback - Called for each message received
|
|
145
|
+
* @param options - Override options for this query
|
|
146
|
+
* @returns Complete result after streaming finishes
|
|
147
|
+
*/
|
|
148
|
+
async stream(prompt, callback, options) {
|
|
149
|
+
const messages = [];
|
|
150
|
+
const mergedOptions = { ...this.options, ...options };
|
|
151
|
+
for await (const message of this.query(prompt, mergedOptions)) {
|
|
152
|
+
messages.push(message);
|
|
153
|
+
await callback(message);
|
|
154
|
+
}
|
|
155
|
+
const lastMessage = messages[messages.length - 1];
|
|
156
|
+
if (lastMessage?.type === 'result') {
|
|
157
|
+
const result = lastMessage;
|
|
158
|
+
return {
|
|
159
|
+
result: result.result,
|
|
160
|
+
error: result.error,
|
|
161
|
+
durationMs: result.duration_ms || 0,
|
|
162
|
+
costUsd: result.total_cost_usd || 0,
|
|
163
|
+
usage: {
|
|
164
|
+
inputTokens: result.usage?.input_tokens || 0,
|
|
165
|
+
outputTokens: result.usage?.output_tokens || 0,
|
|
166
|
+
},
|
|
167
|
+
sessionId: result.session_id,
|
|
168
|
+
messages,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
result: '',
|
|
173
|
+
durationMs: 0,
|
|
174
|
+
costUsd: 0,
|
|
175
|
+
usage: { inputTokens: 0, outputTokens: 0 },
|
|
176
|
+
messages,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get the async generator for a query
|
|
181
|
+
*
|
|
182
|
+
* Use this for fine-grained control over message processing.
|
|
183
|
+
*
|
|
184
|
+
* @param prompt - The task for the agent to perform
|
|
185
|
+
* @param options - Override options for this query
|
|
186
|
+
* @returns Async generator yielding SDK messages
|
|
187
|
+
*/
|
|
188
|
+
async *query(prompt, options) {
|
|
189
|
+
const sdk = await this.getSDK();
|
|
190
|
+
const mergedOptions = { ...this.options, ...options };
|
|
191
|
+
// Convert options to SDK format
|
|
192
|
+
const sdkOptions = this.convertToSDKOptions(mergedOptions);
|
|
193
|
+
// If resuming, add the resume option
|
|
194
|
+
if (mergedOptions.resume) {
|
|
195
|
+
sdkOptions.resume = mergedOptions.resume;
|
|
196
|
+
}
|
|
197
|
+
// Create the query
|
|
198
|
+
this.currentQuery = sdk.query({
|
|
199
|
+
prompt,
|
|
200
|
+
options: sdkOptions,
|
|
201
|
+
});
|
|
202
|
+
try {
|
|
203
|
+
for await (const message of this.currentQuery) {
|
|
204
|
+
yield message;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
finally {
|
|
208
|
+
this.currentQuery = null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// ============================================================================
|
|
212
|
+
// Tool-Specific Methods
|
|
213
|
+
// ============================================================================
|
|
214
|
+
/**
|
|
215
|
+
* Run with specific built-in tools enabled
|
|
216
|
+
*
|
|
217
|
+
* @param prompt - The task for the agent to perform
|
|
218
|
+
* @param tools - List of tools to enable
|
|
219
|
+
* @param options - Additional options
|
|
220
|
+
*/
|
|
221
|
+
async runWithTools(prompt, tools, options) {
|
|
222
|
+
return this.run(prompt, {
|
|
223
|
+
...options,
|
|
224
|
+
allowedTools: tools,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Run a code analysis task
|
|
229
|
+
*
|
|
230
|
+
* @param prompt - What to analyze
|
|
231
|
+
* @param options - Additional options
|
|
232
|
+
*/
|
|
233
|
+
async analyzeCode(prompt, options) {
|
|
234
|
+
return this.runWithTools(prompt, ['Read', 'Glob', 'Grep'], options);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Run a code modification task
|
|
238
|
+
*
|
|
239
|
+
* @param prompt - What to modify
|
|
240
|
+
* @param options - Additional options
|
|
241
|
+
*/
|
|
242
|
+
async modifyCode(prompt, options) {
|
|
243
|
+
return this.runWithTools(prompt, ['Read', 'Write', 'Edit', 'Glob', 'Grep'], options);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Run a bash command task
|
|
247
|
+
*
|
|
248
|
+
* @param prompt - What commands to run
|
|
249
|
+
* @param options - Additional options
|
|
250
|
+
*/
|
|
251
|
+
async runCommands(prompt, options) {
|
|
252
|
+
return this.runWithTools(prompt, ['Bash', 'Read', 'Glob'], options);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Run a web research task
|
|
256
|
+
*
|
|
257
|
+
* @param prompt - What to research
|
|
258
|
+
* @param options - Additional options
|
|
259
|
+
*/
|
|
260
|
+
async webResearch(prompt, options) {
|
|
261
|
+
return this.runWithTools(prompt, ['WebSearch', 'WebFetch'], options);
|
|
262
|
+
}
|
|
263
|
+
// ============================================================================
|
|
264
|
+
// Subagent Methods
|
|
265
|
+
// ============================================================================
|
|
266
|
+
/**
|
|
267
|
+
* Run with subagents for specialized tasks
|
|
268
|
+
*
|
|
269
|
+
* @param prompt - The main task
|
|
270
|
+
* @param agents - Subagent definitions
|
|
271
|
+
* @param options - Additional options
|
|
272
|
+
*/
|
|
273
|
+
async runWithSubagents(prompt, agents, options) {
|
|
274
|
+
return this.run(prompt, {
|
|
275
|
+
...options,
|
|
276
|
+
agents,
|
|
277
|
+
allowedTools: [...(options?.allowedTools || []), 'Task'],
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Run a code review with specialized subagents
|
|
282
|
+
*
|
|
283
|
+
* @param prompt - What to review
|
|
284
|
+
* @param options - Additional options
|
|
285
|
+
*/
|
|
286
|
+
async codeReview(prompt, options) {
|
|
287
|
+
return this.runWithSubagents(prompt, {
|
|
288
|
+
'code-reviewer': {
|
|
289
|
+
description: 'Review code for quality, correctness, and best practices',
|
|
290
|
+
tools: ['Read', 'Glob', 'Grep'],
|
|
291
|
+
prompt: 'You are a senior code reviewer. Focus on code quality, potential bugs, security issues, and performance problems.',
|
|
292
|
+
},
|
|
293
|
+
'security-auditor': {
|
|
294
|
+
description: 'Audit code for security vulnerabilities',
|
|
295
|
+
tools: ['Read', 'Glob', 'Grep'],
|
|
296
|
+
prompt: 'You are a security expert. Look for OWASP Top 10 vulnerabilities, injection attacks, authentication issues, and data exposure risks.',
|
|
297
|
+
},
|
|
298
|
+
'test-analyzer': {
|
|
299
|
+
description: 'Analyze test coverage and quality',
|
|
300
|
+
tools: ['Read', 'Glob', 'Grep', 'Bash'],
|
|
301
|
+
prompt: 'You are a testing expert. Analyze test coverage, identify missing tests, and suggest improvements.',
|
|
302
|
+
},
|
|
303
|
+
}, options);
|
|
304
|
+
}
|
|
305
|
+
// ============================================================================
|
|
306
|
+
// Session Management
|
|
307
|
+
// ============================================================================
|
|
308
|
+
/**
|
|
309
|
+
* Resume a previous session
|
|
310
|
+
*
|
|
311
|
+
* @param sessionId - The session ID to resume
|
|
312
|
+
* @param prompt - New prompt to continue with
|
|
313
|
+
* @param options - Additional options
|
|
314
|
+
*/
|
|
315
|
+
async resumeSession(sessionId, prompt, options) {
|
|
316
|
+
return this.run(prompt, {
|
|
317
|
+
...options,
|
|
318
|
+
resume: sessionId,
|
|
319
|
+
continue: true,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Get the last session ID
|
|
324
|
+
*/
|
|
325
|
+
getSessionId() {
|
|
326
|
+
return this.sessionId;
|
|
327
|
+
}
|
|
328
|
+
// ============================================================================
|
|
329
|
+
// Control Methods
|
|
330
|
+
// ============================================================================
|
|
331
|
+
/**
|
|
332
|
+
* Interrupt the current query
|
|
333
|
+
*/
|
|
334
|
+
async interrupt() {
|
|
335
|
+
if (this.currentQuery) {
|
|
336
|
+
await this.currentQuery.interrupt();
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
// ============================================================================
|
|
340
|
+
// Private Methods
|
|
341
|
+
// ============================================================================
|
|
342
|
+
/**
|
|
343
|
+
* Convert marktoflow options to Agent SDK options
|
|
344
|
+
*/
|
|
345
|
+
convertToSDKOptions(options) {
|
|
346
|
+
const sdkOptions = {};
|
|
347
|
+
if (options.model)
|
|
348
|
+
sdkOptions.model = options.model;
|
|
349
|
+
if (options.cwd)
|
|
350
|
+
sdkOptions.cwd = options.cwd;
|
|
351
|
+
if (options.additionalDirectories)
|
|
352
|
+
sdkOptions.additionalDirectories = options.additionalDirectories;
|
|
353
|
+
if (options.excludeFiles)
|
|
354
|
+
sdkOptions.excludeFiles = options.excludeFiles;
|
|
355
|
+
if (options.env)
|
|
356
|
+
sdkOptions.env = options.env;
|
|
357
|
+
if (options.allowedTools)
|
|
358
|
+
sdkOptions.allowedTools = options.allowedTools;
|
|
359
|
+
if (options.disallowedTools)
|
|
360
|
+
sdkOptions.disallowedTools = options.disallowedTools;
|
|
361
|
+
if (options.permissionMode)
|
|
362
|
+
sdkOptions.permissionMode = options.permissionMode;
|
|
363
|
+
if (options.canUseTool)
|
|
364
|
+
sdkOptions.canUseTool = options.canUseTool;
|
|
365
|
+
if (options.maxTurns)
|
|
366
|
+
sdkOptions.maxTurns = options.maxTurns;
|
|
367
|
+
if (options.maxBudgetUsd)
|
|
368
|
+
sdkOptions.maxBudgetUsd = options.maxBudgetUsd;
|
|
369
|
+
if (options.maxThinkingTokens)
|
|
370
|
+
sdkOptions.maxThinkingTokens = options.maxThinkingTokens;
|
|
371
|
+
if (options.enableFileCheckpointing)
|
|
372
|
+
sdkOptions.enableFileCheckpointing = options.enableFileCheckpointing;
|
|
373
|
+
if (options.mcpServers)
|
|
374
|
+
sdkOptions.mcpServers = options.mcpServers;
|
|
375
|
+
if (options.agents)
|
|
376
|
+
sdkOptions.agents = options.agents;
|
|
377
|
+
if (options.hooks)
|
|
378
|
+
sdkOptions.hooks = options.hooks;
|
|
379
|
+
if (options.outputFormat)
|
|
380
|
+
sdkOptions.outputFormat = options.outputFormat;
|
|
381
|
+
if (options.systemPrompt)
|
|
382
|
+
sdkOptions.systemPrompt = options.systemPrompt;
|
|
383
|
+
if (options.continue)
|
|
384
|
+
sdkOptions.continue = options.continue;
|
|
385
|
+
return sdkOptions;
|
|
386
|
+
}
|
|
387
|
+
// ============================================================================
|
|
388
|
+
// OpenAI-Compatible Interface
|
|
389
|
+
// ============================================================================
|
|
390
|
+
/**
|
|
391
|
+
* OpenAI-compatible chat interface for workflow compatibility
|
|
392
|
+
*/
|
|
393
|
+
chat = {
|
|
394
|
+
completions: async (inputs) => {
|
|
395
|
+
// Combine all messages into a single prompt
|
|
396
|
+
// System messages provide context, user messages are the actual requests
|
|
397
|
+
let combinedPrompt = '';
|
|
398
|
+
for (const msg of inputs.messages) {
|
|
399
|
+
if (msg.role === 'system') {
|
|
400
|
+
combinedPrompt += msg.content + '\n\n';
|
|
401
|
+
}
|
|
402
|
+
else if (msg.role === 'user') {
|
|
403
|
+
combinedPrompt += msg.content;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
// Use the generate method with combined prompt
|
|
407
|
+
const response = await this.generate({
|
|
408
|
+
prompt: combinedPrompt,
|
|
409
|
+
model: inputs.model,
|
|
410
|
+
});
|
|
411
|
+
// Return OpenAI-compatible format
|
|
412
|
+
return {
|
|
413
|
+
choices: [
|
|
414
|
+
{
|
|
415
|
+
message: {
|
|
416
|
+
content: response,
|
|
417
|
+
},
|
|
418
|
+
},
|
|
419
|
+
],
|
|
420
|
+
};
|
|
421
|
+
},
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
// ============================================================================
|
|
425
|
+
// Custom MCP Tool Factory
|
|
426
|
+
// ============================================================================
|
|
427
|
+
/**
|
|
428
|
+
* Create a custom MCP tool for use with the Agent SDK
|
|
429
|
+
*
|
|
430
|
+
* @param name - Tool name
|
|
431
|
+
* @param description - Tool description
|
|
432
|
+
* @param schema - Zod schema for input validation
|
|
433
|
+
* @param handler - Function to execute when tool is called
|
|
434
|
+
*/
|
|
435
|
+
export async function createCustomTool(name, description, schema, handler) {
|
|
436
|
+
try {
|
|
437
|
+
// Dynamic import of the Agent SDK (optional dependency)
|
|
438
|
+
const module = (await import(/* webpackIgnore: true */ '@anthropic-ai/claude-agent-sdk').catch(() => null));
|
|
439
|
+
if (!module?.tool) {
|
|
440
|
+
throw new Error('SDK not installed');
|
|
441
|
+
}
|
|
442
|
+
const tool = module.tool;
|
|
443
|
+
return tool(name, description, schema, handler);
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
throw new Error(`Failed to create custom tool. Install the Agent SDK: npm install @anthropic-ai/claude-agent-sdk\n` +
|
|
447
|
+
`Original error: ${error}`);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Create an in-process MCP server
|
|
452
|
+
*
|
|
453
|
+
* @param name - Server name
|
|
454
|
+
* @param tools - Array of tools created with createCustomTool
|
|
455
|
+
* @param version - Server version
|
|
456
|
+
*/
|
|
457
|
+
export async function createMcpServer(name, tools, version = '1.0.0') {
|
|
458
|
+
try {
|
|
459
|
+
// Dynamic import of the Agent SDK (optional dependency)
|
|
460
|
+
const module = (await import(/* webpackIgnore: true */ '@anthropic-ai/claude-agent-sdk').catch(() => null));
|
|
461
|
+
if (!module?.createSdkMcpServer) {
|
|
462
|
+
throw new Error('SDK not installed');
|
|
463
|
+
}
|
|
464
|
+
const createSdkMcpServer = module.createSdkMcpServer;
|
|
465
|
+
return createSdkMcpServer({
|
|
466
|
+
name,
|
|
467
|
+
version,
|
|
468
|
+
tools,
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
catch (error) {
|
|
472
|
+
throw new Error(`Failed to create MCP server. Install the Agent SDK: npm install @anthropic-ai/claude-agent-sdk\n` +
|
|
473
|
+
`Original error: ${error}`);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
// ============================================================================
|
|
477
|
+
// SDK Initializer for marktoflow Registry
|
|
478
|
+
// ============================================================================
|
|
479
|
+
/**
|
|
480
|
+
* Initializer for the SDK Registry
|
|
481
|
+
*/
|
|
482
|
+
export const ClaudeAgentInitializer = {
|
|
483
|
+
async initialize(_module, config) {
|
|
484
|
+
const options = config.options || {};
|
|
485
|
+
return new ClaudeAgentClient({
|
|
486
|
+
model: options['model'],
|
|
487
|
+
cwd: options['cwd'],
|
|
488
|
+
additionalDirectories: options['additionalDirectories'],
|
|
489
|
+
env: options['env'],
|
|
490
|
+
allowedTools: options['allowedTools'],
|
|
491
|
+
disallowedTools: options['disallowedTools'],
|
|
492
|
+
permissionMode: options['permissionMode'],
|
|
493
|
+
maxTurns: options['maxTurns'],
|
|
494
|
+
maxBudgetUsd: options['maxBudgetUsd'],
|
|
495
|
+
maxThinkingTokens: options['maxThinkingTokens'],
|
|
496
|
+
timeout: options['timeout'],
|
|
497
|
+
enableFileCheckpointing: options['enableFileCheckpointing'],
|
|
498
|
+
mcpServers: options['mcpServers'],
|
|
499
|
+
agents: options['agents'],
|
|
500
|
+
systemPrompt: options['systemPrompt'],
|
|
501
|
+
});
|
|
502
|
+
},
|
|
503
|
+
};
|
|
504
|
+
//# sourceMappingURL=claude-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-agent.js","sourceRoot":"","sources":["../../src/adapters/claude-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SDKInitializer } from '@marktoflow/core';
|
|
2
|
+
export declare class ClaudeCodeClient {
|
|
3
|
+
private options;
|
|
4
|
+
constructor(options?: {
|
|
5
|
+
cliPath?: string;
|
|
6
|
+
model?: string;
|
|
7
|
+
cwd?: string;
|
|
8
|
+
timeout?: number;
|
|
9
|
+
});
|
|
10
|
+
generate(inputs: {
|
|
11
|
+
prompt: string;
|
|
12
|
+
model?: string;
|
|
13
|
+
} | string): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* OpenAI-compatible chat interface for workflow compatibility
|
|
16
|
+
*/
|
|
17
|
+
chat: {
|
|
18
|
+
completions: (inputs: {
|
|
19
|
+
model?: string;
|
|
20
|
+
messages: Array<{
|
|
21
|
+
role: string;
|
|
22
|
+
content: string;
|
|
23
|
+
}>;
|
|
24
|
+
}) => Promise<{
|
|
25
|
+
choices: Array<{
|
|
26
|
+
message: {
|
|
27
|
+
content: string;
|
|
28
|
+
};
|
|
29
|
+
}>;
|
|
30
|
+
}>;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export declare const ClaudeCodeInitializer: SDKInitializer;
|
|
34
|
+
//# sourceMappingURL=claude-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE9D,qBAAa,gBAAgB;IACf,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KACb;IAEA,QAAQ,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6CpF;;OAEG;IACH,IAAI;8BAC0B;YAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,QAAQ,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SACpD,KAAG,OAAO,CAAC;YAAE,OAAO,EAAE,KAAK,CAAC;gBAAE,OAAO,EAAE;oBAAE,OAAO,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC;MA8BjE;CACH;AAED,eAAO,MAAM,qBAAqB,EAAE,cAUnC,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
export class ClaudeCodeClient {
|
|
3
|
+
options;
|
|
4
|
+
constructor(options = {}) {
|
|
5
|
+
this.options = options;
|
|
6
|
+
}
|
|
7
|
+
async generate(inputs) {
|
|
8
|
+
const prompt = typeof inputs === 'string' ? inputs : inputs.prompt;
|
|
9
|
+
const modelOverride = typeof inputs === 'string' ? undefined : inputs.model;
|
|
10
|
+
const cliPath = this.options.cliPath || 'claude';
|
|
11
|
+
const cwd = this.options.cwd || process.cwd();
|
|
12
|
+
const timeout = this.options.timeout || 120000;
|
|
13
|
+
const args = ['-p', prompt];
|
|
14
|
+
const model = modelOverride || this.options.model;
|
|
15
|
+
if (model) {
|
|
16
|
+
args.push('--model', model);
|
|
17
|
+
}
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
const process = spawn(cliPath, args, { cwd });
|
|
20
|
+
let stdout = '';
|
|
21
|
+
let stderr = '';
|
|
22
|
+
process.stdout.on('data', (data) => { stdout += data.toString(); });
|
|
23
|
+
process.stderr.on('data', (data) => { stderr += data.toString(); });
|
|
24
|
+
const timeoutId = setTimeout(() => {
|
|
25
|
+
process.kill();
|
|
26
|
+
reject(new Error(`Claude Code CLI timed out after ${timeout}ms`));
|
|
27
|
+
}, timeout);
|
|
28
|
+
process.on('close', (code) => {
|
|
29
|
+
clearTimeout(timeoutId);
|
|
30
|
+
if (code === 0) {
|
|
31
|
+
resolve(stdout.trim());
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// Check if stderr contains useful info even if code != 0
|
|
35
|
+
reject(new Error(`Claude Code CLI failed (exit code ${code})\nSTDOUT: ${stdout}\nSTDERR: ${stderr}`));
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
process.on('error', (err) => {
|
|
39
|
+
clearTimeout(timeoutId);
|
|
40
|
+
reject(err);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* OpenAI-compatible chat interface for workflow compatibility
|
|
46
|
+
*/
|
|
47
|
+
chat = {
|
|
48
|
+
completions: async (inputs) => {
|
|
49
|
+
// Combine all messages into a single prompt
|
|
50
|
+
// System messages provide context, user messages are the actual requests
|
|
51
|
+
let combinedPrompt = '';
|
|
52
|
+
for (const msg of inputs.messages) {
|
|
53
|
+
if (msg.role === 'system') {
|
|
54
|
+
combinedPrompt += msg.content + '\n\n';
|
|
55
|
+
}
|
|
56
|
+
else if (msg.role === 'user') {
|
|
57
|
+
combinedPrompt += msg.content;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Use the generate method with combined prompt
|
|
61
|
+
const response = await this.generate({
|
|
62
|
+
prompt: combinedPrompt,
|
|
63
|
+
model: inputs.model,
|
|
64
|
+
});
|
|
65
|
+
// Return OpenAI-compatible format
|
|
66
|
+
return {
|
|
67
|
+
choices: [
|
|
68
|
+
{
|
|
69
|
+
message: {
|
|
70
|
+
content: response,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export const ClaudeCodeInitializer = {
|
|
79
|
+
async initialize(_module, config) {
|
|
80
|
+
const options = config.options || {};
|
|
81
|
+
return new ClaudeCodeClient({
|
|
82
|
+
cliPath: options['cliPath'],
|
|
83
|
+
model: options['model'],
|
|
84
|
+
cwd: options['cwd'],
|
|
85
|
+
timeout: options['timeout'],
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
|