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.
- package/.claude/agents/v3/qe-queen-coordinator.md +332 -166
- package/.claude/helpers/statusline-v3.cjs +38 -42
- package/README.md +2 -2
- package/package.json +1 -1
- package/scripts/cloud-db-config.json +10 -5
- package/scripts/merge-v3-to-root.sql +48 -0
- package/v3/CHANGELOG.md +65 -0
- package/v3/README.md +1 -1
- package/v3/assets/agents/v3/qe-queen-coordinator.md +332 -166
- package/v3/dist/cli/bundle.js +295 -289
- package/v3/dist/coordination/consensus/providers/claude-provider.js +1 -1
- package/v3/dist/coordination/consensus/providers/gemini-provider.js +1 -1
- package/v3/dist/coordination/consensus/providers/openai-provider.js +1 -1
- package/v3/dist/init/init-wizard.js +3 -3
- package/v3/dist/init/init-wizard.js.map +1 -1
- package/v3/dist/init/phases/05-learning.js +1 -1
- package/v3/dist/init/phases/05-learning.js.map +1 -1
- package/v3/dist/integrations/ruvector/interfaces.js +1 -1
- package/v3/dist/integrations/ruvector/interfaces.js.map +1 -1
- package/v3/dist/kernel/index.d.ts +1 -1
- package/v3/dist/kernel/index.d.ts.map +1 -1
- package/v3/dist/kernel/index.js +3 -1
- package/v3/dist/kernel/index.js.map +1 -1
- package/v3/dist/kernel/unified-memory.d.ts +26 -0
- package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
- package/v3/dist/kernel/unified-memory.js +54 -2
- package/v3/dist/kernel/unified-memory.js.map +1 -1
- package/v3/dist/learning/qe-unified-memory.js +1 -1
- package/v3/dist/learning/qe-unified-memory.js.map +1 -1
- package/v3/dist/learning/real-qe-reasoning-bank.js +2 -2
- package/v3/dist/learning/real-qe-reasoning-bank.js.map +1 -1
- package/v3/dist/learning/sqlite-persistence.d.ts +1 -1
- package/v3/dist/learning/sqlite-persistence.js +1 -1
- package/v3/dist/learning/sqlite-persistence.js.map +1 -1
- package/v3/dist/learning/v2-to-v3-migration.d.ts +2 -2
- package/v3/dist/learning/v2-to-v3-migration.d.ts.map +1 -1
- package/v3/dist/learning/v2-to-v3-migration.js +2 -2
- package/v3/dist/learning/v2-to-v3-migration.js.map +1 -1
- package/v3/dist/mcp/bundle.js +73 -51
- package/v3/dist/sync/claude-flow-bridge.d.ts +1 -1
- package/v3/dist/sync/claude-flow-bridge.js +1 -1
- package/v3/dist/sync/interfaces.d.ts +6 -0
- package/v3/dist/sync/interfaces.d.ts.map +1 -1
- package/v3/dist/sync/interfaces.js +34 -47
- package/v3/dist/sync/interfaces.js.map +1 -1
- package/v3/dist/sync/readers/sqlite-reader.d.ts +1 -1
- package/v3/dist/sync/readers/sqlite-reader.js +1 -1
- package/v3/package.json +1 -1
package/v3/dist/cli/bundle.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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/
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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(
|
|
46542
|
+
if (existsSync6(join7(projectPath, "Cargo.toml"))) {
|
|
46521
46543
|
return "cargo";
|
|
46522
46544
|
}
|
|
46523
|
-
if (existsSync6(
|
|
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(
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
47050
|
-
if (existsSync7(
|
|
47051
|
-
if (existsSync7(
|
|
47052
|
-
if (existsSync7(
|
|
47053
|
-
if (existsSync7(
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 ||
|
|
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
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
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(
|
|
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,
|
|
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 =
|
|
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(
|
|
89897
|
-
if (existsSync13(
|
|
89898
|
-
if (existsSync13(
|
|
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(
|
|
89909
|
-
if (existsSync13(
|
|
89910
|
-
if (existsSync13(
|
|
89911
|
-
if (existsSync13(
|
|
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(
|
|
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(
|
|
89933
|
-
if (existsSync13(
|
|
89934
|
-
if (existsSync13(
|
|
89935
|
-
if (existsSync13(
|
|
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
|
|
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
|
-
|
|
90391
|
+
join15(moduleDir, "../../../.claude/skills"),
|
|
90370
90392
|
// Development: relative to v3/dist/init/ (3 levels up to agentic-qe root)
|
|
90371
|
-
|
|
90393
|
+
join15(moduleDir, "../../../.claude/skills"),
|
|
90372
90394
|
// NPM package: assets directory at package root (dist/init -> dist -> package root)
|
|
90373
|
-
|
|
90395
|
+
join15(moduleDir, "../../assets/skills"),
|
|
90374
90396
|
// Local install: in node_modules
|
|
90375
|
-
|
|
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
|
-
|
|
90404
|
+
join15(npmPrefix, "lib/node_modules/@agentic-qe/v3/assets/skills"),
|
|
90383
90405
|
// Global install as agentic-qe (root package)
|
|
90384
|
-
|
|
90406
|
+
join15(npmPrefix, "lib/node_modules/agentic-qe/.claude/skills"),
|
|
90385
90407
|
// Linux global without lib
|
|
90386
|
-
|
|
90387
|
-
|
|
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:
|
|
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 =
|
|
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 =
|
|
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 =
|
|
90478
|
-
const targetSkillDir =
|
|
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(
|
|
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 =
|
|
90503
|
-
const targetPath =
|
|
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 =
|
|
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(
|
|
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
|
|
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
|
-
|
|
90698
|
+
join16(moduleDir, "../../assets/agents/v3"),
|
|
90677
90699
|
// Development: v3/src/init/ -> v3/assets/agents/v3/
|
|
90678
|
-
|
|
90700
|
+
join16(moduleDir, "../../../v3/assets/agents/v3"),
|
|
90679
90701
|
// Fallback: root .claude/agents/v3 (may not have helpers/)
|
|
90680
|
-
|
|
90702
|
+
join16(moduleDir, "../../../.claude/agents/v3"),
|
|
90681
90703
|
// Local install: in node_modules
|
|
90682
|
-
|
|
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
|
-
|
|
90711
|
+
join16(npmPrefix, "lib/node_modules/@agentic-qe/v3/assets/agents/v3"),
|
|
90690
90712
|
// Global install as agentic-qe (root package)
|
|
90691
|
-
|
|
90713
|
+
join16(npmPrefix, "lib/node_modules/agentic-qe/v3/assets/agents/v3"),
|
|
90692
90714
|
// Linux global without lib
|
|
90693
|
-
|
|
90694
|
-
|
|
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:
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
90816
|
-
const targetFile = isSubagent ?
|
|
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 =
|
|
90853
|
-
const targetPath =
|
|
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 =
|
|
90869
|
-
const targetHelpersDir =
|
|
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(
|
|
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
|
|
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
|
-
|
|
91081
|
-
|
|
91102
|
+
join17(__dirname2, "../../../.claude/agents/n8n"),
|
|
91103
|
+
join17(__dirname2, "../../.claude/agents/n8n"),
|
|
91082
91104
|
// From project root
|
|
91083
|
-
|
|
91105
|
+
join17(process.cwd(), ".claude/agents/n8n"),
|
|
91084
91106
|
// NPM package location
|
|
91085
|
-
|
|
91107
|
+
join17(__dirname2, "../../assets/agents/n8n"),
|
|
91086
91108
|
// Monorepo location
|
|
91087
|
-
|
|
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
|
|
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
|
-
|
|
91102
|
-
|
|
91103
|
-
|
|
91104
|
-
|
|
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
|
|
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:
|
|
91127
|
-
skillsDir:
|
|
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 =
|
|
91173
|
-
const targetFile =
|
|
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 =
|
|
91210
|
-
const targetSkillDir =
|
|
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 =
|
|
91238
|
-
const targetPath =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
91540
|
-
const configPath =
|
|
91541
|
-
const agentsPath =
|
|
91542
|
-
const v2ConfigFile =
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
91835
|
-
const backupPath =
|
|
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 =
|
|
91855
|
-
const v3ConfigPath =
|
|
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(
|
|
91862
|
-
const improvementConfig = this.readJsonSafe(
|
|
91863
|
-
const codeIntelConfig = this.readJsonSafe(
|
|
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 =
|
|
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) =>
|
|
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 =
|
|
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 =
|
|
92132
|
+
const dataDir = join18(this.projectRoot, ".agentic-qe");
|
|
92111
92133
|
if (!existsSync17(dataDir)) {
|
|
92112
92134
|
mkdirSync8(dataDir, { recursive: true });
|
|
92113
92135
|
}
|
|
92114
|
-
const dbPath =
|
|
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 =
|
|
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 =
|
|
92187
|
+
const hnswDir = join18(dataDir, "hnsw");
|
|
92166
92188
|
if (!existsSync17(hnswDir)) {
|
|
92167
92189
|
mkdirSync8(hnswDir, { recursive: true });
|
|
92168
92190
|
}
|
|
92169
|
-
const learningConfigPath =
|
|
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:
|
|
92176
|
-
hnswIndexPath:
|
|
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 =
|
|
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 =
|
|
92225
|
+
const domainDir = join18(dataDir, "patterns", domain);
|
|
92204
92226
|
if (!existsSync17(domainDir)) {
|
|
92205
92227
|
mkdirSync8(domainDir, { recursive: true });
|
|
92206
92228
|
}
|
|
92207
|
-
const patternsPath =
|
|
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 =
|
|
92246
|
+
const claudeDir = join18(this.projectRoot, ".claude");
|
|
92225
92247
|
if (!existsSync17(claudeDir)) {
|
|
92226
92248
|
mkdirSync8(claudeDir, { recursive: true });
|
|
92227
92249
|
}
|
|
92228
|
-
const settingsPath =
|
|
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 =
|
|
92409
|
+
const hooksDir = join18(this.projectRoot, ".claude", "hooks");
|
|
92388
92410
|
if (!existsSync17(hooksDir)) {
|
|
92389
92411
|
mkdirSync8(hooksDir, { recursive: true });
|
|
92390
92412
|
}
|
|
92391
|
-
const targetPath =
|
|
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
|
-
|
|
92419
|
+
join18(dirname7(import.meta.url.replace("file://", "")), "..", "..", "assets", "hooks", "cross-phase-memory.yaml"),
|
|
92398
92420
|
// Development location
|
|
92399
|
-
|
|
92400
|
-
|
|
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 =
|
|
92467
|
+
const claudeDir = join18(this.projectRoot, ".claude");
|
|
92446
92468
|
if (!existsSync17(claudeDir)) {
|
|
92447
92469
|
mkdirSync8(claudeDir, { recursive: true });
|
|
92448
92470
|
}
|
|
92449
|
-
const mcpPath =
|
|
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 =
|
|
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 =
|
|
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/
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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:
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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(
|
|
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 =
|
|
93108
|
-
const configPath =
|
|
93109
|
-
const agentsPath =
|
|
93110
|
-
const v2ConfigFile =
|
|
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(
|
|
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
|
|
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 =
|
|
93310
|
+
const dataDir = join20(projectRoot, ".agentic-qe");
|
|
93289
93311
|
if (!existsSync19(dataDir)) {
|
|
93290
93312
|
mkdirSync9(dataDir, { recursive: true });
|
|
93291
93313
|
}
|
|
93292
|
-
const dbPath =
|
|
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
|
|
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 =
|
|
93387
|
+
const dataDir = join21(projectRoot, ".agentic-qe", "data");
|
|
93366
93388
|
if (!existsSync20(dataDir)) {
|
|
93367
93389
|
mkdirSync10(dataDir, { recursive: true });
|
|
93368
93390
|
}
|
|
93369
|
-
const hnswDir =
|
|
93391
|
+
const hnswDir = join21(dataDir, "hnsw");
|
|
93370
93392
|
if (!existsSync20(hnswDir)) {
|
|
93371
93393
|
mkdirSync10(hnswDir, { recursive: true });
|
|
93372
93394
|
}
|
|
93373
|
-
const learningConfigPath =
|
|
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:
|
|
93380
|
-
hnswIndexPath:
|
|
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 =
|
|
93425
|
+
const patternsDir = join21(dataDir, "patterns");
|
|
93404
93426
|
if (!existsSync20(patternsDir)) {
|
|
93405
93427
|
mkdirSync10(patternsDir, { recursive: true });
|
|
93406
93428
|
}
|
|
93407
|
-
const indexPath =
|
|
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
|
|
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 =
|
|
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 =
|
|
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) =>
|
|
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
|
|
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 =
|
|
93570
|
+
const claudeDir = join23(projectRoot, ".claude");
|
|
93549
93571
|
if (!existsSync22(claudeDir)) {
|
|
93550
93572
|
mkdirSync11(claudeDir, { recursive: true });
|
|
93551
93573
|
}
|
|
93552
|
-
const settingsPath =
|
|
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
|
|
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 =
|
|
93749
|
+
const claudeDir = join24(projectRoot, ".claude");
|
|
93728
93750
|
if (!existsSync23(claudeDir)) {
|
|
93729
93751
|
mkdirSync12(claudeDir, { recursive: true });
|
|
93730
93752
|
}
|
|
93731
|
-
const mcpPath =
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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:
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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(
|
|
94106
|
+
passed: existsSync26(join27(projectRoot, ".agentic-qe"))
|
|
94085
94107
|
});
|
|
94086
|
-
const configPath =
|
|
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 =
|
|
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 =
|
|
94179
|
+
const configDir = join27(projectRoot, ".agentic-qe");
|
|
94158
94180
|
if (!existsSync26(configDir)) {
|
|
94159
94181
|
mkdirSync14(configDir, { recursive: true });
|
|
94160
94182
|
}
|
|
94161
|
-
const configPath =
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
94751
|
-
const configPath =
|
|
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
|
|
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
|
|
95275
|
+
return join29(homedir2(), ".aqe");
|
|
95254
95276
|
}
|
|
95255
95277
|
function getConfigPath() {
|
|
95256
|
-
return
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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
|
-
|
|
96616
|
-
|
|
96617
|
-
|
|
96618
|
-
|
|
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
|
|
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) =>
|
|
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 =
|
|
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 =
|
|
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
|
-
//
|
|
101724
|
-
v3MemoryDb: "
|
|
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
|
-
|
|
101771
|
+
rootMemory: 1,
|
|
101772
|
+
// Root is now PRIMARY (consolidated)
|
|
101748
101773
|
claudeFlowMemory: 2,
|
|
101749
|
-
|
|
101750
|
-
|
|
101751
|
-
legacy: 5
|
|
101774
|
+
intelligenceJson: 3,
|
|
101775
|
+
legacy: 4
|
|
101752
101776
|
},
|
|
101753
101777
|
sources: [
|
|
101754
|
-
//
|
|
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: "
|
|
101783
|
+
name: "root-sona-patterns",
|
|
101757
101784
|
type: "sqlite",
|
|
101758
|
-
path: "
|
|
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: "
|
|
101793
|
+
name: "root-goap-actions",
|
|
101777
101794
|
type: "sqlite",
|
|
101778
|
-
path: "
|
|
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: "
|
|
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: "
|
|
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
|
-
//
|
|
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: "
|
|
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
|
|
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
|
|
108003
|
+
return join34(dirname10(modulePath), "prime_radiant_advanced_wasm_bg.wasm");
|
|
107998
108004
|
} catch {
|
|
107999
108005
|
return null;
|
|
108000
108006
|
}
|
|
108001
108007
|
})(),
|
|
108002
|
-
|
|
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
|
|
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
|
-
|
|
108268
|
+
join34(dirname10(fileURLToPath4(import.meta.url)), "../../../../node_modules/prime-radiant-advanced-wasm/prime_radiant_advanced_wasm_bg.wasm"),
|
|
108263
108269
|
// Workspace root
|
|
108264
|
-
|
|
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.
|
|
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);
|