dipclaw 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/config.example.json +26 -0
  2. package/dist/agent/agent.d.ts +85 -0
  3. package/dist/agent/agent.js +725 -0
  4. package/dist/agent/agent.js.map +1 -0
  5. package/dist/agent/memory.d.ts +17 -0
  6. package/dist/agent/memory.js +92 -0
  7. package/dist/agent/memory.js.map +1 -0
  8. package/dist/agent/scheduler.d.ts +35 -0
  9. package/dist/agent/scheduler.js +154 -0
  10. package/dist/agent/scheduler.js.map +1 -0
  11. package/dist/agent/skill-generator.d.ts +37 -0
  12. package/dist/agent/skill-generator.js +263 -0
  13. package/dist/agent/skill-generator.js.map +1 -0
  14. package/dist/agent/task-runner.d.ts +31 -0
  15. package/dist/agent/task-runner.js +242 -0
  16. package/dist/agent/task-runner.js.map +1 -0
  17. package/dist/browser/actions.d.ts +28 -0
  18. package/dist/browser/actions.js +212 -0
  19. package/dist/browser/actions.js.map +1 -0
  20. package/dist/browser/manager.d.ts +17 -0
  21. package/dist/browser/manager.js +249 -0
  22. package/dist/browser/manager.js.map +1 -0
  23. package/dist/browser/script-runner.d.ts +49 -0
  24. package/dist/browser/script-runner.js +137 -0
  25. package/dist/browser/script-runner.js.map +1 -0
  26. package/dist/browser/snapshot.d.ts +15 -0
  27. package/dist/browser/snapshot.js +38 -0
  28. package/dist/browser/snapshot.js.map +1 -0
  29. package/dist/config/types.d.ts +62 -0
  30. package/dist/config/types.js +47 -0
  31. package/dist/config/types.js.map +1 -0
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.js +219 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/llm/client.d.ts +3 -0
  36. package/dist/llm/client.js +503 -0
  37. package/dist/llm/client.js.map +1 -0
  38. package/dist/llm/tools.d.ts +5 -0
  39. package/dist/llm/tools.js +94 -0
  40. package/dist/llm/tools.js.map +1 -0
  41. package/dist/llm/types.d.ts +49 -0
  42. package/dist/llm/types.js +2 -0
  43. package/dist/llm/types.js.map +1 -0
  44. package/dist/logging/logger.d.ts +17 -0
  45. package/dist/logging/logger.js +46 -0
  46. package/dist/logging/logger.js.map +1 -0
  47. package/dist/telegram/bot.d.ts +15 -0
  48. package/dist/telegram/bot.js +279 -0
  49. package/dist/telegram/bot.js.map +1 -0
  50. package/dist/tui/tui.d.ts +12 -0
  51. package/dist/tui/tui.js +176 -0
  52. package/dist/tui/tui.js.map +1 -0
  53. package/package.json +53 -0
@@ -0,0 +1,503 @@
1
+ import OpenAI from "openai";
2
+ import Anthropic from "@anthropic-ai/sdk";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ export function createLlmClient(config) {
6
+ let client;
7
+ if (config.llm.protocol === "openai") {
8
+ client = new OpenAIClient(config);
9
+ }
10
+ else {
11
+ client = new ClaudeClient(config);
12
+ }
13
+ if (config.debug) {
14
+ return new DebugLlmClient(client, config.workspace);
15
+ }
16
+ return client;
17
+ }
18
+ // --- OpenAI Protocol ---
19
+ class OpenAIClient {
20
+ client;
21
+ model;
22
+ maxTokens;
23
+ constructor(config) {
24
+ let baseURL = config.llm.baseUrl.replace(/\/+$/, "");
25
+ if (!baseURL.endsWith("/v1")) {
26
+ baseURL += "/v1";
27
+ }
28
+ this.client = new OpenAI({
29
+ apiKey: config.llm.apiKey,
30
+ baseURL,
31
+ });
32
+ this.model = config.llm.model;
33
+ this.maxTokens = config.llm.maxTokens;
34
+ }
35
+ async chat(messages, tools, systemPrompt) {
36
+ const openaiMessages = this.convertMessages(messages, systemPrompt);
37
+ const openaiTools = tools?.map((t) => this.convertTool(t));
38
+ const params = {
39
+ model: this.model,
40
+ messages: openaiMessages,
41
+ };
42
+ if (this.maxTokens) {
43
+ params.max_tokens = this.maxTokens;
44
+ }
45
+ if (openaiTools && openaiTools.length > 0) {
46
+ params.tools = openaiTools;
47
+ }
48
+ const response = await this.client.chat.completions.create(params);
49
+ const choice = response.choices[0];
50
+ const content = choice.message.content || "";
51
+ const toolCalls = (choice.message.tool_calls || []).map((tc) => ({
52
+ id: tc.id,
53
+ name: tc.function.name,
54
+ arguments: JSON.parse(tc.function.arguments),
55
+ }));
56
+ let stopReason = "stop";
57
+ if (choice.finish_reason === "tool_calls") {
58
+ stopReason = "tool_use";
59
+ }
60
+ else if (choice.finish_reason === "length") {
61
+ stopReason = "length";
62
+ }
63
+ return {
64
+ content,
65
+ toolCalls,
66
+ stopReason,
67
+ usage: response.usage
68
+ ? {
69
+ inputTokens: response.usage.prompt_tokens,
70
+ outputTokens: response.usage.completion_tokens || 0,
71
+ }
72
+ : undefined,
73
+ };
74
+ }
75
+ async *chatStream(messages, tools, systemPrompt) {
76
+ const openaiMessages = this.convertMessages(messages, systemPrompt);
77
+ const openaiTools = tools?.map((t) => this.convertTool(t));
78
+ const params = {
79
+ model: this.model,
80
+ messages: openaiMessages,
81
+ stream: true,
82
+ };
83
+ if (this.maxTokens) {
84
+ params.max_tokens = this.maxTokens;
85
+ }
86
+ if (openaiTools && openaiTools.length > 0) {
87
+ params.tools = openaiTools;
88
+ }
89
+ const stream = await this.client.chat.completions.create(params);
90
+ // Track tool calls being assembled across chunks
91
+ const pendingToolCalls = new Map();
92
+ for await (const chunk of stream) {
93
+ const delta = chunk.choices?.[0]?.delta;
94
+ if (!delta)
95
+ continue;
96
+ // Text content
97
+ if (delta.content) {
98
+ yield { type: "text_delta", text: delta.content };
99
+ }
100
+ // Tool calls (streamed incrementally)
101
+ if (delta.tool_calls) {
102
+ for (const tc of delta.tool_calls) {
103
+ const idx = tc.index;
104
+ if (tc.id) {
105
+ // New tool call starting
106
+ pendingToolCalls.set(idx, {
107
+ id: tc.id,
108
+ name: tc.function?.name || "",
109
+ args: tc.function?.arguments || "",
110
+ });
111
+ yield {
112
+ type: "tool_call_start",
113
+ toolCall: { id: tc.id, name: tc.function?.name || "", arguments: {} },
114
+ };
115
+ }
116
+ else {
117
+ // Continuing existing tool call
118
+ const pending = pendingToolCalls.get(idx);
119
+ if (pending) {
120
+ if (tc.function?.name)
121
+ pending.name += tc.function.name;
122
+ if (tc.function?.arguments)
123
+ pending.args += tc.function.arguments;
124
+ }
125
+ }
126
+ }
127
+ }
128
+ // Check if stream is done
129
+ if (chunk.choices?.[0]?.finish_reason) {
130
+ // Emit completed tool calls
131
+ for (const [, pending] of pendingToolCalls) {
132
+ try {
133
+ yield {
134
+ type: "tool_call_end",
135
+ toolCall: {
136
+ id: pending.id,
137
+ name: pending.name,
138
+ arguments: JSON.parse(pending.args || "{}"),
139
+ },
140
+ };
141
+ }
142
+ catch {
143
+ yield {
144
+ type: "tool_call_end",
145
+ toolCall: { id: pending.id, name: pending.name, arguments: {} },
146
+ };
147
+ }
148
+ }
149
+ yield { type: "done" };
150
+ }
151
+ }
152
+ }
153
+ convertMessages(messages, systemPrompt) {
154
+ const result = [];
155
+ if (systemPrompt) {
156
+ result.push({ role: "system", content: systemPrompt });
157
+ }
158
+ for (const msg of messages) {
159
+ if (msg.role === "tool" && msg.toolCallId) {
160
+ result.push({
161
+ role: "tool",
162
+ tool_call_id: msg.toolCallId,
163
+ content: typeof msg.content === "string"
164
+ ? msg.content
165
+ : JSON.stringify(msg.content),
166
+ });
167
+ }
168
+ else if (msg.role === "assistant" && msg.toolCalls?.length) {
169
+ result.push({
170
+ role: "assistant",
171
+ content: typeof msg.content === "string" ? msg.content || null : null,
172
+ tool_calls: msg.toolCalls.map((tc) => ({
173
+ id: tc.id,
174
+ type: "function",
175
+ function: {
176
+ name: tc.name,
177
+ arguments: JSON.stringify(tc.arguments),
178
+ },
179
+ })),
180
+ });
181
+ }
182
+ else {
183
+ const content = this.convertContent(msg.content);
184
+ result.push({
185
+ role: msg.role === "system" ? "system" : msg.role,
186
+ content,
187
+ });
188
+ }
189
+ }
190
+ return result;
191
+ }
192
+ convertContent(content) {
193
+ if (typeof content === "string")
194
+ return content;
195
+ return content.map((block) => {
196
+ if (block.type === "image" && block.imageData) {
197
+ return {
198
+ type: "image_url",
199
+ image_url: {
200
+ url: `data:${block.mediaType || "image/png"};base64,${block.imageData}`,
201
+ },
202
+ };
203
+ }
204
+ return { type: "text", text: block.text || "" };
205
+ });
206
+ }
207
+ convertTool(tool) {
208
+ return {
209
+ type: "function",
210
+ function: {
211
+ name: tool.name,
212
+ description: tool.description,
213
+ parameters: tool.parameters,
214
+ },
215
+ };
216
+ }
217
+ }
218
+ // --- Claude/Anthropic Protocol ---
219
+ /** Anthropic API requires max_tokens — default to 16384 if not configured */
220
+ const CLAUDE_DEFAULT_MAX_TOKENS = 16384;
221
+ class ClaudeClient {
222
+ client;
223
+ model;
224
+ maxTokens;
225
+ constructor(config) {
226
+ this.client = new Anthropic({
227
+ apiKey: config.llm.apiKey,
228
+ baseURL: config.llm.baseUrl,
229
+ });
230
+ this.model = config.llm.model;
231
+ this.maxTokens = config.llm.maxTokens ?? CLAUDE_DEFAULT_MAX_TOKENS;
232
+ }
233
+ async chat(messages, tools, systemPrompt) {
234
+ const anthropicMessages = this.convertMessages(messages);
235
+ const anthropicTools = tools?.map((t) => this.convertTool(t));
236
+ const params = {
237
+ model: this.model,
238
+ max_tokens: this.maxTokens,
239
+ messages: anthropicMessages,
240
+ };
241
+ if (systemPrompt) {
242
+ params.system = systemPrompt;
243
+ }
244
+ if (anthropicTools && anthropicTools.length > 0) {
245
+ params.tools = anthropicTools;
246
+ }
247
+ const response = await this.client.messages.create(params);
248
+ let content = "";
249
+ const toolCalls = [];
250
+ for (const block of response.content) {
251
+ if (block.type === "text") {
252
+ content += block.text;
253
+ }
254
+ else if (block.type === "tool_use") {
255
+ toolCalls.push({
256
+ id: block.id,
257
+ name: block.name,
258
+ arguments: block.input,
259
+ });
260
+ }
261
+ }
262
+ let stopReason = "stop";
263
+ if (response.stop_reason === "tool_use") {
264
+ stopReason = "tool_use";
265
+ }
266
+ else if (response.stop_reason === "max_tokens") {
267
+ stopReason = "length";
268
+ }
269
+ return {
270
+ content,
271
+ toolCalls,
272
+ stopReason,
273
+ usage: {
274
+ inputTokens: response.usage.input_tokens,
275
+ outputTokens: response.usage.output_tokens,
276
+ },
277
+ };
278
+ }
279
+ async *chatStream(messages, tools, systemPrompt) {
280
+ const anthropicMessages = this.convertMessages(messages);
281
+ const anthropicTools = tools?.map((t) => this.convertTool(t));
282
+ const params = {
283
+ model: this.model,
284
+ max_tokens: this.maxTokens,
285
+ messages: anthropicMessages,
286
+ stream: true,
287
+ };
288
+ if (systemPrompt) {
289
+ params.system = systemPrompt;
290
+ }
291
+ if (anthropicTools && anthropicTools.length > 0) {
292
+ params.tools = anthropicTools;
293
+ }
294
+ const stream = this.client.messages.stream(params);
295
+ let currentToolId = "";
296
+ let currentToolName = "";
297
+ let currentToolInput = "";
298
+ for await (const event of stream) {
299
+ if (event.type === "content_block_start") {
300
+ const block = event.content_block;
301
+ if (block?.type === "tool_use") {
302
+ currentToolId = block.id;
303
+ currentToolName = block.name;
304
+ currentToolInput = "";
305
+ yield {
306
+ type: "tool_call_start",
307
+ toolCall: { id: block.id, name: block.name, arguments: {} },
308
+ };
309
+ }
310
+ }
311
+ else if (event.type === "content_block_delta") {
312
+ const delta = event.delta;
313
+ if (delta?.type === "text_delta") {
314
+ yield { type: "text_delta", text: delta.text };
315
+ }
316
+ else if (delta?.type === "input_json_delta") {
317
+ currentToolInput += delta.partial_json;
318
+ }
319
+ }
320
+ else if (event.type === "content_block_stop") {
321
+ if (currentToolId) {
322
+ try {
323
+ yield {
324
+ type: "tool_call_end",
325
+ toolCall: {
326
+ id: currentToolId,
327
+ name: currentToolName,
328
+ arguments: JSON.parse(currentToolInput || "{}"),
329
+ },
330
+ };
331
+ }
332
+ catch {
333
+ yield {
334
+ type: "tool_call_end",
335
+ toolCall: { id: currentToolId, name: currentToolName, arguments: {} },
336
+ };
337
+ }
338
+ currentToolId = "";
339
+ currentToolName = "";
340
+ currentToolInput = "";
341
+ }
342
+ }
343
+ else if (event.type === "message_stop") {
344
+ yield { type: "done" };
345
+ }
346
+ }
347
+ }
348
+ convertMessages(messages) {
349
+ const result = [];
350
+ for (let i = 0; i < messages.length; i++) {
351
+ const msg = messages[i];
352
+ if (msg.role === "system")
353
+ continue;
354
+ if (msg.role === "tool" && msg.toolCallId) {
355
+ // Collect all consecutive tool messages into a single user message
356
+ const toolResults = [];
357
+ while (i < messages.length && messages[i].role === "tool" && messages[i].toolCallId) {
358
+ const toolMsg = messages[i];
359
+ toolResults.push({
360
+ type: "tool_result",
361
+ tool_use_id: toolMsg.toolCallId,
362
+ content: typeof toolMsg.content === "string"
363
+ ? toolMsg.content
364
+ : JSON.stringify(toolMsg.content),
365
+ });
366
+ i++;
367
+ }
368
+ i--; // adjust for the outer loop increment
369
+ result.push({
370
+ role: "user",
371
+ content: toolResults,
372
+ });
373
+ }
374
+ else if (msg.role === "assistant" && msg.toolCalls?.length) {
375
+ const contentBlocks = [];
376
+ if (typeof msg.content === "string" && msg.content) {
377
+ contentBlocks.push({ type: "text", text: msg.content });
378
+ }
379
+ for (const tc of msg.toolCalls) {
380
+ contentBlocks.push({
381
+ type: "tool_use",
382
+ id: tc.id,
383
+ name: tc.name,
384
+ input: tc.arguments,
385
+ });
386
+ }
387
+ result.push({ role: "assistant", content: contentBlocks });
388
+ }
389
+ else if (msg.role === "user") {
390
+ const content = this.convertContent(msg.content);
391
+ result.push({ role: "user", content });
392
+ }
393
+ else if (msg.role === "assistant") {
394
+ result.push({
395
+ role: "assistant",
396
+ content: typeof msg.content === "string"
397
+ ? msg.content
398
+ : msg.content.map((b) => ({
399
+ type: "text",
400
+ text: b.text || "",
401
+ })),
402
+ });
403
+ }
404
+ }
405
+ return result;
406
+ }
407
+ convertContent(content) {
408
+ if (typeof content === "string")
409
+ return content;
410
+ return content.map((block) => {
411
+ if (block.type === "image" && block.imageData) {
412
+ return {
413
+ type: "image",
414
+ source: {
415
+ type: "base64",
416
+ media_type: (block.mediaType || "image/png"),
417
+ data: block.imageData,
418
+ },
419
+ };
420
+ }
421
+ return { type: "text", text: block.text || "" };
422
+ });
423
+ }
424
+ convertTool(tool) {
425
+ return {
426
+ name: tool.name,
427
+ description: tool.description,
428
+ input_schema: tool.parameters,
429
+ };
430
+ }
431
+ }
432
+ // --- Debug wrapper ---
433
+ class DebugLlmClient {
434
+ inner;
435
+ logFile;
436
+ seq = 0;
437
+ constructor(inner, workspace) {
438
+ this.inner = inner;
439
+ const logDir = path.join(workspace, "logs");
440
+ fs.mkdirSync(logDir, { recursive: true });
441
+ this.logFile = path.join(logDir, "llm-debug.jsonl");
442
+ console.log(`🐛 LLM debug log: ${this.logFile}`);
443
+ }
444
+ async chat(messages, tools, systemPrompt) {
445
+ const id = ++this.seq;
446
+ this.write({
447
+ id,
448
+ type: "request",
449
+ ts: new Date().toISOString(),
450
+ systemPrompt,
451
+ messages,
452
+ tools,
453
+ });
454
+ const start = Date.now();
455
+ const response = await this.inner.chat(messages, tools, systemPrompt);
456
+ this.write({
457
+ id,
458
+ type: "response",
459
+ ts: new Date().toISOString(),
460
+ durationMs: Date.now() - start,
461
+ content: response.content,
462
+ toolCalls: response.toolCalls,
463
+ stopReason: response.stopReason,
464
+ usage: response.usage,
465
+ });
466
+ return response;
467
+ }
468
+ async *chatStream(messages, tools, systemPrompt) {
469
+ const id = ++this.seq;
470
+ this.write({
471
+ id,
472
+ type: "stream_request",
473
+ ts: new Date().toISOString(),
474
+ systemPrompt,
475
+ messages,
476
+ tools,
477
+ });
478
+ const start = Date.now();
479
+ let fullText = "";
480
+ const toolCalls = [];
481
+ for await (const event of this.inner.chatStream(messages, tools, systemPrompt)) {
482
+ if (event.type === "text_delta" && event.text) {
483
+ fullText += event.text;
484
+ }
485
+ else if (event.type === "tool_call_end" && event.toolCall) {
486
+ toolCalls.push(event.toolCall);
487
+ }
488
+ yield event;
489
+ }
490
+ this.write({
491
+ id,
492
+ type: "stream_response",
493
+ ts: new Date().toISOString(),
494
+ durationMs: Date.now() - start,
495
+ content: fullText,
496
+ toolCalls,
497
+ });
498
+ }
499
+ write(entry) {
500
+ fs.appendFileSync(this.logFile, JSON.stringify(entry) + "\n", "utf-8");
501
+ }
502
+ }
503
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/llm/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ToolDefinition } from "./types.js";
2
+ export declare const browserTool: ToolDefinition;
3
+ export declare const memoryTool: ToolDefinition;
4
+ export declare const schedulerTool: ToolDefinition;
5
+ export declare function getAllTools(): ToolDefinition[];
@@ -0,0 +1,94 @@
1
+ export const browserTool = {
2
+ name: "browser",
3
+ description: `Control the web browser. Actions:
4
+ - navigate: go to a URL (url)
5
+ - snapshot: get page accessibility tree with element refs [e1],[e2]...
6
+ - click: click element (ref)
7
+ - type: type into element (ref, text, clear?)
8
+ - scroll: scroll page (direction: up/down, amount?, ref?)
9
+ - screenshot: capture page image (fullPage?)
10
+ - evaluate: run JavaScript (script)
11
+ - wait: wait for condition (selector?, text?, timeout?)
12
+ - press: press key (key)
13
+ - select: select dropdown option (ref, value)
14
+ - tabs: list open tabs
15
+ - close_tab: close tab (index)
16
+ - focus_tab: switch to tab (index)`,
17
+ parameters: {
18
+ type: "object",
19
+ properties: {
20
+ action: {
21
+ type: "string",
22
+ enum: [
23
+ "navigate", "snapshot", "click", "type", "scroll",
24
+ "screenshot", "evaluate", "wait", "press", "select",
25
+ "tabs", "close_tab", "focus_tab",
26
+ ],
27
+ description: "The browser action to perform",
28
+ },
29
+ url: { type: "string", description: "URL for navigate" },
30
+ ref: { type: "string", description: "Element reference from snapshot (e.g., 'e1')" },
31
+ text: { type: "string", description: "Text for type action" },
32
+ clear: { type: "boolean", description: "Clear field before typing (default: true)" },
33
+ direction: { type: "string", enum: ["up", "down"], description: "Scroll direction" },
34
+ amount: { type: "number", description: "Scroll pixels (default: 500)" },
35
+ fullPage: { type: "boolean", description: "Full page screenshot" },
36
+ script: { type: "string", description: "JavaScript for evaluate" },
37
+ selector: { type: "string", description: "CSS selector for wait" },
38
+ key: { type: "string", description: "Key for press (e.g., 'Enter')" },
39
+ value: { type: "string", description: "Value for select" },
40
+ index: { type: "number", description: "Tab index for close_tab/focus_tab" },
41
+ timeout: { type: "number", description: "Timeout in ms for wait (default: 10000)" },
42
+ },
43
+ required: ["action"],
44
+ },
45
+ };
46
+ export const memoryTool = {
47
+ name: "memory",
48
+ description: `Manage persistent memory. Actions:
49
+ - save: store a memory (key, title, content)
50
+ - read: read a memory (key)
51
+ - list: list all memories`,
52
+ parameters: {
53
+ type: "object",
54
+ properties: {
55
+ action: {
56
+ type: "string",
57
+ enum: ["save", "read", "list"],
58
+ description: "Memory action",
59
+ },
60
+ key: { type: "string", description: "Memory key (e.g., 'site-github', 'user-prefs')" },
61
+ title: { type: "string", description: "Short title for index (<100 chars)" },
62
+ content: { type: "string", description: "Memory content in markdown" },
63
+ },
64
+ required: ["action"],
65
+ },
66
+ };
67
+ export const schedulerTool = {
68
+ name: "scheduler",
69
+ description: `Manage scheduled tasks. Actions:
70
+ - list: list all tasks
71
+ - add: create task (name, cron, prompt)
72
+ - remove: delete task (id)
73
+ - toggle: enable/disable task (id, enabled)`,
74
+ parameters: {
75
+ type: "object",
76
+ properties: {
77
+ action: {
78
+ type: "string",
79
+ enum: ["list", "add", "remove", "toggle"],
80
+ description: "Scheduler action",
81
+ },
82
+ id: { type: "string", description: "Task ID" },
83
+ name: { type: "string", description: "Task name" },
84
+ cron: { type: "string", description: "Cron expression (e.g., '0 9 * * *')" },
85
+ prompt: { type: "string", description: "Task prompt" },
86
+ enabled: { type: "boolean", description: "Enable or disable" },
87
+ },
88
+ required: ["action"],
89
+ },
90
+ };
91
+ export function getAllTools() {
92
+ return [browserTool, memoryTool, schedulerTool];
93
+ }
94
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/llm/tools.ts"],"names":[],"mappings":"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"}