@mcp-abap-adt/calm-server 0.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 (200) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/LICENSE +22 -0
  3. package/README.md +213 -0
  4. package/dist/bin/stdio.d.ts +3 -0
  5. package/dist/bin/stdio.d.ts.map +1 -0
  6. package/dist/bin/stdio.js +15 -0
  7. package/dist/bin/stdio.js.map +1 -0
  8. package/dist/index.d.ts +14 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +34 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/registry/CalmToolRegistry.d.ts +27 -0
  13. package/dist/registry/CalmToolRegistry.d.ts.map +1 -0
  14. package/dist/registry/CalmToolRegistry.js +62 -0
  15. package/dist/registry/CalmToolRegistry.js.map +1 -0
  16. package/dist/registry/HandlerGroup.d.ts +14 -0
  17. package/dist/registry/HandlerGroup.d.ts.map +1 -0
  18. package/dist/registry/HandlerGroup.js +24 -0
  19. package/dist/registry/HandlerGroup.js.map +1 -0
  20. package/dist/registry/index.d.ts +5 -0
  21. package/dist/registry/index.d.ts.map +1 -0
  22. package/dist/registry/index.js +10 -0
  23. package/dist/registry/index.js.map +1 -0
  24. package/dist/registry/jsonSchemaToZod.d.ts +13 -0
  25. package/dist/registry/jsonSchemaToZod.d.ts.map +1 -0
  26. package/dist/registry/jsonSchemaToZod.js +57 -0
  27. package/dist/registry/jsonSchemaToZod.js.map +1 -0
  28. package/dist/registry/types.d.ts +59 -0
  29. package/dist/registry/types.d.ts.map +1 -0
  30. package/dist/registry/types.js +3 -0
  31. package/dist/registry/types.js.map +1 -0
  32. package/dist/server/BaseCalmMcpServer.d.ts +37 -0
  33. package/dist/server/BaseCalmMcpServer.d.ts.map +1 -0
  34. package/dist/server/BaseCalmMcpServer.js +44 -0
  35. package/dist/server/BaseCalmMcpServer.js.map +1 -0
  36. package/dist/server/buildClient.d.ts +10 -0
  37. package/dist/server/buildClient.d.ts.map +1 -0
  38. package/dist/server/buildClient.js +74 -0
  39. package/dist/server/buildClient.js.map +1 -0
  40. package/dist/server/config.d.ts +18 -0
  41. package/dist/server/config.d.ts.map +1 -0
  42. package/dist/server/config.js +58 -0
  43. package/dist/server/config.js.map +1 -0
  44. package/dist/server/index.d.ts +5 -0
  45. package/dist/server/index.d.ts.map +1 -0
  46. package/dist/server/index.js +13 -0
  47. package/dist/server/index.js.map +1 -0
  48. package/dist/server/runStdio.d.ts +12 -0
  49. package/dist/server/runStdio.d.ts.map +1 -0
  50. package/dist/server/runStdio.js +48 -0
  51. package/dist/server/runStdio.js.map +1 -0
  52. package/dist/tools/analytics/index.d.ts +8 -0
  53. package/dist/tools/analytics/index.d.ts.map +1 -0
  54. package/dist/tools/analytics/index.js +16 -0
  55. package/dist/tools/analytics/index.js.map +1 -0
  56. package/dist/tools/analytics/listAnalyticsProviders.d.ts +5 -0
  57. package/dist/tools/analytics/listAnalyticsProviders.d.ts.map +1 -0
  58. package/dist/tools/analytics/listAnalyticsProviders.js +16 -0
  59. package/dist/tools/analytics/listAnalyticsProviders.js.map +1 -0
  60. package/dist/tools/analytics/queryAnalytics.d.ts +15 -0
  61. package/dist/tools/analytics/queryAnalytics.d.ts.map +1 -0
  62. package/dist/tools/analytics/queryAnalytics.js +61 -0
  63. package/dist/tools/analytics/queryAnalytics.js.map +1 -0
  64. package/dist/tools/documents/getDocument.d.ts +7 -0
  65. package/dist/tools/documents/getDocument.d.ts.map +1 -0
  66. package/dist/tools/documents/getDocument.js +34 -0
  67. package/dist/tools/documents/getDocument.js.map +1 -0
  68. package/dist/tools/documents/index.d.ts +9 -0
  69. package/dist/tools/documents/index.d.ts.map +1 -0
  70. package/dist/tools/documents/index.js +16 -0
  71. package/dist/tools/documents/index.js.map +1 -0
  72. package/dist/tools/documents/listDocuments.d.ts +16 -0
  73. package/dist/tools/documents/listDocuments.d.ts.map +1 -0
  74. package/dist/tools/documents/listDocuments.js +85 -0
  75. package/dist/tools/documents/listDocuments.js.map +1 -0
  76. package/dist/tools/features/createFeature.d.ts +5 -0
  77. package/dist/tools/features/createFeature.d.ts.map +1 -0
  78. package/dist/tools/features/createFeature.js +55 -0
  79. package/dist/tools/features/createFeature.js.map +1 -0
  80. package/dist/tools/features/deleteFeature.d.ts +10 -0
  81. package/dist/tools/features/deleteFeature.d.ts.map +1 -0
  82. package/dist/tools/features/deleteFeature.js +35 -0
  83. package/dist/tools/features/deleteFeature.js.map +1 -0
  84. package/dist/tools/features/getFeature.d.ts +7 -0
  85. package/dist/tools/features/getFeature.d.ts.map +1 -0
  86. package/dist/tools/features/getFeature.js +37 -0
  87. package/dist/tools/features/getFeature.js.map +1 -0
  88. package/dist/tools/features/getFeatureByDisplayId.d.ts +7 -0
  89. package/dist/tools/features/getFeatureByDisplayId.d.ts.map +1 -0
  90. package/dist/tools/features/getFeatureByDisplayId.js +37 -0
  91. package/dist/tools/features/getFeatureByDisplayId.js.map +1 -0
  92. package/dist/tools/features/index.d.ts +21 -0
  93. package/dist/tools/features/index.d.ts.map +1 -0
  94. package/dist/tools/features/index.js +40 -0
  95. package/dist/tools/features/index.js.map +1 -0
  96. package/dist/tools/features/listFeaturePriorities.d.ts +7 -0
  97. package/dist/tools/features/listFeaturePriorities.d.ts.map +1 -0
  98. package/dist/tools/features/listFeaturePriorities.js +23 -0
  99. package/dist/tools/features/listFeaturePriorities.js.map +1 -0
  100. package/dist/tools/features/listFeatureStatuses.d.ts +7 -0
  101. package/dist/tools/features/listFeatureStatuses.d.ts.map +1 -0
  102. package/dist/tools/features/listFeatureStatuses.js +23 -0
  103. package/dist/tools/features/listFeatureStatuses.js.map +1 -0
  104. package/dist/tools/features/listFeatures.d.ts +19 -0
  105. package/dist/tools/features/listFeatures.d.ts.map +1 -0
  106. package/dist/tools/features/listFeatures.js +123 -0
  107. package/dist/tools/features/listFeatures.js.map +1 -0
  108. package/dist/tools/features/updateFeature.d.ts +7 -0
  109. package/dist/tools/features/updateFeature.d.ts.map +1 -0
  110. package/dist/tools/features/updateFeature.js +44 -0
  111. package/dist/tools/features/updateFeature.js.map +1 -0
  112. package/dist/tools/hierarchy/getHierarchyWithChildren.d.ts +10 -0
  113. package/dist/tools/hierarchy/getHierarchyWithChildren.d.ts.map +1 -0
  114. package/dist/tools/hierarchy/getHierarchyWithChildren.js +45 -0
  115. package/dist/tools/hierarchy/getHierarchyWithChildren.js.map +1 -0
  116. package/dist/tools/hierarchy/index.d.ts +9 -0
  117. package/dist/tools/hierarchy/index.d.ts.map +1 -0
  118. package/dist/tools/hierarchy/index.js +16 -0
  119. package/dist/tools/hierarchy/index.js.map +1 -0
  120. package/dist/tools/hierarchy/listHierarchy.d.ts +16 -0
  121. package/dist/tools/hierarchy/listHierarchy.d.ts.map +1 -0
  122. package/dist/tools/hierarchy/listHierarchy.js +74 -0
  123. package/dist/tools/hierarchy/listHierarchy.js.map +1 -0
  124. package/dist/tools/index.d.ts +16 -0
  125. package/dist/tools/index.d.ts.map +1 -0
  126. package/dist/tools/index.js +45 -0
  127. package/dist/tools/index.js.map +1 -0
  128. package/dist/tools/logs/getLogs.d.ts +15 -0
  129. package/dist/tools/logs/getLogs.d.ts.map +1 -0
  130. package/dist/tools/logs/getLogs.js +55 -0
  131. package/dist/tools/logs/getLogs.js.map +1 -0
  132. package/dist/tools/logs/index.d.ts +7 -0
  133. package/dist/tools/logs/index.d.ts.map +1 -0
  134. package/dist/tools/logs/index.js +10 -0
  135. package/dist/tools/logs/index.js.map +1 -0
  136. package/dist/tools/processMonitoring/index.d.ts +7 -0
  137. package/dist/tools/processMonitoring/index.d.ts.map +1 -0
  138. package/dist/tools/processMonitoring/index.js +12 -0
  139. package/dist/tools/processMonitoring/index.js.map +1 -0
  140. package/dist/tools/processMonitoring/listBusinessProcesses.d.ts +10 -0
  141. package/dist/tools/processMonitoring/listBusinessProcesses.d.ts.map +1 -0
  142. package/dist/tools/processMonitoring/listBusinessProcesses.js +36 -0
  143. package/dist/tools/processMonitoring/listBusinessProcesses.js.map +1 -0
  144. package/dist/tools/projects/getProject.d.ts +7 -0
  145. package/dist/tools/projects/getProject.d.ts.map +1 -0
  146. package/dist/tools/projects/getProject.js +32 -0
  147. package/dist/tools/projects/getProject.js.map +1 -0
  148. package/dist/tools/projects/index.d.ts +9 -0
  149. package/dist/tools/projects/index.d.ts.map +1 -0
  150. package/dist/tools/projects/index.js +16 -0
  151. package/dist/tools/projects/index.js.map +1 -0
  152. package/dist/tools/projects/listProjects.d.ts +16 -0
  153. package/dist/tools/projects/listProjects.d.ts.map +1 -0
  154. package/dist/tools/projects/listProjects.js +69 -0
  155. package/dist/tools/projects/listProjects.js.map +1 -0
  156. package/dist/tools/tasks/getTask.d.ts +7 -0
  157. package/dist/tools/tasks/getTask.d.ts.map +1 -0
  158. package/dist/tools/tasks/getTask.js +34 -0
  159. package/dist/tools/tasks/getTask.js.map +1 -0
  160. package/dist/tools/tasks/index.d.ts +11 -0
  161. package/dist/tools/tasks/index.d.ts.map +1 -0
  162. package/dist/tools/tasks/index.js +20 -0
  163. package/dist/tools/tasks/index.js.map +1 -0
  164. package/dist/tools/tasks/listTaskComments.d.ts +11 -0
  165. package/dist/tools/tasks/listTaskComments.d.ts.map +1 -0
  166. package/dist/tools/tasks/listTaskComments.js +46 -0
  167. package/dist/tools/tasks/listTaskComments.js.map +1 -0
  168. package/dist/tools/tasks/listTasks.d.ts +17 -0
  169. package/dist/tools/tasks/listTasks.d.ts.map +1 -0
  170. package/dist/tools/tasks/listTasks.js +89 -0
  171. package/dist/tools/tasks/listTasks.js.map +1 -0
  172. package/dist/tools/testCases/getTestCase.d.ts +7 -0
  173. package/dist/tools/testCases/getTestCase.d.ts.map +1 -0
  174. package/dist/tools/testCases/getTestCase.js +34 -0
  175. package/dist/tools/testCases/getTestCase.js.map +1 -0
  176. package/dist/tools/testCases/index.d.ts +9 -0
  177. package/dist/tools/testCases/index.d.ts.map +1 -0
  178. package/dist/tools/testCases/index.js +16 -0
  179. package/dist/tools/testCases/index.js.map +1 -0
  180. package/dist/tools/testCases/listTestCases.d.ts +16 -0
  181. package/dist/tools/testCases/listTestCases.d.ts.map +1 -0
  182. package/dist/tools/testCases/listTestCases.js +69 -0
  183. package/dist/tools/testCases/listTestCases.js.map +1 -0
  184. package/dist/utils/errorMapping.d.ts +28 -0
  185. package/dist/utils/errorMapping.d.ts.map +1 -0
  186. package/dist/utils/errorMapping.js +88 -0
  187. package/dist/utils/errorMapping.js.map +1 -0
  188. package/dist/utils/index.d.ts +4 -0
  189. package/dist/utils/index.d.ts.map +1 -0
  190. package/dist/utils/index.js +15 -0
  191. package/dist/utils/index.js.map +1 -0
  192. package/dist/utils/odataFilter.d.ts +15 -0
  193. package/dist/utils/odataFilter.d.ts.map +1 -0
  194. package/dist/utils/odataFilter.js +24 -0
  195. package/dist/utils/odataFilter.js.map +1 -0
  196. package/dist/utils/tokenEconomy.d.ts +36 -0
  197. package/dist/utils/tokenEconomy.d.ts.map +1 -0
  198. package/dist/utils/tokenEconomy.js +37 -0
  199. package/dist/utils/tokenEconomy.js.map +1 -0
  200. package/package.json +86 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listBusinessProcesses.d.ts","sourceRoot":"","sources":["../../../src/tools/processMonitoring/listBusinessProcesses.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAO9B,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,OAAO,EAAE,CAAC;CACjB;AAiCD,eAAO,MAAM,yBAAyB,EAAE,iBAAiB,CACvD,0BAA0B,EAC1B,4BAA4B,CAI7B,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listBusinessProcessesTool = void 0;
4
+ const calm_client_1 = require("@mcp-abap-adt/calm-client");
5
+ const utils_1 = require("../../utils");
6
+ const definition = {
7
+ name: 'calm_process_monitoring_list_processes',
8
+ description: 'List monitored business processes (read-only). Response shape depends on the tenant configuration; `rows` holds the raw records.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ limit: { type: 'integer', minimum: 1, maximum: utils_1.MAX_LIST_LIMIT },
13
+ offset: { type: 'integer', minimum: 0 },
14
+ },
15
+ },
16
+ };
17
+ const handler = async (ctx, args) => {
18
+ const limit = (0, utils_1.clampListLimit)(args?.limit);
19
+ const offset = args?.offset && args.offset > 0 ? Math.floor(args.offset) : 0;
20
+ const query = calm_client_1.ODataQuery.new().top(limit).skip(offset);
21
+ try {
22
+ const raw = await ctx.calm
23
+ .getProcessMonitoring()
24
+ .listBusinessProcesses(query);
25
+ const rows = Array.isArray(raw) ? raw : (raw?.value ?? []);
26
+ return { rows };
27
+ }
28
+ catch (err) {
29
+ throw (0, utils_1.mapCalmErrorForTool)(err);
30
+ }
31
+ };
32
+ exports.listBusinessProcessesTool = {
33
+ toolDefinition: definition,
34
+ handler,
35
+ };
36
+ //# sourceMappingURL=listBusinessProcesses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listBusinessProcesses.js","sourceRoot":"","sources":["../../../src/tools/processMonitoring/listBusinessProcesses.ts"],"names":[],"mappings":";;;AAAA,2DAAuD;AAMvD,uCAIqB;AAWrB,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,wCAAwC;IAC9C,WAAW,EACT,kIAAkI;IACpI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAc,EAAE;YAC/D,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;SACxC;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAGT,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACtB,MAAM,KAAK,GAAG,IAAA,sBAAc,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,wBAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI;aACvB,oBAAoB,EAAE;aACtB,qBAAqB,CAAoC,KAAK,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC3D,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,yBAAyB,GAGlC;IACF,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { IProject } from '@mcp-abap-adt/calm-client';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ export interface IGetProjectArgs {
4
+ id: string;
5
+ }
6
+ export declare const getProjectTool: ICalmHandlerEntry<IGetProjectArgs, IProject>;
7
+ //# sourceMappingURL=getProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProject.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/getProject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;CACZ;AA8BD,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,eAAe,EAAE,QAAQ,CAGvE,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProjectTool = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const definition = {
6
+ name: 'calm_projects_get',
7
+ description: 'Fetch a Cloud ALM project by id. Returns the full project record.',
8
+ inputSchema: {
9
+ type: 'object',
10
+ required: ['id'],
11
+ properties: { id: { type: 'string', description: 'Project id.' } },
12
+ },
13
+ };
14
+ const handler = async (ctx, args) => {
15
+ if (!args?.id) {
16
+ throw new utils_1.CalmToolError({
17
+ code: 'INVALID_ARGUMENT',
18
+ message: 'id is required',
19
+ });
20
+ }
21
+ try {
22
+ return await ctx.calm.getProjects().get(args.id);
23
+ }
24
+ catch (err) {
25
+ throw (0, utils_1.mapCalmErrorForTool)(err);
26
+ }
27
+ };
28
+ exports.getProjectTool = {
29
+ toolDefinition: definition,
30
+ handler,
31
+ };
32
+ //# sourceMappingURL=getProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProject.js","sourceRoot":"","sources":["../../../src/tools/projects/getProject.ts"],"names":[],"mappings":";;;AAMA,uCAAiE;AAMjE,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,mEAAmE;IACrE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,IAAI,CAAC;QAChB,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE;KACnE;CACF,CAAC;AAEF,MAAM,OAAO,GAA+C,KAAK,EAC/D,GAAG,EACH,IAAI,EACJ,EAAE;IACF,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,qBAAa,CAAC;YACtB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,cAAc,GAAiD;IAC1E,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { HandlerGroup } from '../../registry/HandlerGroup';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ export type { IGetProjectArgs } from './getProject';
4
+ export { getProjectTool } from './getProject';
5
+ export type { IListProjectsArgs } from './listProjects';
6
+ export { listProjectsTool } from './listProjects';
7
+ export declare const PROJECTS_HANDLERS: readonly ICalmHandlerEntry[];
8
+ export declare const PROJECTS_GROUP: HandlerGroup;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,eAAO,MAAM,iBAAiB,EAAE,SAAS,iBAAiB,EAGzD,CAAC;AAEF,eAAO,MAAM,cAAc,cAAkD,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROJECTS_GROUP = exports.PROJECTS_HANDLERS = exports.listProjectsTool = exports.getProjectTool = void 0;
4
+ const HandlerGroup_1 = require("../../registry/HandlerGroup");
5
+ const getProject_1 = require("./getProject");
6
+ const listProjects_1 = require("./listProjects");
7
+ var getProject_2 = require("./getProject");
8
+ Object.defineProperty(exports, "getProjectTool", { enumerable: true, get: function () { return getProject_2.getProjectTool; } });
9
+ var listProjects_2 = require("./listProjects");
10
+ Object.defineProperty(exports, "listProjectsTool", { enumerable: true, get: function () { return listProjects_2.listProjectsTool; } });
11
+ exports.PROJECTS_HANDLERS = [
12
+ listProjects_1.listProjectsTool,
13
+ getProject_1.getProjectTool,
14
+ ];
15
+ exports.PROJECTS_GROUP = new HandlerGroup_1.HandlerGroup('projects', exports.PROJECTS_HANDLERS);
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/projects/index.ts"],"names":[],"mappings":";;;AAAA,8DAA2D;AAE3D,6CAA8C;AAC9C,iDAAkD;AAGlD,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAEvB,+CAAkD;AAAzC,gHAAA,gBAAgB,OAAA;AAEZ,QAAA,iBAAiB,GAAiC;IAC7D,+BAAgB;IAChB,2BAAc;CACf,CAAC;AAEW,QAAA,cAAc,GAAG,IAAI,2BAAY,CAAC,UAAU,EAAE,yBAAiB,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type IProject } from '@mcp-abap-adt/calm-client';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ import { type IListResponse } from '../../utils';
4
+ declare const ALLOWED_FIELDS: readonly ["id", "name", "description", "status", "type", "programId", "createdAt", "modifiedAt"];
5
+ type AllowedField = (typeof ALLOWED_FIELDS)[number];
6
+ export interface IListProjectsArgs {
7
+ status?: string;
8
+ programId?: string;
9
+ fields?: AllowedField[];
10
+ limit?: number;
11
+ offset?: number;
12
+ withCount?: boolean;
13
+ }
14
+ export declare const listProjectsTool: ICalmHandlerEntry<IListProjectsArgs, IListResponse<Partial<IProject>>>;
15
+ export {};
16
+ //# sourceMappingURL=listProjects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listProjects.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/listProjects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAC;AAWrB,QAAA,MAAM,cAAc,kGASV,CAAC;AACX,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAmDD,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,CAC9C,iBAAiB,EACjB,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAIjC,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listProjectsTool = void 0;
4
+ const calm_client_1 = require("@mcp-abap-adt/calm-client");
5
+ const utils_1 = require("../../utils");
6
+ const DEFAULT_FIELDS = [
7
+ 'id',
8
+ 'name',
9
+ 'status',
10
+ 'type',
11
+ 'programId',
12
+ 'modifiedAt',
13
+ ];
14
+ const ALLOWED_FIELDS = [
15
+ 'id',
16
+ 'name',
17
+ 'description',
18
+ 'status',
19
+ 'type',
20
+ 'programId',
21
+ 'createdAt',
22
+ 'modifiedAt',
23
+ ];
24
+ const definition = {
25
+ name: 'calm_projects_list',
26
+ description: 'List Cloud ALM projects. Optionally filter by status or programId. Returns compact records by default; use `fields` to include description or createdAt.',
27
+ inputSchema: {
28
+ type: 'object',
29
+ properties: {
30
+ status: { type: 'string' },
31
+ programId: { type: 'string' },
32
+ fields: {
33
+ type: 'array',
34
+ items: { type: 'string', enum: [...ALLOWED_FIELDS] },
35
+ },
36
+ limit: { type: 'integer', minimum: 1, maximum: utils_1.MAX_LIST_LIMIT },
37
+ offset: { type: 'integer', minimum: 0 },
38
+ withCount: { type: 'boolean' },
39
+ },
40
+ },
41
+ };
42
+ const handler = async (ctx, args) => {
43
+ const limit = (0, utils_1.clampListLimit)(args?.limit);
44
+ const offset = args?.offset && args.offset > 0 ? Math.floor(args.offset) : 0;
45
+ const filter = (0, utils_1.joinAndFilters)(args?.status ? `status eq '${(0, utils_1.escapeODataString)(args.status)}'` : undefined, args?.programId
46
+ ? `programId eq '${(0, utils_1.escapeODataString)(args.programId)}'`
47
+ : undefined);
48
+ const fields = args?.fields && args.fields.length > 0 ? args.fields : DEFAULT_FIELDS;
49
+ let query = calm_client_1.ODataQuery.new()
50
+ .select([...fields])
51
+ .top(limit)
52
+ .skip(offset);
53
+ if (filter)
54
+ query = query.filter(filter);
55
+ if (args?.withCount)
56
+ query = query.count();
57
+ try {
58
+ const collection = await ctx.calm.getProjects().list(query);
59
+ return (0, utils_1.toListResponse)(collection, { limit, offset });
60
+ }
61
+ catch (err) {
62
+ throw (0, utils_1.mapCalmErrorForTool)(err);
63
+ }
64
+ };
65
+ exports.listProjectsTool = {
66
+ toolDefinition: definition,
67
+ handler,
68
+ };
69
+ //# sourceMappingURL=listProjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listProjects.js","sourceRoot":"","sources":["../../../src/tools/projects/listProjects.ts"],"names":[],"mappings":";;;AAAA,2DAAsE;AAMtE,uCAQqB;AAErB,MAAM,cAAc,GAAG;IACrB,IAAI;IACJ,MAAM;IACN,QAAQ;IACR,MAAM;IACN,WAAW;IACX,YAAY;CACJ,CAAC;AAEX,MAAM,cAAc,GAAG;IACrB,IAAI;IACJ,MAAM;IACN,aAAa;IACb,QAAQ;IACR,MAAM;IACN,WAAW;IACX,WAAW;IACX,YAAY;CACJ,CAAC;AAYX,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,0JAA0J;IAC5J,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC7B,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,cAAc,CAAC,EAAE;aACrD;YACD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAc,EAAE;YAC/D,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;YACvC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC/B;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAGT,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACtB,MAAM,KAAK,GAAG,IAAA,sBAAc,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,IAAA,sBAAc,EAC3B,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,IAAA,yBAAiB,EAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAC1E,IAAI,EAAE,SAAS;QACb,CAAC,CAAC,iBAAiB,IAAA,yBAAiB,EAAC,IAAI,CAAC,SAAS,CAAC,GAAG;QACvD,CAAC,CAAC,SAAS,CACd,CAAC;IACF,MAAM,MAAM,GACV,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;IACxE,IAAI,KAAK,GAAG,wBAAU,CAAC,GAAG,EAAE;SACzB,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;SACnB,GAAG,CAAC,KAAK,CAAC;SACV,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,IAAI,MAAM;QAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,IAAI,EAAE,SAAS;QAAE,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,OAAO,IAAA,sBAAc,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,gBAAgB,GAGzB;IACF,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ITask } from '@mcp-abap-adt/calm-client';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ export interface IGetTaskArgs {
4
+ id: string;
5
+ }
6
+ export declare const getTaskTool: ICalmHandlerEntry<IGetTaskArgs, ITask>;
7
+ //# sourceMappingURL=getTask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTask.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/getTask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;CACZ;AA4BD,eAAO,MAAM,WAAW,EAAE,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAG9D,CAAC"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTaskTool = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const definition = {
6
+ name: 'calm_tasks_get',
7
+ description: 'Fetch a single task by id. Returns the full task record.',
8
+ inputSchema: {
9
+ type: 'object',
10
+ required: ['id'],
11
+ properties: {
12
+ id: { type: 'string', description: 'Task id.' },
13
+ },
14
+ },
15
+ };
16
+ const handler = async (ctx, args) => {
17
+ if (!args?.id) {
18
+ throw new utils_1.CalmToolError({
19
+ code: 'INVALID_ARGUMENT',
20
+ message: 'id is required',
21
+ });
22
+ }
23
+ try {
24
+ return await ctx.calm.getTasks().get(args.id);
25
+ }
26
+ catch (err) {
27
+ throw (0, utils_1.mapCalmErrorForTool)(err);
28
+ }
29
+ };
30
+ exports.getTaskTool = {
31
+ toolDefinition: definition,
32
+ handler,
33
+ };
34
+ //# sourceMappingURL=getTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTask.js","sourceRoot":"","sources":["../../../src/tools/tasks/getTask.ts"],"names":[],"mappings":";;;AAMA,uCAAiE;AAMjE,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,0DAA0D;IACvE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,IAAI,CAAC;QAChB,UAAU,EAAE;YACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;SAChD;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAAyC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACxE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,qBAAa,CAAC;YACtB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,WAAW,GAA2C;IACjE,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { HandlerGroup } from '../../registry/HandlerGroup';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ export type { IGetTaskArgs } from './getTask';
4
+ export { getTaskTool } from './getTask';
5
+ export type { IListTaskCommentsArgs } from './listTaskComments';
6
+ export { listTaskCommentsTool } from './listTaskComments';
7
+ export type { IListTasksArgs } from './listTasks';
8
+ export { listTasksTool } from './listTasks';
9
+ export declare const TASKS_HANDLERS: readonly ICalmHandlerEntry[];
10
+ export declare const TASKS_GROUP: HandlerGroup;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAK9D,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,eAAO,MAAM,cAAc,EAAE,SAAS,iBAAiB,EAItD,CAAC;AAEF,eAAO,MAAM,WAAW,cAA4C,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TASKS_GROUP = exports.TASKS_HANDLERS = exports.listTasksTool = exports.listTaskCommentsTool = exports.getTaskTool = void 0;
4
+ const HandlerGroup_1 = require("../../registry/HandlerGroup");
5
+ const getTask_1 = require("./getTask");
6
+ const listTaskComments_1 = require("./listTaskComments");
7
+ const listTasks_1 = require("./listTasks");
8
+ var getTask_2 = require("./getTask");
9
+ Object.defineProperty(exports, "getTaskTool", { enumerable: true, get: function () { return getTask_2.getTaskTool; } });
10
+ var listTaskComments_2 = require("./listTaskComments");
11
+ Object.defineProperty(exports, "listTaskCommentsTool", { enumerable: true, get: function () { return listTaskComments_2.listTaskCommentsTool; } });
12
+ var listTasks_2 = require("./listTasks");
13
+ Object.defineProperty(exports, "listTasksTool", { enumerable: true, get: function () { return listTasks_2.listTasksTool; } });
14
+ exports.TASKS_HANDLERS = [
15
+ listTasks_1.listTasksTool,
16
+ getTask_1.getTaskTool,
17
+ listTaskComments_1.listTaskCommentsTool,
18
+ ];
19
+ exports.TASKS_GROUP = new HandlerGroup_1.HandlerGroup('tasks', exports.TASKS_HANDLERS);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/tasks/index.ts"],"names":[],"mappings":";;;AAAA,8DAA2D;AAE3D,uCAAwC;AACxC,yDAA0D;AAC1D,2CAA4C;AAG5C,qCAAwC;AAA/B,sGAAA,WAAW,OAAA;AAEpB,uDAA0D;AAAjD,wHAAA,oBAAoB,OAAA;AAE7B,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAET,QAAA,cAAc,GAAiC;IAC1D,yBAAa;IACb,qBAAW;IACX,uCAAoB;CACrB,CAAC;AAEW,QAAA,WAAW,GAAG,IAAI,2BAAY,CAAC,OAAO,EAAE,sBAAc,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type ITaskComment } from '@mcp-abap-adt/calm-client';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ import { type IListResponse } from '../../utils';
4
+ export interface IListTaskCommentsArgs {
5
+ taskId: string;
6
+ limit?: number;
7
+ offset?: number;
8
+ withCount?: boolean;
9
+ }
10
+ export declare const listTaskCommentsTool: ICalmHandlerEntry<IListTaskCommentsArgs, IListResponse<Partial<ITaskComment>>>;
11
+ //# sourceMappingURL=listTaskComments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTaskComments.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/listTaskComments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAc,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,aAAa,EAInB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA2CD,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,CAClD,qBAAqB,EACrB,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAIrC,CAAC"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listTaskCommentsTool = void 0;
4
+ const calm_client_1 = require("@mcp-abap-adt/calm-client");
5
+ const utils_1 = require("../../utils");
6
+ const definition = {
7
+ name: 'calm_tasks_list_comments',
8
+ description: 'List comments on a specific task. Comments are ordered by createdAt descending by default in the source API.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ required: ['taskId'],
12
+ properties: {
13
+ taskId: { type: 'string', description: 'Parent task id.' },
14
+ limit: { type: 'integer', minimum: 1, maximum: utils_1.MAX_LIST_LIMIT },
15
+ offset: { type: 'integer', minimum: 0 },
16
+ withCount: { type: 'boolean' },
17
+ },
18
+ },
19
+ };
20
+ const handler = async (ctx, args) => {
21
+ if (!args?.taskId) {
22
+ throw new utils_1.CalmToolError({
23
+ code: 'INVALID_ARGUMENT',
24
+ message: 'taskId is required',
25
+ });
26
+ }
27
+ const limit = (0, utils_1.clampListLimit)(args.limit);
28
+ const offset = args.offset && args.offset > 0 ? Math.floor(args.offset) : 0;
29
+ let query = calm_client_1.ODataQuery.new().top(limit).skip(offset);
30
+ if (args.withCount)
31
+ query = query.count();
32
+ try {
33
+ const collection = await ctx.calm
34
+ .getTasks()
35
+ .listComments(args.taskId, query);
36
+ return (0, utils_1.toListResponse)(collection, { limit, offset });
37
+ }
38
+ catch (err) {
39
+ throw (0, utils_1.mapCalmErrorForTool)(err);
40
+ }
41
+ };
42
+ exports.listTaskCommentsTool = {
43
+ toolDefinition: definition,
44
+ handler,
45
+ };
46
+ //# sourceMappingURL=listTaskComments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTaskComments.js","sourceRoot":"","sources":["../../../src/tools/tasks/listTaskComments.ts"],"names":[],"mappings":";;;AAAA,2DAA0E;AAM1E,uCAOqB;AASrB,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,0BAA0B;IAChC,WAAW,EACT,8GAA8G;IAChH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACpB,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;YAC1D,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAc,EAAE;YAC/D,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;YACvC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC/B;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAGT,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACtB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,qBAAa,CAAC;YACtB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,oBAAoB;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,IAAI,KAAK,GAAG,wBAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,SAAS;QAAE,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI;aAC9B,QAAQ,EAAE;aACV,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,OAAO,IAAA,sBAAc,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,oBAAoB,GAG7B;IACF,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type ITask } from '@mcp-abap-adt/calm-client';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ import { type IListResponse } from '../../utils';
4
+ declare const ALLOWED_FIELDS: readonly ["id", "projectId", "title", "description", "type", "status", "subStatus", "externalId", "dueDate", "priorityId", "assigneeId", "assigneeName", "timeboxName", "timeboxStartDate", "timeboxEndDate", "lastChangedDate"];
5
+ type AllowedField = (typeof ALLOWED_FIELDS)[number];
6
+ export interface IListTasksArgs {
7
+ projectId: string;
8
+ status?: string;
9
+ assigneeId?: string;
10
+ fields?: AllowedField[];
11
+ limit?: number;
12
+ offset?: number;
13
+ withCount?: boolean;
14
+ }
15
+ export declare const listTasksTool: ICalmHandlerEntry<IListTasksArgs, IListResponse<Partial<ITask>>>;
16
+ export {};
17
+ //# sourceMappingURL=listTasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTasks.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/listTasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAc,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAIL,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAC;AAYrB,QAAA,MAAM,cAAc,kOAiBV,CAAC;AACX,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA+DD,eAAO,MAAM,aAAa,EAAE,iBAAiB,CAC3C,cAAc,EACd,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAI9B,CAAC"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listTasksTool = void 0;
4
+ const calm_client_1 = require("@mcp-abap-adt/calm-client");
5
+ const utils_1 = require("../../utils");
6
+ const DEFAULT_FIELDS = [
7
+ 'id',
8
+ 'projectId',
9
+ 'title',
10
+ 'status',
11
+ 'priorityId',
12
+ 'assigneeId',
13
+ 'dueDate',
14
+ ];
15
+ const ALLOWED_FIELDS = [
16
+ 'id',
17
+ 'projectId',
18
+ 'title',
19
+ 'description',
20
+ 'type',
21
+ 'status',
22
+ 'subStatus',
23
+ 'externalId',
24
+ 'dueDate',
25
+ 'priorityId',
26
+ 'assigneeId',
27
+ 'assigneeName',
28
+ 'timeboxName',
29
+ 'timeboxStartDate',
30
+ 'timeboxEndDate',
31
+ 'lastChangedDate',
32
+ ];
33
+ const definition = {
34
+ name: 'calm_tasks_list',
35
+ description: 'List tasks in a Cloud ALM project. Returns compact records (id, title, status, assignee, due date by default). Filter by status and/or assigneeId.',
36
+ inputSchema: {
37
+ type: 'object',
38
+ required: ['projectId'],
39
+ properties: {
40
+ projectId: {
41
+ type: 'string',
42
+ description: 'Project id (required scope).',
43
+ },
44
+ status: { type: 'string' },
45
+ assigneeId: { type: 'string' },
46
+ fields: {
47
+ type: 'array',
48
+ items: { type: 'string', enum: [...ALLOWED_FIELDS] },
49
+ },
50
+ limit: { type: 'integer', minimum: 1, maximum: utils_1.MAX_LIST_LIMIT },
51
+ offset: { type: 'integer', minimum: 0 },
52
+ withCount: { type: 'boolean' },
53
+ },
54
+ },
55
+ };
56
+ const handler = async (ctx, args) => {
57
+ if (!args?.projectId) {
58
+ throw new utils_1.CalmToolError({
59
+ code: 'INVALID_ARGUMENT',
60
+ message: 'projectId is required',
61
+ });
62
+ }
63
+ const limit = (0, utils_1.clampListLimit)(args.limit);
64
+ const offset = args.offset && args.offset > 0 ? Math.floor(args.offset) : 0;
65
+ const filter = (0, utils_1.joinAndFilters)(`projectId eq '${(0, utils_1.escapeODataString)(args.projectId)}'`, args.status ? `status eq '${(0, utils_1.escapeODataString)(args.status)}'` : undefined, args.assigneeId
66
+ ? `assigneeId eq '${(0, utils_1.escapeODataString)(args.assigneeId)}'`
67
+ : undefined);
68
+ const fields = args.fields && args.fields.length > 0 ? args.fields : DEFAULT_FIELDS;
69
+ let query = calm_client_1.ODataQuery.new()
70
+ .select([...fields])
71
+ .top(limit)
72
+ .skip(offset);
73
+ if (filter)
74
+ query = query.filter(filter);
75
+ if (args.withCount)
76
+ query = query.count();
77
+ try {
78
+ const collection = await ctx.calm.getTasks().list(query);
79
+ return (0, utils_1.toListResponse)(collection, { limit, offset });
80
+ }
81
+ catch (err) {
82
+ throw (0, utils_1.mapCalmErrorForTool)(err);
83
+ }
84
+ };
85
+ exports.listTasksTool = {
86
+ toolDefinition: definition,
87
+ handler,
88
+ };
89
+ //# sourceMappingURL=listTasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTasks.js","sourceRoot":"","sources":["../../../src/tools/tasks/listTasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ITestCase } from '@mcp-abap-adt/calm-client';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ export interface IGetTestCaseArgs {
4
+ uuid: string;
5
+ }
6
+ export declare const getTestCaseTool: ICalmHandlerEntry<IGetTestCaseArgs, ITestCase>;
7
+ //# sourceMappingURL=getTestCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTestCase.d.ts","sourceRoot":"","sources":["../../../src/tools/testCases/getTestCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAgCD,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,gBAAgB,EAAE,SAAS,CAG1E,CAAC"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTestCaseTool = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const definition = {
6
+ name: 'calm_test_cases_get',
7
+ description: 'Fetch a manual test case by UUID. Returns the full record with title, description, status, project scope.',
8
+ inputSchema: {
9
+ type: 'object',
10
+ required: ['uuid'],
11
+ properties: {
12
+ uuid: { type: 'string', description: 'Test case UUID.' },
13
+ },
14
+ },
15
+ };
16
+ const handler = async (ctx, args) => {
17
+ if (!args?.uuid) {
18
+ throw new utils_1.CalmToolError({
19
+ code: 'INVALID_ARGUMENT',
20
+ message: 'uuid is required',
21
+ });
22
+ }
23
+ try {
24
+ return await ctx.calm.getTestCases().get(args.uuid);
25
+ }
26
+ catch (err) {
27
+ throw (0, utils_1.mapCalmErrorForTool)(err);
28
+ }
29
+ };
30
+ exports.getTestCaseTool = {
31
+ toolDefinition: definition,
32
+ handler,
33
+ };
34
+ //# sourceMappingURL=getTestCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTestCase.js","sourceRoot":"","sources":["../../../src/tools/testCases/getTestCase.ts"],"names":[],"mappings":";;;AAMA,uCAAiE;AAMjE,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,2GAA2G;IAC7G,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;SACzD;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAAiD,KAAK,EACjE,GAAG,EACH,IAAI,EACJ,EAAE;IACF,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,qBAAa,CAAC;YACtB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,eAAe,GAAmD;IAC7E,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { HandlerGroup } from '../../registry/HandlerGroup';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ export type { IGetTestCaseArgs } from './getTestCase';
4
+ export { getTestCaseTool } from './getTestCase';
5
+ export type { IListTestCasesArgs } from './listTestCases';
6
+ export { listTestCasesTool } from './listTestCases';
7
+ export declare const TESTCASES_HANDLERS: readonly ICalmHandlerEntry[];
8
+ export declare const TESTCASES_GROUP: HandlerGroup;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/testCases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,eAAO,MAAM,kBAAkB,EAAE,SAAS,iBAAiB,EAG1D,CAAC;AAEF,eAAO,MAAM,eAAe,cAG3B,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TESTCASES_GROUP = exports.TESTCASES_HANDLERS = exports.listTestCasesTool = exports.getTestCaseTool = void 0;
4
+ const HandlerGroup_1 = require("../../registry/HandlerGroup");
5
+ const getTestCase_1 = require("./getTestCase");
6
+ const listTestCases_1 = require("./listTestCases");
7
+ var getTestCase_2 = require("./getTestCase");
8
+ Object.defineProperty(exports, "getTestCaseTool", { enumerable: true, get: function () { return getTestCase_2.getTestCaseTool; } });
9
+ var listTestCases_2 = require("./listTestCases");
10
+ Object.defineProperty(exports, "listTestCasesTool", { enumerable: true, get: function () { return listTestCases_2.listTestCasesTool; } });
11
+ exports.TESTCASES_HANDLERS = [
12
+ listTestCases_1.listTestCasesTool,
13
+ getTestCase_1.getTestCaseTool,
14
+ ];
15
+ exports.TESTCASES_GROUP = new HandlerGroup_1.HandlerGroup('testCases', exports.TESTCASES_HANDLERS);
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/testCases/index.ts"],"names":[],"mappings":";;;AAAA,8DAA2D;AAE3D,+CAAgD;AAChD,mDAAoD;AAGpD,6CAAgD;AAAvC,8GAAA,eAAe,OAAA;AAExB,iDAAoD;AAA3C,kHAAA,iBAAiB,OAAA;AAEb,QAAA,kBAAkB,GAAiC;IAC9D,iCAAiB;IACjB,6BAAe;CAChB,CAAC;AAEW,QAAA,eAAe,GAAG,IAAI,2BAAY,CAC7C,WAAW,EACX,0BAAkB,CACnB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type ITestCase } from '@mcp-abap-adt/calm-client';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ import { type IListResponse } from '../../utils';
4
+ declare const ALLOWED_FIELDS: readonly ["uuid", "title", "description", "statusCode", "projectId", "modifiedAt", "createdAt"];
5
+ type AllowedField = (typeof ALLOWED_FIELDS)[number];
6
+ export interface IListTestCasesArgs {
7
+ projectId?: string;
8
+ status?: string;
9
+ fields?: AllowedField[];
10
+ limit?: number;
11
+ offset?: number;
12
+ withCount?: boolean;
13
+ }
14
+ export declare const listTestCasesTool: ICalmHandlerEntry<IListTestCasesArgs, IListResponse<Partial<ITestCase>>>;
15
+ export {};
16
+ //# sourceMappingURL=listTestCases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTestCases.d.ts","sourceRoot":"","sources":["../../../src/tools/testCases/listTestCases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAC;AAUrB,QAAA,MAAM,cAAc,iGAQV,CAAC;AACX,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAqDD,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,CAC/C,kBAAkB,EAClB,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAIlC,CAAC"}