sdlc-agent-4-enterprise-server 1.42.0 → 1.42.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 (129) hide show
  1. package/README.md +4 -2
  2. package/dist/admin/db/core.js +23 -5
  3. package/dist/admin/db/core.js.map +1 -1
  4. package/dist/admin/db/schema.d.ts +5 -3
  5. package/dist/admin/db/schema.js +86 -59
  6. package/dist/admin/db/schema.js.map +1 -1
  7. package/dist/config/unified-extensions.d.ts +10 -0
  8. package/dist/config/unified-extensions.js +18 -0
  9. package/dist/config/unified-extensions.js.map +1 -0
  10. package/dist/database/migration/ensure-pega-category-counters.d.ts +4 -3
  11. package/dist/database/migration/ensure-pega-category-counters.js +13 -7
  12. package/dist/database/migration/ensure-pega-category-counters.js.map +1 -1
  13. package/dist/engine/enrichment/CodeEnrichmentHandler.js +9 -2
  14. package/dist/engine/enrichment/CodeEnrichmentHandler.js.map +1 -1
  15. package/dist/engine/graph/code-edge-extractor.js +23 -19
  16. package/dist/engine/graph/code-edge-extractor.js.map +1 -1
  17. package/dist/engine/graph/graph-sync-service.js +1 -1
  18. package/dist/engine/graph/graph-sync-service.js.map +1 -1
  19. package/dist/engine/graph/migrator.d.ts +12 -0
  20. package/dist/engine/graph/migrator.js +47 -0
  21. package/dist/engine/graph/migrator.js.map +1 -1
  22. package/dist/engine/indexer/async-file-scanner.js +1 -1
  23. package/dist/engine/indexer/async-file-scanner.js.map +1 -1
  24. package/dist/engine/indexer/file-scanner.js +7 -1
  25. package/dist/engine/indexer/file-scanner.js.map +1 -1
  26. package/dist/engine/indexer/indexing-engine.js +4 -1
  27. package/dist/engine/indexer/indexing-engine.js.map +1 -1
  28. package/dist/engine/indexer/project-type/resolver.d.ts +1 -1
  29. package/dist/engine/indexer/project-type/resolver.js +3 -10
  30. package/dist/engine/indexer/project-type/resolver.js.map +1 -1
  31. package/dist/engine/parsers/grammars/tree-sitter-jsp.wasm +0 -0
  32. package/dist/engine/parsers/indexer/storage.d.ts +1 -0
  33. package/dist/engine/parsers/indexer/storage.js +21 -0
  34. package/dist/engine/parsers/indexer/storage.js.map +1 -1
  35. package/dist/engine/parsers/languages/jsp-parser.d.ts +38 -0
  36. package/dist/engine/parsers/languages/jsp-parser.js +171 -0
  37. package/dist/engine/parsers/languages/jsp-parser.js.map +1 -0
  38. package/dist/engine/parsers/tree-sitter-indexer.d.ts +3 -6
  39. package/dist/engine/parsers/tree-sitter-indexer.js +79 -15
  40. package/dist/engine/parsers/tree-sitter-indexer.js.map +1 -1
  41. package/dist/engine/parsers/types.d.ts +1 -1
  42. package/dist/engine/query/query-layer.d.ts +21 -1
  43. package/dist/engine/query/query-layer.js +67 -3
  44. package/dist/engine/query/query-layer.js.map +1 -1
  45. package/dist/modules/kb-graph/service/constants.js +36 -0
  46. package/dist/modules/kb-graph/service/constants.js.map +1 -1
  47. package/dist/modules/kb-graph/service/sync.js +1 -1
  48. package/dist/modules/kb-graph/service/sync.js.map +1 -1
  49. package/dist/modules/memory/MemoryModuleBuilder.js +10 -0
  50. package/dist/modules/memory/MemoryModuleBuilder.js.map +1 -1
  51. package/dist/modules/orchestration/McpClientManager.d.ts +2 -0
  52. package/dist/modules/orchestration/McpClientManager.js +52 -21
  53. package/dist/modules/orchestration/McpClientManager.js.map +1 -1
  54. package/dist/modules/orchestration/McpServerConfigRepository.d.ts +26 -0
  55. package/dist/modules/orchestration/McpServerConfigRepository.js +95 -0
  56. package/dist/modules/orchestration/McpServerConfigRepository.js.map +1 -0
  57. package/dist/modules/orchestration/OrchestrationModule.js +32 -3
  58. package/dist/modules/orchestration/OrchestrationModule.js.map +1 -1
  59. package/dist/modules/pega/schema/SchemaStorageService.js +10 -1
  60. package/dist/modules/pega/schema/SchemaStorageService.js.map +1 -1
  61. package/dist/modules/security/SecurityModule.js +1 -1
  62. package/dist/modules/security/SecurityModule.js.map +1 -1
  63. package/dist/modules/security/gateguard/GateGuardRepository.d.ts +5 -5
  64. package/dist/modules/security/gateguard/GateGuardRepository.js +10 -10
  65. package/dist/modules/security/gateguard/GateGuardRepository.js.map +1 -1
  66. package/dist/modules/security/gateguard/GateGuardService.d.ts +6 -6
  67. package/dist/modules/security/gateguard/GateGuardService.js +14 -14
  68. package/dist/modules/security/gateguard/GateGuardService.js.map +1 -1
  69. package/dist/modules/security/gateguard/GateGuardToolHandler.js +7 -7
  70. package/dist/modules/security/gateguard/GateGuardToolHandler.js.map +1 -1
  71. package/dist/server/mcpServer.js +12 -2
  72. package/dist/server/mcpServer.js.map +1 -1
  73. package/dist/server/routes/admin/mcp-crud.js +106 -100
  74. package/dist/server/routes/admin/mcp-crud.js.map +1 -1
  75. package/dist/server/routes/admin/mcp.js +68 -60
  76. package/dist/server/routes/admin/mcp.js.map +1 -1
  77. package/dist/server/routes/api-index.js +13 -1
  78. package/dist/server/routes/api-index.js.map +1 -1
  79. package/dist/server/routes/kb-api.js +32 -3
  80. package/dist/server/routes/kb-api.js.map +1 -1
  81. package/package.json +3 -1
  82. package/src/__tests__/sa4e-testkit.ts +5 -2
  83. package/src/admin/__tests__/admin-db.test.ts +8 -0
  84. package/src/admin/db/core.ts +22 -5
  85. package/src/admin/db/schema.ts +106 -86
  86. package/src/config/unified-extensions.ts +20 -0
  87. package/src/database/migration/ensure-pega-category-counters.ts +16 -9
  88. package/src/engine/enrichment/CodeEnrichmentHandler.ts +9 -2
  89. package/src/engine/graph/code-edge-extractor.ts +24 -20
  90. package/src/engine/graph/graph-sync-service.ts +1 -1
  91. package/src/engine/graph/migrator.ts +48 -0
  92. package/src/engine/indexer/async-file-scanner.ts +1 -1
  93. package/src/engine/indexer/file-scanner.ts +7 -1
  94. package/src/engine/indexer/indexing-engine.ts +4 -1
  95. package/src/engine/indexer/project-type/resolver.ts +3 -10
  96. package/src/engine/parsers/__tests__/tree-sitter-indexer-tierB.test.ts +12 -0
  97. package/src/engine/parsers/grammar-config.json +9 -0
  98. package/src/engine/parsers/grammars/tree-sitter-jsp.wasm +0 -0
  99. package/src/engine/parsers/indexer/storage.ts +23 -0
  100. package/src/engine/parsers/languages/jsp-parser.js +167 -0
  101. package/src/engine/parsers/tree-sitter-indexer.ts +86 -21
  102. package/src/engine/parsers/types.ts +6 -0
  103. package/src/engine/query/query-layer.ts +94 -4
  104. package/src/modules/kb-graph/service/constants.ts +36 -0
  105. package/src/modules/kb-graph/service/sync.ts +1 -1
  106. package/src/modules/memory/MemoryModuleBuilder.ts +11 -0
  107. package/src/modules/orchestration/McpClientManager.ts +46 -20
  108. package/src/modules/orchestration/McpServerConfigRepository.ts +117 -0
  109. package/src/modules/orchestration/OrchestrationModule.ts +38 -3
  110. package/src/modules/orchestration/__tests__/McpServerConfigRepository.test.ts +122 -0
  111. package/src/modules/orchestration/__tests__/Orchestration.dynamic.it.test.ts +42 -0
  112. package/src/modules/pega/schema/SchemaStorageService.ts +12 -4
  113. package/src/modules/security/SecurityModule.ts +1 -1
  114. package/src/modules/security/gateguard/GateGuardRepository.ts +10 -10
  115. package/src/modules/security/gateguard/GateGuardService.ts +15 -15
  116. package/src/modules/security/gateguard/GateGuardToolHandler.ts +7 -7
  117. package/src/modules/security/gateguard/__tests__/GateGuardRepository.test.ts +28 -28
  118. package/src/modules/security/gateguard/__tests__/GateGuardService.test.ts +50 -49
  119. package/src/server/__tests__/mcpServer.calltool.it.test.ts +39 -0
  120. package/src/server/mcpServer.ts +12 -2
  121. package/src/server/routes/__tests__/admin.test.ts +4 -0
  122. package/src/server/routes/__tests__/tools-execute-scope.test.ts +78 -0
  123. package/src/server/routes/admin/mcp-crud.ts +105 -57
  124. package/src/server/routes/admin/mcp.ts +56 -53
  125. package/src/server/routes/api-index.ts +13 -1
  126. package/src/server/routes/kb-api.ts +32 -3
  127. package/src/server/routes/sa4e-215/__tests__/sa4e-215.routes.test.ts +5 -2
  128. package/tests/contract/extensions-contract.test.ts +30 -0
  129. package/tests/integration/auth.test.ts +4 -0
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
- <img src="https://img.shields.io/badge/version-1.42.0-blue?style=for-the-badge" alt="Version">
9
+ <img src="https://img.shields.io/badge/version-1.42.2-blue?style=for-the-badge" alt="Version">
10
10
  <img src="https://img.shields.io/badge/tools-66+-teal?style=for-the-badge" alt="Tools">
11
11
  <img src="https://img.shields.io/badge/node-%3E%3D18-green?style=for-the-badge" alt="Node">
12
12
  </p>
@@ -38,7 +38,7 @@ Server starts at **http://localhost:48721**. Verify it's running:
38
38
 
39
39
  ```bash
40
40
  curl http://localhost:48721/health
41
- # → {"status":"healthy","version":"1.42.0","uptime":5,"tools_loaded":52}
41
+ # → {"status":"healthy","version":"1.42.2","uptime":5,"tools_loaded":52}
42
42
  ```
43
43
 
44
44
  ### Development Mode (auto-reload)
@@ -233,6 +233,8 @@ The embedding model is expected at `.code-intel/models/model.onnx`. Download it:
233
233
 
234
234
  | Version | Date | Ticket | Changes |
235
235
  |---------|------|--------|---------|
236
+ | 1.42.2 | 2026-09-11 | SA4E-257 | Wire DB-backed MCP server config to McpClientManager: McpServerConfigRepository loads `mcp_servers` table, initializeAll reads enabled servers from DB, real-time hooks auto connect/reconnect/disconnect on CRUD, transport normalization `streamable-http → httpStream`, mock logs removed. Regression tests pass. |
237
+ | 1.42.1 | 2026-09-10 | SA4E-258 | Tenant scope stamping for tool execution: `/api/tools/execute` + `/api/code/search` stamp trusted scope onto tool args via canonical `__projectId`/`__userId` (not only `_projectContext`), fixing code-intel tools (fail-closed on missing `__projectId`) that returned "No results found". Covers MCP call path (mcpServer) + KB API route. Graph migrator idempotency, query-layer scope resolution, indexing-engine fixes. KB Graph: FileContainsSymbolStrategy dir-based match for LWC/Aura components (LWC_COMPONENT no longer isolated). Regression tests added (tools-execute-scope, orchestration dynamic IT, mcpServer calltool IT). |
236
238
  | 1.42.0 | 2026-09-08 | SA4E-301 | Multi-language tree-sitter parsers (C/C++/C#/PHP/Ruby/Scala/Swift/Kotlin) via shared GenericTreeSitterParser + regex fallback; symbol-kind fixes (struct/enum naming, method promotion, variable/property/constant separation, dedupe). Salesforce indexing (Apex/LWC/Aura/Visualforce/meta) with grammars copied to dist. KB Graph edges rebuilt from `relationships` (MembershipEdgeStrategy CONTAINS + FileContainsSymbolStrategy + inherits/implements resolve-by-name); auto-heal backfill (ensure-sa4e-301), unused edge tables dropped (303), unique index (302). Enrichment dedup (single CodeEnrichmentTaskCreator + PENDING guard, orphan task cleanup 300). Continuous budget-driven KB Graph LOD renderer. Node.js 22 LTS. |
237
239
  | 1.38.0 | 2026-08-25 | SA4E-214 | Extension-driven schema creation for Pega rule types. Dual-strategy harness analysis (HarnessParser + LlmSectionExtractor fallback for stream-rendered harnesses), new `/api/v1/pega/schema/{analyze,store,find,update}` endpoints, schema-guided code enrichment. Fixed: TaskWorker delegates CODE_ENRICHMENT to CodeEnrichmentHandler (Pega flow summary/pseudo_code), enrichment percent Math.floor, admin static vendor asset MIME type. Backend 2634 tests ✓. |
238
240
  | 1.37.2 | 2026-08-24 | — | Proxy bug fix: global-fetch-patch defensive fallback for curl/powershell mode, cookie jar persistence, followRedirects, workspace-scoped config, PowerShell CLM compat, pwsh binary. SA4E-204/205/206 parallel orchestration docs. |
@@ -67,9 +67,15 @@ export function getActiveDbConfig() {
67
67
  }
68
68
  }
69
69
  let sqliteAdapter = null;
70
+ // Single shared init promise — initAdapters() awaits this same promise so no
71
+ // caller (server boot, tests) can race schema creation / admin seeding.
72
+ let sqliteReady = null;
70
73
  /**
71
74
  * Get or create the unified SQLite adapter (singleton).
72
- * Handles directory creation, WAL mode, and schema initialization.
75
+ * Handles directory creation and WAL mode. Schema init is done separately via
76
+ * initAdapters() (async, cross-engine) so the seeding path is identical for
77
+ * SQLite and PostgreSQL. SqliteAdapter async methods wrap sync calls, so awaiting
78
+ * initSchema/seedDefaults on SQLite resolves synchronously in practice.
73
79
  * Note: SqliteAdapter.connect() is synchronous internally (just wraps sync calls).
74
80
  */
75
81
  function getUnifiedSqliteAdapter() {
@@ -77,8 +83,9 @@ function getUnifiedSqliteAdapter() {
77
83
  sqliteAdapter = new SqliteAdapter(DB_PATH);
78
84
  // SqliteAdapter.connect() is sync internally — safe to call eagerly
79
85
  void sqliteAdapter.connect();
80
- initSchema(sqliteAdapter);
81
- seedDefaults(sqliteAdapter);
86
+ const adapter = sqliteAdapter;
87
+ sqliteReady = initSchema(adapter).then(() => seedDefaults(adapter))
88
+ .catch((err) => logger.error({ err }, '[admin] SQLite schema init failed'));
82
89
  }
83
90
  return sqliteAdapter;
84
91
  }
@@ -116,6 +123,17 @@ export async function initAdapters() {
116
123
  const engine = getActiveEngine();
117
124
  if (engine === 'sqlite') {
118
125
  getDbAdapter();
126
+ // Await the shared init (schema + admin seed) instead of returning
127
+ // immediately — otherwise the first login/seed-dependent query races init
128
+ // and fails (e.g. 401 in tests, missing tables).
129
+ if (sqliteReady) {
130
+ await sqliteReady;
131
+ }
132
+ else {
133
+ const adapter = getDbAdapter();
134
+ await initSchema(adapter);
135
+ await seedDefaults(adapter);
136
+ }
119
137
  return;
120
138
  }
121
139
  const configService = new DatabaseConfigService(DATA_DIR);
@@ -125,8 +143,8 @@ export async function initAdapters() {
125
143
  dbAdapter = adapter;
126
144
  // Initialize schema and seed defaults for PostgreSQL/MySQL
127
145
  try {
128
- initSchema(adapter);
129
- seedDefaults(adapter);
146
+ await initSchema(adapter);
147
+ await seedDefaults(adapter);
130
148
  }
131
149
  catch (err) {
132
150
  logger.error({ err }, '[admin] Failed to init schema/seed defaults');
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/admin/db/core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAEvF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;AAEvD,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAEjD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AAE5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAClE,4DAA4D;AAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;AAE5D,mFAAmF;AACnF,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,QAAQ,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,8EAA8E;QAC9E,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI;gBAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,GAAG,CAAC,YAAY,IAAI,QAAQ,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,QAAQ,CAAC;IAAC,CAAC;AAC9B,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,QAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACtF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBAAC,MAAM,GAAG,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;QACtE,CAAC;QACD,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,OAAO,EAAE,MAAM,EAAE,QAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACxD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,QAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAAC,CAAC;AACpE,CAAC;AAED,IAAI,aAAa,GAAyB,IAAI,CAAC;AAE/C;;;;GAIG;AACH,SAAS,uBAAuB;IAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QAC3C,oEAAoE;QACpE,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;QAC7B,UAAU,CAAC,aAAa,CAAC,CAAC;QAC1B,YAAY,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,mDAAmD;AAEnD,IAAI,SAAS,GAA2B,IAAI,CAAC;AAE7C;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,SAAS,GAAG,uBAAuB,EAAE,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,GAAG,IAAI,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YAC1D,MAAM,YAAY,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;YACrD,SAAS,GAAG,sBAAsB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACxD,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,sCAAsC,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAID;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,YAAY,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACxB,SAAS,GAAG,OAAO,CAAC;IAEpB,2DAA2D;IAC3D,IAAI,CAAC;QACH,UAAU,CAAC,OAAO,CAAC,CAAC;QACpB,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,6CAA6C,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,wCAAwC,CAAC,CAAC;AACpE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,YAAY;IAC1B,SAAS,GAAG,IAAI,CAAC;IACjB,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,aAAa,CAAC,UAAU,EAAE,CAAC;QAChC,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAC1C,uDAAuD;IACvD,OAAO,OAAc,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/admin/db/core.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  /**
2
2
  * admin/db/schema.ts — Admin schema initialization and seed data.
3
3
  * SA4E-53: Accepts DatabaseAdapter (sync interface) instead of raw better-sqlite3.
4
+ * Multi-engine: uses async adapter API + per-engine DDL/DML so it runs on both
5
+ * SQLite and PostgreSQL (PostgresAdapter throws on the sync exec/get/run methods).
4
6
  */
5
- import type { SyncDatabaseAdapter } from '../../database/adapters/DatabaseAdapter.js';
7
+ import type { DatabaseAdapter } from '../../database/adapters/DatabaseAdapter.js';
6
8
  /** Initialize admin schema tables (idempotent CREATE IF NOT EXISTS). */
7
- export declare function initSchema(db: SyncDatabaseAdapter): void;
9
+ export declare function initSchema(db: DatabaseAdapter): Promise<void>;
8
10
  /** Seed default access groups and admin user. */
9
- export declare function seedDefaults(db: SyncDatabaseAdapter): void;
11
+ export declare function seedDefaults(db: DatabaseAdapter): Promise<void>;
@@ -1,100 +1,109 @@
1
1
  /**
2
2
  * admin/db/schema.ts — Admin schema initialization and seed data.
3
3
  * SA4E-53: Accepts DatabaseAdapter (sync interface) instead of raw better-sqlite3.
4
+ * Multi-engine: uses async adapter API + per-engine DDL/DML so it runs on both
5
+ * SQLite and PostgreSQL (PostgresAdapter throws on the sync exec/get/run methods).
4
6
  */
5
7
  import * as crypto from 'crypto';
6
8
  import { hashPassword } from './password.js';
9
+ /**
10
+ * SQLite `INSERT OR IGNORE` has no direct PG equivalent — PG uses ON CONFLICT DO NOTHING.
11
+ * We use the target-less form so it does not require a specific named unique
12
+ * constraint to exist (legacy PG tables created before a UNIQUE clause was added
13
+ * would otherwise raise "no unique or exclusion constraint matching the ON CONFLICT
14
+ * specification"). Target-less DO NOTHING applies to any arbiter index/constraint.
15
+ */
16
+ function insertIgnore(engine, sql) {
17
+ if (engine === 'postgresql') {
18
+ return sql.replace(/INSERT OR IGNORE/i, 'INSERT') + ` ON CONFLICT DO NOTHING`;
19
+ }
20
+ return sql;
21
+ }
7
22
  /** Initialize admin schema tables (idempotent CREATE IF NOT EXISTS). */
8
- export function initSchema(db) {
9
- db.exec(ADMIN_SCHEMA_SQL);
23
+ export async function initSchema(db) {
24
+ const engine = db.getEngine();
25
+ await db.execAsync(schemaSql(engine));
10
26
  // Idempotent migration: add project_id to graph_nodes for existing DBs
11
27
  try {
12
- db.exec(`ALTER TABLE graph_nodes ADD COLUMN project_id TEXT NOT NULL DEFAULT ''`);
28
+ await db.execAsync(`ALTER TABLE graph_nodes ADD COLUMN project_id TEXT NOT NULL DEFAULT ''`);
13
29
  }
14
30
  catch (err) {
15
31
  console.debug('[schema] column already exists :', err.message);
16
32
  }
17
- db.exec(`CREATE INDEX IF NOT EXISTS idx_graph_nodes_project ON graph_nodes(project_id)`);
33
+ await db.execAsync(`CREATE INDEX IF NOT EXISTS idx_graph_nodes_project ON graph_nodes(project_id)`);
18
34
  // SA4E-50: project_registry — workspace → projectId mapping
19
- db.exec(`
35
+ await db.execAsync(`
20
36
  CREATE TABLE IF NOT EXISTS project_registry (
21
37
  project_id TEXT PRIMARY KEY,
22
38
  display_name TEXT NOT NULL DEFAULT '',
23
39
  workspace_path TEXT NOT NULL DEFAULT '',
24
- last_seen TEXT NOT NULL DEFAULT (datetime('now'))
40
+ last_seen TEXT NOT NULL DEFAULT ${nowExpr(engine)}
25
41
  );
26
- CREATE INDEX IF NOT EXISTS idx_project_registry_seen ON project_registry(last_seen);
27
42
  `);
43
+ await db.execAsync(`CREATE INDEX IF NOT EXISTS idx_project_registry_seen ON project_registry(last_seen)`);
28
44
  // Idempotent migration: add created_by to project_registry
29
45
  try {
30
- db.exec(`ALTER TABLE project_registry ADD COLUMN created_by TEXT NOT NULL DEFAULT ''`);
46
+ await db.execAsync(`ALTER TABLE project_registry ADD COLUMN created_by TEXT NOT NULL DEFAULT ''`);
31
47
  }
32
48
  catch (err) {
33
49
  console.debug('[schema] column already exists :', err.message);
34
50
  }
51
+ // Ensure the arbiter unique index for group_permissions exists. Legacy tables
52
+ // created before the inline UNIQUE(...) clause won't have it, which breaks the
53
+ // `ON CONFLICT DO NOTHING` used by seedDefaults. CREATE UNIQUE INDEX IF NOT EXISTS
54
+ // is idempotent and gives ON CONFLICT a valid arbiter on both engines.
55
+ try {
56
+ await db.execAsync(`CREATE UNIQUE INDEX IF NOT EXISTS idx_group_permissions_uniq
57
+ ON group_permissions(access_group_id, permission_id)`);
58
+ }
59
+ catch (err) {
60
+ console.debug('[schema] group_permissions unique index :', err.message);
61
+ }
35
62
  }
36
63
  /** Seed default access groups and admin user. */
37
- export function seedDefaults(db) {
38
- const groupExists = db.get('SELECT 1 FROM access_groups WHERE access_group_id = ?', ['grp-admin']);
64
+ export async function seedDefaults(db) {
65
+ const groupExists = await db.getAsync('SELECT 1 FROM access_groups WHERE access_group_id = ?', ['grp-admin']);
39
66
  if (!groupExists) {
40
- seedAccessGroups(db);
67
+ await seedAccessGroups(db);
41
68
  }
42
69
  // Ensure admin group has all permissions even after code changes
43
- ensureAdminPermissions(db);
44
- const userExists = db.get('SELECT 1 FROM users WHERE username = ?', ['admin']);
70
+ await ensureAdminPermissions(db);
71
+ const userExists = await db.getAsync('SELECT 1 FROM users WHERE username = ?', ['admin']);
45
72
  if (!userExists) {
46
- seedAdminUser(db);
73
+ await seedAdminUser(db);
47
74
  }
48
75
  }
49
- function seedAccessGroups(db) {
76
+ /** Insert one access group + its permissions (idempotent, cross-engine). */
77
+ async function seedGroup(db, engine, groupId, groupName, isSystem, perms) {
50
78
  const now = new Date().toISOString();
51
- db.run(`INSERT OR IGNORE INTO access_groups (access_group_id, access_group_name, is_system_group, created_at, updated_at)
52
- VALUES (?, ?, 1, ?, ?)`, ['grp-admin', 'Administrators', now, now]);
53
- const allPerms = [
54
- 'DASHBOARD_VIEW', 'KB_READ', 'KB_WRITE', 'KB_PROMOTE', 'KB_IMPORT_EXPORT',
55
- 'MCP_ACCESS', 'MCP_MANAGE', 'USER_MANAGE', 'RBAC_MANAGE', 'CONFIG_EDIT',
56
- 'SEARCH_EXPLORE', 'AUDIT_VIEW', 'GRAPH_VIEW', 'ANALYTICS_VIEW', 'GRAPH_MAINTAIN',
57
- ];
58
- for (const perm of allPerms) {
59
- db.run('INSERT OR IGNORE INTO group_permissions (access_group_id, permission_id, role_data) VALUES (?, ?, ?)', ['grp-admin', perm, '{}']);
60
- }
61
- db.run(`INSERT OR IGNORE INTO access_groups (access_group_id, access_group_name, is_system_group, created_at, updated_at)
62
- VALUES (?, ?, 0, ?, ?)`, ['grp-dev', 'Developers', now, now]);
63
- const devPerms = ['DASHBOARD_VIEW', 'KB_READ', 'KB_WRITE', 'MCP_ACCESS', 'SEARCH_EXPLORE', 'GRAPH_VIEW', 'ANALYTICS_VIEW'];
64
- for (const perm of devPerms) {
65
- db.run('INSERT OR IGNORE INTO group_permissions (access_group_id, permission_id, role_data) VALUES (?, ?, ?)', ['grp-dev', perm, '{}']);
66
- }
67
- db.run(`INSERT OR IGNORE INTO access_groups (access_group_id, access_group_name, is_system_group, created_at, updated_at)
68
- VALUES (?, ?, 0, ?, ?)`, ['grp-viewer', 'Viewers', now, now]);
69
- const viewerPerms = ['DASHBOARD_VIEW', 'KB_READ', 'SEARCH_EXPLORE', 'GRAPH_VIEW', 'ANALYTICS_VIEW'];
70
- for (const perm of viewerPerms) {
71
- db.run('INSERT OR IGNORE INTO group_permissions (access_group_id, permission_id, role_data) VALUES (?, ?, ?)', ['grp-viewer', perm, '{}']);
72
- }
73
- db.run(`INSERT OR IGNORE INTO access_groups (access_group_id, access_group_name, is_system_group, created_at, updated_at)
74
- VALUES (?, ?, 0, ?, ?)`, ['grp-mcp-ops', 'MCP Operators', now, now]);
75
- const mcpPerms = ['DASHBOARD_VIEW', 'MCP_ACCESS', 'MCP_MANAGE'];
76
- for (const perm of mcpPerms) {
77
- db.run('INSERT OR IGNORE INTO group_permissions (access_group_id, permission_id, role_data) VALUES (?, ?, ?)', ['grp-mcp-ops', perm, '{}']);
78
- }
79
+ await db.runAsync(insertIgnore(engine, `INSERT OR IGNORE INTO access_groups (access_group_id, access_group_name, is_system_group, created_at, updated_at)
80
+ VALUES (?, ?, ?, ?, ?)`), [groupId, groupName, isSystem, now, now]);
81
+ await insertPerms(db, engine, groupId, perms);
79
82
  }
80
- function ensureAdminPermissions(db) {
81
- const allPerms = [
82
- 'DASHBOARD_VIEW', 'KB_READ', 'KB_WRITE', 'KB_PROMOTE', 'KB_IMPORT_EXPORT',
83
- 'MCP_ACCESS', 'MCP_MANAGE', 'USER_MANAGE', 'RBAC_MANAGE', 'CONFIG_EDIT',
84
- 'SEARCH_EXPLORE', 'AUDIT_VIEW', 'GRAPH_VIEW', 'ANALYTICS_VIEW', 'GRAPH_MAINTAIN',
85
- ];
86
- for (const perm of allPerms) {
87
- db.run('INSERT OR IGNORE INTO group_permissions (access_group_id, permission_id, role_data) VALUES (?, ?, ?)', ['grp-admin', perm, '{}']);
83
+ /** Insert permission rows for a group (idempotent, cross-engine). */
84
+ async function insertPerms(db, engine, groupId, perms) {
85
+ for (const perm of perms) {
86
+ await db.runAsync(insertIgnore(engine, 'INSERT OR IGNORE INTO group_permissions (access_group_id, permission_id, role_data) VALUES (?, ?, ?)'), [groupId, perm, '{}']);
88
87
  }
89
88
  }
90
- function seedAdminUser(db) {
89
+ async function seedAccessGroups(db) {
90
+ const engine = db.getEngine();
91
+ await seedGroup(db, engine, 'grp-admin', 'Administrators', 1, ALL_PERMS);
92
+ await seedGroup(db, engine, 'grp-dev', 'Developers', 0, ['DASHBOARD_VIEW', 'KB_READ', 'KB_WRITE', 'MCP_ACCESS', 'SEARCH_EXPLORE', 'GRAPH_VIEW', 'ANALYTICS_VIEW']);
93
+ await seedGroup(db, engine, 'grp-viewer', 'Viewers', 0, ['DASHBOARD_VIEW', 'KB_READ', 'SEARCH_EXPLORE', 'GRAPH_VIEW', 'ANALYTICS_VIEW']);
94
+ await seedGroup(db, engine, 'grp-mcp-ops', 'MCP Operators', 0, ['DASHBOARD_VIEW', 'MCP_ACCESS', 'MCP_MANAGE']);
95
+ }
96
+ async function ensureAdminPermissions(db) {
97
+ await insertPerms(db, db.getEngine(), 'grp-admin', ALL_PERMS);
98
+ }
99
+ async function seedAdminUser(db) {
91
100
  const now = new Date().toISOString();
92
101
  const envPassword = process.env.ADMIN_INITIAL_PASSWORD;
93
102
  const initialPassword = envPassword && envPassword.length >= 12
94
103
  ? envPassword
95
104
  : crypto.randomBytes(18).toString('base64url');
96
105
  const hash = hashPassword(initialPassword);
97
- db.run(`INSERT INTO users (user_id, username, email, password_hash, status, access_group_id, force_password_change, created_at)
106
+ await db.runAsync(`INSERT INTO users (user_id, username, email, password_hash, status, access_group_id, force_password_change, created_at)
98
107
  VALUES (?, ?, ?, ?, 'ACTIVE', 'grp-admin', 1, ?)`, ['user-admin-001', 'admin', 'admin@localhost', hash, now]);
99
108
  if (!envPassword) {
100
109
  process.stdout.write('\n============================================================\n' +
@@ -105,8 +114,25 @@ function seedAdminUser(db) {
105
114
  '============================================================\n');
106
115
  }
107
116
  }
108
- /** Full admin schema DDL — extracted for readability. */
109
- const ADMIN_SCHEMA_SQL = `
117
+ /** Full permission catalogue granted to the admin group. */
118
+ const ALL_PERMS = [
119
+ 'DASHBOARD_VIEW', 'KB_READ', 'KB_WRITE', 'KB_PROMOTE', 'KB_IMPORT_EXPORT',
120
+ 'MCP_ACCESS', 'MCP_MANAGE', 'USER_MANAGE', 'RBAC_MANAGE', 'CONFIG_EDIT',
121
+ 'SEARCH_EXPLORE', 'AUDIT_VIEW', 'GRAPH_VIEW', 'ANALYTICS_VIEW', 'GRAPH_MAINTAIN',
122
+ ];
123
+ /** Per-engine "current timestamp" default expression. */
124
+ function nowExpr(engine) {
125
+ return engine === 'postgresql' ? 'now()' : `(datetime('now'))`;
126
+ }
127
+ /** Per-engine auto-increment integer primary key clause. */
128
+ function autoIncPk(engine) {
129
+ return engine === 'postgresql' ? 'SERIAL PRIMARY KEY' : 'INTEGER PRIMARY KEY AUTOINCREMENT';
130
+ }
131
+ /** Full admin schema DDL — parameterized per engine for cross-DB compatibility. */
132
+ function schemaSql(engine) {
133
+ const now = nowExpr(engine);
134
+ const idPk = autoIncPk(engine);
135
+ return `
110
136
  CREATE TABLE IF NOT EXISTS users (
111
137
  user_id TEXT PRIMARY KEY,
112
138
  username TEXT UNIQUE NOT NULL,
@@ -128,7 +154,7 @@ const ADMIN_SCHEMA_SQL = `
128
154
  );
129
155
 
130
156
  CREATE TABLE IF NOT EXISTS group_permissions (
131
- id INTEGER PRIMARY KEY AUTOINCREMENT,
157
+ id ${idPk},
132
158
  access_group_id TEXT NOT NULL,
133
159
  permission_id TEXT NOT NULL,
134
160
  role_data TEXT NOT NULL DEFAULT '{}',
@@ -161,7 +187,7 @@ const ADMIN_SCHEMA_SQL = `
161
187
  );
162
188
 
163
189
  CREATE TABLE IF NOT EXISTS config_changes (
164
- id INTEGER PRIMARY KEY AUTOINCREMENT,
190
+ id ${idPk},
165
191
  section TEXT NOT NULL,
166
192
  key TEXT NOT NULL,
167
193
  old_value TEXT,
@@ -188,11 +214,11 @@ const ADMIN_SCHEMA_SQL = `
188
214
  z REAL NOT NULL DEFAULT 0,
189
215
  level INTEGER NOT NULL DEFAULT 2,
190
216
  cluster_id TEXT DEFAULT NULL,
191
- created_at TEXT NOT NULL DEFAULT (datetime('now'))
217
+ created_at TEXT NOT NULL DEFAULT ${now}
192
218
  );
193
219
 
194
220
  CREATE TABLE IF NOT EXISTS graph_edges (
195
- id INTEGER PRIMARY KEY AUTOINCREMENT,
221
+ id ${idPk},
196
222
  source TEXT NOT NULL,
197
223
  target TEXT NOT NULL,
198
224
  weight REAL NOT NULL DEFAULT 0.5,
@@ -209,4 +235,5 @@ const ADMIN_SCHEMA_SQL = `
209
235
  CREATE INDEX IF NOT EXISTS idx_graph_edges_target ON graph_edges(target);
210
236
  CREATE INDEX IF NOT EXISTS idx_graph_edges_source_target ON graph_edges(source, target);
211
237
  `;
238
+ }
212
239
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/admin/db/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/admin/db/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * SA4E-261 Unified extension whitelist — single source of truth.
3
+ * Used by backend resolver and contract test.
4
+ */
5
+ export declare const UNIFIED_EXTENSIONS: readonly ["ts", "tsx", "js", "jsx", "kt", "java", "py", "go", "rs", "c", "cpp", "h", "hpp", "cs", "php", "rb", "scala", "swift", "cls", "trigger", "apex", "soql", "page", "component", "cmp", "app", "evt", "intf", "tokens", "pega", "html", "jsp", "xml", "sql", "properties", "yml", "yaml", "css", "ps1"];
6
+ export type UnifiedExtension = typeof UNIFIED_EXTENSIONS[number];
7
+ /**
8
+ * Extension list with leading dot for file matching.
9
+ */
10
+ export declare const UNIFIED_EXTENSIONS_WITH_DOT: string[];
@@ -0,0 +1,18 @@
1
+ /**
2
+ * SA4E-261 Unified extension whitelist — single source of truth.
3
+ * Used by backend resolver and contract test.
4
+ */
5
+ export const UNIFIED_EXTENSIONS = [
6
+ 'ts', 'tsx', 'js', 'jsx',
7
+ 'kt', 'java', 'py', 'go', 'rs',
8
+ 'c', 'cpp', 'h', 'hpp',
9
+ 'cs', 'php', 'rb', 'scala', 'swift',
10
+ 'cls', 'trigger', 'apex', 'soql', 'page', 'component', 'cmp', 'app', 'evt', 'intf', 'tokens', 'pega',
11
+ 'html', 'jsp', 'xml', 'sql', 'properties', 'yml', 'yaml', 'css',
12
+ 'ps1'
13
+ ];
14
+ /**
15
+ * Extension list with leading dot for file matching.
16
+ */
17
+ export const UNIFIED_EXTENSIONS_WITH_DOT = UNIFIED_EXTENSIONS.map(e => `.${e}`);
18
+ //# sourceMappingURL=unified-extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unified-extensions.js","sourceRoot":"","sources":["../../src/config/unified-extensions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACxB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9B,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK;IACtB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IACnC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IACpG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK;IAC/D,KAAK;CACG,CAAC;AAIX;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC"}
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * ensure-pega-category-counters.ts — Ensure pega_category_counters table exists.
3
3
  * SA4E-217: Idempotent table creation, called at server startup.
4
- * Uses the sync DatabaseAdapter interface (db.exec, db.get, db.run).
4
+ * Multi-engine: uses the async DatabaseAdapter API + per-engine DDL so it runs on
5
+ * both SQLite and PostgreSQL (PostgresAdapter throws on the sync exec method).
5
6
  * Extracted from migrate-pega-category-counters.ts for server-start execution.
6
7
  */
7
- import type { SyncDatabaseAdapter } from '../../database/adapters/DatabaseAdapter.js';
8
- export declare function ensurePegaCategoryCountersTable(db: SyncDatabaseAdapter): void;
8
+ import type { DatabaseAdapter } from '../../database/adapters/DatabaseAdapter.js';
9
+ export declare function ensurePegaCategoryCountersTable(db: DatabaseAdapter): Promise<void>;
@@ -1,24 +1,30 @@
1
1
  /**
2
2
  * ensure-pega-category-counters.ts — Ensure pega_category_counters table exists.
3
3
  * SA4E-217: Idempotent table creation, called at server startup.
4
- * Uses the sync DatabaseAdapter interface (db.exec, db.get, db.run).
4
+ * Multi-engine: uses the async DatabaseAdapter API + per-engine DDL so it runs on
5
+ * both SQLite and PostgreSQL (PostgresAdapter throws on the sync exec method).
5
6
  * Extracted from migrate-pega-category-counters.ts for server-start execution.
6
7
  */
7
- export function ensurePegaCategoryCountersTable(db) {
8
- // Idempotent CREATE TABLE IF NOT EXISTS
9
- db.exec(`
8
+ export async function ensurePegaCategoryCountersTable(db) {
9
+ const isPg = db.getEngine() === 'postgresql';
10
+ // PG: gen_random_uuid() (pgcrypto/pg13+) + now(); SQLite: randomblob UUID + datetime('now').
11
+ const idDefault = isPg
12
+ ? `DEFAULT gen_random_uuid()::text`
13
+ : `DEFAULT (lower(hex(randomblob(4)) || '-' || substr(hex(randomblob(2)) || '4-', 1, 8)) || '-' || substr('89ab', random() % 4 + 1, 1) || '-' || substr(hex(randomblob(2)) || '10', 1, 4)) || '-' || substr(hex(randomblob(6)), 1, 12))`;
14
+ const nowDefault = isPg ? `now()` : `(datetime('now'))`;
15
+ await db.execAsync(`
10
16
  CREATE TABLE IF NOT EXISTS pega_category_counters (
11
- id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(4)) || '-' || substr(hex(randomblob(2)) || '4-', 1, 8)) || '-' || substr('89ab', random() % 4 + 1, 1) || '-' || substr(hex(randomblob(2)) || '10', 1, 4)) || '-' || substr(hex(randomblob(6)), 1, 12)),
17
+ id TEXT PRIMARY KEY ${idDefault},
12
18
  rule_type TEXT NOT NULL,
13
19
  count INTEGER NOT NULL DEFAULT 0,
14
- last_updated TEXT NOT NULL DEFAULT (datetime('now')),
20
+ last_updated TEXT NOT NULL DEFAULT ${nowDefault},
15
21
  source TEXT NOT NULL DEFAULT 'memory',
16
22
  UNIQUE(rule_type)
17
23
  )
18
24
  `);
19
25
  // Ensure index on rule_type (UNIQUE constraint already covers this, but explicit for clarity)
20
26
  try {
21
- db.exec(`CREATE INDEX IF NOT EXISTS idx_pega_category_counters_rule_type ON pega_category_counters(rule_type)`);
27
+ await db.execAsync(`CREATE INDEX IF NOT EXISTS idx_pega_category_counters_rule_type ON pega_category_counters(rule_type)`);
22
28
  }
23
29
  catch (err) {
24
30
  // Index may already exist; ignore in production
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-pega-category-counters.js","sourceRoot":"","sources":["../../../src/database/migration/ensure-pega-category-counters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,UAAU,+BAA+B,CAAC,EAAuB;IACrE,wCAAwC;IACxC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;GASP,CAAC,CAAC;IAEH,8FAA8F;IAC9F,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,sGAAsG,CAAC,CAAC;IAClH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gDAAgD;QAChD,MAAM,YAAY,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,CAAC,gEAAgE,EAAE,YAAY,CAAC,CAAC;IAChG,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ensure-pega-category-counters.js","sourceRoot":"","sources":["../../../src/database/migration/ensure-pega-category-counters.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,EAAmB;IACvE,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,YAAY,CAAC;IAC7C,6FAA6F;IAC7F,MAAM,SAAS,GAAG,IAAI;QACpB,CAAC,CAAC,iCAAiC;QACnC,CAAC,CAAC,sOAAsO,CAAC;IAC3O,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAExD,MAAM,EAAE,CAAC,SAAS,CAAC;;4BAEO,SAAS;;;2CAGM,UAAU;;;;GAIlD,CAAC,CAAC;IAEH,8FAA8F;IAC9F,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,SAAS,CAAC,sGAAsG,CAAC,CAAC;IAC7H,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gDAAgD;QAChD,MAAM,YAAY,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,CAAC,gEAAgE,EAAE,YAAY,CAAC,CAAC;IAChG,CAAC;AACH,CAAC"}
@@ -16,8 +16,15 @@ const MAX_PSEUDO_CODE_LENGTH = 2000;
16
16
  // Strategy selection: which symbol kinds map to which enrichment strategy.
17
17
  // apex_class routes to CLASS_SUMMARY; trigger/constructor route to FUNCTION_SUMMARY
18
18
  // so Salesforce Apex entities are enriched with summary (+ pseudo code) like the rest.
19
- const CLASS_KINDS = new Set(['class', 'interface', 'enum', 'apex_class']);
20
- const FUNCTION_KINDS = new Set(['function', 'method', 'arrow_function', 'generator', 'constructor', 'trigger']);
19
+ const CLASS_KINDS = new Set([
20
+ 'class', 'interface', 'enum', 'apex_class',
21
+ 'configuration', 'constant', 'controller', 'entity',
22
+ 'repository', 'service', 'namespace', 'jsp_page'
23
+ ]);
24
+ const FUNCTION_KINDS = new Set([
25
+ 'function', 'method', 'arrow_function', 'generator', 'constructor', 'trigger',
26
+ 'http_get', 'http_post', 'transactional'
27
+ ]);
21
28
  // Salesforce declarative metadata + properties: summarized from signature/name
22
29
  // (no code body, no pseudo code). Routed to METADATA_SUMMARY.
23
30
  const METADATA_KINDS = new Set([
@@ -1 +1 @@
1
- {"version":3,"file":"CodeEnrichmentHandler.js","sourceRoot":"","sources":["../../../src/engine/enrichment/CodeEnrichmentHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CodeEnrichmentHandler.js","sourceRoot":"","sources":["../../../src/engine/enrichment/CodeEnrichmentHandler.ts"],"names":[],"mappings":"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"}
@@ -7,27 +7,31 @@
7
7
  /** Extracts CONTAINS edges from file → symbol (file membership) for symbols without parent_symbol, e.g., LWC_COMPONENT. */
8
8
  export class FileContainsSymbolStrategy {
9
9
  async extract(indexAdapter, projectId) {
10
- // Map file_id to a synthetic node? For now create edge from file pseudo node to symbol.
11
- // If graph_nodes uses file nodes with entry_id 'file:{file_id}', we can connect.
12
- // Fallback: connect symbol to itself? Instead create CONTAINS from a synthetic file container.
13
- // Simpler: create edge from symbol to symbol of same file where parent is the file's main component?
14
- // We'll create CONTAINS from the first symbol of each file of kind lwc_component/apex_class/class to all other symbols in same file.
15
- const rows = await indexAdapter.allAsync(`SELECT s1.id AS child_id, s2.id AS parent_id
16
- FROM symbols s1
17
- JOIN symbols s2
18
- ON s2.project_id = s1.project_id
19
- AND s2.file_id = s1.file_id
20
- AND s2.kind IN ('lwc_component','apex_class','class')
21
- WHERE s1.project_id = ?
10
+ // LWC/Aura components live in .js-meta.xml while code lives in .js/.cmp files.
11
+ // Match by directory: component symbol and symbols sharing same directory.
12
+ const rows = await indexAdapter.allAsync(`SELECT s1.id AS child_id, s2.id AS parent_id, cf.relative_path AS comp_path, sf.relative_path AS sym_path
13
+ FROM symbols s2
14
+ JOIN files cf ON cf.id = s2.file_id
15
+ JOIN files sf ON sf.project_id = cf.project_id
16
+ JOIN symbols s1 ON s1.file_id = sf.id AND s1.project_id = s2.project_id
17
+ WHERE s2.project_id = ?
18
+ AND s2.kind IN ('lwc_component','aura_component')
22
19
  AND s1.parent_symbol IS NULL
23
- AND s2.parent_symbol IS NULL
24
20
  AND s1.id <> s2.id`, [projectId]);
25
- return rows.map(r => ({
26
- source: `code:${r.parent_id}`,
27
- target: `code:${r.child_id}`,
28
- label: 'CONTAINS',
29
- weight: 0.4,
30
- }));
21
+ const edges = [];
22
+ const seen = new Set();
23
+ for (const r of rows) {
24
+ const compDir = r.comp_path.replace(/\\/g, '/').substring(0, r.comp_path.lastIndexOf('/'));
25
+ const symDir = r.sym_path.replace(/\\/g, '/').substring(0, r.sym_path.lastIndexOf('/'));
26
+ if (compDir && symDir && compDir === symDir) {
27
+ const key = `${r.parent_id}-${r.child_id}`;
28
+ if (!seen.has(key)) {
29
+ seen.add(key);
30
+ edges.push({ source: `code:${r.parent_id}`, target: `code:${r.child_id}`, label: 'CONTAINS', weight: 0.4 });
31
+ }
32
+ }
33
+ }
34
+ return edges;
31
35
  }
32
36
  }
33
37
  /** Extracts CONTAINS edges from parent_symbol → child symbols (membership). */