arc-1 0.9.25 → 1.0.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 (332) hide show
  1. package/README.md +29 -12
  2. package/dist/adt/abapgit.d.ts +19 -6
  3. package/dist/adt/abapgit.d.ts.map +1 -1
  4. package/dist/adt/abapgit.js +141 -36
  5. package/dist/adt/abapgit.js.map +1 -1
  6. package/dist/adt/authorization-trace.d.ts +23 -0
  7. package/dist/adt/authorization-trace.d.ts.map +1 -0
  8. package/dist/adt/authorization-trace.js +196 -0
  9. package/dist/adt/authorization-trace.js.map +1 -0
  10. package/dist/adt/client.d.ts +21 -8
  11. package/dist/adt/client.d.ts.map +1 -1
  12. package/dist/adt/client.js +47 -7
  13. package/dist/adt/client.js.map +1 -1
  14. package/dist/adt/config.d.ts +15 -0
  15. package/dist/adt/config.d.ts.map +1 -1
  16. package/dist/adt/config.js.map +1 -1
  17. package/dist/adt/crud.d.ts +7 -2
  18. package/dist/adt/crud.d.ts.map +1 -1
  19. package/dist/adt/crud.js +12 -4
  20. package/dist/adt/crud.js.map +1 -1
  21. package/dist/adt/ddic-xml.d.ts +27 -17
  22. package/dist/adt/ddic-xml.d.ts.map +1 -1
  23. package/dist/adt/ddic-xml.js +45 -34
  24. package/dist/adt/ddic-xml.js.map +1 -1
  25. package/dist/adt/devtools.d.ts +13 -0
  26. package/dist/adt/devtools.d.ts.map +1 -1
  27. package/dist/adt/devtools.js +120 -50
  28. package/dist/adt/devtools.js.map +1 -1
  29. package/dist/adt/diagnostics.d.ts +1 -1
  30. package/dist/adt/diagnostics.d.ts.map +1 -1
  31. package/dist/adt/diagnostics.js +1 -0
  32. package/dist/adt/diagnostics.js.map +1 -1
  33. package/dist/adt/errors.d.ts +8 -8
  34. package/dist/adt/errors.d.ts.map +1 -1
  35. package/dist/adt/errors.js +30 -11
  36. package/dist/adt/errors.js.map +1 -1
  37. package/dist/adt/http.d.ts +17 -1
  38. package/dist/adt/http.d.ts.map +1 -1
  39. package/dist/adt/http.js +102 -19
  40. package/dist/adt/http.js.map +1 -1
  41. package/dist/adt/oauth.d.ts +2 -2
  42. package/dist/adt/oauth.d.ts.map +1 -1
  43. package/dist/adt/oauth.js +5 -3
  44. package/dist/adt/oauth.js.map +1 -1
  45. package/dist/adt/package-hierarchy.d.ts.map +1 -1
  46. package/dist/adt/package-hierarchy.js.map +1 -1
  47. package/dist/adt/rap-generate.js.map +1 -1
  48. package/dist/adt/rap-handlers.js.map +1 -1
  49. package/dist/adt/rap-preflight.js.map +1 -1
  50. package/dist/adt/safety.d.ts +13 -13
  51. package/dist/adt/safety.d.ts.map +1 -1
  52. package/dist/adt/semaphore.d.ts.map +1 -1
  53. package/dist/adt/server-driven.d.ts +154 -34
  54. package/dist/adt/server-driven.d.ts.map +1 -1
  55. package/dist/adt/server-driven.js +178 -53
  56. package/dist/adt/server-driven.js.map +1 -1
  57. package/dist/adt/structure-hierarchy.js.map +1 -1
  58. package/dist/adt/transport.d.ts +6 -6
  59. package/dist/adt/transport.d.ts.map +1 -1
  60. package/dist/adt/transport.js +23 -34
  61. package/dist/adt/transport.js.map +1 -1
  62. package/dist/adt/types.d.ts +94 -6
  63. package/dist/adt/types.d.ts.map +1 -1
  64. package/dist/adt/version-diff.js.map +1 -1
  65. package/dist/adt/xml-parser.d.ts +52 -12
  66. package/dist/adt/xml-parser.d.ts.map +1 -1
  67. package/dist/adt/xml-parser.js +120 -10
  68. package/dist/adt/xml-parser.js.map +1 -1
  69. package/dist/aff/validator.js.map +1 -1
  70. package/dist/authz/policy.d.ts +8 -0
  71. package/dist/authz/policy.d.ts.map +1 -1
  72. package/dist/authz/policy.js +24 -0
  73. package/dist/authz/policy.js.map +1 -1
  74. package/dist/cache/cache.d.ts +4 -36
  75. package/dist/cache/cache.d.ts.map +1 -1
  76. package/dist/cache/cache.js +4 -5
  77. package/dist/cache/cache.js.map +1 -1
  78. package/dist/cache/caching-layer.d.ts +6 -22
  79. package/dist/cache/caching-layer.d.ts.map +1 -1
  80. package/dist/cache/caching-layer.js +5 -29
  81. package/dist/cache/caching-layer.js.map +1 -1
  82. package/dist/cache/inactive-list-cache.d.ts.map +1 -1
  83. package/dist/cache/memory.d.ts +2 -13
  84. package/dist/cache/memory.d.ts.map +1 -1
  85. package/dist/cache/memory.js +1 -70
  86. package/dist/cache/memory.js.map +1 -1
  87. package/dist/cache/sqlite.d.ts +3 -10
  88. package/dist/cache/sqlite.d.ts.map +1 -1
  89. package/dist/cache/sqlite.js +9 -85
  90. package/dist/cache/sqlite.js.map +1 -1
  91. package/dist/cli.js +6 -3
  92. package/dist/cli.js.map +1 -1
  93. package/dist/context/compressor.js.map +1 -1
  94. package/dist/context/grep.js.map +1 -1
  95. package/dist/context/unit-surgery.d.ts +28 -0
  96. package/dist/context/unit-surgery.d.ts.map +1 -0
  97. package/dist/context/unit-surgery.js +150 -0
  98. package/dist/context/unit-surgery.js.map +1 -0
  99. package/dist/extract-sap-cookies.js.map +1 -1
  100. package/dist/handlers/activate.d.ts.map +1 -1
  101. package/dist/handlers/activate.js +44 -6
  102. package/dist/handlers/activate.js.map +1 -1
  103. package/dist/handlers/context.d.ts +1 -1
  104. package/dist/handlers/context.d.ts.map +1 -1
  105. package/dist/handlers/context.js +98 -28
  106. package/dist/handlers/context.js.map +1 -1
  107. package/dist/handlers/diagnose.d.ts.map +1 -1
  108. package/dist/handlers/diagnose.js +74 -31
  109. package/dist/handlers/diagnose.js.map +1 -1
  110. package/dist/handlers/dispatch.d.ts +12 -1
  111. package/dist/handlers/dispatch.d.ts.map +1 -1
  112. package/dist/handlers/dispatch.js +160 -25
  113. package/dist/handlers/dispatch.js.map +1 -1
  114. package/dist/handlers/feature-cache.d.ts +27 -14
  115. package/dist/handlers/feature-cache.d.ts.map +1 -1
  116. package/dist/handlers/feature-cache.js +63 -25
  117. package/dist/handlers/feature-cache.js.map +1 -1
  118. package/dist/handlers/function-processing.d.ts +61 -0
  119. package/dist/handlers/function-processing.d.ts.map +1 -0
  120. package/dist/handlers/function-processing.js +45 -0
  121. package/dist/handlers/function-processing.js.map +1 -0
  122. package/dist/handlers/git.d.ts.map +1 -1
  123. package/dist/handlers/git.js +44 -19
  124. package/dist/handlers/git.js.map +1 -1
  125. package/dist/handlers/hyperfocused.d.ts.map +1 -1
  126. package/dist/handlers/hyperfocused.js +2 -3
  127. package/dist/handlers/hyperfocused.js.map +1 -1
  128. package/dist/handlers/lint.d.ts.map +1 -1
  129. package/dist/handlers/lint.js +7 -7
  130. package/dist/handlers/lint.js.map +1 -1
  131. package/dist/handlers/manage.d.ts.map +1 -1
  132. package/dist/handlers/manage.js +47 -28
  133. package/dist/handlers/manage.js.map +1 -1
  134. package/dist/handlers/navigate.d.ts.map +1 -1
  135. package/dist/handlers/navigate.js +27 -90
  136. package/dist/handlers/navigate.js.map +1 -1
  137. package/dist/handlers/object-types.d.ts +2 -0
  138. package/dist/handlers/object-types.d.ts.map +1 -1
  139. package/dist/handlers/object-types.js +10 -0
  140. package/dist/handlers/object-types.js.map +1 -1
  141. package/dist/handlers/query-errors.d.ts +11 -0
  142. package/dist/handlers/query-errors.d.ts.map +1 -0
  143. package/dist/handlers/query-errors.js +216 -0
  144. package/dist/handlers/query-errors.js.map +1 -0
  145. package/dist/handlers/query.d.ts.map +1 -1
  146. package/dist/handlers/query.js +62 -67
  147. package/dist/handlers/query.js.map +1 -1
  148. package/dist/handlers/read.d.ts.map +1 -1
  149. package/dist/handlers/read.js +64 -41
  150. package/dist/handlers/read.js.map +1 -1
  151. package/dist/handlers/schemas.d.ts +285 -234
  152. package/dist/handlers/schemas.d.ts.map +1 -1
  153. package/dist/handlers/schemas.js +126 -32
  154. package/dist/handlers/schemas.js.map +1 -1
  155. package/dist/handlers/search.d.ts.map +1 -1
  156. package/dist/handlers/search.js +8 -7
  157. package/dist/handlers/search.js.map +1 -1
  158. package/dist/handlers/shared.d.ts +13 -0
  159. package/dist/handlers/shared.d.ts.map +1 -1
  160. package/dist/handlers/shared.js +15 -0
  161. package/dist/handlers/shared.js.map +1 -1
  162. package/dist/handlers/tool-descriptions.d.ts +4 -0
  163. package/dist/handlers/tool-descriptions.d.ts.map +1 -0
  164. package/dist/handlers/tool-descriptions.js +52 -0
  165. package/dist/handlers/tool-descriptions.js.map +1 -0
  166. package/dist/handlers/tool-registry.d.ts +20 -6
  167. package/dist/handlers/tool-registry.d.ts.map +1 -1
  168. package/dist/handlers/tool-registry.js +18 -0
  169. package/dist/handlers/tool-registry.js.map +1 -1
  170. package/dist/handlers/tools.d.ts.map +1 -1
  171. package/dist/handlers/tools.js +124 -92
  172. package/dist/handlers/tools.js.map +1 -1
  173. package/dist/handlers/transport.d.ts +1 -1
  174. package/dist/handlers/transport.d.ts.map +1 -1
  175. package/dist/handlers/transport.js +37 -10
  176. package/dist/handlers/transport.js.map +1 -1
  177. package/dist/handlers/where-used.d.ts +25 -0
  178. package/dist/handlers/where-used.d.ts.map +1 -0
  179. package/dist/handlers/where-used.js +94 -0
  180. package/dist/handlers/where-used.js.map +1 -0
  181. package/dist/handlers/write/class-surgery.d.ts.map +1 -1
  182. package/dist/handlers/write/class-surgery.js +11 -12
  183. package/dist/handlers/write/class-surgery.js.map +1 -1
  184. package/dist/handlers/write/create.d.ts.map +1 -1
  185. package/dist/handlers/write/create.js +194 -84
  186. package/dist/handlers/write/create.js.map +1 -1
  187. package/dist/handlers/write/rap.d.ts.map +1 -1
  188. package/dist/handlers/write/rap.js +9 -9
  189. package/dist/handlers/write/rap.js.map +1 -1
  190. package/dist/handlers/write/unit-surgery.d.ts +5 -0
  191. package/dist/handlers/write/unit-surgery.d.ts.map +1 -0
  192. package/dist/handlers/write/unit-surgery.js +47 -0
  193. package/dist/handlers/write/unit-surgery.js.map +1 -0
  194. package/dist/handlers/write/update-delete.js +8 -8
  195. package/dist/handlers/write/update-delete.js.map +1 -1
  196. package/dist/handlers/write-helpers.d.ts +7 -4
  197. package/dist/handlers/write-helpers.d.ts.map +1 -1
  198. package/dist/handlers/write-helpers.js +118 -63
  199. package/dist/handlers/write-helpers.js.map +1 -1
  200. package/dist/handlers/write.d.ts.map +1 -1
  201. package/dist/handlers/write.js +35 -13
  202. package/dist/handlers/write.js.map +1 -1
  203. package/dist/lint/config-builder.js.map +1 -1
  204. package/dist/lint/lint.d.ts.map +1 -1
  205. package/dist/lint/lint.js +4 -2
  206. package/dist/lint/lint.js.map +1 -1
  207. package/dist/probe/catalog.js +1 -1
  208. package/dist/probe/catalog.js.map +1 -1
  209. package/dist/public/testing.js.map +1 -1
  210. package/dist/public/ui/app.js +1 -14
  211. package/dist/registry/tool-registry.d.ts.map +1 -1
  212. package/dist/server/audit.d.ts +27 -15
  213. package/dist/server/audit.d.ts.map +1 -1
  214. package/dist/server/audit.js.map +1 -1
  215. package/dist/server/auth-rate-limit.d.ts +18 -9
  216. package/dist/server/auth-rate-limit.d.ts.map +1 -1
  217. package/dist/server/auth-rate-limit.js +31 -6
  218. package/dist/server/auth-rate-limit.js.map +1 -1
  219. package/dist/server/auth-summary.d.ts +4 -0
  220. package/dist/server/auth-summary.d.ts.map +1 -0
  221. package/dist/server/auth-summary.js +67 -0
  222. package/dist/server/auth-summary.js.map +1 -0
  223. package/dist/server/config.d.ts.map +1 -1
  224. package/dist/server/config.js +110 -7
  225. package/dist/server/config.js.map +1 -1
  226. package/dist/server/context.d.ts +12 -0
  227. package/dist/server/context.d.ts.map +1 -1
  228. package/dist/server/context.js.map +1 -1
  229. package/dist/server/destination-discovery.d.ts +36 -0
  230. package/dist/server/destination-discovery.d.ts.map +1 -0
  231. package/dist/server/destination-discovery.js +130 -0
  232. package/dist/server/destination-discovery.js.map +1 -0
  233. package/dist/server/destination-registry.d.ts +111 -0
  234. package/dist/server/destination-registry.d.ts.map +1 -0
  235. package/dist/server/destination-registry.js +449 -0
  236. package/dist/server/destination-registry.js.map +1 -0
  237. package/dist/server/http.d.ts +43 -1
  238. package/dist/server/http.d.ts.map +1 -1
  239. package/dist/server/http.js +283 -73
  240. package/dist/server/http.js.map +1 -1
  241. package/dist/server/logger.d.ts.map +1 -1
  242. package/dist/server/logger.js +58 -13
  243. package/dist/server/logger.js.map +1 -1
  244. package/dist/server/mcp-rate-limit.d.ts +6 -4
  245. package/dist/server/mcp-rate-limit.d.ts.map +1 -1
  246. package/dist/server/mcp-rate-limit.js +6 -4
  247. package/dist/server/mcp-rate-limit.js.map +1 -1
  248. package/dist/server/multi-target-basic-auth.d.ts +49 -0
  249. package/dist/server/multi-target-basic-auth.d.ts.map +1 -0
  250. package/dist/server/multi-target-basic-auth.js +246 -0
  251. package/dist/server/multi-target-basic-auth.js.map +1 -0
  252. package/dist/server/multi-target-catalog.d.ts +33 -0
  253. package/dist/server/multi-target-catalog.d.ts.map +1 -0
  254. package/dist/server/multi-target-catalog.js +130 -0
  255. package/dist/server/multi-target-catalog.js.map +1 -0
  256. package/dist/server/multi-target-destination-config.d.ts +12 -0
  257. package/dist/server/multi-target-destination-config.d.ts.map +1 -0
  258. package/dist/server/multi-target-destination-config.js +37 -0
  259. package/dist/server/multi-target-destination-config.js.map +1 -0
  260. package/dist/server/multi-target-destination-runtime.d.ts +20 -0
  261. package/dist/server/multi-target-destination-runtime.d.ts.map +1 -0
  262. package/dist/server/multi-target-destination-runtime.js +191 -0
  263. package/dist/server/multi-target-destination-runtime.js.map +1 -0
  264. package/dist/server/multi-target-feature-state.d.ts +6 -0
  265. package/dist/server/multi-target-feature-state.d.ts.map +1 -0
  266. package/dist/server/multi-target-feature-state.js +41 -0
  267. package/dist/server/multi-target-feature-state.js.map +1 -0
  268. package/dist/server/multi-target-identity.d.ts +10 -0
  269. package/dist/server/multi-target-identity.d.ts.map +1 -0
  270. package/dist/server/multi-target-identity.js +18 -0
  271. package/dist/server/multi-target-identity.js.map +1 -0
  272. package/dist/server/multi-target-runtime.d.ts +27 -0
  273. package/dist/server/multi-target-runtime.d.ts.map +1 -0
  274. package/dist/server/multi-target-runtime.js +110 -0
  275. package/dist/server/multi-target-runtime.js.map +1 -0
  276. package/dist/server/multi-target-server.d.ts +53 -0
  277. package/dist/server/multi-target-server.d.ts.map +1 -0
  278. package/dist/server/multi-target-server.js +434 -0
  279. package/dist/server/multi-target-server.js.map +1 -0
  280. package/dist/server/multi-target-shared-auth-state.d.ts +82 -0
  281. package/dist/server/multi-target-shared-auth-state.d.ts.map +1 -0
  282. package/dist/server/multi-target-shared-auth-state.js +226 -0
  283. package/dist/server/multi-target-shared-auth-state.js.map +1 -0
  284. package/dist/server/multi-target-tools.d.ts +20 -0
  285. package/dist/server/multi-target-tools.d.ts.map +1 -0
  286. package/dist/server/multi-target-tools.js +191 -0
  287. package/dist/server/multi-target-tools.js.map +1 -0
  288. package/dist/server/oauth-session-recovery.d.ts +22 -0
  289. package/dist/server/oauth-session-recovery.d.ts.map +1 -0
  290. package/dist/server/oauth-session-recovery.js +69 -0
  291. package/dist/server/oauth-session-recovery.js.map +1 -0
  292. package/dist/server/server.d.ts +47 -25
  293. package/dist/server/server.d.ts.map +1 -1
  294. package/dist/server/server.js +490 -301
  295. package/dist/server/server.js.map +1 -1
  296. package/dist/server/sinks/btp-auditlog.d.ts.map +1 -1
  297. package/dist/server/sinks/btp-auditlog.js +83 -11
  298. package/dist/server/sinks/btp-auditlog.js.map +1 -1
  299. package/dist/server/sinks/file.d.ts.map +1 -1
  300. package/dist/server/sinks/file.js.map +1 -1
  301. package/dist/server/sinks/stderr.d.ts.map +1 -1
  302. package/dist/server/sinks/stderr.js.map +1 -1
  303. package/dist/server/tool-auth.d.ts +10 -0
  304. package/dist/server/tool-auth.d.ts.map +1 -0
  305. package/dist/server/tool-auth.js +75 -0
  306. package/dist/server/tool-auth.js.map +1 -0
  307. package/dist/server/trace-context.d.ts +51 -0
  308. package/dist/server/trace-context.d.ts.map +1 -0
  309. package/dist/server/trace-context.js +100 -0
  310. package/dist/server/trace-context.js.map +1 -0
  311. package/dist/server/types.d.ts +28 -7
  312. package/dist/server/types.d.ts.map +1 -1
  313. package/dist/server/types.js +5 -2
  314. package/dist/server/types.js.map +1 -1
  315. package/dist/server/ui-log-buffer.d.ts.map +1 -1
  316. package/dist/server/ui-log-buffer.js.map +1 -1
  317. package/dist/server/ui-state.d.ts +0 -2
  318. package/dist/server/ui-state.d.ts.map +1 -1
  319. package/dist/server/ui-state.js +2 -6
  320. package/dist/server/ui-state.js.map +1 -1
  321. package/dist/server/ui.d.ts.map +1 -1
  322. package/dist/server/ui.js +8 -9
  323. package/dist/server/ui.js.map +1 -1
  324. package/package.json +21 -18
  325. package/dist/cache/warmup.d.ts +0 -41
  326. package/dist/cache/warmup.d.ts.map +0 -1
  327. package/dist/cache/warmup.js +0 -337
  328. package/dist/cache/warmup.js.map +0 -1
  329. package/dist/server/elicit.d.ts +0 -43
  330. package/dist/server/elicit.d.ts.map +0 -1
  331. package/dist/server/elicit.js +0 -183
  332. package/dist/server/elicit.js.map +0 -1
@@ -1,337 +0,0 @@
1
- /**
2
- * Cache warmup — pre-indexes all custom objects from the SAP system.
3
- *
4
- * Pipeline:
5
- * 1. Query TADIR for all custom objects (CLAS, INTF, FUNC) matching package filter
6
- * 2. Fetch source code for each object (bounded parallel)
7
- * 3. Extract dependencies from each source (local AST, no ADT calls)
8
- * 4. Store source + deps + edges in cache
9
- * 5. Build reverse dependency index (edges indexed by toId)
10
- *
11
- * Delta strategy:
12
- * - On-premise: query REPOSRC for objects changed since last warmup (UDAT field)
13
- * - BTP: full re-scan (no reliable change timestamp available)
14
- * - Fallback: compare source hash — if unchanged, skip dep extraction
15
- *
16
- * Timing estimates (5 concurrent requests):
17
- * - 500 objects: ~2-3 minutes
18
- * - 2,000 objects: ~8-12 minutes
19
- * - 5,000 objects: ~20-30 minutes
20
- */
21
- import { extractDependencies } from '../context/deps.js';
22
- import { logger } from '../server/logger.js';
23
- import { hashSource } from './cache.js';
24
- const WARMUP_CONCURRENT = 5;
25
- const WARMUP_MAX_OBJECTS = 10000;
26
- /**
27
- * Run cache warmup: enumerate + fetch + index all custom objects.
28
- *
29
- * @param client - ADT client for SAP access
30
- * @param cachingLayer - Caching layer to populate
31
- * @param packageFilter - Package name filter (supports wildcards, e.g. "Z*,Y*")
32
- * @param systemType - System type for choosing delta strategy
33
- */
34
- export async function runWarmup(client, cachingLayer, packageFilter, _systemType) {
35
- const start = Date.now();
36
- let fetched = 0;
37
- let skipped = 0;
38
- let failed = 0;
39
- let edgesCreated = 0;
40
- // Phase 1: Enumerate objects from TADIR
41
- logger.info('Cache warmup: enumerating objects from TADIR...');
42
- const entries = await enumerateObjects(client, packageFilter);
43
- logger.info(`Cache warmup: found ${entries.length} objects to index`);
44
- // Phase 2: Fetch + index in parallel batches
45
- for (let i = 0; i < entries.length; i += WARMUP_CONCURRENT) {
46
- const batch = entries.slice(i, i + WARMUP_CONCURRENT);
47
- const results = await Promise.all(batch.map(async (entry) => {
48
- try {
49
- return await indexObject(client, cachingLayer, entry);
50
- }
51
- catch (err) {
52
- logger.debug(`Cache warmup: failed to index ${entry.objectType}:${entry.objectName}`, {
53
- error: err instanceof Error ? err.message : String(err),
54
- });
55
- return { status: 'failed', edges: 0 };
56
- }
57
- }));
58
- try {
59
- applyWarmupWrites(cachingLayer, results);
60
- }
61
- catch (err) {
62
- logger.warn('Cache warmup: failed to store indexed batch', {
63
- error: err instanceof Error ? err.message : String(err),
64
- });
65
- failed += results.length;
66
- continue;
67
- }
68
- for (const r of results) {
69
- if (r.status === 'fetched') {
70
- fetched++;
71
- edgesCreated += r.edges;
72
- }
73
- else if (r.status === 'skipped') {
74
- skipped++;
75
- }
76
- else {
77
- failed++;
78
- }
79
- }
80
- // Progress logging every 50 objects
81
- if ((i + WARMUP_CONCURRENT) % 50 === 0 || i + WARMUP_CONCURRENT >= entries.length) {
82
- logger.info(`Cache warmup: ${fetched + skipped + failed}/${entries.length} (${fetched} fetched, ${skipped} skipped, ${failed} failed)`);
83
- }
84
- }
85
- cachingLayer.setWarmupDone(true);
86
- const durationMs = Date.now() - start;
87
- logger.info('Cache warmup complete', {
88
- totalObjects: entries.length,
89
- fetched,
90
- skipped,
91
- failed,
92
- edgesCreated,
93
- durationMs,
94
- });
95
- return { totalObjects: entries.length, fetched, skipped, failed, edgesCreated, durationMs };
96
- }
97
- function applyWarmupWrites(cachingLayer, results) {
98
- const writers = results.flatMap((result) => (result.write ? [result.write] : []));
99
- if (writers.length === 0)
100
- return;
101
- cachingLayer.cache.transaction(() => {
102
- for (const write of writers)
103
- write();
104
- });
105
- }
106
- /**
107
- * Enumerate all custom CLAS/INTF/FUNC objects from TADIR.
108
- *
109
- * Runs separate queries per OBJ_NAME prefix (Z%, Y%, /%) to avoid
110
- * parenthesized OR-LIKE clauses that some ADT systems reject.
111
- * Package filtering is done in-memory after fetching.
112
- */
113
- async function enumerateObjects(client, packageFilter) {
114
- // TADIR uses PGMID = 'R3TR' for main repository objects
115
- const objectTypes = "'CLAS','INTF','FUGR'"; // FUGR not FUNC — TADIR stores function groups
116
- const baseWhere = `PGMID = 'R3TR' AND OBJECT IN (${objectTypes})`;
117
- // Custom object name prefixes: Z*, Y*, namespaced /XX/*
118
- // We run one query per prefix to avoid OR-in-parens which some ADT systems reject
119
- const namePrefixes = ['Z%', 'Y%', '/%'];
120
- // Compile package filter patterns into regex for in-memory filtering
121
- let packageRegexes = null;
122
- if (packageFilter) {
123
- const patterns = packageFilter
124
- .split(',')
125
- .map((p) => p.trim())
126
- .filter(Boolean);
127
- if (patterns.length > 0) {
128
- packageRegexes = patterns.map((p) => {
129
- // Convert glob-style wildcards to regex
130
- const escaped = p
131
- .replace(/[.+^${}()|[\]\\]/g, '\\$&')
132
- .replace(/\*/g, '.*')
133
- .replace(/\?/g, '.');
134
- return new RegExp(`^${escaped}$`, 'i');
135
- });
136
- }
137
- }
138
- const seen = new Set();
139
- const entries = [];
140
- for (const prefix of namePrefixes) {
141
- const sql = `SELECT OBJECT, OBJ_NAME, DEVCLASS FROM TADIR WHERE ${baseWhere} AND OBJ_NAME LIKE '${prefix}' ORDER BY OBJECT, OBJ_NAME`;
142
- try {
143
- const data = await client.runQuery(sql, WARMUP_MAX_OBJECTS);
144
- for (const row of data.rows) {
145
- const objectType = String(row.OBJECT ?? '').trim();
146
- const objectName = String(row.OBJ_NAME ?? '').trim();
147
- const packageName = String(row.DEVCLASS ?? '').trim();
148
- if (!objectType || !objectName)
149
- continue;
150
- // Deduplicate (shouldn't happen, but defensive)
151
- const key = `${objectType}:${objectName}`;
152
- if (seen.has(key))
153
- continue;
154
- // Apply package filter in memory
155
- if (packageRegexes && !packageRegexes.some((r) => r.test(packageName)))
156
- continue;
157
- // Map TADIR types to our types
158
- if (objectType === 'CLAS' || objectType === 'INTF' || objectType === 'FUGR') {
159
- seen.add(key);
160
- entries.push({ objectType, objectName, packageName });
161
- }
162
- }
163
- }
164
- catch (err) {
165
- logger.warn(`Cache warmup: TADIR query failed for prefix '${prefix}'`, {
166
- error: err instanceof Error ? err.message : String(err),
167
- });
168
- }
169
- }
170
- if (entries.length === 0) {
171
- logger.warn('Cache warmup: no objects found in TADIR — check package filter or system content');
172
- }
173
- else if (entries.length >= WARMUP_MAX_OBJECTS) {
174
- logger.warn(`Cache warmup: found ${entries.length} objects (limit: ${WARMUP_MAX_OBJECTS}). ` +
175
- 'Results may be truncated. Consider narrowing the package filter (--cache-warmup-packages).');
176
- }
177
- return entries;
178
- }
179
- /**
180
- * Index a single object: fetch source, extract deps, store in cache.
181
- * Returns 'skipped' if source hash matches cached version.
182
- */
183
- async function indexObject(client, cachingLayer, entry) {
184
- const { objectType, objectName, packageName } = entry;
185
- // For FUGR: we enumerate the function modules within the group
186
- if (objectType === 'FUGR') {
187
- return indexFunctionGroup(client, cachingLayer, objectName, packageName);
188
- }
189
- // Fetch source
190
- let source;
191
- let etag;
192
- try {
193
- const cached = cachingLayer.getCachedSourceWithEtag(objectType, objectName);
194
- if (objectType === 'CLAS') {
195
- const result = await client.getClass(objectName, undefined, { ifNoneMatch: cached?.etag });
196
- source = result.notModified && cached ? cached.source : result.source;
197
- etag = result.notModified && cached ? cached.etag : result.etag;
198
- }
199
- else if (objectType === 'INTF') {
200
- const result = await client.getInterface(objectName, { ifNoneMatch: cached?.etag });
201
- source = result.notModified && cached ? cached.source : result.source;
202
- etag = result.notModified && cached ? cached.etag : result.etag;
203
- }
204
- else {
205
- return { status: 'failed', edges: 0 };
206
- }
207
- }
208
- catch {
209
- return { status: 'failed', edges: 0 };
210
- }
211
- // Check if source changed since last cache
212
- const cached = cachingLayer.getCachedSource(objectType, objectName);
213
- const newHash = hashSource(source);
214
- if (cached && cached.hash === newHash) {
215
- return { status: 'skipped', edges: 0 };
216
- }
217
- const cachedAt = new Date().toISOString();
218
- const node = {
219
- id: `${objectType}:${objectName}`.toUpperCase(),
220
- objectType,
221
- objectName: objectName.toUpperCase(),
222
- packageName: packageName.toUpperCase(),
223
- sourceHash: newHash,
224
- cachedAt,
225
- valid: true,
226
- };
227
- // Extract dependencies before opening the SQLite transaction. Only the
228
- // synchronous cache writes are batched; SAP/network work never runs inside it.
229
- const deps = extractDependencies(source, objectName, true);
230
- const fromId = objectName.toUpperCase();
231
- const edgeRecords = deps.map((dep) => ({
232
- fromId,
233
- toId: dep.name.toUpperCase(),
234
- edgeType: mapDepKindToEdgeType(dep.kind),
235
- discoveredAt: cachedAt,
236
- valid: true,
237
- }));
238
- return {
239
- status: 'fetched',
240
- edges: edgeRecords.length,
241
- write: () => {
242
- cachingLayer.cache.putSource(objectType, objectName, source, { etag });
243
- cachingLayer.cache.putNode(node);
244
- for (const edge of edgeRecords)
245
- cachingLayer.cache.putEdge(edge);
246
- },
247
- };
248
- }
249
- /**
250
- * Index a function group: fetch its function modules and index each.
251
- */
252
- async function indexFunctionGroup(client, cachingLayer, groupName, packageName) {
253
- try {
254
- const fg = await client.getFunctionGroup(groupName);
255
- let totalEdges = 0;
256
- let anyFetched = false;
257
- const writers = [];
258
- // fg is a parsed object with functions list
259
- const fgData = typeof fg === 'string' ? JSON.parse(fg) : fg;
260
- const functions = fgData.functions ?? [];
261
- for (const funcName of functions) {
262
- const funcWriters = [() => cachingLayer.cache.putFuncGroup(funcName, groupName)];
263
- try {
264
- const cached = cachingLayer.getCachedSource('FUNC', funcName);
265
- const result = await client.getFunction(groupName, funcName, { ifNoneMatch: cached?.etag });
266
- const source = result.notModified && cached ? cached.source : result.source;
267
- const etag = result.notModified && cached ? cached.etag : result.etag;
268
- const newHash = hashSource(source);
269
- if (cached && cached.hash === newHash) {
270
- writers.push(() => {
271
- for (const write of funcWriters)
272
- write();
273
- });
274
- continue;
275
- }
276
- const cachedAt = new Date().toISOString();
277
- const node = {
278
- id: `FUNC:${funcName}`.toUpperCase(),
279
- objectType: 'FUNC',
280
- objectName: funcName.toUpperCase(),
281
- packageName: packageName.toUpperCase(),
282
- sourceHash: newHash,
283
- cachedAt,
284
- valid: true,
285
- };
286
- const deps = extractDependencies(source, funcName, true);
287
- const edgeRecords = deps.map((dep) => ({
288
- fromId: funcName.toUpperCase(),
289
- toId: dep.name.toUpperCase(),
290
- edgeType: mapDepKindToEdgeType(dep.kind),
291
- discoveredAt: cachedAt,
292
- valid: true,
293
- }));
294
- totalEdges += edgeRecords.length;
295
- funcWriters.push(() => cachingLayer.cache.putSource('FUNC', funcName, source, { etag }), () => cachingLayer.cache.putNode(node), ...edgeRecords.map((edge) => () => cachingLayer.cache.putEdge(edge)));
296
- writers.push(() => {
297
- for (const write of funcWriters)
298
- write();
299
- });
300
- anyFetched = true;
301
- }
302
- catch {
303
- // Individual func fetch failure — continue with others
304
- writers.push(() => {
305
- for (const write of funcWriters)
306
- write();
307
- });
308
- }
309
- }
310
- return {
311
- status: anyFetched ? 'fetched' : 'skipped',
312
- edges: totalEdges,
313
- write: writers.length > 0
314
- ? () => {
315
- for (const write of writers)
316
- write();
317
- }
318
- : undefined,
319
- };
320
- }
321
- catch {
322
- return { status: 'failed', edges: 0 };
323
- }
324
- }
325
- /** Map dependency kind to cache edge type */
326
- function mapDepKindToEdgeType(kind) {
327
- switch (kind) {
328
- case 'function_call':
329
- return 'CALLS';
330
- case 'interface':
331
- case 'inheritance':
332
- return 'IMPLEMENTS';
333
- default:
334
- return 'USES';
335
- }
336
- }
337
- //# sourceMappingURL=warmup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"warmup.js","sourceRoot":"","sources":["../../src/cache/warmup.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- /**
2
- * MCP Elicitation helpers for ARC-1.
3
- *
4
- * Wraps the MCP SDK's server.elicitInput() with:
5
- * - Client capability detection (graceful fallback when unsupported)
6
- * - Typed convenience methods for common patterns
7
- * - Audit logging of all elicitation events
8
- *
9
- * Based on MCP spec 2025-06-18 / 2025-11-25 elicitation protocol.
10
- * Dassian ADT uses similar patterns for confirmations and parameter prompts.
11
- */
12
- import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
13
- /**
14
- * Confirm a destructive or irreversible operation with the user.
15
- *
16
- * Returns true if:
17
- * - User confirms (action: 'accept')
18
- * - Elicitation is not supported (graceful fallback — proceed without asking)
19
- *
20
- * Returns false if:
21
- * - User declines or cancels
22
- */
23
- export declare function confirmDestructive(server: Server | undefined, toolName: string, message: string): Promise<boolean>;
24
- /**
25
- * Ask user to select from a list of options.
26
- *
27
- * Returns the selected value, or undefined if:
28
- * - User cancels/declines
29
- * - Elicitation is not supported
30
- */
31
- export declare function selectOption(server: Server | undefined, toolName: string, message: string, options: Array<{
32
- value: string;
33
- title: string;
34
- }>): Promise<string | undefined>;
35
- /**
36
- * Prompt user for a string value.
37
- *
38
- * Returns the entered value, or undefined if:
39
- * - User cancels/declines
40
- * - Elicitation is not supported
41
- */
42
- export declare function promptString(server: Server | undefined, toolName: string, message: string, fieldName: string, description?: string): Promise<string | undefined>;
43
- //# sourceMappingURL=elicit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"elicit.d.ts","sourceRoot":"","sources":["../../src/server/elicit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAiBxE;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CA8ClB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA+C7B;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA6C7B"}
@@ -1,183 +0,0 @@
1
- /**
2
- * MCP Elicitation helpers for ARC-1.
3
- *
4
- * Wraps the MCP SDK's server.elicitInput() with:
5
- * - Client capability detection (graceful fallback when unsupported)
6
- * - Typed convenience methods for common patterns
7
- * - Audit logging of all elicitation events
8
- *
9
- * Based on MCP spec 2025-06-18 / 2025-11-25 elicitation protocol.
10
- * Dassian ADT uses similar patterns for confirmations and parameter prompts.
11
- */
12
- import { logger } from './logger.js';
13
- /**
14
- * Check if the connected MCP client supports form elicitation.
15
- * Returns false if server is undefined or client doesn't declare the capability.
16
- */
17
- function supportsElicitation(server) {
18
- if (!server)
19
- return false;
20
- try {
21
- const caps = server.getClientCapabilities();
22
- return !!caps?.elicitation?.form;
23
- }
24
- catch {
25
- return false;
26
- }
27
- }
28
- /**
29
- * Confirm a destructive or irreversible operation with the user.
30
- *
31
- * Returns true if:
32
- * - User confirms (action: 'accept')
33
- * - Elicitation is not supported (graceful fallback — proceed without asking)
34
- *
35
- * Returns false if:
36
- * - User declines or cancels
37
- */
38
- export async function confirmDestructive(server, toolName, message) {
39
- if (!supportsElicitation(server)) {
40
- return true; // Fallback: proceed without asking
41
- }
42
- logger.emitAudit({
43
- timestamp: new Date().toISOString(),
44
- level: 'info',
45
- event: 'elicitation_sent',
46
- tool: toolName,
47
- message,
48
- fields: ['confirm'],
49
- });
50
- try {
51
- const result = await server.elicitInput({
52
- message,
53
- requestedSchema: {
54
- type: 'object',
55
- properties: {
56
- confirm: {
57
- type: 'boolean',
58
- title: 'Confirm',
59
- description: message,
60
- },
61
- },
62
- required: ['confirm'],
63
- },
64
- });
65
- const accepted = result.action === 'accept' && result.content?.confirm === true;
66
- logger.emitAudit({
67
- timestamp: new Date().toISOString(),
68
- level: 'info',
69
- event: 'elicitation_response',
70
- tool: toolName,
71
- action: result.action,
72
- });
73
- return accepted;
74
- }
75
- catch {
76
- // Elicitation failed (client doesn't support it, connection issue, etc.)
77
- // Graceful fallback: proceed
78
- return true;
79
- }
80
- }
81
- /**
82
- * Ask user to select from a list of options.
83
- *
84
- * Returns the selected value, or undefined if:
85
- * - User cancels/declines
86
- * - Elicitation is not supported
87
- */
88
- export async function selectOption(server, toolName, message, options) {
89
- if (!supportsElicitation(server)) {
90
- return undefined;
91
- }
92
- logger.emitAudit({
93
- timestamp: new Date().toISOString(),
94
- level: 'info',
95
- event: 'elicitation_sent',
96
- tool: toolName,
97
- message,
98
- fields: ['selection'],
99
- });
100
- try {
101
- const result = await server.elicitInput({
102
- message,
103
- requestedSchema: {
104
- type: 'object',
105
- properties: {
106
- selection: {
107
- type: 'string',
108
- title: 'Selection',
109
- description: message,
110
- enum: options.map((o) => o.value),
111
- enumNames: options.map((o) => o.title),
112
- },
113
- },
114
- required: ['selection'],
115
- },
116
- });
117
- logger.emitAudit({
118
- timestamp: new Date().toISOString(),
119
- level: 'info',
120
- event: 'elicitation_response',
121
- tool: toolName,
122
- action: result.action,
123
- });
124
- if (result.action === 'accept' && typeof result.content?.selection === 'string') {
125
- return result.content.selection;
126
- }
127
- return undefined;
128
- }
129
- catch {
130
- return undefined;
131
- }
132
- }
133
- /**
134
- * Prompt user for a string value.
135
- *
136
- * Returns the entered value, or undefined if:
137
- * - User cancels/declines
138
- * - Elicitation is not supported
139
- */
140
- export async function promptString(server, toolName, message, fieldName, description) {
141
- if (!supportsElicitation(server)) {
142
- return undefined;
143
- }
144
- logger.emitAudit({
145
- timestamp: new Date().toISOString(),
146
- level: 'info',
147
- event: 'elicitation_sent',
148
- tool: toolName,
149
- message,
150
- fields: [fieldName],
151
- });
152
- try {
153
- const result = await server.elicitInput({
154
- message,
155
- requestedSchema: {
156
- type: 'object',
157
- properties: {
158
- [fieldName]: {
159
- type: 'string',
160
- title: fieldName,
161
- description: description ?? message,
162
- },
163
- },
164
- required: [fieldName],
165
- },
166
- });
167
- logger.emitAudit({
168
- timestamp: new Date().toISOString(),
169
- level: 'info',
170
- event: 'elicitation_response',
171
- tool: toolName,
172
- action: result.action,
173
- });
174
- if (result.action === 'accept' && typeof result.content?.[fieldName] === 'string') {
175
- return result.content[fieldName];
176
- }
177
- return undefined;
178
- }
179
- catch {
180
- return undefined;
181
- }
182
- }
183
- //# sourceMappingURL=elicit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"elicit.js","sourceRoot":"","sources":["../../src/server/elicit.ts"],"names":[],"mappings":"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"}