agentic-qe 3.3.4 → 3.3.5

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 (48) hide show
  1. package/.claude/agents/v3/qe-queen-coordinator.md +332 -166
  2. package/.claude/helpers/statusline-v3.cjs +38 -42
  3. package/README.md +2 -2
  4. package/package.json +1 -1
  5. package/scripts/cloud-db-config.json +10 -5
  6. package/scripts/merge-v3-to-root.sql +48 -0
  7. package/v3/CHANGELOG.md +65 -0
  8. package/v3/README.md +1 -1
  9. package/v3/assets/agents/v3/qe-queen-coordinator.md +332 -166
  10. package/v3/dist/cli/bundle.js +295 -289
  11. package/v3/dist/coordination/consensus/providers/claude-provider.js +1 -1
  12. package/v3/dist/coordination/consensus/providers/gemini-provider.js +1 -1
  13. package/v3/dist/coordination/consensus/providers/openai-provider.js +1 -1
  14. package/v3/dist/init/init-wizard.js +3 -3
  15. package/v3/dist/init/init-wizard.js.map +1 -1
  16. package/v3/dist/init/phases/05-learning.js +1 -1
  17. package/v3/dist/init/phases/05-learning.js.map +1 -1
  18. package/v3/dist/integrations/ruvector/interfaces.js +1 -1
  19. package/v3/dist/integrations/ruvector/interfaces.js.map +1 -1
  20. package/v3/dist/kernel/index.d.ts +1 -1
  21. package/v3/dist/kernel/index.d.ts.map +1 -1
  22. package/v3/dist/kernel/index.js +3 -1
  23. package/v3/dist/kernel/index.js.map +1 -1
  24. package/v3/dist/kernel/unified-memory.d.ts +26 -0
  25. package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
  26. package/v3/dist/kernel/unified-memory.js +54 -2
  27. package/v3/dist/kernel/unified-memory.js.map +1 -1
  28. package/v3/dist/learning/qe-unified-memory.js +1 -1
  29. package/v3/dist/learning/qe-unified-memory.js.map +1 -1
  30. package/v3/dist/learning/real-qe-reasoning-bank.js +2 -2
  31. package/v3/dist/learning/real-qe-reasoning-bank.js.map +1 -1
  32. package/v3/dist/learning/sqlite-persistence.d.ts +1 -1
  33. package/v3/dist/learning/sqlite-persistence.js +1 -1
  34. package/v3/dist/learning/sqlite-persistence.js.map +1 -1
  35. package/v3/dist/learning/v2-to-v3-migration.d.ts +2 -2
  36. package/v3/dist/learning/v2-to-v3-migration.d.ts.map +1 -1
  37. package/v3/dist/learning/v2-to-v3-migration.js +2 -2
  38. package/v3/dist/learning/v2-to-v3-migration.js.map +1 -1
  39. package/v3/dist/mcp/bundle.js +73 -51
  40. package/v3/dist/sync/claude-flow-bridge.d.ts +1 -1
  41. package/v3/dist/sync/claude-flow-bridge.js +1 -1
  42. package/v3/dist/sync/interfaces.d.ts +6 -0
  43. package/v3/dist/sync/interfaces.d.ts.map +1 -1
  44. package/v3/dist/sync/interfaces.js +34 -47
  45. package/v3/dist/sync/interfaces.js.map +1 -1
  46. package/v3/dist/sync/readers/sqlite-reader.d.ts +1 -1
  47. package/v3/dist/sync/readers/sqlite-reader.js +1 -1
  48. package/v3/package.json +1 -1
@@ -1384,7 +1384,7 @@ var init_claude_provider = __esm({
1384
1384
  defaultModel: config.defaultModel || "claude-3-5-sonnet-20241022",
1385
1385
  baseUrl: this.baseUrl,
1386
1386
  defaultTimeout: config.defaultTimeout || 3e4,
1387
- maxRetries: config.maxRetries || 3,
1387
+ maxRetries: config.maxRetries ?? 3,
1388
1388
  retryDelayMs: config.retryDelayMs || 1e3,
1389
1389
  enableLogging: config.enableLogging || false
1390
1390
  };
@@ -1697,7 +1697,7 @@ var init_openai_provider = __esm({
1697
1697
  defaultModel: config.defaultModel || "gpt-4-turbo",
1698
1698
  baseUrl: this.baseUrl,
1699
1699
  defaultTimeout: config.defaultTimeout || CONSENSUS_CONSTANTS.MODEL_TIMEOUT_MS,
1700
- maxRetries: config.maxRetries || CONSENSUS_CONSTANTS.DEFAULT_RETRY_ATTEMPTS,
1700
+ maxRetries: config.maxRetries ?? CONSENSUS_CONSTANTS.DEFAULT_RETRY_ATTEMPTS,
1701
1701
  retryDelayMs: config.retryDelayMs || CONSENSUS_CONSTANTS.DEFAULT_RETRY_DELAY_MS,
1702
1702
  enableLogging: config.enableLogging || false
1703
1703
  };
@@ -1947,7 +1947,7 @@ var init_gemini_provider = __esm({
1947
1947
  defaultModel: config.defaultModel || "gemini-1.5-pro-latest",
1948
1948
  baseUrl: this.baseUrl,
1949
1949
  defaultTimeout: config.defaultTimeout || 3e4,
1950
- maxRetries: config.maxRetries || 3,
1950
+ maxRetries: config.maxRetries ?? 3,
1951
1951
  retryDelayMs: config.retryDelayMs || 1e3,
1952
1952
  enableLogging: config.enableLogging || false
1953
1953
  };
@@ -7438,7 +7438,7 @@ __export(v2_to_v3_migration_exports, {
7438
7438
  migrateV2ToV3: () => migrateV2ToV3
7439
7439
  });
7440
7440
  import Database2 from "better-sqlite3";
7441
- async function migrateV2ToV3(v2DbPath = ".agentic-qe/memory.db", v3PatternsDbPath = ".agentic-qe/qe-patterns.db", onProgress) {
7441
+ async function migrateV2ToV3(v2DbPath = ".agentic-qe/memory.db", v3PatternsDbPath = ".agentic-qe/memory.db", onProgress) {
7442
7442
  const migrator = new V2ToV3Migrator({
7443
7443
  v2DbPath,
7444
7444
  v3PatternsDbPath,
@@ -8624,15 +8624,36 @@ function isMigrationApplied(db) {
8624
8624
 
8625
8625
  // src/kernel/unified-memory.ts
8626
8626
  init_constants();
8627
+ function findProjectRoot(startDir = process.cwd()) {
8628
+ let dir = startDir;
8629
+ const root = path.parse(dir).root;
8630
+ while (dir !== root) {
8631
+ if (fs.existsSync(path.join(dir, "package.json")) || fs.existsSync(path.join(dir, ".git"))) {
8632
+ return dir;
8633
+ }
8634
+ dir = path.dirname(dir);
8635
+ }
8636
+ return process.cwd();
8637
+ }
8638
+ function getDefaultDbPath() {
8639
+ const projectRoot = findProjectRoot();
8640
+ return path.join(projectRoot, ".agentic-qe", "memory.db");
8641
+ }
8627
8642
  var DEFAULT_UNIFIED_MEMORY_CONFIG = {
8628
8643
  dbPath: ".agentic-qe/memory.db",
8629
- // <-- THE SINGLE SOURCE OF TRUTH
8644
+ // Resolved to project root at runtime
8630
8645
  walMode: true,
8631
8646
  mmapSize: MEMORY_CONSTANTS.MMAP_SIZE_BYTES,
8632
8647
  cacheSize: MEMORY_CONSTANTS.CACHE_SIZE_KB,
8633
8648
  busyTimeout: MEMORY_CONSTANTS.BUSY_TIMEOUT_MS,
8634
8649
  vectorDimensions: MEMORY_CONSTANTS.DEFAULT_VECTOR_DIMENSIONS
8635
8650
  };
8651
+ function getResolvedDefaultConfig() {
8652
+ return {
8653
+ ...DEFAULT_UNIFIED_MEMORY_CONFIG,
8654
+ dbPath: getDefaultDbPath()
8655
+ };
8656
+ }
8636
8657
  var SCHEMA_VERSION = 7;
8637
8658
  var SCHEMA_VERSION_TABLE = `
8638
8659
  CREATE TABLE IF NOT EXISTS schema_version (
@@ -9161,7 +9182,8 @@ var UnifiedMemoryManager = class _UnifiedMemoryManager {
9161
9182
  preparedStatements = /* @__PURE__ */ new Map();
9162
9183
  vectorIndex = new InMemoryHNSWIndex();
9163
9184
  constructor(config) {
9164
- this.config = { ...DEFAULT_UNIFIED_MEMORY_CONFIG, ...config };
9185
+ const resolvedDefaults = getResolvedDefaultConfig();
9186
+ this.config = { ...resolvedDefaults, ...config };
9165
9187
  }
9166
9188
  /**
9167
9189
  * Get or create the singleton instance (synchronous).
@@ -32986,7 +33008,7 @@ var STRICT_VERIFICATION_TYPES = [
32986
33008
 
32987
33009
  // src/agents/claim-verifier/verifiers/file-verifier.ts
32988
33010
  import { readFile as readFile3, stat as stat2 } from "node:fs/promises";
32989
- import { join as join2 } from "node:path";
33011
+ import { join as join3 } from "node:path";
32990
33012
  import fg from "fast-glob";
32991
33013
  var FileBasedVerifier = class {
32992
33014
  config;
@@ -33140,7 +33162,7 @@ var FileBasedVerifier = class {
33140
33162
  const evidence = [];
33141
33163
  let passed = 0;
33142
33164
  for (const filePath of filePaths) {
33143
- const fullPath = join2(this.config.rootDir, filePath);
33165
+ const fullPath = join3(this.config.rootDir, filePath);
33144
33166
  try {
33145
33167
  const stats = await stat2(fullPath);
33146
33168
  const exists = stats.isFile();
@@ -33234,7 +33256,7 @@ var FileBasedVerifier = class {
33234
33256
  for (const ev of existingEvidence) {
33235
33257
  if (ev.type === "file-reference" || ev.type === "code-snippet") {
33236
33258
  const filePath = ev.location.split(":")[0];
33237
- const fullPath = join2(this.config.rootDir, filePath);
33259
+ const fullPath = join3(this.config.rootDir, filePath);
33238
33260
  try {
33239
33261
  const stats = await stat2(fullPath);
33240
33262
  const exists = stats.isFile();
@@ -33283,7 +33305,7 @@ var FileBasedVerifier = class {
33283
33305
  import { exec as exec2 } from "node:child_process";
33284
33306
  import { promisify as promisify2 } from "node:util";
33285
33307
  import { readFile as readFile4 } from "node:fs/promises";
33286
- import { join as join3 } from "node:path";
33308
+ import { join as join4 } from "node:path";
33287
33309
  var execAsync2 = promisify2(exec2);
33288
33310
  var TestBasedVerifier = class {
33289
33311
  config;
@@ -33571,7 +33593,7 @@ var TestBasedVerifier = class {
33571
33593
  * Get coverage data from report.
33572
33594
  */
33573
33595
  async getCoverageData() {
33574
- const reportPath = join3(this.config.rootDir, this.config.coverageReportPath);
33596
+ const reportPath = join4(this.config.rootDir, this.config.coverageReportPath);
33575
33597
  const content = await readFile4(reportPath, "utf-8");
33576
33598
  const data = JSON.parse(content);
33577
33599
  const total = data.total || data;
@@ -46119,7 +46141,7 @@ init_wrappers();
46119
46141
 
46120
46142
  // src/domains/code-intelligence/services/metric-collector/index.ts
46121
46143
  import { existsSync as existsSync7, readFileSync as readFileSync6, readdirSync as readdirSync3 } from "fs";
46122
- import { join as join7, extname as extname3 } from "path";
46144
+ import { join as join8, extname as extname3 } from "path";
46123
46145
 
46124
46146
  // src/domains/code-intelligence/services/metric-collector/interfaces.ts
46125
46147
  var DEFAULT_METRIC_CONFIG = {
@@ -46133,7 +46155,7 @@ var DEFAULT_METRIC_CONFIG = {
46133
46155
  // src/domains/code-intelligence/services/metric-collector/loc-counter.ts
46134
46156
  import { execSync as execSync4, spawnSync } from "child_process";
46135
46157
  import { existsSync as existsSync5, readdirSync, readFileSync as readFileSync4 } from "fs";
46136
- import { join as join5, extname } from "path";
46158
+ import { join as join6, extname } from "path";
46137
46159
  async function countLOC(projectPath, config = {}) {
46138
46160
  const mergedConfig = { ...DEFAULT_METRIC_CONFIG, ...config };
46139
46161
  const clocResult = await tryClocCount(projectPath, mergedConfig);
@@ -46281,7 +46303,7 @@ function manualLOCCount(projectPath, config) {
46281
46303
  }
46282
46304
  const entries = readdirSync(dirPath, { withFileTypes: true });
46283
46305
  for (const entry of entries) {
46284
- const fullPath = join5(dirPath, entry.name);
46306
+ const fullPath = join6(dirPath, entry.name);
46285
46307
  if (entry.isDirectory()) {
46286
46308
  if (config.excludeDirs.includes(entry.name)) {
46287
46309
  continue;
@@ -46481,7 +46503,7 @@ function getBlockCommentEnd(ext) {
46481
46503
  // src/domains/code-intelligence/services/metric-collector/test-counter.ts
46482
46504
  import { execSync as execSync5, spawnSync as spawnSync2 } from "child_process";
46483
46505
  import { existsSync as existsSync6, readFileSync as readFileSync5, readdirSync as readdirSync2 } from "fs";
46484
- import { join as join6, extname as extname2 } from "path";
46506
+ import { join as join7, extname as extname2 } from "path";
46485
46507
  async function countTests(projectPath, config = {}) {
46486
46508
  const mergedConfig = { ...DEFAULT_METRIC_CONFIG, ...config };
46487
46509
  const runner = detectTestRunner(projectPath);
@@ -46501,7 +46523,7 @@ async function countTests(projectPath, config = {}) {
46501
46523
  }
46502
46524
  }
46503
46525
  function detectTestRunner(projectPath) {
46504
- const packageJsonPath = join6(projectPath, "package.json");
46526
+ const packageJsonPath = join7(projectPath, "package.json");
46505
46527
  if (existsSync6(packageJsonPath)) {
46506
46528
  try {
46507
46529
  const pkg = JSON.parse(readFileSync5(packageJsonPath, "utf-8"));
@@ -46517,13 +46539,13 @@ function detectTestRunner(projectPath) {
46517
46539
  } catch {
46518
46540
  }
46519
46541
  }
46520
- if (existsSync6(join6(projectPath, "Cargo.toml"))) {
46542
+ if (existsSync6(join7(projectPath, "Cargo.toml"))) {
46521
46543
  return "cargo";
46522
46544
  }
46523
- if (existsSync6(join6(projectPath, "pyproject.toml")) || existsSync6(join6(projectPath, "setup.py")) || existsSync6(join6(projectPath, "pytest.ini")) || existsSync6(join6(projectPath, "requirements.txt"))) {
46545
+ if (existsSync6(join7(projectPath, "pyproject.toml")) || existsSync6(join7(projectPath, "setup.py")) || existsSync6(join7(projectPath, "pytest.ini")) || existsSync6(join7(projectPath, "requirements.txt"))) {
46524
46546
  return "pytest";
46525
46547
  }
46526
- if (existsSync6(join6(projectPath, "go.mod"))) {
46548
+ if (existsSync6(join7(projectPath, "go.mod"))) {
46527
46549
  return "go";
46528
46550
  }
46529
46551
  return "fallback";
@@ -46798,7 +46820,7 @@ function countTestsByFilePattern(projectPath, config) {
46798
46820
  }
46799
46821
  const entries = readdirSync2(dirPath, { withFileTypes: true });
46800
46822
  for (const entry of entries) {
46801
- const fullPath = join6(dirPath, entry.name);
46823
+ const fullPath = join7(dirPath, entry.name);
46802
46824
  if (entry.isDirectory()) {
46803
46825
  if (config.excludeDirs.includes(entry.name)) {
46804
46826
  continue;
@@ -46887,11 +46909,11 @@ function classifyTests(total, source, projectPath) {
46887
46909
  let unit = total;
46888
46910
  let integration = 0;
46889
46911
  let e2e = 0;
46890
- if (existsSync6(join6(projectPath, "tests", "integration")) || existsSync6(join6(projectPath, "test", "integration")) || existsSync6(join6(projectPath, "__tests__", "integration"))) {
46912
+ if (existsSync6(join7(projectPath, "tests", "integration")) || existsSync6(join7(projectPath, "test", "integration")) || existsSync6(join7(projectPath, "__tests__", "integration"))) {
46891
46913
  integration = Math.floor(total * 0.2);
46892
46914
  unit -= integration;
46893
46915
  }
46894
- if (existsSync6(join6(projectPath, "tests", "e2e")) || existsSync6(join6(projectPath, "test", "e2e")) || existsSync6(join6(projectPath, "e2e")) || existsSync6(join6(projectPath, "cypress"))) {
46916
+ if (existsSync6(join7(projectPath, "tests", "e2e")) || existsSync6(join7(projectPath, "test", "e2e")) || existsSync6(join7(projectPath, "e2e")) || existsSync6(join7(projectPath, "cypress"))) {
46895
46917
  e2e = Math.floor(total * 0.1);
46896
46918
  unit -= e2e;
46897
46919
  }
@@ -47046,11 +47068,11 @@ var MetricCollectorService = class {
47046
47068
  * Detect primary language of a project
47047
47069
  */
47048
47070
  detectLanguage(projectPath) {
47049
- if (existsSync7(join7(projectPath, "Cargo.toml"))) return "rust";
47050
- if (existsSync7(join7(projectPath, "go.mod"))) return "go";
47051
- if (existsSync7(join7(projectPath, "pyproject.toml")) || existsSync7(join7(projectPath, "requirements.txt"))) return "python";
47052
- if (existsSync7(join7(projectPath, "package.json"))) {
47053
- if (existsSync7(join7(projectPath, "tsconfig.json"))) return "typescript";
47071
+ if (existsSync7(join8(projectPath, "Cargo.toml"))) return "rust";
47072
+ if (existsSync7(join8(projectPath, "go.mod"))) return "go";
47073
+ if (existsSync7(join8(projectPath, "pyproject.toml")) || existsSync7(join8(projectPath, "requirements.txt"))) return "python";
47074
+ if (existsSync7(join8(projectPath, "package.json"))) {
47075
+ if (existsSync7(join8(projectPath, "tsconfig.json"))) return "typescript";
47054
47076
  return "javascript";
47055
47077
  }
47056
47078
  return "unknown";
@@ -47069,7 +47091,7 @@ var MetricCollectorService = class {
47069
47091
  if (!existsSync7(dirPath)) return;
47070
47092
  const entries = readdirSync3(dirPath, { withFileTypes: true });
47071
47093
  for (const entry of entries) {
47072
- const fullPath = join7(dirPath, entry.name);
47094
+ const fullPath = join8(dirPath, entry.name);
47073
47095
  if (entry.isDirectory()) {
47074
47096
  const excludeDirs = ["node_modules", "dist", "coverage", "build", ".git", "vendor", "target"];
47075
47097
  if (excludeDirs.includes(entry.name)) continue;
@@ -80253,7 +80275,7 @@ var DOMAIN_FACTORIES = {
80253
80275
  "learning-optimization": (eb, m, c) => createLearningOptimizationPlugin(eb, m, c),
80254
80276
  "coordination": (eb, m, c) => createCoordinationPlugin(eb, m, c)
80255
80277
  };
80256
- function findProjectRoot() {
80278
+ function findProjectRoot2() {
80257
80279
  let dir = process.cwd();
80258
80280
  const root = path9.parse(dir).root;
80259
80281
  while (dir !== root) {
@@ -80284,7 +80306,7 @@ var QEKernelImpl = class {
80284
80306
  constructor(config = {}) {
80285
80307
  this._config = { ...DEFAULT_CONFIG53, ...config };
80286
80308
  this._startTime = /* @__PURE__ */ new Date();
80287
- const projectRoot = findProjectRoot();
80309
+ const projectRoot = findProjectRoot2();
80288
80310
  const dataDir = this._config.dataDir || path9.join(projectRoot, ".agentic-qe");
80289
80311
  if (!fs8.existsSync(dataDir)) {
80290
80312
  fs8.mkdirSync(dataDir, { recursive: true });
@@ -83604,7 +83626,7 @@ var QueenRouterAdapter = class {
83604
83626
 
83605
83627
  // src/hooks/cross-phase-hooks.ts
83606
83628
  import { readFileSync as readFileSync7, existsSync as existsSync9 } from "fs";
83607
- import { join as join10 } from "path";
83629
+ import { join as join11 } from "path";
83608
83630
  import { parse as parseYaml } from "yaml";
83609
83631
 
83610
83632
  // src/types/cross-phase-signals.ts
@@ -83884,7 +83906,7 @@ var CrossPhaseHookExecutor = class {
83884
83906
  configPath;
83885
83907
  listeners = /* @__PURE__ */ new Map();
83886
83908
  constructor(configPath) {
83887
- this.configPath = configPath || join10(process.cwd(), ".claude/hooks/cross-phase-memory.yaml");
83909
+ this.configPath = configPath || join11(process.cwd(), ".claude/hooks/cross-phase-memory.yaml");
83888
83910
  this.memory = getCrossPhaseMemory();
83889
83911
  }
83890
83912
  // ---------------------------------------------------------------------------
@@ -89272,7 +89294,7 @@ init_types();
89272
89294
 
89273
89295
  // src/init/init-wizard.ts
89274
89296
  import { existsSync as existsSync17, mkdirSync as mkdirSync8, writeFileSync as writeFileSync5, readFileSync as readFileSync14, readdirSync as readdirSync8, statSync as statSync7, unlinkSync as unlinkSync2, copyFileSync as copyFileSync5 } from "fs";
89275
- import { join as join17, dirname as dirname7 } from "path";
89297
+ import { join as join18, dirname as dirname7 } from "path";
89276
89298
  import { createRequire } from "module";
89277
89299
 
89278
89300
  // src/init/types.ts
@@ -89381,14 +89403,14 @@ function createDefaultConfig(projectName, projectRoot) {
89381
89403
 
89382
89404
  // src/init/project-analyzer.ts
89383
89405
  import { readFileSync as readFileSync10, existsSync as existsSync13, statSync as statSync4, readdirSync as readdirSync4 } from "fs";
89384
- import { join as join13, basename as basename3, extname as extname5, relative as relative4 } from "path";
89406
+ import { join as join14, basename as basename3, extname as extname5, relative as relative4 } from "path";
89385
89407
  var frameworkDetectors = [
89386
89408
  {
89387
89409
  name: "jest",
89388
89410
  detect: (root) => {
89389
89411
  const configs = ["jest.config.js", "jest.config.ts", "jest.config.mjs", "jest.config.cjs"];
89390
89412
  for (const config of configs) {
89391
- if (existsSync13(join13(root, config))) {
89413
+ if (existsSync13(join14(root, config))) {
89392
89414
  const version = getPackageVersion(root, "jest");
89393
89415
  return { name: "jest", version, configFile: config, confidence: 1 };
89394
89416
  }
@@ -89409,7 +89431,7 @@ var frameworkDetectors = [
89409
89431
  detect: (root) => {
89410
89432
  const configs = ["vitest.config.ts", "vitest.config.js", "vitest.config.mts", "vite.config.ts"];
89411
89433
  for (const config of configs) {
89412
- if (existsSync13(join13(root, config))) {
89434
+ if (existsSync13(join14(root, config))) {
89413
89435
  const version = getPackageVersion(root, "vitest");
89414
89436
  return { name: "vitest", version, configFile: config, confidence: 1 };
89415
89437
  }
@@ -89426,7 +89448,7 @@ var frameworkDetectors = [
89426
89448
  detect: (root) => {
89427
89449
  const configs = [".mocharc.js", ".mocharc.json", ".mocharc.yaml", ".mocharc.yml"];
89428
89450
  for (const config of configs) {
89429
- if (existsSync13(join13(root, config))) {
89451
+ if (existsSync13(join14(root, config))) {
89430
89452
  const version = getPackageVersion(root, "mocha");
89431
89453
  return { name: "mocha", version, configFile: config, confidence: 1 };
89432
89454
  }
@@ -89443,7 +89465,7 @@ var frameworkDetectors = [
89443
89465
  detect: (root) => {
89444
89466
  const configs = ["pytest.ini", "pyproject.toml", "setup.cfg"];
89445
89467
  for (const config of configs) {
89446
- const configPath = join13(root, config);
89468
+ const configPath = join14(root, config);
89447
89469
  if (existsSync13(configPath)) {
89448
89470
  try {
89449
89471
  const content = readFileSync10(configPath, "utf-8");
@@ -89455,7 +89477,7 @@ var frameworkDetectors = [
89455
89477
  }
89456
89478
  }
89457
89479
  }
89458
- const reqPath = join13(root, "requirements.txt");
89480
+ const reqPath = join14(root, "requirements.txt");
89459
89481
  if (existsSync13(reqPath)) {
89460
89482
  try {
89461
89483
  const content = readFileSync10(reqPath, "utf-8");
@@ -89474,7 +89496,7 @@ var frameworkDetectors = [
89474
89496
  detect: (root) => {
89475
89497
  const configs = ["playwright.config.ts", "playwright.config.js"];
89476
89498
  for (const config of configs) {
89477
- if (existsSync13(join13(root, config))) {
89499
+ if (existsSync13(join14(root, config))) {
89478
89500
  const version = getPackageVersion(root, "@playwright/test");
89479
89501
  return { name: "playwright", version, configFile: config, confidence: 1 };
89480
89502
  }
@@ -89491,12 +89513,12 @@ var frameworkDetectors = [
89491
89513
  detect: (root) => {
89492
89514
  const configs = ["cypress.config.ts", "cypress.config.js", "cypress.json"];
89493
89515
  for (const config of configs) {
89494
- if (existsSync13(join13(root, config))) {
89516
+ if (existsSync13(join14(root, config))) {
89495
89517
  const version = getPackageVersion(root, "cypress");
89496
89518
  return { name: "cypress", version, configFile: config, confidence: 1 };
89497
89519
  }
89498
89520
  }
89499
- if (existsSync13(join13(root, "cypress"))) {
89521
+ if (existsSync13(join14(root, "cypress"))) {
89500
89522
  return { name: "cypress", configFile: "cypress/", confidence: 0.9 };
89501
89523
  }
89502
89524
  return null;
@@ -89517,7 +89539,7 @@ var languagePatterns = [
89517
89539
  { name: "swift", extensions: [".swift"] }
89518
89540
  ];
89519
89541
  function readPackageJson(root) {
89520
- const pkgPath = join13(root, "package.json");
89542
+ const pkgPath = join14(root, "package.json");
89521
89543
  if (!existsSync13(pkgPath)) return null;
89522
89544
  try {
89523
89545
  return JSON.parse(readFileSync10(pkgPath, "utf-8"));
@@ -89542,7 +89564,7 @@ function walkDir(dir, callback, options = {}) {
89542
89564
  }
89543
89565
  for (const entry of entries) {
89544
89566
  if (exclude.includes(entry)) continue;
89545
- const fullPath = join13(currentDir, entry);
89567
+ const fullPath = join14(currentDir, entry);
89546
89568
  let stat3;
89547
89569
  try {
89548
89570
  stat3 = statSync4(fullPath);
@@ -89587,7 +89609,7 @@ var ProjectAnalyzer = class {
89587
89609
  codeComplexity,
89588
89610
  coverage,
89589
89611
  packageManager: this.detectPackageManager(),
89590
- hasTypeScript: existsSync13(join13(this.projectRoot, "tsconfig.json")),
89612
+ hasTypeScript: existsSync13(join14(this.projectRoot, "tsconfig.json")),
89591
89613
  hasCIConfig: this.detectCIConfig(),
89592
89614
  ciProvider: this.detectCIProvider(),
89593
89615
  analysisTimestamp: /* @__PURE__ */ new Date(),
@@ -89673,7 +89695,7 @@ var ProjectAnalyzer = class {
89673
89695
  } else {
89674
89696
  tests.byType.unknown++;
89675
89697
  }
89676
- const dir = relative4(this.projectRoot, join13(filePath, ".."));
89698
+ const dir = relative4(this.projectRoot, join14(filePath, ".."));
89677
89699
  testDirs.add(dir);
89678
89700
  }
89679
89701
  });
@@ -89853,7 +89875,7 @@ var ProjectAnalyzer = class {
89853
89875
  "htmlcov/index.html"
89854
89876
  ];
89855
89877
  for (const coveragePath of coveragePaths) {
89856
- const fullPath = join13(this.projectRoot, coveragePath);
89878
+ const fullPath = join14(this.projectRoot, coveragePath);
89857
89879
  if (existsSync13(fullPath)) {
89858
89880
  if (coveragePath.endsWith(".json")) {
89859
89881
  try {
@@ -89893,9 +89915,9 @@ var ProjectAnalyzer = class {
89893
89915
  * Detect project type
89894
89916
  */
89895
89917
  detectProjectType() {
89896
- if (existsSync13(join13(this.projectRoot, "lerna.json"))) return "monorepo";
89897
- if (existsSync13(join13(this.projectRoot, "pnpm-workspace.yaml"))) return "monorepo";
89898
- if (existsSync13(join13(this.projectRoot, "packages"))) return "monorepo";
89918
+ if (existsSync13(join14(this.projectRoot, "lerna.json"))) return "monorepo";
89919
+ if (existsSync13(join14(this.projectRoot, "pnpm-workspace.yaml"))) return "monorepo";
89920
+ if (existsSync13(join14(this.projectRoot, "packages"))) return "monorepo";
89899
89921
  const pkg = readPackageJson(this.projectRoot);
89900
89922
  if (pkg?.workspaces) return "monorepo";
89901
89923
  if (pkg?.main || pkg?.module || pkg?.exports) return "library";
@@ -89905,10 +89927,10 @@ var ProjectAnalyzer = class {
89905
89927
  * Detect package manager
89906
89928
  */
89907
89929
  detectPackageManager() {
89908
- if (existsSync13(join13(this.projectRoot, "bun.lockb"))) return "bun";
89909
- if (existsSync13(join13(this.projectRoot, "pnpm-lock.yaml"))) return "pnpm";
89910
- if (existsSync13(join13(this.projectRoot, "yarn.lock"))) return "yarn";
89911
- if (existsSync13(join13(this.projectRoot, "package-lock.json"))) return "npm";
89930
+ if (existsSync13(join14(this.projectRoot, "bun.lockb"))) return "bun";
89931
+ if (existsSync13(join14(this.projectRoot, "pnpm-lock.yaml"))) return "pnpm";
89932
+ if (existsSync13(join14(this.projectRoot, "yarn.lock"))) return "yarn";
89933
+ if (existsSync13(join14(this.projectRoot, "package-lock.json"))) return "npm";
89912
89934
  return "unknown";
89913
89935
  }
89914
89936
  /**
@@ -89923,16 +89945,16 @@ var ProjectAnalyzer = class {
89923
89945
  ".travis.yml",
89924
89946
  "azure-pipelines.yml"
89925
89947
  ];
89926
- return ciFiles.some((f) => existsSync13(join13(this.projectRoot, f)));
89948
+ return ciFiles.some((f) => existsSync13(join14(this.projectRoot, f)));
89927
89949
  }
89928
89950
  /**
89929
89951
  * Detect CI provider
89930
89952
  */
89931
89953
  detectCIProvider() {
89932
- if (existsSync13(join13(this.projectRoot, ".github/workflows"))) return "github-actions";
89933
- if (existsSync13(join13(this.projectRoot, ".gitlab-ci.yml"))) return "gitlab-ci";
89934
- if (existsSync13(join13(this.projectRoot, "Jenkinsfile"))) return "jenkins";
89935
- if (existsSync13(join13(this.projectRoot, ".circleci/config.yml"))) return "circleci";
89954
+ if (existsSync13(join14(this.projectRoot, ".github/workflows"))) return "github-actions";
89955
+ if (existsSync13(join14(this.projectRoot, ".gitlab-ci.yml"))) return "gitlab-ci";
89956
+ if (existsSync13(join14(this.projectRoot, "Jenkinsfile"))) return "jenkins";
89957
+ if (existsSync13(join14(this.projectRoot, ".circleci/config.yml"))) return "circleci";
89936
89958
  if (this.detectCIConfig()) return "other";
89937
89959
  return void 0;
89938
89960
  }
@@ -90256,7 +90278,7 @@ function createSelfConfigurator(options) {
90256
90278
 
90257
90279
  // src/init/skills-installer.ts
90258
90280
  import { existsSync as existsSync14, mkdirSync as mkdirSync5, readdirSync as readdirSync5, statSync as statSync5, readFileSync as readFileSync11, writeFileSync as writeFileSync2, copyFileSync as copyFileSync2 } from "fs";
90259
- import { join as join14, dirname as dirname4 } from "path";
90281
+ import { join as join15, dirname as dirname4 } from "path";
90260
90282
  import { fileURLToPath } from "url";
90261
90283
  var V3_DOMAIN_SKILLS = [
90262
90284
  // 12 DDD bounded context skills
@@ -90366,25 +90388,25 @@ var SkillsInstaller = class {
90366
90388
  const moduleDir = dirname4(fileURLToPath(import.meta.url));
90367
90389
  const possiblePaths = [
90368
90390
  // Development: relative to v3/src/init/ (3 levels up to agentic-qe root)
90369
- join14(moduleDir, "../../../.claude/skills"),
90391
+ join15(moduleDir, "../../../.claude/skills"),
90370
90392
  // Development: relative to v3/dist/init/ (3 levels up to agentic-qe root)
90371
- join14(moduleDir, "../../../.claude/skills"),
90393
+ join15(moduleDir, "../../../.claude/skills"),
90372
90394
  // NPM package: assets directory at package root (dist/init -> dist -> package root)
90373
- join14(moduleDir, "../../assets/skills"),
90395
+ join15(moduleDir, "../../assets/skills"),
90374
90396
  // Local install: in node_modules
90375
- join14(this.projectRoot, "node_modules/@agentic-qe/v3/assets/skills")
90397
+ join15(this.projectRoot, "node_modules/@agentic-qe/v3/assets/skills")
90376
90398
  ];
90377
90399
  try {
90378
90400
  const { execSync: execSync7 } = __require("child_process");
90379
90401
  const npmPrefix = execSync7("npm config get prefix", { encoding: "utf-8" }).trim();
90380
90402
  possiblePaths.push(
90381
90403
  // Global install as @agentic-qe/v3
90382
- join14(npmPrefix, "lib/node_modules/@agentic-qe/v3/assets/skills"),
90404
+ join15(npmPrefix, "lib/node_modules/@agentic-qe/v3/assets/skills"),
90383
90405
  // Global install as agentic-qe (root package)
90384
- join14(npmPrefix, "lib/node_modules/agentic-qe/.claude/skills"),
90406
+ join15(npmPrefix, "lib/node_modules/agentic-qe/.claude/skills"),
90385
90407
  // Linux global without lib
90386
- join14(npmPrefix, "node_modules/@agentic-qe/v3/assets/skills"),
90387
- join14(npmPrefix, "node_modules/agentic-qe/.claude/skills")
90408
+ join15(npmPrefix, "node_modules/@agentic-qe/v3/assets/skills"),
90409
+ join15(npmPrefix, "node_modules/agentic-qe/.claude/skills")
90388
90410
  );
90389
90411
  } catch (error) {
90390
90412
  console.debug("[SkillsInstaller] npm prefix lookup failed:", error instanceof Error ? error.message : error);
@@ -90405,13 +90427,13 @@ var SkillsInstaller = class {
90405
90427
  skipped: [],
90406
90428
  errors: [],
90407
90429
  totalCount: 0,
90408
- skillsDir: join14(this.projectRoot, ".claude", "skills")
90430
+ skillsDir: join15(this.projectRoot, ".claude", "skills")
90409
90431
  };
90410
90432
  if (!existsSync14(this.sourceSkillsDir)) {
90411
90433
  result.errors.push(`Source skills directory not found: ${this.sourceSkillsDir}`);
90412
90434
  return result;
90413
90435
  }
90414
- const targetSkillsDir = join14(this.projectRoot, ".claude", "skills");
90436
+ const targetSkillsDir = join15(this.projectRoot, ".claude", "skills");
90415
90437
  if (!existsSync14(targetSkillsDir)) {
90416
90438
  mkdirSync5(targetSkillsDir, { recursive: true });
90417
90439
  }
@@ -90440,7 +90462,7 @@ var SkillsInstaller = class {
90440
90462
  try {
90441
90463
  const entries = readdirSync5(this.sourceSkillsDir);
90442
90464
  return entries.filter((entry) => {
90443
- const fullPath = join14(this.sourceSkillsDir, entry);
90465
+ const fullPath = join15(this.sourceSkillsDir, entry);
90444
90466
  return statSync5(fullPath).isDirectory() && !entry.startsWith(".");
90445
90467
  });
90446
90468
  } catch {
@@ -90474,8 +90496,8 @@ var SkillsInstaller = class {
90474
90496
  * Install a single skill
90475
90497
  */
90476
90498
  async installSkill(skillName, targetDir) {
90477
- const sourceDir = join14(this.sourceSkillsDir, skillName);
90478
- const targetSkillDir = join14(targetDir, skillName);
90499
+ const sourceDir = join15(this.sourceSkillsDir, skillName);
90500
+ const targetSkillDir = join15(targetDir, skillName);
90479
90501
  if (existsSync14(targetSkillDir) && !this.options.overwrite) {
90480
90502
  return null;
90481
90503
  }
@@ -90485,7 +90507,7 @@ var SkillsInstaller = class {
90485
90507
  this.copyDirectoryRecursive(sourceDir, targetSkillDir);
90486
90508
  const skillType = this.getSkillType(skillName);
90487
90509
  const description = this.getSkillDescription(targetSkillDir);
90488
- const hasResources = existsSync14(join14(targetSkillDir, "resources"));
90510
+ const hasResources = existsSync14(join15(targetSkillDir, "resources"));
90489
90511
  return {
90490
90512
  name: skillName,
90491
90513
  type: skillType,
@@ -90499,8 +90521,8 @@ var SkillsInstaller = class {
90499
90521
  copyDirectoryRecursive(source, target) {
90500
90522
  const entries = readdirSync5(source);
90501
90523
  for (const entry of entries) {
90502
- const sourcePath = join14(source, entry);
90503
- const targetPath = join14(target, entry);
90524
+ const sourcePath = join15(source, entry);
90525
+ const targetPath = join15(target, entry);
90504
90526
  const stat3 = statSync5(sourcePath);
90505
90527
  if (stat3.isDirectory()) {
90506
90528
  if (!existsSync14(targetPath)) {
@@ -90523,7 +90545,7 @@ var SkillsInstaller = class {
90523
90545
  * Extract description from SKILL.md file
90524
90546
  */
90525
90547
  getSkillDescription(skillDir) {
90526
- const skillMdPath = join14(skillDir, "SKILL.md");
90548
+ const skillMdPath = join15(skillDir, "SKILL.md");
90527
90549
  if (!existsSync14(skillMdPath)) return void 0;
90528
90550
  try {
90529
90551
  const content = readFileSync11(skillMdPath, "utf-8");
@@ -90576,7 +90598,7 @@ ${v3Skills.map((s) => `- **${s.name}**${s.description ? `: ${s.description}` : "
90576
90598
 
90577
90599
  *Generated by AQE v3 init on ${(/* @__PURE__ */ new Date()).toISOString()}*
90578
90600
  `;
90579
- writeFileSync2(join14(skillsDir, "README.md"), indexContent, "utf-8");
90601
+ writeFileSync2(join15(skillsDir, "README.md"), indexContent, "utf-8");
90580
90602
  }
90581
90603
  };
90582
90604
  function createSkillsInstaller(options) {
@@ -90585,7 +90607,7 @@ function createSkillsInstaller(options) {
90585
90607
 
90586
90608
  // src/init/agents-installer.ts
90587
90609
  import { existsSync as existsSync15, mkdirSync as mkdirSync6, readdirSync as readdirSync6, statSync as statSync6, readFileSync as readFileSync12, writeFileSync as writeFileSync3, copyFileSync as copyFileSync3 } from "fs";
90588
- import { join as join15, dirname as dirname5 } from "path";
90610
+ import { join as join16, dirname as dirname5 } from "path";
90589
90611
  import { fileURLToPath as fileURLToPath2 } from "url";
90590
90612
  var V3_QE_AGENTS = [
90591
90613
  // Test Generation Domain
@@ -90673,25 +90695,25 @@ var AgentsInstaller = class {
90673
90695
  const possiblePaths = [
90674
90696
  // NPM package: assets directory at package root (dist/init -> dist -> package root)
90675
90697
  // This is the canonical source with helpers/ directory
90676
- join15(moduleDir, "../../assets/agents/v3"),
90698
+ join16(moduleDir, "../../assets/agents/v3"),
90677
90699
  // Development: v3/src/init/ -> v3/assets/agents/v3/
90678
- join15(moduleDir, "../../../v3/assets/agents/v3"),
90700
+ join16(moduleDir, "../../../v3/assets/agents/v3"),
90679
90701
  // Fallback: root .claude/agents/v3 (may not have helpers/)
90680
- join15(moduleDir, "../../../.claude/agents/v3"),
90702
+ join16(moduleDir, "../../../.claude/agents/v3"),
90681
90703
  // Local install: in node_modules
90682
- join15(this.projectRoot, "node_modules/@agentic-qe/v3/assets/agents/v3")
90704
+ join16(this.projectRoot, "node_modules/@agentic-qe/v3/assets/agents/v3")
90683
90705
  ];
90684
90706
  try {
90685
90707
  const { execSync: execSync7 } = __require("child_process");
90686
90708
  const npmPrefix = execSync7("npm config get prefix", { encoding: "utf-8" }).trim();
90687
90709
  possiblePaths.push(
90688
90710
  // Global install as @agentic-qe/v3
90689
- join15(npmPrefix, "lib/node_modules/@agentic-qe/v3/assets/agents/v3"),
90711
+ join16(npmPrefix, "lib/node_modules/@agentic-qe/v3/assets/agents/v3"),
90690
90712
  // Global install as agentic-qe (root package)
90691
- join15(npmPrefix, "lib/node_modules/agentic-qe/v3/assets/agents/v3"),
90713
+ join16(npmPrefix, "lib/node_modules/agentic-qe/v3/assets/agents/v3"),
90692
90714
  // Linux global without lib
90693
- join15(npmPrefix, "node_modules/@agentic-qe/v3/assets/agents/v3"),
90694
- join15(npmPrefix, "node_modules/agentic-qe/v3/assets/agents/v3")
90715
+ join16(npmPrefix, "node_modules/@agentic-qe/v3/assets/agents/v3"),
90716
+ join16(npmPrefix, "node_modules/agentic-qe/v3/assets/agents/v3")
90695
90717
  );
90696
90718
  } catch (error) {
90697
90719
  console.debug("[AgentsInstaller] npm prefix lookup failed:", error instanceof Error ? error.message : error);
@@ -90712,17 +90734,17 @@ var AgentsInstaller = class {
90712
90734
  skipped: [],
90713
90735
  errors: [],
90714
90736
  totalCount: 0,
90715
- agentsDir: join15(this.projectRoot, ".claude", "agents", "v3")
90737
+ agentsDir: join16(this.projectRoot, ".claude", "agents", "v3")
90716
90738
  };
90717
90739
  if (!existsSync15(this.sourceAgentsDir)) {
90718
90740
  result.errors.push(`Source agents directory not found: ${this.sourceAgentsDir}`);
90719
90741
  return result;
90720
90742
  }
90721
- const targetAgentsDir = join15(this.projectRoot, ".claude", "agents", "v3");
90743
+ const targetAgentsDir = join16(this.projectRoot, ".claude", "agents", "v3");
90722
90744
  if (!existsSync15(targetAgentsDir)) {
90723
90745
  mkdirSync6(targetAgentsDir, { recursive: true });
90724
90746
  }
90725
- const targetSubagentsDir = join15(targetAgentsDir, "subagents");
90747
+ const targetSubagentsDir = join16(targetAgentsDir, "subagents");
90726
90748
  if (!existsSync15(targetSubagentsDir)) {
90727
90749
  mkdirSync6(targetSubagentsDir, { recursive: true });
90728
90750
  }
@@ -90753,7 +90775,7 @@ var AgentsInstaller = class {
90753
90775
  try {
90754
90776
  const entries = readdirSync6(this.sourceAgentsDir);
90755
90777
  for (const entry of entries) {
90756
- const fullPath = join15(this.sourceAgentsDir, entry);
90778
+ const fullPath = join16(this.sourceAgentsDir, entry);
90757
90779
  const stat3 = statSync6(fullPath);
90758
90780
  if (stat3.isFile() && entry.endsWith(".md")) {
90759
90781
  agents.push(entry.replace(".md", ""));
@@ -90812,8 +90834,8 @@ var AgentsInstaller = class {
90812
90834
  async installAgent(agentPath, targetDir, targetSubagentsDir) {
90813
90835
  const isSubagent = agentPath.startsWith("subagents/");
90814
90836
  const agentName = isSubagent ? agentPath.split("/")[1] : agentPath;
90815
- const sourceFile = join15(this.sourceAgentsDir, `${agentPath}.md`);
90816
- const targetFile = isSubagent ? join15(targetSubagentsDir, `${agentName}.md`) : join15(targetDir, `${agentName}.md`);
90837
+ const sourceFile = join16(this.sourceAgentsDir, `${agentPath}.md`);
90838
+ const targetFile = isSubagent ? join16(targetSubagentsDir, `${agentName}.md`) : join16(targetDir, `${agentName}.md`);
90817
90839
  if (existsSync15(targetFile) && !this.options.overwrite) {
90818
90840
  return null;
90819
90841
  }
@@ -90849,8 +90871,8 @@ var AgentsInstaller = class {
90849
90871
  }
90850
90872
  const entries = readdirSync6(source);
90851
90873
  for (const entry of entries) {
90852
- const sourcePath = join15(source, entry);
90853
- const targetPath = join15(target, entry);
90874
+ const sourcePath = join16(source, entry);
90875
+ const targetPath = join16(target, entry);
90854
90876
  const stat3 = statSync6(sourcePath);
90855
90877
  if (stat3.isDirectory()) {
90856
90878
  this.copyDirectoryRecursive(sourcePath, targetPath);
@@ -90865,8 +90887,8 @@ var AgentsInstaller = class {
90865
90887
  * Copy helpers directory (agent-specific reference files, templates, scripts)
90866
90888
  */
90867
90889
  async copyHelpersDirectory(targetAgentsDir) {
90868
- const sourceHelpersDir = join15(this.sourceAgentsDir, "helpers");
90869
- const targetHelpersDir = join15(targetAgentsDir, "helpers");
90890
+ const sourceHelpersDir = join16(this.sourceAgentsDir, "helpers");
90891
+ const targetHelpersDir = join16(targetAgentsDir, "helpers");
90870
90892
  if (existsSync15(sourceHelpersDir)) {
90871
90893
  this.copyDirectoryRecursive(sourceHelpersDir, targetHelpersDir);
90872
90894
  }
@@ -90998,7 +91020,7 @@ ${subagents.map((a) => `- **${a.name}**${a.description ? `: ${a.description}` :
90998
91020
 
90999
91021
  *Generated by AQE v3 init on ${(/* @__PURE__ */ new Date()).toISOString()}*
91000
91022
  `;
91001
- writeFileSync3(join15(agentsDir, "README.md"), indexContent, "utf-8");
91023
+ writeFileSync3(join16(agentsDir, "README.md"), indexContent, "utf-8");
91002
91024
  }
91003
91025
  };
91004
91026
  function createAgentsInstaller(options) {
@@ -91014,7 +91036,7 @@ import {
91014
91036
  writeFileSync as writeFileSync4,
91015
91037
  copyFileSync as copyFileSync4
91016
91038
  } from "fs";
91017
- import { join as join16, dirname as dirname6 } from "path";
91039
+ import { join as join17, dirname as dirname6 } from "path";
91018
91040
  import { fileURLToPath as fileURLToPath3 } from "url";
91019
91041
  var __filename2 = fileURLToPath3(import.meta.url);
91020
91042
  var __dirname2 = dirname6(__filename2);
@@ -91077,38 +91099,38 @@ var N8nInstaller = class {
91077
91099
  findSourceAgentsDir() {
91078
91100
  const possiblePaths = [
91079
91101
  // From v3/src/init/ context (development)
91080
- join16(__dirname2, "../../../.claude/agents/n8n"),
91081
- join16(__dirname2, "../../.claude/agents/n8n"),
91102
+ join17(__dirname2, "../../../.claude/agents/n8n"),
91103
+ join17(__dirname2, "../../.claude/agents/n8n"),
91082
91104
  // From project root
91083
- join16(process.cwd(), ".claude/agents/n8n"),
91105
+ join17(process.cwd(), ".claude/agents/n8n"),
91084
91106
  // NPM package location
91085
- join16(__dirname2, "../../assets/agents/n8n"),
91107
+ join17(__dirname2, "../../assets/agents/n8n"),
91086
91108
  // Monorepo location
91087
- join16(process.cwd(), "../.claude/agents/n8n")
91109
+ join17(process.cwd(), "../.claude/agents/n8n")
91088
91110
  ];
91089
91111
  for (const path16 of possiblePaths) {
91090
91112
  if (existsSync16(path16)) {
91091
91113
  return path16;
91092
91114
  }
91093
91115
  }
91094
- return join16(process.cwd(), ".claude/agents/n8n");
91116
+ return join17(process.cwd(), ".claude/agents/n8n");
91095
91117
  }
91096
91118
  /**
91097
91119
  * Find the source skills directory
91098
91120
  */
91099
91121
  findSourceSkillsDir() {
91100
91122
  const possiblePaths = [
91101
- join16(__dirname2, "../../../.claude/skills"),
91102
- join16(__dirname2, "../../.claude/skills"),
91103
- join16(process.cwd(), ".claude/skills"),
91104
- join16(__dirname2, "../../assets/skills")
91123
+ join17(__dirname2, "../../../.claude/skills"),
91124
+ join17(__dirname2, "../../.claude/skills"),
91125
+ join17(process.cwd(), ".claude/skills"),
91126
+ join17(__dirname2, "../../assets/skills")
91105
91127
  ];
91106
91128
  for (const path16 of possiblePaths) {
91107
91129
  if (existsSync16(path16)) {
91108
91130
  return path16;
91109
91131
  }
91110
91132
  }
91111
- return join16(process.cwd(), ".claude/skills");
91133
+ return join17(process.cwd(), ".claude/skills");
91112
91134
  }
91113
91135
  // ==========================================================================
91114
91136
  // Installation
@@ -91123,8 +91145,8 @@ var N8nInstaller = class {
91123
91145
  skillsInstalled: [],
91124
91146
  configGenerated: false,
91125
91147
  errors: [],
91126
- agentsDir: join16(this.projectRoot, ".claude/agents/n8n"),
91127
- skillsDir: join16(this.projectRoot, ".claude/skills")
91148
+ agentsDir: join17(this.projectRoot, ".claude/agents/n8n"),
91149
+ skillsDir: join17(this.projectRoot, ".claude/skills")
91128
91150
  };
91129
91151
  try {
91130
91152
  if (this.options.installAgents) {
@@ -91169,8 +91191,8 @@ var N8nInstaller = class {
91169
91191
  );
91170
91192
  for (const category of Object.keys(N8N_AGENTS)) {
91171
91193
  for (const agent of N8N_AGENTS[category]) {
91172
- const sourceFile = join16(this.sourceAgentsDir, agent.filename);
91173
- const targetFile = join16(targetDir, agent.filename);
91194
+ const sourceFile = join17(this.sourceAgentsDir, agent.filename);
91195
+ const targetFile = join17(targetDir, agent.filename);
91174
91196
  if (!availableFiles.includes(agent.filename)) {
91175
91197
  continue;
91176
91198
  }
@@ -91206,8 +91228,8 @@ var N8nInstaller = class {
91206
91228
  return { installed, errors };
91207
91229
  }
91208
91230
  for (const skillName of N8N_SKILLS) {
91209
- const sourceSkillDir = join16(this.sourceSkillsDir, skillName);
91210
- const targetSkillDir = join16(targetDir, skillName);
91231
+ const sourceSkillDir = join17(this.sourceSkillsDir, skillName);
91232
+ const targetSkillDir = join17(targetDir, skillName);
91211
91233
  if (!existsSync16(sourceSkillDir)) {
91212
91234
  continue;
91213
91235
  }
@@ -91234,8 +91256,8 @@ var N8nInstaller = class {
91234
91256
  }
91235
91257
  const entries = readdirSync7(source, { withFileTypes: true });
91236
91258
  for (const entry of entries) {
91237
- const sourcePath = join16(source, entry.name);
91238
- const targetPath = join16(target, entry.name);
91259
+ const sourcePath = join17(source, entry.name);
91260
+ const targetPath = join17(target, entry.name);
91239
91261
  if (entry.isDirectory()) {
91240
91262
  this.copyDirectory(sourcePath, targetPath);
91241
91263
  } else {
@@ -91247,7 +91269,7 @@ var N8nInstaller = class {
91247
91269
  * Create agents index README
91248
91270
  */
91249
91271
  createAgentsIndex(targetDir, agents) {
91250
- const indexPath = join16(targetDir, "README.md");
91272
+ const indexPath = join17(targetDir, "README.md");
91251
91273
  const byCategory = {
91252
91274
  core: agents.filter((a) => a.category === "core"),
91253
91275
  advanced: agents.filter((a) => a.category === "advanced"),
@@ -91486,7 +91508,7 @@ var InitOrchestrator = class {
91486
91508
  * This marks the installation as v3
91487
91509
  */
91488
91510
  async writeVersionToDb(version) {
91489
- const memoryDbPath = join17(this.projectRoot, ".agentic-qe", "memory.db");
91511
+ const memoryDbPath = join18(this.projectRoot, ".agentic-qe", "memory.db");
91490
91512
  try {
91491
91513
  const dir = dirname7(memoryDbPath);
91492
91514
  if (!existsSync17(dir)) {
@@ -91536,15 +91558,15 @@ var InitOrchestrator = class {
91536
91558
  * 3. If no version or version < 3.0.0, and v2 markers exist, it's v2
91537
91559
  */
91538
91560
  async detectV2Installation() {
91539
- const memoryDbPath = join17(this.projectRoot, ".agentic-qe", "memory.db");
91540
- const configPath = join17(this.projectRoot, ".agentic-qe", "config");
91541
- const agentsPath = join17(this.projectRoot, ".claude", "agents");
91542
- const v2ConfigFile = join17(this.projectRoot, ".agentic-qe", "config", "learning.json");
91561
+ const memoryDbPath = join18(this.projectRoot, ".agentic-qe", "memory.db");
91562
+ const configPath = join18(this.projectRoot, ".agentic-qe", "config");
91563
+ const agentsPath = join18(this.projectRoot, ".claude", "agents");
91564
+ const v2ConfigFile = join18(this.projectRoot, ".agentic-qe", "config", "learning.json");
91543
91565
  const hasMemoryDb = existsSync17(memoryDbPath);
91544
91566
  const hasConfig = existsSync17(configPath);
91545
91567
  const hasAgents = existsSync17(agentsPath);
91546
91568
  const hasV2ConfigFiles = existsSync17(v2ConfigFile);
91547
- const hasV3ConfigYaml = existsSync17(join17(this.projectRoot, ".agentic-qe", "config.yaml"));
91569
+ const hasV3ConfigYaml = existsSync17(join18(this.projectRoot, ".agentic-qe", "config.yaml"));
91548
91570
  let version;
91549
91571
  let isV3Installation = false;
91550
91572
  if (hasMemoryDb) {
@@ -91761,7 +91783,7 @@ var InitOrchestrator = class {
91761
91783
  const { V2ToV3Migrator: V2ToV3Migrator2 } = await Promise.resolve().then(() => (init_v2_to_v3_migration(), v2_to_v3_migration_exports));
91762
91784
  if (v2Detection.memoryDbPath) {
91763
91785
  console.log(" Migrating V2 data to V3 format...");
91764
- const v3PatternsDbPath = join17(this.projectRoot, ".agentic-qe", "qe-patterns.db");
91786
+ const v3PatternsDbPath = join18(this.projectRoot, ".agentic-qe", "memory.db");
91765
91787
  const migrator = new V2ToV3Migrator2({
91766
91788
  v2DbPath: v2Detection.memoryDbPath,
91767
91789
  v3PatternsDbPath,
@@ -91795,7 +91817,7 @@ var InitOrchestrator = class {
91795
91817
  * Removes qe-* files and specific v2 agents (qx-partner, base-template-generator)
91796
91818
  */
91797
91819
  async removeV2QEAgents() {
91798
- const agentsDir = join17(this.projectRoot, ".claude", "agents");
91820
+ const agentsDir = join18(this.projectRoot, ".claude", "agents");
91799
91821
  if (!existsSync17(agentsDir)) {
91800
91822
  return;
91801
91823
  }
@@ -91808,13 +91830,13 @@ var InitOrchestrator = class {
91808
91830
  const v2QEAgents = [];
91809
91831
  for (const entry of entries) {
91810
91832
  if (entry.startsWith("qe-") && entry.endsWith(".md")) {
91811
- const fullPath = join17(agentsDir, entry);
91833
+ const fullPath = join18(agentsDir, entry);
91812
91834
  const stat3 = statSync7(fullPath);
91813
91835
  if (stat3.isFile()) {
91814
91836
  v2QEAgents.push(entry);
91815
91837
  }
91816
91838
  } else if (V2_LEGACY_AGENTS.includes(entry)) {
91817
- const fullPath = join17(agentsDir, entry);
91839
+ const fullPath = join18(agentsDir, entry);
91818
91840
  const stat3 = statSync7(fullPath);
91819
91841
  if (stat3.isFile()) {
91820
91842
  v2QEAgents.push(entry);
@@ -91825,14 +91847,14 @@ var InitOrchestrator = class {
91825
91847
  return;
91826
91848
  }
91827
91849
  console.log(` Removing ${v2QEAgents.length} v2 QE agents from .claude/agents/...`);
91828
- const backupDir = join17(this.projectRoot, ".agentic-qe", "backup", "v2-agents");
91850
+ const backupDir = join18(this.projectRoot, ".agentic-qe", "backup", "v2-agents");
91829
91851
  if (!existsSync17(backupDir)) {
91830
91852
  mkdirSync8(backupDir, { recursive: true });
91831
91853
  }
91832
91854
  const { renameSync } = await import("fs");
91833
91855
  for (const agent of v2QEAgents) {
91834
- const sourcePath = join17(agentsDir, agent);
91835
- const backupPath = join17(backupDir, agent);
91856
+ const sourcePath = join18(agentsDir, agent);
91857
+ const backupPath = join18(backupDir, agent);
91836
91858
  try {
91837
91859
  copyFileSync5(sourcePath, backupPath);
91838
91860
  unlinkSync2(sourcePath);
@@ -91851,16 +91873,16 @@ var InitOrchestrator = class {
91851
91873
  */
91852
91874
  async migrateV2Config(v2Detection) {
91853
91875
  if (!v2Detection.hasConfig) return;
91854
- const v2ConfigDir = join17(this.projectRoot, ".agentic-qe", "config");
91855
- const v3ConfigPath = join17(this.projectRoot, ".agentic-qe", "config.yaml");
91876
+ const v2ConfigDir = join18(this.projectRoot, ".agentic-qe", "config");
91877
+ const v3ConfigPath = join18(this.projectRoot, ".agentic-qe", "config.yaml");
91856
91878
  if (existsSync17(v3ConfigPath)) {
91857
91879
  console.log(" \u2713 V3 config already exists, preserving...");
91858
91880
  return;
91859
91881
  }
91860
91882
  try {
91861
- const learningConfig = this.readJsonSafe(join17(v2ConfigDir, "learning.json"));
91862
- const improvementConfig = this.readJsonSafe(join17(v2ConfigDir, "improvement.json"));
91863
- const codeIntelConfig = this.readJsonSafe(join17(v2ConfigDir, "code-intelligence.json"));
91883
+ const learningConfig = this.readJsonSafe(join18(v2ConfigDir, "learning.json"));
91884
+ const improvementConfig = this.readJsonSafe(join18(v2ConfigDir, "improvement.json"));
91885
+ const codeIntelConfig = this.readJsonSafe(join18(v2ConfigDir, "code-intelligence.json"));
91864
91886
  const v3Config = {
91865
91887
  version: "3.0.0",
91866
91888
  migratedFrom: v2Detection.version || "2.x.x",
@@ -92014,7 +92036,7 @@ ${yaml.stringify(v3Config)}`;
92014
92036
  * Uses memory backend to check code-intelligence:kg namespace
92015
92037
  */
92016
92038
  async checkCodeIntelligenceIndex() {
92017
- const dbPath = join17(this.projectRoot, ".agentic-qe", "memory.db");
92039
+ const dbPath = join18(this.projectRoot, ".agentic-qe", "memory.db");
92018
92040
  if (!existsSync17(dbPath)) {
92019
92041
  return false;
92020
92042
  }
@@ -92057,7 +92079,7 @@ ${yaml.stringify(v3Config)}`;
92057
92079
  ignore: ["node_modules/**", "dist/**", "coverage/**", ".agentic-qe/**"]
92058
92080
  });
92059
92081
  const result = await kgService.index({
92060
- paths: files.map((f) => join17(projectPath, f)),
92082
+ paths: files.map((f) => join18(projectPath, f)),
92061
92083
  incremental: false,
92062
92084
  includeTests: true
92063
92085
  });
@@ -92078,7 +92100,7 @@ ${yaml.stringify(v3Config)}`;
92078
92100
  * Get count of KG entries from existing database
92079
92101
  */
92080
92102
  async getKGEntryCount() {
92081
- const dbPath = join17(this.projectRoot, ".agentic-qe", "memory.db");
92103
+ const dbPath = join18(this.projectRoot, ".agentic-qe", "memory.db");
92082
92104
  try {
92083
92105
  const Database4 = (await import("better-sqlite3")).default;
92084
92106
  const db = new Database4(dbPath);
@@ -92107,11 +92129,11 @@ ${yaml.stringify(v3Config)}`;
92107
92129
  "SQLite persistence REQUIRED but better-sqlite3 is not installed.\nInstall it with: npm install better-sqlite3\nIf you see native compilation errors, ensure build tools are installed:\n - macOS: xcode-select --install\n - Ubuntu/Debian: sudo apt-get install build-essential python3\n - Alpine: apk add build-base python3"
92108
92130
  );
92109
92131
  }
92110
- const dataDir = join17(this.projectRoot, ".agentic-qe");
92132
+ const dataDir = join18(this.projectRoot, ".agentic-qe");
92111
92133
  if (!existsSync17(dataDir)) {
92112
92134
  mkdirSync8(dataDir, { recursive: true });
92113
92135
  }
92114
- const dbPath = join17(dataDir, "memory.db");
92136
+ const dbPath = join18(dataDir, "memory.db");
92115
92137
  try {
92116
92138
  const db = new Database4(dbPath);
92117
92139
  db.pragma("journal_mode = WAL");
@@ -92158,22 +92180,22 @@ Ensure the directory is writable and has sufficient disk space.`
92158
92180
  if (!config.learning.enabled) {
92159
92181
  return 0;
92160
92182
  }
92161
- const dataDir = join17(this.projectRoot, ".agentic-qe", "data");
92183
+ const dataDir = join18(this.projectRoot, ".agentic-qe", "data");
92162
92184
  if (!existsSync17(dataDir)) {
92163
92185
  mkdirSync8(dataDir, { recursive: true });
92164
92186
  }
92165
- const hnswDir = join17(dataDir, "hnsw");
92187
+ const hnswDir = join18(dataDir, "hnsw");
92166
92188
  if (!existsSync17(hnswDir)) {
92167
92189
  mkdirSync8(hnswDir, { recursive: true });
92168
92190
  }
92169
- const learningConfigPath = join17(dataDir, "learning-config.json");
92191
+ const learningConfigPath = join18(dataDir, "learning-config.json");
92170
92192
  const learningConfig = {
92171
92193
  embeddingModel: config.learning.embeddingModel,
92172
92194
  hnswConfig: config.learning.hnswConfig,
92173
92195
  qualityThreshold: config.learning.qualityThreshold,
92174
92196
  promotionThreshold: config.learning.promotionThreshold,
92175
- databasePath: join17(dataDir, "qe-patterns.db"),
92176
- hnswIndexPath: join17(hnswDir, "index.bin"),
92197
+ databasePath: join18(dataDir, "memory.db"),
92198
+ hnswIndexPath: join18(hnswDir, "index.bin"),
92177
92199
  initialized: (/* @__PURE__ */ new Date()).toISOString()
92178
92200
  };
92179
92201
  writeFileSync5(learningConfigPath, JSON.stringify(learningConfig, null, 2), "utf-8");
@@ -92188,7 +92210,7 @@ Ensure the directory is writable and has sufficient disk space.`
92188
92210
  }
92189
92211
  patternsByDomain.get(domain).push(pattern);
92190
92212
  }
92191
- const patternsIndexPath = join17(dataDir, "pretrained-index.json");
92213
+ const patternsIndexPath = join18(dataDir, "pretrained-index.json");
92192
92214
  const patternsIndex = {
92193
92215
  version: library.version,
92194
92216
  totalPatterns: library.statistics.totalPatterns,
@@ -92200,11 +92222,11 @@ Ensure the directory is writable and has sufficient disk space.`
92200
92222
  };
92201
92223
  writeFileSync5(patternsIndexPath, JSON.stringify(patternsIndex, null, 2), "utf-8");
92202
92224
  for (const [domain, patterns] of patternsByDomain) {
92203
- const domainDir = join17(dataDir, "patterns", domain);
92225
+ const domainDir = join18(dataDir, "patterns", domain);
92204
92226
  if (!existsSync17(domainDir)) {
92205
92227
  mkdirSync8(domainDir, { recursive: true });
92206
92228
  }
92207
- const patternsPath = join17(domainDir, "patterns.json");
92229
+ const patternsPath = join18(domainDir, "patterns.json");
92208
92230
  writeFileSync5(patternsPath, JSON.stringify(patterns, null, 2), "utf-8");
92209
92231
  patternsLoaded += patterns.length;
92210
92232
  }
@@ -92221,11 +92243,11 @@ Ensure the directory is writable and has sufficient disk space.`
92221
92243
  if (!config.hooks.claudeCode) {
92222
92244
  return false;
92223
92245
  }
92224
- const claudeDir = join17(this.projectRoot, ".claude");
92246
+ const claudeDir = join18(this.projectRoot, ".claude");
92225
92247
  if (!existsSync17(claudeDir)) {
92226
92248
  mkdirSync8(claudeDir, { recursive: true });
92227
92249
  }
92228
- const settingsPath = join17(claudeDir, "settings.json");
92250
+ const settingsPath = join18(claudeDir, "settings.json");
92229
92251
  let settings = {};
92230
92252
  if (existsSync17(settingsPath)) {
92231
92253
  try {
@@ -92384,20 +92406,20 @@ Ensure the directory is writable and has sufficient disk space.`
92384
92406
  * Copies the QCSD feedback loop hooks from assets to .claude/hooks/
92385
92407
  */
92386
92408
  async installCrossPhaseMemoryHooks() {
92387
- const hooksDir = join17(this.projectRoot, ".claude", "hooks");
92409
+ const hooksDir = join18(this.projectRoot, ".claude", "hooks");
92388
92410
  if (!existsSync17(hooksDir)) {
92389
92411
  mkdirSync8(hooksDir, { recursive: true });
92390
92412
  }
92391
- const targetPath = join17(hooksDir, "cross-phase-memory.yaml");
92413
+ const targetPath = join18(hooksDir, "cross-phase-memory.yaml");
92392
92414
  if (existsSync17(targetPath)) {
92393
92415
  return;
92394
92416
  }
92395
92417
  const possiblePaths = [
92396
92418
  // Installed package location
92397
- join17(dirname7(import.meta.url.replace("file://", "")), "..", "..", "assets", "hooks", "cross-phase-memory.yaml"),
92419
+ join18(dirname7(import.meta.url.replace("file://", "")), "..", "..", "assets", "hooks", "cross-phase-memory.yaml"),
92398
92420
  // Development location
92399
- join17(process.cwd(), "assets", "hooks", "cross-phase-memory.yaml"),
92400
- join17(process.cwd(), "v3", "assets", "hooks", "cross-phase-memory.yaml")
92421
+ join18(process.cwd(), "assets", "hooks", "cross-phase-memory.yaml"),
92422
+ join18(process.cwd(), "v3", "assets", "hooks", "cross-phase-memory.yaml")
92401
92423
  ];
92402
92424
  for (const sourcePath of possiblePaths) {
92403
92425
  try {
@@ -92442,11 +92464,11 @@ routing:
92442
92464
  * Creates .claude/mcp.json with AQE v3 MCP server configuration
92443
92465
  */
92444
92466
  async configureMCP() {
92445
- const claudeDir = join17(this.projectRoot, ".claude");
92467
+ const claudeDir = join18(this.projectRoot, ".claude");
92446
92468
  if (!existsSync17(claudeDir)) {
92447
92469
  mkdirSync8(claudeDir, { recursive: true });
92448
92470
  }
92449
- const mcpPath = join17(claudeDir, "mcp.json");
92471
+ const mcpPath = join18(claudeDir, "mcp.json");
92450
92472
  let mcpConfig = {};
92451
92473
  if (existsSync17(mcpPath)) {
92452
92474
  try {
@@ -92477,14 +92499,14 @@ routing:
92477
92499
  * If CLAUDE.md exists, creates backup and appends AQE v3 section
92478
92500
  */
92479
92501
  async generateCLAUDEmd(config) {
92480
- const claudeMdPath = join17(this.projectRoot, "CLAUDE.md");
92502
+ const claudeMdPath = join18(this.projectRoot, "CLAUDE.md");
92481
92503
  const content = this.generateCLAUDEmdContent(config);
92482
92504
  if (existsSync17(claudeMdPath)) {
92483
92505
  const existing = readFileSync14(claudeMdPath, "utf-8");
92484
92506
  if (existing.includes("## Agentic QE v3")) {
92485
92507
  return true;
92486
92508
  }
92487
- const backupPath = join17(this.projectRoot, "CLAUDE.md.backup");
92509
+ const backupPath = join18(this.projectRoot, "CLAUDE.md.backup");
92488
92510
  writeFileSync5(backupPath, existing, "utf-8");
92489
92511
  writeFileSync5(claudeMdPath, existing + "\n\n" + content, "utf-8");
92490
92512
  } else {
@@ -92706,7 +92728,7 @@ Bash("npx @claude-flow/cli@latest memory store --key 'qe-pattern-1' --value '...
92706
92728
  ### Data Storage
92707
92729
 
92708
92730
  - **Memory Backend**: \`.agentic-qe/memory.db\` (SQLite)
92709
- - **Pattern Storage**: \`.agentic-qe/data/qe-patterns.db\` (ReasoningBank)
92731
+ - **Pattern Storage**: \`.agentic-qe/data/memory.db\` (ReasoningBank)
92710
92732
  - **HNSW Index**: \`.agentic-qe/data/hnsw/index.bin\`
92711
92733
  - **Configuration**: \`.agentic-qe/config.yaml\`
92712
92734
 
@@ -92745,7 +92767,7 @@ aqe init --auto
92745
92767
  if (!config.workers.daemonAutoStart || config.workers.enabled.length === 0) {
92746
92768
  return 0;
92747
92769
  }
92748
- const workersDir = join17(this.projectRoot, ".agentic-qe", "workers");
92770
+ const workersDir = join18(this.projectRoot, ".agentic-qe", "workers");
92749
92771
  if (!existsSync17(workersDir)) {
92750
92772
  mkdirSync8(workersDir, { recursive: true });
92751
92773
  }
@@ -92769,7 +92791,7 @@ aqe init --auto
92769
92791
  status: "pending"
92770
92792
  };
92771
92793
  }
92772
- const registryPath = join17(workersDir, "registry.json");
92794
+ const registryPath = join18(workersDir, "registry.json");
92773
92795
  const registryData = {
92774
92796
  version: config.version,
92775
92797
  maxConcurrent: config.workers.maxConcurrent,
@@ -92780,18 +92802,18 @@ aqe init --auto
92780
92802
  };
92781
92803
  writeFileSync5(registryPath, JSON.stringify(registryData, null, 2), "utf-8");
92782
92804
  for (const workerName of config.workers.enabled) {
92783
- const workerConfigPath = join17(workersDir, `${workerName}.json`);
92805
+ const workerConfigPath = join18(workersDir, `${workerName}.json`);
92784
92806
  const workerConfig = {
92785
92807
  name: workerName,
92786
92808
  enabled: true,
92787
92809
  interval: config.workers.intervals[workerName] || defaultIntervals[workerName] || 6e4,
92788
92810
  projectRoot: this.projectRoot,
92789
- dataDir: join17(this.projectRoot, ".agentic-qe", "data"),
92811
+ dataDir: join18(this.projectRoot, ".agentic-qe", "data"),
92790
92812
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
92791
92813
  };
92792
92814
  writeFileSync5(workerConfigPath, JSON.stringify(workerConfig, null, 2), "utf-8");
92793
92815
  }
92794
- const daemonScriptPath = join17(workersDir, "start-daemon.sh");
92816
+ const daemonScriptPath = join18(workersDir, "start-daemon.sh");
92795
92817
  const daemonScript = `#!/bin/bash
92796
92818
  # AQE v3 Worker Daemon Startup Script
92797
92819
  # Generated by aqe init
@@ -92894,12 +92916,12 @@ echo "Use: npx aqe hooks session-start"
92894
92916
  if (!config) {
92895
92917
  throw new Error("No configuration to save");
92896
92918
  }
92897
- const configDir = join17(this.projectRoot, ".agentic-qe");
92919
+ const configDir = join18(this.projectRoot, ".agentic-qe");
92898
92920
  if (!existsSync17(configDir)) {
92899
92921
  mkdirSync8(configDir, { recursive: true });
92900
92922
  }
92901
92923
  const yaml = this.configToYAML(config);
92902
- const configPath = join17(configDir, "config.yaml");
92924
+ const configPath = join18(configDir, "config.yaml");
92903
92925
  writeFileSync5(configPath, yaml, "utf-8");
92904
92926
  }
92905
92927
  /**
@@ -93049,7 +93071,7 @@ var BasePhase = class {
93049
93071
 
93050
93072
  // src/init/phases/01-detection.ts
93051
93073
  import { existsSync as existsSync18 } from "fs";
93052
- import { join as join18 } from "path";
93074
+ import { join as join19 } from "path";
93053
93075
  import { createRequire as createRequire2 } from "module";
93054
93076
  var require3 = createRequire2(import.meta.url);
93055
93077
  var DetectionPhase = class extends BasePhase {
@@ -93060,7 +93082,7 @@ var DetectionPhase = class extends BasePhase {
93060
93082
  async run(context2) {
93061
93083
  const { projectRoot } = context2;
93062
93084
  const v2Detection = await this.detectV2Installation(projectRoot);
93063
- const v3ConfigYaml = existsSync18(join18(projectRoot, ".agentic-qe", "config.yaml"));
93085
+ const v3ConfigYaml = existsSync18(join19(projectRoot, ".agentic-qe", "config.yaml"));
93064
93086
  const v3Version = v2Detection.version?.startsWith("3.");
93065
93087
  const v2Detected = v2Detection.detected;
93066
93088
  const v3Detected = v3ConfigYaml || v3Version || false;
@@ -93104,15 +93126,15 @@ var DetectionPhase = class extends BasePhase {
93104
93126
  * Detect existing v2 AQE installation
93105
93127
  */
93106
93128
  async detectV2Installation(projectRoot) {
93107
- const memoryDbPath = join18(projectRoot, ".agentic-qe", "memory.db");
93108
- const configPath = join18(projectRoot, ".agentic-qe", "config");
93109
- const agentsPath = join18(projectRoot, ".claude", "agents");
93110
- const v2ConfigFile = join18(projectRoot, ".agentic-qe", "config", "learning.json");
93129
+ const memoryDbPath = join19(projectRoot, ".agentic-qe", "memory.db");
93130
+ const configPath = join19(projectRoot, ".agentic-qe", "config");
93131
+ const agentsPath = join19(projectRoot, ".claude", "agents");
93132
+ const v2ConfigFile = join19(projectRoot, ".agentic-qe", "config", "learning.json");
93111
93133
  const hasMemoryDb = existsSync18(memoryDbPath);
93112
93134
  const hasConfig = existsSync18(configPath);
93113
93135
  const hasAgents = existsSync18(agentsPath);
93114
93136
  const hasV2ConfigFiles = existsSync18(v2ConfigFile);
93115
- const hasV3ConfigYaml = existsSync18(join18(projectRoot, ".agentic-qe", "config.yaml"));
93137
+ const hasV3ConfigYaml = existsSync18(join19(projectRoot, ".agentic-qe", "config.yaml"));
93116
93138
  let version;
93117
93139
  let isV3Installation = false;
93118
93140
  if (hasMemoryDb) {
@@ -93267,7 +93289,7 @@ var ConfigurationPhase = class extends BasePhase {
93267
93289
 
93268
93290
  // src/init/phases/04-database.ts
93269
93291
  import { existsSync as existsSync19, mkdirSync as mkdirSync9 } from "fs";
93270
- import { join as join19 } from "path";
93292
+ import { join as join20 } from "path";
93271
93293
  var DatabasePhase = class extends BasePhase {
93272
93294
  name = "database";
93273
93295
  description = "Initialize persistence database";
@@ -93285,11 +93307,11 @@ var DatabasePhase = class extends BasePhase {
93285
93307
  "SQLite persistence REQUIRED but better-sqlite3 is not installed.\nInstall it with: npm install better-sqlite3\nIf you see native compilation errors, ensure build tools are installed."
93286
93308
  );
93287
93309
  }
93288
- const dataDir = join19(projectRoot, ".agentic-qe");
93310
+ const dataDir = join20(projectRoot, ".agentic-qe");
93289
93311
  if (!existsSync19(dataDir)) {
93290
93312
  mkdirSync9(dataDir, { recursive: true });
93291
93313
  }
93292
- const dbPath = join19(dataDir, "memory.db");
93314
+ const dbPath = join20(dataDir, "memory.db");
93293
93315
  const created = !existsSync19(dbPath);
93294
93316
  try {
93295
93317
  const db = new Database4(dbPath);
@@ -93340,7 +93362,7 @@ Ensure the directory is writable and has sufficient disk space.`
93340
93362
 
93341
93363
  // src/init/phases/05-learning.ts
93342
93364
  import { existsSync as existsSync20, mkdirSync as mkdirSync10, writeFileSync as writeFileSync6 } from "fs";
93343
- import { join as join20 } from "path";
93365
+ import { join as join21 } from "path";
93344
93366
  var LearningPhase = class extends BasePhase {
93345
93367
  name = "learning";
93346
93368
  description = "Initialize learning system";
@@ -93362,22 +93384,22 @@ var LearningPhase = class extends BasePhase {
93362
93384
  patternsLoaded: 0
93363
93385
  };
93364
93386
  }
93365
- const dataDir = join20(projectRoot, ".agentic-qe", "data");
93387
+ const dataDir = join21(projectRoot, ".agentic-qe", "data");
93366
93388
  if (!existsSync20(dataDir)) {
93367
93389
  mkdirSync10(dataDir, { recursive: true });
93368
93390
  }
93369
- const hnswDir = join20(dataDir, "hnsw");
93391
+ const hnswDir = join21(dataDir, "hnsw");
93370
93392
  if (!existsSync20(hnswDir)) {
93371
93393
  mkdirSync10(hnswDir, { recursive: true });
93372
93394
  }
93373
- const learningConfigPath = join20(dataDir, "learning-config.json");
93395
+ const learningConfigPath = join21(dataDir, "learning-config.json");
93374
93396
  const learningConfig = {
93375
93397
  embeddingModel: config.learning.embeddingModel,
93376
93398
  hnswConfig: config.learning.hnswConfig,
93377
93399
  qualityThreshold: config.learning.qualityThreshold,
93378
93400
  promotionThreshold: config.learning.promotionThreshold,
93379
- databasePath: join20(dataDir, "qe-patterns.db"),
93380
- hnswIndexPath: join20(hnswDir, "index.bin"),
93401
+ databasePath: join21(dataDir, "memory.db"),
93402
+ hnswIndexPath: join21(hnswDir, "index.bin"),
93381
93403
  initialized: (/* @__PURE__ */ new Date()).toISOString()
93382
93404
  };
93383
93405
  writeFileSync6(learningConfigPath, JSON.stringify(learningConfig, null, 2), "utf-8");
@@ -93400,11 +93422,11 @@ var LearningPhase = class extends BasePhase {
93400
93422
  */
93401
93423
  async loadPretrainedPatterns(dataDir, context2) {
93402
93424
  try {
93403
- const patternsDir = join20(dataDir, "patterns");
93425
+ const patternsDir = join21(dataDir, "patterns");
93404
93426
  if (!existsSync20(patternsDir)) {
93405
93427
  mkdirSync10(patternsDir, { recursive: true });
93406
93428
  }
93407
- const indexPath = join20(patternsDir, "index.json");
93429
+ const indexPath = join21(patternsDir, "index.json");
93408
93430
  if (!existsSync20(indexPath)) {
93409
93431
  writeFileSync6(indexPath, JSON.stringify({
93410
93432
  version: "3.0.0",
@@ -93422,7 +93444,7 @@ var LearningPhase = class extends BasePhase {
93422
93444
 
93423
93445
  // src/init/phases/06-code-intelligence.ts
93424
93446
  import { existsSync as existsSync21 } from "fs";
93425
- import { join as join21 } from "path";
93447
+ import { join as join22 } from "path";
93426
93448
  var CodeIntelligencePhase = class extends BasePhase {
93427
93449
  name = "code-intelligence";
93428
93450
  description = "Code intelligence pre-scan";
@@ -93444,7 +93466,7 @@ var CodeIntelligencePhase = class extends BasePhase {
93444
93466
  * Check if code intelligence index exists
93445
93467
  */
93446
93468
  async checkCodeIntelligenceIndex(projectRoot) {
93447
- const dbPath = join21(projectRoot, ".agentic-qe", "memory.db");
93469
+ const dbPath = join22(projectRoot, ".agentic-qe", "memory.db");
93448
93470
  if (!existsSync21(dbPath)) {
93449
93471
  return false;
93450
93472
  }
@@ -93465,7 +93487,7 @@ var CodeIntelligencePhase = class extends BasePhase {
93465
93487
  * Get count of KG entries
93466
93488
  */
93467
93489
  async getKGEntryCount(projectRoot) {
93468
- const dbPath = join21(projectRoot, ".agentic-qe", "memory.db");
93490
+ const dbPath = join22(projectRoot, ".agentic-qe", "memory.db");
93469
93491
  try {
93470
93492
  const Database4 = (await import("better-sqlite3")).default;
93471
93493
  const db = new Database4(dbPath);
@@ -93504,7 +93526,7 @@ var CodeIntelligencePhase = class extends BasePhase {
93504
93526
  ignore: ["node_modules/**", "dist/**", "coverage/**", ".agentic-qe/**"]
93505
93527
  });
93506
93528
  const result = await kgService.index({
93507
- paths: files.map((f) => join21(projectRoot, f)),
93529
+ paths: files.map((f) => join22(projectRoot, f)),
93508
93530
  incremental: false,
93509
93531
  includeTests: true
93510
93532
  });
@@ -93524,7 +93546,7 @@ var CodeIntelligencePhase = class extends BasePhase {
93524
93546
 
93525
93547
  // src/init/phases/07-hooks.ts
93526
93548
  import { existsSync as existsSync22, mkdirSync as mkdirSync11, readFileSync as readFileSync15, writeFileSync as writeFileSync7 } from "fs";
93527
- import { join as join22 } from "path";
93549
+ import { join as join23 } from "path";
93528
93550
  var HooksPhase = class extends BasePhase {
93529
93551
  name = "hooks";
93530
93552
  description = "Configure Claude Code hooks";
@@ -93545,11 +93567,11 @@ var HooksPhase = class extends BasePhase {
93545
93567
  hookTypes: []
93546
93568
  };
93547
93569
  }
93548
- const claudeDir = join22(projectRoot, ".claude");
93570
+ const claudeDir = join23(projectRoot, ".claude");
93549
93571
  if (!existsSync22(claudeDir)) {
93550
93572
  mkdirSync11(claudeDir, { recursive: true });
93551
93573
  }
93552
- const settingsPath = join22(claudeDir, "settings.json");
93574
+ const settingsPath = join23(claudeDir, "settings.json");
93553
93575
  let settings = {};
93554
93576
  if (existsSync22(settingsPath)) {
93555
93577
  try {
@@ -93715,7 +93737,7 @@ var HooksPhase = class extends BasePhase {
93715
93737
 
93716
93738
  // src/init/phases/08-mcp.ts
93717
93739
  import { existsSync as existsSync23, mkdirSync as mkdirSync12, readFileSync as readFileSync16, writeFileSync as writeFileSync8 } from "fs";
93718
- import { join as join23 } from "path";
93740
+ import { join as join24 } from "path";
93719
93741
  var MCPPhase = class extends BasePhase {
93720
93742
  name = "mcp";
93721
93743
  description = "Configure MCP server";
@@ -93724,11 +93746,11 @@ var MCPPhase = class extends BasePhase {
93724
93746
  requiresPhases = ["configuration"];
93725
93747
  async run(context2) {
93726
93748
  const { projectRoot } = context2;
93727
- const claudeDir = join23(projectRoot, ".claude");
93749
+ const claudeDir = join24(projectRoot, ".claude");
93728
93750
  if (!existsSync23(claudeDir)) {
93729
93751
  mkdirSync12(claudeDir, { recursive: true });
93730
93752
  }
93731
- const mcpPath = join23(claudeDir, "mcp.json");
93753
+ const mcpPath = join24(claudeDir, "mcp.json");
93732
93754
  let mcpConfig = {};
93733
93755
  if (existsSync23(mcpPath)) {
93734
93756
  try {
@@ -93831,7 +93853,7 @@ var AssetsPhase = class extends BasePhase {
93831
93853
 
93832
93854
  // src/init/phases/10-workers.ts
93833
93855
  import { existsSync as existsSync24, mkdirSync as mkdirSync13, writeFileSync as writeFileSync9 } from "fs";
93834
- import { join as join24 } from "path";
93856
+ import { join as join25 } from "path";
93835
93857
  var WorkersPhase = class extends BasePhase {
93836
93858
  name = "workers";
93837
93859
  description = "Configure background workers";
@@ -93852,7 +93874,7 @@ var WorkersPhase = class extends BasePhase {
93852
93874
  registryPath: ""
93853
93875
  };
93854
93876
  }
93855
- const workersDir = join24(projectRoot, ".agentic-qe", "workers");
93877
+ const workersDir = join25(projectRoot, ".agentic-qe", "workers");
93856
93878
  if (!existsSync24(workersDir)) {
93857
93879
  mkdirSync13(workersDir, { recursive: true });
93858
93880
  }
@@ -93872,7 +93894,7 @@ var WorkersPhase = class extends BasePhase {
93872
93894
  status: "pending"
93873
93895
  };
93874
93896
  }
93875
- const registryPath = join24(workersDir, "registry.json");
93897
+ const registryPath = join25(workersDir, "registry.json");
93876
93898
  const registryData = {
93877
93899
  version: config.version,
93878
93900
  maxConcurrent: config.workers.maxConcurrent,
@@ -93882,18 +93904,18 @@ var WorkersPhase = class extends BasePhase {
93882
93904
  };
93883
93905
  writeFileSync9(registryPath, JSON.stringify(registryData, null, 2), "utf-8");
93884
93906
  for (const workerName of config.workers.enabled) {
93885
- const workerConfigPath = join24(workersDir, `${workerName}.json`);
93907
+ const workerConfigPath = join25(workersDir, `${workerName}.json`);
93886
93908
  const workerConfig = {
93887
93909
  name: workerName,
93888
93910
  enabled: true,
93889
93911
  interval: config.workers.intervals[workerName] || defaultIntervals[workerName] || 6e4,
93890
93912
  projectRoot,
93891
- dataDir: join24(projectRoot, ".agentic-qe", "data"),
93913
+ dataDir: join25(projectRoot, ".agentic-qe", "data"),
93892
93914
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
93893
93915
  };
93894
93916
  writeFileSync9(workerConfigPath, JSON.stringify(workerConfig, null, 2), "utf-8");
93895
93917
  }
93896
- const daemonScriptPath = join24(workersDir, "start-daemon.sh");
93918
+ const daemonScriptPath = join25(workersDir, "start-daemon.sh");
93897
93919
  const daemonScript = `#!/bin/bash
93898
93920
  # AQE v3 Worker Daemon Startup Script
93899
93921
  # Generated by aqe init
@@ -93928,7 +93950,7 @@ echo "Use: npx aqe hooks session-start"
93928
93950
 
93929
93951
  // src/init/phases/11-claude-md.ts
93930
93952
  import { existsSync as existsSync25, readFileSync as readFileSync17, writeFileSync as writeFileSync10 } from "fs";
93931
- import { join as join25 } from "path";
93953
+ import { join as join26 } from "path";
93932
93954
  var ClaudeMdPhase = class extends BasePhase {
93933
93955
  name = "claude-md";
93934
93956
  description = "Generate CLAUDE.md";
@@ -93938,7 +93960,7 @@ var ClaudeMdPhase = class extends BasePhase {
93938
93960
  async run(context2) {
93939
93961
  const config = context2.config;
93940
93962
  const { projectRoot } = context2;
93941
- const claudeMdPath = join25(projectRoot, "CLAUDE.md");
93963
+ const claudeMdPath = join26(projectRoot, "CLAUDE.md");
93942
93964
  const content = this.generateContent(config);
93943
93965
  let backupCreated = false;
93944
93966
  if (existsSync25(claudeMdPath)) {
@@ -93947,7 +93969,7 @@ var ClaudeMdPhase = class extends BasePhase {
93947
93969
  context2.services.log(" CLAUDE.md already has AQE section");
93948
93970
  return { generated: false, path: claudeMdPath, backupCreated: false };
93949
93971
  }
93950
- const backupPath = join25(projectRoot, "CLAUDE.md.backup");
93972
+ const backupPath = join26(projectRoot, "CLAUDE.md.backup");
93951
93973
  writeFileSync10(backupPath, existing, "utf-8");
93952
93974
  backupCreated = true;
93953
93975
  writeFileSync10(claudeMdPath, existing + "\n\n" + content, "utf-8");
@@ -94060,7 +94082,7 @@ Task({ prompt: "Security audit", subagent_type: "qe-security-scanner", run_in_ba
94060
94082
 
94061
94083
  // src/init/phases/12-verification.ts
94062
94084
  import { existsSync as existsSync26, readFileSync as readFileSync18 } from "fs";
94063
- import { join as join26, dirname as dirname9 } from "path";
94085
+ import { join as join27, dirname as dirname9 } from "path";
94064
94086
  import { mkdirSync as mkdirSync14, writeFileSync as writeFileSync11 } from "fs";
94065
94087
  import { createRequire as createRequire3 } from "module";
94066
94088
  var require4 = createRequire3(import.meta.url);
@@ -94074,16 +94096,16 @@ var VerificationPhase = class extends BasePhase {
94074
94096
  const config = context2.config;
94075
94097
  const { projectRoot } = context2;
94076
94098
  const checks = [];
94077
- const dbPath = join26(projectRoot, ".agentic-qe", "memory.db");
94099
+ const dbPath = join27(projectRoot, ".agentic-qe", "memory.db");
94078
94100
  checks.push({
94079
94101
  name: "Database exists",
94080
94102
  passed: existsSync26(dbPath)
94081
94103
  });
94082
94104
  checks.push({
94083
94105
  name: ".agentic-qe directory",
94084
- passed: existsSync26(join26(projectRoot, ".agentic-qe"))
94106
+ passed: existsSync26(join27(projectRoot, ".agentic-qe"))
94085
94107
  });
94086
- const configPath = join26(projectRoot, ".agentic-qe", "config.yaml");
94108
+ const configPath = join27(projectRoot, ".agentic-qe", "config.yaml");
94087
94109
  await this.saveConfig(config, projectRoot);
94088
94110
  checks.push({
94089
94111
  name: "Config saved",
@@ -94111,7 +94133,7 @@ var VerificationPhase = class extends BasePhase {
94111
94133
  * Write AQE version to memory.db
94112
94134
  */
94113
94135
  async writeVersionToDb(version, projectRoot) {
94114
- const memoryDbPath = join26(projectRoot, ".agentic-qe", "memory.db");
94136
+ const memoryDbPath = join27(projectRoot, ".agentic-qe", "memory.db");
94115
94137
  try {
94116
94138
  const dir = dirname9(memoryDbPath);
94117
94139
  if (!existsSync26(dir)) {
@@ -94154,11 +94176,11 @@ var VerificationPhase = class extends BasePhase {
94154
94176
  * Preserves user customizations from existing config (Issue #206)
94155
94177
  */
94156
94178
  async saveConfig(config, projectRoot) {
94157
- const configDir = join26(projectRoot, ".agentic-qe");
94179
+ const configDir = join27(projectRoot, ".agentic-qe");
94158
94180
  if (!existsSync26(configDir)) {
94159
94181
  mkdirSync14(configDir, { recursive: true });
94160
94182
  }
94161
- const configPath = join26(configDir, "config.yaml");
94183
+ const configPath = join27(configDir, "config.yaml");
94162
94184
  if (existsSync26(configPath)) {
94163
94185
  const existingConfig = this.loadExistingConfig(configPath);
94164
94186
  if (existingConfig) {
@@ -94578,10 +94600,10 @@ function createModularInitOrchestrator(options) {
94578
94600
 
94579
94601
  // src/cli/commands/claude-flow-setup.ts
94580
94602
  import { existsSync as existsSync27, writeFileSync as writeFileSync12, readFileSync as readFileSync19 } from "node:fs";
94581
- import { join as join27 } from "node:path";
94603
+ import { join as join28 } from "node:path";
94582
94604
  import { execSync as execSync6 } from "node:child_process";
94583
94605
  async function detectClaudeFlow(projectRoot, debug) {
94584
- const claudeSettingsPath = join27(projectRoot, ".claude", "settings.json");
94606
+ const claudeSettingsPath = join28(projectRoot, ".claude", "settings.json");
94585
94607
  if (existsSync27(claudeSettingsPath)) {
94586
94608
  try {
94587
94609
  const settings = JSON.parse(readFileSync19(claudeSettingsPath, "utf-8"));
@@ -94605,7 +94627,7 @@ async function detectClaudeFlow(projectRoot, debug) {
94605
94627
  } catch {
94606
94628
  }
94607
94629
  try {
94608
- const packageJsonPath = join27(projectRoot, "package.json");
94630
+ const packageJsonPath = join28(projectRoot, "package.json");
94609
94631
  if (existsSync27(packageJsonPath)) {
94610
94632
  const pkg = JSON.parse(readFileSync19(packageJsonPath, "utf-8"));
94611
94633
  const deps = { ...pkg.dependencies, ...pkg.devDependencies };
@@ -94687,7 +94709,7 @@ function generateClaudeFlowConfig(projectRoot, features) {
94687
94709
  };
94688
94710
  }
94689
94711
  function updateMCPConfig(projectRoot) {
94690
- const claudeSettingsPath = join27(projectRoot, ".claude", "settings.json");
94712
+ const claudeSettingsPath = join28(projectRoot, ".claude", "settings.json");
94691
94713
  let settings = {};
94692
94714
  if (existsSync27(claudeSettingsPath)) {
94693
94715
  try {
@@ -94747,8 +94769,8 @@ async function setupClaudeFlowIntegration(options) {
94747
94769
  features
94748
94770
  };
94749
94771
  }
94750
- const aqeDir = join27(projectRoot, ".agentic-qe");
94751
- const configPath = join27(aqeDir, "claude-flow-integration.json");
94772
+ const aqeDir = join28(projectRoot, ".agentic-qe");
94773
+ const configPath = join28(aqeDir, "claude-flow-integration.json");
94752
94774
  try {
94753
94775
  const config = generateClaudeFlowConfig(projectRoot, features);
94754
94776
  writeFileSync12(configPath, JSON.stringify(config, null, 2));
@@ -95223,7 +95245,7 @@ import chalk4 from "chalk";
95223
95245
 
95224
95246
  // src/cli/config/cli-config.ts
95225
95247
  import { existsSync as existsSync28, readFileSync as readFileSync20, writeFileSync as writeFileSync13, mkdirSync as mkdirSync15, unlinkSync as unlinkSync3 } from "fs";
95226
- import { join as join28 } from "path";
95248
+ import { join as join29 } from "path";
95227
95249
  import { homedir as homedir2 } from "os";
95228
95250
  var DEFAULT_CLI_CONFIG = {
95229
95251
  wizards: {
@@ -95250,10 +95272,10 @@ var DEFAULT_CLI_CONFIG = {
95250
95272
  }
95251
95273
  };
95252
95274
  function getConfigDir() {
95253
- return join28(homedir2(), ".aqe");
95275
+ return join29(homedir2(), ".aqe");
95254
95276
  }
95255
95277
  function getConfigPath() {
95256
- return join28(getConfigDir(), "cli-config.json");
95278
+ return join29(getConfigDir(), "cli-config.json");
95257
95279
  }
95258
95280
  var cachedConfig = null;
95259
95281
  var cacheTimestamp = 0;
@@ -96447,7 +96469,7 @@ import { resolve as resolve5 } from "path";
96447
96469
  // src/cli/wizards/core/wizard-utils.ts
96448
96470
  import chalk10 from "chalk";
96449
96471
  import { existsSync as existsSync29, statSync as statSync8 } from "fs";
96450
- import { join as join29, relative as relative6 } from "path";
96472
+ import { join as join30, relative as relative6 } from "path";
96451
96473
  var WizardPrompt = class {
96452
96474
  /**
96453
96475
  * Generic prompt helper - wraps readline.question in a Promise
@@ -96538,7 +96560,7 @@ var WizardSuggestions = class _WizardSuggestions {
96538
96560
  const suggestions = [];
96539
96561
  const commonDirs = ["src", "lib", "app", "packages", "api"];
96540
96562
  for (const dir of commonDirs) {
96541
- const dirPath = join29(cwd, dir);
96563
+ const dirPath = join30(cwd, dir);
96542
96564
  if (existsSync29(dirPath) && statSync8(dirPath).isDirectory()) {
96543
96565
  suggestions.push(dir);
96544
96566
  }
@@ -96557,7 +96579,7 @@ var WizardSuggestions = class _WizardSuggestions {
96557
96579
  ".nyc_output"
96558
96580
  ];
96559
96581
  for (const loc of coverageLocations) {
96560
- const locPath = join29(cwd, loc);
96582
+ const locPath = join30(cwd, loc);
96561
96583
  if (existsSync29(locPath)) {
96562
96584
  suggestions.push(loc);
96563
96585
  }
@@ -96580,7 +96602,7 @@ var WizardSuggestions = class _WizardSuggestions {
96580
96602
  "Dockerfile"
96581
96603
  ];
96582
96604
  for (const file of securityFiles) {
96583
- const filePath = join29(cwd, file);
96605
+ const filePath = join30(cwd, file);
96584
96606
  if (existsSync29(filePath)) {
96585
96607
  suggestions.push(file);
96586
96608
  }
@@ -96594,13 +96616,13 @@ var WizardSuggestions = class _WizardSuggestions {
96594
96616
  const suggestions = [];
96595
96617
  const commonDirs = ["src", "lib", "app", "packages"];
96596
96618
  for (const dir of commonDirs) {
96597
- const dirPath = join29(cwd, dir);
96619
+ const dirPath = join30(cwd, dir);
96598
96620
  if (existsSync29(dirPath) && statSync8(dirPath).isDirectory()) {
96599
96621
  suggestions.push(`${dir}/**/*.ts`);
96600
96622
  suggestions.push(dir);
96601
96623
  }
96602
96624
  }
96603
- if (existsSync29(join29(cwd, "src"))) {
96625
+ if (existsSync29(join30(cwd, "src"))) {
96604
96626
  suggestions.push("src/services/**/*.ts");
96605
96627
  suggestions.push("src/utils/**/*.ts");
96606
96628
  suggestions.push("src/components/**/*.tsx");
@@ -96612,10 +96634,10 @@ var WizardSuggestions = class _WizardSuggestions {
96612
96634
  */
96613
96635
  static checkPatternsExist(cwd) {
96614
96636
  const patternLocations = [
96615
- join29(cwd, ".agentic-qe", "patterns"),
96616
- join29(cwd, ".agentic-qe", "memory.db"),
96617
- join29(cwd, ".aqe", "patterns"),
96618
- join29(cwd, "data", "patterns")
96637
+ join30(cwd, ".agentic-qe", "patterns"),
96638
+ join30(cwd, ".agentic-qe", "memory.db"),
96639
+ join30(cwd, ".aqe", "patterns"),
96640
+ join30(cwd, "data", "patterns")
96619
96641
  ];
96620
96642
  return patternLocations.some((loc) => existsSync29(loc));
96621
96643
  }
@@ -99978,7 +100000,7 @@ import chalk20 from "chalk";
99978
100000
  // src/init/fleet-integration.ts
99979
100001
  import chalk19 from "chalk";
99980
100002
  import { existsSync as existsSync31 } from "fs";
99981
- import { join as join31 } from "path";
100003
+ import { join as join32 } from "path";
99982
100004
  var FleetInitEnhancer = class {
99983
100005
  projectRoot;
99984
100006
  options;
@@ -100090,7 +100112,7 @@ var FleetInitEnhancer = class {
100090
100112
  });
100091
100113
  console.log(chalk19.gray(` Indexing ${files.length} files...`));
100092
100114
  const result = await kgService.index({
100093
- paths: files.map((f) => join31(this.projectRoot, f)),
100115
+ paths: files.map((f) => join32(this.projectRoot, f)),
100094
100116
  incremental: false,
100095
100117
  includeTests: true
100096
100118
  });
@@ -100125,7 +100147,7 @@ var FleetInitEnhancer = class {
100125
100147
  * Checks the memory database for code-intelligence:kg namespace entries
100126
100148
  */
100127
100149
  async hasCodeIntelligenceIndex() {
100128
- const dbPath = join31(this.projectRoot, ".agentic-qe", "memory.db");
100150
+ const dbPath = join32(this.projectRoot, ".agentic-qe", "memory.db");
100129
100151
  if (!existsSync31(dbPath)) {
100130
100152
  return false;
100131
100153
  }
@@ -100146,7 +100168,7 @@ var FleetInitEnhancer = class {
100146
100168
  * Get count of knowledge graph entries
100147
100169
  */
100148
100170
  async getKGEntryCount() {
100149
- const dbPath = join31(this.projectRoot, ".agentic-qe", "memory.db");
100171
+ const dbPath = join32(this.projectRoot, ".agentic-qe", "memory.db");
100150
100172
  try {
100151
100173
  const Database4 = (await import("better-sqlite3")).default;
100152
100174
  const db = new Database4(dbPath);
@@ -101720,9 +101742,11 @@ import ora2 from "ora";
101720
101742
  // src/sync/interfaces.ts
101721
101743
  var DEFAULT_SYNC_CONFIG = {
101722
101744
  local: {
101723
- // Paths are relative to project root (parent of v3/)
101724
- v3MemoryDb: "../v3/.agentic-qe/memory.db",
101745
+ // PRIMARY: Root database (consolidated, MCP-active)
101746
+ v3MemoryDb: "../.agentic-qe/memory.db",
101747
+ // Now points to root (consolidated)
101725
101748
  rootMemoryDb: "../.agentic-qe/memory.db",
101749
+ // Same as above
101726
101750
  claudeFlowMemory: "../.claude-flow/memory/store.json",
101727
101751
  claudeFlowDaemon: "../.claude-flow/daemon-state.json",
101728
101752
  claudeFlowMetrics: "../.claude-flow/metrics/",
@@ -101744,28 +101768,21 @@ var DEFAULT_SYNC_CONFIG = {
101744
101768
  batchSize: 1e3,
101745
101769
  conflictResolution: "newer-wins",
101746
101770
  sourcePriority: {
101747
- v3Memory: 1,
101771
+ rootMemory: 1,
101772
+ // Root is now PRIMARY (consolidated)
101748
101773
  claudeFlowMemory: 2,
101749
- rootMemory: 3,
101750
- intelligenceJson: 4,
101751
- legacy: 5
101774
+ intelligenceJson: 3,
101775
+ legacy: 4
101752
101776
  },
101753
101777
  sources: [
101754
- // V3 Memory - PRIMARY
101778
+ // ============================================================
101779
+ // ROOT Memory - PRIMARY (Consolidated from V3 + Historical)
101780
+ // All tables now in single database: .agentic-qe/memory.db
101781
+ // ============================================================
101755
101782
  {
101756
- name: "v3-qe-patterns",
101783
+ name: "root-sona-patterns",
101757
101784
  type: "sqlite",
101758
- path: "../v3/.agentic-qe/memory.db",
101759
- targetTable: "aqe.qe_patterns",
101760
- priority: "high",
101761
- mode: "incremental",
101762
- query: "SELECT * FROM qe_patterns",
101763
- enabled: true
101764
- },
101765
- {
101766
- name: "v3-sona-patterns",
101767
- type: "sqlite",
101768
- path: "../v3/.agentic-qe/memory.db",
101785
+ path: "../.agentic-qe/memory.db",
101769
101786
  targetTable: "aqe.sona_patterns",
101770
101787
  priority: "high",
101771
101788
  mode: "incremental",
@@ -101773,32 +101790,21 @@ var DEFAULT_SYNC_CONFIG = {
101773
101790
  enabled: true
101774
101791
  },
101775
101792
  {
101776
- name: "v3-goap-actions",
101793
+ name: "root-goap-actions",
101777
101794
  type: "sqlite",
101778
- path: "../v3/.agentic-qe/memory.db",
101795
+ path: "../.agentic-qe/memory.db",
101779
101796
  targetTable: "aqe.goap_actions",
101780
101797
  priority: "high",
101781
101798
  mode: "incremental",
101782
101799
  query: "SELECT * FROM goap_actions",
101783
101800
  enabled: true
101784
101801
  },
101785
- // Claude-Flow Memory
101786
- {
101787
- name: "claude-flow-memory",
101788
- type: "json",
101789
- path: "../.claude-flow/memory/store.json",
101790
- targetTable: "aqe.claude_flow_memory",
101791
- priority: "high",
101792
- mode: "full",
101793
- enabled: true
101794
- },
101795
- // Root Memory - HISTORICAL
101796
101802
  {
101797
101803
  name: "root-memory-entries",
101798
101804
  type: "sqlite",
101799
101805
  path: "../.agentic-qe/memory.db",
101800
101806
  targetTable: "aqe.memory_entries",
101801
- priority: "medium",
101807
+ priority: "high",
101802
101808
  mode: "incremental",
101803
101809
  query: "SELECT * FROM memory_entries",
101804
101810
  enabled: true
@@ -101808,21 +101814,11 @@ var DEFAULT_SYNC_CONFIG = {
101808
101814
  type: "sqlite",
101809
101815
  path: "../.agentic-qe/memory.db",
101810
101816
  targetTable: "aqe.learning_experiences",
101811
- priority: "medium",
101817
+ priority: "high",
101812
101818
  mode: "append",
101813
101819
  query: "SELECT * FROM learning_experiences",
101814
101820
  enabled: true
101815
101821
  },
101816
- {
101817
- name: "root-goap-actions",
101818
- type: "sqlite",
101819
- path: "../.agentic-qe/memory.db",
101820
- targetTable: "aqe.goap_actions",
101821
- priority: "medium",
101822
- mode: "incremental",
101823
- query: "SELECT * FROM goap_actions",
101824
- enabled: true
101825
- },
101826
101822
  {
101827
101823
  name: "root-patterns",
101828
101824
  type: "sqlite",
@@ -101843,13 +101839,23 @@ var DEFAULT_SYNC_CONFIG = {
101843
101839
  query: "SELECT * FROM events",
101844
101840
  enabled: true
101845
101841
  },
101846
- // Intelligence JSON
101842
+ // Claude-Flow Memory (JSON)
101843
+ {
101844
+ name: "claude-flow-memory",
101845
+ type: "json",
101846
+ path: "../.claude-flow/memory/store.json",
101847
+ targetTable: "aqe.claude_flow_memory",
101848
+ priority: "medium",
101849
+ mode: "full",
101850
+ enabled: true
101851
+ },
101852
+ // Intelligence JSON (Q-Learning)
101847
101853
  {
101848
101854
  name: "intelligence-qlearning",
101849
101855
  type: "json",
101850
101856
  path: "../v3/.ruvector/intelligence.json",
101851
101857
  targetTable: "aqe.qlearning_patterns",
101852
- priority: "medium",
101858
+ priority: "low",
101853
101859
  mode: "full",
101854
101860
  jsonPath: "$.qvalues",
101855
101861
  enabled: true
@@ -107735,7 +107741,7 @@ async function createCoherenceService(wasmLoader2, config, logger) {
107735
107741
  // src/integrations/coherence/wasm-loader.ts
107736
107742
  import { createRequire as createRequire4 } from "node:module";
107737
107743
  import { fileURLToPath as fileURLToPath4 } from "node:url";
107738
- import { dirname as dirname10, join as join33 } from "node:path";
107744
+ import { dirname as dirname10, join as join34 } from "node:path";
107739
107745
  import { readFileSync as readFileSync23, existsSync as existsSync34 } from "node:fs";
107740
107746
  var FALLBACK_RETRY_DELAYS_MS = [1e3, 2e3, 4e3];
107741
107747
  var WasmLoader = class {
@@ -107994,12 +108000,12 @@ var WasmLoader = class {
107994
108000
  (() => {
107995
108001
  try {
107996
108002
  const modulePath = require5.resolve("prime-radiant-advanced-wasm");
107997
- return join33(dirname10(modulePath), "prime_radiant_advanced_wasm_bg.wasm");
108003
+ return join34(dirname10(modulePath), "prime_radiant_advanced_wasm_bg.wasm");
107998
108004
  } catch {
107999
108005
  return null;
108000
108006
  }
108001
108007
  })(),
108002
- join33(process.cwd(), "node_modules/prime-radiant-advanced-wasm/prime_radiant_advanced_wasm_bg.wasm")
108008
+ join34(process.cwd(), "node_modules/prime-radiant-advanced-wasm/prime_radiant_advanced_wasm_bg.wasm")
108003
108009
  ].filter((p) => p !== null);
108004
108010
  for (const path16 of wasmPaths) {
108005
108011
  if (existsSync34(path16)) {
@@ -108253,15 +108259,15 @@ var WasmLoader = class {
108253
108259
  (() => {
108254
108260
  try {
108255
108261
  const modulePath = require5.resolve("prime-radiant-advanced-wasm");
108256
- return join33(dirname10(modulePath), "prime_radiant_advanced_wasm_bg.wasm");
108262
+ return join34(dirname10(modulePath), "prime_radiant_advanced_wasm_bg.wasm");
108257
108263
  } catch {
108258
108264
  return null;
108259
108265
  }
108260
108266
  })(),
108261
108267
  // Direct node_modules path from current file
108262
- join33(dirname10(fileURLToPath4(import.meta.url)), "../../../../node_modules/prime-radiant-advanced-wasm/prime_radiant_advanced_wasm_bg.wasm"),
108268
+ join34(dirname10(fileURLToPath4(import.meta.url)), "../../../../node_modules/prime-radiant-advanced-wasm/prime_radiant_advanced_wasm_bg.wasm"),
108263
108269
  // Workspace root
108264
- join33(process.cwd(), "node_modules/prime-radiant-advanced-wasm/prime_radiant_advanced_wasm_bg.wasm")
108270
+ join34(process.cwd(), "node_modules/prime-radiant-advanced-wasm/prime_radiant_advanced_wasm_bg.wasm")
108265
108271
  ].filter((p) => p !== null);
108266
108272
  let wasmPath = null;
108267
108273
  for (const path16 of wasmPaths) {
@@ -109195,7 +109201,7 @@ async function cleanupAndExit(code = 0) {
109195
109201
  process.exit(code);
109196
109202
  }
109197
109203
  var program = new Command13();
109198
- var VERSION = true ? "3.3.4" : "0.0.0-dev";
109204
+ var VERSION = true ? "3.3.5" : "0.0.0-dev";
109199
109205
  program.name("aqe").description("Agentic QE - Domain-Driven Quality Engineering").version(VERSION);
109200
109206
  var registry = createCommandRegistry(context, cleanupAndExit, ensureInitialized);
109201
109207
  registry.registerAll(program);