agentic-qe 2.7.1 → 2.7.2
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/CHANGELOG.md +105 -0
- package/README.md +2 -2
- package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/CodeIntelligenceAgent.js +7 -5
- package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
- package/dist/cli/commands/knowledge-graph.d.ts.map +1 -1
- package/dist/cli/commands/knowledge-graph.js +4 -2
- package/dist/cli/commands/knowledge-graph.js.map +1 -1
- package/dist/cli/commands/migrate/index.d.ts +14 -0
- package/dist/cli/commands/migrate/index.d.ts.map +1 -0
- package/dist/cli/commands/migrate/index.js +283 -0
- package/dist/cli/commands/migrate/index.js.map +1 -0
- package/dist/cli/formatters/KGOutputFormatter.d.ts.map +1 -1
- package/dist/cli/formatters/KGOutputFormatter.js +15 -6
- package/dist/cli/formatters/KGOutputFormatter.js.map +1 -1
- package/dist/cli/index.js +3 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/database-init.d.ts.map +1 -1
- package/dist/cli/init/database-init.js +105 -0
- package/dist/cli/init/database-init.js.map +1 -1
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts +9 -3
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts.map +1 -1
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js +41 -3
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js.map +1 -1
- package/dist/code-intelligence/service/CodeIntelligenceService.js +1 -1
- package/dist/code-intelligence/service/CodeIntelligenceService.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/learning/QLearning.d.ts +9 -1
- package/dist/learning/QLearning.d.ts.map +1 -1
- package/dist/learning/QLearning.js +50 -1
- package/dist/learning/QLearning.js.map +1 -1
- package/dist/learning/metrics/LearningMetrics.d.ts +37 -0
- package/dist/learning/metrics/LearningMetrics.d.ts.map +1 -1
- package/dist/learning/metrics/LearningMetrics.js +73 -0
- package/dist/learning/metrics/LearningMetrics.js.map +1 -1
- package/dist/mcp/handlers/fleet-init.d.ts +10 -0
- package/dist/mcp/handlers/fleet-init.d.ts.map +1 -1
- package/dist/mcp/handlers/fleet-init.js +61 -0
- package/dist/mcp/handlers/fleet-init.js.map +1 -1
- package/dist/mcp/handlers/learning/learning-store-pattern.d.ts +13 -0
- package/dist/mcp/handlers/learning/learning-store-pattern.d.ts.map +1 -1
- package/dist/mcp/handlers/learning/learning-store-pattern.js +38 -0
- package/dist/mcp/handlers/learning/learning-store-pattern.js.map +1 -1
- package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts +89 -0
- package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts.map +1 -1
- package/dist/mcp/handlers/phase3/Phase3DomainTools.js +110 -1
- package/dist/mcp/handlers/phase3/Phase3DomainTools.js.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.d.ts +27 -1
- package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.js +188 -8
- package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/server.d.ts +6 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +92 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts +13 -0
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +66 -0
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts +55 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts.map +1 -1
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js +233 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js.map +1 -1
- package/dist/mcp/tools/qe/quality-gates/index.d.ts +5 -2
- package/dist/mcp/tools/qe/quality-gates/index.d.ts.map +1 -1
- package/dist/mcp/tools/qe/quality-gates/index.js +10 -1
- package/dist/mcp/tools/qe/quality-gates/index.js.map +1 -1
- package/dist/mcp/tools.d.ts +1 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +156 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/persistence/migrations/all-migrations.d.ts +18 -0
- package/dist/persistence/migrations/all-migrations.d.ts.map +1 -0
- package/dist/persistence/migrations/all-migrations.js +624 -0
- package/dist/persistence/migrations/all-migrations.js.map +1 -0
- package/dist/persistence/migrations/index.d.ts +110 -0
- package/dist/persistence/migrations/index.d.ts.map +1 -0
- package/dist/persistence/migrations/index.js +303 -0
- package/dist/persistence/migrations/index.js.map +1 -0
- package/dist/planning/GOAPPlanner.d.ts +128 -0
- package/dist/planning/GOAPPlanner.d.ts.map +1 -0
- package/dist/planning/GOAPPlanner.js +630 -0
- package/dist/planning/GOAPPlanner.js.map +1 -0
- package/dist/planning/WorldStateBuilder.d.ts +150 -0
- package/dist/planning/WorldStateBuilder.d.ts.map +1 -0
- package/dist/planning/WorldStateBuilder.js +267 -0
- package/dist/planning/WorldStateBuilder.js.map +1 -0
- package/dist/planning/actions/fleet-actions.d.ts +78 -0
- package/dist/planning/actions/fleet-actions.d.ts.map +1 -0
- package/dist/planning/actions/fleet-actions.js +329 -0
- package/dist/planning/actions/fleet-actions.js.map +1 -0
- package/dist/planning/actions/index.d.ts +61 -0
- package/dist/planning/actions/index.d.ts.map +1 -0
- package/dist/planning/actions/index.js +159 -0
- package/dist/planning/actions/index.js.map +1 -0
- package/dist/planning/actions/orchestration-actions.d.ts +61 -0
- package/dist/planning/actions/orchestration-actions.d.ts.map +1 -0
- package/dist/planning/actions/orchestration-actions.js +395 -0
- package/dist/planning/actions/orchestration-actions.js.map +1 -0
- package/dist/planning/actions/quality-gate-actions.d.ts +160 -0
- package/dist/planning/actions/quality-gate-actions.d.ts.map +1 -0
- package/dist/planning/actions/quality-gate-actions.js +639 -0
- package/dist/planning/actions/quality-gate-actions.js.map +1 -0
- package/dist/planning/actions/test-strategy-actions.d.ts +70 -0
- package/dist/planning/actions/test-strategy-actions.d.ts.map +1 -0
- package/dist/planning/actions/test-strategy-actions.js +278 -0
- package/dist/planning/actions/test-strategy-actions.js.map +1 -0
- package/dist/planning/execution/PlanExecutor.d.ts +124 -0
- package/dist/planning/execution/PlanExecutor.d.ts.map +1 -0
- package/dist/planning/execution/PlanExecutor.js +405 -0
- package/dist/planning/execution/PlanExecutor.js.map +1 -0
- package/dist/planning/execution/index.d.ts +12 -0
- package/dist/planning/execution/index.d.ts.map +1 -0
- package/dist/planning/execution/index.js +18 -0
- package/dist/planning/execution/index.js.map +1 -0
- package/dist/planning/goals/TaskWorkflowGoals.d.ts +67 -0
- package/dist/planning/goals/TaskWorkflowGoals.d.ts.map +1 -0
- package/dist/planning/goals/TaskWorkflowGoals.js +208 -0
- package/dist/planning/goals/TaskWorkflowGoals.js.map +1 -0
- package/dist/planning/goals/index.d.ts +10 -0
- package/dist/planning/goals/index.d.ts.map +1 -0
- package/dist/planning/goals/index.js +19 -0
- package/dist/planning/goals/index.js.map +1 -0
- package/dist/planning/index.d.ts +34 -0
- package/dist/planning/index.d.ts.map +1 -0
- package/dist/planning/index.js +176 -0
- package/dist/planning/index.js.map +1 -0
- package/dist/planning/integration/GOAPQualityGateIntegration.d.ts +229 -0
- package/dist/planning/integration/GOAPQualityGateIntegration.d.ts.map +1 -0
- package/dist/planning/integration/GOAPQualityGateIntegration.js +582 -0
- package/dist/planning/integration/GOAPQualityGateIntegration.js.map +1 -0
- package/dist/planning/integration/GOAPTaskOrchestration.d.ts +165 -0
- package/dist/planning/integration/GOAPTaskOrchestration.d.ts.map +1 -0
- package/dist/planning/integration/GOAPTaskOrchestration.js +490 -0
- package/dist/planning/integration/GOAPTaskOrchestration.js.map +1 -0
- package/dist/planning/integration/index.d.ts +14 -0
- package/dist/planning/integration/index.d.ts.map +1 -0
- package/dist/planning/integration/index.js +23 -0
- package/dist/planning/integration/index.js.map +1 -0
- package/dist/planning/types.d.ts +264 -0
- package/dist/planning/types.d.ts.map +1 -0
- package/dist/planning/types.js +63 -0
- package/dist/planning/types.js.map +1 -0
- package/dist/utils/Database.d.ts.map +1 -1
- package/dist/utils/Database.js +81 -2
- package/dist/utils/Database.js.map +1 -1
- package/package.json +6 -3
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Migration System
|
|
3
|
+
*
|
|
4
|
+
* Manages schema migrations for the Agentic QE database.
|
|
5
|
+
* Migrations are versioned and tracked to ensure consistency
|
|
6
|
+
* across all installations.
|
|
7
|
+
*
|
|
8
|
+
* @module persistence/migrations
|
|
9
|
+
*/
|
|
10
|
+
import Database from 'better-sqlite3';
|
|
11
|
+
export interface Migration {
|
|
12
|
+
version: number;
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
up: (db: Database.Database) => void;
|
|
16
|
+
down?: (db: Database.Database) => void;
|
|
17
|
+
}
|
|
18
|
+
export interface MigrationResult {
|
|
19
|
+
version: number;
|
|
20
|
+
name: string;
|
|
21
|
+
success: boolean;
|
|
22
|
+
error?: string;
|
|
23
|
+
duration: number;
|
|
24
|
+
}
|
|
25
|
+
export interface MigrationStatus {
|
|
26
|
+
currentVersion: number;
|
|
27
|
+
latestVersion: number;
|
|
28
|
+
pendingMigrations: number;
|
|
29
|
+
appliedMigrations: Array<{
|
|
30
|
+
version: number;
|
|
31
|
+
name: string;
|
|
32
|
+
applied_at: string;
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Migration Runner
|
|
37
|
+
*
|
|
38
|
+
* Handles running database migrations in order with version tracking.
|
|
39
|
+
*/
|
|
40
|
+
export declare class MigrationRunner {
|
|
41
|
+
private db;
|
|
42
|
+
private migrations;
|
|
43
|
+
constructor(db: Database.Database);
|
|
44
|
+
/**
|
|
45
|
+
* Ensure the migrations tracking table exists
|
|
46
|
+
*/
|
|
47
|
+
private ensureMigrationTable;
|
|
48
|
+
/**
|
|
49
|
+
* Register a migration
|
|
50
|
+
*/
|
|
51
|
+
register(migration: Migration): void;
|
|
52
|
+
/**
|
|
53
|
+
* Register multiple migrations
|
|
54
|
+
*/
|
|
55
|
+
registerAll(migrations: Migration[]): void;
|
|
56
|
+
/**
|
|
57
|
+
* Get current schema version
|
|
58
|
+
*/
|
|
59
|
+
getCurrentVersion(): number;
|
|
60
|
+
/**
|
|
61
|
+
* Get latest available migration version
|
|
62
|
+
*/
|
|
63
|
+
getLatestVersion(): number;
|
|
64
|
+
/**
|
|
65
|
+
* Get pending migrations
|
|
66
|
+
*/
|
|
67
|
+
getPendingMigrations(): Migration[];
|
|
68
|
+
/**
|
|
69
|
+
* Get migration status
|
|
70
|
+
*/
|
|
71
|
+
getStatus(): MigrationStatus;
|
|
72
|
+
/**
|
|
73
|
+
* Run all pending migrations
|
|
74
|
+
*/
|
|
75
|
+
runAll(): MigrationResult[];
|
|
76
|
+
/**
|
|
77
|
+
* Run a single migration
|
|
78
|
+
*/
|
|
79
|
+
runOne(migration: Migration): MigrationResult;
|
|
80
|
+
/**
|
|
81
|
+
* Rollback the last migration
|
|
82
|
+
*/
|
|
83
|
+
rollbackLast(): MigrationResult | null;
|
|
84
|
+
/**
|
|
85
|
+
* Check if a specific table exists
|
|
86
|
+
*/
|
|
87
|
+
tableExists(tableName: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Check if a column exists in a table
|
|
90
|
+
*/
|
|
91
|
+
columnExists(tableName: string, columnName: string): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Safe add column - only adds if it doesn't exist
|
|
94
|
+
*/
|
|
95
|
+
safeAddColumn(tableName: string, columnName: string, columnDef: string): void;
|
|
96
|
+
/**
|
|
97
|
+
* Safe create table - creates if doesn't exist
|
|
98
|
+
*/
|
|
99
|
+
safeCreateTable(sql: string): void;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get default database path
|
|
103
|
+
*/
|
|
104
|
+
export declare function getDefaultDbPath(): string;
|
|
105
|
+
/**
|
|
106
|
+
* Run migrations on a database
|
|
107
|
+
*/
|
|
108
|
+
export declare function runMigrations(dbPath?: string, verbose?: boolean): Promise<MigrationResult[]>;
|
|
109
|
+
export { MigrationRunner as default };
|
|
110
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/persistence/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,KAAK,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,UAAU,CAAmB;gBAEzB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAKjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAKpC;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAI1C;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAQ3B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAK1B;;OAEG;IACH,oBAAoB,IAAI,SAAS,EAAE;IAKnC;;OAEG;IACH,SAAS,IAAI,eAAe;IAiB5B;;OAEG;IACH,MAAM,IAAI,eAAe,EAAE;IAgB3B;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe;IAmD7C;;OAEG;IACH,YAAY,IAAI,eAAe,GAAG,IAAI;IAyCtC;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAOvC;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAS5D;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM7E;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAGnC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,GAAE,MAA2B,EACnC,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,eAAe,EAAE,CAAC,CAiC5B;AAED,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Database Migration System
|
|
4
|
+
*
|
|
5
|
+
* Manages schema migrations for the Agentic QE database.
|
|
6
|
+
* Migrations are versioned and tracked to ensure consistency
|
|
7
|
+
* across all installations.
|
|
8
|
+
*
|
|
9
|
+
* @module persistence/migrations
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.default = exports.MigrationRunner = void 0;
|
|
49
|
+
exports.getDefaultDbPath = getDefaultDbPath;
|
|
50
|
+
exports.runMigrations = runMigrations;
|
|
51
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
/**
|
|
54
|
+
* Migration Runner
|
|
55
|
+
*
|
|
56
|
+
* Handles running database migrations in order with version tracking.
|
|
57
|
+
*/
|
|
58
|
+
class MigrationRunner {
|
|
59
|
+
constructor(db) {
|
|
60
|
+
this.migrations = [];
|
|
61
|
+
this.db = db;
|
|
62
|
+
this.ensureMigrationTable();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Ensure the migrations tracking table exists
|
|
66
|
+
*/
|
|
67
|
+
ensureMigrationTable() {
|
|
68
|
+
this.db.exec(`
|
|
69
|
+
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
70
|
+
version INTEGER PRIMARY KEY,
|
|
71
|
+
name TEXT NOT NULL,
|
|
72
|
+
description TEXT,
|
|
73
|
+
applied_at TEXT NOT NULL,
|
|
74
|
+
checksum TEXT
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_migrations_version ON schema_migrations(version);
|
|
78
|
+
`);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Register a migration
|
|
82
|
+
*/
|
|
83
|
+
register(migration) {
|
|
84
|
+
this.migrations.push(migration);
|
|
85
|
+
this.migrations.sort((a, b) => a.version - b.version);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Register multiple migrations
|
|
89
|
+
*/
|
|
90
|
+
registerAll(migrations) {
|
|
91
|
+
migrations.forEach(m => this.register(m));
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get current schema version
|
|
95
|
+
*/
|
|
96
|
+
getCurrentVersion() {
|
|
97
|
+
const row = this.db.prepare('SELECT MAX(version) as version FROM schema_migrations').get();
|
|
98
|
+
return row?.version ?? 0;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get latest available migration version
|
|
102
|
+
*/
|
|
103
|
+
getLatestVersion() {
|
|
104
|
+
if (this.migrations.length === 0)
|
|
105
|
+
return 0;
|
|
106
|
+
return Math.max(...this.migrations.map(m => m.version));
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get pending migrations
|
|
110
|
+
*/
|
|
111
|
+
getPendingMigrations() {
|
|
112
|
+
const currentVersion = this.getCurrentVersion();
|
|
113
|
+
return this.migrations.filter(m => m.version > currentVersion);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get migration status
|
|
117
|
+
*/
|
|
118
|
+
getStatus() {
|
|
119
|
+
const currentVersion = this.getCurrentVersion();
|
|
120
|
+
const latestVersion = this.getLatestVersion();
|
|
121
|
+
const pending = this.getPendingMigrations();
|
|
122
|
+
const applied = this.db.prepare('SELECT version, name, applied_at FROM schema_migrations ORDER BY version').all();
|
|
123
|
+
return {
|
|
124
|
+
currentVersion,
|
|
125
|
+
latestVersion,
|
|
126
|
+
pendingMigrations: pending.length,
|
|
127
|
+
appliedMigrations: applied
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Run all pending migrations
|
|
132
|
+
*/
|
|
133
|
+
runAll() {
|
|
134
|
+
const results = [];
|
|
135
|
+
const pending = this.getPendingMigrations();
|
|
136
|
+
for (const migration of pending) {
|
|
137
|
+
const result = this.runOne(migration);
|
|
138
|
+
results.push(result);
|
|
139
|
+
if (!result.success) {
|
|
140
|
+
break; // Stop on first failure
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return results;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Run a single migration
|
|
147
|
+
*/
|
|
148
|
+
runOne(migration) {
|
|
149
|
+
const startTime = Date.now();
|
|
150
|
+
try {
|
|
151
|
+
// Check if already applied
|
|
152
|
+
const existing = this.db.prepare('SELECT version FROM schema_migrations WHERE version = ?').get(migration.version);
|
|
153
|
+
if (existing) {
|
|
154
|
+
return {
|
|
155
|
+
version: migration.version,
|
|
156
|
+
name: migration.name,
|
|
157
|
+
success: true,
|
|
158
|
+
duration: 0
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
// Run migration in transaction
|
|
162
|
+
this.db.transaction(() => {
|
|
163
|
+
migration.up(this.db);
|
|
164
|
+
// Record migration
|
|
165
|
+
this.db.prepare(`
|
|
166
|
+
INSERT INTO schema_migrations (version, name, description, applied_at)
|
|
167
|
+
VALUES (?, ?, ?, ?)
|
|
168
|
+
`).run(migration.version, migration.name, migration.description, new Date().toISOString());
|
|
169
|
+
})();
|
|
170
|
+
return {
|
|
171
|
+
version: migration.version,
|
|
172
|
+
name: migration.name,
|
|
173
|
+
success: true,
|
|
174
|
+
duration: Date.now() - startTime
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
return {
|
|
179
|
+
version: migration.version,
|
|
180
|
+
name: migration.name,
|
|
181
|
+
success: false,
|
|
182
|
+
error: error instanceof Error ? error.message : String(error),
|
|
183
|
+
duration: Date.now() - startTime
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Rollback the last migration
|
|
189
|
+
*/
|
|
190
|
+
rollbackLast() {
|
|
191
|
+
const currentVersion = this.getCurrentVersion();
|
|
192
|
+
if (currentVersion === 0)
|
|
193
|
+
return null;
|
|
194
|
+
const migration = this.migrations.find(m => m.version === currentVersion);
|
|
195
|
+
if (!migration || !migration.down) {
|
|
196
|
+
return {
|
|
197
|
+
version: currentVersion,
|
|
198
|
+
name: migration?.name ?? 'unknown',
|
|
199
|
+
success: false,
|
|
200
|
+
error: 'Migration does not support rollback',
|
|
201
|
+
duration: 0
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
const startTime = Date.now();
|
|
205
|
+
try {
|
|
206
|
+
this.db.transaction(() => {
|
|
207
|
+
migration.down(this.db);
|
|
208
|
+
this.db.prepare('DELETE FROM schema_migrations WHERE version = ?')
|
|
209
|
+
.run(currentVersion);
|
|
210
|
+
})();
|
|
211
|
+
return {
|
|
212
|
+
version: currentVersion,
|
|
213
|
+
name: migration.name,
|
|
214
|
+
success: true,
|
|
215
|
+
duration: Date.now() - startTime
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
return {
|
|
220
|
+
version: currentVersion,
|
|
221
|
+
name: migration.name,
|
|
222
|
+
success: false,
|
|
223
|
+
error: error instanceof Error ? error.message : String(error),
|
|
224
|
+
duration: Date.now() - startTime
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Check if a specific table exists
|
|
230
|
+
*/
|
|
231
|
+
tableExists(tableName) {
|
|
232
|
+
const row = this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?").get(tableName);
|
|
233
|
+
return !!row;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Check if a column exists in a table
|
|
237
|
+
*/
|
|
238
|
+
columnExists(tableName, columnName) {
|
|
239
|
+
try {
|
|
240
|
+
const columns = this.db.prepare(`PRAGMA table_info(${tableName})`).all();
|
|
241
|
+
return columns.some(c => c.name === columnName);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Safe add column - only adds if it doesn't exist
|
|
249
|
+
*/
|
|
250
|
+
safeAddColumn(tableName, columnName, columnDef) {
|
|
251
|
+
if (!this.columnExists(tableName, columnName)) {
|
|
252
|
+
this.db.exec(`ALTER TABLE ${tableName} ADD COLUMN ${columnName} ${columnDef}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Safe create table - creates if doesn't exist
|
|
257
|
+
*/
|
|
258
|
+
safeCreateTable(sql) {
|
|
259
|
+
this.db.exec(sql);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
exports.MigrationRunner = MigrationRunner;
|
|
263
|
+
exports.default = MigrationRunner;
|
|
264
|
+
/**
|
|
265
|
+
* Get default database path
|
|
266
|
+
*/
|
|
267
|
+
function getDefaultDbPath() {
|
|
268
|
+
return path.join(process.cwd(), '.agentic-qe', 'memory.db');
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Run migrations on a database
|
|
272
|
+
*/
|
|
273
|
+
async function runMigrations(dbPath = getDefaultDbPath(), verbose = false) {
|
|
274
|
+
const db = new better_sqlite3_1.default(dbPath);
|
|
275
|
+
try {
|
|
276
|
+
const runner = new MigrationRunner(db);
|
|
277
|
+
// Register all migrations
|
|
278
|
+
const { allMigrations } = await Promise.resolve().then(() => __importStar(require('./all-migrations')));
|
|
279
|
+
runner.registerAll(allMigrations);
|
|
280
|
+
if (verbose) {
|
|
281
|
+
const status = runner.getStatus();
|
|
282
|
+
console.log(`Current version: ${status.currentVersion}`);
|
|
283
|
+
console.log(`Latest version: ${status.latestVersion}`);
|
|
284
|
+
console.log(`Pending migrations: ${status.pendingMigrations}`);
|
|
285
|
+
}
|
|
286
|
+
const results = runner.runAll();
|
|
287
|
+
if (verbose) {
|
|
288
|
+
for (const result of results) {
|
|
289
|
+
if (result.success) {
|
|
290
|
+
console.log(`✓ Migration ${result.version}: ${result.name} (${result.duration}ms)`);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
console.log(`✗ Migration ${result.version}: ${result.name} - ${result.error}`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return results;
|
|
298
|
+
}
|
|
299
|
+
finally {
|
|
300
|
+
db.close();
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/persistence/migrations/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GOAP Planner - A* Search Algorithm for Goal-Oriented Action Planning
|
|
3
|
+
*
|
|
4
|
+
* Implements optimal plan finding using A* search with:
|
|
5
|
+
* - Precondition checking
|
|
6
|
+
* - Effect application
|
|
7
|
+
* - Heuristic calculation
|
|
8
|
+
* - Plan reconstruction
|
|
9
|
+
*
|
|
10
|
+
* @module planning/GOAPPlanner
|
|
11
|
+
* @version 1.0.0
|
|
12
|
+
*/
|
|
13
|
+
import Database from 'better-sqlite3';
|
|
14
|
+
import { WorldState, StateConditions, GOAPAction, GOAPPlan, PlanConstraints } from './types';
|
|
15
|
+
/**
|
|
16
|
+
* GOAP Planner using A* search algorithm
|
|
17
|
+
*/
|
|
18
|
+
export declare class GOAPPlanner {
|
|
19
|
+
private actionLibrary;
|
|
20
|
+
private db;
|
|
21
|
+
private logger;
|
|
22
|
+
private actionsLoaded;
|
|
23
|
+
constructor(db: Database.Database);
|
|
24
|
+
/**
|
|
25
|
+
* Load action library from database (merges with programmatic actions)
|
|
26
|
+
*/
|
|
27
|
+
loadActionsFromDatabase(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Add actions programmatically (for testing or bootstrap)
|
|
30
|
+
*/
|
|
31
|
+
addActions(actions: GOAPAction[]): void;
|
|
32
|
+
/**
|
|
33
|
+
* Clear action library
|
|
34
|
+
*/
|
|
35
|
+
clearActions(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Get current action library
|
|
38
|
+
*/
|
|
39
|
+
getActionLibrary(): GOAPAction[];
|
|
40
|
+
/**
|
|
41
|
+
* Ensure GOAP schema exists (creates missing tables)
|
|
42
|
+
*/
|
|
43
|
+
ensureSchema(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Seed actions to database (upsert - won't duplicate)
|
|
46
|
+
* Call this with allActions to persist the action library
|
|
47
|
+
*/
|
|
48
|
+
seedActions(actions: GOAPAction[]): number;
|
|
49
|
+
/**
|
|
50
|
+
* Get action count from database
|
|
51
|
+
*/
|
|
52
|
+
getActionCountFromDatabase(): number;
|
|
53
|
+
/**
|
|
54
|
+
* A* search to find optimal plan from current to goal state
|
|
55
|
+
*/
|
|
56
|
+
findPlan(currentState: WorldState, goalConditions: StateConditions, constraints?: PlanConstraints): Promise<GOAPPlan | null>;
|
|
57
|
+
/**
|
|
58
|
+
* Calculate heuristic distance to goal (admissible)
|
|
59
|
+
*/
|
|
60
|
+
private calculateHeuristic;
|
|
61
|
+
/**
|
|
62
|
+
* Check if goal conditions are met
|
|
63
|
+
*/
|
|
64
|
+
goalMet(state: WorldState, goal: StateConditions): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Check if all conditions are satisfied
|
|
67
|
+
*/
|
|
68
|
+
conditionsMet(state: WorldState, conditions: StateConditions): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Check a single condition
|
|
71
|
+
*/
|
|
72
|
+
private checkCondition;
|
|
73
|
+
/**
|
|
74
|
+
* Check if action preconditions are met
|
|
75
|
+
*/
|
|
76
|
+
preconditionsMet(state: WorldState, preconditions: StateConditions): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Get actions whose preconditions are satisfied
|
|
79
|
+
*/
|
|
80
|
+
private getApplicableActions;
|
|
81
|
+
/**
|
|
82
|
+
* Calculate effective action cost
|
|
83
|
+
*/
|
|
84
|
+
private getActionCost;
|
|
85
|
+
/**
|
|
86
|
+
* Apply action effects to state
|
|
87
|
+
*/
|
|
88
|
+
applyAction(state: WorldState, action: GOAPAction): WorldState;
|
|
89
|
+
/**
|
|
90
|
+
* Apply a single effect to state
|
|
91
|
+
*/
|
|
92
|
+
private applyEffect;
|
|
93
|
+
/**
|
|
94
|
+
* Get value from nested state using dot notation
|
|
95
|
+
*/
|
|
96
|
+
getStateValue(state: WorldState, key: string): any;
|
|
97
|
+
/**
|
|
98
|
+
* Set value in nested state using dot notation
|
|
99
|
+
*/
|
|
100
|
+
private setStateValue;
|
|
101
|
+
/**
|
|
102
|
+
* Create hash of state for deduplication
|
|
103
|
+
*/
|
|
104
|
+
private stateHash;
|
|
105
|
+
/**
|
|
106
|
+
* Deep clone world state
|
|
107
|
+
*/
|
|
108
|
+
private cloneState;
|
|
109
|
+
/**
|
|
110
|
+
* Reconstruct plan from goal node
|
|
111
|
+
*/
|
|
112
|
+
private reconstructPlan;
|
|
113
|
+
/**
|
|
114
|
+
* Persist plan to database
|
|
115
|
+
*/
|
|
116
|
+
persistPlan(plan: GOAPPlan, initialState: WorldState, goalId?: string): Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* Update action success rate based on execution outcome
|
|
119
|
+
*/
|
|
120
|
+
updateActionSuccessRate(actionId: string, success: boolean): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Find alternative plans (for presenting options)
|
|
123
|
+
*/
|
|
124
|
+
findAlternativePlans(currentState: WorldState, goalConditions: StateConditions, constraints?: PlanConstraints, maxAlternatives?: number): Promise<GOAPPlan[]>;
|
|
125
|
+
}
|
|
126
|
+
export declare function getSharedGOAPPlanner(db: Database.Database): GOAPPlanner;
|
|
127
|
+
export declare function resetSharedGOAPPlanner(): void;
|
|
128
|
+
//# sourceMappingURL=GOAPPlanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GOAPPlanner.d.ts","sourceRoot":"","sources":["../../src/planning/GOAPPlanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EACL,UAAU,EACV,eAAe,EAIf,UAAU,EACV,QAAQ,EACR,eAAe,EAIhB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAS;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAKjC;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC9C;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAIvC;;OAEG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,gBAAgB,IAAI,UAAU,EAAE;IAIhC;;OAEG;IACH,YAAY,IAAI,IAAI;IA+BpB;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;IA6C1C;;OAEG;IACH,0BAA0B,IAAI,MAAM;IAKpC;;OAEG;IACG,QAAQ,CACZ,YAAY,EAAE,UAAU,EACxB,cAAc,EAAE,eAAe,EAC/B,WAAW,CAAC,EAAE,eAAe,GAC5B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IA2G3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4D1B;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO;IAI1D;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,GAAG,OAAO;IAStE;;OAEG;IACH,OAAO,CAAC,cAAc;IAiDtB;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,GAAG,OAAO;IAI5E;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU;IAU9D;;OAEG;IACH,OAAO,CAAC,WAAW;IAsDnB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG;IAclD;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,OAAO,CAAC,SAAS;IAsBjB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB3F;;OAEG;IACG,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BhF;;OAEG;IACG,oBAAoB,CACxB,YAAY,EAAE,UAAU,EACxB,cAAc,EAAE,eAAe,EAC/B,WAAW,CAAC,EAAE,eAAe,EAC7B,eAAe,SAAI,GAClB,OAAO,CAAC,QAAQ,EAAE,CAAC;CAuBvB;AAOD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,WAAW,CAKvE;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|