mcp-subagents-opencode 1.0.0 → 1.2.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.
- package/build/helpers.d.ts +43 -0
- package/build/helpers.d.ts.map +1 -1
- package/build/helpers.js +99 -8
- package/build/helpers.js.map +1 -1
- package/build/index.js +17 -3
- package/build/index.js.map +1 -1
- package/build/models.d.ts +27 -14
- package/build/models.d.ts.map +1 -1
- package/build/models.js +78 -39
- package/build/models.js.map +1 -1
- package/build/server/register-notifications.d.ts +5 -0
- package/build/server/register-notifications.d.ts.map +1 -1
- package/build/server/register-notifications.js +28 -3
- package/build/server/register-notifications.js.map +1 -1
- package/build/server/register-resources.d.ts.map +1 -1
- package/build/server/register-resources.js +9 -4
- package/build/server/register-resources.js.map +1 -1
- package/build/server/register-tasks.d.ts.map +1 -1
- package/build/server/register-tasks.js +13 -6
- package/build/server/register-tasks.js.map +1 -1
- package/build/server/register-tools.d.ts.map +1 -1
- package/build/server/register-tools.js +4 -3
- package/build/server/register-tools.js.map +1 -1
- package/build/services/model-discovery.d.ts +56 -0
- package/build/services/model-discovery.d.ts.map +1 -0
- package/build/services/model-discovery.js +259 -0
- package/build/services/model-discovery.js.map +1 -0
- package/build/services/opencode-client.d.ts +15 -1
- package/build/services/opencode-client.d.ts.map +1 -1
- package/build/services/opencode-client.js +229 -8
- package/build/services/opencode-client.js.map +1 -1
- package/build/services/opencode-spawner.d.ts +8 -2
- package/build/services/opencode-spawner.d.ts.map +1 -1
- package/build/services/opencode-spawner.js +331 -28
- package/build/services/opencode-spawner.js.map +1 -1
- package/build/services/output-file.d.ts +7 -5
- package/build/services/output-file.d.ts.map +1 -1
- package/build/services/output-file.js +28 -31
- package/build/services/output-file.js.map +1 -1
- package/build/services/task-manager.d.ts +6 -2
- package/build/services/task-manager.d.ts.map +1 -1
- package/build/services/task-manager.js +34 -5
- package/build/services/task-manager.js.map +1 -1
- package/build/services/task-persistence.d.ts +3 -3
- package/build/services/task-persistence.d.ts.map +1 -1
- package/build/services/task-persistence.js +15 -13
- package/build/services/task-persistence.js.map +1 -1
- package/build/services/template-home.d.ts +25 -0
- package/build/services/template-home.d.ts.map +1 -0
- package/build/services/template-home.js +105 -0
- package/build/services/template-home.js.map +1 -0
- package/build/templates/index.d.ts +1 -0
- package/build/templates/index.d.ts.map +1 -1
- package/build/templates/index.js +34 -7
- package/build/templates/index.js.map +1 -1
- package/build/templates/overlays/coder-csharp.mdx +6 -0
- package/build/templates/overlays/coder-go.mdx +6 -0
- package/build/templates/overlays/coder-java.mdx +6 -0
- package/build/templates/overlays/coder-kotlin.mdx +6 -0
- package/build/templates/overlays/coder-nextjs.mdx +6 -0
- package/build/templates/overlays/coder-python.mdx +6 -0
- package/build/templates/overlays/coder-react.mdx +6 -0
- package/build/templates/overlays/coder-ruby.mdx +6 -0
- package/build/templates/overlays/coder-rust.mdx +6 -0
- package/build/templates/overlays/coder-supabase.mdx +6 -0
- package/build/templates/overlays/coder-supastarter.mdx +6 -0
- package/build/templates/overlays/coder-swift.mdx +6 -0
- package/build/templates/overlays/coder-tauri.mdx +6 -0
- package/build/templates/overlays/coder-triggerdev.mdx +6 -0
- package/build/templates/overlays/coder-typescript.mdx +6 -0
- package/build/templates/overlays/coder-vue.mdx +6 -0
- package/build/templates/overlays/planner-architecture.mdx +6 -0
- package/build/templates/overlays/planner-bugfix.mdx +6 -0
- package/build/templates/overlays/planner-feature.mdx +6 -0
- package/build/templates/overlays/planner-migration.mdx +6 -0
- package/build/templates/overlays/planner-refactor.mdx +6 -0
- package/build/templates/overlays/researcher-library.mdx +6 -0
- package/build/templates/overlays/researcher-performance.mdx +6 -0
- package/build/templates/overlays/researcher-security.mdx +6 -0
- package/build/templates/overlays/tester-graphql.mdx +6 -0
- package/build/templates/overlays/tester-playwright.mdx +6 -0
- package/build/templates/overlays/tester-rest.mdx +6 -0
- package/build/templates/overlays/tester-suite.mdx +6 -0
- package/build/templates/super-coder.mdx +21 -0
- package/build/templates/super-planner.mdx +21 -0
- package/build/templates/super-researcher.mdx +21 -0
- package/build/templates/super-tester.mdx +21 -0
- package/build/tools/answer-question.d.ts.map +1 -1
- package/build/tools/answer-question.js +4 -3
- package/build/tools/answer-question.js.map +1 -1
- package/build/tools/cancel-task.d.ts.map +1 -1
- package/build/tools/cancel-task.js +6 -2
- package/build/tools/cancel-task.js.map +1 -1
- package/build/tools/send-message.d.ts.map +1 -1
- package/build/tools/send-message.js +13 -2
- package/build/tools/send-message.js.map +1 -1
- package/build/tools/shared-spawn.d.ts.map +1 -1
- package/build/tools/shared-spawn.js +19 -2
- package/build/tools/shared-spawn.js.map +1 -1
- package/build/tools/spawn-agent.d.ts +1 -1
- package/build/tools/spawn-agent.js +5 -5
- package/build/tools/spawn-agent.js.map +1 -1
- package/package.json +1 -1
- package/build/services/account-manager.d.ts +0 -88
- package/build/services/account-manager.d.ts.map +0 -1
- package/build/services/account-manager.js +0 -239
- package/build/services/account-manager.js.map +0 -1
- package/build/services/claude-code-runner.d.ts +0 -15
- package/build/services/claude-code-runner.d.ts.map +0 -1
- package/build/services/claude-code-runner.js +0 -475
- package/build/services/claude-code-runner.js.map +0 -1
- package/build/services/exhaustion-fallback.d.ts +0 -27
- package/build/services/exhaustion-fallback.d.ts.map +0 -1
- package/build/services/exhaustion-fallback.js +0 -30
- package/build/services/exhaustion-fallback.js.map +0 -1
- package/build/services/fallback-orchestrator.d.ts +0 -16
- package/build/services/fallback-orchestrator.d.ts.map +0 -1
- package/build/services/fallback-orchestrator.js +0 -48
- package/build/services/fallback-orchestrator.js.map +0 -1
- package/build/services/sdk-client-manager.d.ts +0 -149
- package/build/services/sdk-client-manager.d.ts.map +0 -1
- package/build/services/sdk-client-manager.js +0 -632
- package/build/services/sdk-client-manager.js.map +0 -1
- package/build/services/sdk-session-adapter.d.ts +0 -203
- package/build/services/sdk-session-adapter.d.ts.map +0 -1
- package/build/services/sdk-session-adapter.js +0 -1088
- package/build/services/sdk-session-adapter.js.map +0 -1
- package/build/services/sdk-spawner.d.ts +0 -42
- package/build/services/sdk-spawner.d.ts.map +0 -1
- package/build/services/sdk-spawner.js +0 -488
- package/build/services/sdk-spawner.js.map +0 -1
- package/build/services/session-hooks.d.ts +0 -24
- package/build/services/session-hooks.d.ts.map +0 -1
- package/build/services/session-hooks.js +0 -130
- package/build/services/session-hooks.js.map +0 -1
- package/build/services/session-snapshot.d.ts +0 -19
- package/build/services/session-snapshot.d.ts.map +0 -1
- package/build/services/session-snapshot.js +0 -203
- package/build/services/session-snapshot.js.map +0 -1
- package/build/tools/spawn-coder.d.ts +0 -70
- package/build/tools/spawn-coder.d.ts.map +0 -1
- package/build/tools/spawn-coder.js +0 -71
- package/build/tools/spawn-coder.js.map +0 -1
- package/build/tools/spawn-planner.d.ts +0 -70
- package/build/tools/spawn-planner.d.ts.map +0 -1
- package/build/tools/spawn-planner.js +0 -71
- package/build/tools/spawn-planner.js.map +0 -1
- package/build/tools/spawn-researcher.d.ts +0 -70
- package/build/tools/spawn-researcher.d.ts.map +0 -1
- package/build/tools/spawn-researcher.js +0 -70
- package/build/tools/spawn-researcher.js.map +0 -1
- package/build/tools/spawn-task.d.ts +0 -74
- package/build/tools/spawn-task.d.ts.map +0 -1
- package/build/tools/spawn-task.js +0 -107
- package/build/tools/spawn-task.js.map +0 -1
- package/build/tools/spawn-tester.d.ts +0 -70
- package/build/tools/spawn-tester.d.ts.map +0 -1
- package/build/tools/spawn-tester.js +0 -69
- package/build/tools/spawn-tester.js.map +0 -1
package/build/helpers.d.ts
CHANGED
|
@@ -1,6 +1,49 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Helpers for OpenCode API response processing.
|
|
3
|
+
*
|
|
4
|
+
* OpenCode session status is a discriminated union:
|
|
5
|
+
* { type: "idle" }
|
|
6
|
+
* { type: "busy" }
|
|
7
|
+
* { type: "retry", attempt: number, message: string, next: number }
|
|
8
|
+
*
|
|
9
|
+
* Message format from OpenCode:
|
|
10
|
+
* { info: { role, error, finish, tokens, ... }, parts: [ { type, text, ... } ] }
|
|
11
|
+
*/
|
|
12
|
+
export interface SessionStatusInfo {
|
|
13
|
+
/** Normalized status string: "idle", "busy", "retry", "error", etc. */
|
|
14
|
+
status: string;
|
|
15
|
+
/** For retry status: current retry attempt number. */
|
|
16
|
+
retryAttempt?: number;
|
|
17
|
+
/** For retry status: human-readable reason (e.g. "Too Many Requests"). */
|
|
18
|
+
retryMessage?: string;
|
|
19
|
+
/** For retry status: epoch ms when next retry occurs. */
|
|
20
|
+
retryNextAt?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolve the session status from OpenCode's `/session/status` response.
|
|
24
|
+
* Returns a normalized status string. For more detail, use resolveSessionStatusInfo().
|
|
3
25
|
*/
|
|
4
26
|
export declare function resolveSessionStatus(raw: unknown): string;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve full session status info including retry details.
|
|
29
|
+
*/
|
|
30
|
+
export declare function resolveSessionStatusInfo(raw: unknown): SessionStatusInfo;
|
|
31
|
+
/** Extract error info from an OpenCode assistant message. */
|
|
32
|
+
export interface MessageErrorInfo {
|
|
33
|
+
name: string;
|
|
34
|
+
message: string;
|
|
35
|
+
statusCode?: number;
|
|
36
|
+
isRetryable?: boolean;
|
|
37
|
+
retryAfterMs?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Extract error information from an OpenCode message response.
|
|
41
|
+
* OpenCode wraps messages as { info: { ..., error: { name, data } }, parts: [...] }
|
|
42
|
+
*/
|
|
43
|
+
export declare function extractMessageError(response: unknown): MessageErrorInfo | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Format a message response from OpenCode into readable text.
|
|
46
|
+
* Handles both { parts: [...] } and { info: {...}, parts: [...] } formats.
|
|
47
|
+
*/
|
|
5
48
|
export declare function formatMessageResponse(response: unknown): string;
|
|
6
49
|
//# sourceMappingURL=helpers.d.ts.map
|
package/build/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAgCxE;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS,CA2CnF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAmC/D"}
|
package/build/helpers.js
CHANGED
|
@@ -1,29 +1,120 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Helpers for OpenCode API response processing.
|
|
3
|
+
*
|
|
4
|
+
* OpenCode session status is a discriminated union:
|
|
5
|
+
* { type: "idle" }
|
|
6
|
+
* { type: "busy" }
|
|
7
|
+
* { type: "retry", attempt: number, message: string, next: number }
|
|
8
|
+
*
|
|
9
|
+
* Message format from OpenCode:
|
|
10
|
+
* { info: { role, error, finish, tokens, ... }, parts: [ { type, text, ... } ] }
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Resolve the session status from OpenCode's `/session/status` response.
|
|
14
|
+
* Returns a normalized status string. For more detail, use resolveSessionStatusInfo().
|
|
3
15
|
*/
|
|
4
16
|
export function resolveSessionStatus(raw) {
|
|
17
|
+
return resolveSessionStatusInfo(raw).status;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolve full session status info including retry details.
|
|
21
|
+
*/
|
|
22
|
+
export function resolveSessionStatusInfo(raw) {
|
|
5
23
|
if (raw === null || raw === undefined)
|
|
6
|
-
return 'idle';
|
|
24
|
+
return { status: 'idle' };
|
|
7
25
|
if (typeof raw === 'string')
|
|
8
|
-
return raw;
|
|
26
|
+
return { status: raw };
|
|
9
27
|
if (typeof raw === 'object') {
|
|
10
28
|
const obj = raw;
|
|
11
|
-
|
|
29
|
+
// OpenCode returns { type: "idle" | "busy" | "retry" }
|
|
30
|
+
if (typeof obj.type === 'string') {
|
|
31
|
+
if (obj.type === 'retry') {
|
|
32
|
+
return {
|
|
33
|
+
status: 'retry',
|
|
34
|
+
retryAttempt: typeof obj.attempt === 'number' ? obj.attempt : undefined,
|
|
35
|
+
retryMessage: typeof obj.message === 'string' ? obj.message : undefined,
|
|
36
|
+
retryNextAt: typeof obj.next === 'number' ? obj.next : undefined,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return { status: obj.type };
|
|
40
|
+
}
|
|
41
|
+
// Fallback: try other common field names
|
|
42
|
+
for (const key of ['state', 'status']) {
|
|
12
43
|
if (typeof obj[key] === 'string')
|
|
13
|
-
return obj[key];
|
|
44
|
+
return { status: obj[key] };
|
|
14
45
|
}
|
|
46
|
+
// Legacy boolean checks
|
|
15
47
|
if (obj.running === true)
|
|
16
|
-
return 'running';
|
|
48
|
+
return { status: 'running' };
|
|
17
49
|
if (obj.done === true)
|
|
18
|
-
return 'completed';
|
|
50
|
+
return { status: 'completed' };
|
|
19
51
|
if (obj.error === true)
|
|
20
|
-
return 'error';
|
|
52
|
+
return { status: 'error' };
|
|
21
53
|
}
|
|
22
|
-
return 'unknown';
|
|
54
|
+
return { status: 'unknown' };
|
|
23
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Extract error information from an OpenCode message response.
|
|
58
|
+
* OpenCode wraps messages as { info: { ..., error: { name, data } }, parts: [...] }
|
|
59
|
+
*/
|
|
60
|
+
export function extractMessageError(response) {
|
|
61
|
+
if (!response || typeof response !== 'object')
|
|
62
|
+
return undefined;
|
|
63
|
+
const r = response;
|
|
64
|
+
// OpenCode format: { info: { error: { name: "APIError", data: { ... } } } }
|
|
65
|
+
// Note: info.error can also be a boolean (true = error occurred) — only parse objects.
|
|
66
|
+
const info = r.info;
|
|
67
|
+
const rawError = info?.error ?? r.error;
|
|
68
|
+
if (!rawError || typeof rawError !== 'object')
|
|
69
|
+
return undefined;
|
|
70
|
+
const errorObj = rawError;
|
|
71
|
+
const name = errorObj.name || 'UnknownError';
|
|
72
|
+
const data = errorObj.data || {};
|
|
73
|
+
const result = {
|
|
74
|
+
name,
|
|
75
|
+
message: data.message || name,
|
|
76
|
+
};
|
|
77
|
+
if (typeof data.statusCode === 'number') {
|
|
78
|
+
result.statusCode = data.statusCode;
|
|
79
|
+
}
|
|
80
|
+
if (typeof data.isRetryable === 'boolean') {
|
|
81
|
+
result.isRetryable = data.isRetryable;
|
|
82
|
+
}
|
|
83
|
+
// Parse retry-after headers for rate limit backoff
|
|
84
|
+
const headers = data.responseHeaders;
|
|
85
|
+
if (headers) {
|
|
86
|
+
if (headers['retry-after-ms']) {
|
|
87
|
+
const ms = parseInt(headers['retry-after-ms'], 10);
|
|
88
|
+
if (Number.isFinite(ms)) {
|
|
89
|
+
result.retryAfterMs = ms;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else if (headers['retry-after']) {
|
|
93
|
+
const secs = parseInt(headers['retry-after'], 10);
|
|
94
|
+
if (Number.isFinite(secs)) {
|
|
95
|
+
result.retryAfterMs = secs * 1000;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Format a message response from OpenCode into readable text.
|
|
103
|
+
* Handles both { parts: [...] } and { info: {...}, parts: [...] } formats.
|
|
104
|
+
*/
|
|
24
105
|
export function formatMessageResponse(response) {
|
|
25
106
|
const r = response;
|
|
26
107
|
const sections = [];
|
|
108
|
+
// Check for error in info
|
|
109
|
+
const errorInfo = extractMessageError(response);
|
|
110
|
+
if (errorInfo) {
|
|
111
|
+
const errParts = [`Error (${errorInfo.name}): ${errorInfo.message}`];
|
|
112
|
+
if (errorInfo.statusCode)
|
|
113
|
+
errParts.push(`HTTP ${errorInfo.statusCode}`);
|
|
114
|
+
if (errorInfo.isRetryable)
|
|
115
|
+
errParts.push('(retryable)');
|
|
116
|
+
sections.push(errParts.join(' - '));
|
|
117
|
+
}
|
|
27
118
|
if (r?.parts && Array.isArray(r.parts)) {
|
|
28
119
|
for (const part of r.parts) {
|
|
29
120
|
const p = part;
|
package/build/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -8,12 +8,16 @@ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/
|
|
|
8
8
|
import { taskManager } from './services/task-manager.js';
|
|
9
9
|
import { clientContext } from './services/client-context.js';
|
|
10
10
|
import { initSpawner, checkOpenCodeAvailable, shutdownSpawner, getSpawnerStats } from './services/opencode-spawner.js';
|
|
11
|
+
import { discoverModels } from './services/model-discovery.js';
|
|
12
|
+
import { refreshModelExports } from './models.js';
|
|
11
13
|
import { OpenCodeClient } from './services/opencode-client.js';
|
|
12
14
|
import { registerToolHandlers } from './server/register-tools.js';
|
|
13
15
|
import { registerTaskHandlers } from './server/register-tasks.js';
|
|
14
16
|
import { registerResourceHandlers } from './server/register-resources.js';
|
|
15
|
-
import { registerNotificationWiring } from './server/register-notifications.js';
|
|
17
|
+
import { registerNotificationWiring, cleanupNotificationTimers } from './server/register-notifications.js';
|
|
16
18
|
import { registerRetryAndExecutionCallbacks } from './server/register-retry-execution.js';
|
|
19
|
+
import { ensureTemplateHome } from './templates/index.js';
|
|
20
|
+
import { questionRegistry } from './services/question-registry.js';
|
|
17
21
|
const require = createRequire(import.meta.url);
|
|
18
22
|
const { version: PKG_VERSION } = require('../package.json');
|
|
19
23
|
const server = new Server({ name: 'mcp-subagents-opencode', version: PKG_VERSION }, {
|
|
@@ -155,12 +159,20 @@ async function startHttpTransport(port) {
|
|
|
155
159
|
});
|
|
156
160
|
}
|
|
157
161
|
async function main() {
|
|
162
|
+
// Discover available models from OpenCode CLI before anything else
|
|
163
|
+
console.error('[index] Discovering available models via `opencode models`...');
|
|
164
|
+
await discoverModels();
|
|
165
|
+
refreshModelExports();
|
|
166
|
+
// Initialize editable templates in home directory
|
|
167
|
+
ensureTemplateHome();
|
|
158
168
|
const opencodeAvailable = await checkOpenCodeAvailable().catch(() => false);
|
|
159
169
|
if (!opencodeAvailable) {
|
|
160
|
-
|
|
170
|
+
const diagnosis = await client.diagnose().catch((err) => `Diagnosis unavailable: ${err instanceof Error ? err.message : String(err)}`);
|
|
171
|
+
console.error(`[WARN] OpenCode server not available: ${diagnosis}`);
|
|
172
|
+
console.error('[WARN] Tasks will fail until the server is running. Start it with: opencode serve');
|
|
161
173
|
}
|
|
162
174
|
else {
|
|
163
|
-
console.error(
|
|
175
|
+
console.error(`[index] OpenCode server is healthy at ${OPENCODE_BASE_URL}`);
|
|
164
176
|
}
|
|
165
177
|
const transportMode = (process.env.MCP_TRANSPORT || 'stdio').toLowerCase();
|
|
166
178
|
if (transportMode === 'stdio') {
|
|
@@ -173,6 +185,8 @@ async function main() {
|
|
|
173
185
|
isShuttingDown = true;
|
|
174
186
|
console.error(`Shutting down${signal ? ` (${signal})` : ''}...`);
|
|
175
187
|
try {
|
|
188
|
+
cleanupNotificationTimers();
|
|
189
|
+
questionRegistry.cleanup();
|
|
176
190
|
await taskManager.shutdown();
|
|
177
191
|
shutdownSpawner();
|
|
178
192
|
}
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACvH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/build/models.d.ts
CHANGED
|
@@ -1,20 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export declare const
|
|
9
|
-
|
|
10
|
-
export declare
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic model resolution powered by OpenCode model discovery.
|
|
3
|
+
*
|
|
4
|
+
* Models are discovered at startup via `opencode models --verbose`.
|
|
5
|
+
* The discovery populates MODEL_IDS and ALL_ACCEPTED_MODELS dynamically.
|
|
6
|
+
* Default model: github-copilot/claude-opus-4.6 for all agent types.
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFAULT_MODEL = "github-copilot/claude-opus-4.6";
|
|
9
|
+
/** Get the recommended "most capable" model for planning tasks. */
|
|
10
|
+
export declare function getPlannerModel(): string;
|
|
11
|
+
export declare const OPUS_MODEL = "github-copilot/claude-opus-4.6";
|
|
12
|
+
/** Model IDs exposed in tool schema enum. Computed after discovery. */
|
|
13
|
+
export declare function getModelIdsForSchema(): string[];
|
|
14
|
+
/**
|
|
15
|
+
* MODEL_IDS — Returns discovered model IDs + default.
|
|
16
|
+
*/
|
|
17
|
+
export declare const MODEL_IDS: string[];
|
|
18
|
+
/** All accepted model values for backend validation. Includes full IDs and short IDs. */
|
|
19
|
+
export declare function getAllAcceptedModels(): string[];
|
|
20
|
+
export declare let ALL_ACCEPTED_MODELS: string[];
|
|
21
|
+
/** Call after discovery to refresh static exports. */
|
|
22
|
+
export declare function refreshModelExports(): void;
|
|
11
23
|
/**
|
|
12
24
|
* Validate and sanitize model selection.
|
|
13
|
-
* - super-planner
|
|
14
|
-
* -
|
|
15
|
-
*
|
|
25
|
+
* - super-planner uses DEFAULT_MODEL (github-copilot/claude-opus-4.6).
|
|
26
|
+
* - Discovered models are validated. Unknown models are passed through
|
|
27
|
+
* (OpenCode server handles validation).
|
|
16
28
|
*/
|
|
17
|
-
export declare function resolveModel(requested?: string, taskType?: string):
|
|
29
|
+
export declare function resolveModel(requested?: string, taskType?: string): string;
|
|
18
30
|
/**
|
|
19
31
|
* Resolve provider. OpenCode manages providers internally.
|
|
20
32
|
*/
|
|
@@ -27,6 +39,7 @@ export interface ModelConfig {
|
|
|
27
39
|
}
|
|
28
40
|
/**
|
|
29
41
|
* Get OpenCode model config for a model ID.
|
|
42
|
+
* Dynamically generated from discovered models.
|
|
30
43
|
*/
|
|
31
44
|
export declare function getModelConfig(modelId: string): ModelConfig | undefined;
|
|
32
45
|
//# sourceMappingURL=models.d.ts.map
|
package/build/models.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,eAAO,MAAM,aAAa,mCAAmC,CAAC;AAE9D,mEAAmE;AACnE,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAGD,eAAO,MAAM,UAAU,mCAAgB,CAAC;AAIxC,uEAAuE;AACvE,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAI/C;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,EAAoB,CAAC;AAEnD,yFAAyF;AACzF,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAQ/C;AAGD,eAAO,IAAI,mBAAmB,EAAE,MAAM,EAA4B,CAAC;AAEnE,sDAAsD;AACtD,wBAAgB,mBAAmB,IAAI,IAAI,CAQ1C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAmB1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAUvE"}
|
package/build/models.js
CHANGED
|
@@ -1,42 +1,76 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
//
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
//
|
|
16
|
-
export const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
];
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic model resolution powered by OpenCode model discovery.
|
|
3
|
+
*
|
|
4
|
+
* Models are discovered at startup via `opencode models --verbose`.
|
|
5
|
+
* The discovery populates MODEL_IDS and ALL_ACCEPTED_MODELS dynamically.
|
|
6
|
+
* Default model: github-copilot/claude-opus-4.6 for all agent types.
|
|
7
|
+
*/
|
|
8
|
+
import { getDiscoveredModels, getModelIds, } from './services/model-discovery.js';
|
|
9
|
+
// --- Default model ---
|
|
10
|
+
export const DEFAULT_MODEL = 'github-copilot/claude-opus-4.6';
|
|
11
|
+
/** Get the recommended "most capable" model for planning tasks. */
|
|
12
|
+
export function getPlannerModel() {
|
|
13
|
+
return DEFAULT_MODEL;
|
|
14
|
+
}
|
|
15
|
+
// Legacy alias
|
|
16
|
+
export const OPUS_MODEL = DEFAULT_MODEL;
|
|
17
|
+
// --- Dynamic model lists (populated after discovery) ---
|
|
18
|
+
/** Model IDs exposed in tool schema enum. Computed after discovery. */
|
|
19
|
+
export function getModelIdsForSchema() {
|
|
20
|
+
const ids = getModelIds();
|
|
21
|
+
const result = [DEFAULT_MODEL, ...ids];
|
|
22
|
+
return [...new Set(result)];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* MODEL_IDS — Returns discovered model IDs + default.
|
|
26
|
+
*/
|
|
27
|
+
export const MODEL_IDS = [DEFAULT_MODEL];
|
|
28
|
+
/** All accepted model values for backend validation. Includes full IDs and short IDs. */
|
|
29
|
+
export function getAllAcceptedModels() {
|
|
30
|
+
const models = getDiscoveredModels();
|
|
31
|
+
const accepted = ['auto', DEFAULT_MODEL];
|
|
32
|
+
for (const m of models) {
|
|
33
|
+
accepted.push(m.fullId);
|
|
34
|
+
accepted.push(m.id);
|
|
35
|
+
}
|
|
36
|
+
return [...new Set(accepted)];
|
|
37
|
+
}
|
|
38
|
+
// Static reference for zod schema (updated after discovery)
|
|
39
|
+
export let ALL_ACCEPTED_MODELS = ['auto', DEFAULT_MODEL];
|
|
40
|
+
/** Call after discovery to refresh static exports. */
|
|
41
|
+
export function refreshModelExports() {
|
|
42
|
+
const ids = getModelIds();
|
|
43
|
+
MODEL_IDS.length = 0;
|
|
44
|
+
MODEL_IDS.push(DEFAULT_MODEL);
|
|
45
|
+
for (const id of ids) {
|
|
46
|
+
if (id !== DEFAULT_MODEL)
|
|
47
|
+
MODEL_IDS.push(id);
|
|
48
|
+
}
|
|
49
|
+
ALL_ACCEPTED_MODELS = getAllAcceptedModels();
|
|
50
|
+
}
|
|
22
51
|
/**
|
|
23
52
|
* Validate and sanitize model selection.
|
|
24
|
-
* - super-planner
|
|
25
|
-
* -
|
|
26
|
-
*
|
|
53
|
+
* - super-planner uses DEFAULT_MODEL (github-copilot/claude-opus-4.6).
|
|
54
|
+
* - Discovered models are validated. Unknown models are passed through
|
|
55
|
+
* (OpenCode server handles validation).
|
|
27
56
|
*/
|
|
28
57
|
export function resolveModel(requested, taskType) {
|
|
29
|
-
// super-planner
|
|
30
|
-
if (taskType === 'super-planner')
|
|
31
|
-
return
|
|
32
|
-
|
|
58
|
+
// super-planner uses the best available model
|
|
59
|
+
if (taskType === 'super-planner') {
|
|
60
|
+
return getPlannerModel();
|
|
61
|
+
}
|
|
62
|
+
if (!requested || requested === 'auto')
|
|
33
63
|
return DEFAULT_MODEL;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (Object.keys(MODELS).includes(requested))
|
|
64
|
+
const models = getDiscoveredModels();
|
|
65
|
+
// Exact match on fullId (e.g. "opencode/big-pickle")
|
|
66
|
+
if (models.some(m => m.fullId === requested))
|
|
38
67
|
return requested;
|
|
39
|
-
|
|
68
|
+
// Short ID match (e.g. "big-pickle")
|
|
69
|
+
const byShortId = models.find(m => m.id === requested);
|
|
70
|
+
if (byShortId)
|
|
71
|
+
return byShortId.fullId;
|
|
72
|
+
// Pass through unknown models — let OpenCode server validate
|
|
73
|
+
return requested;
|
|
40
74
|
}
|
|
41
75
|
/**
|
|
42
76
|
* Resolve provider. OpenCode manages providers internally.
|
|
@@ -44,15 +78,20 @@ export function resolveModel(requested, taskType) {
|
|
|
44
78
|
export function resolveProvider(_provider) {
|
|
45
79
|
return 'opencode';
|
|
46
80
|
}
|
|
47
|
-
const MODEL_CONFIGS = {
|
|
48
|
-
'claude-sonnet-4.5': { id: 'claude-sonnet-4.5', providerID: 'anthropic', modelID: 'claude-sonnet-4.5', displayName: 'Claude Sonnet 4.5' },
|
|
49
|
-
'claude-opus-4.6': { id: 'claude-opus-4.6', providerID: 'anthropic', modelID: 'claude-opus-4.6', displayName: 'Claude Opus 4.6' },
|
|
50
|
-
'claude-haiku-4.5': { id: 'claude-haiku-4.5', providerID: 'anthropic', modelID: 'claude-haiku-4.5', displayName: 'Claude Haiku 4.5' },
|
|
51
|
-
};
|
|
52
81
|
/**
|
|
53
82
|
* Get OpenCode model config for a model ID.
|
|
83
|
+
* Dynamically generated from discovered models.
|
|
54
84
|
*/
|
|
55
85
|
export function getModelConfig(modelId) {
|
|
56
|
-
|
|
86
|
+
const models = getDiscoveredModels();
|
|
87
|
+
const model = models.find(m => m.fullId === modelId || m.id === modelId);
|
|
88
|
+
if (!model)
|
|
89
|
+
return undefined;
|
|
90
|
+
return {
|
|
91
|
+
id: model.fullId,
|
|
92
|
+
providerID: model.providerID,
|
|
93
|
+
modelID: model.id,
|
|
94
|
+
displayName: model.name,
|
|
95
|
+
};
|
|
57
96
|
}
|
|
58
97
|
//# sourceMappingURL=models.js.map
|
package/build/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Clean up all pending resource update timers.
|
|
4
|
+
* Called during server shutdown to prevent orphaned timers.
|
|
5
|
+
*/
|
|
6
|
+
export declare function cleanupNotificationTimers(): void;
|
|
2
7
|
export declare function registerNotificationWiring(server: Server): void;
|
|
3
8
|
//# sourceMappingURL=register-notifications.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-notifications.d.ts","sourceRoot":"","sources":["../../src/server/register-notifications.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAcxE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"register-notifications.d.ts","sourceRoot":"","sources":["../../src/server/register-notifications.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAcxE;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAKhD;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA0F/D"}
|
|
@@ -8,14 +8,26 @@ const resourceUpdateTimers = new Map();
|
|
|
8
8
|
const logNotifyError = process.env.DEBUG_NOTIFICATIONS
|
|
9
9
|
? (e) => console.error('[notify]', e instanceof Error ? e.message : e)
|
|
10
10
|
: () => { };
|
|
11
|
+
/**
|
|
12
|
+
* Clean up all pending resource update timers.
|
|
13
|
+
* Called during server shutdown to prevent orphaned timers.
|
|
14
|
+
*/
|
|
15
|
+
export function cleanupNotificationTimers() {
|
|
16
|
+
for (const timer of resourceUpdateTimers.values()) {
|
|
17
|
+
clearTimeout(timer);
|
|
18
|
+
}
|
|
19
|
+
resourceUpdateTimers.clear();
|
|
20
|
+
}
|
|
11
21
|
export function registerNotificationWiring(server) {
|
|
12
22
|
taskManager.onOutput((taskId, line) => {
|
|
13
23
|
progressRegistry.sendProgress(taskId, line);
|
|
14
24
|
const uri = taskIdToUri(taskId);
|
|
25
|
+
// Atomic check-and-set: only create timer if one doesn't exist
|
|
15
26
|
if (!resourceUpdateTimers.has(taskId)) {
|
|
16
27
|
const needsUpdate = subscriptionRegistry.isSubscribed(uri) || subscriptionRegistry.isSubscribed('task:///all');
|
|
17
28
|
if (needsUpdate) {
|
|
18
|
-
|
|
29
|
+
// Set the key immediately to prevent race between check and timer creation
|
|
30
|
+
const timer = setTimeout(() => {
|
|
19
31
|
resourceUpdateTimers.delete(taskId);
|
|
20
32
|
if (subscriptionRegistry.isSubscribed(uri)) {
|
|
21
33
|
server.sendResourceUpdated({ uri }).catch(logNotifyError);
|
|
@@ -23,7 +35,8 @@ export function registerNotificationWiring(server) {
|
|
|
23
35
|
if (subscriptionRegistry.isSubscribed('task:///all')) {
|
|
24
36
|
server.sendResourceUpdated({ uri: 'task:///all' }).catch(logNotifyError);
|
|
25
37
|
}
|
|
26
|
-
}, 1000)
|
|
38
|
+
}, 1000);
|
|
39
|
+
resourceUpdateTimers.set(taskId, timer);
|
|
27
40
|
}
|
|
28
41
|
}
|
|
29
42
|
});
|
|
@@ -33,6 +46,12 @@ export function registerNotificationWiring(server) {
|
|
|
33
46
|
progressRegistry.sendProgress(task.id, `Status: ${previousStatus} → ${task.status}`);
|
|
34
47
|
if (TERMINAL_STATUSES.has(task.status)) {
|
|
35
48
|
progressRegistry.unregister(task.id);
|
|
49
|
+
// Clean up any pending resource update timer for this task
|
|
50
|
+
const pendingTimer = resourceUpdateTimers.get(task.id);
|
|
51
|
+
if (pendingTimer) {
|
|
52
|
+
clearTimeout(pendingTimer);
|
|
53
|
+
resourceUpdateTimers.delete(task.id);
|
|
54
|
+
}
|
|
36
55
|
}
|
|
37
56
|
const uri = taskIdToUri(task.id);
|
|
38
57
|
if (subscriptionRegistry.isSubscribed(uri)) {
|
|
@@ -50,6 +69,12 @@ export function registerNotificationWiring(server) {
|
|
|
50
69
|
});
|
|
51
70
|
taskManager.onTaskDeleted((taskId) => {
|
|
52
71
|
progressRegistry.unregister(taskId);
|
|
72
|
+
// Clean up resource update timer for deleted task
|
|
73
|
+
const pendingTimer = resourceUpdateTimers.get(taskId);
|
|
74
|
+
if (pendingTimer) {
|
|
75
|
+
clearTimeout(pendingTimer);
|
|
76
|
+
resourceUpdateTimers.delete(taskId);
|
|
77
|
+
}
|
|
53
78
|
subscriptionRegistry.unsubscribe(taskIdToUri(taskId));
|
|
54
79
|
server.sendResourceListChanged().catch(logNotifyError);
|
|
55
80
|
});
|
|
@@ -65,7 +90,7 @@ export function registerNotificationWiring(server) {
|
|
|
65
90
|
sessionId: question.sessionId,
|
|
66
91
|
},
|
|
67
92
|
}).catch((err) => {
|
|
68
|
-
console.error(`[
|
|
93
|
+
console.error(`[notify] Failed to send question notification for task ${taskId}:`, err instanceof Error ? err.message : err);
|
|
69
94
|
});
|
|
70
95
|
progressRegistry.sendProgress(taskId, `⏸️ QUESTION: ${question.question}`);
|
|
71
96
|
const uri = taskIdToUri(taskId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-notifications.js","sourceRoot":"","sources":["../../src/server/register-notifications.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAA0B,CAAC;AAE/D,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB;IACpD,CAAC,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;AAEb,MAAM,UAAU,0BAA0B,CAAC,MAAc;IACvD,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACpC,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE5C,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,WAAW,GAAG,oBAAoB,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,oBAAoB,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;YAC/G,IAAI,WAAW,EAAE,CAAC;gBAChB,
|
|
1
|
+
{"version":3,"file":"register-notifications.js","sourceRoot":"","sources":["../../src/server/register-notifications.ts"],"names":[],"mappings":"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"}
|