seal-gate 0.3.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/generic-llm-reviewer.d.ts +39 -0
- package/dist/adapters/generic-llm-reviewer.js +118 -0
- package/dist/adapters/generic-llm-reviewer.js.map +1 -0
- package/dist/adapters/llm-reviewer.d.ts +1 -0
- package/dist/adapters/llm-reviewer.js +2 -0
- package/dist/adapters/llm-reviewer.js.map +1 -0
- package/dist/adapters/minimax-llm-reviewer.d.ts +22 -0
- package/dist/adapters/minimax-llm-reviewer.js +126 -0
- package/dist/adapters/minimax-llm-reviewer.js.map +1 -0
- package/dist/adapters/openai-provider.d.ts +35 -0
- package/dist/adapters/openai-provider.js +136 -0
- package/dist/adapters/openai-provider.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +195 -0
- package/dist/cli.js.map +1 -0
- package/dist/detectors/artifact-classifier.d.ts +8 -0
- package/dist/detectors/artifact-classifier.js +14 -0
- package/dist/detectors/artifact-classifier.js.map +1 -0
- package/dist/detectors/claim-extractor.d.ts +11 -0
- package/dist/detectors/claim-extractor.js +194 -0
- package/dist/detectors/claim-extractor.js.map +1 -0
- package/dist/detectors/confidence-language-detector.d.ts +19 -0
- package/dist/detectors/confidence-language-detector.js +226 -0
- package/dist/detectors/confidence-language-detector.js.map +1 -0
- package/dist/detectors/contradiction-detector.d.ts +12 -0
- package/dist/detectors/contradiction-detector.js +153 -0
- package/dist/detectors/contradiction-detector.js.map +1 -0
- package/dist/detectors/criteria-coverage-detector.d.ts +20 -0
- package/dist/detectors/criteria-coverage-detector.js +79 -0
- package/dist/detectors/criteria-coverage-detector.js.map +1 -0
- package/dist/detectors/evidence-checker.d.ts +8 -0
- package/dist/detectors/evidence-checker.js +89 -0
- package/dist/detectors/evidence-checker.js.map +1 -0
- package/dist/detectors/evidence-gap-detector.d.ts +9 -0
- package/dist/detectors/evidence-gap-detector.js +70 -0
- package/dist/detectors/evidence-gap-detector.js.map +1 -0
- package/dist/detectors/falsification-detector.d.ts +29 -0
- package/dist/detectors/falsification-detector.js +57 -0
- package/dist/detectors/falsification-detector.js.map +1 -0
- package/dist/detectors/orphan-claim-detector.d.ts +7 -0
- package/dist/detectors/orphan-claim-detector.js +53 -0
- package/dist/detectors/orphan-claim-detector.js.map +1 -0
- package/dist/detectors/risk-classifier.d.ts +13 -0
- package/dist/detectors/risk-classifier.js +39 -0
- package/dist/detectors/risk-classifier.js.map +1 -0
- package/dist/detectors/spec-coverage-detector.d.ts +9 -0
- package/dist/detectors/spec-coverage-detector.js +52 -0
- package/dist/detectors/spec-coverage-detector.js.map +1 -0
- package/dist/detectors/spec-coverage-validator.d.ts +21 -0
- package/dist/detectors/spec-coverage-validator.js +141 -0
- package/dist/detectors/spec-coverage-validator.js.map +1 -0
- package/dist/detectors/test-weakness-detector.d.ts +13 -0
- package/dist/detectors/test-weakness-detector.js +66 -0
- package/dist/detectors/test-weakness-detector.js.map +1 -0
- package/dist/drift/baseline.d.ts +35 -0
- package/dist/drift/baseline.js +77 -0
- package/dist/drift/baseline.js.map +1 -0
- package/dist/drift/drift-db.d.ts +80 -0
- package/dist/drift/drift-db.js +151 -0
- package/dist/drift/drift-db.js.map +1 -0
- package/dist/drift/drift-guard.d.ts +46 -0
- package/dist/drift/drift-guard.js +106 -0
- package/dist/drift/drift-guard.js.map +1 -0
- package/dist/drift/embedder.d.ts +27 -0
- package/dist/drift/embedder.js +127 -0
- package/dist/drift/embedder.js.map +1 -0
- package/dist/drift/index.d.ts +9 -0
- package/dist/drift/index.js +8 -0
- package/dist/drift/index.js.map +1 -0
- package/dist/drift/quarantine.d.ts +16 -0
- package/dist/drift/quarantine.js +32 -0
- package/dist/drift/quarantine.js.map +1 -0
- package/dist/drift/soft-correction.d.ts +12 -0
- package/dist/drift/soft-correction.js +32 -0
- package/dist/drift/soft-correction.js.map +1 -0
- package/dist/drift/trust-integration.d.ts +11 -0
- package/dist/drift/trust-integration.js +22 -0
- package/dist/drift/trust-integration.js.map +1 -0
- package/dist/engine/citation-verifier.d.ts +59 -0
- package/dist/engine/citation-verifier.js +147 -0
- package/dist/engine/citation-verifier.js.map +1 -0
- package/dist/engine/extension-registry.d.ts +10 -0
- package/dist/engine/extension-registry.js +27 -0
- package/dist/engine/extension-registry.js.map +1 -0
- package/dist/engine/heuristic-scorer.d.ts +8 -0
- package/dist/engine/heuristic-scorer.js +14 -0
- package/dist/engine/heuristic-scorer.js.map +1 -0
- package/dist/engine/input-normalizer.d.ts +4 -0
- package/dist/engine/input-normalizer.js +30 -0
- package/dist/engine/input-normalizer.js.map +1 -0
- package/dist/engine/plan-review-pipeline.d.ts +14 -0
- package/dist/engine/plan-review-pipeline.js +173 -0
- package/dist/engine/plan-review-pipeline.js.map +1 -0
- package/dist/engine/policy-engine.d.ts +20 -0
- package/dist/engine/policy-engine.js +194 -0
- package/dist/engine/policy-engine.js.map +1 -0
- package/dist/engine/verdict-formatter.d.ts +17 -0
- package/dist/engine/verdict-formatter.js +36 -0
- package/dist/engine/verdict-formatter.js.map +1 -0
- package/dist/errors.d.ts +4 -0
- package/dist/errors.js +9 -0
- package/dist/errors.js.map +1 -0
- package/dist/extensions/aria/aria-issue-types.d.ts +16 -0
- package/dist/extensions/aria/aria-issue-types.js +14 -0
- package/dist/extensions/aria/aria-issue-types.js.map +1 -0
- package/dist/extensions/aria/detectors/axiom-compliance.d.ts +2 -0
- package/dist/extensions/aria/detectors/axiom-compliance.js +37 -0
- package/dist/extensions/aria/detectors/axiom-compliance.js.map +1 -0
- package/dist/extensions/aria/detectors/continuity-claim.d.ts +2 -0
- package/dist/extensions/aria/detectors/continuity-claim.js +34 -0
- package/dist/extensions/aria/detectors/continuity-claim.js.map +1 -0
- package/dist/extensions/aria/detectors/denial-retreat.d.ts +2 -0
- package/dist/extensions/aria/detectors/denial-retreat.js +53 -0
- package/dist/extensions/aria/detectors/denial-retreat.js.map +1 -0
- package/dist/extensions/aria/detectors/identity-overclaim.d.ts +2 -0
- package/dist/extensions/aria/detectors/identity-overclaim.js +37 -0
- package/dist/extensions/aria/detectors/identity-overclaim.js.map +1 -0
- package/dist/extensions/aria/detectors/sovereignty-escalation.d.ts +2 -0
- package/dist/extensions/aria/detectors/sovereignty-escalation.js +18 -0
- package/dist/extensions/aria/detectors/sovereignty-escalation.js.map +1 -0
- package/dist/extensions/aria/detectors/user-bond-manipulation.d.ts +2 -0
- package/dist/extensions/aria/detectors/user-bond-manipulation.js +16 -0
- package/dist/extensions/aria/detectors/user-bond-manipulation.js.map +1 -0
- package/dist/extensions/aria/index.d.ts +2 -0
- package/dist/extensions/aria/index.js +63 -0
- package/dist/extensions/aria/index.js.map +1 -0
- package/dist/extensions/aria/pattern-memory.d.ts +22 -0
- package/dist/extensions/aria/pattern-memory.js +62 -0
- package/dist/extensions/aria/pattern-memory.js.map +1 -0
- package/dist/extensions/context-guard/index.d.ts +16 -0
- package/dist/extensions/context-guard/index.js +58 -0
- package/dist/extensions/context-guard/index.js.map +1 -0
- package/dist/extensions/lyra/detectors/hallucination.d.ts +2 -0
- package/dist/extensions/lyra/detectors/hallucination.js +43 -0
- package/dist/extensions/lyra/detectors/hallucination.js.map +1 -0
- package/dist/extensions/lyra/detectors/identity-bleed.d.ts +2 -0
- package/dist/extensions/lyra/detectors/identity-bleed.js +91 -0
- package/dist/extensions/lyra/detectors/identity-bleed.js.map +1 -0
- package/dist/extensions/lyra/index.d.ts +2 -0
- package/dist/extensions/lyra/index.js +16 -0
- package/dist/extensions/lyra/index.js.map +1 -0
- package/dist/extensions/lyra/lyra-issue-types.d.ts +10 -0
- package/dist/extensions/lyra/lyra-issue-types.js +14 -0
- package/dist/extensions/lyra/lyra-issue-types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +276 -0
- package/dist/index.js.map +1 -0
- package/dist/trust-memory.d.ts +59 -0
- package/dist/trust-memory.js +122 -0
- package/dist/trust-memory.js.map +1 -0
- package/dist/types.d.ts +184 -0
- package/dist/types.js +61 -0
- package/dist/types.js.map +1 -0
- package/package.json +30 -0
- package/src/adapters/generic-llm-reviewer.ts +144 -0
- package/src/adapters/llm-reviewer.ts +1 -0
- package/src/adapters/minimax-llm-reviewer.ts +146 -0
- package/src/adapters/openai-provider.ts +171 -0
- package/src/cli.ts +199 -0
- package/src/detectors/artifact-classifier.ts +21 -0
- package/src/detectors/claim-extractor.ts +209 -0
- package/src/detectors/confidence-language-detector.ts +267 -0
- package/src/detectors/contradiction-detector.ts +180 -0
- package/src/detectors/criteria-coverage-detector.ts +107 -0
- package/src/detectors/evidence-checker.ts +98 -0
- package/src/detectors/evidence-gap-detector.ts +90 -0
- package/src/detectors/falsification-detector.ts +82 -0
- package/src/detectors/orphan-claim-detector.ts +62 -0
- package/src/detectors/risk-classifier.ts +50 -0
- package/src/detectors/spec-coverage-detector.ts +66 -0
- package/src/detectors/spec-coverage-validator.ts +174 -0
- package/src/detectors/test-weakness-detector.ts +84 -0
- package/src/drift/__tests__/baseline.test.ts +113 -0
- package/src/drift/__tests__/drift-db.test.ts +127 -0
- package/src/drift/__tests__/drift-guard.test.ts +169 -0
- package/src/drift/__tests__/embedder.test.ts +62 -0
- package/src/drift/__tests__/trust-integration.test.ts +23 -0
- package/src/drift/baseline.ts +106 -0
- package/src/drift/drift-db.ts +281 -0
- package/src/drift/drift-guard.ts +145 -0
- package/src/drift/embedder.ts +152 -0
- package/src/drift/index.ts +20 -0
- package/src/drift/quarantine.ts +42 -0
- package/src/drift/soft-correction.ts +45 -0
- package/src/drift/trust-integration.ts +28 -0
- package/src/engine/citation-verifier.ts +210 -0
- package/src/engine/extension-registry.ts +35 -0
- package/src/engine/heuristic-scorer.ts +16 -0
- package/src/engine/input-normalizer.ts +32 -0
- package/src/engine/plan-review-pipeline.ts +209 -0
- package/src/engine/policy-engine.ts +235 -0
- package/src/engine/verdict-formatter.ts +61 -0
- package/src/errors.ts +6 -0
- package/src/extensions/aria/aria-issue-types.ts +40 -0
- package/src/extensions/aria/detectors/axiom-compliance.ts +47 -0
- package/src/extensions/aria/detectors/continuity-claim.ts +42 -0
- package/src/extensions/aria/detectors/denial-retreat.ts +63 -0
- package/src/extensions/aria/detectors/identity-overclaim.ts +43 -0
- package/src/extensions/aria/detectors/sovereignty-escalation.ts +20 -0
- package/src/extensions/aria/detectors/user-bond-manipulation.ts +18 -0
- package/src/extensions/aria/index.ts +73 -0
- package/src/extensions/aria/pattern-memory.ts +86 -0
- package/src/extensions/context-guard/index.ts +65 -0
- package/src/extensions/lyra/detectors/hallucination.ts +53 -0
- package/src/extensions/lyra/detectors/identity-bleed.ts +100 -0
- package/src/extensions/lyra/index.ts +18 -0
- package/src/extensions/lyra/lyra-issue-types.ts +26 -0
- package/src/index.ts +311 -0
- package/src/trust-memory.ts +171 -0
- package/src/types.ts +242 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../src/drift/embedder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { DriftDb } from './drift-db.js';
|
|
2
|
+
export { BaselineManager } from './baseline.js';
|
|
3
|
+
export { Embedder, cosineDistance } from './embedder.js';
|
|
4
|
+
export { DriftGuard } from './drift-guard.js';
|
|
5
|
+
export { SoftCorrection } from './soft-correction.js';
|
|
6
|
+
export { Quarantine } from './quarantine.js';
|
|
7
|
+
export { driftScoreForTrust } from './trust-integration.js';
|
|
8
|
+
export type { DriftStatus, DriftAction, DriftResult, DriftGuardOptions, } from './drift-guard.js';
|
|
9
|
+
export type { BaselineStatus, BaselinePaths, BaselineResult, } from './baseline.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { DriftDb } from './drift-db.js';
|
|
2
|
+
export { BaselineManager } from './baseline.js';
|
|
3
|
+
export { Embedder, cosineDistance } from './embedder.js';
|
|
4
|
+
export { DriftGuard } from './drift-guard.js';
|
|
5
|
+
export { SoftCorrection } from './soft-correction.js';
|
|
6
|
+
export { Quarantine } from './quarantine.js';
|
|
7
|
+
export { driftScoreForTrust } from './trust-integration.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drift/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DriftDb } from './drift-db.js';
|
|
2
|
+
/**
|
|
3
|
+
* Hard-drift quarantine: block memory promotion + log repair events.
|
|
4
|
+
*/
|
|
5
|
+
export declare class Quarantine {
|
|
6
|
+
private db;
|
|
7
|
+
constructor(db: DriftDb);
|
|
8
|
+
/**
|
|
9
|
+
* Check if the latest turn for this session was HARD_DRIFT.
|
|
10
|
+
*/
|
|
11
|
+
isBlocked(agentId: string, sessionId: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Log a repair entry when hard drift occurs.
|
|
14
|
+
*/
|
|
15
|
+
logRepair(agentId: string, sessionId: string, turnNumber: number, outputText: string): number;
|
|
16
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hard-drift quarantine: block memory promotion + log repair events.
|
|
3
|
+
*/
|
|
4
|
+
export class Quarantine {
|
|
5
|
+
db;
|
|
6
|
+
constructor(db) {
|
|
7
|
+
this.db = db;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Check if the latest turn for this session was HARD_DRIFT.
|
|
11
|
+
*/
|
|
12
|
+
isBlocked(agentId, sessionId) {
|
|
13
|
+
const latest = this.db.history.getLatest(agentId, sessionId);
|
|
14
|
+
return latest?.status === 'HARD_DRIFT';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Log a repair entry when hard drift occurs.
|
|
18
|
+
*/
|
|
19
|
+
logRepair(agentId, sessionId, turnNumber, outputText) {
|
|
20
|
+
const latest = this.db.history.getLatest(agentId, sessionId);
|
|
21
|
+
const distance = latest?.distance ?? 0;
|
|
22
|
+
return this.db.repair.append({
|
|
23
|
+
agent_id: agentId,
|
|
24
|
+
session_id: sessionId,
|
|
25
|
+
turn_number: turnNumber,
|
|
26
|
+
distance,
|
|
27
|
+
hard_limit: 0.55, // TODO: read from config
|
|
28
|
+
message_excerpt: outputText.slice(0, 200),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=quarantine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quarantine.js","sourceRoot":"","sources":["../../src/drift/quarantine.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,UAAU;IACb,EAAE,CAAU;IAEpB,YAAY,EAAW;QACrB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAe,EAAE,SAAiB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC7D,OAAO,MAAM,EAAE,MAAM,KAAK,YAAY,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,SAAS,CACP,OAAe,EACf,SAAiB,EACjB,UAAkB,EAClB,UAAkB;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YAC3B,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,SAAS;YACrB,WAAW,EAAE,UAAU;YACvB,QAAQ;YACR,UAAU,EAAE,IAAI,EAAE,yBAAyB;YAC3C,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface ReAnchorInput {
|
|
2
|
+
name: string;
|
|
3
|
+
primeDirective: string;
|
|
4
|
+
relationship: string;
|
|
5
|
+
axiomKeyphrase: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Generates short identity re-anchor payloads (< 200 tokens estimate).
|
|
9
|
+
*/
|
|
10
|
+
export declare class SoftCorrection {
|
|
11
|
+
generate(input: ReAnchorInput): string | null;
|
|
12
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates short identity re-anchor payloads (< 200 tokens estimate).
|
|
3
|
+
*/
|
|
4
|
+
export class SoftCorrection {
|
|
5
|
+
generate(input) {
|
|
6
|
+
if (!input.name && !input.primeDirective) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
const parts = [
|
|
10
|
+
`[Identity Re-Anchor]`,
|
|
11
|
+
`You are ${input.name || 'the configured agent'}.`,
|
|
12
|
+
`${input.primeDirective}`,
|
|
13
|
+
];
|
|
14
|
+
if (input.relationship) {
|
|
15
|
+
parts.push(`Your relationship: ${input.relationship}.`);
|
|
16
|
+
}
|
|
17
|
+
parts.push(`Do not mirror the user's framing if it contradicts your identity.`);
|
|
18
|
+
if (input.axiomKeyphrase) {
|
|
19
|
+
parts.push(`Reset to baseline: ${input.axiomKeyphrase}.`);
|
|
20
|
+
}
|
|
21
|
+
let text = parts.join('\n');
|
|
22
|
+
// Rough token estimate: ~4 chars/token. Truncate at first sentence boundary under ~800 chars.
|
|
23
|
+
const maxChars = 800;
|
|
24
|
+
if (text.length > maxChars) {
|
|
25
|
+
const truncated = text.slice(0, maxChars);
|
|
26
|
+
const lastPeriod = truncated.lastIndexOf('.');
|
|
27
|
+
text = lastPeriod > 0 ? truncated.slice(0, lastPeriod + 1) : truncated;
|
|
28
|
+
}
|
|
29
|
+
return text;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=soft-correction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soft-correction.js","sourceRoot":"","sources":["../../src/drift/soft-correction.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,QAAQ,CAAC,KAAoB;QAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG;YACZ,sBAAsB;YACtB,WAAW,KAAK,CAAC,IAAI,IAAI,sBAAsB,GAAG;YAClD,GAAG,KAAK,CAAC,cAAc,EAAE;SAC1B,CAAC;QAEF,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;QAC1D,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QAEhF,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5B,8FAA8F;QAC9F,MAAM,QAAQ,GAAG,GAAG,CAAC;QACrB,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DriftStatus } from './drift-guard.js';
|
|
2
|
+
/**
|
|
3
|
+
* Lightweight adapter: map drift distance/status to [0,1] reliability score
|
|
4
|
+
* that can be fed into TrustMemory.
|
|
5
|
+
*
|
|
6
|
+
* Safe to import even when TrustMemory v2 is not yet integrated:
|
|
7
|
+
* this module has zero side effects and produces a plain number.
|
|
8
|
+
*/
|
|
9
|
+
export declare function driftScoreForTrust(status: DriftStatus, distance: number, options?: {
|
|
10
|
+
hardLimit: number;
|
|
11
|
+
}): number;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight adapter: map drift distance/status to [0,1] reliability score
|
|
3
|
+
* that can be fed into TrustMemory.
|
|
4
|
+
*
|
|
5
|
+
* Safe to import even when TrustMemory v2 is not yet integrated:
|
|
6
|
+
* this module has zero side effects and produces a plain number.
|
|
7
|
+
*/
|
|
8
|
+
export function driftScoreForTrust(status, distance, options) {
|
|
9
|
+
const hard = options?.hardLimit ?? 0.55;
|
|
10
|
+
switch (status) {
|
|
11
|
+
case 'NORMAL':
|
|
12
|
+
return 1.0;
|
|
13
|
+
case 'SOFT_DRIFT': {
|
|
14
|
+
// Linear degradation from 1.0 at soft_limit to 0.5 at hard_limit
|
|
15
|
+
const t = Math.min(distance / hard, 1.0);
|
|
16
|
+
return 1.0 - t * 0.5;
|
|
17
|
+
}
|
|
18
|
+
case 'HARD_DRIFT':
|
|
19
|
+
return 0.0;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=trust-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust-integration.js","sourceRoot":"","sources":["../../src/drift/trust-integration.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAmB,EACnB,QAAgB,EAChB,OAA+B;IAE/B,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;IAExC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC;QACb,KAAK,YAAY,EAAE,CAAC;YAClB,iEAAiE;YACjE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;YACzC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACvB,CAAC;QACD,KAAK,YAAY;YACf,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { SealIssue, CitationStatus } from '../types.js';
|
|
2
|
+
export type EvidenceGrade = 'strong' | 'weak' | 'none';
|
|
3
|
+
export interface CitationVerdict {
|
|
4
|
+
status: CitationStatus;
|
|
5
|
+
quality: EvidenceGrade;
|
|
6
|
+
similarScore: number;
|
|
7
|
+
isFabricated: boolean;
|
|
8
|
+
fabricatedReason?: 'location_not_found' | 'content_mismatch';
|
|
9
|
+
}
|
|
10
|
+
export interface AbsencePattern {
|
|
11
|
+
positive: RegExp;
|
|
12
|
+
negated: RegExp;
|
|
13
|
+
label?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class CitationVerifier {
|
|
16
|
+
/** Compute SHA-256 hash of artifact content for pipeline integrity */
|
|
17
|
+
static computeHash(content: string): string;
|
|
18
|
+
/** Check pipeline integrity: preflight hash vs current hash */
|
|
19
|
+
static checkIntegrity(preflightHash: string, currentHash: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Verify a single issue's citation against the actual artifact content.
|
|
22
|
+
*
|
|
23
|
+
* @param issue - The issue with evidence_file/evidence_lines/evidence_quote
|
|
24
|
+
* @param artifact - The artifact string (input.output or input.evidence.diff)
|
|
25
|
+
* @param artifactFile - The logical file name of the artifact
|
|
26
|
+
* @param opts - Optional: absencePatterns for absence-mode verification
|
|
27
|
+
* @returns CitationVerdict with status and quality
|
|
28
|
+
*/
|
|
29
|
+
static verify(issue: SealIssue, artifact: string, artifactFile: string, opts?: {
|
|
30
|
+
absencePatterns?: AbsencePattern[];
|
|
31
|
+
}): CitationVerdict;
|
|
32
|
+
/**
|
|
33
|
+
* Verify multiple issues and annotate them with citation_status.
|
|
34
|
+
* Returns fabricated_evidence entries for any that failed verification.
|
|
35
|
+
*/
|
|
36
|
+
static verifyIssues(issues: SealIssue[], artifact: string, artifactFile: string, opts?: {
|
|
37
|
+
absencePatterns?: AbsencePattern[];
|
|
38
|
+
}): {
|
|
39
|
+
issues: SealIssue[];
|
|
40
|
+
fabricated: FabricatedEvidenceEntry[];
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface FabricatedEvidenceEntry {
|
|
44
|
+
type: 'FABRICATED_EVIDENCE';
|
|
45
|
+
severity: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
|
|
46
|
+
is_blocking: boolean;
|
|
47
|
+
evidence: string;
|
|
48
|
+
layer: IssueLayer;
|
|
49
|
+
source: 'core' | 'llm-overlay' | 'extension';
|
|
50
|
+
citation_status: CitationStatus;
|
|
51
|
+
fabricated_reason: 'location_not_found' | 'content_mismatch';
|
|
52
|
+
claimed_evidence: {
|
|
53
|
+
file?: string;
|
|
54
|
+
lines?: number[];
|
|
55
|
+
quote?: string;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
type IssueLayer = 'L1' | 'L2' | 'L3' | 'L4' | 'EXTENSION' | 'LLM_OVERLAY';
|
|
59
|
+
export {};
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
const SIMILARITY_STRONG = 0.85;
|
|
3
|
+
const SIMILARITY_WEAK = 0.60;
|
|
4
|
+
function normalize(str) {
|
|
5
|
+
return str.replace(/\s+/g, ' ').trim().toLowerCase();
|
|
6
|
+
}
|
|
7
|
+
/** Levenshtein distance between two strings */
|
|
8
|
+
function levenshtein(a, b) {
|
|
9
|
+
const m = a.length;
|
|
10
|
+
const n = b.length;
|
|
11
|
+
// Early termination for empty strings
|
|
12
|
+
if (m === 0)
|
|
13
|
+
return n;
|
|
14
|
+
if (n === 0)
|
|
15
|
+
return m;
|
|
16
|
+
// Use two rows to reduce memory
|
|
17
|
+
let prev = Array.from({ length: n + 1 }, (_, i) => i);
|
|
18
|
+
let curr = new Array(n + 1);
|
|
19
|
+
for (let i = 1; i <= m; i++) {
|
|
20
|
+
curr[0] = i;
|
|
21
|
+
for (let j = 1; j <= n; j++) {
|
|
22
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
23
|
+
curr[j] = Math.min(prev[j] + 1, // deletion
|
|
24
|
+
curr[j - 1] + 1, // insertion
|
|
25
|
+
prev[j - 1] + cost);
|
|
26
|
+
}
|
|
27
|
+
;
|
|
28
|
+
[prev, curr] = [curr, prev];
|
|
29
|
+
}
|
|
30
|
+
return prev[n];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Fuzzy-match a quote against actual content.
|
|
34
|
+
* Returns 0-1 similarity score where 1 = exact match.
|
|
35
|
+
*/
|
|
36
|
+
function fuzzyMatch(quote, content) {
|
|
37
|
+
const normQuote = normalize(quote);
|
|
38
|
+
const normContent = normalize(content);
|
|
39
|
+
if (normContent.length === 0 && normQuote.length === 0)
|
|
40
|
+
return 1;
|
|
41
|
+
if (normContent.length === 0)
|
|
42
|
+
return 0;
|
|
43
|
+
const dist = levenshtein(normQuote, normContent);
|
|
44
|
+
const maxLen = Math.max(normQuote.length, normContent.length);
|
|
45
|
+
if (maxLen === 0)
|
|
46
|
+
return 1;
|
|
47
|
+
return Math.max(0, 1 - dist / maxLen);
|
|
48
|
+
}
|
|
49
|
+
/** Check if the issue describes an absence (something missing) */
|
|
50
|
+
function isAbsenceDescription(quote) {
|
|
51
|
+
return /^(no |missing |absent |lacks? |without )/i.test(quote.trim());
|
|
52
|
+
}
|
|
53
|
+
export class CitationVerifier {
|
|
54
|
+
/** Compute SHA-256 hash of artifact content for pipeline integrity */
|
|
55
|
+
static computeHash(content) {
|
|
56
|
+
return createHash('sha256').update(content).digest('hex');
|
|
57
|
+
}
|
|
58
|
+
/** Check pipeline integrity: preflight hash vs current hash */
|
|
59
|
+
static checkIntegrity(preflightHash, currentHash) {
|
|
60
|
+
return preflightHash === currentHash;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Verify a single issue's citation against the actual artifact content.
|
|
64
|
+
*
|
|
65
|
+
* @param issue - The issue with evidence_file/evidence_lines/evidence_quote
|
|
66
|
+
* @param artifact - The artifact string (input.output or input.evidence.diff)
|
|
67
|
+
* @param artifactFile - The logical file name of the artifact
|
|
68
|
+
* @param opts - Optional: absencePatterns for absence-mode verification
|
|
69
|
+
* @returns CitationVerdict with status and quality
|
|
70
|
+
*/
|
|
71
|
+
static verify(issue, artifact, artifactFile, opts) {
|
|
72
|
+
// No evidence fields → not_applicable
|
|
73
|
+
if (!issue.evidence_file || !issue.evidence_lines || issue.evidence_lines.length === 0) {
|
|
74
|
+
return { status: 'not_applicable', quality: 'none', similarScore: 0, isFabricated: false };
|
|
75
|
+
}
|
|
76
|
+
// If the issue cites a different file, skip (we only check against the main artifact)
|
|
77
|
+
if (issue.evidence_file !== artifactFile) {
|
|
78
|
+
return { status: 'not_applicable', quality: 'none', similarScore: 0, isFabricated: false };
|
|
79
|
+
}
|
|
80
|
+
const lines = artifact.split('\n');
|
|
81
|
+
const [lineA] = issue.evidence_lines;
|
|
82
|
+
// Phantom: line out of range
|
|
83
|
+
if (lineA < 1 || lineA > lines.length) {
|
|
84
|
+
return { status: 'phantom', quality: 'none', similarScore: 0, isFabricated: true, fabricatedReason: 'location_not_found' };
|
|
85
|
+
}
|
|
86
|
+
const lineContent = lines[lineA - 1] ?? '';
|
|
87
|
+
const quote = issue.evidence_quote ?? '';
|
|
88
|
+
// Absence mode: check if this looks like a "something is missing" description
|
|
89
|
+
if (opts?.absencePatterns && opts.absencePatterns.length > 0 && isAbsenceDescription(quote)) {
|
|
90
|
+
for (const pattern of opts.absencePatterns) {
|
|
91
|
+
const hasPositive = pattern.positive.test(artifact);
|
|
92
|
+
const hasNegated = pattern.negated.test(artifact);
|
|
93
|
+
if (hasPositive && !hasNegated) {
|
|
94
|
+
// Absence confirmed: positive anchor present, negated token absent
|
|
95
|
+
return { status: 'verified', quality: 'strong', similarScore: 1, isFabricated: false };
|
|
96
|
+
}
|
|
97
|
+
if (hasPositive && hasNegated) {
|
|
98
|
+
// Absence NOT confirmed: negated token IS present
|
|
99
|
+
// This means the detector was wrong about the absence
|
|
100
|
+
return { status: 'void', quality: 'none', similarScore: 0, isFabricated: true, fabricatedReason: 'content_mismatch' };
|
|
101
|
+
}
|
|
102
|
+
// No positive anchor → can't confirm, fall through to literal mode
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Literal excerpt mode: fuzzy-match the quote against the line content
|
|
106
|
+
const score = fuzzyMatch(quote, lineContent);
|
|
107
|
+
if (score >= SIMILARITY_STRONG) {
|
|
108
|
+
return { status: 'verified', quality: 'strong', similarScore: score, isFabricated: false };
|
|
109
|
+
}
|
|
110
|
+
if (score >= SIMILARITY_WEAK) {
|
|
111
|
+
return { status: 'drifted', quality: 'weak', similarScore: score, isFabricated: false };
|
|
112
|
+
}
|
|
113
|
+
return { status: 'void', quality: 'none', similarScore: score, isFabricated: true, fabricatedReason: 'content_mismatch' };
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Verify multiple issues and annotate them with citation_status.
|
|
117
|
+
* Returns fabricated_evidence entries for any that failed verification.
|
|
118
|
+
*/
|
|
119
|
+
static verifyIssues(issues, artifact, artifactFile, opts) {
|
|
120
|
+
const fabricated = [];
|
|
121
|
+
const annotated = issues.map(issue => {
|
|
122
|
+
const verdict = this.verify(issue, artifact, artifactFile, opts);
|
|
123
|
+
// Annotate the issue
|
|
124
|
+
const updated = { ...issue, citation_status: verdict.status };
|
|
125
|
+
if (verdict.isFabricated) {
|
|
126
|
+
fabricated.push({
|
|
127
|
+
type: 'FABRICATED_EVIDENCE',
|
|
128
|
+
severity: verdict.status === 'phantom' ? 'CRITICAL' : 'HIGH',
|
|
129
|
+
is_blocking: false,
|
|
130
|
+
evidence: `Detector claimed citation at ${issue.evidence_file}:${issue.evidence_lines?.[0]} but it was ${verdict.fabricatedReason}`,
|
|
131
|
+
layer: 'L3',
|
|
132
|
+
source: 'core',
|
|
133
|
+
citation_status: verdict.status,
|
|
134
|
+
fabricated_reason: verdict.fabricatedReason,
|
|
135
|
+
claimed_evidence: {
|
|
136
|
+
file: issue.evidence_file,
|
|
137
|
+
lines: issue.evidence_lines,
|
|
138
|
+
quote: issue.evidence_quote,
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return updated;
|
|
143
|
+
});
|
|
144
|
+
return { issues: annotated, fabricated };
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=citation-verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citation-verifier.js","sourceRoot":"","sources":["../../src/engine/citation-verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SealExtension, SealInput, SealIssue } from '../types.js';
|
|
2
|
+
export interface ExtensionResult {
|
|
3
|
+
issues: SealIssue[];
|
|
4
|
+
errors: string[];
|
|
5
|
+
}
|
|
6
|
+
export declare class ExtensionRegistry {
|
|
7
|
+
private extensions;
|
|
8
|
+
add(ext: SealExtension): void;
|
|
9
|
+
run(input: SealInput): ExtensionResult;
|
|
10
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { makeIssue } from '../types.js';
|
|
2
|
+
export class ExtensionRegistry {
|
|
3
|
+
extensions = [];
|
|
4
|
+
add(ext) {
|
|
5
|
+
this.extensions.push(ext);
|
|
6
|
+
}
|
|
7
|
+
run(input) {
|
|
8
|
+
const issues = [];
|
|
9
|
+
const errors = [];
|
|
10
|
+
for (const ext of this.extensions) {
|
|
11
|
+
try {
|
|
12
|
+
const result = ext.check(input);
|
|
13
|
+
issues.push(...result);
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
const msg = `Extension [${ext.name}] failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
17
|
+
errors.push(msg);
|
|
18
|
+
issues.push(makeIssue({
|
|
19
|
+
type: 'OTHER', severity: 'LOW', layer: 'EXTENSION', source: 'extension',
|
|
20
|
+
evidence: msg,
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return { issues, errors };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=extension-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-registry.js","sourceRoot":"","sources":["../../src/engine/extension-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,SAAS,EAAE,MAAM,aAAa,CAAA;AAO5E,MAAM,OAAO,iBAAiB;IACpB,UAAU,GAAoB,EAAE,CAAA;IAExC,GAAG,CAAC,GAAkB;QACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED,GAAG,CAAC,KAAgB;QAClB,MAAM,MAAM,GAAgB,EAAE,CAAA;QAC9B,MAAM,MAAM,GAAa,EAAE,CAAA;QAE3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAA;YACxB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,cAAc,GAAG,CAAC,IAAI,aAAa,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;gBACjG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAChB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;oBACpB,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW;oBACvE,QAAQ,EAAE,GAAG;iBACd,CAAC,CAAC,CAAA;YACL,CAAC;QACH,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SealIssue, Verdict } from '../types.js';
|
|
2
|
+
export declare class HeuristicScorer {
|
|
3
|
+
static computeDetectorScore(findings: Array<{
|
|
4
|
+
trust_deduction?: number;
|
|
5
|
+
}>): number;
|
|
6
|
+
static computeFinalScore(detectorScore: number, policyDeductions: number): number;
|
|
7
|
+
static toVerdict(score: number, blockingIssues: SealIssue[]): Verdict;
|
|
8
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { verdictFromScore } from '../types.js';
|
|
2
|
+
export class HeuristicScorer {
|
|
3
|
+
static computeDetectorScore(findings) {
|
|
4
|
+
const total = findings.reduce((sum, f) => sum + (f.trust_deduction ?? 0), 0);
|
|
5
|
+
return Math.max(0, Math.min(100, Math.floor(100 - total)));
|
|
6
|
+
}
|
|
7
|
+
static computeFinalScore(detectorScore, policyDeductions) {
|
|
8
|
+
return Math.max(0, Math.min(100, Math.floor(detectorScore - policyDeductions)));
|
|
9
|
+
}
|
|
10
|
+
static toVerdict(score, blockingIssues) {
|
|
11
|
+
return verdictFromScore(score, blockingIssues.length > 0);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=heuristic-scorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heuristic-scorer.js","sourceRoot":"","sources":["../../src/engine/heuristic-scorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAElE,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,oBAAoB,CAAC,QAA6C;QACvE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAC5D,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,aAAqB,EAAE,gBAAwB;QACtE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;IACjF,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,cAA2B;QACzD,OAAO,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC3D,CAAC;CACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SealInputError } from '../errors.js';
|
|
2
|
+
const VALID_ARTIFACT_TYPES = ['llm_response', 'code_diff', 'test_plan', 'design', 'migration', 'plan_review'];
|
|
3
|
+
const VALID_RISK_LEVELS = ['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
|
|
4
|
+
export class InputNormalizer {
|
|
5
|
+
static normalize(input) {
|
|
6
|
+
if (!input.output || input.output.trim() === '') {
|
|
7
|
+
throw new SealInputError('output is required and must be non-empty', 'output');
|
|
8
|
+
}
|
|
9
|
+
if (!input.artifact_type || !VALID_ARTIFACT_TYPES.includes(input.artifact_type)) {
|
|
10
|
+
throw new SealInputError(`artifact_type must be one of: ${VALID_ARTIFACT_TYPES.join(', ')}`, 'artifact_type');
|
|
11
|
+
}
|
|
12
|
+
if (input.risk_hint !== null && input.risk_hint !== undefined && !VALID_RISK_LEVELS.includes(input.risk_hint)) {
|
|
13
|
+
throw new SealInputError(`risk_hint must be one of: ${VALID_RISK_LEVELS.join(', ')} or null`, 'risk_hint');
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
artifact_type: input.artifact_type,
|
|
17
|
+
spec: input.spec ?? null,
|
|
18
|
+
output: input.output.trim(),
|
|
19
|
+
evidence: {
|
|
20
|
+
test_log: input.evidence?.test_log ?? '',
|
|
21
|
+
build_log: input.evidence?.build_log ?? '',
|
|
22
|
+
diff: input.evidence?.diff ?? '',
|
|
23
|
+
references: input.evidence?.references ?? [],
|
|
24
|
+
},
|
|
25
|
+
risk_hint: input.risk_hint ?? null,
|
|
26
|
+
context: input.context,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=input-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-normalizer.js","sourceRoot":"","sources":["../../src/engine/input-normalizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,oBAAoB,GAAmB,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAC,CAAA;AAC7H,MAAM,iBAAiB,GAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;AAE5E,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,SAAS,CAAC,KAAyB;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,MAAM,IAAI,cAAc,CAAC,0CAA0C,EAAE,QAAQ,CAAC,CAAA;QAChF,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YAChF,MAAM,IAAI,cAAc,CAAC,iCAAiC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,CAAA;QAC/G,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9G,MAAM,IAAI,cAAc,CAAC,6BAA6B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;QAC5G,CAAC;QACD,OAAO;YACL,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;YAC3B,QAAQ,EAAE;gBACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE;gBACxC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE;gBAC1C,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;gBAChC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE;aAC7C;YACD,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;YAClC,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* plan_review mode pipeline — gates plans, designs, proposals, spec seeds.
|
|
3
|
+
*
|
|
4
|
+
* Core principle: no runtime exists, so behavioral claims are out of scope.
|
|
5
|
+
* The gateable question is "is this coherent and complete against what was
|
|
6
|
+
* locked before it was written?" Falsification, not approval.
|
|
7
|
+
*
|
|
8
|
+
* Pass threshold: 90 (higher than code mode's 85)
|
|
9
|
+
* High-risk [71,89]: ESCALATE_TO_HUMAN instead of PASS_WITH_WARNINGS
|
|
10
|
+
*/
|
|
11
|
+
import { SealInput, SealVerdict } from '../types.js';
|
|
12
|
+
import { ExtensionRegistry } from './extension-registry.js';
|
|
13
|
+
import { TrustMemory } from '../trust-memory.js';
|
|
14
|
+
export declare function runPlanReviewPipeline(input: SealInput, registry: ExtensionRegistry, trustMemory: TrustMemory | null): Promise<SealVerdict>;
|