@phantomind/core 0.1.0
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/dist/adapters/aider.d.ts +12 -0
- package/dist/adapters/aider.d.ts.map +1 -0
- package/dist/adapters/aider.js +24 -0
- package/dist/adapters/aider.js.map +1 -0
- package/dist/adapters/base.d.ts +21 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +83 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/claude-code.d.ts +12 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +31 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/cline.d.ts +12 -0
- package/dist/adapters/cline.d.ts.map +1 -0
- package/dist/adapters/cline.js +32 -0
- package/dist/adapters/cline.js.map +1 -0
- package/dist/adapters/codex.d.ts +18 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +38 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/continue.d.ts +12 -0
- package/dist/adapters/continue.d.ts.map +1 -0
- package/dist/adapters/continue.js +29 -0
- package/dist/adapters/continue.js.map +1 -0
- package/dist/adapters/copilot.d.ts +12 -0
- package/dist/adapters/copilot.d.ts.map +1 -0
- package/dist/adapters/copilot.js +31 -0
- package/dist/adapters/copilot.js.map +1 -0
- package/dist/adapters/cursor.d.ts +12 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/cursor.js +34 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/index.d.ts +32 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +64 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/windsurf.d.ts +12 -0
- package/dist/adapters/windsurf.d.ts.map +1 -0
- package/dist/adapters/windsurf.js +32 -0
- package/dist/adapters/windsurf.js.map +1 -0
- package/dist/adapters/zed.d.ts +12 -0
- package/dist/adapters/zed.d.ts.map +1 -0
- package/dist/adapters/zed.js +27 -0
- package/dist/adapters/zed.js.map +1 -0
- package/dist/agent/decomposer.d.ts +55 -0
- package/dist/agent/decomposer.d.ts.map +1 -0
- package/dist/agent/decomposer.js +172 -0
- package/dist/agent/decomposer.js.map +1 -0
- package/dist/agent/executor.d.ts +33 -0
- package/dist/agent/executor.d.ts.map +1 -0
- package/dist/agent/executor.js +260 -0
- package/dist/agent/executor.js.map +1 -0
- package/dist/agent/index.d.ts +8 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +8 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/memory.d.ts +95 -0
- package/dist/agent/memory.d.ts.map +1 -0
- package/dist/agent/memory.js +211 -0
- package/dist/agent/memory.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +54 -0
- package/dist/agent/orchestrator.d.ts.map +1 -0
- package/dist/agent/orchestrator.js +190 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/agent/queue.d.ts +95 -0
- package/dist/agent/queue.d.ts.map +1 -0
- package/dist/agent/queue.js +231 -0
- package/dist/agent/queue.js.map +1 -0
- package/dist/agent/retry.d.ts +61 -0
- package/dist/agent/retry.d.ts.map +1 -0
- package/dist/agent/retry.js +162 -0
- package/dist/agent/retry.js.map +1 -0
- package/dist/agent/roles.d.ts +35 -0
- package/dist/agent/roles.d.ts.map +1 -0
- package/dist/agent/roles.js +269 -0
- package/dist/agent/roles.js.map +1 -0
- package/dist/cli/agent.d.ts +12 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +85 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/audit.d.ts +11 -0
- package/dist/cli/audit.d.ts.map +1 -0
- package/dist/cli/audit.js +63 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/cli/eval.d.ts +11 -0
- package/dist/cli/eval.d.ts.map +1 -0
- package/dist/cli/eval.js +79 -0
- package/dist/cli/eval.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +13 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +157 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/main.d.ts +7 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +153 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/serve.d.ts +11 -0
- package/dist/cli/serve.d.ts.map +1 -0
- package/dist/cli/serve.js +23 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/stats.d.ts +10 -0
- package/dist/cli/stats.d.ts.map +1 -0
- package/dist/cli/stats.js +68 -0
- package/dist/cli/stats.js.map +1 -0
- package/dist/cli/sync.d.ts +11 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +49 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli/validate.d.ts +13 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +125 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +25 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +190 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/context/embedder.d.ts +53 -0
- package/dist/context/embedder.d.ts.map +1 -0
- package/dist/context/embedder.js +235 -0
- package/dist/context/embedder.js.map +1 -0
- package/dist/context/engine.d.ts +82 -0
- package/dist/context/engine.d.ts.map +1 -0
- package/dist/context/engine.js +343 -0
- package/dist/context/engine.js.map +1 -0
- package/dist/context/index.d.ts +5 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +5 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/learner.d.ts +44 -0
- package/dist/context/learner.d.ts.map +1 -0
- package/dist/context/learner.js +246 -0
- package/dist/context/learner.js.map +1 -0
- package/dist/context/versioning.d.ts +29 -0
- package/dist/context/versioning.d.ts.map +1 -0
- package/dist/context/versioning.js +81 -0
- package/dist/context/versioning.js.map +1 -0
- package/dist/index.d.ts +169 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +285 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +31 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +334 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/observability/audit.d.ts +61 -0
- package/dist/observability/audit.d.ts.map +1 -0
- package/dist/observability/audit.js +168 -0
- package/dist/observability/audit.js.map +1 -0
- package/dist/observability/cost-tracker.d.ts +71 -0
- package/dist/observability/cost-tracker.d.ts.map +1 -0
- package/dist/observability/cost-tracker.js +206 -0
- package/dist/observability/cost-tracker.js.map +1 -0
- package/dist/observability/dashboard.d.ts +52 -0
- package/dist/observability/dashboard.d.ts.map +1 -0
- package/dist/observability/dashboard.js +134 -0
- package/dist/observability/dashboard.js.map +1 -0
- package/dist/observability/index.d.ts +4 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +4 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/providers/anthropic.d.ts +14 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +99 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +52 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +68 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/deepseek.d.ts +15 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +99 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/gemini.d.ts +15 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +118 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/groq.d.ts +15 -0
- package/dist/providers/groq.d.ts.map +1 -0
- package/dist/providers/groq.js +101 -0
- package/dist/providers/groq.js.map +1 -0
- package/dist/providers/index.d.ts +11 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +11 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/mistral.d.ts +15 -0
- package/dist/providers/mistral.d.ts.map +1 -0
- package/dist/providers/mistral.js +99 -0
- package/dist/providers/mistral.js.map +1 -0
- package/dist/providers/ollama.d.ts +14 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +122 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +14 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +80 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openrouter.d.ts +15 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +101 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/router.d.ts +51 -0
- package/dist/providers/router.d.ts.map +1 -0
- package/dist/providers/router.js +198 -0
- package/dist/providers/router.js.map +1 -0
- package/dist/quality/anomaly.d.ts +32 -0
- package/dist/quality/anomaly.d.ts.map +1 -0
- package/dist/quality/anomaly.js +126 -0
- package/dist/quality/anomaly.js.map +1 -0
- package/dist/quality/consistency.d.ts +26 -0
- package/dist/quality/consistency.d.ts.map +1 -0
- package/dist/quality/consistency.js +156 -0
- package/dist/quality/consistency.js.map +1 -0
- package/dist/quality/dual-verifier.d.ts +22 -0
- package/dist/quality/dual-verifier.d.ts.map +1 -0
- package/dist/quality/dual-verifier.js +137 -0
- package/dist/quality/dual-verifier.js.map +1 -0
- package/dist/quality/hallucination-guard.d.ts +57 -0
- package/dist/quality/hallucination-guard.d.ts.map +1 -0
- package/dist/quality/hallucination-guard.js +245 -0
- package/dist/quality/hallucination-guard.js.map +1 -0
- package/dist/quality/index.d.ts +7 -0
- package/dist/quality/index.d.ts.map +1 -0
- package/dist/quality/index.js +7 -0
- package/dist/quality/index.js.map +1 -0
- package/dist/quality/regression.d.ts +44 -0
- package/dist/quality/regression.d.ts.map +1 -0
- package/dist/quality/regression.js +181 -0
- package/dist/quality/regression.js.map +1 -0
- package/dist/quality/secret-scanner.d.ts +36 -0
- package/dist/quality/secret-scanner.d.ts.map +1 -0
- package/dist/quality/secret-scanner.js +187 -0
- package/dist/quality/secret-scanner.js.map +1 -0
- package/dist/schemas/index.d.ts +2 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +2 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/registry.d.ts +72 -0
- package/dist/schemas/registry.d.ts.map +1 -0
- package/dist/schemas/registry.js +483 -0
- package/dist/schemas/registry.js.map +1 -0
- package/dist/templates/engine.d.ts +70 -0
- package/dist/templates/engine.d.ts.map +1 -0
- package/dist/templates/engine.js +71 -0
- package/dist/templates/engine.js.map +1 -0
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +2 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/types.d.ts +912 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +75 -0
- package/dist/types.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hallucination-guard.js","sourceRoot":"","sources":["../../src/quality/hallucination-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { SecretScanner } from './secret-scanner.js';
|
|
2
|
+
export { HallucinationGuard } from './hallucination-guard.js';
|
|
3
|
+
export { DualVerifier } from './dual-verifier.js';
|
|
4
|
+
export { RegressionDetector } from './regression.js';
|
|
5
|
+
export { AnomalyDetector } from './anomaly.js';
|
|
6
|
+
export { ConsistencyEnforcer } from './consistency.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/quality/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { SecretScanner } from './secret-scanner.js';
|
|
2
|
+
export { HallucinationGuard } from './hallucination-guard.js';
|
|
3
|
+
export { DualVerifier } from './dual-verifier.js';
|
|
4
|
+
export { RegressionDetector } from './regression.js';
|
|
5
|
+
export { AnomalyDetector } from './anomaly.js';
|
|
6
|
+
export { ConsistencyEnforcer } from './consistency.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/quality/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI — Regression Detector
|
|
3
|
+
* Snapshot project state before agent run, compare after, detect breakage.
|
|
4
|
+
*/
|
|
5
|
+
import type { RegressionReport } from '../types.js';
|
|
6
|
+
interface ProjectSnapshot {
|
|
7
|
+
timestamp: string;
|
|
8
|
+
fileHashes: Record<string, string>;
|
|
9
|
+
testResults?: {
|
|
10
|
+
total: number;
|
|
11
|
+
passed: number;
|
|
12
|
+
failed: number;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export declare class RegressionDetector {
|
|
16
|
+
private projectRoot;
|
|
17
|
+
private snapshotPath;
|
|
18
|
+
constructor(projectRoot: string);
|
|
19
|
+
/**
|
|
20
|
+
* Take a snapshot of current project state
|
|
21
|
+
*/
|
|
22
|
+
takeSnapshot(): Promise<ProjectSnapshot>;
|
|
23
|
+
/**
|
|
24
|
+
* Compare current state with snapshot
|
|
25
|
+
*/
|
|
26
|
+
compare(): Promise<RegressionReport>;
|
|
27
|
+
/**
|
|
28
|
+
* Rollback all files to snapshot state
|
|
29
|
+
*/
|
|
30
|
+
rollback(): Promise<{
|
|
31
|
+
success: boolean;
|
|
32
|
+
filesReverted: number;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Run project tests and return results
|
|
36
|
+
*/
|
|
37
|
+
private runTests;
|
|
38
|
+
/**
|
|
39
|
+
* Detect file changes since snapshot
|
|
40
|
+
*/
|
|
41
|
+
private detectFileChanges;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=regression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regression.d.ts","sourceRoot":"","sources":["../../src/quality/regression.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,aAAa,CAAC;AAEhE,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACjE;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;gBAEjB,WAAW,EAAE,MAAM;IAK/B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;IAoC9C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAkC1C;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAqBtE;;OAEG;YACW,QAAQ;IAuCtB;;OAEG;YACW,iBAAiB;CA6BhC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI — Regression Detector
|
|
3
|
+
* Snapshot project state before agent run, compare after, detect breakage.
|
|
4
|
+
*/
|
|
5
|
+
import { execSync } from 'node:child_process';
|
|
6
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { createHash } from 'node:crypto';
|
|
9
|
+
export class RegressionDetector {
|
|
10
|
+
projectRoot;
|
|
11
|
+
snapshotPath;
|
|
12
|
+
constructor(projectRoot) {
|
|
13
|
+
this.projectRoot = projectRoot;
|
|
14
|
+
this.snapshotPath = join(projectRoot, '.phantomind', 'cache', 'snapshot.json');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Take a snapshot of current project state
|
|
18
|
+
*/
|
|
19
|
+
async takeSnapshot() {
|
|
20
|
+
const snapshot = {
|
|
21
|
+
timestamp: new Date().toISOString(),
|
|
22
|
+
fileHashes: {},
|
|
23
|
+
};
|
|
24
|
+
// Hash tracked files
|
|
25
|
+
try {
|
|
26
|
+
const gitFiles = execSync('git ls-files', {
|
|
27
|
+
cwd: this.projectRoot,
|
|
28
|
+
encoding: 'utf-8',
|
|
29
|
+
timeout: 10000,
|
|
30
|
+
}).trim().split('\n').filter(Boolean);
|
|
31
|
+
for (const file of gitFiles) {
|
|
32
|
+
try {
|
|
33
|
+
const content = await readFile(join(this.projectRoot, file), 'utf-8');
|
|
34
|
+
snapshot.fileHashes[file] = createHash('sha256').update(content).digest('hex').slice(0, 16);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// skip unreadable files
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Not a git repo, skip file hashing
|
|
43
|
+
}
|
|
44
|
+
// Run tests and capture result
|
|
45
|
+
snapshot.testResults = await this.runTests();
|
|
46
|
+
// Save snapshot
|
|
47
|
+
await mkdir(join(this.projectRoot, '.phantomind', 'cache'), { recursive: true });
|
|
48
|
+
await writeFile(this.snapshotPath, JSON.stringify(snapshot, null, 2), 'utf-8');
|
|
49
|
+
return snapshot;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Compare current state with snapshot
|
|
53
|
+
*/
|
|
54
|
+
async compare() {
|
|
55
|
+
let baseline;
|
|
56
|
+
try {
|
|
57
|
+
baseline = JSON.parse(await readFile(this.snapshotPath, 'utf-8'));
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return {
|
|
61
|
+
hasRegression: false,
|
|
62
|
+
testsBefore: 0,
|
|
63
|
+
testsAfter: 0,
|
|
64
|
+
testsBroken: 0,
|
|
65
|
+
schemaViolations: 0,
|
|
66
|
+
architectureViolations: 0,
|
|
67
|
+
fileChanges: [],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const currentTests = await this.runTests();
|
|
71
|
+
const fileChanges = await this.detectFileChanges(baseline);
|
|
72
|
+
const testsBroken = Math.max(0, (baseline.testResults?.passed ?? 0) - (currentTests?.passed ?? 0));
|
|
73
|
+
return {
|
|
74
|
+
hasRegression: testsBroken > 0,
|
|
75
|
+
testsBefore: baseline.testResults?.total ?? 0,
|
|
76
|
+
testsAfter: currentTests?.total ?? 0,
|
|
77
|
+
testsBroken,
|
|
78
|
+
schemaViolations: 0,
|
|
79
|
+
architectureViolations: 0,
|
|
80
|
+
fileChanges,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Rollback all files to snapshot state
|
|
85
|
+
*/
|
|
86
|
+
async rollback() {
|
|
87
|
+
try {
|
|
88
|
+
execSync('git checkout -- .', {
|
|
89
|
+
cwd: this.projectRoot,
|
|
90
|
+
encoding: 'utf-8',
|
|
91
|
+
timeout: 10000,
|
|
92
|
+
});
|
|
93
|
+
// Also clean untracked files created by agent
|
|
94
|
+
execSync('git clean -fd --exclude=.phantomind', {
|
|
95
|
+
cwd: this.projectRoot,
|
|
96
|
+
encoding: 'utf-8',
|
|
97
|
+
timeout: 10000,
|
|
98
|
+
});
|
|
99
|
+
return { success: true, filesReverted: -1 };
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return { success: false, filesReverted: 0 };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Run project tests and return results
|
|
107
|
+
*/
|
|
108
|
+
async runTests() {
|
|
109
|
+
const testCommands = [
|
|
110
|
+
'npm test -- --reporter=json',
|
|
111
|
+
'npx vitest run --reporter=json',
|
|
112
|
+
'go test ./...',
|
|
113
|
+
'swift test',
|
|
114
|
+
];
|
|
115
|
+
for (const cmd of testCommands) {
|
|
116
|
+
try {
|
|
117
|
+
const result = execSync(cmd, {
|
|
118
|
+
cwd: this.projectRoot,
|
|
119
|
+
encoding: 'utf-8',
|
|
120
|
+
timeout: 60000,
|
|
121
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
122
|
+
});
|
|
123
|
+
// Try to parse results
|
|
124
|
+
try {
|
|
125
|
+
const json = JSON.parse(result);
|
|
126
|
+
return {
|
|
127
|
+
total: json.numTotalTests ?? json.testResults?.length ?? 0,
|
|
128
|
+
passed: json.numPassedTests ?? 0,
|
|
129
|
+
failed: json.numFailedTests ?? 0,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// Non-JSON output — count pass/fail from text
|
|
134
|
+
const passed = (result.match(/✓|passed|PASS/g) ?? []).length;
|
|
135
|
+
const failed = (result.match(/✗|failed|FAIL/g) ?? []).length;
|
|
136
|
+
return { total: passed + failed, passed, failed };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Detect file changes since snapshot
|
|
147
|
+
*/
|
|
148
|
+
async detectFileChanges(baseline) {
|
|
149
|
+
const changes = [];
|
|
150
|
+
try {
|
|
151
|
+
const diff = execSync('git diff --name-status', {
|
|
152
|
+
cwd: this.projectRoot,
|
|
153
|
+
encoding: 'utf-8',
|
|
154
|
+
timeout: 10000,
|
|
155
|
+
});
|
|
156
|
+
for (const line of diff.trim().split('\n').filter(Boolean)) {
|
|
157
|
+
const [status, path] = line.split('\t');
|
|
158
|
+
if (!path)
|
|
159
|
+
continue;
|
|
160
|
+
let action;
|
|
161
|
+
switch (status) {
|
|
162
|
+
case 'A':
|
|
163
|
+
action = 'created';
|
|
164
|
+
break;
|
|
165
|
+
case 'D':
|
|
166
|
+
action = 'deleted';
|
|
167
|
+
break;
|
|
168
|
+
default:
|
|
169
|
+
action = 'modified';
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
changes.push({ path, action });
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// Not a git repo
|
|
177
|
+
}
|
|
178
|
+
return changes;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=regression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regression.js","sourceRoot":"","sources":["../../src/quality/regression.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI — Secret Scanner
|
|
3
|
+
* Detect and prevent secrets, credentials, and sensitive data in code.
|
|
4
|
+
*/
|
|
5
|
+
import type { SecretMatch } from '../types.js';
|
|
6
|
+
interface SecretPattern {
|
|
7
|
+
name: string;
|
|
8
|
+
pattern: RegExp;
|
|
9
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
10
|
+
replacement: (match: string) => string;
|
|
11
|
+
}
|
|
12
|
+
export declare class SecretScanner {
|
|
13
|
+
private patterns;
|
|
14
|
+
constructor(customPatterns?: SecretPattern[]);
|
|
15
|
+
/**
|
|
16
|
+
* Scan content for secrets
|
|
17
|
+
*/
|
|
18
|
+
scan(content: string, fileName?: string): SecretMatch[];
|
|
19
|
+
/**
|
|
20
|
+
* Scan content and return cleaned version
|
|
21
|
+
*/
|
|
22
|
+
scanAndReplace(content: string, fileName?: string): {
|
|
23
|
+
cleaned: string;
|
|
24
|
+
matches: SecretMatch[];
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Quick check if content contains any secrets
|
|
28
|
+
*/
|
|
29
|
+
hasSecrets(content: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Redact a secret value for display (show first/last chars only)
|
|
32
|
+
*/
|
|
33
|
+
private redactValue;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=secret-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-scanner.d.ts","sourceRoot":"","sources":["../../src/quality/secret-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AA2GD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,cAAc,CAAC,EAAE,aAAa,EAAE;IAI5C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAY,GAAG,WAAW,EAAE;IA8B1D;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAY,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,EAAE,CAAA;KAAE;IAwBlG;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAUpC;;OAEG;IACH,OAAO,CAAC,WAAW;CAIpB"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI — Secret Scanner
|
|
3
|
+
* Detect and prevent secrets, credentials, and sensitive data in code.
|
|
4
|
+
*/
|
|
5
|
+
const SECRET_PATTERNS = [
|
|
6
|
+
// API Keys
|
|
7
|
+
{
|
|
8
|
+
name: 'Anthropic API Key',
|
|
9
|
+
pattern: /sk-ant-[a-zA-Z0-9_-]{20,}/g,
|
|
10
|
+
severity: 'critical',
|
|
11
|
+
replacement: () => 'process.env.ANTHROPIC_API_KEY',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: 'OpenAI API Key',
|
|
15
|
+
pattern: /sk-proj-[a-zA-Z0-9_-]{20,}/g,
|
|
16
|
+
severity: 'critical',
|
|
17
|
+
replacement: () => 'process.env.OPENAI_API_KEY',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'OpenAI Legacy Key',
|
|
21
|
+
pattern: /sk-[a-zA-Z0-9]{32,}/g,
|
|
22
|
+
severity: 'critical',
|
|
23
|
+
replacement: () => 'process.env.OPENAI_API_KEY',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'Google API Key',
|
|
27
|
+
pattern: /AIza[a-zA-Z0-9_-]{35}/g,
|
|
28
|
+
severity: 'critical',
|
|
29
|
+
replacement: () => 'process.env.GOOGLE_API_KEY',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'Groq API Key',
|
|
33
|
+
pattern: /gsk_[a-zA-Z0-9]{20,}/g,
|
|
34
|
+
severity: 'critical',
|
|
35
|
+
replacement: () => 'process.env.GROQ_API_KEY',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'AWS Access Key',
|
|
39
|
+
pattern: /AKIA[A-Z0-9]{16}/g,
|
|
40
|
+
severity: 'critical',
|
|
41
|
+
replacement: () => 'process.env.AWS_ACCESS_KEY_ID',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'AWS Secret Key',
|
|
45
|
+
pattern: /(?:aws_secret_access_key|secret_key)\s*[=:]\s*['"]?([A-Za-z0-9/+=]{40})['"]?/gi,
|
|
46
|
+
severity: 'critical',
|
|
47
|
+
replacement: () => 'process.env.AWS_SECRET_ACCESS_KEY',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'GitHub Token',
|
|
51
|
+
pattern: /gh[pousr]_[A-Za-z0-9_]{36,}/g,
|
|
52
|
+
severity: 'critical',
|
|
53
|
+
replacement: () => 'process.env.GITHUB_TOKEN',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'Stripe API Key',
|
|
57
|
+
pattern: /(?:sk|rk)_(?:test|live)_[a-zA-Z0-9]{24,}/g,
|
|
58
|
+
severity: 'critical',
|
|
59
|
+
replacement: () => 'process.env.STRIPE_SECRET_KEY',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'Slack Token',
|
|
63
|
+
pattern: /xox[bporas]-[0-9]{12}-[0-9]{12,}-[a-zA-Z0-9]{24,}/g,
|
|
64
|
+
severity: 'critical',
|
|
65
|
+
replacement: () => 'process.env.SLACK_TOKEN',
|
|
66
|
+
},
|
|
67
|
+
// Private Keys
|
|
68
|
+
{
|
|
69
|
+
name: 'RSA Private Key',
|
|
70
|
+
pattern: /-----BEGIN (?:RSA )?PRIVATE KEY-----/g,
|
|
71
|
+
severity: 'critical',
|
|
72
|
+
replacement: () => 'process.env.PRIVATE_KEY_PATH',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'SSH Private Key',
|
|
76
|
+
pattern: /-----BEGIN OPENSSH PRIVATE KEY-----/g,
|
|
77
|
+
severity: 'critical',
|
|
78
|
+
replacement: () => 'process.env.SSH_PRIVATE_KEY_PATH',
|
|
79
|
+
},
|
|
80
|
+
// Connection Strings
|
|
81
|
+
{
|
|
82
|
+
name: 'Database Connection URL',
|
|
83
|
+
pattern: /(?:mongodb|postgres|mysql|redis|amqp):\/\/[^\s"']+:[^\s"']+@[^\s"']+/gi,
|
|
84
|
+
severity: 'high',
|
|
85
|
+
replacement: () => 'process.env.DATABASE_URL',
|
|
86
|
+
},
|
|
87
|
+
// Passwords
|
|
88
|
+
{
|
|
89
|
+
name: 'Hardcoded Password',
|
|
90
|
+
pattern: /(?:password|passwd|pwd)\s*[=:]\s*['"][^'"]{8,}['"]/gi,
|
|
91
|
+
severity: 'high',
|
|
92
|
+
replacement: () => 'process.env.PASSWORD',
|
|
93
|
+
},
|
|
94
|
+
// JWT
|
|
95
|
+
{
|
|
96
|
+
name: 'JWT Token',
|
|
97
|
+
pattern: /eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*/g,
|
|
98
|
+
severity: 'high',
|
|
99
|
+
replacement: () => 'process.env.JWT_TOKEN',
|
|
100
|
+
},
|
|
101
|
+
// Generic secrets
|
|
102
|
+
{
|
|
103
|
+
name: 'Generic API Key Pattern',
|
|
104
|
+
pattern: /(?:api[_-]?key|apikey|secret[_-]?key|access[_-]?token)\s*[=:]\s*['"][a-zA-Z0-9_-]{16,}['"]/gi,
|
|
105
|
+
severity: 'medium',
|
|
106
|
+
replacement: () => 'process.env.API_KEY',
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
export class SecretScanner {
|
|
110
|
+
patterns;
|
|
111
|
+
constructor(customPatterns) {
|
|
112
|
+
this.patterns = [...SECRET_PATTERNS, ...(customPatterns ?? [])];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Scan content for secrets
|
|
116
|
+
*/
|
|
117
|
+
scan(content, fileName = 'unknown') {
|
|
118
|
+
const matches = [];
|
|
119
|
+
const lines = content.split('\n');
|
|
120
|
+
for (const pattern of this.patterns) {
|
|
121
|
+
// Reset regex state
|
|
122
|
+
pattern.pattern.lastIndex = 0;
|
|
123
|
+
let match;
|
|
124
|
+
while ((match = pattern.pattern.exec(content)) !== null) {
|
|
125
|
+
const beforeMatch = content.slice(0, match.index);
|
|
126
|
+
const lineNumber = beforeMatch.split('\n').length;
|
|
127
|
+
const lineStart = beforeMatch.lastIndexOf('\n') + 1;
|
|
128
|
+
const column = match.index - lineStart;
|
|
129
|
+
matches.push({
|
|
130
|
+
pattern: pattern.name,
|
|
131
|
+
file: fileName,
|
|
132
|
+
line: lineNumber,
|
|
133
|
+
column,
|
|
134
|
+
value: this.redactValue(match[0]),
|
|
135
|
+
replacement: pattern.replacement(match[0]),
|
|
136
|
+
severity: pattern.severity,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return matches;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Scan content and return cleaned version
|
|
144
|
+
*/
|
|
145
|
+
scanAndReplace(content, fileName = 'unknown') {
|
|
146
|
+
let cleaned = content;
|
|
147
|
+
const matches = this.scan(content, fileName);
|
|
148
|
+
// Sort by position descending to replace from end to start (preserves positions)
|
|
149
|
+
const sortedMatches = [...matches].sort((a, b) => {
|
|
150
|
+
if (a.line !== b.line)
|
|
151
|
+
return b.line - a.line;
|
|
152
|
+
return b.column - a.column;
|
|
153
|
+
});
|
|
154
|
+
for (const m of sortedMatches) {
|
|
155
|
+
// Find the original match in the cleaned content
|
|
156
|
+
for (const pattern of this.patterns) {
|
|
157
|
+
if (pattern.name === m.pattern) {
|
|
158
|
+
cleaned = cleaned.replace(pattern.pattern, pattern.replacement(''));
|
|
159
|
+
pattern.pattern.lastIndex = 0;
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return { cleaned, matches };
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Quick check if content contains any secrets
|
|
168
|
+
*/
|
|
169
|
+
hasSecrets(content) {
|
|
170
|
+
for (const pattern of this.patterns) {
|
|
171
|
+
pattern.pattern.lastIndex = 0;
|
|
172
|
+
if (pattern.pattern.test(content)) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Redact a secret value for display (show first/last chars only)
|
|
180
|
+
*/
|
|
181
|
+
redactValue(value) {
|
|
182
|
+
if (value.length <= 8)
|
|
183
|
+
return '***REDACTED***';
|
|
184
|
+
return `${value.slice(0, 4)}...${value.slice(-4)}`;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=secret-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-scanner.js","sourceRoot":"","sources":["../../src/quality/secret-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,eAAe,GAAoB;IACvC,WAAW;IACX;QACE,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,4BAA4B;QACrC,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,+BAA+B;KACnD;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,6BAA6B;QACtC,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,4BAA4B;KAChD;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,sBAAsB;QAC/B,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,4BAA4B;KAChD;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,wBAAwB;QACjC,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,4BAA4B;KAChD;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,uBAAuB;QAChC,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,0BAA0B;KAC9C;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,mBAAmB;QAC5B,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,+BAA+B;KACnD;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,gFAAgF;QACzF,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,mCAAmC;KACvD;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,8BAA8B;QACvC,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,0BAA0B;KAC9C;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,2CAA2C;QACpD,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,+BAA+B;KACnD;IACD;QACE,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,oDAAoD;QAC7D,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,yBAAyB;KAC7C;IACD,eAAe;IACf;QACE,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,uCAAuC;QAChD,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,8BAA8B;KAClD;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,sCAAsC;QAC/C,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,kCAAkC;KACtD;IACD,qBAAqB;IACrB;QACE,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,wEAAwE;QACjF,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,GAAG,EAAE,CAAC,0BAA0B;KAC9C;IACD,YAAY;IACZ;QACE,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,sDAAsD;QAC/D,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,GAAG,EAAE,CAAC,sBAAsB;KAC1C;IACD,MAAM;IACN;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,uDAAuD;QAChE,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,GAAG,EAAE,CAAC,uBAAuB;KAC3C;IACD,kBAAkB;IAClB;QACE,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,8FAA8F;QACvG,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,GAAG,EAAE,CAAC,qBAAqB;KACzC;CACF,CAAC;AAEF,MAAM,OAAO,aAAa;IAChB,QAAQ,CAAkB;IAElC,YAAY,cAAgC;QAC1C,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe,EAAE,QAAQ,GAAG,SAAS;QACxC,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,oBAAoB;YACpB,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;YAE9B,IAAI,KAA6B,CAAC;YAClC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACxD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAClD,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;gBAEvC,OAAO,CAAC,IAAI,CAAC;oBACX,OAAO,EAAE,OAAO,CAAC,IAAI;oBACrB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,UAAU;oBAChB,MAAM;oBACN,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACjC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC1C,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC3B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,OAAe,EAAE,QAAQ,GAAG,SAAS;QAClD,IAAI,OAAO,GAAG,OAAO,CAAC;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE7C,iFAAiF;QACjF,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/C,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YAC9C,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;YAC9B,iDAAiD;YACjD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;oBAC/B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;oBACpE,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;oBAC9B,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAe;QACxB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;YAC9B,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAa;QAC/B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,gBAAgB,CAAC;QAC/C,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAyB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI — Schema Registry
|
|
3
|
+
* Manages JSON Schema definitions for structured AI output validation.
|
|
4
|
+
* Supports prebuilt schemas and custom user schemas.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
export interface SchemaDefinition {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
version: string;
|
|
11
|
+
schema: Record<string, unknown>;
|
|
12
|
+
examples?: unknown[];
|
|
13
|
+
tags?: string[];
|
|
14
|
+
}
|
|
15
|
+
export declare class SchemaRegistry {
|
|
16
|
+
private schemas;
|
|
17
|
+
private projectRoot;
|
|
18
|
+
private customSchemaDir;
|
|
19
|
+
constructor(projectRoot: string);
|
|
20
|
+
/**
|
|
21
|
+
* Load prebuilt schemas
|
|
22
|
+
*/
|
|
23
|
+
private loadPrebuilt;
|
|
24
|
+
/**
|
|
25
|
+
* Load custom schemas from project directory
|
|
26
|
+
*/
|
|
27
|
+
loadCustomSchemas(): Promise<number>;
|
|
28
|
+
/**
|
|
29
|
+
* Register a schema
|
|
30
|
+
*/
|
|
31
|
+
register(schema: SchemaDefinition): void;
|
|
32
|
+
/**
|
|
33
|
+
* Get a schema by name
|
|
34
|
+
*/
|
|
35
|
+
get(name: string): SchemaDefinition | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* List all available schemas
|
|
38
|
+
*/
|
|
39
|
+
list(): SchemaDefinition[];
|
|
40
|
+
/**
|
|
41
|
+
* Search schemas by name or tag
|
|
42
|
+
*/
|
|
43
|
+
search(query: string): SchemaDefinition[];
|
|
44
|
+
/**
|
|
45
|
+
* Validate data against a schema
|
|
46
|
+
*/
|
|
47
|
+
validate(schemaName: string, data: unknown): {
|
|
48
|
+
valid: boolean;
|
|
49
|
+
errors: string[];
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Generate a prompt instruction for structured output
|
|
53
|
+
*/
|
|
54
|
+
getPromptInstruction(schemaName: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* Save a custom schema to disk
|
|
57
|
+
*/
|
|
58
|
+
saveSchema(schema: SchemaDefinition): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Remove a schema
|
|
61
|
+
*/
|
|
62
|
+
remove(name: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Convert a Zod schema to JSON Schema (basic)
|
|
65
|
+
*/
|
|
66
|
+
static fromZod(name: string, description: string, zodSchema: z.ZodType): SchemaDefinition;
|
|
67
|
+
/**
|
|
68
|
+
* Basic recursive JSON Schema validation
|
|
69
|
+
*/
|
|
70
|
+
private validateValue;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/schemas/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAS;gBAEpB,WAAW,EAAE,MAAM;IAM/B;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAuB1C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAIxC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI/C;;OAEG;IACH,IAAI,IAAI,gBAAgB,EAAE;IAI1B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAUzC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAWjF;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAqBhD;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAazD;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,GAAG,gBAAgB;IAMzF;;OAEG;IACH,OAAO,CAAC,aAAa;CAmDtB"}
|