sfcc-dev-mcp 1.0.21 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/CHANGELOG.md +73 -4
  2. package/README.md +101 -31
  3. package/dist/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +1 -0
  4. package/dist/clients/agent-instructions-client.d.ts +3 -0
  5. package/dist/clients/agent-instructions-client.d.ts.map +1 -1
  6. package/dist/clients/agent-instructions-client.js +42 -10
  7. package/dist/clients/agent-instructions-client.js.map +1 -1
  8. package/dist/clients/base/abstract-documentation-client.d.ts +4 -0
  9. package/dist/clients/base/abstract-documentation-client.d.ts.map +1 -1
  10. package/dist/clients/base/abstract-documentation-client.js +9 -1
  11. package/dist/clients/base/abstract-documentation-client.js.map +1 -1
  12. package/dist/clients/base/http-client.d.ts +10 -3
  13. package/dist/clients/base/http-client.d.ts.map +1 -1
  14. package/dist/clients/base/http-client.js +94 -16
  15. package/dist/clients/base/http-client.js.map +1 -1
  16. package/dist/clients/base/oauth-token.d.ts +3 -0
  17. package/dist/clients/base/oauth-token.d.ts.map +1 -1
  18. package/dist/clients/base/oauth-token.js +23 -3
  19. package/dist/clients/base/oauth-token.js.map +1 -1
  20. package/dist/clients/base/ocapi-auth-client.d.ts.map +1 -1
  21. package/dist/clients/base/ocapi-auth-client.js +22 -2
  22. package/dist/clients/base/ocapi-auth-client.js.map +1 -1
  23. package/dist/clients/docs/class-name-resolver.d.ts +7 -4
  24. package/dist/clients/docs/class-name-resolver.d.ts.map +1 -1
  25. package/dist/clients/docs/class-name-resolver.js.map +1 -1
  26. package/dist/clients/docs/documentation-scanner.d.ts +2 -0
  27. package/dist/clients/docs/documentation-scanner.d.ts.map +1 -1
  28. package/dist/clients/docs/documentation-scanner.js +39 -17
  29. package/dist/clients/docs/documentation-scanner.js.map +1 -1
  30. package/dist/clients/docs-client.d.ts +4 -3
  31. package/dist/clients/docs-client.d.ts.map +1 -1
  32. package/dist/clients/docs-client.js.map +1 -1
  33. package/dist/clients/logs/log-client.d.ts +1 -0
  34. package/dist/clients/logs/log-client.d.ts.map +1 -1
  35. package/dist/clients/logs/log-client.js +13 -21
  36. package/dist/clients/logs/log-client.js.map +1 -1
  37. package/dist/clients/logs/log-file-discovery.d.ts +1 -0
  38. package/dist/clients/logs/log-file-discovery.d.ts.map +1 -1
  39. package/dist/clients/logs/log-file-discovery.js +19 -6
  40. package/dist/clients/logs/log-file-discovery.js.map +1 -1
  41. package/dist/clients/logs/log-file-reader.d.ts +2 -0
  42. package/dist/clients/logs/log-file-reader.d.ts.map +1 -1
  43. package/dist/clients/logs/log-file-reader.js +31 -8
  44. package/dist/clients/logs/log-file-reader.js.map +1 -1
  45. package/dist/clients/logs/log-formatter.d.ts +2 -2
  46. package/dist/clients/logs/log-formatter.d.ts.map +1 -1
  47. package/dist/clients/logs/log-formatter.js.map +1 -1
  48. package/dist/clients/logs/log-types.d.ts +4 -0
  49. package/dist/clients/logs/log-types.d.ts.map +1 -1
  50. package/dist/clients/logs/webdav-client-manager.d.ts.map +1 -1
  51. package/dist/clients/logs/webdav-client-manager.js.map +1 -1
  52. package/dist/clients/ocapi/code-versions-client.d.ts +23 -4
  53. package/dist/clients/ocapi/code-versions-client.d.ts.map +1 -1
  54. package/dist/clients/ocapi/code-versions-client.js +2 -2
  55. package/dist/clients/ocapi/code-versions-client.js.map +1 -1
  56. package/dist/clients/ocapi/site-preferences-client.d.ts +2 -42
  57. package/dist/clients/ocapi/site-preferences-client.d.ts.map +1 -1
  58. package/dist/clients/ocapi/site-preferences-client.js.map +1 -1
  59. package/dist/clients/ocapi/system-objects-client.d.ts +7 -39
  60. package/dist/clients/ocapi/system-objects-client.d.ts.map +1 -1
  61. package/dist/clients/ocapi/system-objects-client.js.map +1 -1
  62. package/dist/clients/script-debugger/script-debugger-client.d.ts +30 -1
  63. package/dist/clients/script-debugger/script-debugger-client.d.ts.map +1 -1
  64. package/dist/clients/script-debugger/script-debugger-client.js +266 -132
  65. package/dist/clients/script-debugger/script-debugger-client.js.map +1 -1
  66. package/dist/clients/sfra-client.d.ts.map +1 -1
  67. package/dist/clients/sfra-client.js.map +1 -1
  68. package/dist/config/cli-options.d.ts +16 -0
  69. package/dist/config/cli-options.d.ts.map +1 -0
  70. package/dist/config/cli-options.js +56 -0
  71. package/dist/config/cli-options.js.map +1 -0
  72. package/dist/config/configuration-factory.d.ts +2 -0
  73. package/dist/config/configuration-factory.d.ts.map +1 -1
  74. package/dist/config/configuration-factory.js +30 -6
  75. package/dist/config/configuration-factory.js.map +1 -1
  76. package/dist/config/credential-validation.d.ts +25 -0
  77. package/dist/config/credential-validation.d.ts.map +1 -0
  78. package/dist/config/credential-validation.js +42 -0
  79. package/dist/config/credential-validation.js.map +1 -0
  80. package/dist/config/dw-json-loader.d.ts.map +1 -1
  81. package/dist/config/dw-json-loader.js +25 -68
  82. package/dist/config/dw-json-loader.js.map +1 -1
  83. package/dist/config/path-security-policy.d.ts +6 -0
  84. package/dist/config/path-security-policy.d.ts.map +1 -0
  85. package/dist/config/path-security-policy.js +63 -0
  86. package/dist/config/path-security-policy.js.map +1 -0
  87. package/dist/config/workspace-roots.d.ts +1 -0
  88. package/dist/config/workspace-roots.d.ts.map +1 -1
  89. package/dist/config/workspace-roots.js +26 -77
  90. package/dist/config/workspace-roots.js.map +1 -1
  91. package/dist/core/handlers/abstract-client-handler.d.ts +23 -2
  92. package/dist/core/handlers/abstract-client-handler.d.ts.map +1 -1
  93. package/dist/core/handlers/abstract-client-handler.js +33 -3
  94. package/dist/core/handlers/abstract-client-handler.js.map +1 -1
  95. package/dist/core/handlers/agent-instructions-handler.d.ts +1 -1
  96. package/dist/core/handlers/agent-instructions-handler.d.ts.map +1 -1
  97. package/dist/core/handlers/agent-instructions-handler.js +2 -2
  98. package/dist/core/handlers/agent-instructions-handler.js.map +1 -1
  99. package/dist/core/handlers/base-handler.d.ts +14 -11
  100. package/dist/core/handlers/base-handler.d.ts.map +1 -1
  101. package/dist/core/handlers/base-handler.js +38 -22
  102. package/dist/core/handlers/base-handler.js.map +1 -1
  103. package/dist/core/handlers/cartridge-handler.d.ts +3 -8
  104. package/dist/core/handlers/cartridge-handler.d.ts.map +1 -1
  105. package/dist/core/handlers/cartridge-handler.js +10 -18
  106. package/dist/core/handlers/cartridge-handler.js.map +1 -1
  107. package/dist/core/handlers/code-version-handler.d.ts +3 -9
  108. package/dist/core/handlers/code-version-handler.d.ts.map +1 -1
  109. package/dist/core/handlers/code-version-handler.js +10 -21
  110. package/dist/core/handlers/code-version-handler.js.map +1 -1
  111. package/dist/core/handlers/job-log-handler.d.ts +3 -9
  112. package/dist/core/handlers/job-log-handler.d.ts.map +1 -1
  113. package/dist/core/handlers/job-log-handler.js +10 -21
  114. package/dist/core/handlers/job-log-handler.js.map +1 -1
  115. package/dist/core/handlers/lifecycle-utils.d.ts +5 -0
  116. package/dist/core/handlers/lifecycle-utils.d.ts.map +1 -0
  117. package/dist/core/handlers/lifecycle-utils.js +18 -0
  118. package/dist/core/handlers/lifecycle-utils.js.map +1 -0
  119. package/dist/core/handlers/log-handler.d.ts +3 -9
  120. package/dist/core/handlers/log-handler.d.ts.map +1 -1
  121. package/dist/core/handlers/log-handler.js +10 -21
  122. package/dist/core/handlers/log-handler.js.map +1 -1
  123. package/dist/core/handlers/script-debugger-handler.d.ts +3 -9
  124. package/dist/core/handlers/script-debugger-handler.d.ts.map +1 -1
  125. package/dist/core/handlers/script-debugger-handler.js +10 -21
  126. package/dist/core/handlers/script-debugger-handler.js.map +1 -1
  127. package/dist/core/handlers/simple-client-handler.d.ts +3 -3
  128. package/dist/core/handlers/simple-client-handler.d.ts.map +1 -1
  129. package/dist/core/handlers/simple-client-handler.js +5 -3
  130. package/dist/core/handlers/simple-client-handler.js.map +1 -1
  131. package/dist/core/handlers/system-object-handler.d.ts +3 -9
  132. package/dist/core/handlers/system-object-handler.d.ts.map +1 -1
  133. package/dist/core/handlers/system-object-handler.js +10 -21
  134. package/dist/core/handlers/system-object-handler.js.map +1 -1
  135. package/dist/core/handlers/validation-helpers.d.ts +5 -26
  136. package/dist/core/handlers/validation-helpers.d.ts.map +1 -1
  137. package/dist/core/handlers/validation-helpers.js +79 -81
  138. package/dist/core/handlers/validation-helpers.js.map +1 -1
  139. package/dist/core/instruction-advisor.d.ts +3 -0
  140. package/dist/core/instruction-advisor.d.ts.map +1 -1
  141. package/dist/core/instruction-advisor.js +25 -2
  142. package/dist/core/instruction-advisor.js.map +1 -1
  143. package/dist/core/server-tool-call-lifecycle.d.ts +38 -0
  144. package/dist/core/server-tool-call-lifecycle.d.ts.map +1 -0
  145. package/dist/core/server-tool-call-lifecycle.js +128 -0
  146. package/dist/core/server-tool-call-lifecycle.js.map +1 -0
  147. package/dist/core/server-tool-catalog.d.ts +19 -0
  148. package/dist/core/server-tool-catalog.d.ts.map +1 -0
  149. package/dist/core/server-tool-catalog.js +52 -0
  150. package/dist/core/server-tool-catalog.js.map +1 -0
  151. package/dist/core/server-workspace-discovery.d.ts +38 -0
  152. package/dist/core/server-workspace-discovery.d.ts.map +1 -0
  153. package/dist/core/server-workspace-discovery.js +68 -0
  154. package/dist/core/server-workspace-discovery.js.map +1 -0
  155. package/dist/core/server.d.ts +27 -3
  156. package/dist/core/server.d.ts.map +1 -1
  157. package/dist/core/server.js +247 -165
  158. package/dist/core/server.js.map +1 -1
  159. package/dist/core/tool-argument-validator.d.ts +24 -0
  160. package/dist/core/tool-argument-validator.d.ts.map +1 -0
  161. package/dist/core/tool-argument-validator.js +186 -0
  162. package/dist/core/tool-argument-validator.js.map +1 -0
  163. package/dist/core/tool-error-response.d.ts +21 -0
  164. package/dist/core/tool-error-response.d.ts.map +1 -0
  165. package/dist/core/tool-error-response.js +64 -0
  166. package/dist/core/tool-error-response.js.map +1 -0
  167. package/dist/core/tool-schemas/agent-instruction-tools.d.ts +4 -0
  168. package/dist/core/tool-schemas/agent-instruction-tools.d.ts.map +1 -1
  169. package/dist/core/tool-schemas/agent-instruction-tools.js +6 -2
  170. package/dist/core/tool-schemas/agent-instruction-tools.js.map +1 -1
  171. package/dist/core/tool-schemas/cartridge-tools.d.ts +3 -0
  172. package/dist/core/tool-schemas/cartridge-tools.d.ts.map +1 -1
  173. package/dist/core/tool-schemas/cartridge-tools.js +3 -0
  174. package/dist/core/tool-schemas/cartridge-tools.js.map +1 -1
  175. package/dist/core/tool-schemas/code-version-tools.d.ts +1 -0
  176. package/dist/core/tool-schemas/code-version-tools.d.ts.map +1 -1
  177. package/dist/core/tool-schemas/code-version-tools.js +1 -0
  178. package/dist/core/tool-schemas/code-version-tools.js.map +1 -1
  179. package/dist/core/tool-schemas/documentation-tools.d.ts +6 -0
  180. package/dist/core/tool-schemas/documentation-tools.d.ts.map +1 -1
  181. package/dist/core/tool-schemas/documentation-tools.js +6 -0
  182. package/dist/core/tool-schemas/documentation-tools.js.map +1 -1
  183. package/dist/core/tool-schemas/isml-tools.d.ts +3 -0
  184. package/dist/core/tool-schemas/isml-tools.d.ts.map +1 -1
  185. package/dist/core/tool-schemas/isml-tools.js +4 -1
  186. package/dist/core/tool-schemas/isml-tools.js.map +1 -1
  187. package/dist/core/tool-schemas/log-tools.d.ts +28 -0
  188. package/dist/core/tool-schemas/log-tools.d.ts.map +1 -1
  189. package/dist/core/tool-schemas/log-tools.js +21 -7
  190. package/dist/core/tool-schemas/log-tools.js.map +1 -1
  191. package/dist/core/tool-schemas/script-debugger-tools.d.ts +12 -0
  192. package/dist/core/tool-schemas/script-debugger-tools.d.ts.map +1 -1
  193. package/dist/core/tool-schemas/script-debugger-tools.js +19 -2
  194. package/dist/core/tool-schemas/script-debugger-tools.js.map +1 -1
  195. package/dist/core/tool-schemas/sfra-tools.d.ts +3 -0
  196. package/dist/core/tool-schemas/sfra-tools.d.ts.map +1 -1
  197. package/dist/core/tool-schemas/sfra-tools.js +3 -0
  198. package/dist/core/tool-schemas/sfra-tools.js.map +1 -1
  199. package/dist/core/tool-schemas/shared-schemas.d.ts +72 -4
  200. package/dist/core/tool-schemas/shared-schemas.d.ts.map +1 -1
  201. package/dist/core/tool-schemas/shared-schemas.js +29 -3
  202. package/dist/core/tool-schemas/shared-schemas.js.map +1 -1
  203. package/dist/core/tool-schemas/system-object-tools.d.ts +93 -4
  204. package/dist/core/tool-schemas/system-object-tools.d.ts.map +1 -1
  205. package/dist/core/tool-schemas/system-object-tools.js +13 -6
  206. package/dist/core/tool-schemas/system-object-tools.js.map +1 -1
  207. package/dist/docs/dw_extensions.payments/SalesforcePaymentsMgr.md +52 -0
  208. package/dist/docs/dw_system/Request.md +4 -0
  209. package/dist/docs/dw_web/Cookie.md +54 -15
  210. package/dist/docs/isml/isprint.md +1 -1
  211. package/dist/docs/isml/isredirect.md +1 -1
  212. package/dist/docs/isml/isremove.md +1 -1
  213. package/dist/docs/isml/isreplace.md +1 -1
  214. package/dist/docs/isml/isscript.md +1 -1
  215. package/dist/main.js +18 -33
  216. package/dist/main.js.map +1 -1
  217. package/dist/tool-configs/agent-instructions-tool-config.d.ts +1 -1
  218. package/dist/tool-configs/agent-instructions-tool-config.d.ts.map +1 -1
  219. package/dist/tool-configs/agent-instructions-tool-config.js +0 -33
  220. package/dist/tool-configs/agent-instructions-tool-config.js.map +1 -1
  221. package/dist/tool-configs/cartridge-tool-config.d.ts +1 -1
  222. package/dist/tool-configs/cartridge-tool-config.d.ts.map +1 -1
  223. package/dist/tool-configs/cartridge-tool-config.js +3 -5
  224. package/dist/tool-configs/cartridge-tool-config.js.map +1 -1
  225. package/dist/tool-configs/code-version-tool-config.d.ts +1 -1
  226. package/dist/tool-configs/code-version-tool-config.d.ts.map +1 -1
  227. package/dist/tool-configs/code-version-tool-config.js +0 -4
  228. package/dist/tool-configs/code-version-tool-config.js.map +1 -1
  229. package/dist/tool-configs/docs-tool-config.d.ts +1 -1
  230. package/dist/tool-configs/docs-tool-config.d.ts.map +1 -1
  231. package/dist/tool-configs/docs-tool-config.js +0 -13
  232. package/dist/tool-configs/docs-tool-config.js.map +1 -1
  233. package/dist/tool-configs/isml-tool-config.d.ts +1 -1
  234. package/dist/tool-configs/isml-tool-config.d.ts.map +1 -1
  235. package/dist/tool-configs/isml-tool-config.js +0 -10
  236. package/dist/tool-configs/isml-tool-config.js.map +1 -1
  237. package/dist/tool-configs/job-log-tool-config.d.ts +1 -1
  238. package/dist/tool-configs/job-log-tool-config.d.ts.map +1 -1
  239. package/dist/tool-configs/job-log-tool-config.js +1 -21
  240. package/dist/tool-configs/job-log-tool-config.js.map +1 -1
  241. package/dist/tool-configs/log-tool-config.d.ts +1 -1
  242. package/dist/tool-configs/log-tool-config.d.ts.map +1 -1
  243. package/dist/tool-configs/log-tool-config.js +6 -16
  244. package/dist/tool-configs/log-tool-config.js.map +1 -1
  245. package/dist/tool-configs/script-debugger-tool-config.d.ts +1 -1
  246. package/dist/tool-configs/script-debugger-tool-config.d.ts.map +1 -1
  247. package/dist/tool-configs/script-debugger-tool-config.js +1 -8
  248. package/dist/tool-configs/script-debugger-tool-config.js.map +1 -1
  249. package/dist/tool-configs/sfra-tool-config.d.ts +1 -1
  250. package/dist/tool-configs/sfra-tool-config.d.ts.map +1 -1
  251. package/dist/tool-configs/sfra-tool-config.js +0 -10
  252. package/dist/tool-configs/sfra-tool-config.js.map +1 -1
  253. package/dist/tool-configs/system-object-tool-config.d.ts +1 -1
  254. package/dist/tool-configs/system-object-tool-config.d.ts.map +1 -1
  255. package/dist/tool-configs/system-object-tool-config.js +14 -24
  256. package/dist/tool-configs/system-object-tool-config.js.map +1 -1
  257. package/dist/types/ocapi-search.d.ts +50 -0
  258. package/dist/types/ocapi-search.d.ts.map +1 -0
  259. package/dist/types/ocapi-search.js +7 -0
  260. package/dist/types/ocapi-search.js.map +1 -0
  261. package/dist/types/types.d.ts +13 -5
  262. package/dist/types/types.d.ts.map +1 -1
  263. package/dist/utils/abort-utils.d.ts +18 -0
  264. package/dist/utils/abort-utils.d.ts.map +1 -0
  265. package/dist/utils/abort-utils.js +66 -0
  266. package/dist/utils/abort-utils.js.map +1 -0
  267. package/dist/utils/cache.d.ts +7 -7
  268. package/dist/utils/cache.d.ts.map +1 -1
  269. package/dist/utils/cache.js +1 -0
  270. package/dist/utils/cache.js.map +1 -1
  271. package/dist/utils/category-utils.d.ts +0 -10
  272. package/dist/utils/category-utils.d.ts.map +1 -1
  273. package/dist/utils/category-utils.js +0 -12
  274. package/dist/utils/category-utils.js.map +1 -1
  275. package/dist/utils/log-tool-constants.d.ts +3 -4
  276. package/dist/utils/log-tool-constants.d.ts.map +1 -1
  277. package/dist/utils/log-tool-constants.js +2 -13
  278. package/dist/utils/log-tool-constants.js.map +1 -1
  279. package/dist/utils/logger.d.ts +20 -7
  280. package/dist/utils/logger.d.ts.map +1 -1
  281. package/dist/utils/logger.js +72 -11
  282. package/dist/utils/logger.js.map +1 -1
  283. package/dist/utils/query-builder.d.ts +2 -5
  284. package/dist/utils/query-builder.d.ts.map +1 -1
  285. package/dist/utils/query-builder.js +1 -4
  286. package/dist/utils/query-builder.js.map +1 -1
  287. package/dist/utils/validator.d.ts +5 -3
  288. package/dist/utils/validator.d.ts.map +1 -1
  289. package/dist/utils/validator.js +20 -14
  290. package/dist/utils/validator.js.map +1 -1
  291. package/package.json +23 -11
  292. package/dist/clients/docs/index.d.ts +0 -10
  293. package/dist/clients/docs/index.d.ts.map +0 -1
  294. package/dist/clients/docs/index.js +0 -10
  295. package/dist/clients/docs/index.js.map +0 -1
  296. package/dist/constants/index.d.ts +0 -1
  297. package/dist/constants/index.d.ts.map +0 -1
  298. package/dist/constants/index.js +0 -3
  299. package/dist/constants/index.js.map +0 -1
  300. package/dist/utils/path-validation.d.ts +0 -40
  301. package/dist/utils/path-validation.d.ts.map +0 -1
  302. package/dist/utils/path-validation.js +0 -84
  303. package/dist/utils/path-validation.js.map +0 -1
@@ -3,77 +3,9 @@
3
3
  */
4
4
  import { HandlerError } from './base-handler.js';
5
5
  import { isValidLogLevel, LogLevelValues } from '../../utils/log-tool-constants.js';
6
- export class ValidationHelpers {
7
- /**
8
- * Validate arguments against a set of rules
9
- */
10
- static validateArguments(args, rules, toolName) {
11
- for (const rule of rules) {
12
- const value = args?.[rule.field];
13
- // Check required fields
14
- if (rule.required && (value === undefined || value === null || value === '')) {
15
- throw new HandlerError(rule.errorMessage ?? `${rule.field} is required`, toolName, 'MISSING_ARGUMENT', { field: rule.field, rules });
16
- }
17
- // Skip type and custom validation if value is not present and not required
18
- if (!rule.required && (value === undefined || value === null)) {
19
- continue;
20
- }
21
- // Check type (including for required fields that have values)
22
- if (rule.type && value !== undefined && value !== null && !this.validateType(value, rule.type)) {
23
- throw new HandlerError(rule.errorMessage ?? `${rule.field} must be of type ${rule.type}`, toolName, 'INVALID_TYPE', { field: rule.field, expectedType: rule.type, actualType: typeof value });
24
- }
25
- // Custom validation
26
- if (rule.validator && !rule.validator(value)) {
27
- throw new HandlerError(rule.errorMessage ?? `${rule.field} validation failed`, toolName, 'VALIDATION_FAILED', { field: rule.field, value });
28
- }
29
- }
30
- }
31
- static validateType(value, type) {
32
- switch (type) {
33
- case 'string':
34
- return typeof value === 'string';
35
- case 'number':
36
- return typeof value === 'number' && !isNaN(value);
37
- case 'boolean':
38
- return typeof value === 'boolean';
39
- case 'object':
40
- return typeof value === 'object' && value !== null && !Array.isArray(value);
41
- case 'array':
42
- return Array.isArray(value);
43
- default:
44
- return true;
45
- }
46
- }
47
- }
48
- /**
49
- * Common validation rules factory
50
- */
51
- export const CommonValidations = {
52
- /** Create a required string field validation */
53
- requiredString: (field, customMessage) => [{
54
- field,
55
- required: true,
56
- type: 'string',
57
- validator: (value) => value.trim().length > 0,
58
- errorMessage: customMessage ?? `${field} must be a non-empty string`,
59
- }],
60
- /** Create a required field validation with custom validator */
61
- requiredField: (field, type, validator, errorMessage) => [{
62
- field,
63
- required: true,
64
- type,
65
- validator,
66
- errorMessage,
67
- }],
68
- /** Create an optional field validation */
69
- optionalField: (field, type, validator, errorMessage) => [{
70
- field,
71
- required: false,
72
- type,
73
- validator,
74
- errorMessage,
75
- }],
76
- };
6
+ import { resolve, relative, isAbsolute } from 'path';
7
+ import { homedir } from 'os';
8
+ import { existsSync, realpathSync } from 'fs';
77
9
  // =============================================================================
78
10
  // Log-specific validators (consolidated from log-validation.ts)
79
11
  // =============================================================================
@@ -81,7 +13,7 @@ export const CommonValidations = {
81
13
  export function validateLogLevel(level, toolName) {
82
14
  if (!isValidLogLevel(level)) {
83
15
  const validLevels = Object.values(LogLevelValues).join(', ');
84
- throw new Error(`Invalid log level '${level}' for ${toolName}. Valid levels: ${validLevels}`);
16
+ throw new HandlerError(`Invalid log level '${level}' for ${toolName}. Valid levels: ${validLevels}`, toolName, 'INVALID_ARGUMENT', { field: 'level', value: level, validLevels: Object.values(LogLevelValues) });
85
17
  }
86
18
  }
87
19
  /** Validate limit parameter */
@@ -90,10 +22,10 @@ export function validateLimit(limit, toolName) {
90
22
  return;
91
23
  }
92
24
  if (typeof limit !== 'number' || isNaN(limit)) {
93
- throw new Error(`Invalid limit '${limit}' for ${toolName}. Must be a valid number`);
25
+ throw new HandlerError(`Invalid limit '${limit}' for ${toolName}. Must be a valid number`, toolName, 'INVALID_ARGUMENT', { field: 'limit', value: limit });
94
26
  }
95
27
  if (limit <= 0 || limit > 1000) {
96
- throw new Error(`Invalid limit '${limit}' for ${toolName}. Must be between 1 and 1000`);
28
+ throw new HandlerError(`Invalid limit '${limit}' for ${toolName}. Must be between 1 and 1000`, toolName, 'INVALID_ARGUMENT', { field: 'limit', value: limit, min: 1, max: 1000 });
97
29
  }
98
30
  }
99
31
  /** Validate maxBytes parameter */
@@ -102,32 +34,32 @@ export function validateMaxBytes(maxBytes, toolName) {
102
34
  return;
103
35
  }
104
36
  if (typeof maxBytes !== 'number' || isNaN(maxBytes)) {
105
- throw new Error(`Invalid maxBytes '${maxBytes}' for ${toolName}. Must be a valid number`);
37
+ throw new HandlerError(`Invalid maxBytes '${maxBytes}' for ${toolName}. Must be a valid number`, toolName, 'INVALID_ARGUMENT', { field: 'maxBytes', value: maxBytes });
106
38
  }
107
39
  if (maxBytes <= 0 || maxBytes > 10_000_000) {
108
- throw new Error(`Invalid maxBytes '${maxBytes}' for ${toolName}. Must be between 1 and 10,000,000`);
40
+ throw new HandlerError(`Invalid maxBytes '${maxBytes}' for ${toolName}. Must be between 1 and 10,000,000`, toolName, 'INVALID_ARGUMENT', { field: 'maxBytes', value: maxBytes, min: 1, max: 10_000_000 });
109
41
  }
110
42
  }
111
43
  /** Validate filename parameter */
112
44
  export function validateFilename(filename, toolName) {
113
45
  if (!filename || filename.trim().length === 0) {
114
- throw new Error(`Filename is required for ${toolName}`);
46
+ throw new HandlerError(`Filename is required for ${toolName}`, toolName, 'MISSING_ARGUMENT', { field: 'filename' });
115
47
  }
116
48
  // Check for path traversal attempts
117
49
  if (filename.includes('..') || filename.includes('\\')) {
118
- throw new Error(`Invalid filename '${filename}' for ${toolName}. Path traversal not allowed`);
50
+ throw new HandlerError(`Invalid filename '${filename}' for ${toolName}. Path traversal not allowed`, toolName, 'INVALID_ARGUMENT', { field: 'filename', value: filename, reason: 'path_traversal' });
119
51
  }
120
52
  // Check for null byte injection
121
53
  if (filename.includes('\0') || filename.includes('\x00')) {
122
- throw new Error(`Invalid filename for ${toolName}. Contains invalid characters`);
54
+ throw new HandlerError(`Invalid filename for ${toolName}. Contains invalid characters`, toolName, 'INVALID_ARGUMENT', { field: 'filename', value: filename, reason: 'invalid_characters' });
123
55
  }
124
56
  // Check for absolute path attempts
125
57
  if (filename.startsWith('/') && !filename.startsWith('/Logs/') && !filename.startsWith('/jobs/')) {
126
- throw new Error(`Invalid filename '${filename}' for ${toolName}. Absolute paths outside /Logs/ are not allowed`);
58
+ throw new HandlerError(`Invalid filename '${filename}' for ${toolName}. Absolute paths outside /Logs/ are not allowed`, toolName, 'INVALID_ARGUMENT', { field: 'filename', value: filename, reason: 'absolute_path_not_allowed' });
127
59
  }
128
60
  // Check filename length to prevent DoS
129
61
  if (filename.length > 1024) {
130
- throw new Error(`Invalid filename for ${toolName}. Filename too long`);
62
+ throw new HandlerError(`Invalid filename for ${toolName}. Filename too long`, toolName, 'INVALID_ARGUMENT', { field: 'filename', length: filename.length, maxLength: 1024 });
131
63
  }
132
64
  }
133
65
  /** Format log operation message */
@@ -159,4 +91,70 @@ export function formatLogMessage(operation, params = {}) {
159
91
  }
160
92
  return parts.join(' ');
161
93
  }
94
+ function isPathWithinRoot(rootPath, candidatePath) {
95
+ const rel = relative(rootPath, candidatePath);
96
+ return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
97
+ }
98
+ function resolvePathForBoundaryCheck(inputPath) {
99
+ const normalizedPath = resolve(inputPath);
100
+ if (existsSync(normalizedPath)) {
101
+ return realpathSync(normalizedPath);
102
+ }
103
+ // Resolve symlinks in the nearest existing parent so non-existing targets are checked safely.
104
+ let parentPath = normalizedPath;
105
+ while (true) {
106
+ const nextParent = resolve(parentPath, '..');
107
+ if (nextParent === parentPath) {
108
+ return normalizedPath;
109
+ }
110
+ parentPath = nextParent;
111
+ if (!existsSync(parentPath)) {
112
+ continue;
113
+ }
114
+ const realParent = realpathSync(parentPath);
115
+ const relativeSuffix = relative(parentPath, normalizedPath);
116
+ return resolve(realParent, relativeSuffix);
117
+ }
118
+ }
119
+ /**
120
+ * Validate targetPath writes stay inside workspace roots (if discovered) or current working directory.
121
+ */
122
+ export function validateTargetPathWithinWorkspace(targetPath, context, toolName) {
123
+ const hasExplicitTargetPath = typeof targetPath === 'string' && targetPath.trim().length > 0;
124
+ if (targetPath !== undefined && targetPath !== null && typeof targetPath !== 'string') {
125
+ throw new HandlerError(`Invalid targetPath for ${toolName}. targetPath must be a string when provided`, toolName, 'INVALID_ARGUMENT', { field: 'targetPath', actualType: typeof targetPath });
126
+ }
127
+ if (typeof targetPath === 'string' && (targetPath.includes('\0') || targetPath.includes('\x00'))) {
128
+ throw new HandlerError(`Invalid targetPath for ${toolName}. Contains invalid characters`, toolName, 'INVALID_ARGUMENT', { field: 'targetPath', reason: 'invalid_characters' });
129
+ }
130
+ const resolvedTargetPath = hasExplicitTargetPath
131
+ ? resolve(targetPath)
132
+ : resolve(process.cwd());
133
+ const canonicalTargetPath = resolvePathForBoundaryCheck(resolvedTargetPath);
134
+ const workspaceRoots = context.handlerContext.workspaceRootsService
135
+ ?.getRoots()
136
+ .map(root => resolve(root.path)) ?? [];
137
+ const cwdRoot = resolve(process.cwd());
138
+ const homeRoot = resolve(homedir());
139
+ if (workspaceRoots.length === 0 && cwdRoot === homeRoot) {
140
+ throw new HandlerError(`Invalid targetPath for ${toolName}. Workspace roots are unavailable and current working directory resolves to the home directory`, toolName, 'TARGET_PATH_OUTSIDE_WORKSPACE', {
141
+ field: 'targetPath',
142
+ targetPath: canonicalTargetPath,
143
+ cwd: cwdRoot,
144
+ reason: 'home_directory_cwd_without_workspace_roots',
145
+ });
146
+ }
147
+ const allowedRoots = (workspaceRoots.length > 0
148
+ ? workspaceRoots
149
+ : [cwdRoot]).map(root => resolvePathForBoundaryCheck(root));
150
+ const isAllowed = allowedRoots.some(root => isPathWithinRoot(root, canonicalTargetPath));
151
+ if (!isAllowed) {
152
+ throw new HandlerError(`Invalid targetPath for ${toolName}. Path must be within workspace roots or current working directory`, toolName, 'TARGET_PATH_OUTSIDE_WORKSPACE', {
153
+ field: 'targetPath',
154
+ targetPath: canonicalTargetPath,
155
+ allowedRoots,
156
+ });
157
+ }
158
+ return hasExplicitTargetPath ? canonicalTargetPath : undefined;
159
+ }
162
160
  //# sourceMappingURL=validation-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation-helpers.js","sourceRoot":"","sources":["../../../src/core/handlers/validation-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation-helpers.js","sourceRoot":"","sources":["../../../src/core/handlers/validation-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAE9C,gFAAgF;AAChF,gEAAgE;AAChE,gFAAgF;AAEhF,mCAAmC;AACnC,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,QAAgB;IAC9D,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,IAAI,YAAY,CACpB,sBAAsB,KAAK,SAAS,QAAQ,mBAAmB,WAAW,EAAE,EAC5E,QAAQ,EACR,kBAAkB,EAClB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,aAAa,CAAC,KAAyB,EAAE,QAAgB;IACvE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,YAAY,CACpB,kBAAkB,KAAK,SAAS,QAAQ,0BAA0B,EAClE,QAAQ,EACR,kBAAkB,EAClB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CACjC,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,YAAY,CACpB,kBAAkB,KAAK,SAAS,QAAQ,8BAA8B,EACtE,QAAQ,EACR,kBAAkB,EAClB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CACpD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,gBAAgB,CAAC,QAA4B,EAAE,QAAgB;IAC7E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IACvC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,YAAY,CACpB,qBAAqB,QAAQ,SAAS,QAAQ,0BAA0B,EACxE,QAAQ,EACR,kBAAkB,EAClB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CACvC,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;QAC3C,MAAM,IAAI,YAAY,CACpB,qBAAqB,QAAQ,SAAS,QAAQ,oCAAoC,EAClF,QAAQ,EACR,kBAAkB,EAClB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,QAAgB;IACjE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,YAAY,CACpB,4BAA4B,QAAQ,EAAE,EACtC,QAAQ,EACR,kBAAkB,EAClB,EAAE,KAAK,EAAE,UAAU,EAAE,CACtB,CAAC;IACJ,CAAC;IACD,oCAAoC;IACpC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,YAAY,CACpB,qBAAqB,QAAQ,SAAS,QAAQ,8BAA8B,EAC5E,QAAQ,EACR,kBAAkB,EAClB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,CACjE,CAAC;IACJ,CAAC;IACD,gCAAgC;IAChC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,YAAY,CACpB,wBAAwB,QAAQ,+BAA+B,EAC/D,QAAQ,EACR,kBAAkB,EAClB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAAoB,EAAE,CACrE,CAAC;IACJ,CAAC;IACD,mCAAmC;IACnC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjG,MAAM,IAAI,YAAY,CACpB,qBAAqB,QAAQ,SAAS,QAAQ,iDAAiD,EAC/F,QAAQ,EACR,kBAAkB,EAClB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAC5E,CAAC;IACJ,CAAC;IACD,uCAAuC;IACvC,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QAC3B,MAAM,IAAI,YAAY,CACpB,wBAAwB,QAAQ,qBAAqB,EACrD,QAAQ,EACR,kBAAkB,EAClB,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,SASI,EAAE;IAEN,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAAC,CAAC;IAChE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAAC,CAAC;IACxE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IACvD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAAC,CAAC;IAClE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAAC,CAAC;IACnE,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAAC,CAAC;IACjF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAAC,CAAC;IACjF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB,EAAE,aAAqB;IAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC9C,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,2BAA2B,CAAC,SAAiB;IACpD,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAE1C,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,OAAO,YAAY,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAED,8FAA8F;IAC9F,IAAI,UAAU,GAAG,cAAc,CAAC;IAChC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YAC9B,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,UAAU,GAAG,UAAU,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC5D,OAAO,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAC/C,UAAmB,EACnB,OAA6B,EAC7B,QAAgB;IAEhB,MAAM,qBAAqB,GAAG,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAE7F,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACtF,MAAM,IAAI,YAAY,CACpB,0BAA0B,QAAQ,6CAA6C,EAC/E,QAAQ,EACR,kBAAkB,EAClB,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,UAAU,EAAE,CACvD,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACjG,MAAM,IAAI,YAAY,CACpB,0BAA0B,QAAQ,+BAA+B,EACjE,QAAQ,EACR,kBAAkB,EAClB,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,oBAAoB,EAAE,CACtD,CAAC;IACJ,CAAC;IAED,MAAM,kBAAkB,GAAG,qBAAqB;QAC9C,CAAC,CAAC,OAAO,CAAC,UAAoB,CAAC;QAC/B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3B,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,kBAAkB,CAAC,CAAC;IAE5E,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,qBAAqB;QACjE,EAAE,QAAQ,EAAE;SACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEpC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACxD,MAAM,IAAI,YAAY,CACpB,0BAA0B,QAAQ,gGAAgG,EAClI,QAAQ,EACR,+BAA+B,EAC/B;YACE,KAAK,EAAE,YAAY;YACnB,UAAU,EAAE,mBAAmB;YAC/B,GAAG,EAAE,OAAO;YACZ,MAAM,EAAE,4CAA4C;SACrD,CACF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;QAC7C,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9D,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACzF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,YAAY,CACpB,0BAA0B,QAAQ,oEAAoE,EACtG,QAAQ,EACR,+BAA+B,EAC/B;YACE,KAAK,EAAE,YAAY;YACnB,UAAU,EAAE,mBAAmB;YAC/B,YAAY;SACb,CACF,CAAC;IACJ,CAAC;IAED,OAAO,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC"}
@@ -10,6 +10,9 @@ export interface McpDevConfig {
10
10
  export declare class InstructionAdvisor {
11
11
  private readonly client;
12
12
  private readonly logger;
13
+ private noticeEvaluated;
14
+ private noticeToShow?;
15
+ private hasShownNotice;
13
16
  constructor(client: AgentInstructionsClient, logger: Logger);
14
17
  /**
15
18
  * Check if agent sync is disabled via mcp-dev.json in the workspace root.
@@ -1 +1 @@
1
- {"version":3,"file":"instruction-advisor.d.ts","sourceRoot":"","sources":["../../src/core/instruction-advisor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM;IAK3D;;OAEG;IACG,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlE;;OAEG;IACG,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA6BvF,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAiD9C,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"instruction-advisor.d.ts","sourceRoot":"","sources":["../../src/core/instruction-advisor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM;IAK3D;;OAEG;IACG,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlE;;OAEG;IACG,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA6BvF,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA0E9C,KAAK,IAAI,IAAI;CAKd"}
@@ -7,6 +7,9 @@ import path from 'path';
7
7
  export class InstructionAdvisor {
8
8
  client;
9
9
  logger;
10
+ noticeEvaluated = false;
11
+ noticeToShow;
12
+ hasShownNotice = false;
10
13
  constructor(client, logger) {
11
14
  this.client = client;
12
15
  this.logger = logger;
@@ -57,6 +60,16 @@ export class InstructionAdvisor {
57
60
  }
58
61
  }
59
62
  async getNotice() {
63
+ if (this.hasShownNotice) {
64
+ return undefined;
65
+ }
66
+ if (this.noticeEvaluated) {
67
+ if (this.noticeToShow) {
68
+ this.hasShownNotice = true;
69
+ return this.noticeToShow;
70
+ }
71
+ return undefined;
72
+ }
60
73
  try {
61
74
  const status = await this.client.getStatus();
62
75
  this.logger.debug('[InstructionAdvisor] Status', {
@@ -69,15 +82,20 @@ export class InstructionAdvisor {
69
82
  });
70
83
  // If we cannot determine a workspace root, skip the notice (can't reliably detect presence)
71
84
  if (!status.workspaceRoot) {
85
+ // Not definitive yet: workspace roots may be discovered later.
72
86
  return undefined;
73
87
  }
74
88
  // Check if agent sync is disabled via mcp-dev.json
75
89
  const syncDisabled = await this.isAgentSyncDisabled(status.workspaceRoot);
76
90
  if (syncDisabled) {
77
91
  this.logger.debug('[InstructionAdvisor] Agent sync disabled via mcp-dev.json');
92
+ this.noticeEvaluated = true;
93
+ this.noticeToShow = undefined;
78
94
  return undefined;
79
95
  }
80
96
  if (status.hasAgents && status.hasSkills) {
97
+ this.noticeEvaluated = true;
98
+ this.noticeToShow = undefined;
81
99
  return undefined;
82
100
  }
83
101
  const missingParts = [];
@@ -91,7 +109,7 @@ export class InstructionAdvisor {
91
109
  ? `Missing skills: ${status.missingSkills.join(', ')}`
92
110
  : 'All skills will be installed.';
93
111
  this.logger.debug('[InstructionAdvisor] Issuing workspace-root notice');
94
- return [
112
+ this.noticeToShow = [
95
113
  '📋 Agent instructions available for this SFCC project.',
96
114
  `Missing: ${missingParts.join(' + ')}`,
97
115
  missingSkills,
@@ -101,6 +119,9 @@ export class InstructionAdvisor {
101
119
  'If YES: Run sync_agent_instructions with dryRun=false',
102
120
  'If NO: Create mcp-dev.json with {"disableAgentSync": true} to permanently disable this suggestion.',
103
121
  ].join('\n');
122
+ this.noticeEvaluated = true;
123
+ this.hasShownNotice = true;
124
+ return this.noticeToShow;
104
125
  }
105
126
  catch (error) {
106
127
  this.logger.debug('InstructionAdvisor failed to evaluate status', error);
@@ -108,7 +129,9 @@ export class InstructionAdvisor {
108
129
  }
109
130
  }
110
131
  reset() {
111
- // no-op for now; retained for potential future stateful notice throttling
132
+ this.noticeEvaluated = false;
133
+ this.noticeToShow = undefined;
134
+ this.hasShownNotice = false;
112
135
  }
113
136
  }
114
137
  //# sourceMappingURL=instruction-advisor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"instruction-advisor.js","sourceRoot":"","sources":["../../src/core/instruction-advisor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IACZ,MAAM,CAA0B;IAChC,MAAM,CAAS;IAEhC,YAAY,MAA+B,EAAE,MAAc;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,aAAqB;QAC7C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,MAAM,GAAiB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC,gBAAgB,KAAK,IAAI,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;YAC1D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,aAAqB;QAC1C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YAC5D,IAAI,MAAM,GAAiB,EAAE,CAAC;YAE9B,8BAA8B;YAC9B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACvD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;YAChD,CAAC;YAED,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC/B,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEhF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,mBAAmB,UAAU,2FAA2F;aAClI,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,kCAAkC,MAAM,EAAE;aACpD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAE7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;gBAC/C,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC,CAAC;YAEH,4FAA4F;YAC5F,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAAC,OAAO,SAAS,CAAC;YAAC,CAAC;YAEhD,mDAAmD;YACnD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC1E,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;gBAC/E,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBAAC,OAAO,SAAS,CAAC;YAAC,CAAC;YAE/D,MAAM,YAAY,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YACvD,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,EAAE,MAAM;gBAChD,CAAC,CAAC,mBAAmB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtD,CAAC,CAAC,+BAA+B,CAAC;YAEpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,OAAO;gBACL,wDAAwD;gBACxD,YAAY,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACtC,aAAa;gBACb,EAAE;gBACF,0GAA0G;gBAC1G,EAAE;gBACF,uDAAuD;gBACvD,oGAAoG;aACrG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;YACzE,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK;QACH,0EAA0E;IAC5E,CAAC;CACF"}
1
+ {"version":3,"file":"instruction-advisor.js","sourceRoot":"","sources":["../../src/core/instruction-advisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import { ToolArgumentValidator } from './tool-argument-validator.js';
3
+ import { BaseToolHandler } from './handlers/base-handler.js';
4
+ import { Logger } from '../utils/logger.js';
5
+ import { LogCapabilityState } from './server-tool-catalog.js';
6
+ export type ProgressToken = string | number;
7
+ export interface ToolRequestExecutionExtras {
8
+ signal?: AbortSignal;
9
+ sendNotification?: (notification: {
10
+ method: string;
11
+ params?: Record<string, unknown>;
12
+ }) => Promise<void>;
13
+ }
14
+ interface ToolCallRequest {
15
+ params: {
16
+ name: string;
17
+ arguments?: Record<string, unknown>;
18
+ _meta?: {
19
+ progressToken?: ProgressToken;
20
+ };
21
+ };
22
+ }
23
+ export interface ToolCallLifecycleContext {
24
+ logger: Logger;
25
+ getHandlers: () => BaseToolHandler[];
26
+ logCapabilityToolNames: Set<string>;
27
+ ensureLogCapabilityResolved: () => Promise<void>;
28
+ isToolAvailable: (toolName: string) => boolean;
29
+ getCapabilitySnapshot: () => {
30
+ logCapabilityState: LogCapabilityState;
31
+ canAccessOCAPI: boolean;
32
+ };
33
+ toolArgumentValidator: ToolArgumentValidator;
34
+ getPreflightNotice: () => Promise<string | undefined>;
35
+ }
36
+ export declare function createToolCallHandler(context: ToolCallLifecycleContext): (request: ToolCallRequest, extra?: ToolRequestExecutionExtras) => Promise<CallToolResult>;
37
+ export {};
38
+ //# sourceMappingURL=server-tool-call-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-tool-call-lifecycle.d.ts","sourceRoot":"","sources":["../../src/core/server-tool-call-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,eAAe,EAAuB,MAAM,4BAA4B,CAAC;AAElF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1G;AAED,UAAU,eAAe;IACvB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,KAAK,CAAC,EAAE;YAAE,aAAa,CAAC,EAAE,aAAa,CAAA;SAAE,CAAC;KAC3C,CAAC;CACH;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,eAAe,EAAE,CAAC;IACrC,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,2BAA2B,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/C,qBAAqB,EAAE,MAAM;QAC3B,kBAAkB,EAAE,kBAAkB,CAAC;QACvC,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACvD;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,wBAAwB,GAChC,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,0BAA0B,KAAK,OAAO,CAAC,cAAc,CAAC,CAqF3F"}
@@ -0,0 +1,128 @@
1
+ import { createToolErrorResponse } from './tool-error-response.js';
2
+ import { ValidationError } from '../utils/validator.js';
3
+ export function createToolCallHandler(context) {
4
+ return async (request, extra) => {
5
+ const { name, arguments: args } = request.params;
6
+ const startTime = Date.now();
7
+ const progressToken = request.params._meta?.progressToken;
8
+ const executionExtras = {
9
+ signal: extra?.signal,
10
+ sendNotification: extra?.sendNotification,
11
+ };
12
+ context.logger.methodEntry(`handleToolRequest:${name}`, args);
13
+ try {
14
+ assertRequestNotCancelled(name, executionExtras.signal);
15
+ await emitProgress(context.logger, executionExtras, progressToken, 0, 100, `Starting ${name}`);
16
+ if (context.logCapabilityToolNames.has(name)) {
17
+ await context.ensureLogCapabilityResolved();
18
+ }
19
+ assertRequestNotCancelled(name, executionExtras.signal);
20
+ await emitProgress(context.logger, executionExtras, progressToken, 20, 100, 'Resolving handler');
21
+ const handler = context.getHandlers().find((h) => h.canHandle(name));
22
+ if (!handler) {
23
+ throw new ValidationError(`Unknown tool: ${name}`, 'UNKNOWN_TOOL', { toolName: name });
24
+ }
25
+ if (!context.isToolAvailable(name)) {
26
+ const capabilitySnapshot = context.getCapabilitySnapshot();
27
+ throw new ValidationError(`Tool not available in current mode: ${name}`, 'TOOL_NOT_AVAILABLE', {
28
+ toolName: name,
29
+ canAccessLogs: capabilitySnapshot.logCapabilityState === 'available',
30
+ logCapabilityState: capabilitySnapshot.logCapabilityState,
31
+ canAccessOCAPI: capabilitySnapshot.canAccessOCAPI,
32
+ });
33
+ }
34
+ assertRequestNotCancelled(name, executionExtras.signal);
35
+ await emitProgress(context.logger, executionExtras, progressToken, 40, 100, 'Validating arguments');
36
+ context.toolArgumentValidator.validate(name, args ?? {});
37
+ assertRequestNotCancelled(name, executionExtras.signal);
38
+ await emitProgress(context.logger, executionExtras, progressToken, 60, 100, 'Executing tool');
39
+ const preflightNotice = await context.getPreflightNotice();
40
+ const result = await awaitWithCancellation(name, handler.handle(name, args ?? {}, startTime), executionExtras.signal);
41
+ const decoratedResult = preflightNotice
42
+ ? appendPreflightNotice(result, preflightNotice)
43
+ : result;
44
+ await emitProgress(context.logger, executionExtras, progressToken, 100, 100, `${name} complete`);
45
+ context.logger.debug(`Full response for ${name}:`, {
46
+ contentItems: decoratedResult.content?.length ?? 0,
47
+ contentTypes: (decoratedResult.content ?? []).map((item) => item.type),
48
+ hasStructuredContent: decoratedResult.structuredContent !== undefined,
49
+ isError: decoratedResult.isError ?? false,
50
+ });
51
+ return {
52
+ content: decoratedResult.content,
53
+ structuredContent: decoratedResult.structuredContent,
54
+ isError: decoratedResult.isError,
55
+ };
56
+ }
57
+ catch (error) {
58
+ context.logger.error(`Error handling tool "${name}":`, error);
59
+ context.logger.timing(`${name}_error`, startTime);
60
+ const errorResult = createToolErrorResponse(name, error);
61
+ context.logger.debug(`Error response for ${name}:`, errorResult);
62
+ return errorResult;
63
+ }
64
+ finally {
65
+ context.logger.methodExit(`handleToolRequest:${name}`);
66
+ }
67
+ };
68
+ }
69
+ function appendPreflightNotice(result, notice) {
70
+ const trimmedNotice = notice.trim();
71
+ if (trimmedNotice.length === 0) {
72
+ return result;
73
+ }
74
+ const content = result?.content ?? [];
75
+ const alreadyIncluded = content.some((item) => item.type === 'text' && item.text === trimmedNotice);
76
+ if (alreadyIncluded) {
77
+ return result;
78
+ }
79
+ return {
80
+ ...result,
81
+ content: [...content, { type: 'text', text: trimmedNotice }],
82
+ };
83
+ }
84
+ function assertRequestNotCancelled(toolName, signal) {
85
+ if (signal?.aborted) {
86
+ throw new ValidationError(`Tool call cancelled: ${toolName}`, 'REQUEST_CANCELLED', { toolName });
87
+ }
88
+ }
89
+ async function awaitWithCancellation(toolName, operation, signal) {
90
+ assertRequestNotCancelled(toolName, signal);
91
+ if (!signal) {
92
+ return operation;
93
+ }
94
+ return await new Promise((resolve, reject) => {
95
+ const onAbort = () => {
96
+ reject(new ValidationError(`Tool call cancelled: ${toolName}`, 'REQUEST_CANCELLED', { toolName }));
97
+ };
98
+ signal.addEventListener('abort', onAbort, { once: true });
99
+ operation.then((value) => {
100
+ signal.removeEventListener('abort', onAbort);
101
+ resolve(value);
102
+ }, (error) => {
103
+ signal.removeEventListener('abort', onAbort);
104
+ reject(error);
105
+ });
106
+ });
107
+ }
108
+ async function emitProgress(logger, extra, progressToken, progress, total, message) {
109
+ if (progressToken === undefined || !extra.sendNotification) {
110
+ return;
111
+ }
112
+ try {
113
+ await extra.sendNotification({
114
+ method: 'notifications/progress',
115
+ params: {
116
+ progressToken,
117
+ progress,
118
+ total,
119
+ message,
120
+ },
121
+ });
122
+ }
123
+ catch (error) {
124
+ const reason = error instanceof Error ? error.message : String(error);
125
+ logger.debug(`[Server] Failed to emit progress notification: ${reason}`);
126
+ }
127
+ }
128
+ //# sourceMappingURL=server-tool-call-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-tool-call-lifecycle.js","sourceRoot":"","sources":["../../src/core/server-tool-call-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type LogCapabilityState = 'available' | 'unavailable' | 'unknown';
2
+ export type ToolDefinition = {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: unknown;
6
+ };
7
+ export type ToolNameSets = {
8
+ alwaysAvailable: Set<string>;
9
+ logCapability: Set<string>;
10
+ ocapiCapability: Set<string>;
11
+ };
12
+ export declare const ALWAYS_AVAILABLE_TOOLS: ToolDefinition[];
13
+ export declare const LOG_CAPABILITY_TOOLS: ToolDefinition[];
14
+ export declare const OCAPI_CAPABILITY_TOOLS: ToolDefinition[];
15
+ export declare const ALL_TOOL_DEFINITIONS: ToolDefinition[];
16
+ export declare function createToolNameSets(): ToolNameSets;
17
+ export declare function getAvailableTools(logCapabilityState: LogCapabilityState, canAccessOCAPI: boolean): ToolDefinition[];
18
+ export declare function isToolAvailable(toolName: string, logCapabilityState: LogCapabilityState, canAccessOCAPI: boolean, toolNames: ToolNameSets): boolean;
19
+ //# sourceMappingURL=server-tool-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-tool-catalog.d.ts","sourceRoot":"","sources":["../../src/core/server-tool-catalog.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAEzE,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,cAAc,EAMlD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAIhD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,cAAc,EAGlD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAIhD,CAAC;AAEF,wBAAgB,kBAAkB,IAAI,YAAY,CAMjD;AAED,wBAAgB,iBAAiB,CAC/B,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,OAAO,GACtB,cAAc,EAAE,CAYlB;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,OAAO,EACvB,SAAS,EAAE,YAAY,GACtB,OAAO,CAcT"}