arc-1 0.3.0 → 0.4.1

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 (152) hide show
  1. package/README.md +77 -199
  2. package/dist/adt/btp.d.ts +2 -2
  3. package/dist/adt/btp.d.ts.map +1 -1
  4. package/dist/adt/btp.js +1 -1
  5. package/dist/adt/btp.js.map +1 -1
  6. package/dist/adt/client.d.ts +13 -1
  7. package/dist/adt/client.d.ts.map +1 -1
  8. package/dist/adt/client.js +39 -1
  9. package/dist/adt/client.js.map +1 -1
  10. package/dist/adt/codeintel.d.ts +41 -0
  11. package/dist/adt/codeintel.d.ts.map +1 -1
  12. package/dist/adt/codeintel.js +99 -27
  13. package/dist/adt/codeintel.js.map +1 -1
  14. package/dist/adt/config.d.ts.map +1 -1
  15. package/dist/adt/config.js.map +1 -1
  16. package/dist/adt/cookies.d.ts.map +1 -1
  17. package/dist/adt/cookies.js.map +1 -1
  18. package/dist/adt/crud.d.ts.map +1 -1
  19. package/dist/adt/crud.js.map +1 -1
  20. package/dist/adt/devtools.d.ts +14 -0
  21. package/dist/adt/devtools.d.ts.map +1 -1
  22. package/dist/adt/devtools.js +28 -3
  23. package/dist/adt/devtools.js.map +1 -1
  24. package/dist/adt/diagnostics.d.ts +101 -0
  25. package/dist/adt/diagnostics.d.ts.map +1 -0
  26. package/dist/adt/diagnostics.js +349 -0
  27. package/dist/adt/diagnostics.js.map +1 -0
  28. package/dist/adt/errors.d.ts.map +1 -1
  29. package/dist/adt/errors.js.map +1 -1
  30. package/dist/adt/features.d.ts.map +1 -1
  31. package/dist/adt/features.js.map +1 -1
  32. package/dist/adt/http.d.ts +26 -7
  33. package/dist/adt/http.d.ts.map +1 -1
  34. package/dist/adt/http.js +140 -86
  35. package/dist/adt/http.js.map +1 -1
  36. package/dist/adt/oauth.d.ts.map +1 -1
  37. package/dist/adt/oauth.js.map +1 -1
  38. package/dist/adt/safety.d.ts.map +1 -1
  39. package/dist/adt/safety.js.map +1 -1
  40. package/dist/adt/transport.d.ts.map +1 -1
  41. package/dist/adt/transport.js.map +1 -1
  42. package/dist/adt/types.d.ts +139 -0
  43. package/dist/adt/types.d.ts.map +1 -1
  44. package/dist/adt/types.js.map +1 -1
  45. package/dist/adt/xml-parser.d.ts +37 -1
  46. package/dist/adt/xml-parser.d.ts.map +1 -1
  47. package/dist/adt/xml-parser.js +147 -0
  48. package/dist/adt/xml-parser.js.map +1 -1
  49. package/dist/cache/cache.d.ts +47 -4
  50. package/dist/cache/cache.d.ts.map +1 -1
  51. package/dist/cache/cache.js +16 -5
  52. package/dist/cache/cache.js.map +1 -1
  53. package/dist/cache/caching-layer.d.ts +82 -0
  54. package/dist/cache/caching-layer.d.ts.map +1 -0
  55. package/dist/cache/caching-layer.js +134 -0
  56. package/dist/cache/caching-layer.js.map +1 -0
  57. package/dist/cache/memory.d.ts +14 -2
  58. package/dist/cache/memory.d.ts.map +1 -1
  59. package/dist/cache/memory.js +72 -5
  60. package/dist/cache/memory.js.map +1 -1
  61. package/dist/cache/sqlite.d.ts +10 -1
  62. package/dist/cache/sqlite.d.ts.map +1 -1
  63. package/dist/cache/sqlite.js +90 -2
  64. package/dist/cache/sqlite.js.map +1 -1
  65. package/dist/cache/warmup.d.ts +41 -0
  66. package/dist/cache/warmup.d.ts.map +1 -0
  67. package/dist/cache/warmup.js +286 -0
  68. package/dist/cache/warmup.js.map +1 -0
  69. package/dist/cli.d.ts.map +1 -1
  70. package/dist/cli.js.map +1 -1
  71. package/dist/context/cds-deps.d.ts +35 -0
  72. package/dist/context/cds-deps.d.ts.map +1 -0
  73. package/dist/context/cds-deps.js +201 -0
  74. package/dist/context/cds-deps.js.map +1 -0
  75. package/dist/context/compressor.d.ts +20 -1
  76. package/dist/context/compressor.d.ts.map +1 -1
  77. package/dist/context/compressor.js +178 -17
  78. package/dist/context/compressor.js.map +1 -1
  79. package/dist/context/contract.d.ts.map +1 -1
  80. package/dist/context/contract.js.map +1 -1
  81. package/dist/context/deps.d.ts.map +1 -1
  82. package/dist/context/deps.js.map +1 -1
  83. package/dist/context/method-surgery.d.ts +91 -0
  84. package/dist/context/method-surgery.d.ts.map +1 -0
  85. package/dist/context/method-surgery.js +441 -0
  86. package/dist/context/method-surgery.js.map +1 -0
  87. package/dist/context/types.d.ts +7 -0
  88. package/dist/context/types.d.ts.map +1 -1
  89. package/dist/context/types.js.map +1 -1
  90. package/dist/handlers/hyperfocused.d.ts +35 -0
  91. package/dist/handlers/hyperfocused.d.ts.map +1 -0
  92. package/dist/handlers/hyperfocused.js +104 -0
  93. package/dist/handlers/hyperfocused.js.map +1 -0
  94. package/dist/handlers/intent.d.ts +2 -1
  95. package/dist/handlers/intent.d.ts.map +1 -1
  96. package/dist/handlers/intent.js +440 -43
  97. package/dist/handlers/intent.js.map +1 -1
  98. package/dist/handlers/tools.d.ts.map +1 -1
  99. package/dist/handlers/tools.js +130 -39
  100. package/dist/handlers/tools.js.map +1 -1
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js.map +1 -1
  103. package/dist/lint/config-builder.d.ts +60 -0
  104. package/dist/lint/config-builder.d.ts.map +1 -0
  105. package/dist/lint/config-builder.js +187 -0
  106. package/dist/lint/config-builder.js.map +1 -0
  107. package/dist/lint/lint.d.ts +43 -0
  108. package/dist/lint/lint.d.ts.map +1 -1
  109. package/dist/lint/lint.js +77 -2
  110. package/dist/lint/lint.js.map +1 -1
  111. package/dist/lint/presets/cloud.d.ts +16 -0
  112. package/dist/lint/presets/cloud.d.ts.map +1 -0
  113. package/dist/lint/presets/cloud.js +111 -0
  114. package/dist/lint/presets/cloud.js.map +1 -0
  115. package/dist/lint/presets/onprem.d.ts +17 -0
  116. package/dist/lint/presets/onprem.d.ts.map +1 -0
  117. package/dist/lint/presets/onprem.js +82 -0
  118. package/dist/lint/presets/onprem.js.map +1 -0
  119. package/dist/server/audit.d.ts +1 -0
  120. package/dist/server/audit.d.ts.map +1 -1
  121. package/dist/server/audit.js.map +1 -1
  122. package/dist/server/config.d.ts.map +1 -1
  123. package/dist/server/config.js +12 -0
  124. package/dist/server/config.js.map +1 -1
  125. package/dist/server/context.d.ts.map +1 -1
  126. package/dist/server/context.js.map +1 -1
  127. package/dist/server/elicit.d.ts.map +1 -1
  128. package/dist/server/elicit.js.map +1 -1
  129. package/dist/server/http.d.ts.map +1 -1
  130. package/dist/server/http.js +4 -1
  131. package/dist/server/http.js.map +1 -1
  132. package/dist/server/logger.d.ts.map +1 -1
  133. package/dist/server/logger.js.map +1 -1
  134. package/dist/server/server.d.ts +3 -2
  135. package/dist/server/server.d.ts.map +1 -1
  136. package/dist/server/server.js +90 -5
  137. package/dist/server/server.js.map +1 -1
  138. package/dist/server/sinks/btp-auditlog.d.ts.map +1 -1
  139. package/dist/server/sinks/btp-auditlog.js.map +1 -1
  140. package/dist/server/sinks/file.d.ts.map +1 -1
  141. package/dist/server/sinks/file.js.map +1 -1
  142. package/dist/server/sinks/stderr.d.ts.map +1 -1
  143. package/dist/server/sinks/stderr.js.map +1 -1
  144. package/dist/server/sinks/types.d.ts.map +1 -1
  145. package/dist/server/sinks/types.js.map +1 -1
  146. package/dist/server/types.d.ts +14 -0
  147. package/dist/server/types.d.ts.map +1 -1
  148. package/dist/server/types.js +6 -0
  149. package/dist/server/types.js.map +1 -1
  150. package/dist/server/xsuaa.d.ts.map +1 -1
  151. package/dist/server/xsuaa.js.map +1 -1
  152. package/package.json +13 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caching-layer.d.ts","sourceRoot":"","sources":["../../src/cache/caching-layer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGtE,uDAAuD;AACvD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,OAAO,CAAC,UAAU,CAAS;gBAEf,KAAK,EAAE,KAAK;IAIxB,4DAA4D;IAC5D,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIlC,4CAA4C;IAC5C,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAID;;;OAGG;IACG,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAC7B,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,CAAC;IAa5C;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAM5E;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IASxD;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG,IAAI;IAgBjH;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkBnF;;;OAGG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAOxD;;;;OAIG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI;IAQ5E,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;CAG3E"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Caching layer — orchestrates source + dependency caching.
3
+ *
4
+ * Sits between the intent handler / compressor and the ADT client.
5
+ * Provides cache-aware source fetching with hash-based dependency
6
+ * graph invalidation.
7
+ *
8
+ * Design:
9
+ * - Source code is cached by (type, name) with a SHA-256 hash.
10
+ * - Dependency graphs (contracts[]) are cached by source hash.
11
+ * When the source changes, the hash changes, and deps are re-resolved.
12
+ * When the source hasn't changed, ALL downstream dep fetches are skipped.
13
+ * - Function group mappings are cached permanently (rarely change).
14
+ * - Writes invalidate the source cache for the written object.
15
+ *
16
+ * Three tiers:
17
+ * - Tier 1 (stdio): MemoryCache, dies with process. Eliminates duplicate
18
+ * fetches within a session.
19
+ * - Tier 2 (http-streamable): SqliteCache, persists. Multiple sessions
20
+ * share the warm cache.
21
+ * - Tier 3 (Docker + warmup): SqliteCache pre-populated via TADIR scan.
22
+ * Enables reverse dependency lookup.
23
+ */
24
+ import { logger } from '../server/logger.js';
25
+ import { hashSource } from './cache.js';
26
+ export class CachingLayer {
27
+ cache;
28
+ warmupDone = false;
29
+ constructor(cache) {
30
+ this.cache = cache;
31
+ }
32
+ /** Mark warmup as complete (enables reverse dep lookups) */
33
+ setWarmupDone(done) {
34
+ this.warmupDone = done;
35
+ }
36
+ /** Whether the warmup index is available */
37
+ get isWarmupAvailable() {
38
+ return this.warmupDone;
39
+ }
40
+ // ─── Source Fetching with Cache ────────────────────────────────────
41
+ /**
42
+ * Get source code, using cache if available.
43
+ * Returns the source and whether it was a cache hit.
44
+ */
45
+ async getSource(objectType, objectName, fetcher) {
46
+ const cached = this.cache.getSource(objectType, objectName);
47
+ if (cached) {
48
+ logger.debug(`[cache] source HIT ${objectType}:${objectName}`);
49
+ return { source: cached.source, hit: true };
50
+ }
51
+ const source = await fetcher();
52
+ this.cache.putSource(objectType, objectName, source);
53
+ logger.debug(`[cache] source MISS ${objectType}:${objectName} (${source.length} chars stored)`);
54
+ return { source, hit: false };
55
+ }
56
+ /**
57
+ * Get cached source without fetching (for cache-only lookups).
58
+ */
59
+ getCachedSource(objectType, objectName) {
60
+ return this.cache.getSource(objectType, objectName);
61
+ }
62
+ // ─── Dependency Graph Cache ───────────────────────────────────────
63
+ /**
64
+ * Check if we have a cached dep graph for the given source.
65
+ * The graph is keyed by the source hash — if source changed, this returns null.
66
+ */
67
+ getCachedDepGraph(source) {
68
+ const hash = hashSource(source);
69
+ const cached = this.cache.getDepGraph(hash);
70
+ if (cached) {
71
+ logger.debug(`[cache] depgraph HIT ${cached.objectType}:${cached.objectName} (hash ${hash.slice(0, 8)})`);
72
+ }
73
+ return cached;
74
+ }
75
+ /**
76
+ * Store a resolved dep graph keyed by source hash.
77
+ */
78
+ putDepGraph(source, objectName, objectType, contracts) {
79
+ const hash = hashSource(source);
80
+ logger.debug(`[cache] depgraph STORE ${objectType}:${objectName} (${contracts.length} contracts, hash ${hash.slice(0, 8)})`);
81
+ this.cache.putDepGraph({
82
+ sourceHash: hash,
83
+ objectName,
84
+ objectType,
85
+ contracts,
86
+ cachedAt: new Date().toISOString(),
87
+ });
88
+ }
89
+ // ─── Function Group Resolution ────────────────────────────────────
90
+ /**
91
+ * Resolve a function module's group, with cache.
92
+ */
93
+ async resolveFuncGroup(client, funcName) {
94
+ const cached = this.cache.getFuncGroup(funcName);
95
+ if (cached)
96
+ return cached;
97
+ const results = await client.searchObject(funcName, 5);
98
+ for (const r of results) {
99
+ const match = r.uri.match(/groups\/([^/]+)/);
100
+ if (match) {
101
+ const group = match[1];
102
+ this.cache.putFuncGroup(funcName, group);
103
+ return group;
104
+ }
105
+ }
106
+ return null;
107
+ }
108
+ // ─── Write Invalidation ───────────────────────────────────────────
109
+ /**
110
+ * Invalidate cache entries for a written object.
111
+ * Called after SAPWrite to ensure stale source is not served.
112
+ */
113
+ invalidate(objectType, objectName) {
114
+ logger.debug(`[cache] invalidate ${objectType}:${objectName}`);
115
+ this.cache.invalidateSource(objectType, objectName);
116
+ }
117
+ // ─── Reverse Dependencies (Pre-warmer only) ───────────────────────
118
+ /**
119
+ * Find all objects that depend on the given object (reverse lookup).
120
+ * Only available when pre-warmer has populated the edge index.
121
+ * Returns null if warmup hasn't run (caller should show appropriate message).
122
+ */
123
+ getUsages(objectName) {
124
+ if (!this.warmupDone)
125
+ return null;
126
+ const edges = this.cache.getEdgesTo(objectName.toUpperCase());
127
+ return edges.map((e) => ({ fromId: e.fromId, edgeType: e.edgeType }));
128
+ }
129
+ // ─── Stats ────────────────────────────────────────────────────────
130
+ stats() {
131
+ return this.cache.stats();
132
+ }
133
+ }
134
+ //# sourceMappingURL=caching-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caching-layer.js","sourceRoot":"","sources":["../../src/cache/caching-layer.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,35 @@
1
1
  /**
2
2
  * In-memory cache implementation.
3
3
  *
4
- * Default cache backend — fast, ephemeral.
4
+ * Default cache backend for stdio transport — fast, ephemeral.
5
5
  * Data is lost when the process exits.
6
6
  * Thread-safe by default in Node.js (single-threaded event loop).
7
7
  */
8
- import type { Cache, CacheApi, CacheEdge, CacheNode, CacheStats } from './cache.js';
8
+ import type { Cache, CacheApi, CachedDepGraph, CachedSource, CacheEdge, CacheNode, CacheStats } from './cache.js';
9
9
  export declare class MemoryCache implements Cache {
10
10
  private nodes;
11
11
  private edges;
12
+ private reverseEdges;
12
13
  private apis;
14
+ private sources;
15
+ private depGraphs;
16
+ private funcGroups;
13
17
  putNode(node: CacheNode): void;
14
18
  getNode(id: string): CacheNode | null;
15
19
  getNodesByPackage(packageName: string): CacheNode[];
16
20
  invalidateNode(id: string): void;
17
21
  putEdge(edge: CacheEdge): void;
18
22
  getEdgesFrom(fromId: string): CacheEdge[];
23
+ getEdgesTo(toId: string): CacheEdge[];
19
24
  putApi(api: CacheApi): void;
20
25
  getApi(name: string, type: string): CacheApi | null;
26
+ putSource(objectType: string, objectName: string, source: string): void;
27
+ getSource(objectType: string, objectName: string): CachedSource | null;
28
+ invalidateSource(objectType: string, objectName: string): void;
29
+ putDepGraph(graph: CachedDepGraph): void;
30
+ getDepGraph(sourceHash: string): CachedDepGraph | null;
31
+ putFuncGroup(funcName: string, groupName: string): void;
32
+ getFuncGroup(funcName: string): string | null;
21
33
  clear(): void;
22
34
  stats(): CacheStats;
23
35
  close(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../ts-src/cache/memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpF,qBAAa,WAAY,YAAW,KAAK;IACvC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,IAAI,CAA+B;IAE3C,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI9B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIrC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE;IAWnD,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAOhC,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAO9B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAIzC,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAI3B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAInD,KAAK,IAAI,IAAI;IAMb,KAAK,IAAI,UAAU;IAYnB,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/cache/memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGlH,qBAAa,WAAY,YAAW,KAAK;IACvC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,UAAU,CAA6B;IAI/C,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI9B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIrC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE;IAWnD,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAShC,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAwB9B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAIzC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE;IAMrC,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAI3B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAMnD,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAWvE,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAItE,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAM9D,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAIxC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAMtD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIvD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAM7C,KAAK,IAAI,IAAI;IAUb,KAAK,IAAI,UAAU;IAcnB,KAAK,IAAI,IAAI;CAGd"}
@@ -1,14 +1,20 @@
1
1
  /**
2
2
  * In-memory cache implementation.
3
3
  *
4
- * Default cache backend — fast, ephemeral.
4
+ * Default cache backend for stdio transport — fast, ephemeral.
5
5
  * Data is lost when the process exits.
6
6
  * Thread-safe by default in Node.js (single-threaded event loop).
7
7
  */
8
+ import { hashSource, sourceKey } from './cache.js';
8
9
  export class MemoryCache {
9
10
  nodes = new Map();
10
11
  edges = new Map();
12
+ reverseEdges = new Map();
11
13
  apis = new Map();
14
+ sources = new Map();
15
+ depGraphs = new Map();
16
+ funcGroups = new Map();
17
+ // ─── Node Operations ──────────────────────────────────────────────
12
18
  putNode(node) {
13
19
  this.nodes.set(node.id, { ...node });
14
20
  }
@@ -31,25 +37,84 @@ export class MemoryCache {
31
37
  node.valid = false;
32
38
  }
33
39
  }
40
+ // ─── Edge Operations ──────────────────────────────────────────────
34
41
  putEdge(edge) {
35
- const key = edge.fromId;
36
- const existing = this.edges.get(key) ?? [];
37
- existing.push({ ...edge });
38
- this.edges.set(key, existing);
42
+ const edgeCopy = { ...edge };
43
+ // Forward index
44
+ const fwd = this.edges.get(edge.fromId) ?? [];
45
+ // Replace existing edge with same (from, to, type) or add new
46
+ const fwdIdx = fwd.findIndex((e) => e.toId === edge.toId && e.edgeType === edge.edgeType);
47
+ if (fwdIdx >= 0) {
48
+ fwd[fwdIdx] = edgeCopy;
49
+ }
50
+ else {
51
+ fwd.push(edgeCopy);
52
+ }
53
+ this.edges.set(edge.fromId, fwd);
54
+ // Reverse index
55
+ const rev = this.reverseEdges.get(edge.toId) ?? [];
56
+ const revIdx = rev.findIndex((e) => e.fromId === edge.fromId && e.edgeType === edge.edgeType);
57
+ if (revIdx >= 0) {
58
+ rev[revIdx] = edgeCopy;
59
+ }
60
+ else {
61
+ rev.push(edgeCopy);
62
+ }
63
+ this.reverseEdges.set(edge.toId, rev);
39
64
  }
40
65
  getEdgesFrom(fromId) {
41
66
  return this.edges.get(fromId) ?? [];
42
67
  }
68
+ getEdgesTo(toId) {
69
+ return this.reverseEdges.get(toId) ?? [];
70
+ }
71
+ // ─── API Operations ───────────────────────────────────────────────
43
72
  putApi(api) {
44
73
  this.apis.set(`${api.type}:${api.name}`, { ...api });
45
74
  }
46
75
  getApi(name, type) {
47
76
  return this.apis.get(`${type}:${name}`) ?? null;
48
77
  }
78
+ // ─── Source Code Cache ────────────────────────────────────────────
79
+ putSource(objectType, objectName, source) {
80
+ const key = sourceKey(objectType, objectName);
81
+ this.sources.set(key, {
82
+ objectType: objectType.toUpperCase(),
83
+ objectName: objectName.toUpperCase(),
84
+ source,
85
+ hash: hashSource(source),
86
+ cachedAt: new Date().toISOString(),
87
+ });
88
+ }
89
+ getSource(objectType, objectName) {
90
+ return this.sources.get(sourceKey(objectType, objectName)) ?? null;
91
+ }
92
+ invalidateSource(objectType, objectName) {
93
+ this.sources.delete(sourceKey(objectType, objectName));
94
+ }
95
+ // ─── Dependency Graph Cache ───────────────────────────────────────
96
+ putDepGraph(graph) {
97
+ this.depGraphs.set(graph.sourceHash, { ...graph });
98
+ }
99
+ getDepGraph(sourceHash) {
100
+ return this.depGraphs.get(sourceHash) ?? null;
101
+ }
102
+ // ─── Function Group Resolution ────────────────────────────────────
103
+ putFuncGroup(funcName, groupName) {
104
+ this.funcGroups.set(funcName.toUpperCase(), groupName.toUpperCase());
105
+ }
106
+ getFuncGroup(funcName) {
107
+ return this.funcGroups.get(funcName.toUpperCase()) ?? null;
108
+ }
109
+ // ─── Management ───────────────────────────────────────────────────
49
110
  clear() {
50
111
  this.nodes.clear();
51
112
  this.edges.clear();
113
+ this.reverseEdges.clear();
52
114
  this.apis.clear();
115
+ this.sources.clear();
116
+ this.depGraphs.clear();
117
+ this.funcGroups.clear();
53
118
  }
54
119
  stats() {
55
120
  let edgeCount = 0;
@@ -60,6 +125,8 @@ export class MemoryCache {
60
125
  nodeCount: this.nodes.size,
61
126
  edgeCount,
62
127
  apiCount: this.apis.size,
128
+ sourceCount: this.sources.size,
129
+ contractCount: this.depGraphs.size,
63
130
  };
64
131
  }
65
132
  close() {
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../ts-src/cache/memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,OAAO,WAAW;IACd,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IACrC,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IACvC,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE3C,OAAO,CAAC,IAAe;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,iBAAiB,CAAC,WAAmB;QACnC,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,cAAc,CAAC,EAAU;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAe;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,GAAa;QAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,IAAY;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC;IAClD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,KAAK;QACH,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;QAC5B,CAAC;QACD,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAC1B,SAAS;YACT,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;SACzB,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF"}
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/cache/memory.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,12 @@
2
2
  * SQLite cache implementation using better-sqlite3.
3
3
  *
4
4
  * Persistent cache — survives process restarts.
5
+ * Default backend for http-streamable transport and Docker deployments.
5
6
  * Uses WAL mode for concurrent read performance.
6
7
  * better-sqlite3 is synchronous, which is actually faster than async
7
8
  * alternatives for single-process use (no Promise overhead).
8
9
  */
9
- import type { Cache, CacheApi, CacheEdge, CacheNode, CacheStats } from './cache.js';
10
+ import type { Cache, CacheApi, CachedDepGraph, CachedSource, CacheEdge, CacheNode, CacheStats } from './cache.js';
10
11
  export declare class SqliteCache implements Cache {
11
12
  private db;
12
13
  constructor(dbPath: string);
@@ -17,8 +18,16 @@ export declare class SqliteCache implements Cache {
17
18
  invalidateNode(id: string): void;
18
19
  putEdge(edge: CacheEdge): void;
19
20
  getEdgesFrom(fromId: string): CacheEdge[];
21
+ getEdgesTo(toId: string): CacheEdge[];
20
22
  putApi(api: CacheApi): void;
21
23
  getApi(name: string, type: string): CacheApi | null;
24
+ putSource(objectType: string, objectName: string, source: string): void;
25
+ getSource(objectType: string, objectName: string): CachedSource | null;
26
+ invalidateSource(objectType: string, objectName: string): void;
27
+ putDepGraph(graph: CachedDepGraph): void;
28
+ getDepGraph(sourceHash: string): CachedDepGraph | null;
29
+ putFuncGroup(funcName: string, groupName: string): void;
30
+ getFuncGroup(funcName: string): string | null;
22
31
  clear(): void;
23
32
  stats(): CacheStats;
24
33
  close(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../ts-src/cache/sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpF,qBAAa,WAAY,YAAW,KAAK;IACvC,OAAO,CAAC,EAAE,CAAoB;gBAElB,MAAM,EAAE,MAAM;IAO1B,OAAO,CAAC,YAAY;IAqCpB,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAgB9B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAMrC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE;IAOnD,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIhC,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAO9B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAKzC,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAO3B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAcnD,KAAK,IAAI,IAAI;IAIb,KAAK,IAAI,UAAU;IAOnB,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/cache/sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGlH,qBAAa,WAAY,YAAW,KAAK;IACvC,OAAO,CAAC,EAAE,CAAoB;gBAElB,MAAM,EAAE,MAAM;IAO1B,OAAO,CAAC,YAAY;IA+DpB,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAgB9B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAMrC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE;IAOnD,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMhC,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAO9B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAKzC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE;IAOrC,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAO3B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAgBnD,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAevE,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAetE,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAO9D,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAOxC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAgBtD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAMvD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAU7C,KAAK,IAAI,IAAI;IAMb,KAAK,IAAI,UAAU;IASnB,KAAK,IAAI,IAAI;CAGd"}
@@ -2,11 +2,13 @@
2
2
  * SQLite cache implementation using better-sqlite3.
3
3
  *
4
4
  * Persistent cache — survives process restarts.
5
+ * Default backend for http-streamable transport and Docker deployments.
5
6
  * Uses WAL mode for concurrent read performance.
6
7
  * better-sqlite3 is synchronous, which is actually faster than async
7
8
  * alternatives for single-process use (no Promise overhead).
8
9
  */
9
10
  import Database from 'better-sqlite3';
11
+ import { hashSource, sourceKey } from './cache.js';
10
12
  export class SqliteCache {
11
13
  db;
12
14
  constructor(dbPath) {
@@ -47,10 +49,35 @@ export class SqliteCache {
47
49
  PRIMARY KEY (type, name)
48
50
  );
49
51
 
52
+ CREATE TABLE IF NOT EXISTS sources (
53
+ cache_key TEXT PRIMARY KEY,
54
+ object_type TEXT NOT NULL,
55
+ object_name TEXT NOT NULL,
56
+ source TEXT NOT NULL,
57
+ hash TEXT NOT NULL,
58
+ cached_at TEXT NOT NULL
59
+ );
60
+
61
+ CREATE TABLE IF NOT EXISTS dep_graphs (
62
+ source_hash TEXT PRIMARY KEY,
63
+ object_name TEXT NOT NULL,
64
+ object_type TEXT NOT NULL,
65
+ contracts TEXT NOT NULL,
66
+ cached_at TEXT NOT NULL
67
+ );
68
+
69
+ CREATE TABLE IF NOT EXISTS func_groups (
70
+ func_name TEXT PRIMARY KEY,
71
+ group_name TEXT NOT NULL
72
+ );
73
+
50
74
  CREATE INDEX IF NOT EXISTS idx_nodes_package ON nodes(package_name);
51
75
  CREATE INDEX IF NOT EXISTS idx_edges_from ON edges(from_id);
76
+ CREATE INDEX IF NOT EXISTS idx_edges_to ON edges(to_id);
77
+ CREATE INDEX IF NOT EXISTS idx_sources_hash ON sources(hash);
52
78
  `);
53
79
  }
80
+ // ─── Node Operations ──────────────────────────────────────────────
54
81
  putNode(node) {
55
82
  const stmt = this.db.prepare('INSERT OR REPLACE INTO nodes (id, object_type, object_name, package_name, source_hash, cached_at, valid, metadata) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
56
83
  stmt.run(node.id, node.objectType, node.objectName, node.packageName, node.sourceHash ?? null, node.cachedAt, node.valid ? 1 : 0, node.metadata ? JSON.stringify(node.metadata) : null);
@@ -68,6 +95,7 @@ export class SqliteCache {
68
95
  invalidateNode(id) {
69
96
  this.db.prepare('UPDATE nodes SET valid = 0 WHERE id = ?').run(id);
70
97
  }
98
+ // ─── Edge Operations ──────────────────────────────────────────────
71
99
  putEdge(edge) {
72
100
  const stmt = this.db.prepare('INSERT OR REPLACE INTO edges (from_id, to_id, edge_type, source, discovered_at, valid) VALUES (?, ?, ?, ?, ?, ?)');
73
101
  stmt.run(edge.fromId, edge.toId, edge.edgeType, edge.source ?? null, edge.discoveredAt, edge.valid ? 1 : 0);
@@ -76,6 +104,11 @@ export class SqliteCache {
76
104
  const rows = this.db.prepare('SELECT * FROM edges WHERE from_id = ?').all(fromId);
77
105
  return rows.map(rowToEdge);
78
106
  }
107
+ getEdgesTo(toId) {
108
+ const rows = this.db.prepare('SELECT * FROM edges WHERE to_id = ?').all(toId);
109
+ return rows.map(rowToEdge);
110
+ }
111
+ // ─── API Operations ───────────────────────────────────────────────
79
112
  putApi(api) {
80
113
  const stmt = this.db.prepare('INSERT OR REPLACE INTO apis (name, type, release_state, clean_core_level, application_component) VALUES (?, ?, ?, ?, ?)');
81
114
  stmt.run(api.name, api.type, api.releaseState, api.cleanCoreLevel ?? null, api.applicationComponent ?? null);
@@ -92,14 +125,69 @@ export class SqliteCache {
92
125
  applicationComponent: row.application_component,
93
126
  };
94
127
  }
128
+ // ─── Source Code Cache ────────────────────────────────────────────
129
+ putSource(objectType, objectName, source) {
130
+ const key = sourceKey(objectType, objectName);
131
+ const stmt = this.db.prepare('INSERT OR REPLACE INTO sources (cache_key, object_type, object_name, source, hash, cached_at) VALUES (?, ?, ?, ?, ?, ?)');
132
+ stmt.run(key, objectType.toUpperCase(), objectName.toUpperCase(), source, hashSource(source), new Date().toISOString());
133
+ }
134
+ getSource(objectType, objectName) {
135
+ const key = sourceKey(objectType, objectName);
136
+ const row = this.db.prepare('SELECT * FROM sources WHERE cache_key = ?').get(key);
137
+ if (!row)
138
+ return null;
139
+ return {
140
+ objectType: String(row.object_type),
141
+ objectName: String(row.object_name),
142
+ source: String(row.source),
143
+ hash: String(row.hash),
144
+ cachedAt: String(row.cached_at),
145
+ };
146
+ }
147
+ invalidateSource(objectType, objectName) {
148
+ const key = sourceKey(objectType, objectName);
149
+ this.db.prepare('DELETE FROM sources WHERE cache_key = ?').run(key);
150
+ }
151
+ // ─── Dependency Graph Cache ───────────────────────────────────────
152
+ putDepGraph(graph) {
153
+ const stmt = this.db.prepare('INSERT OR REPLACE INTO dep_graphs (source_hash, object_name, object_type, contracts, cached_at) VALUES (?, ?, ?, ?, ?)');
154
+ stmt.run(graph.sourceHash, graph.objectName, graph.objectType, JSON.stringify(graph.contracts), graph.cachedAt);
155
+ }
156
+ getDepGraph(sourceHash) {
157
+ const row = this.db.prepare('SELECT * FROM dep_graphs WHERE source_hash = ?').get(sourceHash);
158
+ if (!row)
159
+ return null;
160
+ return {
161
+ sourceHash: String(row.source_hash),
162
+ objectName: String(row.object_name),
163
+ objectType: String(row.object_type),
164
+ contracts: JSON.parse(String(row.contracts)),
165
+ cachedAt: String(row.cached_at),
166
+ };
167
+ }
168
+ // ─── Function Group Resolution ────────────────────────────────────
169
+ putFuncGroup(funcName, groupName) {
170
+ this.db
171
+ .prepare('INSERT OR REPLACE INTO func_groups (func_name, group_name) VALUES (?, ?)')
172
+ .run(funcName.toUpperCase(), groupName.toUpperCase());
173
+ }
174
+ getFuncGroup(funcName) {
175
+ const row = this.db.prepare('SELECT group_name FROM func_groups WHERE func_name = ?').get(funcName.toUpperCase());
176
+ if (!row)
177
+ return null;
178
+ return String(row.group_name);
179
+ }
180
+ // ─── Management ───────────────────────────────────────────────────
95
181
  clear() {
96
- this.db.exec('DELETE FROM nodes; DELETE FROM edges; DELETE FROM apis;');
182
+ this.db.exec('DELETE FROM nodes; DELETE FROM edges; DELETE FROM apis; DELETE FROM sources; DELETE FROM dep_graphs; DELETE FROM func_groups;');
97
183
  }
98
184
  stats() {
99
185
  const nodeCount = this.db.prepare('SELECT COUNT(*) as cnt FROM nodes').get().cnt;
100
186
  const edgeCount = this.db.prepare('SELECT COUNT(*) as cnt FROM edges').get().cnt;
101
187
  const apiCount = this.db.prepare('SELECT COUNT(*) as cnt FROM apis').get().cnt;
102
- return { nodeCount, edgeCount, apiCount };
188
+ const sourceCount = this.db.prepare('SELECT COUNT(*) as cnt FROM sources').get().cnt;
189
+ const contractCount = this.db.prepare('SELECT COUNT(*) as cnt FROM dep_graphs').get().cnt;
190
+ return { nodeCount, edgeCount, apiCount, sourceCount, contractCount };
103
191
  }
104
192
  close() {
105
193
  this.db.close();
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../ts-src/cache/sqlite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/cache/sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
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 type { AdtClient } from '../adt/client.js';
22
+ import type { CachingLayer } from './caching-layer.js';
23
+ /** Result of a warmup run */
24
+ export interface WarmupResult {
25
+ totalObjects: number;
26
+ fetched: number;
27
+ skipped: number;
28
+ failed: number;
29
+ edgesCreated: number;
30
+ durationMs: number;
31
+ }
32
+ /**
33
+ * Run cache warmup: enumerate + fetch + index all custom objects.
34
+ *
35
+ * @param client - ADT client for SAP access
36
+ * @param cachingLayer - Caching layer to populate
37
+ * @param packageFilter - Package name filter (supports wildcards, e.g. "Z*,Y*")
38
+ * @param systemType - System type for choosing delta strategy
39
+ */
40
+ export declare function runWarmup(client: AdtClient, cachingLayer: CachingLayer, packageFilter?: string, _systemType?: string): Promise<WarmupResult>;
41
+ //# sourceMappingURL=warmup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warmup.d.ts","sourceRoot":"","sources":["../../src/cache/warmup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD,6BAA6B;AAC7B,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AASD;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,YAAY,EAC1B,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC,CA4DvB"}