linguclaw 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,137 @@
1
+ /**
2
+ * API Integration Framework - Connect to external services
3
+ *
4
+ * Core capabilities:
5
+ * - GitHub: Repository management, issues, PRs, code search
6
+ * - Slack: Send messages, read channels
7
+ * - Google Calendar: Create/read events
8
+ * - Generic REST API: Call any HTTP endpoint
9
+ * - Webhook: Receive and send webhooks
10
+ * - Rate limiting and retry built-in
11
+ */
12
+ export interface APICredentials {
13
+ type: 'bearer' | 'basic' | 'api_key' | 'oauth2' | 'none';
14
+ token?: string;
15
+ username?: string;
16
+ password?: string;
17
+ apiKey?: string;
18
+ apiKeyHeader?: string;
19
+ }
20
+ export interface APIResponse<T = any> {
21
+ success: boolean;
22
+ data?: T;
23
+ status?: number;
24
+ headers?: Record<string, string>;
25
+ error?: string;
26
+ duration?: number;
27
+ }
28
+ export interface IntegrationConfig {
29
+ name: string;
30
+ baseUrl: string;
31
+ credentials: APICredentials;
32
+ timeout?: number;
33
+ retries?: number;
34
+ rateLimitPerMinute?: number;
35
+ headers?: Record<string, string>;
36
+ }
37
+ export declare class APIClient {
38
+ private client;
39
+ private config;
40
+ private rateLimiter;
41
+ constructor(config: IntegrationConfig);
42
+ request<T = any>(method: string, path: string, data?: any, extraHeaders?: Record<string, string>): Promise<APIResponse<T>>;
43
+ get<T = any>(path: string, params?: Record<string, any>): Promise<APIResponse<T>>;
44
+ post<T = any>(path: string, data?: any): Promise<APIResponse<T>>;
45
+ put<T = any>(path: string, data?: any): Promise<APIResponse<T>>;
46
+ delete<T = any>(path: string): Promise<APIResponse<T>>;
47
+ patch<T = any>(path: string, data?: any): Promise<APIResponse<T>>;
48
+ }
49
+ export declare class GitHubIntegration {
50
+ private client;
51
+ constructor(token: string);
52
+ getRepo(owner: string, repo: string): Promise<APIResponse>;
53
+ listIssues(owner: string, repo: string, state?: 'open' | 'closed' | 'all'): Promise<APIResponse>;
54
+ createIssue(owner: string, repo: string, title: string, body: string, labels?: string[]): Promise<APIResponse>;
55
+ searchCode(query: string): Promise<APIResponse>;
56
+ getFileContent(owner: string, repo: string, path: string, ref?: string): Promise<APIResponse>;
57
+ createPullRequest(owner: string, repo: string, title: string, body: string, head: string, base: string): Promise<APIResponse>;
58
+ listPullRequests(owner: string, repo: string, state?: 'open' | 'closed' | 'all'): Promise<APIResponse>;
59
+ }
60
+ export declare class SlackIntegration {
61
+ private client;
62
+ constructor(token: string);
63
+ sendMessage(channel: string, text: string, blocks?: any[]): Promise<APIResponse>;
64
+ listChannels(): Promise<APIResponse>;
65
+ getChannelHistory(channel: string, limit?: number): Promise<APIResponse>;
66
+ uploadFile(channel: string, content: string, filename: string, title?: string): Promise<APIResponse>;
67
+ }
68
+ export declare class GenericAPI {
69
+ private client;
70
+ constructor(config: IntegrationConfig);
71
+ call(method: string, path: string, data?: any, headers?: Record<string, string>): Promise<APIResponse>;
72
+ get(path: string, params?: Record<string, any>): Promise<APIResponse>;
73
+ post(path: string, data?: any): Promise<APIResponse>;
74
+ }
75
+ export interface WebhookEvent {
76
+ id: string;
77
+ source: string;
78
+ event: string;
79
+ payload: any;
80
+ timestamp: Date;
81
+ headers: Record<string, string>;
82
+ }
83
+ export declare class WebhookHandler {
84
+ private handlers;
85
+ private eventLog;
86
+ private maxLogSize;
87
+ /**
88
+ * Register a handler for a specific event type
89
+ */
90
+ on(eventType: string, handler: (event: WebhookEvent) => Promise<void>): void;
91
+ /**
92
+ * Process an incoming webhook
93
+ */
94
+ process(source: string, event: string, payload: any, headers?: Record<string, string>): Promise<void>;
95
+ /**
96
+ * Get recent webhook events
97
+ */
98
+ getRecentEvents(limit?: number): WebhookEvent[];
99
+ /**
100
+ * Send a webhook to an external URL
101
+ */
102
+ send(url: string, payload: any, headers?: Record<string, string>): Promise<APIResponse>;
103
+ }
104
+ export declare class IntegrationRegistry {
105
+ private integrations;
106
+ private webhookHandler;
107
+ /**
108
+ * Register a GitHub integration
109
+ */
110
+ registerGitHub(token: string): GitHubIntegration;
111
+ /**
112
+ * Register a Slack integration
113
+ */
114
+ registerSlack(token: string): SlackIntegration;
115
+ /**
116
+ * Register a generic API integration
117
+ */
118
+ registerAPI(name: string, config: IntegrationConfig): GenericAPI;
119
+ /**
120
+ * Get an integration by name
121
+ */
122
+ get<T = any>(name: string): T | undefined;
123
+ /**
124
+ * Get the webhook handler
125
+ */
126
+ getWebhookHandler(): WebhookHandler;
127
+ /**
128
+ * List all registered integrations
129
+ */
130
+ list(): string[];
131
+ /**
132
+ * Auto-register integrations from environment variables
133
+ */
134
+ autoRegister(): string[];
135
+ }
136
+ export declare function getIntegrationRegistry(): IntegrationRegistry;
137
+ //# sourceMappingURL=api-integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-integrations.d.ts","sourceRoot":"","sources":["../src/api-integrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ /**
3
+ * API Integration Framework - Connect to external services
4
+ *
5
+ * Core capabilities:
6
+ * - GitHub: Repository management, issues, PRs, code search
7
+ * - Slack: Send messages, read channels
8
+ * - Google Calendar: Create/read events
9
+ * - Generic REST API: Call any HTTP endpoint
10
+ * - Webhook: Receive and send webhooks
11
+ * - Rate limiting and retry built-in
12
+ */
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.IntegrationRegistry = exports.WebhookHandler = exports.GenericAPI = exports.SlackIntegration = exports.GitHubIntegration = exports.APIClient = void 0;
18
+ exports.getIntegrationRegistry = getIntegrationRegistry;
19
+ const axios_1 = __importDefault(require("axios"));
20
+ const logger_1 = require("./logger");
21
+ const resilience_1 = require("./resilience");
22
+ const logger = (0, logger_1.getLogger)();
23
+ // ==================== Rate Limiter ====================
24
+ class RateLimiter {
25
+ timestamps = [];
26
+ limit;
27
+ windowMs;
28
+ constructor(requestsPerMinute) {
29
+ this.limit = requestsPerMinute;
30
+ this.windowMs = 60000;
31
+ }
32
+ async acquire() {
33
+ const now = Date.now();
34
+ this.timestamps = this.timestamps.filter(t => now - t < this.windowMs);
35
+ if (this.timestamps.length >= this.limit) {
36
+ const waitMs = this.windowMs - (now - this.timestamps[0]);
37
+ logger.debug(`[RateLimiter] Waiting ${waitMs}ms`);
38
+ await new Promise(resolve => setTimeout(resolve, waitMs));
39
+ }
40
+ this.timestamps.push(Date.now());
41
+ }
42
+ }
43
+ // ==================== Base API Client ====================
44
+ class APIClient {
45
+ client;
46
+ config;
47
+ rateLimiter;
48
+ constructor(config) {
49
+ this.config = config;
50
+ this.rateLimiter = config.rateLimitPerMinute
51
+ ? new RateLimiter(config.rateLimitPerMinute)
52
+ : null;
53
+ const headers = {
54
+ 'Content-Type': 'application/json',
55
+ 'User-Agent': 'LinguClaw/0.4.3',
56
+ ...config.headers,
57
+ };
58
+ // Apply credentials
59
+ if (config.credentials.type === 'bearer' && config.credentials.token) {
60
+ headers['Authorization'] = `Bearer ${config.credentials.token}`;
61
+ }
62
+ else if (config.credentials.type === 'api_key' && config.credentials.apiKey) {
63
+ headers[config.credentials.apiKeyHeader || 'X-API-Key'] = config.credentials.apiKey;
64
+ }
65
+ else if (config.credentials.type === 'basic' && config.credentials.username) {
66
+ const encoded = Buffer.from(`${config.credentials.username}:${config.credentials.password || ''}`).toString('base64');
67
+ headers['Authorization'] = `Basic ${encoded}`;
68
+ }
69
+ this.client = axios_1.default.create({
70
+ baseURL: config.baseUrl,
71
+ timeout: config.timeout || 30000,
72
+ headers,
73
+ });
74
+ }
75
+ async request(method, path, data, extraHeaders) {
76
+ if (this.rateLimiter)
77
+ await this.rateLimiter.acquire();
78
+ const startTime = Date.now();
79
+ try {
80
+ const response = await (0, resilience_1.withRetry)(() => this.client.request({
81
+ method,
82
+ url: path,
83
+ data,
84
+ headers: extraHeaders,
85
+ }), { maxRetries: this.config.retries || 2 }, `${this.config.name}:${method}:${path}`);
86
+ return {
87
+ success: true,
88
+ data: response.data,
89
+ status: response.status,
90
+ headers: response.headers,
91
+ duration: Date.now() - startTime,
92
+ };
93
+ }
94
+ catch (error) {
95
+ return {
96
+ success: false,
97
+ status: error.response?.status,
98
+ error: error.response?.data?.message || error.message,
99
+ duration: Date.now() - startTime,
100
+ };
101
+ }
102
+ }
103
+ async get(path, params) {
104
+ const query = params ? '?' + new URLSearchParams(params).toString() : '';
105
+ return this.request('GET', path + query);
106
+ }
107
+ async post(path, data) {
108
+ return this.request('POST', path, data);
109
+ }
110
+ async put(path, data) {
111
+ return this.request('PUT', path, data);
112
+ }
113
+ async delete(path) {
114
+ return this.request('DELETE', path);
115
+ }
116
+ async patch(path, data) {
117
+ return this.request('PATCH', path, data);
118
+ }
119
+ }
120
+ exports.APIClient = APIClient;
121
+ // ==================== GitHub Integration ====================
122
+ class GitHubIntegration {
123
+ client;
124
+ constructor(token) {
125
+ this.client = new APIClient({
126
+ name: 'GitHub',
127
+ baseUrl: 'https://api.github.com',
128
+ credentials: { type: 'bearer', token },
129
+ rateLimitPerMinute: 30,
130
+ retries: 2,
131
+ headers: { Accept: 'application/vnd.github.v3+json' },
132
+ });
133
+ }
134
+ async getRepo(owner, repo) {
135
+ return this.client.get(`/repos/${owner}/${repo}`);
136
+ }
137
+ async listIssues(owner, repo, state = 'open') {
138
+ return this.client.get(`/repos/${owner}/${repo}/issues`, { state, per_page: '30' });
139
+ }
140
+ async createIssue(owner, repo, title, body, labels) {
141
+ return this.client.post(`/repos/${owner}/${repo}/issues`, { title, body, labels });
142
+ }
143
+ async searchCode(query) {
144
+ return this.client.get('/search/code', { q: query });
145
+ }
146
+ async getFileContent(owner, repo, path, ref) {
147
+ const params = {};
148
+ if (ref)
149
+ params.ref = ref;
150
+ return this.client.get(`/repos/${owner}/${repo}/contents/${path}`, params);
151
+ }
152
+ async createPullRequest(owner, repo, title, body, head, base) {
153
+ return this.client.post(`/repos/${owner}/${repo}/pulls`, { title, body, head, base });
154
+ }
155
+ async listPullRequests(owner, repo, state = 'open') {
156
+ return this.client.get(`/repos/${owner}/${repo}/pulls`, { state, per_page: '30' });
157
+ }
158
+ }
159
+ exports.GitHubIntegration = GitHubIntegration;
160
+ // ==================== Slack Integration ====================
161
+ class SlackIntegration {
162
+ client;
163
+ constructor(token) {
164
+ this.client = new APIClient({
165
+ name: 'Slack',
166
+ baseUrl: 'https://slack.com/api',
167
+ credentials: { type: 'bearer', token },
168
+ rateLimitPerMinute: 50,
169
+ retries: 1,
170
+ });
171
+ }
172
+ async sendMessage(channel, text, blocks) {
173
+ return this.client.post('/chat.postMessage', { channel, text, blocks });
174
+ }
175
+ async listChannels() {
176
+ return this.client.get('/conversations.list', { types: 'public_channel,private_channel', limit: '100' });
177
+ }
178
+ async getChannelHistory(channel, limit = 20) {
179
+ return this.client.get('/conversations.history', { channel, limit: limit.toString() });
180
+ }
181
+ async uploadFile(channel, content, filename, title) {
182
+ return this.client.post('/files.upload', { channels: channel, content, filename, title });
183
+ }
184
+ }
185
+ exports.SlackIntegration = SlackIntegration;
186
+ // ==================== Generic REST API ====================
187
+ class GenericAPI {
188
+ client;
189
+ constructor(config) {
190
+ this.client = new APIClient(config);
191
+ }
192
+ async call(method, path, data, headers) {
193
+ return this.client.request(method, path, data, headers);
194
+ }
195
+ async get(path, params) {
196
+ return this.client.get(path, params);
197
+ }
198
+ async post(path, data) {
199
+ return this.client.post(path, data);
200
+ }
201
+ }
202
+ exports.GenericAPI = GenericAPI;
203
+ class WebhookHandler {
204
+ handlers = new Map();
205
+ eventLog = [];
206
+ maxLogSize = 100;
207
+ /**
208
+ * Register a handler for a specific event type
209
+ */
210
+ on(eventType, handler) {
211
+ if (!this.handlers.has(eventType)) {
212
+ this.handlers.set(eventType, []);
213
+ }
214
+ this.handlers.get(eventType).push(handler);
215
+ }
216
+ /**
217
+ * Process an incoming webhook
218
+ */
219
+ async process(source, event, payload, headers = {}) {
220
+ const webhookEvent = {
221
+ id: `wh-${Date.now()}-${Math.random().toString(36).substr(2, 6)}`,
222
+ source,
223
+ event,
224
+ payload,
225
+ timestamp: new Date(),
226
+ headers,
227
+ };
228
+ this.eventLog.push(webhookEvent);
229
+ if (this.eventLog.length > this.maxLogSize) {
230
+ this.eventLog = this.eventLog.slice(-this.maxLogSize);
231
+ }
232
+ const handlers = this.handlers.get(event) || [];
233
+ const wildcardHandlers = this.handlers.get('*') || [];
234
+ for (const handler of [...handlers, ...wildcardHandlers]) {
235
+ try {
236
+ await handler(webhookEvent);
237
+ }
238
+ catch (error) {
239
+ logger.error(`[Webhook] Handler error for ${event}: ${error.message}`);
240
+ }
241
+ }
242
+ logger.info(`[Webhook] Processed: ${source}/${event}`);
243
+ }
244
+ /**
245
+ * Get recent webhook events
246
+ */
247
+ getRecentEvents(limit = 20) {
248
+ return this.eventLog.slice(-limit);
249
+ }
250
+ /**
251
+ * Send a webhook to an external URL
252
+ */
253
+ async send(url, payload, headers) {
254
+ try {
255
+ const response = await axios_1.default.post(url, payload, {
256
+ headers: {
257
+ 'Content-Type': 'application/json',
258
+ 'User-Agent': 'LinguClaw-Webhook/0.4.3',
259
+ ...headers,
260
+ },
261
+ timeout: 10000,
262
+ });
263
+ return { success: true, status: response.status, data: response.data };
264
+ }
265
+ catch (error) {
266
+ return { success: false, error: error.message, status: error.response?.status };
267
+ }
268
+ }
269
+ }
270
+ exports.WebhookHandler = WebhookHandler;
271
+ // ==================== Integration Registry ====================
272
+ class IntegrationRegistry {
273
+ integrations = new Map();
274
+ webhookHandler = new WebhookHandler();
275
+ /**
276
+ * Register a GitHub integration
277
+ */
278
+ registerGitHub(token) {
279
+ const integration = new GitHubIntegration(token);
280
+ this.integrations.set('github', integration);
281
+ logger.info('[Integrations] GitHub registered');
282
+ return integration;
283
+ }
284
+ /**
285
+ * Register a Slack integration
286
+ */
287
+ registerSlack(token) {
288
+ const integration = new SlackIntegration(token);
289
+ this.integrations.set('slack', integration);
290
+ logger.info('[Integrations] Slack registered');
291
+ return integration;
292
+ }
293
+ /**
294
+ * Register a generic API integration
295
+ */
296
+ registerAPI(name, config) {
297
+ const integration = new GenericAPI(config);
298
+ this.integrations.set(name, integration);
299
+ logger.info(`[Integrations] ${name} registered`);
300
+ return integration;
301
+ }
302
+ /**
303
+ * Get an integration by name
304
+ */
305
+ get(name) {
306
+ return this.integrations.get(name);
307
+ }
308
+ /**
309
+ * Get the webhook handler
310
+ */
311
+ getWebhookHandler() {
312
+ return this.webhookHandler;
313
+ }
314
+ /**
315
+ * List all registered integrations
316
+ */
317
+ list() {
318
+ return Array.from(this.integrations.keys());
319
+ }
320
+ /**
321
+ * Auto-register integrations from environment variables
322
+ */
323
+ autoRegister() {
324
+ const registered = [];
325
+ if (process.env.GITHUB_TOKEN) {
326
+ this.registerGitHub(process.env.GITHUB_TOKEN);
327
+ registered.push('github');
328
+ }
329
+ if (process.env.SLACK_BOT_TOKEN) {
330
+ this.registerSlack(process.env.SLACK_BOT_TOKEN);
331
+ registered.push('slack');
332
+ }
333
+ if (registered.length > 0) {
334
+ logger.info(`[Integrations] Auto-registered: ${registered.join(', ')}`);
335
+ }
336
+ return registered;
337
+ }
338
+ }
339
+ exports.IntegrationRegistry = IntegrationRegistry;
340
+ // ==================== Singleton ====================
341
+ let registryInstance = null;
342
+ function getIntegrationRegistry() {
343
+ if (!registryInstance) {
344
+ registryInstance = new IntegrationRegistry();
345
+ }
346
+ return registryInstance;
347
+ }
348
+ //# sourceMappingURL=api-integrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-integrations.js","sourceRoot":"","sources":["../src/api-integrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Chain of Thought - Transparent reasoning and action tracking system
3
+ *
4
+ * Core capabilities:
5
+ * - Thought Logs: See exactly what the agent is "thinking"
6
+ * - Action Tracking: Real-time visibility into which tools are being used
7
+ * - Reasoning Chain: Full audit trail of decisions and their outcomes
8
+ * - Event Streaming: WebSocket-compatible event emission for live UI updates
9
+ */
10
+ import { EventEmitter } from 'events';
11
+ export type ThoughtType = 'reasoning' | 'planning' | 'observation' | 'decision' | 'reflection' | 'correction' | 'hypothesis' | 'conclusion';
12
+ export type ActionStatus = 'started' | 'running' | 'completed' | 'failed' | 'cancelled';
13
+ export interface ThoughtEntry {
14
+ id: string;
15
+ sessionId: string;
16
+ timestamp: Date;
17
+ type: ThoughtType;
18
+ content: string;
19
+ confidence?: number;
20
+ relatedActionId?: string;
21
+ parentThoughtId?: string;
22
+ metadata?: Record<string, any>;
23
+ }
24
+ export interface ActionEntry {
25
+ id: string;
26
+ sessionId: string;
27
+ timestamp: Date;
28
+ tool: string;
29
+ operation: string;
30
+ input: string;
31
+ output?: string;
32
+ status: ActionStatus;
33
+ duration?: number;
34
+ error?: string;
35
+ metadata?: Record<string, any>;
36
+ }
37
+ export interface ReasoningStep {
38
+ thought: ThoughtEntry;
39
+ action?: ActionEntry;
40
+ result?: string;
41
+ }
42
+ export interface SessionSummary {
43
+ sessionId: string;
44
+ task: string;
45
+ startedAt: Date;
46
+ endedAt?: Date;
47
+ totalThoughts: number;
48
+ totalActions: number;
49
+ failedActions: number;
50
+ corrections: number;
51
+ reasoningChain: ReasoningStep[];
52
+ finalConclusion?: string;
53
+ }
54
+ export interface ChainOfThoughtConfig {
55
+ maxThoughtsPerSession: number;
56
+ maxActionsPerSession: number;
57
+ enableStreaming: boolean;
58
+ verboseLogging: boolean;
59
+ persistToDisk: boolean;
60
+ persistPath?: string;
61
+ }
62
+ export declare class ChainOfThought extends EventEmitter {
63
+ private config;
64
+ private sessions;
65
+ private activeSession;
66
+ private idCounter;
67
+ constructor(config?: Partial<ChainOfThoughtConfig>);
68
+ /**
69
+ * Start a new reasoning session
70
+ */
71
+ startSession(task: string, sessionId?: string): string;
72
+ /**
73
+ * End a reasoning session
74
+ */
75
+ endSession(sessionId?: string, conclusion?: string): SessionSummary | null;
76
+ /**
77
+ * Record a thought
78
+ */
79
+ think(sessionId: string | null, type: ThoughtType, content: string, meta?: {
80
+ confidence?: number;
81
+ relatedActionId?: string;
82
+ parentThoughtId?: string;
83
+ metadata?: Record<string, any>;
84
+ }): ThoughtEntry;
85
+ /**
86
+ * Record an action start
87
+ */
88
+ startAction(sessionId: string | null, tool: string, operation: string, input: string, metadata?: Record<string, any>): ActionEntry;
89
+ /**
90
+ * Update an action's status
91
+ */
92
+ updateAction(actionId: string, update: {
93
+ status?: ActionStatus;
94
+ output?: string;
95
+ error?: string;
96
+ duration?: number;
97
+ }): ActionEntry | null;
98
+ /**
99
+ * Complete an action
100
+ */
101
+ completeAction(actionId: string, output: string, startTime?: number): ActionEntry | null;
102
+ /**
103
+ * Fail an action
104
+ */
105
+ failAction(actionId: string, error: string, startTime?: number): ActionEntry | null;
106
+ /**
107
+ * Get the full reasoning chain for a session
108
+ */
109
+ getChain(sessionId?: string): ReasoningStep[];
110
+ /**
111
+ * Get all thoughts for a session
112
+ */
113
+ getThoughts(sessionId?: string, type?: ThoughtType): ThoughtEntry[];
114
+ /**
115
+ * Get all actions for a session
116
+ */
117
+ getActions(sessionId?: string, tool?: string): ActionEntry[];
118
+ /**
119
+ * Get session summary without ending it
120
+ */
121
+ getSessionSummary(sessionId?: string): SessionSummary | null;
122
+ /**
123
+ * Get a human-readable reasoning trace
124
+ */
125
+ getReadableTrace(sessionId?: string): string;
126
+ /**
127
+ * Get active session ID
128
+ */
129
+ getActiveSessionId(): string | null;
130
+ /**
131
+ * Clean up old sessions
132
+ */
133
+ cleanup(maxAge?: number): void;
134
+ }
135
+ export declare function getChainOfThought(config?: Partial<ChainOfThoughtConfig>): ChainOfThought;
136
+ //# sourceMappingURL=chain-of-thought.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-of-thought.d.ts","sourceRoot":"","sources":["../src/chain-of-thought.ts"],"names":[],"mappings":"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"}