@anastops/mcp-server 0.1.0 → 1.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 (106) hide show
  1. package/dist/formatters.d.ts.map +1 -1
  2. package/dist/formatters.js +12 -3
  3. package/dist/formatters.js.map +1 -1
  4. package/dist/handlers/agent-handlers.d.ts +8 -0
  5. package/dist/handlers/agent-handlers.d.ts.map +1 -0
  6. package/dist/handlers/agent-handlers.js +184 -0
  7. package/dist/handlers/agent-handlers.js.map +1 -0
  8. package/dist/handlers/artifact-handlers.d.ts +8 -0
  9. package/dist/handlers/artifact-handlers.d.ts.map +1 -0
  10. package/dist/handlers/artifact-handlers.js +122 -0
  11. package/dist/handlers/artifact-handlers.js.map +1 -0
  12. package/dist/handlers/cost-handlers.d.ts +8 -0
  13. package/dist/handlers/cost-handlers.d.ts.map +1 -0
  14. package/dist/handlers/cost-handlers.js +140 -0
  15. package/dist/handlers/cost-handlers.js.map +1 -0
  16. package/dist/handlers/handlers.agent.d.ts +10 -0
  17. package/dist/handlers/handlers.agent.d.ts.map +1 -0
  18. package/dist/handlers/handlers.agent.js +99 -0
  19. package/dist/handlers/handlers.agent.js.map +1 -0
  20. package/dist/handlers/handlers.base.d.ts +83 -0
  21. package/dist/handlers/handlers.base.d.ts.map +1 -0
  22. package/dist/handlers/handlers.base.js +351 -0
  23. package/dist/handlers/handlers.base.js.map +1 -0
  24. package/dist/handlers/handlers.lock.d.ts +8 -0
  25. package/dist/handlers/handlers.lock.d.ts.map +1 -0
  26. package/dist/handlers/handlers.lock.js +111 -0
  27. package/dist/handlers/handlers.lock.js.map +1 -0
  28. package/dist/handlers/handlers.memory.d.ts +11 -0
  29. package/dist/handlers/handlers.memory.d.ts.map +1 -0
  30. package/dist/handlers/handlers.memory.js +122 -0
  31. package/dist/handlers/handlers.memory.js.map +1 -0
  32. package/dist/handlers/handlers.monitoring.d.ts +8 -0
  33. package/dist/handlers/handlers.monitoring.d.ts.map +1 -0
  34. package/dist/handlers/handlers.monitoring.js +99 -0
  35. package/dist/handlers/handlers.monitoring.js.map +1 -0
  36. package/dist/handlers/handlers.orchestration.d.ts +9 -0
  37. package/dist/handlers/handlers.orchestration.d.ts.map +1 -0
  38. package/dist/handlers/handlers.orchestration.js +128 -0
  39. package/dist/handlers/handlers.orchestration.js.map +1 -0
  40. package/dist/handlers/handlers.session.d.ts +18 -0
  41. package/dist/handlers/handlers.session.d.ts.map +1 -0
  42. package/dist/handlers/handlers.session.js +286 -0
  43. package/dist/handlers/handlers.session.js.map +1 -0
  44. package/dist/handlers/handlers.task.d.ts +15 -0
  45. package/dist/handlers/handlers.task.d.ts.map +1 -0
  46. package/dist/handlers/handlers.task.js +762 -0
  47. package/dist/handlers/handlers.task.js.map +1 -0
  48. package/dist/handlers/handlers.utility.d.ts +10 -0
  49. package/dist/handlers/handlers.utility.d.ts.map +1 -0
  50. package/dist/handlers/handlers.utility.js +59 -0
  51. package/dist/handlers/handlers.utility.js.map +1 -0
  52. package/dist/handlers/index.d.ts +18 -0
  53. package/dist/handlers/index.d.ts.map +1 -0
  54. package/dist/handlers/index.js +209 -0
  55. package/dist/handlers/index.js.map +1 -0
  56. package/dist/handlers/lock-handlers.d.ts +8 -0
  57. package/dist/handlers/lock-handlers.d.ts.map +1 -0
  58. package/dist/handlers/lock-handlers.js +154 -0
  59. package/dist/handlers/lock-handlers.js.map +1 -0
  60. package/dist/handlers/memory-handlers.d.ts +8 -0
  61. package/dist/handlers/memory-handlers.d.ts.map +1 -0
  62. package/dist/handlers/memory-handlers.js +76 -0
  63. package/dist/handlers/memory-handlers.js.map +1 -0
  64. package/dist/handlers/orchestration-handlers.d.ts +8 -0
  65. package/dist/handlers/orchestration-handlers.d.ts.map +1 -0
  66. package/dist/handlers/orchestration-handlers.js +113 -0
  67. package/dist/handlers/orchestration-handlers.js.map +1 -0
  68. package/dist/handlers/session-handlers.d.ts +8 -0
  69. package/dist/handlers/session-handlers.d.ts.map +1 -0
  70. package/dist/handlers/session-handlers.js +558 -0
  71. package/dist/handlers/session-handlers.js.map +1 -0
  72. package/dist/handlers/task-handlers.d.ts +8 -0
  73. package/dist/handlers/task-handlers.d.ts.map +1 -0
  74. package/dist/handlers/task-handlers.js +677 -0
  75. package/dist/handlers/task-handlers.js.map +1 -0
  76. package/dist/handlers/tool-definitions.d.ts +2626 -0
  77. package/dist/handlers/tool-definitions.d.ts.map +1 -0
  78. package/dist/handlers/tool-definitions.js +641 -0
  79. package/dist/handlers/tool-definitions.js.map +1 -0
  80. package/dist/handlers/types.d.ts +90 -0
  81. package/dist/handlers/types.d.ts.map +1 -0
  82. package/dist/handlers/types.js +5 -0
  83. package/dist/handlers/types.js.map +1 -0
  84. package/dist/handlers/utility-handlers.d.ts +8 -0
  85. package/dist/handlers/utility-handlers.d.ts.map +1 -0
  86. package/dist/handlers/utility-handlers.js +113 -0
  87. package/dist/handlers/utility-handlers.js.map +1 -0
  88. package/dist/handlers/utils.d.ts +30 -0
  89. package/dist/handlers/utils.d.ts.map +1 -0
  90. package/dist/handlers/utils.js +95 -0
  91. package/dist/handlers/utils.js.map +1 -0
  92. package/dist/handlers.d.ts +17 -2260
  93. package/dist/handlers.d.ts.map +1 -1
  94. package/dist/handlers.js +17 -1836
  95. package/dist/handlers.js.map +1 -1
  96. package/dist/index.js +41 -7
  97. package/dist/index.js.map +1 -1
  98. package/dist/persistence.d.ts +18 -1
  99. package/dist/persistence.d.ts.map +1 -1
  100. package/dist/persistence.js +159 -99
  101. package/dist/persistence.js.map +1 -1
  102. package/dist/schemas.d.ts +299 -0
  103. package/dist/schemas.d.ts.map +1 -0
  104. package/dist/schemas.js +334 -0
  105. package/dist/schemas.js.map +1 -0
  106. package/package.json +11 -8
@@ -0,0 +1,99 @@
1
+ /**
2
+ * MCP Tool Handlers - Agent Management
3
+ * Handles: agent_create, agent_deploy, agent_status, agent_list, agent_retire
4
+ */
5
+ import { nanoid } from 'nanoid';
6
+ import { getPersistence } from '../persistence.js';
7
+ import { safePersist, agents, getAgent } from './handlers.base.js';
8
+ export function handleAgentCreate(args) {
9
+ const agentId = nanoid(21);
10
+ const now = new Date();
11
+ const agent = {
12
+ id: agentId,
13
+ session_id: args['session_id'],
14
+ role: args['role'] ?? 'implementer',
15
+ name: args['name'] ?? `agent-${agentId.slice(0, 4)}`,
16
+ status: 'idle',
17
+ provider: args['provider'] ?? 'claude',
18
+ model: args['model'] ?? 'claude-sonnet',
19
+ current_task_id: null,
20
+ tasks_completed: 0,
21
+ tasks_failed: 0,
22
+ tokens_used: 0,
23
+ created_at: now,
24
+ last_activity_at: now,
25
+ config: {},
26
+ };
27
+ agents.set(agentId, agent);
28
+ // Persist to MongoDB
29
+ safePersist(getPersistence().saveAgent(agent));
30
+ return Promise.resolve({
31
+ agent_id: agent.id,
32
+ name: agent.name,
33
+ role: agent.role,
34
+ status: agent.status,
35
+ });
36
+ }
37
+ export async function handleAgentDeploy(args) {
38
+ const agent = await getAgent(args['agent_id']);
39
+ if (agent === null)
40
+ throw new Error('Agent not found');
41
+ agent.current_task_id = args['task_id'];
42
+ agent.status = 'working';
43
+ agent.last_activity_at = new Date();
44
+ agents.set(agent.id, agent);
45
+ safePersist(getPersistence().saveAgent(agent));
46
+ return { agent_id: agent.id, task_id: agent.current_task_id, status: agent.status };
47
+ }
48
+ export async function handleAgentStatus(args) {
49
+ const agent = await getAgent(args['agent_id']);
50
+ if (agent === null)
51
+ throw new Error('Agent not found');
52
+ return agent;
53
+ }
54
+ export async function handleAgentList(args) {
55
+ // Get from in-memory cache first
56
+ const inMemoryAgents = [];
57
+ for (const [, agent] of agents.entries()) {
58
+ if (args['session_id'] === undefined || agent.session_id === args['session_id']) {
59
+ inMemoryAgents.push(agent);
60
+ }
61
+ }
62
+ // Also get from MongoDB for persistence
63
+ const persistedAgents = await getPersistence().listAgents({
64
+ ...(args['session_id'] !== undefined && { session_id: args['session_id'] }),
65
+ });
66
+ // Merge: in-memory takes precedence
67
+ const inMemoryIds = new Set(inMemoryAgents.map((a) => a.id));
68
+ const sessionAgents = [
69
+ ...inMemoryAgents,
70
+ ...persistedAgents.filter((a) => !inMemoryIds.has(a.id)),
71
+ ];
72
+ return {
73
+ count: sessionAgents.length,
74
+ agents: sessionAgents.map((a) => ({ id: a.id, name: a.name, role: a.role, status: a.status })),
75
+ };
76
+ }
77
+ export async function handleAgentRetire(args) {
78
+ const agentId = args['agent_id'];
79
+ const agent = await getAgent(agentId);
80
+ if (agent === null) {
81
+ throw new Error(`Agent not found: ${agentId}`);
82
+ }
83
+ // Retire the agent
84
+ agent.status = 'completed';
85
+ agent.last_activity_at = new Date();
86
+ agent.current_task_id = null;
87
+ agents.set(agentId, agent);
88
+ // Persist to MongoDB
89
+ safePersist(getPersistence().saveAgent(agent));
90
+ return {
91
+ agent_id: agent.id,
92
+ name: agent.name,
93
+ role: agent.role,
94
+ status: agent.status,
95
+ tasks_completed: agent.tasks_completed,
96
+ retired: true,
97
+ };
98
+ }
99
+ //# sourceMappingURL=handlers.agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.agent.js","sourceRoot":"","sources":["../../src/handlers/handlers.agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Base utilities for MCP Tool Handlers
3
+ * Includes TOON encoding, response formatting, error handling, and cache management
4
+ */
5
+ import type { Task, Agent, Artifact } from '@anastops/core';
6
+ import { LRUCache } from 'lru-cache';
7
+ /**
8
+ * Safe fire-and-forget wrapper for persistence operations
9
+ * Catches errors to prevent uncaught promise rejections from crashing the server
10
+ * Logs errors to debug file for visibility
11
+ */
12
+ export declare function safePersist<T>(operation: Promise<T>): void;
13
+ /**
14
+ * TOON-encoded response wrapper type
15
+ */
16
+ export interface TOONEncodedResponse {
17
+ data: unknown;
18
+ encoding?: 'toon' | 'json';
19
+ token_reduction?: {
20
+ original: number;
21
+ encoded: number;
22
+ savings_percent: number;
23
+ };
24
+ }
25
+ /**
26
+ * Apply TOON encoding to response if beneficial
27
+ * Returns original data if TOON doesn't provide savings
28
+ *
29
+ * TOON (Token-Optimized Object Notation) is most effective for:
30
+ * - Arrays of uniform objects (converted to tabular format)
31
+ * - Large structured responses (> 500 bytes)
32
+ */
33
+ export declare function applyTOONEncodingToResponse(data: unknown): TOONEncodedResponse;
34
+ /**
35
+ * Sanitize error message for external exposure
36
+ * SECURITY: Never expose internal details like stack traces, paths, or credentials
37
+ */
38
+ export declare function sanitizeErrorMessage(error: unknown): string;
39
+ export interface MemoryStoreValue {
40
+ value: Record<string, unknown>;
41
+ stored_at: Date;
42
+ }
43
+ export declare const agents: LRUCache<string, Agent, unknown>;
44
+ export declare const tasks: LRUCache<string, Task, unknown>;
45
+ export declare const artifacts: LRUCache<string, Artifact, unknown>;
46
+ export declare const memoryStore: LRUCache<string, MemoryStoreValue, unknown>;
47
+ /**
48
+ * Get task from memory or MongoDB
49
+ * Loads from MongoDB and caches in memory if not found
50
+ */
51
+ export declare function getTask(taskId: string): Promise<Task | null>;
52
+ /**
53
+ * Get agent from memory or MongoDB
54
+ */
55
+ export declare function getAgent(agentId: string): Promise<Agent | null>;
56
+ /**
57
+ * Get artifact from memory or MongoDB
58
+ */
59
+ export declare function getArtifact(artifactId: string): Promise<Artifact | null>;
60
+ /**
61
+ * Format a session report with all related data
62
+ */
63
+ export declare function formatSessionReport(report: {
64
+ session: {
65
+ id: string;
66
+ objective: string;
67
+ status: string;
68
+ created_at: Date;
69
+ updated_at: Date;
70
+ metadata: {
71
+ total_tokens: number;
72
+ total_cost: number;
73
+ agents_used: string[];
74
+ files_affected: string[];
75
+ tasks_completed: number;
76
+ tasks_failed: number;
77
+ };
78
+ };
79
+ tasks: Task[];
80
+ agents: Agent[];
81
+ artifacts: Artifact[];
82
+ }, includeOutput: boolean, includeArtifactContent: boolean): Record<string, unknown>;
83
+ //# sourceMappingURL=handlers.base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.base.d.ts","sourceRoot":"","sources":["../../src/handlers/handlers.base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAKrC;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAwB1D;AAKD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAwDD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,mBAAmB,CA8D9E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAwB3D;AAGD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC;CACjB;AAGD,eAAO,MAAM,MAAM,kCAAkE,CAAC;AACtF,eAAO,MAAM,KAAK,iCAAsE,CAAC;AACzF,eAAO,MAAM,SAAS,qCAA0E,CAAC;AACjG,eAAO,MAAM,WAAW,6CAGtB,CAAC;AAEH;;;GAGG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAgBlE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAarE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAa9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE;IACN,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,IAAI,CAAC;QACjB,UAAU,EAAE,IAAI,CAAC;QACjB,QAAQ,EAAE;YACR,YAAY,EAAE,MAAM,CAAC;YACrB,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,MAAM,EAAE,CAAC;YACtB,cAAc,EAAE,MAAM,EAAE,CAAC;YACzB,eAAe,EAAE,MAAM,CAAC;YACxB,YAAY,EAAE,MAAM,CAAC;SACtB,CAAC;KACH,CAAC;IACF,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB,EACD,aAAa,EAAE,OAAO,EACtB,sBAAsB,EAAE,OAAO,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2HzB"}
@@ -0,0 +1,351 @@
1
+ /**
2
+ * Base utilities for MCP Tool Handlers
3
+ * Includes TOON encoding, response formatting, error handling, and cache management
4
+ */
5
+ import { captureError } from '@anastops/core';
6
+ import { LRUCache } from 'lru-cache';
7
+ import { ZodError } from 'zod';
8
+ import { getPersistence } from '../persistence.js';
9
+ /**
10
+ * Safe fire-and-forget wrapper for persistence operations
11
+ * Catches errors to prevent uncaught promise rejections from crashing the server
12
+ * Logs errors to debug file for visibility
13
+ */
14
+ export function safePersist(operation) {
15
+ operation.catch((error) => {
16
+ const message = error instanceof Error ? error.message : String(error);
17
+ console.error('[Persistence Error]', message);
18
+ // Write to debug log for visibility (async import to avoid top-level await)
19
+ import('fs')
20
+ .then((fs) => {
21
+ try {
22
+ fs.appendFileSync('/tmp/anastops-mcp-debug.log', `\n[Persistence Error] ${new Date().toISOString()}: ${message}\n`);
23
+ }
24
+ catch {
25
+ // Ignore file write errors
26
+ }
27
+ })
28
+ .catch(() => {
29
+ // Ignore import errors
30
+ });
31
+ // Capture persistence errors in Sentry
32
+ captureError(error, { type: 'persistence' });
33
+ });
34
+ }
35
+ // TOON encoding constants
36
+ const TOON_MIN_SIZE_BYTES = 500;
37
+ /**
38
+ * Estimate token count for text
39
+ * Rough approximation: ~4 characters per token for English
40
+ */
41
+ function estimateTokens(text) {
42
+ return Math.ceil(text.length / 4);
43
+ }
44
+ /**
45
+ * Convert array of uniform objects to TOON tabular format
46
+ * TOON format uses pipe-separated headers and values for compact representation
47
+ */
48
+ function toTOONTabular(arr, keys) {
49
+ if (arr.length === 0 || keys.length === 0)
50
+ return '';
51
+ const lines = [];
52
+ // Header row
53
+ lines.push(keys.join(' | '));
54
+ // Data rows
55
+ for (const item of arr) {
56
+ const values = keys.map((k) => {
57
+ const val = item[k];
58
+ if (val === null || val === undefined)
59
+ return '';
60
+ if (typeof val === 'string')
61
+ return val.slice(0, 50);
62
+ if (val instanceof Date)
63
+ return val.toISOString();
64
+ return String(val);
65
+ });
66
+ lines.push(values.join(' | '));
67
+ }
68
+ return lines.join('\n');
69
+ }
70
+ /**
71
+ * Check if array contains uniform objects (all objects have same keys)
72
+ */
73
+ function isUniformObjectArray(data) {
74
+ if (!Array.isArray(data) || data.length === 0)
75
+ return false;
76
+ if (typeof data[0] !== 'object' || data[0] === null)
77
+ return false;
78
+ const firstKeys = Object.keys(data[0])
79
+ .sort()
80
+ .join(',');
81
+ return data.every((item) => {
82
+ if (typeof item !== 'object' || item === null)
83
+ return false;
84
+ return (Object.keys(item)
85
+ .sort()
86
+ .join(',') === firstKeys);
87
+ });
88
+ }
89
+ /**
90
+ * Apply TOON encoding to response if beneficial
91
+ * Returns original data if TOON doesn't provide savings
92
+ *
93
+ * TOON (Token-Optimized Object Notation) is most effective for:
94
+ * - Arrays of uniform objects (converted to tabular format)
95
+ * - Large structured responses (> 500 bytes)
96
+ */
97
+ export function applyTOONEncodingToResponse(data) {
98
+ // Only apply TOON to arrays or large objects
99
+ const jsonStr = JSON.stringify(data);
100
+ if (jsonStr.length < TOON_MIN_SIZE_BYTES) {
101
+ return { data }; // Too small, not worth encoding
102
+ }
103
+ const originalTokens = estimateTokens(jsonStr);
104
+ // Check if data structure is TOON-eligible
105
+ // TOON works best with arrays of uniform objects
106
+ if (typeof data !== 'object' || data === null) {
107
+ return { data };
108
+ }
109
+ const dataObj = data;
110
+ // Look for arrays within the response that could be TOON-encoded
111
+ let hasEncodableArrays = false;
112
+ const toonParts = [];
113
+ const scalarParts = [];
114
+ for (const [key, value] of Object.entries(dataObj)) {
115
+ if (isUniformObjectArray(value)) {
116
+ hasEncodableArrays = true;
117
+ const keys = Object.keys(value[0]);
118
+ toonParts.push(`${key}:\n${toTOONTabular(value, keys)}`);
119
+ }
120
+ else if (Array.isArray(value)) {
121
+ // Non-uniform array, keep as JSON
122
+ scalarParts.push(`${key}: ${JSON.stringify(value)}`);
123
+ }
124
+ else if (typeof value === 'object' && value !== null) {
125
+ // Nested object, keep as compact JSON
126
+ scalarParts.push(`${key}: ${JSON.stringify(value)}`);
127
+ }
128
+ else {
129
+ // Scalar value
130
+ scalarParts.push(`${key}: ${String(value)}`);
131
+ }
132
+ }
133
+ if (!hasEncodableArrays) {
134
+ return { data }; // No benefit from TOON encoding
135
+ }
136
+ // Build TOON-encoded representation
137
+ const toonEncoded = [...scalarParts, ...toonParts].join('\n');
138
+ const encodedTokens = estimateTokens(toonEncoded);
139
+ // Only use TOON if we get meaningful savings (> 20%)
140
+ const savingsPercent = ((originalTokens - encodedTokens) / originalTokens) * 100;
141
+ if (savingsPercent < 20) {
142
+ return { data }; // Not enough savings to justify encoding change
143
+ }
144
+ return {
145
+ data: toonEncoded,
146
+ encoding: 'toon',
147
+ token_reduction: {
148
+ original: originalTokens,
149
+ encoded: encodedTokens,
150
+ savings_percent: Math.round(savingsPercent * 100) / 100,
151
+ },
152
+ };
153
+ }
154
+ /**
155
+ * Sanitize error message for external exposure
156
+ * SECURITY: Never expose internal details like stack traces, paths, or credentials
157
+ */
158
+ export function sanitizeErrorMessage(error) {
159
+ if (error instanceof ZodError) {
160
+ // Return validation errors with field details but no internal info
161
+ const issues = error.issues.map((issue) => ({
162
+ path: issue.path.join('.'),
163
+ message: issue.message,
164
+ }));
165
+ return `Validation error: ${JSON.stringify(issues)}`;
166
+ }
167
+ if (error instanceof Error) {
168
+ const message = error.message;
169
+ // Redact sensitive patterns
170
+ const sensitized = message
171
+ .replace(/mongodb:\/\/[^@]+@/gi, 'mongodb://***@') // MongoDB credentials
172
+ .replace(/redis:\/\/[^@]+@/gi, 'redis://***@') // Redis credentials
173
+ .replace(/password[=:]["']?[^"'\s]+["']?/gi, 'password=***') // Generic passwords
174
+ .replace(/\/Users\/[^/]+\//g, '/****/') // User paths
175
+ .replace(/\/home\/[^/]+\//g, '/****/') // User paths
176
+ .replace(/api[_-]?key[=:]["']?[^"'\s]+["']?/gi, 'api_key=***'); // API keys
177
+ return sensitized;
178
+ }
179
+ return 'An unexpected error occurred';
180
+ }
181
+ // LRU caches with size limits and TTL to prevent memory leaks
182
+ export const agents = new LRUCache({ max: 1000, ttl: 1000 * 60 * 60 }); // 1 hour TTL
183
+ export const tasks = new LRUCache({ max: 5000, ttl: 1000 * 60 * 60 * 24 }); // 24 hour TTL
184
+ export const artifacts = new LRUCache({ max: 1000, ttl: 1000 * 60 * 60 * 24 }); // 24 hour TTL
185
+ export const memoryStore = new LRUCache({
186
+ max: 10000,
187
+ ttl: 1000 * 60 * 60,
188
+ }); // 1 hour TTL
189
+ /**
190
+ * Get task from memory or MongoDB
191
+ * Loads from MongoDB and caches in memory if not found
192
+ */
193
+ export async function getTask(taskId) {
194
+ // Check in-memory first
195
+ const memTask = tasks.get(taskId);
196
+ if (memTask !== undefined) {
197
+ return memTask;
198
+ }
199
+ // Try to load from MongoDB
200
+ const dbTask = await getPersistence().getTask(taskId);
201
+ if (dbTask !== null) {
202
+ // Cache in memory for subsequent access
203
+ tasks.set(taskId, dbTask);
204
+ return dbTask;
205
+ }
206
+ return null;
207
+ }
208
+ /**
209
+ * Get agent from memory or MongoDB
210
+ */
211
+ export async function getAgent(agentId) {
212
+ const memAgent = agents.get(agentId);
213
+ if (memAgent !== undefined) {
214
+ return memAgent;
215
+ }
216
+ const dbAgent = await getPersistence().getAgent(agentId);
217
+ if (dbAgent !== null) {
218
+ agents.set(agentId, dbAgent);
219
+ return dbAgent;
220
+ }
221
+ return null;
222
+ }
223
+ /**
224
+ * Get artifact from memory or MongoDB
225
+ */
226
+ export async function getArtifact(artifactId) {
227
+ const memArtifact = artifacts.get(artifactId);
228
+ if (memArtifact !== undefined) {
229
+ return memArtifact;
230
+ }
231
+ const dbArtifact = await getPersistence().getArtifact(artifactId);
232
+ if (dbArtifact !== null) {
233
+ artifacts.set(artifactId, dbArtifact);
234
+ return dbArtifact;
235
+ }
236
+ return null;
237
+ }
238
+ /**
239
+ * Format a session report with all related data
240
+ */
241
+ export function formatSessionReport(report, includeOutput, includeArtifactContent) {
242
+ const { session, tasks: sessionTasks, agents: sessionAgents, artifacts: sessionArtifacts, } = report;
243
+ // Calculate statistics
244
+ const taskStats = {
245
+ total: sessionTasks.length,
246
+ pending: sessionTasks.filter((t) => t.status === 'pending').length,
247
+ queued: sessionTasks.filter((t) => t.status === 'queued').length,
248
+ running: sessionTasks.filter((t) => t.status === 'running').length,
249
+ completed: sessionTasks.filter((t) => t.status === 'completed').length,
250
+ failed: sessionTasks.filter((t) => t.status === 'failed').length,
251
+ cancelled: sessionTasks.filter((t) => t.status === 'cancelled').length,
252
+ };
253
+ const totalTokens = sessionTasks.reduce((sum, t) => sum + (t.token_usage?.total_tokens ?? 0), 0);
254
+ const totalCost = sessionTasks.reduce((sum, t) => sum + (t.token_usage?.cost ?? 0), 0);
255
+ // Format tasks with full details
256
+ const formattedTasks = sessionTasks.map((t) => {
257
+ const taskData = {
258
+ id: t.id,
259
+ type: t.type,
260
+ status: t.status,
261
+ description: t.description,
262
+ provider: t.provider,
263
+ model: t.model,
264
+ routing_tier: t.routing_tier,
265
+ complexity_score: t.complexity_score,
266
+ token_usage: t.token_usage,
267
+ created_at: t.created_at,
268
+ started_at: t.started_at,
269
+ completed_at: t.completed_at,
270
+ retry_count: t.retry_count,
271
+ input: {
272
+ prompt: t.input?.prompt?.slice(0, 500) ?? '',
273
+ context_files: t.input?.context_files ?? [],
274
+ agent: t.input?.agent,
275
+ skills: t.input?.skills,
276
+ },
277
+ };
278
+ if (t.error !== null && t.error !== undefined && t.error !== '') {
279
+ taskData.error = t.error;
280
+ }
281
+ if (includeOutput && t.output) {
282
+ taskData.output = {
283
+ content: t.output.content,
284
+ artifacts: t.output.artifacts,
285
+ files_modified: t.output.files_modified,
286
+ };
287
+ }
288
+ else if (t.output) {
289
+ taskData.output = {
290
+ content_length: t.output.content?.length ?? 0,
291
+ artifacts_count: t.output.artifacts?.length ?? 0,
292
+ files_modified: t.output.files_modified,
293
+ };
294
+ }
295
+ return taskData;
296
+ });
297
+ // Format agents
298
+ const formattedAgents = sessionAgents.map((a) => ({
299
+ id: a.id,
300
+ name: a.name,
301
+ role: a.role,
302
+ status: a.status,
303
+ provider: a.provider,
304
+ model: a.model,
305
+ tasks_completed: a.tasks_completed,
306
+ tasks_failed: a.tasks_failed,
307
+ tokens_used: a.tokens_used,
308
+ current_task_id: a.current_task_id,
309
+ created_at: a.created_at,
310
+ last_activity_at: a.last_activity_at,
311
+ }));
312
+ // Format artifacts
313
+ const formattedArtifacts = sessionArtifacts.map((a) => {
314
+ const artifactData = {
315
+ id: a.id,
316
+ name: a.name,
317
+ type: a.type,
318
+ size_bytes: a.size_bytes,
319
+ token_count: a.token_count,
320
+ created_at: a.created_at,
321
+ };
322
+ if (includeArtifactContent) {
323
+ artifactData.content = a.content;
324
+ }
325
+ else {
326
+ artifactData.summary = a.summary;
327
+ }
328
+ return artifactData;
329
+ });
330
+ return {
331
+ session: {
332
+ id: session.id,
333
+ objective: session.objective,
334
+ status: session.status,
335
+ created_at: session.created_at,
336
+ updated_at: session.updated_at,
337
+ metadata: session.metadata,
338
+ },
339
+ statistics: {
340
+ tasks: taskStats,
341
+ total_tokens: totalTokens,
342
+ total_cost_usd: totalCost,
343
+ agents_count: sessionAgents.length,
344
+ artifacts_count: sessionArtifacts.length,
345
+ },
346
+ tasks: formattedTasks,
347
+ agents: formattedAgents,
348
+ artifacts: formattedArtifacts,
349
+ };
350
+ }
351
+ //# sourceMappingURL=handlers.base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.base.js","sourceRoot":"","sources":["../../src/handlers/handlers.base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Tool Handlers - Lock Management
3
+ * Handles: lock_acquire, lock_release, lock_status
4
+ */
5
+ export declare function handleLockAcquire(args: Record<string, unknown>): Promise<unknown>;
6
+ export declare function handleLockRelease(args: Record<string, unknown>): Promise<unknown>;
7
+ export declare function handleLockStatus(args: Record<string, unknown>): Promise<unknown>;
8
+ //# sourceMappingURL=handlers.lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.lock.d.ts","sourceRoot":"","sources":["../../src/handlers/handlers.lock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAmCjF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA+BjF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAkDhF"}