@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,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDocumentTool = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const definition = {
6
+ name: 'calm_documents_get',
7
+ description: 'Fetch a Cloud ALM document by UUID. Returns the full document record including `content`.',
8
+ inputSchema: {
9
+ type: 'object',
10
+ required: ['uuid'],
11
+ properties: {
12
+ uuid: { type: 'string', description: 'Document 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.getDocuments().get(args.uuid);
25
+ }
26
+ catch (err) {
27
+ throw (0, utils_1.mapCalmErrorForTool)(err);
28
+ }
29
+ };
30
+ exports.getDocumentTool = {
31
+ toolDefinition: definition,
32
+ handler,
33
+ };
34
+ //# sourceMappingURL=getDocument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDocument.js","sourceRoot":"","sources":["../../../src/tools/documents/getDocument.ts"],"names":[],"mappings":";;;AAMA,uCAAiE;AAMjE,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,2FAA2F;IAC7F,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,gBAAgB,EAAE;SACxD;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 { IGetDocumentArgs } from './getDocument';
4
+ export { getDocumentTool } from './getDocument';
5
+ export type { IListDocumentsArgs } from './listDocuments';
6
+ export { listDocumentsTool } from './listDocuments';
7
+ export declare const DOCUMENTS_HANDLERS: readonly ICalmHandlerEntry[];
8
+ export declare const DOCUMENTS_GROUP: HandlerGroup;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/documents/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.DOCUMENTS_GROUP = exports.DOCUMENTS_HANDLERS = exports.listDocumentsTool = exports.getDocumentTool = void 0;
4
+ const HandlerGroup_1 = require("../../registry/HandlerGroup");
5
+ const getDocument_1 = require("./getDocument");
6
+ const listDocuments_1 = require("./listDocuments");
7
+ var getDocument_2 = require("./getDocument");
8
+ Object.defineProperty(exports, "getDocumentTool", { enumerable: true, get: function () { return getDocument_2.getDocumentTool; } });
9
+ var listDocuments_2 = require("./listDocuments");
10
+ Object.defineProperty(exports, "listDocumentsTool", { enumerable: true, get: function () { return listDocuments_2.listDocumentsTool; } });
11
+ exports.DOCUMENTS_HANDLERS = [
12
+ listDocuments_1.listDocumentsTool,
13
+ getDocument_1.getDocumentTool,
14
+ ];
15
+ exports.DOCUMENTS_GROUP = new HandlerGroup_1.HandlerGroup('documents', exports.DOCUMENTS_HANDLERS);
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/documents/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 IDocument } 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", "displayId", "title", "content", "statusCode", "priorityCode", "documentTypeCode", "sourceCode", "projectId", "scopeId", "modifiedAt", "createdAt", "tags"];
5
+ type AllowedField = (typeof ALLOWED_FIELDS)[number];
6
+ export interface IListDocumentsArgs {
7
+ projectId?: string;
8
+ typeCode?: string;
9
+ fields?: AllowedField[];
10
+ limit?: number;
11
+ offset?: number;
12
+ withCount?: boolean;
13
+ }
14
+ export declare const listDocumentsTool: ICalmHandlerEntry<IListDocumentsArgs, IListResponse<Partial<IDocument>>>;
15
+ export {};
16
+ //# sourceMappingURL=listDocuments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listDocuments.d.ts","sourceRoot":"","sources":["../../../src/tools/documents/listDocuments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAIL,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAC;AAWrB,QAAA,MAAM,cAAc,+KAcV,CAAC;AACX,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,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,iBAAiB,EAAE,iBAAiB,CAC/C,kBAAkB,EAClB,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAIlC,CAAC"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listDocumentsTool = void 0;
4
+ const calm_client_1 = require("@mcp-abap-adt/calm-client");
5
+ const utils_1 = require("../../utils");
6
+ const DEFAULT_FIELDS = [
7
+ 'uuid',
8
+ 'displayId',
9
+ 'title',
10
+ 'documentTypeCode',
11
+ 'statusCode',
12
+ 'modifiedAt',
13
+ ];
14
+ const ALLOWED_FIELDS = [
15
+ 'uuid',
16
+ 'displayId',
17
+ 'title',
18
+ 'content',
19
+ 'statusCode',
20
+ 'priorityCode',
21
+ 'documentTypeCode',
22
+ 'sourceCode',
23
+ 'projectId',
24
+ 'scopeId',
25
+ 'modifiedAt',
26
+ 'createdAt',
27
+ 'tags',
28
+ ];
29
+ const definition = {
30
+ name: 'calm_documents_list',
31
+ description: 'List Cloud ALM documents, optionally scoped to a project or a document type. Returns compact records by default. Use calm_documents_list_types to discover valid typeCode values.',
32
+ inputSchema: {
33
+ type: 'object',
34
+ properties: {
35
+ projectId: { type: 'string', description: 'Scope to a project.' },
36
+ typeCode: {
37
+ type: 'string',
38
+ description: 'Filter by documentTypeCode. On write the API uses `typeCode`; on read it returns `documentTypeCode`.',
39
+ },
40
+ fields: {
41
+ type: 'array',
42
+ description: 'Subset of fields to return.',
43
+ items: { type: 'string', enum: [...ALLOWED_FIELDS] },
44
+ },
45
+ limit: {
46
+ type: 'integer',
47
+ minimum: 1,
48
+ maximum: utils_1.MAX_LIST_LIMIT,
49
+ description: `Default ${utils_1.DEFAULT_LIST_LIMIT}, max ${utils_1.MAX_LIST_LIMIT}.`,
50
+ },
51
+ offset: { type: 'integer', minimum: 0 },
52
+ withCount: { type: 'boolean' },
53
+ },
54
+ },
55
+ };
56
+ const handler = async (ctx, args) => {
57
+ const limit = (0, utils_1.clampListLimit)(args?.limit);
58
+ const offset = args?.offset && args.offset > 0 ? Math.floor(args.offset) : 0;
59
+ const filter = (0, utils_1.joinAndFilters)(args?.projectId
60
+ ? `projectId eq '${(0, utils_1.escapeODataString)(args.projectId)}'`
61
+ : undefined, args?.typeCode
62
+ ? `documentTypeCode eq '${(0, utils_1.escapeODataString)(args.typeCode)}'`
63
+ : undefined);
64
+ const fields = args?.fields && args.fields.length > 0 ? args.fields : DEFAULT_FIELDS;
65
+ let query = calm_client_1.ODataQuery.new()
66
+ .select([...fields])
67
+ .top(limit)
68
+ .skip(offset);
69
+ if (filter)
70
+ query = query.filter(filter);
71
+ if (args?.withCount)
72
+ query = query.count();
73
+ try {
74
+ const collection = await ctx.calm.getDocuments().list(query);
75
+ return (0, utils_1.toListResponse)(collection, { limit, offset });
76
+ }
77
+ catch (err) {
78
+ throw (0, utils_1.mapCalmErrorForTool)(err);
79
+ }
80
+ };
81
+ exports.listDocumentsTool = {
82
+ toolDefinition: definition,
83
+ handler,
84
+ };
85
+ //# sourceMappingURL=listDocuments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listDocuments.js","sourceRoot":"","sources":["../../../src/tools/documents/listDocuments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ICreateFeatureParams, IFeature } from '@mcp-abap-adt/calm-client';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ export type ICreateFeatureArgs = ICreateFeatureParams;
4
+ export declare const createFeatureTool: ICalmHandlerEntry<ICreateFeatureArgs, IFeature>;
5
+ //# sourceMappingURL=createFeature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFeature.d.ts","sourceRoot":"","sources":["../../../src/tools/features/createFeature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAuDtD,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,CAC/C,kBAAkB,EAClB,QAAQ,CAIT,CAAC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createFeatureTool = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const definition = {
6
+ name: 'calm_features_create',
7
+ description: 'Create a new Cloud ALM feature. Destructive. Requires `title` and `projectId`; other fields are optional. Returns the newly created feature (including the server-generated UUID and displayId).',
8
+ inputSchema: {
9
+ type: 'object',
10
+ required: ['title', 'projectId'],
11
+ properties: {
12
+ title: {
13
+ type: 'string',
14
+ description: 'Short, human-readable feature title.',
15
+ },
16
+ projectId: {
17
+ type: 'string',
18
+ description: 'Cloud ALM project identifier the feature belongs to.',
19
+ },
20
+ description: {
21
+ type: 'string',
22
+ description: 'Optional long-form description.',
23
+ },
24
+ priorityCode: {
25
+ type: 'string',
26
+ description: 'Optional priority code (string on write). Discover valid values via calm_features_list_priorities.',
27
+ },
28
+ statusCode: {
29
+ type: 'string',
30
+ description: 'Optional starting status code. Discover valid values via calm_features_list_statuses.',
31
+ },
32
+ releaseId: { type: 'string', description: 'Optional release id.' },
33
+ scopeId: { type: 'string', description: 'Optional scope id.' },
34
+ },
35
+ },
36
+ };
37
+ const handler = async (ctx, args) => {
38
+ if (!args?.title || !args?.projectId) {
39
+ throw new utils_1.CalmToolError({
40
+ code: 'INVALID_ARGUMENT',
41
+ message: 'title and projectId are required',
42
+ });
43
+ }
44
+ try {
45
+ return await ctx.calm.getFeatures().create(args);
46
+ }
47
+ catch (err) {
48
+ throw (0, utils_1.mapCalmErrorForTool)(err);
49
+ }
50
+ };
51
+ exports.createFeatureTool = {
52
+ toolDefinition: definition,
53
+ handler,
54
+ };
55
+ //# sourceMappingURL=createFeature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFeature.js","sourceRoot":"","sources":["../../../src/tools/features/createFeature.ts"],"names":[],"mappings":";;;AAMA,uCAAiE;AAIjE,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,kMAAkM;IACpM,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;QAChC,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;aACpD;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sDAAsD;aACpE;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,oGAAoG;aACvG;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,uFAAuF;aAC1F;YACD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;YAClE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;SAC/D;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAAkD,KAAK,EAClE,GAAG,EACH,IAAI,EACJ,EAAE;IACF,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;QACrC,MAAM,IAAI,qBAAa,CAAC;YACtB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,kCAAkC;SAC5C,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,iBAAiB,GAG1B;IACF,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ICalmHandlerEntry } from '../../registry/types';
2
+ export interface IDeleteFeatureArgs {
3
+ uuid: string;
4
+ }
5
+ export interface IDeleteFeatureResult {
6
+ deleted: true;
7
+ uuid: string;
8
+ }
9
+ export declare const deleteFeatureTool: ICalmHandlerEntry<IDeleteFeatureArgs, IDeleteFeatureResult>;
10
+ //# sourceMappingURL=deleteFeature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteFeature.d.ts","sourceRoot":"","sources":["../../../src/tools/features/deleteFeature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAiCD,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,CAC/C,kBAAkB,EAClB,oBAAoB,CAIrB,CAAC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteFeatureTool = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const definition = {
6
+ name: 'calm_features_delete',
7
+ description: 'Delete a Cloud ALM feature by its UUID. Destructive. Returns a confirmation object; raises NOT_FOUND if the feature does not exist. Does not cascade to child entities — clean those up explicitly first.',
8
+ inputSchema: {
9
+ type: 'object',
10
+ required: ['uuid'],
11
+ properties: {
12
+ uuid: { type: 'string', description: 'Feature UUID to delete.' },
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
+ await ctx.calm.getFeatures().delete(args.uuid);
25
+ return { deleted: true, uuid: args.uuid };
26
+ }
27
+ catch (err) {
28
+ throw (0, utils_1.mapCalmErrorForTool)(err);
29
+ }
30
+ };
31
+ exports.deleteFeatureTool = {
32
+ toolDefinition: definition,
33
+ handler,
34
+ };
35
+ //# sourceMappingURL=deleteFeature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteFeature.js","sourceRoot":"","sources":["../../../src/tools/features/deleteFeature.ts"],"names":[],"mappings":";;;AAKA,uCAAiE;AAWjE,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,2MAA2M;IAC7M,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,yBAAyB,EAAE;SACjE;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAGT,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACtB,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,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,iBAAiB,GAG1B;IACF,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { IFeature } from '@mcp-abap-adt/calm-client';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ export interface IGetFeatureArgs {
4
+ uuid: string;
5
+ }
6
+ export declare const getFeatureTool: ICalmHandlerEntry<IGetFeatureArgs, IFeature>;
7
+ //# sourceMappingURL=getFeature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFeature.d.ts","sourceRoot":"","sources":["../../../src/tools/features/getFeature.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,IAAI,EAAE,MAAM,CAAC;CACd;AAmCD,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,eAAe,EAAE,QAAQ,CAGvE,CAAC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFeatureTool = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const definition = {
6
+ name: 'calm_features_get',
7
+ description: 'Fetch a single Cloud ALM feature by its UUID. Use this after `calm_features_list` has given you candidate UUIDs. Returns the full feature record (all fields).',
8
+ inputSchema: {
9
+ type: 'object',
10
+ required: ['uuid'],
11
+ properties: {
12
+ uuid: {
13
+ type: 'string',
14
+ description: 'Feature UUID (from a prior list result or a known key).',
15
+ },
16
+ },
17
+ },
18
+ };
19
+ const handler = async (ctx, args) => {
20
+ if (!args?.uuid) {
21
+ throw new utils_1.CalmToolError({
22
+ code: 'INVALID_ARGUMENT',
23
+ message: 'uuid is required',
24
+ });
25
+ }
26
+ try {
27
+ return await ctx.calm.getFeatures().get(args.uuid);
28
+ }
29
+ catch (err) {
30
+ throw (0, utils_1.mapCalmErrorForTool)(err);
31
+ }
32
+ };
33
+ exports.getFeatureTool = {
34
+ toolDefinition: definition,
35
+ handler,
36
+ };
37
+ //# sourceMappingURL=getFeature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFeature.js","sourceRoot":"","sources":["../../../src/tools/features/getFeature.ts"],"names":[],"mappings":";;;AAMA,uCAAiE;AAMjE,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,gKAAgK;IAClK,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yDAAyD;aACvE;SACF;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAA+C,KAAK,EAC/D,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,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,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,7 @@
1
+ import type { IFeature } from '@mcp-abap-adt/calm-client';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ export interface IGetFeatureByDisplayIdArgs {
4
+ displayId: string;
5
+ }
6
+ export declare const getFeatureByDisplayIdTool: ICalmHandlerEntry<IGetFeatureByDisplayIdArgs, IFeature>;
7
+ //# sourceMappingURL=getFeatureByDisplayId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFeatureByDisplayId.d.ts","sourceRoot":"","sources":["../../../src/tools/features/getFeatureByDisplayId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;CACnB;AAmCD,eAAO,MAAM,yBAAyB,EAAE,iBAAiB,CACvD,0BAA0B,EAC1B,QAAQ,CAIT,CAAC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFeatureByDisplayIdTool = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const definition = {
6
+ name: 'calm_features_get_by_display_id',
7
+ description: 'Fetch a Cloud ALM feature by its human-facing displayId (e.g. "6-123" where 6 is the project number and 123 is the feature sequence). Use when the user references features by display id rather than UUID. Returns the full feature record. Raises NOT_FOUND if no feature matches.',
8
+ inputSchema: {
9
+ type: 'object',
10
+ required: ['displayId'],
11
+ properties: {
12
+ displayId: {
13
+ type: 'string',
14
+ description: 'Feature displayId, e.g. "6-123".',
15
+ },
16
+ },
17
+ },
18
+ };
19
+ const handler = async (ctx, args) => {
20
+ if (!args?.displayId) {
21
+ throw new utils_1.CalmToolError({
22
+ code: 'INVALID_ARGUMENT',
23
+ message: 'displayId is required',
24
+ });
25
+ }
26
+ try {
27
+ return await ctx.calm.getFeatures().getByDisplayId(args.displayId);
28
+ }
29
+ catch (err) {
30
+ throw (0, utils_1.mapCalmErrorForTool)(err);
31
+ }
32
+ };
33
+ exports.getFeatureByDisplayIdTool = {
34
+ toolDefinition: definition,
35
+ handler,
36
+ };
37
+ //# sourceMappingURL=getFeatureByDisplayId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFeatureByDisplayId.js","sourceRoot":"","sources":["../../../src/tools/features/getFeatureByDisplayId.ts"],"names":[],"mappings":";;;AAMA,uCAAiE;AAMjE,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,iCAAiC;IACvC,WAAW,EACT,sRAAsR;IACxR,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;SACF;KACF;CACF,CAAC;AAEF,MAAM,OAAO,GAA0D,KAAK,EAC1E,GAAG,EACH,IAAI,EACJ,EAAE;IACF,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,qBAAa,CAAC;YACtB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,uBAAuB;SACjC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrE,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,21 @@
1
+ import { HandlerGroup } from '../../registry/HandlerGroup';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ export type { ICreateFeatureArgs } from './createFeature';
4
+ export { createFeatureTool } from './createFeature';
5
+ export type { IDeleteFeatureArgs, IDeleteFeatureResult, } from './deleteFeature';
6
+ export { deleteFeatureTool } from './deleteFeature';
7
+ export type { IGetFeatureArgs } from './getFeature';
8
+ export { getFeatureTool } from './getFeature';
9
+ export type { IGetFeatureByDisplayIdArgs } from './getFeatureByDisplayId';
10
+ export { getFeatureByDisplayIdTool } from './getFeatureByDisplayId';
11
+ export type { IListFeaturePrioritiesResult } from './listFeaturePriorities';
12
+ export { listFeaturePrioritiesTool } from './listFeaturePriorities';
13
+ export type { IListFeatureStatusesResult } from './listFeatureStatuses';
14
+ export { listFeatureStatusesTool } from './listFeatureStatuses';
15
+ export type { IListFeaturesArgs } from './listFeatures';
16
+ export { listFeaturesTool } from './listFeatures';
17
+ export type { IUpdateFeatureArgs } from './updateFeature';
18
+ export { updateFeatureTool } from './updateFeature';
19
+ export declare const FEATURES_HANDLERS: readonly ICalmHandlerEntry[];
20
+ export declare const FEATURES_GROUP: HandlerGroup;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/features/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAU9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EACV,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,YAAY,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,YAAY,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,eAAO,MAAM,iBAAiB,EAAE,SAAS,iBAAiB,EASzD,CAAC;AAEF,eAAO,MAAM,cAAc,cAAkD,CAAC"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FEATURES_GROUP = exports.FEATURES_HANDLERS = exports.updateFeatureTool = exports.listFeaturesTool = exports.listFeatureStatusesTool = exports.listFeaturePrioritiesTool = exports.getFeatureByDisplayIdTool = exports.getFeatureTool = exports.deleteFeatureTool = exports.createFeatureTool = void 0;
4
+ const HandlerGroup_1 = require("../../registry/HandlerGroup");
5
+ const createFeature_1 = require("./createFeature");
6
+ const deleteFeature_1 = require("./deleteFeature");
7
+ const getFeature_1 = require("./getFeature");
8
+ const getFeatureByDisplayId_1 = require("./getFeatureByDisplayId");
9
+ const listFeaturePriorities_1 = require("./listFeaturePriorities");
10
+ const listFeatureStatuses_1 = require("./listFeatureStatuses");
11
+ const listFeatures_1 = require("./listFeatures");
12
+ const updateFeature_1 = require("./updateFeature");
13
+ var createFeature_2 = require("./createFeature");
14
+ Object.defineProperty(exports, "createFeatureTool", { enumerable: true, get: function () { return createFeature_2.createFeatureTool; } });
15
+ var deleteFeature_2 = require("./deleteFeature");
16
+ Object.defineProperty(exports, "deleteFeatureTool", { enumerable: true, get: function () { return deleteFeature_2.deleteFeatureTool; } });
17
+ var getFeature_2 = require("./getFeature");
18
+ Object.defineProperty(exports, "getFeatureTool", { enumerable: true, get: function () { return getFeature_2.getFeatureTool; } });
19
+ var getFeatureByDisplayId_2 = require("./getFeatureByDisplayId");
20
+ Object.defineProperty(exports, "getFeatureByDisplayIdTool", { enumerable: true, get: function () { return getFeatureByDisplayId_2.getFeatureByDisplayIdTool; } });
21
+ var listFeaturePriorities_2 = require("./listFeaturePriorities");
22
+ Object.defineProperty(exports, "listFeaturePrioritiesTool", { enumerable: true, get: function () { return listFeaturePriorities_2.listFeaturePrioritiesTool; } });
23
+ var listFeatureStatuses_2 = require("./listFeatureStatuses");
24
+ Object.defineProperty(exports, "listFeatureStatusesTool", { enumerable: true, get: function () { return listFeatureStatuses_2.listFeatureStatusesTool; } });
25
+ var listFeatures_2 = require("./listFeatures");
26
+ Object.defineProperty(exports, "listFeaturesTool", { enumerable: true, get: function () { return listFeatures_2.listFeaturesTool; } });
27
+ var updateFeature_2 = require("./updateFeature");
28
+ Object.defineProperty(exports, "updateFeatureTool", { enumerable: true, get: function () { return updateFeature_2.updateFeatureTool; } });
29
+ exports.FEATURES_HANDLERS = [
30
+ listFeatures_1.listFeaturesTool,
31
+ getFeature_1.getFeatureTool,
32
+ getFeatureByDisplayId_1.getFeatureByDisplayIdTool,
33
+ createFeature_1.createFeatureTool,
34
+ updateFeature_1.updateFeatureTool,
35
+ deleteFeature_1.deleteFeatureTool,
36
+ listFeatureStatuses_1.listFeatureStatusesTool,
37
+ listFeaturePriorities_1.listFeaturePrioritiesTool,
38
+ ];
39
+ exports.FEATURES_GROUP = new HandlerGroup_1.HandlerGroup('features', exports.FEATURES_HANDLERS);
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/features/index.ts"],"names":[],"mappings":";;;AAAA,8DAA2D;AAE3D,mDAAoD;AACpD,mDAAoD;AACpD,6CAA8C;AAC9C,mEAAoE;AACpE,mEAAoE;AACpE,+DAAgE;AAChE,iDAAkD;AAClD,mDAAoD;AAGpD,iDAAoD;AAA3C,kHAAA,iBAAiB,OAAA;AAK1B,iDAAoD;AAA3C,kHAAA,iBAAiB,OAAA;AAE1B,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAEvB,iEAAoE;AAA3D,kIAAA,yBAAyB,OAAA;AAElC,iEAAoE;AAA3D,kIAAA,yBAAyB,OAAA;AAElC,6DAAgE;AAAvD,8HAAA,uBAAuB,OAAA;AAEhC,+CAAkD;AAAzC,gHAAA,gBAAgB,OAAA;AAEzB,iDAAoD;AAA3C,kHAAA,iBAAiB,OAAA;AAEb,QAAA,iBAAiB,GAAiC;IAC7D,+BAAgB;IAChB,2BAAc;IACd,iDAAyB;IACzB,iCAAiB;IACjB,iCAAiB;IACjB,iCAAiB;IACjB,6CAAuB;IACvB,iDAAyB;CAC1B,CAAC;AAEW,QAAA,cAAc,GAAG,IAAI,2BAAY,CAAC,UAAU,EAAE,yBAAiB,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { IFeaturePriority } from '@mcp-abap-adt/calm-client';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ export interface IListFeaturePrioritiesResult {
4
+ items: IFeaturePriority[];
5
+ }
6
+ export declare const listFeaturePrioritiesTool: ICalmHandlerEntry<unknown, IListFeaturePrioritiesResult>;
7
+ //# sourceMappingURL=listFeaturePriorities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listFeaturePriorities.d.ts","sourceRoot":"","sources":["../../../src/tools/features/listFeaturePriorities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAoBD,eAAO,MAAM,yBAAyB,EAAE,iBAAiB,CACvD,OAAO,EACP,4BAA4B,CAI7B,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listFeaturePrioritiesTool = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const definition = {
6
+ name: 'calm_features_list_priorities',
7
+ description: 'List the valid priority codes for Cloud ALM features (tenant-wide lookup). Use to map numeric priority values returned on read to human names, or to discover values accepted by calm_features_create / calm_features_update.',
8
+ inputSchema: { type: 'object', properties: {} },
9
+ };
10
+ const handler = async (ctx) => {
11
+ try {
12
+ const collection = await ctx.calm.getFeatures().listPriorities();
13
+ return { items: collection.value ?? [] };
14
+ }
15
+ catch (err) {
16
+ throw (0, utils_1.mapCalmErrorForTool)(err);
17
+ }
18
+ };
19
+ exports.listFeaturePrioritiesTool = {
20
+ toolDefinition: definition,
21
+ handler,
22
+ };
23
+ //# sourceMappingURL=listFeaturePriorities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listFeaturePriorities.js","sourceRoot":"","sources":["../../../src/tools/features/listFeaturePriorities.ts"],"names":[],"mappings":";;;AAMA,uCAAkD;AAMlD,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,+BAA+B;IACrC,WAAW,EACT,+NAA+N;IACjO,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;CAChD,CAAC;AAEF,MAAM,OAAO,GAA2D,KAAK,EAC3E,GAAG,EACH,EAAE;IACF,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE,CAAC;QACjE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;IAC3C,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 { IFeatureStatus } from '@mcp-abap-adt/calm-client';
2
+ import type { ICalmHandlerEntry } from '../../registry/types';
3
+ export interface IListFeatureStatusesResult {
4
+ items: IFeatureStatus[];
5
+ }
6
+ export declare const listFeatureStatusesTool: ICalmHandlerEntry<unknown, IListFeatureStatusesResult>;
7
+ //# sourceMappingURL=listFeatureStatuses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listFeatureStatuses.d.ts","sourceRoot":"","sources":["../../../src/tools/features/listFeatureStatuses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAoBD,eAAO,MAAM,uBAAuB,EAAE,iBAAiB,CACrD,OAAO,EACP,0BAA0B,CAI3B,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listFeatureStatusesTool = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const definition = {
6
+ name: 'calm_features_list_statuses',
7
+ description: 'List the valid status codes for Cloud ALM features (tenant-wide lookup). Use to discover the vocabulary for the `status` filter on calm_features_list or the `statusCode` arg on create/update.',
8
+ inputSchema: { type: 'object', properties: {} },
9
+ };
10
+ const handler = async (ctx) => {
11
+ try {
12
+ const collection = await ctx.calm.getFeatures().listStatuses();
13
+ return { items: collection.value ?? [] };
14
+ }
15
+ catch (err) {
16
+ throw (0, utils_1.mapCalmErrorForTool)(err);
17
+ }
18
+ };
19
+ exports.listFeatureStatusesTool = {
20
+ toolDefinition: definition,
21
+ handler,
22
+ };
23
+ //# sourceMappingURL=listFeatureStatuses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listFeatureStatuses.js","sourceRoot":"","sources":["../../../src/tools/features/listFeatureStatuses.ts"],"names":[],"mappings":";;;AAMA,uCAAkD;AAMlD,MAAM,UAAU,GAAwB;IACtC,IAAI,EAAE,6BAA6B;IACnC,WAAW,EACT,iMAAiM;IACnM,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;CAChD,CAAC;AAEF,MAAM,OAAO,GAAyD,KAAK,EACzE,GAAG,EACH,EAAE;IACF,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,CAAC;QAC/D,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,uBAAuB,GAGhC;IACF,cAAc,EAAE,UAAU;IAC1B,OAAO;CACR,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type IFeature } 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", "displayId", "title", "description", "projectId", "statusCode", "priorityCode", "releaseId", "scopeId", "responsibleId", "modifiedAt", "createdAt", "type", "workstreamId", "tags"];
5
+ type AllowedField = (typeof ALLOWED_FIELDS)[number];
6
+ export interface IListFeaturesArgs {
7
+ projectId: string;
8
+ status?: string;
9
+ priorityCode?: string;
10
+ responsibleId?: string;
11
+ fields?: AllowedField[];
12
+ limit?: number;
13
+ offset?: number;
14
+ /** Return `@odata.count` so the LLM knows whether to paginate. */
15
+ withCount?: boolean;
16
+ }
17
+ export declare const listFeaturesTool: ICalmHandlerEntry<IListFeaturesArgs, IListResponse<Partial<IFeature>>>;
18
+ export {};
19
+ //# sourceMappingURL=listFeatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listFeatures.d.ts","sourceRoot":"","sources":["../../../src/tools/features/listFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAKL,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAC;AAgBrB,QAAA,MAAM,cAAc,uMAgBV,CAAC;AACX,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA2GD,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,CAC9C,iBAAiB,EACjB,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAIjC,CAAC"}