codevf 1.0.2 → 1.0.3

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 +118 -62
  2. package/dist/commands/chat.d.ts +2 -0
  3. package/dist/commands/chat.d.ts.map +1 -0
  4. package/dist/commands/chat.js +130 -0
  5. package/dist/commands/chat.js.map +1 -0
  6. package/dist/commands/cvf-chat-command-content.d.ts +2 -0
  7. package/dist/commands/cvf-chat-command-content.d.ts.map +1 -0
  8. package/dist/commands/cvf-chat-command-content.js +22 -0
  9. package/dist/commands/cvf-chat-command-content.js.map +1 -0
  10. package/dist/commands/cvf-command-content.d.ts +2 -0
  11. package/dist/commands/cvf-command-content.d.ts.map +1 -0
  12. package/dist/commands/cvf-command-content.js +109 -0
  13. package/dist/commands/cvf-command-content.js.map +1 -0
  14. package/dist/commands/fix.d.ts +1 -0
  15. package/dist/commands/fix.d.ts.map +1 -1
  16. package/dist/commands/fix.js +36 -0
  17. package/dist/commands/fix.js.map +1 -1
  18. package/dist/commands/listen.d.ts +2 -0
  19. package/dist/commands/listen.d.ts.map +1 -0
  20. package/dist/commands/listen.js +109 -0
  21. package/dist/commands/listen.js.map +1 -0
  22. package/dist/commands/mcp-tools.d.ts.map +1 -1
  23. package/dist/commands/mcp-tools.js +15 -15
  24. package/dist/commands/mcp-tools.js.map +1 -1
  25. package/dist/commands/setup.d.ts.map +1 -1
  26. package/dist/commands/setup.js +138 -56
  27. package/dist/commands/setup.js.map +1 -1
  28. package/dist/index.js +28 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/lib/api/client.d.ts +4 -0
  31. package/dist/lib/api/client.d.ts.map +1 -1
  32. package/dist/lib/api/client.js +6 -0
  33. package/dist/lib/api/client.js.map +1 -1
  34. package/dist/lib/api/sessions.d.ts +85 -0
  35. package/dist/lib/api/sessions.d.ts.map +1 -0
  36. package/dist/lib/api/sessions.js +137 -0
  37. package/dist/lib/api/sessions.js.map +1 -0
  38. package/dist/lib/api/tasks.d.ts +44 -0
  39. package/dist/lib/api/tasks.d.ts.map +1 -1
  40. package/dist/lib/api/tasks.js +82 -1
  41. package/dist/lib/api/tasks.js.map +1 -1
  42. package/dist/lib/api/websocket.d.ts +4 -2
  43. package/dist/lib/api/websocket.d.ts.map +1 -1
  44. package/dist/lib/api/websocket.js +54 -5
  45. package/dist/lib/api/websocket.js.map +1 -1
  46. package/dist/lib/auth/token-manager.d.ts.map +1 -1
  47. package/dist/lib/auth/token-manager.js +17 -6
  48. package/dist/lib/auth/token-manager.js.map +1 -1
  49. package/dist/lib/utils/logger.d.ts +3 -0
  50. package/dist/lib/utils/logger.d.ts.map +1 -1
  51. package/dist/lib/utils/logger.js +12 -4
  52. package/dist/lib/utils/logger.js.map +1 -1
  53. package/dist/mcp/index.js +134 -8
  54. package/dist/mcp/index.js.map +1 -1
  55. package/dist/mcp/tools/chat.d.ts +81 -1
  56. package/dist/mcp/tools/chat.d.ts.map +1 -1
  57. package/dist/mcp/tools/chat.js +624 -21
  58. package/dist/mcp/tools/chat.js.map +1 -1
  59. package/dist/mcp/tools/instant.d.ts +18 -5
  60. package/dist/mcp/tools/instant.d.ts.map +1 -1
  61. package/dist/mcp/tools/instant.js +320 -31
  62. package/dist/mcp/tools/instant.js.map +1 -1
  63. package/dist/mcp/tools/listen.d.ts +35 -0
  64. package/dist/mcp/tools/listen.d.ts.map +1 -0
  65. package/dist/mcp/tools/listen.js +97 -0
  66. package/dist/mcp/tools/listen.js.map +1 -0
  67. package/dist/mcp/tools/task-checker.d.ts +60 -0
  68. package/dist/mcp/tools/task-checker.d.ts.map +1 -0
  69. package/dist/mcp/tools/task-checker.js +139 -0
  70. package/dist/mcp/tools/task-checker.js.map +1 -0
  71. package/dist/mcp/tools/tunnel.d.ts +38 -0
  72. package/dist/mcp/tools/tunnel.d.ts.map +1 -0
  73. package/dist/mcp/tools/tunnel.js +109 -0
  74. package/dist/mcp/tools/tunnel.js.map +1 -0
  75. package/dist/modules/permissions.d.ts +1 -0
  76. package/dist/modules/permissions.d.ts.map +1 -1
  77. package/dist/modules/permissions.js +2 -0
  78. package/dist/modules/permissions.js.map +1 -1
  79. package/dist/modules/tunnel.d.ts +5 -0
  80. package/dist/modules/tunnel.d.ts.map +1 -1
  81. package/dist/modules/tunnel.js +55 -0
  82. package/dist/modules/tunnel.js.map +1 -1
  83. package/dist/modules/websocket.d.ts.map +1 -1
  84. package/dist/modules/websocket.js +3 -2
  85. package/dist/modules/websocket.js.map +1 -1
  86. package/dist/types/index.d.ts +7 -3
  87. package/dist/types/index.d.ts.map +1 -1
  88. package/dist/types/index.js.map +1 -1
  89. package/dist/ui/LiveSession.js +2 -2
  90. package/dist/ui/LiveSession.js.map +1 -1
  91. package/dist/ui/SessionUI.d.ts +1 -1
  92. package/dist/ui/SessionUI.d.ts.map +1 -1
  93. package/dist/ui/SessionUI.js +4 -1
  94. package/dist/ui/SessionUI.js.map +1 -1
  95. package/dist/utils/errors.d.ts.map +1 -1
  96. package/dist/utils/errors.js +8 -7
  97. package/dist/utils/errors.js.map +1 -1
  98. package/package.json +3 -1
@@ -0,0 +1,97 @@
1
+ /**
2
+ * codevf-listen tool implementation
3
+ * Monitor active chat sessions in real-time
4
+ */
5
+ import { logger } from '../../lib/utils/logger.js';
6
+ export class ListenTool {
7
+ constructor(tasksApi, baseUrl) {
8
+ this.tasksApi = tasksApi;
9
+ this.baseUrl = baseUrl;
10
+ }
11
+ /**
12
+ * Handle codevf-listen tool call
13
+ * Provides monitoring capabilities for active sessions
14
+ */
15
+ async execute(args) {
16
+ try {
17
+ logger.info('Executing codevf-listen', { sessionId: args.sessionId });
18
+ if (args.sessionId) {
19
+ // Monitor specific session
20
+ return await this.monitorSession(args.sessionId, args.verbose || false);
21
+ }
22
+ else {
23
+ // List all active sessions
24
+ return await this.listActiveSessions(args.verbose || false);
25
+ }
26
+ }
27
+ catch (error) {
28
+ logger.error('codevf-listen failed', error);
29
+ return {
30
+ content: [
31
+ {
32
+ type: 'text',
33
+ text: `Error: ${error.message}`,
34
+ },
35
+ ],
36
+ isError: true,
37
+ };
38
+ }
39
+ }
40
+ /**
41
+ * Monitor a specific session
42
+ */
43
+ async monitorSession(sessionId, verbose) {
44
+ try {
45
+ // Get session details (this would be implemented via API)
46
+ const sessionUrl = `${this.baseUrl}/session/${sessionId}`;
47
+ let output = `Monitoring session: ${sessionId}\n\n`;
48
+ output += `Session URL: ${sessionUrl}\n`;
49
+ output += `Status: Active\n`;
50
+ output += `Last updated: ${new Date().toLocaleTimeString()}\n\n`;
51
+ if (verbose) {
52
+ output += 'Connection established. Waiting for engineer updates...\n';
53
+ output += 'Messages will appear as they are sent.\n';
54
+ }
55
+ return {
56
+ content: [
57
+ {
58
+ type: 'text',
59
+ text: output,
60
+ },
61
+ ],
62
+ };
63
+ }
64
+ catch (error) {
65
+ throw error;
66
+ }
67
+ }
68
+ /**
69
+ * List all active sessions for the current user
70
+ */
71
+ async listActiveSessions(verbose) {
72
+ try {
73
+ let output = 'Active Chat Sessions:\n\n';
74
+ // Note: Fetching all active sessions would require a list endpoint
75
+ // For now, provide guidance on how to monitor sessions
76
+ output += 'To monitor a specific chat session, use:\n';
77
+ output += ' codevf-listen <sessionId>\n\n';
78
+ output += 'Chat sessions are created using codevf-chat tool.\n';
79
+ output += 'Each session provides a URL for real-time monitoring.\n\n';
80
+ output += 'Session URLs follow this format:\n';
81
+ output += ` ${this.baseUrl}/session/<sessionId>\n\n`;
82
+ output += 'Share these URLs with team members to collaborate on debugging sessions.';
83
+ return {
84
+ content: [
85
+ {
86
+ type: 'text',
87
+ text: output,
88
+ },
89
+ ],
90
+ };
91
+ }
92
+ catch (error) {
93
+ throw error;
94
+ }
95
+ }
96
+ }
97
+ //# sourceMappingURL=listen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen.js","sourceRoot":"","sources":["../../../src/mcp/tools/listen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAYnD,MAAM,OAAO,UAAU;IAIrB,YAAY,QAAkB,EAAE,OAAe;QAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,IAAoB;QAChC,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAEtE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,2BAA2B;gBAC3B,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,2BAA2B;gBAC3B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAE5C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAW,KAAe,CAAC,OAAO,EAAE;qBAC3C;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAC1B,SAAiB,EACjB,OAAgB;QAEhB,IAAI,CAAC;YACH,0DAA0D;YAC1D,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,OAAO,YAAY,SAAS,EAAE,CAAC;YAE1D,IAAI,MAAM,GAAG,uBAAuB,SAAS,MAAM,CAAC;YACpD,MAAM,IAAI,gBAAgB,UAAU,IAAI,CAAC;YACzC,MAAM,IAAI,kBAAkB,CAAC;YAC7B,MAAM,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC;YAEjE,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,IAAI,2DAA2D,CAAC;gBACtE,MAAM,IAAI,0CAA0C,CAAC;YACvD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM;qBACb;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAAC,OAAgB;QAC/C,IAAI,CAAC;YACH,IAAI,MAAM,GAAG,2BAA2B,CAAC;YAEzC,mEAAmE;YACnE,uDAAuD;YACvD,MAAM,IAAI,4CAA4C,CAAC;YACvD,MAAM,IAAI,iCAAiC,CAAC;YAC5C,MAAM,IAAI,qDAAqD,CAAC;YAChE,MAAM,IAAI,2DAA2D,CAAC;YACtE,MAAM,IAAI,oCAAoC,CAAC;YAC/C,MAAM,IAAI,KAAK,IAAI,CAAC,OAAO,0BAA0B,CAAC;YACtD,MAAM,IAAI,0EAA0E,CAAC;YAErF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM;qBACb;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Task checking utilities for MCP tools
3
+ */
4
+ import { TasksApi } from '../../lib/api/tasks.js';
5
+ export interface TaskCheckResult {
6
+ shouldPromptUser: boolean;
7
+ taskToResumeId?: string;
8
+ decision?: {
9
+ status: 'decision_required';
10
+ agentInstruction: string;
11
+ existingTask: {
12
+ id: string;
13
+ type: string;
14
+ status: string;
15
+ message: string;
16
+ };
17
+ newTask: {
18
+ type: 'instant' | 'chat';
19
+ content: string;
20
+ };
21
+ options: Array<{
22
+ action: 'override' | 'followup' | 'reconnect';
23
+ description: string;
24
+ }>;
25
+ };
26
+ }
27
+ /**
28
+ * Check for active tasks and determine if user should be prompted
29
+ * Returns task ID to resume if continueTaskId is provided, or prompts user if active tasks exist
30
+ */
31
+ export declare function checkForActiveTasks(tasksApi: TasksApi, projectId: string, continueTaskId: string | undefined, toolName: 'instant' | 'chat', newTaskContent?: string): Promise<TaskCheckResult>;
32
+ /**
33
+ * Get all parent tasks up to 4 levels deep
34
+ * Returns array of parent tasks in order from immediate parent to root
35
+ */
36
+ export declare function getParentTaskChain(taskId: string, tasksApi: TasksApi, projectId: string): Promise<Array<{
37
+ taskId: string;
38
+ mode: string;
39
+ status: string;
40
+ message: string;
41
+ }>>;
42
+ /**
43
+ * Analyze task escalation and return recommendation with reasoning
44
+ */
45
+ export declare function analyzeTaskEscalation(taskId: string, tasksApi: TasksApi, projectId: string, currentMode: 'instant' | 'chat'): Promise<{
46
+ shouldEscalate: boolean;
47
+ reason: string;
48
+ taskChain: Array<{
49
+ taskId: string;
50
+ mode: string;
51
+ status: string;
52
+ message: string;
53
+ }>;
54
+ prompt: string;
55
+ options: Array<{
56
+ action: 'escalate' | 'keep';
57
+ description: string;
58
+ }>;
59
+ }>;
60
+ //# sourceMappingURL=task-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-checker.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/task-checker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,mBAAmB,CAAC;QAC5B,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE;YACZ,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,OAAO,EAAE;YACP,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;YACzB,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,OAAO,EAAE,KAAK,CAAC;YACb,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;YAC9C,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;KACJ,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,QAAQ,EAAE,SAAS,GAAG,MAAM,EAC5B,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,eAAe,CAAC,CAuE1B;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAQnF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,SAAS,GAAG,MAAM,GAC9B,OAAO,CAAC;IACT,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE,CAAC,CAiDD"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Task checking utilities for MCP tools
3
+ */
4
+ /**
5
+ * Check for active tasks and determine if user should be prompted
6
+ * Returns task ID to resume if continueTaskId is provided, or prompts user if active tasks exist
7
+ */
8
+ export async function checkForActiveTasks(tasksApi, projectId, continueTaskId, toolName, newTaskContent) {
9
+ console.error('=== checkForActiveTasks START ===');
10
+ console.error('projectId:', projectId);
11
+ console.error('continueTaskId:', continueTaskId);
12
+ console.error('toolName:', toolName);
13
+ // If user already specified a task to continue, use that
14
+ if (continueTaskId) {
15
+ console.error('continueTaskId provided, returning taskToResumeId');
16
+ return {
17
+ shouldPromptUser: false,
18
+ taskToResumeId: continueTaskId,
19
+ };
20
+ }
21
+ // Check for active tasks
22
+ try {
23
+ console.error('Calling getActiveTasks...');
24
+ const activeTasks = await tasksApi.getActiveTasks(projectId);
25
+ console.error('activeTasks result:', JSON.stringify(activeTasks, null, 2));
26
+ console.error('activeTasks.length:', activeTasks?.length);
27
+ if (activeTasks && activeTasks.length > 0) {
28
+ const mostRecentTask = activeTasks[0];
29
+ console.error('Found active task, returning shouldPromptUser=true');
30
+ const agentInstructionText = `Ask the user which option they prefer for handling the existing active task. Present all options clearly and wait for their choice before proceeding.\n\nTo proceed, call this tool again with continueTaskId="${mostRecentTask.taskId}" and one of these parameters:\n - decision="reconnect" (reconnect to task #${mostRecentTask.taskId} without sending new message)\n - decision="followup" (continue task #${mostRecentTask.taskId} with new message)\n - decision="override" (replace task #${mostRecentTask.taskId} with new task)`;
31
+ return {
32
+ shouldPromptUser: true,
33
+ decision: {
34
+ status: 'decision_required',
35
+ agentInstruction: agentInstructionText,
36
+ existingTask: {
37
+ id: mostRecentTask.taskId,
38
+ type: mostRecentTask.taskMode || 'unknown',
39
+ status: mostRecentTask.status,
40
+ message: mostRecentTask.message?.substring(0, 60) || 'No message',
41
+ },
42
+ newTask: {
43
+ type: toolName,
44
+ content: newTaskContent || '',
45
+ },
46
+ options: [
47
+ {
48
+ action: 'reconnect',
49
+ description: `Reconnect to task #${mostRecentTask.taskId} (just listen, don't send new message)`,
50
+ },
51
+ {
52
+ action: 'followup',
53
+ description: `Add as follow-up to task #${mostRecentTask.taskId} (sends your new message)`,
54
+ },
55
+ {
56
+ action: 'override',
57
+ description: `Replace task #${mostRecentTask.taskId} with new task (closes #${mostRecentTask.taskId})`,
58
+ },
59
+ ],
60
+ },
61
+ };
62
+ }
63
+ console.error('No active tasks found');
64
+ }
65
+ catch (error) {
66
+ console.error('ERROR in getActiveTasks:', error);
67
+ // Continue with normal flow if we can't check active tasks
68
+ }
69
+ console.error('Returning shouldPromptUser=false (no active tasks)');
70
+ return {
71
+ shouldPromptUser: false,
72
+ };
73
+ }
74
+ /**
75
+ * Get all parent tasks up to 4 levels deep
76
+ * Returns array of parent tasks in order from immediate parent to root
77
+ */
78
+ export async function getParentTaskChain(taskId, tasksApi, projectId) {
79
+ try {
80
+ const result = await tasksApi.getParentTaskChain(projectId, taskId);
81
+ return result.parentChain;
82
+ }
83
+ catch (error) {
84
+ console.error('Error fetching parent task chain:', error);
85
+ return [];
86
+ }
87
+ }
88
+ /**
89
+ * Analyze task escalation and return recommendation with reasoning
90
+ */
91
+ export async function analyzeTaskEscalation(taskId, tasksApi, projectId, currentMode) {
92
+ try {
93
+ const parentChain = await getParentTaskChain(taskId, tasksApi, projectId);
94
+ // Determine if escalation is needed based on task depth and complexity
95
+ const chainDepth = parentChain.length;
96
+ const hasComplexHistory = chainDepth >= 2; // Multiple follow-ups indicate complexity
97
+ const shouldEscalate = hasComplexHistory && currentMode === 'instant';
98
+ let reason = '';
99
+ if (shouldEscalate) {
100
+ reason = `This task has ${chainDepth} parent task${chainDepth !== 1 ? 's' : ''} in its history, indicating a complex, multi-level debugging session. The instant mode has a 5-minute timeout and is designed for quick questions. A chat session would allow for continuous, extended collaboration with the engineer, better suited for this complexity level.`;
101
+ }
102
+ else {
103
+ reason = `This is a straightforward ${currentMode} task${chainDepth === 0 ? ' with no parent tasks' : ' that can be handled efficiently'} within the current mode's parameters.`;
104
+ }
105
+ const prompt = shouldEscalate
106
+ ? `This task appears to be part of a multi-level debugging conversation with ${chainDepth} parent task${chainDepth !== 1 ? 's' : ''}. The current instant mode (5-minute timeout) may be limiting for complex, ongoing collaboration.\n\nWould you like to escalate this to a chat session for extended, real-time collaboration with the engineer? This would provide better continuity and allow for deeper problem-solving without timeout constraints.`
107
+ : `This task can continue as an instant query. However, if you need extended real-time collaboration, you have the option to escalate to chat mode.`;
108
+ return {
109
+ shouldEscalate,
110
+ reason,
111
+ taskChain: parentChain,
112
+ prompt,
113
+ options: [
114
+ {
115
+ action: 'escalate',
116
+ description: 'Escalate to Chat (extended collaboration, no timeout)',
117
+ },
118
+ {
119
+ action: 'keep',
120
+ description: `Keep as ${currentMode.charAt(0).toUpperCase() + currentMode.slice(1)} (quick response within timeout)`,
121
+ },
122
+ ],
123
+ };
124
+ }
125
+ catch (error) {
126
+ console.error('Error analyzing task escalation:', error);
127
+ return {
128
+ shouldEscalate: false,
129
+ reason: 'Unable to analyze task escalation',
130
+ taskChain: [],
131
+ prompt: 'Continue with current mode.',
132
+ options: [
133
+ { action: 'escalate', description: 'Escalate to Chat' },
134
+ { action: 'keep', description: 'Keep as Instant' },
135
+ ],
136
+ };
137
+ }
138
+ }
139
+ //# sourceMappingURL=task-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-checker.js","sourceRoot":"","sources":["../../../src/mcp/tools/task-checker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Tunnel Tool - Create localtunnel for local dev server access
3
+ */
4
+ export interface TunnelArgs {
5
+ port: number;
6
+ subdomain?: string;
7
+ reason?: string;
8
+ }
9
+ export declare class TunnelTool {
10
+ private tunnelManager;
11
+ private activeTunnels;
12
+ constructor();
13
+ execute(args: TunnelArgs): Promise<{
14
+ content: {
15
+ type: string;
16
+ text: string;
17
+ }[];
18
+ isError: boolean;
19
+ } | {
20
+ content: {
21
+ type: string;
22
+ text: string;
23
+ }[];
24
+ isError?: undefined;
25
+ }>;
26
+ /**
27
+ * Close all active tunnels
28
+ */
29
+ closeAll(): Promise<void>;
30
+ /**
31
+ * Get list of active tunnels
32
+ */
33
+ getActiveTunnels(): {
34
+ url: string;
35
+ port: number;
36
+ }[];
37
+ }
38
+ //# sourceMappingURL=tunnel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/tunnel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAkE;;IAOjF,OAAO,CAAC,IAAI,EAAE,UAAU;;;;;;;;;;;;;IAgF9B;;OAEG;IACG,QAAQ;IAYd;;OAEG;IACH,gBAAgB;;;;CAMjB"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Tunnel Tool - Create localtunnel for local dev server access
3
+ */
4
+ import { TunnelManager } from '../../modules/tunnel.js';
5
+ import { logger } from '../../lib/utils/logger.js';
6
+ import { nanoid } from 'nanoid';
7
+ export class TunnelTool {
8
+ constructor() {
9
+ this.tunnelManager = new TunnelManager();
10
+ this.activeTunnels = new Map();
11
+ }
12
+ async execute(args) {
13
+ const { port, subdomain, reason } = args;
14
+ try {
15
+ logger.info(`Creating tunnel for port ${port}`, { subdomain, reason });
16
+ // Validate port
17
+ if (!port || port < 1 || port > 65535) {
18
+ return {
19
+ content: [
20
+ {
21
+ type: 'text',
22
+ text: `❌ Invalid port: ${port}. Must be between 1 and 65535.`,
23
+ },
24
+ ],
25
+ isError: true,
26
+ };
27
+ }
28
+ // Create tunnel using a unique task ID
29
+ const taskId = nanoid();
30
+ const tunnel = await this.tunnelManager.createTunnel({
31
+ port,
32
+ subdomain,
33
+ taskId,
34
+ onError: (error) => {
35
+ logger.error('Tunnel error', error);
36
+ },
37
+ onClose: () => {
38
+ logger.info(`Tunnel closed for port ${port}`);
39
+ this.activeTunnels.delete(taskId);
40
+ },
41
+ });
42
+ // Store tunnel reference
43
+ this.activeTunnels.set(taskId, {
44
+ url: tunnel.url,
45
+ port: tunnel.port,
46
+ closeFn: async () => {
47
+ await this.tunnelManager.closeTunnel();
48
+ },
49
+ });
50
+ const message = [
51
+ `✅ Tunnel created successfully!`,
52
+ ``,
53
+ `🔗 **Tunnel URL:** ${tunnel.url}`,
54
+ `📍 **Local Port:** ${tunnel.port}`,
55
+ `🔑 **Password:** ${tunnel.password}`,
56
+ `⏰ **Created:** ${tunnel.createdAt.toISOString()}`,
57
+ ``,
58
+ `The tunnel will remain open for this session.`,
59
+ `Engineers or external services can now access your local server at this URL.`,
60
+ ].join('\n');
61
+ logger.info('Tunnel created', { url: tunnel.url, port: tunnel.port });
62
+ return {
63
+ content: [
64
+ {
65
+ type: 'text',
66
+ text: message,
67
+ },
68
+ ],
69
+ };
70
+ }
71
+ catch (error) {
72
+ logger.error('Failed to create tunnel', error);
73
+ return {
74
+ content: [
75
+ {
76
+ type: 'text',
77
+ text: `❌ Failed to create tunnel: ${error.message}\n\nCommon issues:\n- Port ${port} may not be in use\n- Firewall blocking connections\n- Localtunnel service temporarily unavailable`,
78
+ },
79
+ ],
80
+ isError: true,
81
+ };
82
+ }
83
+ }
84
+ /**
85
+ * Close all active tunnels
86
+ */
87
+ async closeAll() {
88
+ for (const [taskId, tunnel] of this.activeTunnels.entries()) {
89
+ try {
90
+ await tunnel.closeFn();
91
+ logger.info(`Closed tunnel: ${tunnel.url}`);
92
+ }
93
+ catch (error) {
94
+ logger.error(`Failed to close tunnel ${taskId}`, error);
95
+ }
96
+ }
97
+ this.activeTunnels.clear();
98
+ }
99
+ /**
100
+ * Get list of active tunnels
101
+ */
102
+ getActiveTunnels() {
103
+ return Array.from(this.activeTunnels.values()).map((t) => ({
104
+ url: t.url,
105
+ port: t.port,
106
+ }));
107
+ }
108
+ }
109
+ //# sourceMappingURL=tunnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../../src/mcp/tools/tunnel.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export declare class PermissionManager {
9
9
  handleTunnelRequest(port: number, reason: string, taskId: string, tunnelManager: TunnelManager): Promise<{
10
10
  approved: boolean;
11
11
  tunnelUrl?: string;
12
+ password?: string;
12
13
  error?: string;
13
14
  }>;
14
15
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/modules/permissions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,qBAAa,iBAAiB;IACtB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB5E,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B1E,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB9E;;OAEG;IACG,mBAAmB,CACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA2DrE;;OAEG;YACW,kBAAkB;CAsBjC"}
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/modules/permissions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,qBAAa,iBAAiB;IACtB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB5E,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B1E,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB9E;;OAEG;IACG,mBAAmB,CACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA6DxF;;OAEG;YACW,kBAAkB;CAsBjC"}
@@ -97,9 +97,11 @@ export class PermissionManager {
97
97
  onClose: () => console.log('Tunnel closed'),
98
98
  });
99
99
  console.log(chalk.green(`✓ Tunnel created: ${chalk.cyan(tunnel.url)}\n`));
100
+ console.log(chalk.dim(` Password: ${tunnel.password}\n`));
100
101
  return {
101
102
  approved: true,
102
103
  tunnelUrl: tunnel.url,
104
+ password: tunnel.password, // Always included - required for loca.lt access
103
105
  };
104
106
  }
105
107
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/modules/permissions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/modules/permissions.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,11 @@ export interface TunnelOptions {
13
13
  export declare class TunnelManager extends EventEmitter {
14
14
  private tunnel;
15
15
  private activeTunnel;
16
+ /**
17
+ * Fetch the localtunnel password for bypassing the landing page
18
+ * Retries up to 3 times to ensure we always get a password
19
+ */
20
+ private fetchTunnelPassword;
16
21
  /**
17
22
  * Create a new localtunnel for a task session
18
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../src/modules/tunnel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAA6B;IAEjD;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA6CjE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAUlC;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;OAEG;IACH,QAAQ,IAAI,OAAO;CAGpB"}
1
+ {"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../src/modules/tunnel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;OAGG;YACW,mBAAmB;IAmDjC;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAiDjE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAUlC;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;OAEG;IACH,QAAQ,IAAI,OAAO;CAGpB"}
@@ -3,12 +3,64 @@
3
3
  */
4
4
  import localtunnel from 'localtunnel';
5
5
  import { EventEmitter } from 'events';
6
+ import https from 'https';
6
7
  export class TunnelManager extends EventEmitter {
7
8
  constructor() {
8
9
  super(...arguments);
9
10
  this.tunnel = null;
10
11
  this.activeTunnel = null;
11
12
  }
13
+ /**
14
+ * Fetch the localtunnel password for bypassing the landing page
15
+ * Retries up to 3 times to ensure we always get a password
16
+ */
17
+ async fetchTunnelPassword() {
18
+ const maxRetries = 3;
19
+ let lastError = null;
20
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
21
+ try {
22
+ const password = await new Promise((resolve, reject) => {
23
+ https
24
+ .get('https://loca.lt/mytunnelpassword', (res) => {
25
+ // Check HTTP status code before reading response
26
+ if (res.statusCode !== 200) {
27
+ reject(new Error(`HTTP ${res.statusCode}: ${res.statusMessage || 'Request failed'}`));
28
+ // Consume response data to free up memory
29
+ res.resume();
30
+ return;
31
+ }
32
+ let data = '';
33
+ res.on('data', (chunk) => {
34
+ data += chunk;
35
+ });
36
+ res.on('end', () => {
37
+ const trimmed = data.trim();
38
+ if (trimmed) {
39
+ resolve(trimmed);
40
+ }
41
+ else {
42
+ reject(new Error('Empty password received'));
43
+ }
44
+ });
45
+ })
46
+ .on('error', (err) => {
47
+ reject(err);
48
+ });
49
+ });
50
+ return password;
51
+ }
52
+ catch (err) {
53
+ lastError = err instanceof Error ? err : new Error(String(err));
54
+ console.error(`Failed to fetch tunnel password (attempt ${attempt}/${maxRetries}):`, err);
55
+ // Wait before retry if not the last attempt (exponential backoff: 500ms, 1s, 2s)
56
+ if (attempt < maxRetries) {
57
+ await new Promise(resolve => setTimeout(resolve, 500 * Math.pow(2, attempt - 1)));
58
+ }
59
+ }
60
+ }
61
+ // If we exit the loop, all retries failed
62
+ throw new Error(`Could not fetch tunnel password after multiple attempts: ${lastError?.message || 'Unknown error'}`);
63
+ }
12
64
  /**
13
65
  * Create a new localtunnel for a task session
14
66
  */
@@ -23,12 +75,15 @@ export class TunnelManager extends EventEmitter {
23
75
  }
24
76
  try {
25
77
  this.tunnel = await localtunnel(tunnelOptions);
78
+ // Fetch the tunnel password (with retries to ensure we always get one)
79
+ const password = await this.fetchTunnelPassword();
26
80
  this.activeTunnel = {
27
81
  url: this.tunnel.url,
28
82
  port: options.port,
29
83
  subdomain: options.subdomain,
30
84
  createdAt: new Date(),
31
85
  taskId: options.taskId,
86
+ password, // Password is always present (method throws if unavailable)
32
87
  };
33
88
  // Handle tunnel errors
34
89
  this.tunnel.on('error', (err) => {
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/modules/tunnel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,WAAW,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAWtC,MAAM,OAAO,aAAc,SAAQ,YAAY;IAA/C;;QACU,WAAM,GAAkB,IAAI,CAAC;QAC7B,iBAAY,GAAwB,IAAI,CAAC;IA4EnD,CAAC;IA1EC;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAAsB;QACvC,+BAA+B;QAC/B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,aAAa,GAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,aAAa,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;YAE/C,IAAI,CAAC,YAAY,GAAG;gBAClB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC;YAEF,uBAAuB;YACvB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC9B,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxB,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,sBAAsB;YACtB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC3B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;YACrC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAC5D,CAAC;CACF"}
1
+ {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/modules/tunnel.ts"],"names":[],"mappings":"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"}