callman-mcp 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 (244) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/LICENSE +21 -0
  3. package/README.md +203 -0
  4. package/dist/client/api.d.ts +109 -0
  5. package/dist/client/api.d.ts.map +1 -0
  6. package/dist/client/api.js +180 -0
  7. package/dist/client/api.js.map +1 -0
  8. package/dist/client/errors.d.ts +27 -0
  9. package/dist/client/errors.d.ts.map +1 -0
  10. package/dist/client/errors.js +98 -0
  11. package/dist/client/errors.js.map +1 -0
  12. package/dist/client/http.d.ts +34 -0
  13. package/dist/client/http.d.ts.map +1 -0
  14. package/dist/client/http.js +121 -0
  15. package/dist/client/http.js.map +1 -0
  16. package/dist/client/types.d.ts +327 -0
  17. package/dist/client/types.d.ts.map +1 -0
  18. package/dist/client/types.js +5 -0
  19. package/dist/client/types.js.map +1 -0
  20. package/dist/config.d.ts +20 -0
  21. package/dist/config.d.ts.map +1 -0
  22. package/dist/config.js +69 -0
  23. package/dist/config.js.map +1 -0
  24. package/dist/context.d.ts +35 -0
  25. package/dist/context.d.ts.map +1 -0
  26. package/dist/context.js +91 -0
  27. package/dist/context.js.map +1 -0
  28. package/dist/domain/diagram/build.d.ts +260 -0
  29. package/dist/domain/diagram/build.d.ts.map +1 -0
  30. package/dist/domain/diagram/build.js +160 -0
  31. package/dist/domain/diagram/build.js.map +1 -0
  32. package/dist/domain/diagram/layout.d.ts +17 -0
  33. package/dist/domain/diagram/layout.d.ts.map +1 -0
  34. package/dist/domain/diagram/layout.js +61 -0
  35. package/dist/domain/diagram/layout.js.map +1 -0
  36. package/dist/domain/diagram/patch.d.ts +330 -0
  37. package/dist/domain/diagram/patch.d.ts.map +1 -0
  38. package/dist/domain/diagram/patch.js +176 -0
  39. package/dist/domain/diagram/patch.js.map +1 -0
  40. package/dist/domain/diagram/summarize.d.ts +41 -0
  41. package/dist/domain/diagram/summarize.d.ts.map +1 -0
  42. package/dist/domain/diagram/summarize.js +47 -0
  43. package/dist/domain/diagram/summarize.js.map +1 -0
  44. package/dist/domain/importDetect.d.ts +6 -0
  45. package/dist/domain/importDetect.d.ts.map +1 -0
  46. package/dist/domain/importDetect.js +32 -0
  47. package/dist/domain/importDetect.js.map +1 -0
  48. package/dist/domain/requestShape.d.ts +796 -0
  49. package/dist/domain/requestShape.d.ts.map +1 -0
  50. package/dist/domain/requestShape.js +250 -0
  51. package/dist/domain/requestShape.js.map +1 -0
  52. package/dist/domain/resolve.d.ts +30 -0
  53. package/dist/domain/resolve.d.ts.map +1 -0
  54. package/dist/domain/resolve.js +56 -0
  55. package/dist/domain/resolve.js.map +1 -0
  56. package/dist/domain/scenario/build.d.ts +270 -0
  57. package/dist/domain/scenario/build.d.ts.map +1 -0
  58. package/dist/domain/scenario/build.js +135 -0
  59. package/dist/domain/scenario/build.js.map +1 -0
  60. package/dist/domain/scenario/summarize.d.ts +206 -0
  61. package/dist/domain/scenario/summarize.d.ts.map +1 -0
  62. package/dist/domain/scenario/summarize.js +138 -0
  63. package/dist/domain/scenario/summarize.js.map +1 -0
  64. package/dist/index.d.ts +3 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +142 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/lib/cache.d.ts +12 -0
  69. package/dist/lib/cache.d.ts.map +1 -0
  70. package/dist/lib/cache.js +40 -0
  71. package/dist/lib/cache.js.map +1 -0
  72. package/dist/lib/ids.d.ts +5 -0
  73. package/dist/lib/ids.d.ts.map +1 -0
  74. package/dist/lib/ids.js +19 -0
  75. package/dist/lib/ids.js.map +1 -0
  76. package/dist/lib/log.d.ts +10 -0
  77. package/dist/lib/log.d.ts.map +1 -0
  78. package/dist/lib/log.js +25 -0
  79. package/dist/lib/log.js.map +1 -0
  80. package/dist/lib/mask.d.ts +24 -0
  81. package/dist/lib/mask.d.ts.map +1 -0
  82. package/dist/lib/mask.js +63 -0
  83. package/dist/lib/mask.js.map +1 -0
  84. package/dist/lib/pagination.d.ts +21 -0
  85. package/dist/lib/pagination.d.ts.map +1 -0
  86. package/dist/lib/pagination.js +40 -0
  87. package/dist/lib/pagination.js.map +1 -0
  88. package/dist/lib/truncate.d.ts +25 -0
  89. package/dist/lib/truncate.d.ts.map +1 -0
  90. package/dist/lib/truncate.js +45 -0
  91. package/dist/lib/truncate.js.map +1 -0
  92. package/dist/main.d.ts +9 -0
  93. package/dist/main.d.ts.map +1 -0
  94. package/dist/main.js +12 -0
  95. package/dist/main.js.map +1 -0
  96. package/dist/prompts/index.d.ts +4 -0
  97. package/dist/prompts/index.d.ts.map +1 -0
  98. package/dist/prompts/index.js +72 -0
  99. package/dist/prompts/index.js.map +1 -0
  100. package/dist/resources/docs/diagramSchema.d.ts +2 -0
  101. package/dist/resources/docs/diagramSchema.d.ts.map +1 -0
  102. package/dist/resources/docs/diagramSchema.js +65 -0
  103. package/dist/resources/docs/diagramSchema.js.map +1 -0
  104. package/dist/resources/docs/overview.d.ts +2 -0
  105. package/dist/resources/docs/overview.d.ts.map +1 -0
  106. package/dist/resources/docs/overview.js +46 -0
  107. package/dist/resources/docs/overview.js.map +1 -0
  108. package/dist/resources/docs/requestSchema.d.ts +2 -0
  109. package/dist/resources/docs/requestSchema.d.ts.map +1 -0
  110. package/dist/resources/docs/requestSchema.js +70 -0
  111. package/dist/resources/docs/requestSchema.js.map +1 -0
  112. package/dist/resources/generated/aiPacks.d.ts +3 -0
  113. package/dist/resources/generated/aiPacks.d.ts.map +1 -0
  114. package/dist/resources/generated/aiPacks.js +11 -0
  115. package/dist/resources/generated/aiPacks.js.map +1 -0
  116. package/dist/resources/index.d.ts +4 -0
  117. package/dist/resources/index.d.ts.map +1 -0
  118. package/dist/resources/index.js +114 -0
  119. package/dist/resources/index.js.map +1 -0
  120. package/dist/run/executeCollection.d.ts +19 -0
  121. package/dist/run/executeCollection.d.ts.map +1 -0
  122. package/dist/run/executeCollection.js +89 -0
  123. package/dist/run/executeCollection.js.map +1 -0
  124. package/dist/run/loadBundle.d.ts +9 -0
  125. package/dist/run/loadBundle.d.ts.map +1 -0
  126. package/dist/run/loadBundle.js +242 -0
  127. package/dist/run/loadBundle.js.map +1 -0
  128. package/dist/run/resolveTemplate.d.ts +2 -0
  129. package/dist/run/resolveTemplate.d.ts.map +1 -0
  130. package/dist/run/resolveTemplate.js +12 -0
  131. package/dist/run/resolveTemplate.js.map +1 -0
  132. package/dist/run/summarize.d.ts +73 -0
  133. package/dist/run/summarize.d.ts.map +1 -0
  134. package/dist/run/summarize.js +69 -0
  135. package/dist/run/summarize.js.map +1 -0
  136. package/dist/run/types.d.ts +46 -0
  137. package/dist/run/types.d.ts.map +1 -0
  138. package/dist/run/types.js +2 -0
  139. package/dist/run/types.js.map +1 -0
  140. package/dist/server.d.ts +23 -0
  141. package/dist/server.d.ts.map +1 -0
  142. package/dist/server.js +25 -0
  143. package/dist/server.js.map +1 -0
  144. package/dist/tools/catalog.d.ts +18 -0
  145. package/dist/tools/catalog.d.ts.map +1 -0
  146. package/dist/tools/catalog.js +66 -0
  147. package/dist/tools/catalog.js.map +1 -0
  148. package/dist/tools/collections.d.ts +4 -0
  149. package/dist/tools/collections.d.ts.map +1 -0
  150. package/dist/tools/collections.js +201 -0
  151. package/dist/tools/collections.js.map +1 -0
  152. package/dist/tools/diagrams.d.ts +4 -0
  153. package/dist/tools/diagrams.d.ts.map +1 -0
  154. package/dist/tools/diagrams.js +226 -0
  155. package/dist/tools/diagrams.js.map +1 -0
  156. package/dist/tools/environments.d.ts +4 -0
  157. package/dist/tools/environments.d.ts.map +1 -0
  158. package/dist/tools/environments.js +150 -0
  159. package/dist/tools/environments.js.map +1 -0
  160. package/dist/tools/import.d.ts +6 -0
  161. package/dist/tools/import.d.ts.map +1 -0
  162. package/dist/tools/import.js +144 -0
  163. package/dist/tools/import.js.map +1 -0
  164. package/dist/tools/index.d.ts +5 -0
  165. package/dist/tools/index.d.ts.map +1 -0
  166. package/dist/tools/index.js +26 -0
  167. package/dist/tools/index.js.map +1 -0
  168. package/dist/tools/lookups.d.ts +33 -0
  169. package/dist/tools/lookups.d.ts.map +1 -0
  170. package/dist/tools/lookups.js +132 -0
  171. package/dist/tools/lookups.js.map +1 -0
  172. package/dist/tools/meta.d.ts +4 -0
  173. package/dist/tools/meta.d.ts.map +1 -0
  174. package/dist/tools/meta.js +78 -0
  175. package/dist/tools/meta.js.map +1 -0
  176. package/dist/tools/requests.d.ts +4 -0
  177. package/dist/tools/requests.d.ts.map +1 -0
  178. package/dist/tools/requests.js +247 -0
  179. package/dist/tools/requests.js.map +1 -0
  180. package/dist/tools/run.d.ts +4 -0
  181. package/dist/tools/run.d.ts.map +1 -0
  182. package/dist/tools/run.js +167 -0
  183. package/dist/tools/run.js.map +1 -0
  184. package/dist/tools/scenarios.d.ts +4 -0
  185. package/dist/tools/scenarios.d.ts.map +1 -0
  186. package/dist/tools/scenarios.js +242 -0
  187. package/dist/tools/scenarios.js.map +1 -0
  188. package/dist/tools/shared.d.ts +20 -0
  189. package/dist/tools/shared.d.ts.map +1 -0
  190. package/dist/tools/shared.js +74 -0
  191. package/dist/tools/shared.js.map +1 -0
  192. package/dist/tools/workspaces.d.ts +4 -0
  193. package/dist/tools/workspaces.d.ts.map +1 -0
  194. package/dist/tools/workspaces.js +80 -0
  195. package/dist/tools/workspaces.js.map +1 -0
  196. package/dist-cjs/client/api.js +183 -0
  197. package/dist-cjs/client/errors.js +104 -0
  198. package/dist-cjs/client/http.js +124 -0
  199. package/dist-cjs/client/types.js +5 -0
  200. package/dist-cjs/config.js +73 -0
  201. package/dist-cjs/context.js +94 -0
  202. package/dist-cjs/domain/diagram/build.js +164 -0
  203. package/dist-cjs/domain/diagram/layout.js +98 -0
  204. package/dist-cjs/domain/diagram/patch.js +179 -0
  205. package/dist-cjs/domain/diagram/summarize.js +52 -0
  206. package/dist-cjs/domain/importDetect.js +40 -0
  207. package/dist-cjs/domain/requestShape.js +260 -0
  208. package/dist-cjs/domain/resolve.js +63 -0
  209. package/dist-cjs/domain/scenario/build.js +140 -0
  210. package/dist-cjs/domain/scenario/summarize.js +144 -0
  211. package/dist-cjs/lib/cache.js +43 -0
  212. package/dist-cjs/lib/ids.js +24 -0
  213. package/dist-cjs/lib/log.js +28 -0
  214. package/dist-cjs/lib/mask.js +72 -0
  215. package/dist-cjs/lib/pagination.js +48 -0
  216. package/dist-cjs/lib/truncate.js +52 -0
  217. package/dist-cjs/main.js +31 -0
  218. package/dist-cjs/package.json +3 -0
  219. package/dist-cjs/prompts/index.js +75 -0
  220. package/dist-cjs/resources/docs/diagramSchema.js +67 -0
  221. package/dist-cjs/resources/docs/overview.js +48 -0
  222. package/dist-cjs/resources/docs/requestSchema.js +72 -0
  223. package/dist-cjs/resources/generated/aiPacks.js +13 -0
  224. package/dist-cjs/resources/index.js +117 -0
  225. package/dist-cjs/run/executeCollection.js +93 -0
  226. package/dist-cjs/run/loadBundle.js +246 -0
  227. package/dist-cjs/run/resolveTemplate.js +15 -0
  228. package/dist-cjs/run/summarize.js +73 -0
  229. package/dist-cjs/run/types.js +2 -0
  230. package/dist-cjs/server.js +28 -0
  231. package/dist-cjs/tools/catalog.js +69 -0
  232. package/dist-cjs/tools/collections.js +204 -0
  233. package/dist-cjs/tools/diagrams.js +229 -0
  234. package/dist-cjs/tools/environments.js +153 -0
  235. package/dist-cjs/tools/import.js +147 -0
  236. package/dist-cjs/tools/index.js +31 -0
  237. package/dist-cjs/tools/lookups.js +149 -0
  238. package/dist-cjs/tools/meta.js +81 -0
  239. package/dist-cjs/tools/requests.js +250 -0
  240. package/dist-cjs/tools/run.js +203 -0
  241. package/dist-cjs/tools/scenarios.js +245 -0
  242. package/dist-cjs/tools/shared.js +81 -0
  243. package/dist-cjs/tools/workspaces.js +83 -0
  244. package/package.json +80 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare class TtlCache {
2
+ private readonly ttlMs;
3
+ private readonly now;
4
+ private readonly entries;
5
+ constructor(ttlMs: number, now?: () => number);
6
+ get<T>(key: string): T | undefined;
7
+ set<T>(key: string, value: T): T;
8
+ getOrSet<T>(key: string, loader: () => Promise<T>): Promise<T>;
9
+ delete(prefix: string): void;
10
+ clear(): void;
11
+ }
12
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"AAGA,qBAAa,QAAQ;IAGP,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAU,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4D;gBAEvD,KAAK,EAAE,MAAM,EAAmB,GAAG,GAAE,MAAM,MAAiB;IAEzF,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAUlC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;IAK1B,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAMpE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,40 @@
1
+ // Tiny TTL cache for hot reads (workspaces, collection trees) so a chain of
2
+ // tool calls in one turn does not hammer the API. Writes call `clear()`.
3
+ export class TtlCache {
4
+ ttlMs;
5
+ now;
6
+ entries = new Map();
7
+ constructor(ttlMs, now = Date.now) {
8
+ this.ttlMs = ttlMs;
9
+ this.now = now;
10
+ }
11
+ get(key) {
12
+ const entry = this.entries.get(key);
13
+ if (!entry)
14
+ return undefined;
15
+ if (entry.expiresAt <= this.now()) {
16
+ this.entries.delete(key);
17
+ return undefined;
18
+ }
19
+ return entry.value;
20
+ }
21
+ set(key, value) {
22
+ this.entries.set(key, { value, expiresAt: this.now() + this.ttlMs });
23
+ return value;
24
+ }
25
+ async getOrSet(key, loader) {
26
+ const hit = this.get(key);
27
+ if (hit !== undefined)
28
+ return hit;
29
+ return this.set(key, await loader());
30
+ }
31
+ delete(prefix) {
32
+ for (const key of [...this.entries.keys()])
33
+ if (key.startsWith(prefix))
34
+ this.entries.delete(key);
35
+ }
36
+ clear() {
37
+ this.entries.clear();
38
+ }
39
+ }
40
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,yEAAyE;AAEzE,MAAM,OAAO,QAAQ;IAGU;IAAgC;IAF5C,OAAO,GAAG,IAAI,GAAG,EAAiD,CAAC;IAEpF,YAA6B,KAAa,EAAmB,MAAoB,IAAI,CAAC,GAAG;QAA5D,UAAK,GAAL,KAAK,CAAQ;QAAmB,QAAG,GAAH,GAAG,CAAyB;IAAG,CAAC;IAE7F,GAAG,CAAI,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC,KAAU,CAAC;IAC1B,CAAC;IAED,GAAG,CAAI,GAAW,EAAE,KAAQ;QAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,QAAQ,CAAI,GAAW,EAAE,MAAwB;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;QAC7B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;QAClC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAAE,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnG,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export declare const OBJECT_ID: RegExp;
2
+ export declare const isObjectId: (value: unknown) => value is string;
3
+ export declare const normalizeName: (value: string) => string;
4
+ export declare const sequentialIds: (prefix: string, taken?: Iterable<string>) => () => string;
5
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/lib/ids.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAsB,CAAC;AAE7C,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MACD,CAAC;AAErD,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,MAAoC,CAAC;AAGnF,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,EAAE,QAAO,QAAQ,CAAC,MAAM,CAAM,WAG7D,MAUZ,CAAC"}
@@ -0,0 +1,19 @@
1
+ export const OBJECT_ID = /^[0-9a-fA-F]{24}$/;
2
+ export const isObjectId = (value) => typeof value === "string" && OBJECT_ID.test(value);
3
+ export const normalizeName = (value) => value.trim().toLowerCase();
4
+ // Deterministic, readable ids for generated documents (n1, n2 … / e1, e2 …).
5
+ export const sequentialIds = (prefix, taken = []) => {
6
+ const used = new Set(taken);
7
+ let counter = 1;
8
+ return () => {
9
+ let candidate = `${prefix}${counter}`;
10
+ while (used.has(candidate)) {
11
+ counter += 1;
12
+ candidate = `${prefix}${counter}`;
13
+ }
14
+ used.add(candidate);
15
+ counter += 1;
16
+ return candidate;
17
+ };
18
+ };
19
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/lib/ids.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,mBAAmB,CAAC;AAE7C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAc,EAAmB,EAAE,CAC5D,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAEnF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,QAA0B,EAAE,EAAE,EAAE;IAC5E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO,GAAW,EAAE;QAClB,IAAI,SAAS,GAAG,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,CAAC;YACb,SAAS,GAAG,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { LogLevel } from "../config.js";
2
+ export interface Logger {
3
+ error: (message: string, meta?: unknown) => void;
4
+ warn: (message: string, meta?: unknown) => void;
5
+ info: (message: string, meta?: unknown) => void;
6
+ debug: (message: string, meta?: unknown) => void;
7
+ }
8
+ export declare const createLogger: (level: LogLevel, sink?: (line: string) => void) => Logger;
9
+ export declare const silentLogger: Logger;
10
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/lib/log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAClD;AAID,eAAO,MAAM,YAAY,GAAI,OAAO,QAAQ,EAAE,OAAM,CAAC,IAAI,EAAE,MAAM,KAAK,IAAoC,KAAG,MAY5G,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAyD,CAAC"}
@@ -0,0 +1,25 @@
1
+ const RANK = { silent: 0, error: 1, warn: 2, info: 3, debug: 4 };
2
+ export const createLogger = (level, sink = (line) => console.error(line)) => {
3
+ const emit = (severity, message, meta) => {
4
+ if (RANK[severity] > RANK[level])
5
+ return;
6
+ const suffix = meta === undefined ? "" : ` ${safeJson(meta)}`;
7
+ sink(`[callman-mcp] ${severity}: ${message}${suffix}`);
8
+ };
9
+ return {
10
+ error: (message, meta) => emit("error", message, meta),
11
+ warn: (message, meta) => emit("warn", message, meta),
12
+ info: (message, meta) => emit("info", message, meta),
13
+ debug: (message, meta) => emit("debug", message, meta),
14
+ };
15
+ };
16
+ export const silentLogger = { error() { }, warn() { }, info() { }, debug() { } };
17
+ const safeJson = (value) => {
18
+ try {
19
+ return JSON.stringify(value);
20
+ }
21
+ catch {
22
+ return String(value);
23
+ }
24
+ };
25
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/lib/log.ts"],"names":[],"mappings":"AAUA,MAAM,IAAI,GAA6B,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAE3F,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAe,EAAE,OAA+B,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAU,EAAE;IACpH,MAAM,IAAI,GAAG,CAAC,QAAqC,EAAE,OAAe,EAAE,IAAc,EAAQ,EAAE;QAC5F,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO;QACzC,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,iBAAiB,QAAQ,KAAK,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC;IACF,OAAO;QACL,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;QACtD,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;QACpD,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;QACpD,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;KACvD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAW,EAAE,KAAK,KAAI,CAAC,EAAE,IAAI,KAAI,CAAC,EAAE,IAAI,KAAI,CAAC,EAAE,KAAK,KAAI,CAAC,EAAE,CAAC;AAErF,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAU,EAAE;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ export declare const MASK_SENTINEL = "\u2022\u2022\u2022\u2022";
2
+ export declare const maskSecret: (value: string) => string;
3
+ export declare const isMasked: (value: unknown) => boolean;
4
+ export declare const isSensitiveHeader: (name: string) => boolean;
5
+ export declare const maskHeaderValue: (name: string, value: string) => string;
6
+ export declare const maskHeaderRecord: (headers: Record<string, string> | undefined) => Record<string, string>;
7
+ export interface AuthLike {
8
+ type?: string;
9
+ bearerToken?: string;
10
+ basicUsername?: string;
11
+ basicPassword?: string;
12
+ apiKeyKey?: string;
13
+ apiKeyValue?: string;
14
+ apiKeyLocation?: string;
15
+ oauth2?: Record<string, unknown>;
16
+ }
17
+ export declare const maskAuth: (auth: AuthLike | null | undefined) => Record<string, unknown>;
18
+ export declare const maskVariableValues: <T extends {
19
+ key: string;
20
+ value: string;
21
+ }>(variables: T[]) => Array<T & {
22
+ valueMasked: true;
23
+ }>;
24
+ //# sourceMappingURL=mask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mask.d.ts","sourceRoot":"","sources":["../../src/lib/mask.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,6BAAS,CAAC;AAEpC,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAC+B,CAAC;AAE3E,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,OACoB,CAAC;AAY/D,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,OAA2D,CAAC;AAE7G,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,MACA,CAAC;AAE/D,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAInG,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAID,eAAO,MAAM,QAAQ,GAAI,MAAM,QAAQ,GAAG,IAAI,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAgClF,CAAC;AAGF,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACzE,WAAW,CAAC,EAAE,KACb,KAAK,CAAC,CAAC,GAAG;IAAE,WAAW,EAAE,IAAI,CAAA;CAAE,CAC6E,CAAC"}
@@ -0,0 +1,63 @@
1
+ // Secret masking on the way OUT to the model. The backend already masks
2
+ // environment values for a personal token; this covers what it does not —
3
+ // request auth secrets, sensitive headers and anything a local run resolved.
4
+ // Same sentinel as the backend so a masked value is recognisable and can
5
+ // never be written back by accident (the server rejects it).
6
+ export const MASK_SENTINEL = "••••";
7
+ export const maskSecret = (value) => value.length >= 8 ? `${MASK_SENTINEL}${value.slice(-2)}` : MASK_SENTINEL;
8
+ export const isMasked = (value) => typeof value === "string" && value.startsWith(MASK_SENTINEL);
9
+ const SENSITIVE_HEADERS = new Set([
10
+ "authorization",
11
+ "proxy-authorization",
12
+ "cookie",
13
+ "set-cookie",
14
+ "x-api-key",
15
+ "x-auth-token",
16
+ "api-key",
17
+ ]);
18
+ export const isSensitiveHeader = (name) => SENSITIVE_HEADERS.has(name.trim().toLowerCase());
19
+ export const maskHeaderValue = (name, value) => isSensitiveHeader(name) && value ? maskSecret(value) : value;
20
+ export const maskHeaderRecord = (headers) => {
21
+ const out = {};
22
+ for (const [key, value] of Object.entries(headers ?? {}))
23
+ out[key] = maskHeaderValue(key, value);
24
+ return out;
25
+ };
26
+ // Compact, masked view of a request's auth: enough to know HOW it
27
+ // authenticates, never the credential itself.
28
+ export const maskAuth = (auth) => {
29
+ const type = auth?.type ?? "none";
30
+ switch (type) {
31
+ case "bearer":
32
+ return { type, token: auth?.bearerToken ? maskSecret(auth.bearerToken) : "" };
33
+ case "basic":
34
+ return {
35
+ type,
36
+ username: auth?.basicUsername ?? "",
37
+ password: auth?.basicPassword ? maskSecret(auth.basicPassword) : "",
38
+ };
39
+ case "apikey":
40
+ return {
41
+ type,
42
+ key: auth?.apiKeyKey ?? "",
43
+ value: auth?.apiKeyValue ? maskSecret(auth.apiKeyValue) : "",
44
+ location: auth?.apiKeyLocation ?? "header",
45
+ };
46
+ case "oauth2": {
47
+ const oauth2 = auth?.oauth2 ?? {};
48
+ return {
49
+ type,
50
+ grantType: oauth2.grantType ?? "client_credentials",
51
+ tokenUrl: oauth2.tokenUrl ?? "",
52
+ clientId: oauth2.clientId ?? "",
53
+ clientSecret: typeof oauth2.clientSecret === "string" && oauth2.clientSecret ? maskSecret(oauth2.clientSecret) : "",
54
+ scope: oauth2.scope ?? "",
55
+ };
56
+ }
57
+ default:
58
+ return { type: "none" };
59
+ }
60
+ };
61
+ // Mask every `value` in a key/value list (environment / scenario variables).
62
+ export const maskVariableValues = (variables) => variables.map((variable) => ({ ...variable, value: maskSecret(variable.value), valueMasked: true }));
63
+ //# sourceMappingURL=mask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mask.js","sourceRoot":"","sources":["../../src/lib/mask.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface PageCursor {
2
+ page: number;
3
+ limit: number;
4
+ }
5
+ export declare const encodeCursor: (cursor: PageCursor) => string;
6
+ export declare const decodeCursor: (raw: string | undefined | null) => PageCursor | null;
7
+ export declare const clampLimit: (limit: number | undefined) => number;
8
+ export declare const pageFromCursor: (cursor: string | undefined, limit: number | undefined) => PageCursor;
9
+ export interface BackendPagination {
10
+ page: number;
11
+ limit: number;
12
+ totalItems: number;
13
+ totalPages: number;
14
+ }
15
+ export declare const nextCursorFor: (pagination: BackendPagination) => string | null;
16
+ export declare const sliceWithCursor: <T>(items: T[], cursor: string | undefined, limit: number | undefined) => {
17
+ items: T[];
18
+ total: number;
19
+ nextCursor: string | null;
20
+ };
21
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/lib/pagination.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,YAAY,GAAI,QAAQ,UAAU,KAAG,MACiB,CAAC;AAEpE,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,KAAG,UAAU,GAAG,IAU1E,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,GAAG,SAAS,KAAG,MAC2B,CAAC;AAEnF,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,GAAG,SAAS,EAAE,OAAO,MAAM,GAAG,SAAS,KAAG,UAItF,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,GAAI,YAAY,iBAAiB,KAAG,MAAM,GAAG,IAG7D,CAAC;AAGX,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,MAAM,GAAG,SAAS,EAAE,OAAO,MAAM,GAAG,SAAS;;;;CAUnG,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { LIMITS } from "./truncate.js";
2
+ export const encodeCursor = (cursor) => Buffer.from(JSON.stringify(cursor), "utf8").toString("base64url");
3
+ export const decodeCursor = (raw) => {
4
+ if (!raw)
5
+ return null;
6
+ try {
7
+ const parsed = JSON.parse(Buffer.from(raw, "base64url").toString("utf8"));
8
+ if (typeof parsed.page !== "number" || typeof parsed.limit !== "number")
9
+ return null;
10
+ if (!Number.isInteger(parsed.page) || parsed.page < 1)
11
+ return null;
12
+ return { page: parsed.page, limit: clampLimit(parsed.limit) };
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ };
18
+ export const clampLimit = (limit) => Math.min(LIMITS.LIST_MAX, Math.max(1, Math.floor(limit ?? LIMITS.LIST_DEFAULT)));
19
+ export const pageFromCursor = (cursor, limit) => {
20
+ const decoded = decodeCursor(cursor);
21
+ if (decoded)
22
+ return decoded;
23
+ return { page: 1, limit: clampLimit(limit) };
24
+ };
25
+ export const nextCursorFor = (pagination) => pagination.page < pagination.totalPages
26
+ ? encodeCursor({ page: pagination.page + 1, limit: pagination.limit })
27
+ : null;
28
+ // Client-side slice for list endpoints that are not paginated server-side.
29
+ export const sliceWithCursor = (items, cursor, limit) => {
30
+ const { page, limit: size } = pageFromCursor(cursor, limit);
31
+ const start = (page - 1) * size;
32
+ const slice = items.slice(start, start + size);
33
+ const totalPages = Math.max(1, Math.ceil(items.length / size));
34
+ return {
35
+ items: slice,
36
+ total: items.length,
37
+ nextCursor: page < totalPages ? encodeCursor({ page: page + 1, limit: size }) : null,
38
+ };
39
+ };
40
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/lib/pagination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export declare const LIMITS: Readonly<{
2
+ URL: 120;
3
+ NAME: 120;
4
+ BODY_PREVIEW: 2000;
5
+ FULL_BODY: number;
6
+ RUN_BODY_DEFAULT: number;
7
+ RUN_BODY_MAX: number;
8
+ SCENARIO_FULL: number;
9
+ DIAGRAM_FULL: number;
10
+ SEARCH_RESULTS: 50;
11
+ TREE_ITEMS: 5000;
12
+ LIST_DEFAULT: 50;
13
+ LIST_MAX: 100;
14
+ }>;
15
+ export declare const clip: (value: string, max: number) => string;
16
+ export interface Clipped {
17
+ text: string;
18
+ truncated: boolean;
19
+ totalBytes: number;
20
+ }
21
+ export declare const clipBytes: (value: string, maxBytes: number) => Clipped;
22
+ export declare const jsonPreview: (value: unknown, max?: 2000) => string | null;
23
+ export declare const safeStringify: (value: unknown, space?: number) => string;
24
+ export declare const byteLength: (value: unknown) => number;
25
+ //# sourceMappingURL=truncate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../src/lib/truncate.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,MAAM;;;;;;;;;;;;;EAajB,CAAC;AAEH,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,KAAG,MACM,CAAC;AAEzD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,EAAE,UAAU,MAAM,KAAG,OAM3D,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,EAAE,UAAyB,KAAG,MAAM,GAAG,IAIhF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,EAAE,QAAQ,MAAM,KAAG,MAM9D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,MACyC,CAAC"}
@@ -0,0 +1,45 @@
1
+ // Output-size discipline: every tool result is bounded so a large workspace
2
+ // can never blow a model's context. The caps are deliberate constants — a
3
+ // tool that needs more takes an explicit `full: true` and still hits the
4
+ // FULL_* ceilings, reporting `truncated: true` when it does.
5
+ export const LIMITS = Object.freeze({
6
+ URL: 120,
7
+ NAME: 120,
8
+ BODY_PREVIEW: 2_000,
9
+ FULL_BODY: 64 * 1024,
10
+ RUN_BODY_DEFAULT: 16 * 1024,
11
+ RUN_BODY_MAX: 256 * 1024,
12
+ SCENARIO_FULL: 256 * 1024,
13
+ DIAGRAM_FULL: 512 * 1024,
14
+ SEARCH_RESULTS: 50,
15
+ TREE_ITEMS: 5_000,
16
+ LIST_DEFAULT: 50,
17
+ LIST_MAX: 100,
18
+ });
19
+ export const clip = (value, max) => value.length > max ? `${value.slice(0, max)}…` : value;
20
+ // Byte-bounded clip for bodies (UTF-8 aware: cut on a character boundary).
21
+ export const clipBytes = (value, maxBytes) => {
22
+ const totalBytes = Buffer.byteLength(value, "utf8");
23
+ if (totalBytes <= maxBytes)
24
+ return { text: value, truncated: false, totalBytes };
25
+ let end = Math.min(value.length, maxBytes);
26
+ while (end > 0 && Buffer.byteLength(value.slice(0, end), "utf8") > maxBytes)
27
+ end -= Math.ceil((end * 0.05) || 1);
28
+ return { text: `${value.slice(0, end)}…`, truncated: true, totalBytes };
29
+ };
30
+ export const jsonPreview = (value, max = LIMITS.BODY_PREVIEW) => {
31
+ if (value === null || value === undefined)
32
+ return null;
33
+ const text = typeof value === "string" ? value : safeStringify(value);
34
+ return clip(text, max);
35
+ };
36
+ export const safeStringify = (value, space) => {
37
+ try {
38
+ return JSON.stringify(value, null, space) ?? "null";
39
+ }
40
+ catch {
41
+ return String(value);
42
+ }
43
+ };
44
+ export const byteLength = (value) => Buffer.byteLength(typeof value === "string" ? value : safeStringify(value), "utf8");
45
+ //# sourceMappingURL=truncate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.js","sourceRoot":"","sources":["../../src/lib/truncate.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,0EAA0E;AAC1E,yEAAyE;AACzE,6DAA6D;AAE7D,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,GAAG;IACT,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,EAAE,GAAG,IAAI;IACpB,gBAAgB,EAAE,EAAE,GAAG,IAAI;IAC3B,YAAY,EAAE,GAAG,GAAG,IAAI;IACxB,aAAa,EAAE,GAAG,GAAG,IAAI;IACzB,YAAY,EAAE,GAAG,GAAG,IAAI;IACxB,cAAc,EAAE,EAAE;IAClB,UAAU,EAAE,KAAK;IACjB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,GAAG;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,GAAW,EAAU,EAAE,CACzD,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAQzD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAW,EAAE;IACpE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,UAAU,IAAI,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACjF,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3C,OAAO,GAAG,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,QAAQ;QAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjH,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,GAAG,GAAG,MAAM,CAAC,YAAY,EAAiB,EAAE;IACtF,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAE,KAAc,EAAU,EAAE;IACtE,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAc,EAAU,EAAE,CACnD,MAAM,CAAC,UAAU,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export { createCallmanMcpServer, SERVER_INSTRUCTIONS, SERVER_NAME, type CallmanMcpInstance, type CreateServerOptions } from "./server.js";
2
+ export { DEFAULT_CLOUD_API_URL, normalizeApiUrl, resolveConfig, type CallmanMcpConfig, type ConfigSources, type LogLevel } from "./config.js";
3
+ export { createToolContext, type CreateContextOptions, type ToolContext } from "./context.js";
4
+ export { TOOL_CATALOG, toolAvailability, type ToolCatalogEntry } from "./tools/catalog.js";
5
+ export { CallmanApiError, CallmanNetworkError, ToolInputError, hintFor } from "./client/errors.js";
6
+ export { CallmanHttpClient } from "./client/http.js";
7
+ export { CallmanApi } from "./client/api.js";
8
+ export { createLogger, silentLogger, type Logger } from "./lib/log.js";
9
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC1I,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9I,OAAO,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC"}
package/dist/main.js ADDED
@@ -0,0 +1,12 @@
1
+ // Library entry (`import { createCallmanMcpServer } from "callman-mcp"`) —
2
+ // for hosts that embed the tool layer (the Callman backend's remote MCP
3
+ // endpoint) and for tests. The bin lives in index.ts.
4
+ export { createCallmanMcpServer, SERVER_INSTRUCTIONS, SERVER_NAME } from "./server.js";
5
+ export { DEFAULT_CLOUD_API_URL, normalizeApiUrl, resolveConfig } from "./config.js";
6
+ export { createToolContext } from "./context.js";
7
+ export { TOOL_CATALOG, toolAvailability } from "./tools/catalog.js";
8
+ export { CallmanApiError, CallmanNetworkError, ToolInputError, hintFor } from "./client/errors.js";
9
+ export { CallmanHttpClient } from "./client/http.js";
10
+ export { CallmanApi } from "./client/api.js";
11
+ export { createLogger, silentLogger } from "./lib/log.js";
12
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,wEAAwE;AACxE,sDAAsD;AACtD,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,WAAW,EAAqD,MAAM,aAAa,CAAC;AAC1I,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,aAAa,EAA4D,MAAM,aAAa,CAAC;AAC9I,OAAO,EAAE,iBAAiB,EAA+C,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAyB,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAe,MAAM,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ToolContext } from "../context.js";
3
+ export declare const registerPrompts: (server: McpServer, _ctx: ToolContext) => void;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAUjD,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,EAAE,MAAM,WAAW,KAAG,IAuFtE,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { z } from "zod";
2
+ // Prompts: reusable playbooks a user picks in their client ("/callman:…").
3
+ // Each one tells the model which resources to read and which tools to call,
4
+ // in which order — the workflows that need discipline to come out right.
5
+ const user = (text) => ({ messages: [{ role: "user", content: { type: "text", text } }] });
6
+ const where = (workspace) => (workspace ? ` in the Callman workspace "${workspace}"` : "");
7
+ export const registerPrompts = (server, _ctx) => {
8
+ server.registerPrompt("import_endpoints_from_code", {
9
+ title: "Import the endpoints of this codebase into Callman",
10
+ description: "Find the HTTP routes in the project's source, build one request per endpoint (method, path, query, headers, body from the DTO) and create them in a Callman collection with folders per resource.",
11
+ argsSchema: {
12
+ path: z.string().optional().describe("Directory or file to scan (default: the whole project)"),
13
+ collection: z.string().optional().describe("Target collection name (existing or new); default: named after the project"),
14
+ workspace: z.string().optional(),
15
+ },
16
+ }, ({ path, collection, workspace }) => user(`Import the HTTP endpoints defined in ${path ? `\`${path}\`` : "this project"} into Callman${where(workspace)}.
17
+
18
+ Steps:
19
+ 1. Call \`whoami\` to confirm the connection${workspace ? "" : " and the workspace"}.
20
+ 2. Read the routing code yourself (framework route definitions, controllers, OpenAPI files if present). For every endpoint collect: method, path (turn \`:id\` / \`{id}\` params into Callman path variables \`:id\`), query parameters, required headers, and a realistic JSON body from the request DTO/validation schema. Group endpoints by resource (users, orders …) — one folder per resource.
21
+ 3. Use \`{{baseUrl}}\` for the host. Note which environment variables the collection needs (baseUrl, accessToken …).
22
+ 4. Call \`list_collections\`. If a collection named "${collection ?? "<project name>"}" exists, add to it with \`create_requests_bulk\` (\`collection:\`); otherwise create it with \`create_requests_bulk\` (\`collectionName:\` + \`folders\` skeleton + \`folderKey\` per request). For more than 50 requests run with \`dryRun: true\` first and show me the summary.
23
+ 5. If the API has a login/token endpoint, give that request a \`postResponseScript\` that stores the token: \`pm.environment.set("accessToken", pm.response.json().token)\`, and use \`{ "type": "bearer", "token": "{{accessToken}}" }\` on the others.
24
+ 6. Offer to create an environment (\`create_environment\`) with the variables you found, with placeholder values I must fill in.
25
+ 7. Finish with a short summary: collection, folders, request count, variables to set.`));
26
+ server.registerPrompt("design_system_diagram", {
27
+ title: "Draw a system-design diagram of this codebase",
28
+ description: "Identify services, data stores, queues, external APIs and infrastructure in the project and draw an architecture diagram in Callman's Diagram Studio.",
29
+ argsSchema: {
30
+ scope: z.string().optional().describe("What to diagram (default: the whole system); e.g. 'the order pipeline'"),
31
+ name: z.string().optional().describe("Diagram name"),
32
+ },
33
+ }, ({ scope, name }) => user(`Draw a system-design diagram of ${scope ? scope : "this system"} in Callman.
34
+
35
+ Steps:
36
+ 1. Read \`callman://diagram/components\` — use ONLY those \`type\` values.
37
+ 2. From the code and configuration (docker-compose, Kubernetes manifests, terraform, env files, package manifests) identify: services/apps, databases and caches, message brokers/queues, external APIs, auth providers, observability, cloud resources, and the boundaries they live in (VPC, cluster, namespace).
38
+ 3. Model 8–25 nodes with 1–3 word labels. Put components inside boundaries with \`parent\` (declare the container node). Give each edge a meaning: \`sync\` for request/response calls, \`async\` for events/callbacks, \`bus\` for streams/queues, \`fallback\` for retries or optional paths. Short edge labels (protocol or event name) only where they add information.
39
+ 4. Call \`create_diagram\` with \`name: "${name ?? "<system name>"}"\`, no positions (automatic layout). If it reports unknown types, fix them with the suggestions and retry.
40
+ 5. Describe the diagram in a few sentences and tell me it is in the Callman Diagrams library (Refresh to see it). For corrections use \`patch_diagram\`, not a full rebuild.`));
41
+ server.registerPrompt("create_scenario_from_flow", {
42
+ title: "Create a test scenario for a user flow",
43
+ description: "Turn a described flow (e.g. 'sign up, log in, create an order, check it appears') into a runnable Callman scenario using the saved requests.",
44
+ argsSchema: {
45
+ flow: z.string().describe("The flow to test, in plain words"),
46
+ collection: z.string().optional().describe("Collection whose requests to use"),
47
+ workspace: z.string().optional(),
48
+ },
49
+ }, ({ flow, collection, workspace }) => user(`Create a Callman scenario that tests this flow${where(workspace)}: ${flow}
50
+
51
+ Steps:
52
+ 1. Read \`callman://docs/scenario-nodes\` for the node types and their config fields.
53
+ 2. Find the requests to reuse with \`search_requests\`${collection ? ` in the collection "${collection}"` : ""} and read the ones you need with \`get_request\` (method, url, body, auth). Request nodes carry their own config — copy method/url/headers/body from the saved request and use \`{{variables}}\` for values produced by earlier steps.
54
+ 3. Build the graph: one \`request\` node per call; an \`assertion\` node after each important response (status code, key fields); \`set-vars\` to capture ids/tokens from responses for later steps; a \`condition\` with \`yes\`/\`no\` edges where the flow branches; \`poll\` for eventually-consistent checks; an \`end\` node last. Add a scenario environment with the variables the flow needs.
55
+ 4. Call \`create_scenario\` with \`dryRun: true\`, review the resolved graph, then create it for real.
56
+ 5. Offer to run it with \`run_scenario\` and to explain the report. On-prem: mention that the scenario is a draft until approved in the desktop app.`));
57
+ server.registerPrompt("document_collection", {
58
+ title: "Document an API collection",
59
+ description: "Read a Callman collection and write API documentation (Markdown or an OpenAPI skeleton) from its requests.",
60
+ argsSchema: {
61
+ collection: z.string().describe("Collection id or name"),
62
+ format: z.string().optional().describe("markdown (default) or openapi"),
63
+ workspace: z.string().optional(),
64
+ },
65
+ }, ({ collection, format, workspace }) => user(`Document the Callman collection "${collection}"${where(workspace)} as ${format === "openapi" ? "an OpenAPI 3.1 skeleton" : "Markdown"}.
66
+
67
+ Steps:
68
+ 1. \`get_collection_tree\` for the folders and requests, then \`get_request\` (\`full: true\`) for each request you document. Secrets stay masked — never try to reveal them.
69
+ 2. Group by folder. For each request: purpose (infer from the name/URL), method + path, path/query parameters, headers that matter, a request body example, what the post-response script asserts (as the expected response), and the variables it depends on.
70
+ 3. Write the document to a file in the project (e.g. \`docs/api/${collection.replace(/[^a-z0-9]+/gi, "-").toLowerCase()}.${format === "openapi" ? "yaml" : "md"}\`) and summarise what it covers and what was unclear.`));
71
+ };
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const DIAGRAM_SCHEMA_DOC = "# Diagrams (create_diagram, update_diagram, patch_diagram)\n\nA diagram is a **DiagramDocument** (schemaVersion 1): typed nodes with positions and sizes,\nedges between nodes, a title. You write the compact form below; the server assigns ids,\nsizes from the component catalog, edge styles from the semantic, and lays the nodes out.\n\n## Compact input\n```jsonc\n{\n \"name\": \"Order platform\", // library entry name\n \"title\": \"Order platform \u2014 runtime view\",\n \"nodes\": [\n { \"id\": \"gw\", \"type\": \"net.gateway\", \"label\": \"API Gateway\" },\n { \"id\": \"orders\",\"type\": \"net.service\", \"label\": \"Orders service\", \"parent\": \"k8s\" },\n { \"id\": \"k8s\", \"type\": \"net.zone\", \"label\": \"Kubernetes\" }, // a container\n { \"id\": \"db\", \"type\": \"db.postgres\", \"label\": \"orders db\" },\n { \"id\": \"bus\", \"type\": \"mq.kafka\", \"label\": \"events\" }\n ],\n \"edges\": [\n { \"source\": \"gw\", \"target\": \"orders\", \"label\": \"REST\", \"semantic\": \"sync\" },\n { \"source\": \"orders\", \"target\": \"db\", \"semantic\": \"sync\" },\n { \"source\": \"orders\", \"target\": \"bus\", \"label\": \"OrderCreated\" } // \u2192 bus automatically\n ]\n}\n```\n\n- `type` MUST be a catalog type \u2014 read `callman://diagram/components` (or one category:\n `callman://diagram/components/aws`). Unknown types are rejected with suggestions; pass\n `strictTypes: false` to draw them as plain rectangles instead.\n- `parent` puts a node inside a container node (zones, frames, pools). Declare the\n container as a node too.\n- Edge `semantic`: `sync` (solid \u2014 request/response, default), `async` (dashed \u2014 event,\n callback), `fallback` (dotted \u2014 retry / optional path), `bus` (heavy \u2014 message bus /\n stream; automatic when an endpoint is a messaging component).\n- Positions are optional; when any node lacks one the whole diagram is laid out\n (`direction`: DOWN, RIGHT, UP, LEFT). Give explicit `position: {x,y}` only when the user\n asks for a specific arrangement.\n- Keep diagrams readable: 8\u201325 nodes, labels of 1\u20133 words, one edge per relationship.\n\n## Editing: patch_diagram ops\n```jsonc\n{ \"op\": \"addNode\", \"node\": { \"type\": \"db.redis\", \"label\": \"cache\" } }\n{ \"op\": \"updateNode\", \"id\": \"orders\", \"changes\": { \"label\": \"Orders API\" } }\n{ \"op\": \"removeNode\", \"id\": \"bus\" } // its edges are removed too\n{ \"op\": \"addEdge\", \"edge\": { \"source\": \"orders\", \"target\": \"n6\", \"semantic\": \"async\" } }\n{ \"op\": \"updateEdge\", \"id\": \"e2\", \"changes\": { \"label\": \"gRPC\" } }\n{ \"op\": \"removeEdge\", \"id\": \"e3\" }\n{ \"op\": \"setTitle\", \"title\": \"New title\" }\n```\n`relayout`: `new` (default \u2014 only new nodes get a place), `all` (re-run layout), `none`.\n\n## Stored document (get_diagram view: \"full\")\n```ts\ninterface DiagramDocument {\n schemaVersion: 1; id: string;\n meta: { title: string; createdAt: string; updatedAt: string };\n canvas?: { background?: \"grid\" | \"dots\" | \"blank\"; gridSize?: number };\n nodes: { id; type; position: {x,y}; size: {width,height}; label?; parentId?; style?; data? }[];\n edges: { id; source?; target?; label?; routing?; style?; markerEnd?; waypoints? }[];\n}\n```\nEdge meaning is derived from `style` (dashed + dashPattern + strokeWidth) \u2014 you never set\nstyle directly; use `semantic`.\n";
2
+ //# sourceMappingURL=diagramSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagramSchema.d.ts","sourceRoot":"","sources":["../../../src/resources/docs/diagramSchema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,08GA+D9B,CAAC"}