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.
Files changed (159) hide show
  1. package/build/helpers.d.ts +43 -0
  2. package/build/helpers.d.ts.map +1 -1
  3. package/build/helpers.js +99 -8
  4. package/build/helpers.js.map +1 -1
  5. package/build/index.js +17 -3
  6. package/build/index.js.map +1 -1
  7. package/build/models.d.ts +27 -14
  8. package/build/models.d.ts.map +1 -1
  9. package/build/models.js +78 -39
  10. package/build/models.js.map +1 -1
  11. package/build/server/register-notifications.d.ts +5 -0
  12. package/build/server/register-notifications.d.ts.map +1 -1
  13. package/build/server/register-notifications.js +28 -3
  14. package/build/server/register-notifications.js.map +1 -1
  15. package/build/server/register-resources.d.ts.map +1 -1
  16. package/build/server/register-resources.js +9 -4
  17. package/build/server/register-resources.js.map +1 -1
  18. package/build/server/register-tasks.d.ts.map +1 -1
  19. package/build/server/register-tasks.js +13 -6
  20. package/build/server/register-tasks.js.map +1 -1
  21. package/build/server/register-tools.d.ts.map +1 -1
  22. package/build/server/register-tools.js +4 -3
  23. package/build/server/register-tools.js.map +1 -1
  24. package/build/services/model-discovery.d.ts +56 -0
  25. package/build/services/model-discovery.d.ts.map +1 -0
  26. package/build/services/model-discovery.js +259 -0
  27. package/build/services/model-discovery.js.map +1 -0
  28. package/build/services/opencode-client.d.ts +15 -1
  29. package/build/services/opencode-client.d.ts.map +1 -1
  30. package/build/services/opencode-client.js +229 -8
  31. package/build/services/opencode-client.js.map +1 -1
  32. package/build/services/opencode-spawner.d.ts +8 -2
  33. package/build/services/opencode-spawner.d.ts.map +1 -1
  34. package/build/services/opencode-spawner.js +331 -28
  35. package/build/services/opencode-spawner.js.map +1 -1
  36. package/build/services/output-file.d.ts +7 -5
  37. package/build/services/output-file.d.ts.map +1 -1
  38. package/build/services/output-file.js +28 -31
  39. package/build/services/output-file.js.map +1 -1
  40. package/build/services/task-manager.d.ts +6 -2
  41. package/build/services/task-manager.d.ts.map +1 -1
  42. package/build/services/task-manager.js +34 -5
  43. package/build/services/task-manager.js.map +1 -1
  44. package/build/services/task-persistence.d.ts +3 -3
  45. package/build/services/task-persistence.d.ts.map +1 -1
  46. package/build/services/task-persistence.js +15 -13
  47. package/build/services/task-persistence.js.map +1 -1
  48. package/build/services/template-home.d.ts +25 -0
  49. package/build/services/template-home.d.ts.map +1 -0
  50. package/build/services/template-home.js +105 -0
  51. package/build/services/template-home.js.map +1 -0
  52. package/build/templates/index.d.ts +1 -0
  53. package/build/templates/index.d.ts.map +1 -1
  54. package/build/templates/index.js +34 -7
  55. package/build/templates/index.js.map +1 -1
  56. package/build/templates/overlays/coder-csharp.mdx +6 -0
  57. package/build/templates/overlays/coder-go.mdx +6 -0
  58. package/build/templates/overlays/coder-java.mdx +6 -0
  59. package/build/templates/overlays/coder-kotlin.mdx +6 -0
  60. package/build/templates/overlays/coder-nextjs.mdx +6 -0
  61. package/build/templates/overlays/coder-python.mdx +6 -0
  62. package/build/templates/overlays/coder-react.mdx +6 -0
  63. package/build/templates/overlays/coder-ruby.mdx +6 -0
  64. package/build/templates/overlays/coder-rust.mdx +6 -0
  65. package/build/templates/overlays/coder-supabase.mdx +6 -0
  66. package/build/templates/overlays/coder-supastarter.mdx +6 -0
  67. package/build/templates/overlays/coder-swift.mdx +6 -0
  68. package/build/templates/overlays/coder-tauri.mdx +6 -0
  69. package/build/templates/overlays/coder-triggerdev.mdx +6 -0
  70. package/build/templates/overlays/coder-typescript.mdx +6 -0
  71. package/build/templates/overlays/coder-vue.mdx +6 -0
  72. package/build/templates/overlays/planner-architecture.mdx +6 -0
  73. package/build/templates/overlays/planner-bugfix.mdx +6 -0
  74. package/build/templates/overlays/planner-feature.mdx +6 -0
  75. package/build/templates/overlays/planner-migration.mdx +6 -0
  76. package/build/templates/overlays/planner-refactor.mdx +6 -0
  77. package/build/templates/overlays/researcher-library.mdx +6 -0
  78. package/build/templates/overlays/researcher-performance.mdx +6 -0
  79. package/build/templates/overlays/researcher-security.mdx +6 -0
  80. package/build/templates/overlays/tester-graphql.mdx +6 -0
  81. package/build/templates/overlays/tester-playwright.mdx +6 -0
  82. package/build/templates/overlays/tester-rest.mdx +6 -0
  83. package/build/templates/overlays/tester-suite.mdx +6 -0
  84. package/build/templates/super-coder.mdx +21 -0
  85. package/build/templates/super-planner.mdx +21 -0
  86. package/build/templates/super-researcher.mdx +21 -0
  87. package/build/templates/super-tester.mdx +21 -0
  88. package/build/tools/answer-question.d.ts.map +1 -1
  89. package/build/tools/answer-question.js +4 -3
  90. package/build/tools/answer-question.js.map +1 -1
  91. package/build/tools/cancel-task.d.ts.map +1 -1
  92. package/build/tools/cancel-task.js +6 -2
  93. package/build/tools/cancel-task.js.map +1 -1
  94. package/build/tools/send-message.d.ts.map +1 -1
  95. package/build/tools/send-message.js +13 -2
  96. package/build/tools/send-message.js.map +1 -1
  97. package/build/tools/shared-spawn.d.ts.map +1 -1
  98. package/build/tools/shared-spawn.js +19 -2
  99. package/build/tools/shared-spawn.js.map +1 -1
  100. package/build/tools/spawn-agent.d.ts +1 -1
  101. package/build/tools/spawn-agent.js +5 -5
  102. package/build/tools/spawn-agent.js.map +1 -1
  103. package/package.json +1 -1
  104. package/build/services/account-manager.d.ts +0 -88
  105. package/build/services/account-manager.d.ts.map +0 -1
  106. package/build/services/account-manager.js +0 -239
  107. package/build/services/account-manager.js.map +0 -1
  108. package/build/services/claude-code-runner.d.ts +0 -15
  109. package/build/services/claude-code-runner.d.ts.map +0 -1
  110. package/build/services/claude-code-runner.js +0 -475
  111. package/build/services/claude-code-runner.js.map +0 -1
  112. package/build/services/exhaustion-fallback.d.ts +0 -27
  113. package/build/services/exhaustion-fallback.d.ts.map +0 -1
  114. package/build/services/exhaustion-fallback.js +0 -30
  115. package/build/services/exhaustion-fallback.js.map +0 -1
  116. package/build/services/fallback-orchestrator.d.ts +0 -16
  117. package/build/services/fallback-orchestrator.d.ts.map +0 -1
  118. package/build/services/fallback-orchestrator.js +0 -48
  119. package/build/services/fallback-orchestrator.js.map +0 -1
  120. package/build/services/sdk-client-manager.d.ts +0 -149
  121. package/build/services/sdk-client-manager.d.ts.map +0 -1
  122. package/build/services/sdk-client-manager.js +0 -632
  123. package/build/services/sdk-client-manager.js.map +0 -1
  124. package/build/services/sdk-session-adapter.d.ts +0 -203
  125. package/build/services/sdk-session-adapter.d.ts.map +0 -1
  126. package/build/services/sdk-session-adapter.js +0 -1088
  127. package/build/services/sdk-session-adapter.js.map +0 -1
  128. package/build/services/sdk-spawner.d.ts +0 -42
  129. package/build/services/sdk-spawner.d.ts.map +0 -1
  130. package/build/services/sdk-spawner.js +0 -488
  131. package/build/services/sdk-spawner.js.map +0 -1
  132. package/build/services/session-hooks.d.ts +0 -24
  133. package/build/services/session-hooks.d.ts.map +0 -1
  134. package/build/services/session-hooks.js +0 -130
  135. package/build/services/session-hooks.js.map +0 -1
  136. package/build/services/session-snapshot.d.ts +0 -19
  137. package/build/services/session-snapshot.d.ts.map +0 -1
  138. package/build/services/session-snapshot.js +0 -203
  139. package/build/services/session-snapshot.js.map +0 -1
  140. package/build/tools/spawn-coder.d.ts +0 -70
  141. package/build/tools/spawn-coder.d.ts.map +0 -1
  142. package/build/tools/spawn-coder.js +0 -71
  143. package/build/tools/spawn-coder.js.map +0 -1
  144. package/build/tools/spawn-planner.d.ts +0 -70
  145. package/build/tools/spawn-planner.d.ts.map +0 -1
  146. package/build/tools/spawn-planner.js +0 -71
  147. package/build/tools/spawn-planner.js.map +0 -1
  148. package/build/tools/spawn-researcher.d.ts +0 -70
  149. package/build/tools/spawn-researcher.d.ts.map +0 -1
  150. package/build/tools/spawn-researcher.js +0 -70
  151. package/build/tools/spawn-researcher.js.map +0 -1
  152. package/build/tools/spawn-task.d.ts +0 -74
  153. package/build/tools/spawn-task.d.ts.map +0 -1
  154. package/build/tools/spawn-task.js +0 -107
  155. package/build/tools/spawn-task.js.map +0 -1
  156. package/build/tools/spawn-tester.d.ts +0 -70
  157. package/build/tools/spawn-tester.d.ts.map +0 -1
  158. package/build/tools/spawn-tester.js +0 -69
  159. package/build/tools/spawn-tester.js.map +0 -1
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAazD;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CA0B/D"}
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
- for (const key of ['state', 'status', 'type']) {
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;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACrD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,GAA8B,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;YAC9C,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ;gBAAE,OAAO,GAAG,CAAC,GAAG,CAAW,CAAC;QAC9D,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QAC3C,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,WAAW,CAAC;QAC1C,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;IACzC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAiB;IACrD,MAAM,CAAC,GAAG,QAAmC,CAAC;IAC9C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAA+B,CAAC;YAC1C,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,MAAM;oBACT,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,CAAW,CAAC,CAAC;oBACrD,MAAM;gBACR,KAAK,iBAAiB,CAAC;gBACvB,KAAK,aAAa;oBAChB,QAAQ,CAAC,IAAI,CACX,UAAU,CAAC,CAAC,QAAQ,IAAI,SAAS,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CACrH,CAAC;oBACF,MAAM;gBACR;oBACE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;wBACxB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAW,CAAC,CAAC;oBACjD,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
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
- console.error('Warning: OpenCode server not available at ' + OPENCODE_BASE_URL + ' tasks will fail until server starts');
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('Info: OpenCode server is healthy at ' + OPENCODE_BASE_URL);
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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
- export declare const MODELS: {
2
- readonly 'claude-sonnet-4.5': "Latest Sonnet - best balance of speed and capability (default)";
3
- readonly 'claude-opus-4.6': "Most capable - complex reasoning, large codebases";
4
- readonly 'claude-haiku-4.5': "Fastest - simple tasks, quick iterations";
5
- };
6
- export type ModelId = keyof typeof MODELS;
7
- export declare const DEFAULT_MODEL: ModelId;
8
- export declare const OPUS_MODEL: ModelId;
9
- export declare const MODEL_IDS: ModelId[];
10
- export declare const ALL_ACCEPTED_MODELS: string[];
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 always resolves to opus (no user override).
14
- * - 'opus' is an alias for 'claude-opus-4.6'.
15
- * - 'claude-opus-4.6' and 'opus' are ALWAYS allowed regardless of ENABLE_OPUS.
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): ModelId;
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
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;CAIT,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,MAAM,CAAC;AAC1C,eAAO,MAAM,aAAa,EAAE,OAA6B,CAAC;AAC1D,eAAO,MAAM,UAAU,EAAE,OAA2B,CAAC;AAOrD,eAAO,MAAM,SAAS,EAAE,OAAO,EAEc,CAAC;AAG9C,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAKvC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAW3E;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;AAQD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEvE"}
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
- export const MODELS = {
2
- 'claude-sonnet-4.5': 'Latest Sonnet - best balance of speed and capability (default)',
3
- 'claude-opus-4.6': 'Most capable - complex reasoning, large codebases',
4
- 'claude-haiku-4.5': 'Fastest - simple tasks, quick iterations',
5
- };
6
- export const DEFAULT_MODEL = 'claude-sonnet-4.5';
7
- export const OPUS_MODEL = 'claude-opus-4.6';
8
- // ENABLE_OPUS controls VISIBILITY in tool descriptions only.
9
- // Clients that know the word 'opus' or 'claude-opus-4.6' can always use it.
10
- const ENABLE_OPUS = process.env.ENABLE_OPUS === 'true';
11
- // MODEL_IDS exposed in tool schema enum opus hidden unless ENABLE_OPUS=true
12
- export const MODEL_IDS = ENABLE_OPUS
13
- ? ['claude-sonnet-4.5', 'claude-opus-4.6', 'claude-haiku-4.5']
14
- : ['claude-sonnet-4.5', 'claude-haiku-4.5'];
15
- // All accepted model values (always includes opus + alias) for backend validation
16
- export const ALL_ACCEPTED_MODELS = [
17
- 'claude-sonnet-4.5',
18
- 'claude-opus-4.6',
19
- 'claude-haiku-4.5',
20
- 'opus', // alias for claude-opus-4.6
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 always resolves to opus (no user override).
25
- * - 'opus' is an alias for 'claude-opus-4.6'.
26
- * - 'claude-opus-4.6' and 'opus' are ALWAYS allowed regardless of ENABLE_OPUS.
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 is always opus user cannot override
30
- if (taskType === 'super-planner')
31
- return OPUS_MODEL;
32
- if (!requested)
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
- // 'opus' alias and 'claude-opus-4.6' always bypass ENABLE_OPUS
35
- if (requested === 'opus' || requested === 'claude-opus-4.6')
36
- return OPUS_MODEL;
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
- return DEFAULT_MODEL;
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
- return MODEL_CONFIGS[modelId];
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
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,mBAAmB,EAAE,gEAAgE;IACrF,iBAAiB,EAAE,mDAAmD;IACtE,kBAAkB,EAAE,0CAA0C;CACtD,CAAC;AAGX,MAAM,CAAC,MAAM,aAAa,GAAY,mBAAmB,CAAC;AAC1D,MAAM,CAAC,MAAM,UAAU,GAAY,iBAAiB,CAAC;AAErD,6DAA6D;AAC7D,4EAA4E;AAC5E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;AAEvD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAc,WAAW;IAC7C,CAAC,CAAC,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC;IAC9D,CAAC,CAAC,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;AAE9C,kFAAkF;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAa;IAC3C,mBAAmB;IACnB,iBAAiB;IACjB,kBAAkB;IAClB,MAAM,EAAE,4BAA4B;CACrC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,SAAkB,EAAE,QAAiB;IAChE,sDAAsD;IACtD,IAAI,QAAQ,KAAK,eAAe;QAAE,OAAO,UAAU,CAAC;IAEpD,IAAI,CAAC,SAAS;QAAE,OAAO,aAAa,CAAC;IAErC,+DAA+D;IAC/D,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,iBAAiB;QAAE,OAAO,UAAU,CAAC;IAE/E,IAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAe,CAAC,QAAQ,CAAC,SAAoB,CAAC;QAAE,OAAO,SAAoB,CAAC;IACnG,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAkB;IAChD,OAAO,UAAU,CAAC;AACpB,CAAC;AASD,MAAM,aAAa,GAAgC;IACjD,mBAAmB,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,mBAAmB,EAAE;IACzI,iBAAiB,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACjI,kBAAkB,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE;CACtI,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC"}
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,CA8E/D"}
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
- resourceUpdateTimers.set(taskId, setTimeout(() => {
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(`[index] Failed to send question notification for task ${taskId}:`, err);
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":"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"}
1
+ {"version":3,"file":"register-notifications.js","sourceRoot":"","sources":["../../src/server/register-notifications.ts"],"names":[],"mappings":"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"}