0xkobold 0.6.4 → 0.6.6

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 (98) hide show
  1. package/README.md +9 -3
  2. package/dist/package.json +4 -2
  3. package/dist/src/cli/index.js +0 -0
  4. package/dist/src/extensions/core/workspace-footer-extension.js +2 -11
  5. package/dist/src/extensions/core/workspace-footer-extension.js.map +1 -1
  6. package/dist/src/index.js +31 -5
  7. package/dist/src/index.js.map +1 -1
  8. package/package.json +4 -2
  9. package/dist/src/agents/task-router.js +0 -194
  10. package/dist/src/agents/task-router.js.map +0 -1
  11. package/dist/src/agents/tools/index.js +0 -2
  12. package/dist/src/agents/tools/index.js.map +0 -1
  13. package/dist/src/agents/tools/spawn-agent.js +0 -200
  14. package/dist/src/agents/tools/spawn-agent.js.map +0 -1
  15. package/dist/src/agents/types/definitions.js +0 -317
  16. package/dist/src/agents/types/definitions.js.map +0 -1
  17. package/dist/src/agents/types/index.js +0 -2
  18. package/dist/src/agents/types/index.js.map +0 -1
  19. package/dist/src/cli/program-fixed.js +0 -1
  20. package/dist/src/cli/program-fixed.js.map +0 -1
  21. package/dist/src/extensions/core/agent-lifecycle-extension.js +0 -323
  22. package/dist/src/extensions/core/agent-lifecycle-extension.js.map +0 -1
  23. package/dist/src/extensions/core/agent-registry-extension.js +0 -541
  24. package/dist/src/extensions/core/agent-registry-extension.js.map +0 -1
  25. package/dist/src/extensions/core/agent-worker.js +0 -148
  26. package/dist/src/extensions/core/agent-worker.js.map +0 -1
  27. package/dist/src/extensions/core/agent-workspace-extension.js +0 -174
  28. package/dist/src/extensions/core/agent-workspace-extension.js.map +0 -1
  29. package/dist/src/extensions/core/auto-compact-on-error-extension.js +0 -244
  30. package/dist/src/extensions/core/auto-compact-on-error-extension.js.map +0 -1
  31. package/dist/src/extensions/core/autonomous-executor-extension.js +0 -145
  32. package/dist/src/extensions/core/autonomous-executor-extension.js.map +0 -1
  33. package/dist/src/extensions/core/autonomous-subagent-extension.js +0 -333
  34. package/dist/src/extensions/core/autonomous-subagent-extension.js.map +0 -1
  35. package/dist/src/extensions/core/compaction-safeguard-v2.js +0 -95
  36. package/dist/src/extensions/core/compaction-safeguard-v2.js.map +0 -1
  37. package/dist/src/extensions/core/confirm-destructive.js +0 -43
  38. package/dist/src/extensions/core/confirm-destructive.js.map +0 -1
  39. package/dist/src/extensions/core/context-aware-extension.js +0 -124
  40. package/dist/src/extensions/core/context-aware-extension.js.map +0 -1
  41. package/dist/src/extensions/core/deprecated/agent-lifecycle-extension.js +0 -323
  42. package/dist/src/extensions/core/deprecated/agent-lifecycle-extension.js.map +0 -1
  43. package/dist/src/extensions/core/deprecated/autonomous-subagent-extension.js +0 -333
  44. package/dist/src/extensions/core/deprecated/autonomous-subagent-extension.js.map +0 -1
  45. package/dist/src/extensions/core/deprecated/subagent-extension.js +0 -647
  46. package/dist/src/extensions/core/deprecated/subagent-extension.js.map +0 -1
  47. package/dist/src/extensions/core/dirty-repo-guard.js +0 -42
  48. package/dist/src/extensions/core/dirty-repo-guard.js.map +0 -1
  49. package/dist/src/extensions/core/env-loader-extension.js +0 -157
  50. package/dist/src/extensions/core/env-loader-extension.js.map +0 -1
  51. package/dist/src/extensions/core/git-checkpoint.js +0 -46
  52. package/dist/src/extensions/core/git-checkpoint.js.map +0 -1
  53. package/dist/src/extensions/core/handoff-extension.js +0 -206
  54. package/dist/src/extensions/core/handoff-extension.js.map +0 -1
  55. package/dist/src/extensions/core/memory-extension.js +0 -120
  56. package/dist/src/extensions/core/memory-extension.js.map +0 -1
  57. package/dist/src/extensions/core/memory-synthesis-extension.js +0 -137
  58. package/dist/src/extensions/core/memory-synthesis-extension.js.map +0 -1
  59. package/dist/src/extensions/core/mode-manager-extension.js +0 -592
  60. package/dist/src/extensions/core/mode-manager-extension.js.map +0 -1
  61. package/dist/src/extensions/core/ollama-cloud-extension.js +0 -132
  62. package/dist/src/extensions/core/ollama-cloud-extension.js.map +0 -1
  63. package/dist/src/extensions/core/ollama-provider-extension.js +0 -66
  64. package/dist/src/extensions/core/ollama-provider-extension.js.map +0 -1
  65. package/dist/src/extensions/core/ollama-router-extension.js +0 -41
  66. package/dist/src/extensions/core/ollama-router-extension.js.map +0 -1
  67. package/dist/src/extensions/core/protected-paths.js +0 -24
  68. package/dist/src/extensions/core/protected-paths.js.map +0 -1
  69. package/dist/src/extensions/core/questionnaire-extension.js +0 -242
  70. package/dist/src/extensions/core/questionnaire-extension.js.map +0 -1
  71. package/dist/src/extensions/core/session-bridge-extension.js +0 -14
  72. package/dist/src/extensions/core/session-bridge-extension.js.map +0 -1
  73. package/dist/src/extensions/core/session-manager-extension.js +0 -336
  74. package/dist/src/extensions/core/session-manager-extension.js.map +0 -1
  75. package/dist/src/extensions/core/session-name-extension.js +0 -88
  76. package/dist/src/extensions/core/session-name-extension.js.map +0 -1
  77. package/dist/src/extensions/core/session-pruning-extension.js +0 -480
  78. package/dist/src/extensions/core/session-pruning-extension.js.map +0 -1
  79. package/dist/src/extensions/core/subagent-extension.js +0 -647
  80. package/dist/src/extensions/core/subagent-extension.js.map +0 -1
  81. package/dist/src/extensions/core/tui-integration-extension-fixed.js +0 -3
  82. package/dist/src/extensions/core/tui-integration-extension-fixed.js.map +0 -1
  83. package/dist/src/extensions/core/websearch-extension.js +0 -489
  84. package/dist/src/extensions/core/websearch-extension.js.map +0 -1
  85. package/dist/src/extensions/core/websearch-v2-extension.js +0 -303
  86. package/dist/src/extensions/core/websearch-v2-extension.js.map +0 -1
  87. package/dist/src/tui/commands/final-functions.js +0 -39
  88. package/dist/src/tui/commands/final-functions.js.map +0 -1
  89. package/dist/src/tui/commands/orchestration-final-section.js +0 -84
  90. package/dist/src/tui/commands/orchestration-final-section.js.map +0 -1
  91. package/dist/src/tui/components/footer.js +0 -106
  92. package/dist/src/tui/components/footer.js.map +0 -1
  93. package/dist/src/tui/components/sidebar.js +0 -82
  94. package/dist/src/tui/components/sidebar.js.map +0 -1
  95. package/dist/src/tui/gateway-chat-client.js +0 -218
  96. package/dist/src/tui/gateway-chat-client.js.map +0 -1
  97. package/dist/src/tui/pi-tui-integration.js +0 -260
  98. package/dist/src/tui/pi-tui-integration.js.map +0 -1
@@ -1,124 +0,0 @@
1
- import { existsSync, readFileSync } from "fs";
2
- import { join, basename } from "path";
3
- import { homedir } from "os";
4
- const CONTEXT_FILE = join(homedir(), ".0xkobold", ".active-context");
5
- /**
6
- * Context-Aware Extension
7
- *
8
- * Reads the active context file and updates TUI display
9
- * to show the actual working directory with --local mode.
10
- */
11
- export default function contextAwareExtension(pi) {
12
- let activeContext = null;
13
- /**
14
- * Load active context from file
15
- */
16
- function loadContext() {
17
- try {
18
- if (!existsSync(CONTEXT_FILE)) {
19
- return null;
20
- }
21
- const content = readFileSync(CONTEXT_FILE, "utf-8");
22
- const parsed = JSON.parse(content);
23
- // Check if context is fresh (within 5 minutes)
24
- const age = Date.now() - parsed.timestamp;
25
- if (age > 5 * 60 * 1000) {
26
- return null; // Too old
27
- }
28
- return parsed;
29
- }
30
- catch {
31
- return null;
32
- }
33
- }
34
- /**
35
- * Get git branch from a directory
36
- */
37
- function getGitBranch(dir) {
38
- try {
39
- const { execSync } = require("child_process");
40
- const result = execSync("git rev-parse --abbrev-ref HEAD", {
41
- cwd: dir,
42
- encoding: "utf-8",
43
- });
44
- return result.trim();
45
- }
46
- catch {
47
- return null;
48
- }
49
- }
50
- // Load context on startup
51
- activeContext = loadContext();
52
- if (activeContext?.isLocal) {
53
- console.log(`[Context-Aware] Local mode active: ${activeContext.workingDir}`);
54
- }
55
- // Hook into session start
56
- pi.on("session_start", async (_event, ctx) => {
57
- activeContext = loadContext();
58
- // Only apply local context if:
59
- // 1. Context file says it's local
60
- // 2. KOBOLD_WORKING_DIR env var is set (confirms --local was used)
61
- if (!activeContext?.isLocal) {
62
- return; // Not in local mode
63
- }
64
- const envWorkingDir = process.env.KOBOLD_WORKING_DIR;
65
- if (!envWorkingDir || envWorkingDir === process.cwd()) {
66
- return; // Not actually in local mode (env var missing or matches cwd)
67
- }
68
- ;
69
- const { workingDir } = activeContext;
70
- const gitBranch = getGitBranch(workingDir);
71
- const dirName = basename(workingDir);
72
- // Replace the footer to show actual working directory
73
- ctx.ui?.setFooter?.((tui, theme, footerData) => ({
74
- invalidate() { },
75
- render(width) {
76
- // Build status line with actual working directory
77
- const parts = [];
78
- // Working directory (the key fix!)
79
- const workingDirDisplay = `${workingDir}`;
80
- parts.push(theme.fg("dim", workingDirDisplay));
81
- // Git branch if available
82
- if (gitBranch) {
83
- parts.push(theme.fg("accent", `(${gitBranch})`));
84
- }
85
- // Mode indicator
86
- parts.push(theme.fg("dim", "• local mode"));
87
- // Original footer data
88
- const extensionStatuses = footerData.getExtensionStatuses?.() || new Map();
89
- const statusItems = Array.from(extensionStatuses.values()).filter(Boolean);
90
- if (statusItems.length > 0) {
91
- parts.push(theme.fg("dim", "• " + statusItems.slice(0, 2).join(" ")));
92
- }
93
- // Combine parts and truncate to width
94
- const line = parts.join(" ");
95
- if (line.length > width) {
96
- return [line.slice(0, width - 3) + "..."];
97
- }
98
- return [line];
99
- },
100
- dispose: footerData.onBranchChange?.(() => tui.requestRender()),
101
- }));
102
- // Add a status bar item showing we're in local mode
103
- ctx.ui?.setStatus?.("workspace", `🗂️ ${dirName}`);
104
- // Log for debugging
105
- console.log(`[Context-Aware] Footer updated for: ${workingDir}`);
106
- });
107
- // Register a command
108
- pi.registerCommand("context", {
109
- description: "Show current workspace context",
110
- handler: async (_args, ctx) => {
111
- activeContext = loadContext();
112
- if (!activeContext) {
113
- ctx.ui?.notify?.("No active context. Not in local mode.", "info");
114
- return;
115
- }
116
- ctx.ui?.notify?.(`🗂️ Current Context:\n` +
117
- ` Working: ${activeContext.workingDir}\n` +
118
- ` Mode: ${activeContext.isLocal ? "local" : "global"}\n` +
119
- ` From: ${new Date(activeContext.timestamp).toLocaleTimeString()}`, "info");
120
- },
121
- });
122
- console.log("[Context-Aware] Extension loaded");
123
- }
124
- //# sourceMappingURL=context-aware-extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-aware-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/context-aware-extension.ts"],"names":[],"mappings":"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"}
@@ -1,323 +0,0 @@
1
- /**
2
- * Agent Lifecycle Extension - v0.2.0
3
- *
4
- * Manages main agent process lifecycle:
5
- * - Start/stop/restart agents
6
- * - Process management and monitoring
7
- * - State persistence
8
- *
9
- * Each main agent runs as a separate pi-coding-agent process
10
- * with its own workspace and configuration.
11
- *
12
- * @version 0.2.0
13
- */
14
- import { Type } from "@sinclair/typebox";
15
- import { spawn } from "node:child_process";
16
- import * as fs from "node:fs/promises";
17
- import * as path from "node:path";
18
- import { homedir } from "node:os";
19
- const runningAgents = new Map();
20
- const AGENTS_DIR = path.join(homedir(), ".0xkobold", "agents");
21
- const STATE_FILE = path.join(homedir(), ".0xkobold", "agent-state.json");
22
- // Load persisted state
23
- async function loadState() {
24
- try {
25
- const content = await fs.readFile(STATE_FILE, "utf-8");
26
- return JSON.parse(content);
27
- }
28
- catch {
29
- return {};
30
- }
31
- }
32
- // Save state
33
- async function saveState() {
34
- const state = {};
35
- for (const [name, agent] of runningAgents) {
36
- state[name] = {
37
- pid: agent.pid,
38
- startedAt: agent.startedAt.toISOString(),
39
- status: agent.status,
40
- };
41
- }
42
- await fs.writeFile(STATE_FILE, JSON.stringify(state, null, 2));
43
- }
44
- // Start a main agent
45
- async function startAgent(name, ctx) {
46
- if (runningAgents.has(name)) {
47
- return { success: false, error: "Agent already running" };
48
- }
49
- const agentDir = path.join(AGENTS_DIR, name);
50
- const workspaceDir = path.join(agentDir, "workspace");
51
- const logsDir = path.join(agentDir, "logs");
52
- // Ensure logs directory exists
53
- await fs.mkdir(logsDir, { recursive: true });
54
- // Generate unique port for this agent's gateway
55
- const port = 18790 + runningAgents.size + 1;
56
- // Build environment
57
- const env = {
58
- ...process.env,
59
- KOBOLD_AGENT_NAME: name,
60
- KOBOLD_AGENT_MODE: "main",
61
- KOBOLD_WORKSPACE: workspaceDir,
62
- PI_CODING_AGENT_DIR: agentDir,
63
- // Gateway config
64
- GATEWAY_PORT: port.toString(),
65
- GATEWAY_HOST: "127.0.0.1",
66
- };
67
- // Spawn the agent process
68
- const logFile = path.join(logsDir, "agent.log");
69
- return new Promise((resolve) => {
70
- const child = spawn("bun", ["run", "src/cli/index.ts", "--local"], {
71
- cwd: process.cwd(),
72
- env,
73
- stdio: ["ignore", "pipe", "pipe"],
74
- detached: true, // Allows process to run independently
75
- });
76
- if (!child.pid) {
77
- resolve({ success: false, error: "Failed to spawn process" });
78
- return;
79
- }
80
- const agentProcess = {
81
- name,
82
- process: child,
83
- pid: child.pid,
84
- startedAt: new Date(),
85
- status: "starting",
86
- port,
87
- };
88
- runningAgents.set(name, agentProcess);
89
- // Handle stdout
90
- let buffer = "";
91
- child.stdout?.on("data", (data) => {
92
- const text = data.toString();
93
- buffer += text;
94
- // Check for ready signal
95
- if (text.includes("🐉 0xKobold starting") || text.includes("Extension loaded")) {
96
- agentProcess.status = "running";
97
- saveState();
98
- }
99
- // Log to file
100
- fs.appendFile(logFile, `[${new Date().toISOString()}] ${text}`).catch(() => { });
101
- });
102
- // Handle stderr
103
- child.stderr?.on("data", (data) => {
104
- const text = data.toString();
105
- fs.appendFile(logFile, `[${new Date().toISOString()}] ERROR: ${text}`).catch(() => { });
106
- });
107
- // Handle process exit
108
- child.on("exit", (code) => {
109
- runningAgents.delete(name);
110
- saveState();
111
- if (code !== 0 && code !== null) {
112
- console.log(`[AgentLifecycle] Agent ${name} exited with code ${code}`);
113
- }
114
- });
115
- // Wait for startup or timeout
116
- const checkInterval = setInterval(() => {
117
- if (agentProcess.status === "running") {
118
- clearInterval(checkInterval);
119
- clearTimeout(timeout);
120
- resolve({ success: true, pid: child.pid });
121
- }
122
- }, 100);
123
- const timeout = setTimeout(() => {
124
- clearInterval(checkInterval);
125
- if (agentProcess.status === "starting") {
126
- agentProcess.status = "error";
127
- agentProcess.lastError = "Startup timeout";
128
- resolve({ success: false, error: "Agent startup timeout (30s)" });
129
- }
130
- }, 30000);
131
- });
132
- }
133
- // Stop a main agent
134
- async function stopAgent(name) {
135
- const agent = runningAgents.get(name);
136
- if (!agent) {
137
- return { success: false, error: "Agent not running" };
138
- }
139
- // Graceful shutdown
140
- agent.process.kill("SIGTERM");
141
- // Wait for exit or force kill
142
- return new Promise((resolve) => {
143
- const timeout = setTimeout(() => {
144
- // Force kill if still running
145
- agent.process.kill("SIGKILL");
146
- runningAgents.delete(name);
147
- saveState();
148
- resolve({ success: true });
149
- }, 5000);
150
- agent.process.on("exit", () => {
151
- clearTimeout(timeout);
152
- runningAgents.delete(name);
153
- saveState();
154
- resolve({ success: true });
155
- });
156
- });
157
- }
158
- export default async function agentLifecycleExtension(pi) {
159
- console.log("[AgentLifecycle] Extension loaded");
160
- // Load persisted state
161
- const state = await loadState();
162
- console.log(`[AgentLifecycle] Loaded state for ${Object.keys(state).length} agents`);
163
- // TOOL: agent_start
164
- pi.registerTool({
165
- name: "agent_start",
166
- label: "Start Main Agent",
167
- description: "Start a main agent as a background process",
168
- parameters: Type.Object({
169
- name: Type.String({ description: "Agent name" }),
170
- }),
171
- async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
172
- const name = params.name;
173
- ctx.ui.notify(`🚀 Starting agent: ${name}...`, "info");
174
- const result = await startAgent(name, ctx);
175
- if (result.success) {
176
- ctx.ui.notify(`✅ Agent ${name} started (PID: ${result.pid})`, "info");
177
- return {
178
- content: [{
179
- type: "text",
180
- text: `✅ Agent '${name}' started\nPID: ${result.pid}\nPort: ${runningAgents.get(name)?.port}`,
181
- }],
182
- details: { name, pid: result.pid, status: "running" },
183
- };
184
- }
185
- else {
186
- ctx.ui.notify(`❌ Failed to start ${name}: ${result.error}`, "error");
187
- return {
188
- content: [{ type: "text", text: `❌ Failed: ${result.error}` }],
189
- details: { error: result.error },
190
- };
191
- }
192
- },
193
- });
194
- // TOOL: agent_stop
195
- pi.registerTool({
196
- name: "agent_stop",
197
- label: "Stop Main Agent",
198
- description: "Stop a running main agent",
199
- parameters: Type.Object({
200
- name: Type.String({ description: "Agent name" }),
201
- }),
202
- async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
203
- const name = params.name;
204
- ctx.ui.notify(`🛑 Stopping agent: ${name}...`, "info");
205
- const result = await stopAgent(name);
206
- if (result.success) {
207
- ctx.ui.notify(`✅ Agent ${name} stopped`, "info");
208
- return {
209
- content: [{ type: "text", text: `✅ Agent '${name}' stopped` }],
210
- details: { name, status: "stopped" },
211
- };
212
- }
213
- else {
214
- return {
215
- content: [{ type: "text", text: `❌ Failed: ${result.error}` }],
216
- details: { error: result.error },
217
- };
218
- }
219
- },
220
- });
221
- // TOOL: agent_status
222
- pi.registerTool({
223
- name: "agent_status",
224
- label: "Get Agent Status",
225
- description: "Get status of a main agent",
226
- parameters: Type.Object({
227
- name: Type.Optional(Type.String({ description: "Agent name (omit for all)" })),
228
- }),
229
- async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
230
- if (params.name) {
231
- const agent = runningAgents.get(params.name);
232
- if (!agent) {
233
- return {
234
- content: [{ type: "text", text: `Agent '${params.name}' is not running` }],
235
- details: { name: params.name, status: "stopped", agents: undefined },
236
- };
237
- }
238
- return {
239
- content: [{
240
- type: "text",
241
- text: `Agent: ${agent.name}\nStatus: ${agent.status}\nPID: ${agent.pid}\nStarted: ${agent.startedAt.toISOString()}`,
242
- }],
243
- details: {
244
- name: agent.name,
245
- status: agent.status,
246
- pid: agent.pid,
247
- startedAt: agent.startedAt.toISOString(),
248
- agents: undefined
249
- },
250
- };
251
- }
252
- // All agents
253
- const list = Array.from(runningAgents.entries()).map(([name, info]) => ({
254
- name,
255
- status: info.status,
256
- pid: info.pid,
257
- uptime: Date.now() - info.startedAt.getTime(),
258
- }));
259
- return {
260
- content: [{
261
- type: "text",
262
- text: `${list.length} agents running:\n\n${list.map(a => `- ${a.name}: ${a.status} (PID: ${a.pid})`).join('\n')}`,
263
- }],
264
- details: { name: undefined, status: undefined, agents: list },
265
- };
266
- },
267
- });
268
- // COMMAND: /agent-start
269
- pi.registerCommand("agent-start", {
270
- description: "Start a main agent: /agent-start <name>",
271
- handler: async (args, ctx) => {
272
- const name = args.trim();
273
- if (!name) {
274
- ctx.ui.notify("❌ Usage: /agent-start <name>", "error");
275
- return;
276
- }
277
- await startAgent(name, ctx);
278
- },
279
- });
280
- // COMMAND: /agent-stop
281
- pi.registerCommand("agent-stop", {
282
- description: "Stop a main agent: /agent-stop <name>",
283
- handler: async (args, ctx) => {
284
- const name = args.trim();
285
- if (!name) {
286
- ctx.ui.notify("❌ Usage: /agent-stop <name>", "error");
287
- return;
288
- }
289
- await stopAgent(name);
290
- },
291
- });
292
- // COMMAND: /agent-status
293
- pi.registerCommand("agent-status", {
294
- description: "Check agent status: /agent-status [name]",
295
- handler: async (args, ctx) => {
296
- const name = args.trim();
297
- if (name) {
298
- const agent = runningAgents.get(name);
299
- if (agent) {
300
- const uptime = Math.floor((Date.now() - agent.startedAt.getTime()) / 1000);
301
- ctx.ui.notify(`${name}: ${agent.status} (PID: ${agent.pid}, uptime: ${uptime}s)`, agent.status === "running" ? "info" : "warning");
302
- }
303
- else {
304
- ctx.ui.notify(`${name}: not running`, "info");
305
- }
306
- }
307
- else {
308
- const count = runningAgents.size;
309
- ctx.ui.notify(`${count} agents running`, "info");
310
- }
311
- },
312
- });
313
- // Cleanup on shutdown
314
- process.on("SIGTERM", async () => {
315
- console.log("[AgentLifecycle] Shutting down agents...");
316
- for (const [name, agent] of runningAgents) {
317
- agent.process.kill("SIGTERM");
318
- }
319
- await saveState();
320
- });
321
- console.log("[AgentLifecycle] Ready");
322
- }
323
- //# sourceMappingURL=agent-lifecycle-extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-lifecycle-extension.js","sourceRoot":"","sources":["../../../../../src/extensions/core/deprecated/agent-lifecycle-extension.ts"],"names":[],"mappings":"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"}