@code-yeongyu/senpi 2026.7.30 → 2026.7.31

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 (204) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/README.md +3 -0
  3. package/dist/core/agent-session.d.ts +7 -0
  4. package/dist/core/agent-session.d.ts.map +1 -1
  5. package/dist/core/agent-session.js +31 -3
  6. package/dist/core/agent-session.js.map +1 -1
  7. package/dist/core/compaction/compaction.d.ts +1 -0
  8. package/dist/core/compaction/compaction.d.ts.map +1 -1
  9. package/dist/core/compaction/compaction.js +1 -0
  10. package/dist/core/compaction/compaction.js.map +1 -1
  11. package/dist/core/extensions/builtin/compaction/idle.d.ts +16 -0
  12. package/dist/core/extensions/builtin/compaction/idle.d.ts.map +1 -0
  13. package/dist/core/extensions/builtin/compaction/idle.js +21 -0
  14. package/dist/core/extensions/builtin/compaction/idle.js.map +1 -0
  15. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  16. package/dist/core/extensions/builtin/compaction/index.js +18 -1
  17. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  18. package/dist/core/extensions/builtin/compaction/log.d.ts +1 -1
  19. package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
  20. package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
  21. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +3 -0
  22. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
  23. package/dist/core/extensions/builtin/compaction/openai-remote.js +15 -4
  24. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  25. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  26. package/dist/core/extensions/builtin/compaction/speculative.js +18 -4
  27. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  28. package/dist/core/extensions/builtin/goal/continuation.d.ts +2 -0
  29. package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -1
  30. package/dist/core/extensions/builtin/goal/continuation.js +12 -0
  31. package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
  32. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  33. package/dist/core/extensions/builtin/goal/index.js +4 -1
  34. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  35. package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
  36. package/dist/core/extensions/builtin/goal/monitor-continuation.js +22 -18
  37. package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
  38. package/dist/core/extensions/builtin/gpt-apply-patch/apply.d.ts +1 -1
  39. package/dist/core/extensions/builtin/gpt-apply-patch/apply.d.ts.map +1 -1
  40. package/dist/core/extensions/builtin/gpt-apply-patch/apply.js +67 -66
  41. package/dist/core/extensions/builtin/gpt-apply-patch/apply.js.map +1 -1
  42. package/dist/core/extensions/builtin/gpt-apply-patch/recovery.d.ts +4 -0
  43. package/dist/core/extensions/builtin/gpt-apply-patch/recovery.d.ts.map +1 -0
  44. package/dist/core/extensions/builtin/gpt-apply-patch/recovery.js +35 -0
  45. package/dist/core/extensions/builtin/gpt-apply-patch/recovery.js.map +1 -0
  46. package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts.map +1 -1
  47. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js +0 -5
  48. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
  49. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts +2 -0
  50. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts.map +1 -1
  51. package/dist/core/extensions/builtin/gpt-apply-patch/types.js.map +1 -1
  52. package/dist/core/high-reasoning-warning.d.ts +10 -0
  53. package/dist/core/high-reasoning-warning.d.ts.map +1 -0
  54. package/dist/core/high-reasoning-warning.js +28 -0
  55. package/dist/core/high-reasoning-warning.js.map +1 -0
  56. package/dist/core/model-runtime.d.ts.map +1 -1
  57. package/dist/core/model-runtime.js +3 -11
  58. package/dist/core/model-runtime.js.map +1 -1
  59. package/dist/core/settings-manager.d.ts +2 -0
  60. package/dist/core/settings-manager.d.ts.map +1 -1
  61. package/dist/core/settings-manager.js +1 -0
  62. package/dist/core/settings-manager.js.map +1 -1
  63. package/dist/modes/interactive/interactive-mode.d.ts +8 -1
  64. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  65. package/dist/modes/interactive/interactive-mode.js +59 -13
  66. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  67. package/dist/modes/interactive/risky-main-model-warning.d.ts +5 -0
  68. package/dist/modes/interactive/risky-main-model-warning.d.ts.map +1 -0
  69. package/dist/modes/interactive/risky-main-model-warning.js +8 -0
  70. package/dist/modes/interactive/risky-main-model-warning.js.map +1 -0
  71. package/dist/modes/interactive/tips/catalog/subagent-tips.d.ts.map +1 -1
  72. package/dist/modes/interactive/tips/catalog/subagent-tips.js +30 -0
  73. package/dist/modes/interactive/tips/catalog/subagent-tips.js.map +1 -1
  74. package/dist/modes/rpc/rpc-types.d.ts +6 -0
  75. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  76. package/dist/modes/rpc/rpc-types.js.map +1 -1
  77. package/dist/utils/version-check.d.ts.map +1 -1
  78. package/dist/utils/version-check.js +22 -2
  79. package/dist/utils/version-check.js.map +1 -1
  80. package/docs/docs.json +4 -0
  81. package/docs/quickstart.md +3 -0
  82. package/docs/release-guide.md +636 -0
  83. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +24 -0
  84. package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
  85. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +2 -2
  86. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  87. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.d.ts +4 -0
  88. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.d.ts.map +1 -0
  89. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.js +106 -0
  90. package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.js.map +1 -0
  91. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.d.ts +1 -0
  92. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.d.ts.map +1 -1
  93. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.js +1 -0
  94. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.js.map +1 -1
  95. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  96. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -1
  97. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  98. package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -1
  99. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  100. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  101. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  102. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  103. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  104. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.d.ts +2 -1
  105. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.d.ts.map +1 -1
  106. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js +13 -0
  107. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js.map +1 -1
  108. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/recovery-stream.js +2 -2
  109. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/recovery-stream.js.map +1 -1
  110. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery-stream.d.ts +3 -0
  111. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery-stream.d.ts.map +1 -0
  112. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery-stream.js +29 -0
  113. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery-stream.js.map +1 -0
  114. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery.d.ts +3 -0
  115. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery.d.ts.map +1 -0
  116. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery.js +82 -0
  117. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery.js.map +1 -0
  118. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  119. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  120. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  121. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/index.d.ts.map +1 -1
  122. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/index.js +1 -12
  123. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/index.js.map +1 -1
  124. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/stdio.d.ts +7 -0
  125. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/stdio.d.ts.map +1 -1
  126. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/stdio.js +9 -3
  127. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/stdio.js.map +1 -1
  128. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/streamableHttp.d.ts.map +1 -1
  129. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/streamableHttp.js +5 -3
  130. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/streamableHttp.js.map +1 -1
  131. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/index.d.ts.map +1 -1
  132. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/index.js +1 -12
  133. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/index.js.map +1 -1
  134. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/sseKeepAlive.d.ts +5 -0
  135. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/sseKeepAlive.d.ts.map +1 -0
  136. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/sseKeepAlive.js +17 -0
  137. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/sseKeepAlive.js.map +1 -0
  138. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/stdio.d.ts +9 -1
  139. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/stdio.d.ts.map +1 -1
  140. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/stdio.js +10 -4
  141. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/stdio.js.map +1 -1
  142. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/webStandardStreamableHttp.d.ts +21 -0
  143. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/webStandardStreamableHttp.d.ts.map +1 -1
  144. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/webStandardStreamableHttp.js +239 -41
  145. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/webStandardStreamableHttp.js.map +1 -1
  146. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/zod-compat.d.ts.map +1 -1
  147. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/zod-compat.js +25 -6
  148. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/zod-compat.js.map +1 -1
  149. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/mediaType.d.ts +32 -0
  150. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/mediaType.d.ts.map +1 -0
  151. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/mediaType.js +64 -0
  152. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/mediaType.js.map +1 -0
  153. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/stdio.d.ts +5 -0
  154. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/stdio.d.ts.map +1 -1
  155. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/stdio.js +10 -1
  156. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/stdio.js.map +1 -1
  157. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.d.ts.map +1 -1
  158. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js +2 -13
  159. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js.map +1 -1
  160. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.d.ts +7 -0
  161. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.d.ts.map +1 -1
  162. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js +9 -3
  163. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js.map +1 -1
  164. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/streamableHttp.d.ts.map +1 -1
  165. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/streamableHttp.js +5 -3
  166. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/streamableHttp.js.map +1 -1
  167. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.d.ts.map +1 -1
  168. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +2 -13
  169. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js.map +1 -1
  170. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sseKeepAlive.d.ts +5 -0
  171. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sseKeepAlive.d.ts.map +1 -0
  172. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sseKeepAlive.js +13 -0
  173. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sseKeepAlive.js.map +1 -0
  174. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.d.ts +9 -1
  175. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.d.ts.map +1 -1
  176. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js +10 -4
  177. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js.map +1 -1
  178. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.d.ts +21 -0
  179. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.d.ts.map +1 -1
  180. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.js +239 -41
  181. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.js.map +1 -1
  182. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.d.ts.map +1 -1
  183. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js +25 -6
  184. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js.map +1 -1
  185. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/mediaType.d.ts +32 -0
  186. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/mediaType.d.ts.map +1 -0
  187. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/mediaType.js +57 -0
  188. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/mediaType.js.map +1 -0
  189. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.d.ts +5 -0
  190. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.d.ts.map +1 -1
  191. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js +9 -0
  192. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js.map +1 -1
  193. package/node_modules/@modelcontextprotocol/sdk/package.json +4 -3
  194. package/node_modules/brace-expansion/README.md +12 -0
  195. package/node_modules/brace-expansion/dist/commonjs/index.d.ts +2 -0
  196. package/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +1 -1
  197. package/node_modules/brace-expansion/dist/commonjs/index.js +138 -86
  198. package/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -1
  199. package/node_modules/brace-expansion/dist/esm/index.d.ts +2 -0
  200. package/node_modules/brace-expansion/dist/esm/index.d.ts.map +1 -1
  201. package/node_modules/brace-expansion/dist/esm/index.js +137 -85
  202. package/node_modules/brace-expansion/dist/esm/index.js.map +1 -1
  203. package/node_modules/brace-expansion/package.json +2 -2
  204. package/package.json +7 -7
@@ -119,6 +119,20 @@ export function normalizeObjectSchema(schema) {
119
119
  }
120
120
  return undefined;
121
121
  }
122
+ function getDotPath(path) {
123
+ if (path.length === 0) {
124
+ return 'object root';
125
+ }
126
+ return path.reduce((acc, seg, index) => {
127
+ if (index === 0) {
128
+ return String(seg);
129
+ }
130
+ if (typeof seg === 'number') {
131
+ return `${acc}[${seg}]`;
132
+ }
133
+ return `${acc}.${seg}`;
134
+ }, '');
135
+ }
122
136
  // --- Error message extraction ---
123
137
  /**
124
138
  * Safely extracts an error message from a parse result error.
@@ -126,16 +140,21 @@ export function normalizeObjectSchema(schema) {
126
140
  */
127
141
  export function getParseErrorMessage(error) {
128
142
  if (error && typeof error === 'object') {
143
+ // When present, prioritize zod issues and format as a message and path
144
+ if ('issues' in error && Array.isArray(error.issues) && error.issues.length > 0) {
145
+ return error.issues
146
+ .map((i) => {
147
+ if (!i.path?.length) {
148
+ return i.message;
149
+ }
150
+ return `${i.message} at ${getDotPath(i.path)}`;
151
+ })
152
+ .join('\n');
153
+ }
129
154
  // Try common error structures
130
155
  if ('message' in error && typeof error.message === 'string') {
131
156
  return error.message;
132
157
  }
133
- if ('issues' in error && Array.isArray(error.issues) && error.issues.length > 0) {
134
- const firstIssue = error.issues[0];
135
- if (firstIssue && typeof firstIssue === 'object' && 'message' in firstIssue) {
136
- return String(firstIssue.message);
137
- }
138
- }
139
158
  // Fallback: try to stringify the error
140
159
  try {
141
160
  return JSON.stringify(error);
@@ -1 +1 @@
1
- {"version":3,"file":"zod-compat.js","sourceRoot":"","sources":["../../../src/server/zod-compat.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,uDAAuD;AACvD,yDAAyD;AACzD,uDAAuD;AAKvD,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AA8CtC,4BAA4B;AAC5B,MAAM,UAAU,UAAU,CAAC,CAAY;IACnC,6DAA6D;IAC7D,MAAM,MAAM,GAAG,CAA6B,CAAC;IAC7C,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;AACzB,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,eAAe,CAAC,KAAwB;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB;IAExE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhD,IAAI,KAAK;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAoC,CAAC,CAAC;IACtE,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAsC,CAAC,CAAC;IAEtE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AACpE,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,SAAS,CACrB,MAAS,EACT,IAAa;IAEb,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,mCAAmC;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,MAAuF,CAAC;IACnG,CAAC;IACD,MAAM,QAAQ,GAAG,MAAuB,CAAC;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,MAAuF,CAAC;AACnG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,MAAS,EACT,IAAa;IAEb,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,wCAAwC;QACxC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzD,OAAO,MAAuF,CAAC;IACnG,CAAC;IACD,MAAM,QAAQ,GAAG,MAAuB,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACnD,OAAO,MAAuF,CAAC;AACnG,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,cAAc,CAAC,MAAmC;IAC9D,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,sEAAsE;IACtE,IAAI,QAAmF,CAAC;IAExF,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAkC,CAAC;QACpD,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC;IACzC,CAAC;SAAM,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAkC,CAAC;QACpD,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEhC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACjC,IAAI,CAAC;YACD,OAAO,QAAQ,EAAE,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,+BAA+B;AAC/B;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAiD;IACnF,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,8DAA8D;IAC9D,8EAA8E;IAC9E,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,qEAAqE;QACrE,0DAA0D;QAC1D,MAAM,IAAI,GAAG,MAAkC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAkC,CAAC;QAEhD,2EAA2E;QAC3E,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3B,0EAA0E;YAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrC,IACI,MAAM,CAAC,MAAM,GAAG,CAAC;gBACjB,MAAM,CAAC,KAAK,CACR,CAAC,CAAC,EAAE,CACA,OAAO,CAAC,KAAK,QAAQ;oBACrB,CAAC,KAAK,IAAI;oBACV,CAAE,CAA8B,CAAC,IAAI,KAAK,SAAS;wBAC9C,CAA8B,CAAC,IAAI,KAAK,SAAS;wBAClD,OAAQ,CAAyB,CAAC,KAAK,KAAK,UAAU,CAAC,CAClE,EACH,CAAC;gBACC,OAAO,eAAe,CAAC,MAA2B,CAAC,CAAC;YACxD,CAAC;QACL,CAAC;IACL,CAAC;IAED,8DAA8D;IAC9D,yCAAyC;IACzC,IAAI,UAAU,CAAC,MAAmB,CAAC,EAAE,CAAC;QAClC,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,MAAkC,CAAC;QACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;QAC/B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;YAC5D,OAAO,MAAyB,CAAC;QACrC,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,MAAkC,CAAC;QACpD,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,MAAyB,CAAC;QACrC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,mCAAmC;AACnC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IAC/C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,8BAA8B;QAC9B,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC1D,OAAO,KAAK,CAAC,OAAO,CAAC;QACzB,CAAC;QACD,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9E,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;gBAC1E,OAAO,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;QACL,CAAC;QACD,uCAAuC;QACvC,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,iCAAiC;AACjC;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IAClD,OAAQ,MAAmC,CAAC,WAAW,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAC9C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAkC,CAAC;QACpD,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,UAAU,CAAC;IACnD,CAAC;IACD,MAAM,QAAQ,GAAG,MAAkC,CAAC;IACpD,6BAA6B;IAC7B,IAAI,OAAQ,MAAyC,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC9E,OAAQ,MAAwC,CAAC,UAAU,EAAE,CAAC;IAClE,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,EAAE,QAAQ,KAAK,aAAa,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC7C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAkC,CAAC;QACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;QAC/B,IAAI,GAAG,EAAE,CAAC;YACN,4CAA4C;YAC5C,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC,KAAK,CAAC;YAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,MAAkC,CAAC;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC1B,IAAI,GAAG,EAAE,CAAC;QACN,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IACD,gEAAgE;IAChE,MAAM,WAAW,GAAI,MAA8B,CAAC,KAAK,CAAC;IAC1D,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAClD,OAAO,SAAS,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"zod-compat.js","sourceRoot":"","sources":["../../../src/server/zod-compat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Extracts the media type (the lowercased `type/subtype` pair, without
3
+ * parameters) from a raw `Content-Type` header value, or `undefined` when the
4
+ * header is missing or empty.
5
+ *
6
+ * Content-Type comparisons must use the parsed media type, never a substring
7
+ * search of the raw header: a value like `text/plain; a=application/json`
8
+ * contains the substring `application/json` but its media type is
9
+ * `text/plain`, and case variants or parameters make naive string comparison
10
+ * wrong in both directions.
11
+ *
12
+ * "Essence" is the WHATWG MIME Sniffing standard's term for the bare
13
+ * `type/subtype` pair (https://mimesniff.spec.whatwg.org/#mime-type-essence);
14
+ * the Fetch standard's request classification is defined against it
15
+ * (https://fetch.spec.whatwg.org/#cors-safelisted-request-header).
16
+ *
17
+ * Parsing is RFC 9110 (`content-type` package) first. When the parameter
18
+ * section is malformed (`application/json;`, `application/json; charset=`),
19
+ * browsers and most HTTP stacks still derive the media type from the segment
20
+ * before the first `;` — the fallback matches that widely-implemented
21
+ * behavior, so a header whose media type is unambiguous is not rejected for
22
+ * a sloppy parameter section.
23
+ */
24
+ export declare function mediaTypeEssence(header: string | null | undefined): string | undefined;
25
+ /**
26
+ * Whether a raw `Content-Type` header value denotes `application/json`.
27
+ * Parameters (for example `charset=utf-8`) are allowed and ignored; malformed
28
+ * parameter sections do not reject a header whose media type is unambiguously
29
+ * `application/json` (see `mediaTypeEssence` for the exact grammar).
30
+ */
31
+ export declare function isJsonContentType(header: string | null | undefined): boolean;
32
+ //# sourceMappingURL=mediaType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaType.d.ts","sourceRoot":"","sources":["../../../src/shared/mediaType.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAiBtF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAM5E"}
@@ -0,0 +1,57 @@
1
+ import contentType from 'content-type';
2
+ /**
3
+ * Extracts the media type (the lowercased `type/subtype` pair, without
4
+ * parameters) from a raw `Content-Type` header value, or `undefined` when the
5
+ * header is missing or empty.
6
+ *
7
+ * Content-Type comparisons must use the parsed media type, never a substring
8
+ * search of the raw header: a value like `text/plain; a=application/json`
9
+ * contains the substring `application/json` but its media type is
10
+ * `text/plain`, and case variants or parameters make naive string comparison
11
+ * wrong in both directions.
12
+ *
13
+ * "Essence" is the WHATWG MIME Sniffing standard's term for the bare
14
+ * `type/subtype` pair (https://mimesniff.spec.whatwg.org/#mime-type-essence);
15
+ * the Fetch standard's request classification is defined against it
16
+ * (https://fetch.spec.whatwg.org/#cors-safelisted-request-header).
17
+ *
18
+ * Parsing is RFC 9110 (`content-type` package) first. When the parameter
19
+ * section is malformed (`application/json;`, `application/json; charset=`),
20
+ * browsers and most HTTP stacks still derive the media type from the segment
21
+ * before the first `;` — the fallback matches that widely-implemented
22
+ * behavior, so a header whose media type is unambiguous is not rejected for
23
+ * a sloppy parameter section.
24
+ */
25
+ export function mediaTypeEssence(header) {
26
+ if (!header) {
27
+ return undefined;
28
+ }
29
+ try {
30
+ return contentType.parse(header).type;
31
+ }
32
+ catch {
33
+ const essence = (header.split(';', 1)[0] ?? '').trim().toLowerCase();
34
+ // A comma in the parameter tail of an unparseable value indicates
35
+ // joined duplicate headers — ambiguous, so no essence at all (keeps
36
+ // duplicate-header handling uniform whether or not the first copy
37
+ // carries parameters).
38
+ if (essence === '' || header.slice(essence.length).includes(',')) {
39
+ return undefined;
40
+ }
41
+ return essence;
42
+ }
43
+ }
44
+ /**
45
+ * Whether a raw `Content-Type` header value denotes `application/json`.
46
+ * Parameters (for example `charset=utf-8`) are allowed and ignored; malformed
47
+ * parameter sections do not reject a header whose media type is unambiguously
48
+ * `application/json` (see `mediaTypeEssence` for the exact grammar).
49
+ */
50
+ export function isJsonContentType(header) {
51
+ // Fast path: the exact literal is what SDK clients send on every POST.
52
+ if (header === 'application/json') {
53
+ return true;
54
+ }
55
+ return mediaTypeEssence(header) === 'application/json';
56
+ }
57
+ //# sourceMappingURL=mediaType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaType.js","sourceRoot":"","sources":["../../../src/shared/mediaType.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiC;IAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,CAAC;QACD,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrE,kEAAkE;QAClE,oEAAoE;QACpE,kEAAkE;QAClE,uBAAuB;QACvB,IAAI,OAAO,KAAK,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAiC;IAC/D,uEAAuE;IACvE,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,gBAAgB,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC;AAC3D,CAAC"}
@@ -1,9 +1,14 @@
1
1
  import { JSONRPCMessage } from '../types.js';
2
+ export declare const STDIO_DEFAULT_MAX_BUFFER_SIZE: number;
2
3
  /**
3
4
  * Buffers a continuous stdio stream into discrete JSON-RPC messages.
4
5
  */
5
6
  export declare class ReadBuffer {
6
7
  private _buffer?;
8
+ private _maxBufferSize;
9
+ constructor(options?: {
10
+ maxBufferSize?: number;
11
+ });
7
12
  append(chunk: Buffer): void;
8
13
  readMessage(): JSONRPCMessage | null;
9
14
  clear(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/shared/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAEnE;;GAEG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,OAAO,CAAC,CAAS;IAEzB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3B,WAAW,IAAI,cAAc,GAAG,IAAI;IAepC,KAAK,IAAI,IAAI;CAGhB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEhE"}
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/shared/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAEnE,eAAO,MAAM,6BAA6B,QAAmB,CAAC;AAE9D;;GAEG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;IAIhD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS3B,WAAW,IAAI,cAAc,GAAG,IAAI;IAepC,KAAK,IAAI,IAAI;CAGhB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEhE"}
@@ -1,9 +1,18 @@
1
1
  import { JSONRPCMessageSchema } from '../types.js';
2
+ export const STDIO_DEFAULT_MAX_BUFFER_SIZE = 10 * 1024 * 1024;
2
3
  /**
3
4
  * Buffers a continuous stdio stream into discrete JSON-RPC messages.
4
5
  */
5
6
  export class ReadBuffer {
7
+ constructor(options) {
8
+ this._maxBufferSize = options?.maxBufferSize ?? STDIO_DEFAULT_MAX_BUFFER_SIZE;
9
+ }
6
10
  append(chunk) {
11
+ const newSize = (this._buffer?.length ?? 0) + chunk.length;
12
+ if (newSize > this._maxBufferSize) {
13
+ this.clear();
14
+ throw new Error(`ReadBuffer exceeded maximum size of ${this._maxBufferSize} bytes`);
15
+ }
7
16
  this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;
8
17
  }
9
18
  readMessage() {
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/shared/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnE;;GAEG;AACH,MAAM,OAAO,UAAU;IAGnB,MAAM,CAAC,KAAa;QAChB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/E,CAAC;IAED,WAAW;QACP,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAChD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK;QACD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC7B,CAAC;CACJ;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC3C,OAAO,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACpD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/shared/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,UAAU;IAInB,YAAY,OAAoC;QAC5C,IAAI,CAAC,cAAc,GAAG,OAAO,EAAE,aAAa,IAAI,6BAA6B,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,KAAa;QAChB,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3D,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,CAAC,cAAc,QAAQ,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/E,CAAC;IAED,WAAW;QACP,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAChD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK;QACD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC7B,CAAC;CACJ;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC3C,OAAO,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACpD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;AAC1C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modelcontextprotocol/sdk",
3
- "version": "1.29.0",
3
+ "version": "1.30.0",
4
4
  "description": "Model Context Protocol implementation for TypeScript",
5
5
  "license": "MIT",
6
6
  "author": "Anthropic, PBC (https://anthropic.com)",
@@ -88,7 +88,8 @@
88
88
  "lint": "eslint src/ && prettier --check .",
89
89
  "lint:fix": "eslint src/ --fix && prettier --write .",
90
90
  "check": "npm run typecheck && npm run lint",
91
- "test": "vitest run",
91
+ "test": "vitest run --exclude \"test/e2e/**\"",
92
+ "test:e2e": "vitest run test/e2e",
92
93
  "test:watch": "vitest",
93
94
  "start": "npm run server",
94
95
  "server": "tsx watch --clear-screen=false scripts/cli.ts server",
@@ -100,7 +101,7 @@
100
101
  "test:conformance:client:all": "npx @modelcontextprotocol/conformance client --command 'npx tsx test/conformance/src/everythingClient.ts' --suite all --expected-failures test/conformance/conformance-baseline.yml"
101
102
  },
102
103
  "dependencies": {
103
- "@hono/node-server": "^1.19.9",
104
+ "@hono/node-server": "^1.19.9 || ^2.0.5",
104
105
  "ajv": "^8.17.1",
105
106
  "ajv-formats": "^3.0.1",
106
107
  "content-type": "^1.0.5",
@@ -64,6 +64,18 @@ const expansions = expand('{1..100}'.repeat(5), {
64
64
  // expansions.length will be 100, not 100^5
65
65
  ```
66
66
 
67
+ The `options` object can also provide a `maxLength` value to cap the
68
+ total number of characters across all expansions. This is limited to
69
+ `4_000_000` by default, to prevent memory exhaustion from inputs whose
70
+ result count stays under `max` while each result grows very long.
71
+
72
+ ```js
73
+ const expansions = expand('{a,b}'.repeat(1500), {
74
+ maxLength: 100,
75
+ })
76
+ // the combined length of expansions will not exceed 100 characters
77
+ ```
78
+
67
79
  Valid expansions are:
68
80
 
69
81
  ```js
@@ -1,6 +1,8 @@
1
1
  export declare const EXPANSION_MAX = 100000;
2
+ export declare const EXPANSION_MAX_LENGTH = 4000000;
2
3
  export type BraceExpansionOptions = {
3
4
  max?: number;
5
+ maxLength?: number;
4
6
  };
5
7
  export declare function expand(str: string, options?: BraceExpansionOptions): string[];
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,aAAa,SAAU,CAAA;AAwDpC,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,YAkBtE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,aAAa,SAAU,CAAA;AAYpC,eAAO,MAAM,oBAAoB,UAAY,CAAA;AAwD7C,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,YAkBtE"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EXPANSION_MAX = void 0;
3
+ exports.EXPANSION_MAX_LENGTH = exports.EXPANSION_MAX = void 0;
4
4
  exports.expand = expand;
5
5
  const balanced_match_1 = require("balanced-match");
6
6
  const escSlash = '\0SLASH' + Math.random() + '\0';
@@ -19,6 +19,17 @@ const closePattern = /\\}/g;
19
19
  const commaPattern = /\\,/g;
20
20
  const periodPattern = /\\\./g;
21
21
  exports.EXPANSION_MAX = 100_000;
22
+ // `EXPANSION_MAX` caps the *number* of expansions, but not their length. An
23
+ // input like `'{a,b}'.repeat(1500)` stays under that count - its output is
24
+ // truncated to 100k results - while making every result ~1500 characters
25
+ // long. The result set, and the intermediate arrays built while combining
26
+ // brace sets, then grow large enough to exhaust memory and crash the process
27
+ // (CVE-2026-14257). `EXPANSION_MAX_LENGTH` bounds the total number of
28
+ // characters the accumulator may hold at any point, so memory stays flat no
29
+ // matter how many brace groups are chained. The limit sits well above any
30
+ // realistic expansion (100k results hitting `EXPANSION_MAX` measure ~1M
31
+ // characters) so legitimate input is unaffected.
32
+ exports.EXPANSION_MAX_LENGTH = 4_000_000;
22
33
  function numeric(str) {
23
34
  return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);
24
35
  }
@@ -68,7 +79,7 @@ function expand(str, options = {}) {
68
79
  if (!str) {
69
80
  return [];
70
81
  }
71
- const { max = exports.EXPANSION_MAX } = options;
82
+ const { max = exports.EXPANSION_MAX, maxLength = exports.EXPANSION_MAX_LENGTH } = options;
72
83
  // I don't know why Bash 4.3 does this, but it does.
73
84
  // Anything starting with {} will have the first two bytes preserved
74
85
  // but *only* at the top level, so {},a}b will not expand to anything,
@@ -78,7 +89,7 @@ function expand(str, options = {}) {
78
89
  if (str.slice(0, 2) === '{}') {
79
90
  str = '\\{\\}' + str.slice(2);
80
91
  }
81
- return expand_(escapeBraces(str), max, true).map(unescapeBraces);
92
+ return expand_(escapeBraces(str), max, maxLength, true).map(unescapeBraces);
82
93
  }
83
94
  function embrace(str) {
84
95
  return '{' + str + '}';
@@ -92,25 +103,112 @@ function lte(i, y) {
92
103
  function gte(i, y) {
93
104
  return i >= y;
94
105
  }
95
- function expand_(str, max, isTop) {
96
- /** @type {string[]} */
97
- const expansions = [];
98
- // The `{a},b}` rewrite below restarts expansion on a rewritten string with
99
- // the same `max` and `isTop = true`. Loop instead of recursing so a long run
100
- // of non-expanding `{}` groups can't exhaust the call stack.
106
+ // Build `{ acc[a] + pre + values[v] }` for every combination, capping the
107
+ // number of results at `max` and the total number of characters at `maxLength`.
108
+ // This is the one place output grows, so bounding it here keeps the single
109
+ // accumulator - and therefore memory - flat regardless of how many brace groups
110
+ // are combined (CVE-2026-14257).
111
+ function combine(acc, pre, values, max, maxLength, dropEmpties) {
112
+ const out = [];
113
+ let length = 0;
114
+ for (let a = 0; a < acc.length; a++) {
115
+ for (let v = 0; v < values.length; v++) {
116
+ if (out.length >= max)
117
+ return out;
118
+ const expansion = acc[a] + pre + values[v];
119
+ // Bash drops empty results at the top level. Skip them before they count
120
+ // against `max`, so `max` bounds the number of *kept* results.
121
+ if (dropEmpties && !expansion)
122
+ continue;
123
+ if (length + expansion.length > maxLength)
124
+ return out;
125
+ out.push(expansion);
126
+ length += expansion.length;
127
+ }
128
+ }
129
+ return out;
130
+ }
131
+ // The expansion values of a single numeric (`1..5`) or alphabetic (`a..e..2`)
132
+ // sequence body.
133
+ function expandSequence(body, isAlphaSequence, max) {
134
+ const n = body.split(/\.\./);
135
+ const N = [];
136
+ // A sequence body always splits into two or three parts, but the compiler
137
+ // can't know that.
138
+ /* c8 ignore start */
139
+ if (n[0] === undefined || n[1] === undefined) {
140
+ return N;
141
+ }
142
+ /* c8 ignore stop */
143
+ const x = numeric(n[0]);
144
+ const y = numeric(n[1]);
145
+ const width = Math.max(n[0].length, n[1].length);
146
+ let incr = n.length === 3 && n[2] !== undefined ?
147
+ Math.max(Math.abs(numeric(n[2])), 1)
148
+ : 1;
149
+ let test = lte;
150
+ const reverse = y < x;
151
+ if (reverse) {
152
+ incr *= -1;
153
+ test = gte;
154
+ }
155
+ const pad = n.some(isPadded);
156
+ for (let i = x; test(i, y) && N.length < max; i += incr) {
157
+ let c;
158
+ if (isAlphaSequence) {
159
+ c = String.fromCharCode(i);
160
+ if (c === '\\') {
161
+ c = '';
162
+ }
163
+ }
164
+ else {
165
+ c = String(i);
166
+ if (pad) {
167
+ const need = width - c.length;
168
+ if (need > 0) {
169
+ const z = new Array(need + 1).join('0');
170
+ if (i < 0) {
171
+ c = '-' + z + c.slice(1);
172
+ }
173
+ else {
174
+ c = z + c;
175
+ }
176
+ }
177
+ }
178
+ }
179
+ N.push(c);
180
+ }
181
+ return N;
182
+ }
183
+ function expand_(str, max, maxLength, isTop) {
184
+ // Consume the string's top-level brace groups left to right, threading a
185
+ // running set of combined prefixes (`acc`). Expanding the tail iteratively -
186
+ // rather than recursing on `m.post` once per group - keeps the native stack
187
+ // depth constant, so deeply chained input (`'{a,b}'.repeat(3000)`) can no
188
+ // longer overflow the stack, and leaves a single accumulator whose size
189
+ // `maxLength` bounds directly (CVE-2026-14257).
190
+ let acc = [''];
191
+ // Bash drops empty results, but only when the *first* top-level group is a
192
+ // comma set - a sequence like `{a..\}` may legitimately yield ''. The drop
193
+ // is on the final strings, so it is applied to whichever `combine` produces
194
+ // them (the one with no brace set left in the tail).
195
+ let dropEmpties = false;
196
+ let firstGroup = true;
101
197
  for (;;) {
102
198
  const m = (0, balanced_match_1.balanced)('{', '}', str);
103
- if (!m)
104
- return [str];
199
+ // No brace set left: the rest of the string is literal.
200
+ if (!m) {
201
+ return combine(acc, str, [''], max, maxLength, dropEmpties);
202
+ }
105
203
  // no need to expand pre, since it is guaranteed to be free of brace-sets
106
204
  const pre = m.pre;
107
- if (/\$$/.test(m.pre)) {
108
- const post = m.post.length ? expand_(m.post, max, false) : [''];
109
- for (let k = 0; k < post.length && k < max; k++) {
110
- const expansion = pre + '{' + m.body + '}' + post[k];
111
- expansions.push(expansion);
112
- }
113
- return expansions;
205
+ if (/\$$/.test(pre)) {
206
+ acc = combine(acc, pre + '{' + m.body + '}', [''], max, maxLength, dropEmpties && !m.post.length);
207
+ firstGroup = false;
208
+ if (!m.post.length)
209
+ break;
210
+ str = m.post;
211
+ continue;
114
212
  }
115
213
  const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
116
214
  const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
@@ -123,89 +221,43 @@ function expand_(str, max, isTop) {
123
221
  isTop = true;
124
222
  continue;
125
223
  }
126
- return [str];
224
+ // Nothing here expands, so the whole remaining string is literal.
225
+ return combine(acc, pre + '{' + m.body + '}' + m.post, [''], max, maxLength, dropEmpties);
127
226
  }
128
- // Only expand post once we know this brace set actually expands. Computing
129
- // it before the early returns above expanded post a second time on every
130
- // non-expanding `{}`, which is what made inputs like `a{},{},{}...` blow up
131
- // exponentially.
132
- const post = m.post.length ? expand_(m.post, max, false) : [''];
133
- let n;
227
+ if (firstGroup) {
228
+ dropEmpties = isTop && !isSequence;
229
+ firstGroup = false;
230
+ }
231
+ let values;
134
232
  if (isSequence) {
135
- n = m.body.split(/\.\./);
233
+ values = expandSequence(m.body, isAlphaSequence, max);
136
234
  }
137
235
  else {
138
- n = parseCommaParts(m.body);
236
+ let n = parseCommaParts(m.body);
139
237
  if (n.length === 1 && n[0] !== undefined) {
140
238
  // x{{a,b}}y ==> x{a}y x{b}y
141
- n = expand_(n[0], max, false).map(embrace);
239
+ n = expand_(n[0], max, maxLength, false).map(embrace);
142
240
  //XXX is this necessary? Can't seem to hit it in tests.
143
241
  /* c8 ignore start */
144
242
  if (n.length === 1) {
145
- return post.map(p => m.pre + n[0] + p);
243
+ acc = combine(acc, pre + n[0], [''], max, maxLength, dropEmpties && !m.post.length);
244
+ if (!m.post.length)
245
+ break;
246
+ str = m.post;
247
+ continue;
146
248
  }
147
249
  /* c8 ignore stop */
148
250
  }
149
- }
150
- // at this point, n is the parts, and we know it's not a comma set
151
- // with a single entry.
152
- let N;
153
- if (isSequence && n[0] !== undefined && n[1] !== undefined) {
154
- const x = numeric(n[0]);
155
- const y = numeric(n[1]);
156
- const width = Math.max(n[0].length, n[1].length);
157
- let incr = n.length === 3 && n[2] !== undefined ?
158
- Math.max(Math.abs(numeric(n[2])), 1)
159
- : 1;
160
- let test = lte;
161
- const reverse = y < x;
162
- if (reverse) {
163
- incr *= -1;
164
- test = gte;
165
- }
166
- const pad = n.some(isPadded);
167
- N = [];
168
- for (let i = x; test(i, y) && N.length < max; i += incr) {
169
- let c;
170
- if (isAlphaSequence) {
171
- c = String.fromCharCode(i);
172
- if (c === '\\') {
173
- c = '';
174
- }
175
- }
176
- else {
177
- c = String(i);
178
- if (pad) {
179
- const need = width - c.length;
180
- if (need > 0) {
181
- const z = new Array(need + 1).join('0');
182
- if (i < 0) {
183
- c = '-' + z + c.slice(1);
184
- }
185
- else {
186
- c = z + c;
187
- }
188
- }
189
- }
190
- }
191
- N.push(c);
192
- }
193
- }
194
- else {
195
- N = [];
251
+ values = [];
196
252
  for (let j = 0; j < n.length; j++) {
197
- N.push.apply(N, expand_(n[j], max, false));
198
- }
199
- }
200
- for (let j = 0; j < N.length; j++) {
201
- for (let k = 0; k < post.length && expansions.length < max; k++) {
202
- const expansion = pre + N[j] + post[k];
203
- if (!isTop || isSequence || expansion) {
204
- expansions.push(expansion);
205
- }
253
+ values.push.apply(values, expand_(n[j], max, maxLength, false));
206
254
  }
207
255
  }
208
- return expansions;
256
+ acc = combine(acc, pre, values, max, maxLength, dropEmpties && !m.post.length);
257
+ if (!m.post.length)
258
+ break;
259
+ str = m.post;
209
260
  }
261
+ return acc;
210
262
  }
211
263
  //# sourceMappingURL=index.js.map