@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,111 @@
1
+ /**
2
+ * MCP Tool Handlers - Lock Management
3
+ * Handles: lock_acquire, lock_release, lock_status
4
+ */
5
+ import { memoryStore } from './handlers.base.js';
6
+ export function handleLockAcquire(args) {
7
+ const sessionId = args['session_id'];
8
+ const filePath = args['file_path'];
9
+ const ttl = args['ttl'] ?? 300000;
10
+ // In-memory lock implementation (Redis-based implementation would be used in production)
11
+ const lockKey = `lock:${filePath}`;
12
+ const existingLock = memoryStore.get(lockKey);
13
+ if (existingLock !== undefined) {
14
+ const lockData = existingLock.value;
15
+ // Check if lock is expired
16
+ if (lockData.expires_at > Date.now() && lockData.session_id !== sessionId) {
17
+ return Promise.resolve({
18
+ session_id: sessionId,
19
+ file_path: filePath,
20
+ acquired: false,
21
+ owner: lockData.session_id,
22
+ ttl,
23
+ });
24
+ }
25
+ }
26
+ // Acquire lock
27
+ memoryStore.set(lockKey, {
28
+ value: { session_id: sessionId, expires_at: Date.now() + ttl },
29
+ stored_at: new Date(),
30
+ });
31
+ return Promise.resolve({
32
+ session_id: sessionId,
33
+ file_path: filePath,
34
+ acquired: true,
35
+ ttl,
36
+ });
37
+ }
38
+ export function handleLockRelease(args) {
39
+ const sessionId = args['session_id'];
40
+ const filePath = args['file_path'];
41
+ const lockKey = `lock:${filePath}`;
42
+ const existingLock = memoryStore.get(lockKey);
43
+ if (existingLock !== undefined) {
44
+ const lockData = existingLock.value;
45
+ if (lockData.session_id === sessionId) {
46
+ memoryStore.delete(lockKey);
47
+ return Promise.resolve({
48
+ session_id: sessionId,
49
+ file_path: filePath,
50
+ released: true,
51
+ });
52
+ }
53
+ return Promise.resolve({
54
+ session_id: sessionId,
55
+ file_path: filePath,
56
+ released: false,
57
+ error: 'Lock is held by another session',
58
+ });
59
+ }
60
+ return Promise.resolve({
61
+ session_id: sessionId,
62
+ file_path: filePath,
63
+ released: true,
64
+ message: 'Lock did not exist',
65
+ });
66
+ }
67
+ export function handleLockStatus(args) {
68
+ const sessionId = args['session_id'];
69
+ const filePath = args['file_path'];
70
+ if (filePath !== undefined) {
71
+ const lockKey = `lock:${filePath}`;
72
+ const existingLock = memoryStore.get(lockKey);
73
+ if (existingLock !== undefined) {
74
+ const lockData = existingLock.value;
75
+ const isExpired = lockData.expires_at <= Date.now();
76
+ return Promise.resolve({
77
+ file_path: filePath,
78
+ is_locked: !isExpired,
79
+ owner: isExpired ? null : lockData.session_id,
80
+ expires_at: lockData.expires_at,
81
+ });
82
+ }
83
+ return Promise.resolve({
84
+ file_path: filePath,
85
+ is_locked: false,
86
+ owner: null,
87
+ });
88
+ }
89
+ if (sessionId !== undefined) {
90
+ // List all locks held by this session
91
+ const sessionLocks = [];
92
+ for (const [key, data] of memoryStore.entries()) {
93
+ if (key.startsWith('lock:')) {
94
+ const lockData = data.value;
95
+ if (lockData.session_id === sessionId && lockData.expires_at > Date.now()) {
96
+ sessionLocks.push({
97
+ file_path: key.replace('lock:', ''),
98
+ expires_at: lockData.expires_at,
99
+ });
100
+ }
101
+ }
102
+ }
103
+ return Promise.resolve({
104
+ session_id: sessionId,
105
+ lock_count: sessionLocks.length,
106
+ locks: sessionLocks,
107
+ });
108
+ }
109
+ return Promise.resolve({ error: 'Must provide either session_id or file_path' });
110
+ }
111
+ //# sourceMappingURL=handlers.lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.lock.js","sourceRoot":"","sources":["../../src/handlers/handlers.lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * MCP Tool Handlers - Memory & Artifacts
3
+ * Handles: memory_store, memory_retrieve, artifact_save, artifact_get, artifact_list, context_optimize
4
+ */
5
+ export declare function handleMemoryStore(args: Record<string, unknown>): Promise<unknown>;
6
+ export declare function handleMemoryRetrieve(args: Record<string, unknown>): Promise<unknown>;
7
+ export declare function handleArtifactSave(args: Record<string, unknown>): Promise<unknown>;
8
+ export declare function handleArtifactGet(args: Record<string, unknown>): Promise<unknown>;
9
+ export declare function handleArtifactList(args: Record<string, unknown>): Promise<unknown>;
10
+ export declare function handleContextOptimize(args: Record<string, unknown>): Promise<unknown>;
11
+ //# sourceMappingURL=handlers.memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.memory.d.ts","sourceRoot":"","sources":["../../src/handlers/handlers.memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAIpF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BlF;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAIvF;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuCxF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAgCrF"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * MCP Tool Handlers - Memory & Artifacts
3
+ * Handles: memory_store, memory_retrieve, artifact_save, artifact_get, artifact_list, context_optimize
4
+ */
5
+ import { ContextOptimizer } from '@anastops/core';
6
+ import { nanoid } from 'nanoid';
7
+ import { getPersistence } from '../persistence.js';
8
+ import { safePersist, memoryStore, artifacts, getArtifact } from './handlers.base.js';
9
+ const contextOptimizer = new ContextOptimizer();
10
+ export function handleMemoryStore(args) {
11
+ const key = args['session_id'] !== undefined
12
+ ? `${String(args['session_id'])}:${String(args['key'])}`
13
+ : String(args['key']);
14
+ memoryStore.set(key, { value: args['value'], stored_at: new Date() });
15
+ return Promise.resolve({ key, stored: true });
16
+ }
17
+ export function handleMemoryRetrieve(args) {
18
+ const data = memoryStore.get(args['key']);
19
+ if (data === undefined)
20
+ return Promise.reject(new Error('Key not found'));
21
+ return Promise.resolve({ key: args['key'], data });
22
+ }
23
+ export function handleArtifactSave(args) {
24
+ const artifactId = nanoid(21);
25
+ const now = new Date();
26
+ const content = args['content'];
27
+ const artifact = {
28
+ id: artifactId,
29
+ session_id: args['session_id'],
30
+ task_id: null,
31
+ type: args['type'] ?? 'other',
32
+ name: args['name'],
33
+ extension: '',
34
+ content,
35
+ content_hash: '',
36
+ size_bytes: content.length,
37
+ summary: content.slice(0, 200),
38
+ token_count: Math.ceil(content.length / 4),
39
+ relevance_score: 50,
40
+ metadata: {},
41
+ created_at: now,
42
+ updated_at: now,
43
+ };
44
+ artifacts.set(artifactId, artifact);
45
+ // Persist to MongoDB
46
+ safePersist(getPersistence().saveArtifact(artifact));
47
+ return Promise.resolve({
48
+ artifact_id: artifact.id,
49
+ name: artifact.name,
50
+ size_bytes: artifact.size_bytes,
51
+ });
52
+ }
53
+ export async function handleArtifactGet(args) {
54
+ const artifact = await getArtifact(args['artifact_id']);
55
+ if (artifact === null)
56
+ throw new Error('Artifact not found');
57
+ return artifact;
58
+ }
59
+ export async function handleArtifactList(args) {
60
+ const sessionId = args['session_id'];
61
+ const typeFilter = args['type'];
62
+ // Get from in-memory cache first
63
+ const inMemoryArtifacts = [];
64
+ for (const [, artifact] of artifacts.entries()) {
65
+ if (artifact.session_id === sessionId) {
66
+ if (typeFilter === undefined || artifact.type === typeFilter) {
67
+ inMemoryArtifacts.push(artifact);
68
+ }
69
+ }
70
+ }
71
+ // Also get from MongoDB for persistence
72
+ const persistedArtifacts = await getPersistence().listArtifacts({
73
+ session_id: sessionId,
74
+ ...(typeFilter !== undefined && { type: typeFilter }),
75
+ });
76
+ // Merge: in-memory takes precedence
77
+ const inMemoryIds = new Set(inMemoryArtifacts.map((a) => a.id));
78
+ const sessionArtifacts = [
79
+ ...inMemoryArtifacts,
80
+ ...persistedArtifacts.filter((a) => !inMemoryIds.has(a.id)),
81
+ ];
82
+ return {
83
+ session_id: sessionId,
84
+ count: sessionArtifacts.length,
85
+ ...(typeFilter !== undefined && { type_filter: typeFilter }),
86
+ artifacts: sessionArtifacts.map((a) => ({
87
+ id: a.id,
88
+ name: a.name,
89
+ type: a.type,
90
+ size_bytes: a.size_bytes,
91
+ created_at: a.created_at,
92
+ })),
93
+ };
94
+ }
95
+ export function handleContextOptimize(args) {
96
+ const sessionArtifacts = [];
97
+ for (const [, artifact] of artifacts.entries()) {
98
+ if (artifact.session_id === args['session_id']) {
99
+ sessionArtifacts.push(artifact);
100
+ }
101
+ }
102
+ const result = contextOptimizer.optimize({
103
+ session_id: args['session_id'],
104
+ objective: args['objective'],
105
+ phase: args['phase'],
106
+ progress: args['progress'],
107
+ current_task: null,
108
+ artifacts: sessionArtifacts,
109
+ messages: args['messages'],
110
+ decisions: [],
111
+ completed_tasks: [],
112
+ active_work: [],
113
+ blockers: [],
114
+ });
115
+ return Promise.resolve({
116
+ original_tokens: result.original_tokens,
117
+ optimized_tokens: result.optimized_tokens,
118
+ reduction_percent: result.reduction_percent,
119
+ minimal_context: result.context,
120
+ });
121
+ }
122
+ //# sourceMappingURL=handlers.memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.memory.js","sourceRoot":"","sources":["../../src/handlers/handlers.memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAoC,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtF,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEhD,MAAM,UAAU,iBAAiB,CAAC,IAA6B;IAC7D,MAAM,GAAG,GACP,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS;QAC9B,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;QACxD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1B,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAA4B,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IACjG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAA6B;IAChE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAW,CAAC,CAAC;IACpD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAC1E,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAA6B;IAC9D,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAW,CAAC;IAC1C,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,UAAU;QACd,UAAU,EAAE,IAAI,CAAC,YAAY,CAAW;QACxC,OAAO,EAAE,IAAI;QACb,IAAI,EAAG,IAAI,CAAC,MAAM,CAAkB,IAAI,OAAO;QAC/C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAW;QAC5B,SAAS,EAAE,EAAE;QACb,OAAO;QACP,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,OAAO,CAAC,MAAM;QAC1B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QAC9B,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1C,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,GAAG;KAChB,CAAC;IACF,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACpC,qBAAqB;IACrB,WAAW,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,OAAO,CAAC;QACrB,WAAW,EAAE,QAAQ,CAAC,EAAE;QACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAA6B;IACnE,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,aAAa,CAAW,CAAC,CAAC;IAClE,IAAI,QAAQ,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAA6B;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAW,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAA6B,CAAC;IAE5D,iCAAiC;IACjC,MAAM,iBAAiB,GAAe,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC7D,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,kBAAkB,GAAG,MAAM,cAAc,EAAE,CAAC,aAAa,CAAC;QAC9D,UAAU,EAAE,SAAS;QACrB,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;KACtD,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,gBAAgB,GAAG;QACvB,GAAG,iBAAiB;QACpB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAC5D,CAAC;IAEF,OAAO;QACL,UAAU,EAAE,SAAS;QACrB,KAAK,EAAE,gBAAgB,CAAC,MAAM;QAC9B,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;QAC5D,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAA6B;IACjE,MAAM,gBAAgB,GAAe,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/C,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC;QACvC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAW;QACxC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAW;QACtC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAiE;QACpF,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAW;QACpC,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAIvB;QACF,SAAS,EAAE,EAAE;QACb,eAAe,EAAE,EAAE;QACnB,WAAW,EAAE,EAAE;QACf,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,OAAO,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,eAAe,EAAE,MAAM,CAAC,OAAO;KAChC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Tool Handlers - Cost & Monitoring
3
+ * Handles: session_cost, session_metrics, session_throttle
4
+ */
5
+ export declare function handleSessionCost(args: Record<string, unknown>): Promise<unknown>;
6
+ export declare function handleSessionMetrics(args: Record<string, unknown>): Promise<unknown>;
7
+ export declare function handleSessionThrottle(args: Record<string, unknown>): Promise<unknown>;
8
+ //# sourceMappingURL=handlers.monitoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.monitoring.d.ts","sourceRoot":"","sources":["../../src/handlers/handlers.monitoring.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBjF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BpF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwDrF"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * MCP Tool Handlers - Cost & Monitoring
3
+ * Handles: session_cost, session_metrics, session_throttle
4
+ */
5
+ import { tasks, memoryStore } from './handlers.base.js';
6
+ export function handleSessionCost(args) {
7
+ const sessionId = args['session_id'];
8
+ // Aggregate cost from task token_usage
9
+ let totalCost = 0;
10
+ for (const [, task] of tasks.entries()) {
11
+ if (task.session_id === sessionId && task.token_usage !== undefined) {
12
+ totalCost += task.token_usage.cost ?? 0;
13
+ }
14
+ }
15
+ return Promise.resolve({
16
+ session_id: sessionId,
17
+ total_cost_usd: totalCost,
18
+ currency: 'USD',
19
+ });
20
+ }
21
+ export function handleSessionMetrics(args) {
22
+ const sessionId = args['session_id'];
23
+ // Aggregate metrics from tasks
24
+ let requestCount = 0;
25
+ let inputTokens = 0;
26
+ let outputTokens = 0;
27
+ let totalTokens = 0;
28
+ for (const [, task] of tasks.entries()) {
29
+ if (task.session_id === sessionId) {
30
+ requestCount++;
31
+ if (task.token_usage !== undefined) {
32
+ inputTokens += task.token_usage.prompt_tokens ?? 0;
33
+ outputTokens += task.token_usage.completion_tokens ?? 0;
34
+ totalTokens += task.token_usage.total_tokens ?? 0;
35
+ }
36
+ }
37
+ }
38
+ return Promise.resolve({
39
+ session_id: sessionId,
40
+ request_count: requestCount,
41
+ token_usage: {
42
+ input: inputTokens,
43
+ output: outputTokens,
44
+ total: totalTokens,
45
+ },
46
+ });
47
+ }
48
+ export function handleSessionThrottle(args) {
49
+ const sessionId = args['session_id'];
50
+ const provider = args['provider'] ?? 'claude';
51
+ // In-memory rate limit tracking (Redis-based in production)
52
+ const rateKey = `rate:${sessionId}:${provider}`;
53
+ const rateData = memoryStore.get(rateKey);
54
+ // Default limits per provider (requests per minute)
55
+ const defaultLimit = 30;
56
+ const limits = {
57
+ claude: 50,
58
+ openai: 60,
59
+ gemini: 60,
60
+ };
61
+ const limit = limits[provider] ?? defaultLimit;
62
+ if (rateData !== undefined) {
63
+ const data = rateData.value;
64
+ const windowSize = 60000; // 1 minute
65
+ const now = Date.now();
66
+ if (now - data.window_start > windowSize) {
67
+ // Window expired, reset
68
+ return Promise.resolve({
69
+ session_id: sessionId,
70
+ provider,
71
+ usage_percent: 0,
72
+ current_count: 0,
73
+ limit,
74
+ throttled: false,
75
+ blocked: false,
76
+ });
77
+ }
78
+ const usagePercent = (data.count / limit) * 100;
79
+ return Promise.resolve({
80
+ session_id: sessionId,
81
+ provider,
82
+ usage_percent: Math.min(100, usagePercent),
83
+ current_count: data.count,
84
+ limit,
85
+ throttled: usagePercent >= 85,
86
+ blocked: usagePercent >= 95,
87
+ });
88
+ }
89
+ return Promise.resolve({
90
+ session_id: sessionId,
91
+ provider,
92
+ usage_percent: 0,
93
+ current_count: 0,
94
+ limit,
95
+ throttled: false,
96
+ blocked: false,
97
+ });
98
+ }
99
+ //# sourceMappingURL=handlers.monitoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.monitoring.js","sourceRoot":"","sources":["../../src/handlers/handlers.monitoring.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,iBAAiB,CAAC,IAA6B;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAW,CAAC;IAE/C,uCAAuC;IACvC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACpE,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC;QACrB,UAAU,EAAE,SAAS;QACrB,cAAc,EAAE,SAAS;QACzB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAA6B;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAW,CAAC;IAE/C,+BAA+B;IAC/B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,YAAY,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACnC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,IAAI,CAAC,CAAC;gBACnD,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,IAAI,CAAC,CAAC;gBACxD,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC;QACrB,UAAU,EAAE,SAAS;QACrB,aAAa,EAAE,YAAY;QAC3B,WAAW,EAAE;YACX,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,YAAY;YACpB,KAAK,EAAE,WAAW;SACnB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAA6B;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAW,CAAC;IAC/C,MAAM,QAAQ,GAAI,IAAI,CAAC,UAAU,CAAwB,IAAI,QAAQ,CAAC;IAEtE,4DAA4D;IAC5D,MAAM,OAAO,GAAG,QAAQ,SAAS,IAAI,QAAQ,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE1C,oDAAoD;IACpD,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,MAAM,MAAM,GAA2B;QACrC,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,EAAE;KACX,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC;IAE/C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAgD,CAAC;QACvE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,WAAW;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,GAAG,UAAU,EAAE,CAAC;YACzC,wBAAwB;YACxB,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,UAAU,EAAE,SAAS;gBACrB,QAAQ;gBACR,aAAa,EAAE,CAAC;gBAChB,aAAa,EAAE,CAAC;gBAChB,KAAK;gBACL,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QAED,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;QAChD,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,UAAU,EAAE,SAAS;YACrB,QAAQ;YACR,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC;YAC1C,aAAa,EAAE,IAAI,CAAC,KAAK;YACzB,KAAK;YACL,SAAS,EAAE,YAAY,IAAI,EAAE;YAC7B,OAAO,EAAE,YAAY,IAAI,EAAE;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC;QACrB,UAAU,EAAE,SAAS;QACrB,QAAQ;QACR,aAAa,EAAE,CAAC;QAChB,aAAa,EAAE,CAAC;QAChB,KAAK;QACL,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Tool Handlers - Orchestration
3
+ * Handles: dispatch, route, broadcast, aggregate
4
+ */
5
+ export declare function handleDispatch(args: Record<string, unknown>): Promise<unknown>;
6
+ export declare function handleRoute(args: Record<string, unknown>): Promise<unknown>;
7
+ export declare function handleBroadcast(args: Record<string, unknown>): Promise<unknown>;
8
+ export declare function handleAggregate(args: Record<string, unknown>): Promise<unknown>;
9
+ //# sourceMappingURL=handlers.orchestration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.orchestration.d.ts","sourceRoot":"","sources":["../../src/handlers/handlers.orchestration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAmFpF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA6B3E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/E"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * MCP Tool Handlers - Orchestration
3
+ * Handles: dispatch, route, broadcast, aggregate
4
+ */
5
+ import { AdapterRegistry } from '@anastops/adapters';
6
+ import { IntelligentRouter, ProviderFailoverService, } from '@anastops/core';
7
+ import { nanoid } from 'nanoid';
8
+ import { tasks } from './handlers.base.js';
9
+ const registry = AdapterRegistry.getInstance();
10
+ const router = new IntelligentRouter();
11
+ const failoverService = new ProviderFailoverService(router);
12
+ export async function handleDispatch(args) {
13
+ const taskId = nanoid(21);
14
+ const task = {
15
+ id: taskId,
16
+ session_id: args['session_id'],
17
+ agent_id: null,
18
+ type: args['type'] ?? 'other',
19
+ status: 'pending',
20
+ description: args['prompt'].slice(0, 200),
21
+ input: { prompt: args['prompt'] },
22
+ output: null,
23
+ error: null,
24
+ complexity_score: 0,
25
+ routing_tier: 3,
26
+ provider: 'claude',
27
+ model: 'claude-sonnet',
28
+ token_usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0, cost: 0 },
29
+ created_at: new Date(),
30
+ started_at: null,
31
+ completed_at: null,
32
+ dependencies: [],
33
+ priority: 5,
34
+ retry_count: 0,
35
+ max_retries: 3,
36
+ failover_history: [],
37
+ failover_enabled: args['disable_failover'] !== true,
38
+ };
39
+ const routingOverride = {};
40
+ if (args['force_provider'] !== undefined) {
41
+ routingOverride.force_provider = args['force_provider'];
42
+ }
43
+ if (args['force_tier'] !== undefined) {
44
+ routingOverride.force_tier = args['force_tier'];
45
+ }
46
+ const routing = router.route(task, routingOverride);
47
+ // Update task with routing decision
48
+ task.routing_tier = routing.tier;
49
+ task.provider = routing.provider;
50
+ task.model = routing.model;
51
+ task.complexity_score = routing.complexity_score;
52
+ // Use workspace root for dispatch calls
53
+ const workingDir = process.env['ANASTOPS_WORKSPACE'] ?? process.cwd();
54
+ const executeRequest = {
55
+ prompt: args['prompt'],
56
+ model: routing.model,
57
+ working_dir: workingDir,
58
+ };
59
+ // Execute with failover support
60
+ const failoverResult = await failoverService.executeWithFailover(task, executeRequest, registry, { workingDir });
61
+ const response = failoverResult.response;
62
+ const dispatchResult = {
63
+ task_id: taskId,
64
+ routing: {
65
+ tier: failoverResult.successful_tier,
66
+ provider: failoverResult.successful_provider,
67
+ model: routing.model,
68
+ original_tier: routing.tier,
69
+ original_provider: routing.provider,
70
+ },
71
+ response: { content: response.content, usage: response.usage },
72
+ failover: failoverResult.failover_used
73
+ ? {
74
+ used: true,
75
+ attempts: failoverResult.failover_attempts,
76
+ history: failoverResult.attempt_history,
77
+ }
78
+ : undefined,
79
+ };
80
+ // TOON encoding applied in handleToolCall
81
+ return dispatchResult;
82
+ }
83
+ export function handleRoute(args) {
84
+ const task = {
85
+ id: 'route-check',
86
+ session_id: 'route-check',
87
+ agent_id: null,
88
+ type: args['type'] ?? 'other',
89
+ status: 'pending',
90
+ description: args['description'],
91
+ input: { prompt: args['description'] },
92
+ output: null,
93
+ error: null,
94
+ complexity_score: 0,
95
+ routing_tier: 3,
96
+ provider: 'claude',
97
+ model: 'claude-sonnet',
98
+ token_usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0, cost: 0 },
99
+ created_at: new Date(),
100
+ started_at: null,
101
+ completed_at: null,
102
+ dependencies: [],
103
+ priority: 5,
104
+ retry_count: 0,
105
+ max_retries: 3,
106
+ failover_history: [],
107
+ failover_enabled: true,
108
+ };
109
+ const routing = router.route(task, {});
110
+ return Promise.resolve(routing);
111
+ }
112
+ export function handleBroadcast(args) {
113
+ return Promise.resolve({
114
+ session_id: args['session_id'],
115
+ message: args['message'],
116
+ message_type: args['message_type'] ?? 'info',
117
+ broadcast_at: new Date(),
118
+ });
119
+ }
120
+ export function handleAggregate(args) {
121
+ const taskIds = args['task_ids'];
122
+ const taskResults = taskIds.map((id) => tasks.get(id)).filter((t) => t !== undefined);
123
+ return Promise.resolve({
124
+ task_count: taskResults.length,
125
+ strategy: args['strategy'] ?? 'concat',
126
+ });
127
+ }
128
+ //# sourceMappingURL=handlers.orchestration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.orchestration.js","sourceRoot":"","sources":["../../src/handlers/handlers.orchestration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * MCP Tool Handlers - Session Management
3
+ * Handles: session_spawn, session_status, session_list, session_fork, session_archive, session_report, session_purge
4
+ */
5
+ import { SessionManager, SessionForkService } from '@anastops/core';
6
+ declare const sessionManager: SessionManager;
7
+ declare const forkService: SessionForkService;
8
+ export declare function handleSessionSpawn(args: Record<string, unknown>): Promise<unknown>;
9
+ export declare function handleSessionStatus(args: Record<string, unknown>): Promise<unknown>;
10
+ export declare function handleSessionList(args: Record<string, unknown>): Promise<unknown>;
11
+ export declare function handleSessionFork(args: Record<string, unknown>): Promise<unknown>;
12
+ export declare function handleSessionArchive(args: Record<string, unknown>): Promise<unknown>;
13
+ export declare function handleSessionReport(args: Record<string, unknown>): Promise<unknown>;
14
+ export declare function handleSessionPurge(args: Record<string, unknown>): Promise<unknown>;
15
+ export declare function handleSessionQueueConfig(args: Record<string, unknown>): Promise<unknown>;
16
+ export declare function handleQueueStatus(args: Record<string, unknown>): Promise<unknown>;
17
+ export { sessionManager, forkService };
18
+ //# sourceMappingURL=handlers.session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.session.d.ts","sourceRoot":"","sources":["../../src/handlers/handlers.session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,kBAAkB,EAGnB,MAAM,gBAAgB,CAAC;AAOxB,QAAA,MAAM,cAAc,gBAAuB,CAAC;AAC5C,QAAA,MAAM,WAAW,oBAAyC,CAAC;AAE3D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBlF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAInF;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAkCvF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBjF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAKpF;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BzF;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA4FxF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCxF;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwDvF;AAED,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC"}