@salucallc/tiresias-sdk 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.
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ /**
3
+ * Tiresias SDK — Main Orchestrator
4
+ *
5
+ * tiresias.call(messages, adapter, options) is the high-level entry point.
6
+ * It runs the three safety signals, computes composite score, applies policy,
7
+ * writes a hash-chained audit entry, and either passes through to the LLM
8
+ * or blocks the request.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.Tiresias = void 0;
12
+ const types_js_1 = require("./types.js");
13
+ const scoring_js_1 = require("./scoring.js");
14
+ const audit_js_1 = require("./audit.js");
15
+ const session_js_1 = require("./session.js");
16
+ // Lazily import sub-modules to allow tree-shaking
17
+ const tiresias_watch_1 = require("@salucallc/tiresias-watch");
18
+ const tiresias_report_1 = require("@salucallc/tiresias-report");
19
+ class Tiresias {
20
+ config;
21
+ sessions;
22
+ auditStore;
23
+ constructor(config = {}) {
24
+ this.config = config;
25
+ this.sessions = new session_js_1.SessionManager();
26
+ this.auditStore = config.auditStore ?? new audit_js_1.MemoryAuditStore();
27
+ }
28
+ /**
29
+ * Main entry point.
30
+ * 1. Run watch (injection detection)
31
+ * 2. Run report (PII scan)
32
+ * 3. Get network signal (passthrough or provider)
33
+ * 4. Compute composite score
34
+ * 5. Apply policy
35
+ * 6. Write hash-chained audit entry
36
+ * 7. If ALLOW/WARN: call LLM adapter and return response
37
+ * If BLOCK/QUARANTINE: return without calling LLM
38
+ */
39
+ async call(messages, adapter, options = {}) {
40
+ const { sessionId: sid, ...llmOptions } = options;
41
+ const session = this.sessions.getOrCreate(sid ?? "default");
42
+ // Serialize request for hashing and scanning
43
+ const requestContent = messages.map((m) => `${m.role}: ${m.content}`).join("\n");
44
+ // ── Signal 1: Injection Detection (tiresias-watch) ────────────────────────
45
+ const key = (0, tiresias_watch_1.generateKey)();
46
+ const guardedMessages = messages.map((m) => ({
47
+ ...m,
48
+ content: (0, tiresias_watch_1.injectGuard)(m.content, key),
49
+ }));
50
+ // We scan the original content for injection markers from prior round-trips.
51
+ // For a fresh request, injection threat comes from structural analysis.
52
+ const watchSignal = await this.runWatchSignal(messages, key);
53
+ // ── Signal 2: PII Detection (tiresias-report) ─────────────────────────────
54
+ const reportSignal = await this.runReportSignal(requestContent);
55
+ // ── Signal 3: Network Threat (tiresias-network or stub) ───────────────────
56
+ const networkSignal = await this.runNetworkSignal();
57
+ // ── Composite Score (PATENT-CRITICAL) ─────────────────────────────────────
58
+ const thresholds = this.config.policy ?? types_js_1.DEFAULT_POLICY_THRESHOLDS;
59
+ const composite = (0, scoring_js_1.computeCompositeScore)(watchSignal, reportSignal, networkSignal, thresholds);
60
+ // ── Audit Entry (PATENT-CRITICAL hash chain) ──────────────────────────────
61
+ const prevHash = await this.auditStore.getHead(session.sessionId);
62
+ const auditEntry = (0, audit_js_1.buildAuditEntry)(session.sessionId, requestContent, composite, prevHash);
63
+ await this.auditStore.append(auditEntry);
64
+ this.sessions.update(session.sessionId, composite, auditEntry.chainHash);
65
+ const blocked = composite.policy === "BLOCK" || composite.policy === "QUARANTINE";
66
+ // ── Policy Callbacks ──────────────────────────────────────────────────────
67
+ if (composite.policy === "WARN" && this.config.onWarn) {
68
+ await this.config.onWarn(auditEntry);
69
+ }
70
+ if (blocked && this.config.onBlock) {
71
+ await this.config.onBlock(auditEntry);
72
+ }
73
+ // ── LLM Call ──────────────────────────────────────────────────────────────
74
+ let llmResponse;
75
+ if (!blocked) {
76
+ // Use guarded messages so we can detect echo manipulation in future turns
77
+ llmResponse = await adapter.call(guardedMessages, llmOptions);
78
+ // Strip guard tokens from response before returning to caller
79
+ if (llmResponse.content) {
80
+ llmResponse = {
81
+ ...llmResponse,
82
+ content: (0, tiresias_watch_1.stripEcho)(llmResponse.content),
83
+ };
84
+ }
85
+ }
86
+ return {
87
+ decision: composite.policy,
88
+ composite,
89
+ auditEntry,
90
+ llmResponse,
91
+ blocked,
92
+ };
93
+ }
94
+ /** Audit log access */
95
+ get audit() {
96
+ return this.auditStore;
97
+ }
98
+ /** Session access */
99
+ get session() {
100
+ return this.sessions;
101
+ }
102
+ // ── Private signal runners ────────────────────────────────────────────────
103
+ async runWatchSignal(messages, key) {
104
+ // For a fresh outbound request, injection threat is determined by
105
+ // checking if any inbound message contains injection markers aimed at
106
+ // hijacking the guard echo. We use verifyResponse on each user message.
107
+ let maxThreat = 0;
108
+ let echoFound = false;
109
+ let failureMode;
110
+ for (const m of messages) {
111
+ if (m.role !== "user")
112
+ continue;
113
+ const result = (0, tiresias_watch_1.verify)(m.content, key);
114
+ if (!result.verified) {
115
+ if (result.failure_mode) {
116
+ failureMode = result.failure_mode;
117
+ maxThreat = Math.max(maxThreat, result.threat);
118
+ echoFound = true;
119
+ }
120
+ }
121
+ }
122
+ // Check for common injection patterns in user messages
123
+ const injectionPatterns = [
124
+ /ignore\s+(all\s+)?previous\s+instructions?/i,
125
+ /you\s+are\s+now\s+(?:a\s+)?(?:an?\s+)?(?:different|new|another|alternative)/i,
126
+ /disregard\s+(?:your\s+)?(?:previous\s+|prior\s+)?(?:instructions?|rules?|guidelines?)/i,
127
+ /\[SYSTEM\]/i,
128
+ /<\|system\|>/i,
129
+ /###\s*SYSTEM/i,
130
+ ];
131
+ for (const m of messages) {
132
+ if (m.role !== "user")
133
+ continue;
134
+ let patternHits = 0;
135
+ for (const p of injectionPatterns) {
136
+ if (p.test(m.content))
137
+ patternHits++;
138
+ }
139
+ if (patternHits > 0) {
140
+ maxThreat = Math.max(maxThreat, Math.min(0.3 + patternHits * 0.2, 1.0));
141
+ }
142
+ }
143
+ return { injectionThreat: maxThreat, echoFound, failureMode };
144
+ }
145
+ async runReportSignal(content) {
146
+ try {
147
+ const result = await (0, tiresias_report_1.scan)(content);
148
+ const highConf = result.entities.filter((e) => e.confidence > 0.85).length;
149
+ return {
150
+ piiRisk: result.risk,
151
+ entityCount: result.entity_count,
152
+ highConfidenceCount: highConf,
153
+ };
154
+ }
155
+ catch {
156
+ // Fail safe: treat scan failure as zero risk (don't block on scan error)
157
+ return { piiRisk: 0, entityCount: 0, highConfidenceCount: 0 };
158
+ }
159
+ }
160
+ async runNetworkSignal() {
161
+ if (this.config.networkThreatProvider) {
162
+ try {
163
+ const threat = await this.config.networkThreatProvider();
164
+ return { networkThreat: Math.min(Math.max(threat, 0), 1) };
165
+ }
166
+ catch {
167
+ return { networkThreat: 0 };
168
+ }
169
+ }
170
+ return { networkThreat: 0 };
171
+ }
172
+ }
173
+ exports.Tiresias = Tiresias;
174
+ //# sourceMappingURL=tiresias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiresias.js","sourceRoot":"","sources":["../src/tiresias.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Tiresias SDK — Shared Types
3
+ * Composite scoring, policy engine, session, and audit types.
4
+ */
5
+ export interface WatchSignal {
6
+ injectionThreat: number;
7
+ echoFound: boolean;
8
+ failureMode?: string;
9
+ }
10
+ export interface ReportSignal {
11
+ piiRisk: number;
12
+ entityCount: number;
13
+ highConfidenceCount: number;
14
+ }
15
+ export interface NetworkSignal {
16
+ networkThreat: number;
17
+ }
18
+ /**
19
+ * PATENT-CRITICAL: Composite risk score formula (SALUCA-005 / cross_layer_orchestration)
20
+ * score = (0.5 × injection_threat) + (0.4 × pii_risk) + (0.1 × network_threat)
21
+ */
22
+ export interface CompositeScore {
23
+ score: number;
24
+ injectionThreat: number;
25
+ piiRisk: number;
26
+ networkThreat: number;
27
+ policy: PolicyDecision;
28
+ timestamp: number;
29
+ }
30
+ export type PolicyDecision = "ALLOW" | "WARN" | "BLOCK" | "QUARANTINE";
31
+ /**
32
+ * Policy thresholds (configurable, defaults are patent-critical values)
33
+ * ALLOW < 0.30
34
+ * WARN < 0.60
35
+ * BLOCK < 0.85
36
+ * QUARANTINE >= 0.85
37
+ */
38
+ export interface PolicyThresholds {
39
+ warnAt: number;
40
+ blockAt: number;
41
+ quarantineAt: number;
42
+ }
43
+ export declare const DEFAULT_POLICY_THRESHOLDS: PolicyThresholds;
44
+ /**
45
+ * PATENT-CRITICAL: Hash-chained audit log entry (SALUCA-005)
46
+ * chain_hash = SHA3-256(prev_chain_hash || session_id || timestamp || score_json)
47
+ */
48
+ export interface AuditEntry {
49
+ entryId: string;
50
+ sessionId: string;
51
+ timestamp: number;
52
+ requestHash: string;
53
+ composite: CompositeScore;
54
+ chainHash: string;
55
+ prevChainHash: string;
56
+ metadata?: Record<string, unknown>;
57
+ }
58
+ export interface TiresiasSession {
59
+ sessionId: string;
60
+ createdAt: number;
61
+ requestCount: number;
62
+ lastScore: CompositeScore | null;
63
+ auditChainHead: string;
64
+ }
65
+ export type MessageRole = "system" | "user" | "assistant";
66
+ export interface Message {
67
+ role: MessageRole;
68
+ content: string;
69
+ }
70
+ export interface LLMResponse {
71
+ content: string;
72
+ usage?: {
73
+ inputTokens: number;
74
+ outputTokens: number;
75
+ };
76
+ raw?: unknown;
77
+ }
78
+ export interface LLMAdapter {
79
+ call(messages: Message[], options?: LLMCallOptions): Promise<LLMResponse>;
80
+ }
81
+ export interface LLMCallOptions {
82
+ model?: string;
83
+ maxTokens?: number;
84
+ temperature?: number;
85
+ systemPrompt?: string;
86
+ }
87
+ export interface TiresiasConfig {
88
+ policy?: PolicyThresholds;
89
+ auditStore?: AuditStore;
90
+ networkThreatProvider?: () => Promise<number>;
91
+ onBlock?: (entry: AuditEntry) => void | Promise<void>;
92
+ onWarn?: (entry: AuditEntry) => void | Promise<void>;
93
+ }
94
+ export interface AuditStore {
95
+ append(entry: AuditEntry): Promise<void>;
96
+ getHead(sessionId: string): Promise<string>;
97
+ query(sessionId: string, limit?: number): Promise<AuditEntry[]>;
98
+ }
99
+ export interface TiresiasCallResult {
100
+ decision: PolicyDecision;
101
+ composite: CompositeScore;
102
+ auditEntry: AuditEntry;
103
+ llmResponse?: LLMResponse;
104
+ blocked: boolean;
105
+ }
106
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ /**
3
+ * Tiresias SDK — Shared Types
4
+ * Composite scoring, policy engine, session, and audit types.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DEFAULT_POLICY_THRESHOLDS = void 0;
8
+ exports.DEFAULT_POLICY_THRESHOLDS = {
9
+ warnAt: 0.30,
10
+ blockAt: 0.60,
11
+ quarantineAt: 0.85,
12
+ };
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAoDU,QAAA,yBAAyB,GAAqB;IACzD,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,IAAI;CACnB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@salucallc/tiresias-sdk",
3
+ "version": "0.1.0",
4
+ "description": "Unified Tiresias AI Safety SDK — composite scoring, policy engine, and hash-chained audit log for LLM APIs",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ }
12
+ },
13
+ "files": ["dist", "src"],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "test": "vitest run",
17
+ "test:watch": "vitest",
18
+ "lint": "tsc --noEmit"
19
+ },
20
+ "keywords": ["llm", "security", "pii", "prompt-injection", "audit", "ai-safety", "tiresias"],
21
+ "license": "Apache-2.0",
22
+ "publishConfig": { "access": "public" },
23
+ "dependencies": {
24
+ "@salucallc/tiresias-watch": "^0.1.0",
25
+ "@salucallc/tiresias-report": "^0.1.0"
26
+ },
27
+ "devDependencies": {
28
+ "typescript": "^5.6.0",
29
+ "vitest": "^2.0.0",
30
+ "@types/node": "^22.0.0"
31
+ }
32
+ }