instar 0.17.13 → 0.18.1

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.
Files changed (91) hide show
  1. package/README.md +2 -4
  2. package/dashboard/favicon.png +0 -0
  3. package/dashboard/index.html +7 -3
  4. package/dashboard/logo.png +0 -0
  5. package/dist/commands/init.js +16 -0
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/relay.d.ts +1 -0
  8. package/dist/commands/relay.d.ts.map +1 -1
  9. package/dist/commands/relay.js +2 -0
  10. package/dist/commands/relay.js.map +1 -1
  11. package/dist/commands/server.d.ts.map +1 -1
  12. package/dist/commands/server.js +177 -4
  13. package/dist/commands/server.js.map +1 -1
  14. package/dist/core/AutoUpdater.d.ts.map +1 -1
  15. package/dist/core/AutoUpdater.js +11 -2
  16. package/dist/core/AutoUpdater.js.map +1 -1
  17. package/dist/core/Config.d.ts.map +1 -1
  18. package/dist/core/Config.js +1 -0
  19. package/dist/core/Config.js.map +1 -1
  20. package/dist/core/MessageSentinel.d.ts +14 -0
  21. package/dist/core/MessageSentinel.d.ts.map +1 -1
  22. package/dist/core/MessageSentinel.js +42 -10
  23. package/dist/core/MessageSentinel.js.map +1 -1
  24. package/dist/core/SessionManager.d.ts +13 -1
  25. package/dist/core/SessionManager.d.ts.map +1 -1
  26. package/dist/core/SessionManager.js +67 -0
  27. package/dist/core/SessionManager.js.map +1 -1
  28. package/dist/core/types.d.ts +26 -0
  29. package/dist/core/types.d.ts.map +1 -1
  30. package/dist/index.d.ts +3 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +1 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/scaffold/templates.d.ts.map +1 -1
  35. package/dist/scaffold/templates.js +40 -0
  36. package/dist/scaffold/templates.js.map +1 -1
  37. package/dist/server/AgentServer.d.ts +1 -0
  38. package/dist/server/AgentServer.d.ts.map +1 -1
  39. package/dist/server/AgentServer.js +1 -0
  40. package/dist/server/AgentServer.js.map +1 -1
  41. package/dist/server/routes.d.ts +1 -0
  42. package/dist/server/routes.d.ts.map +1 -1
  43. package/dist/server/routes.js +35 -0
  44. package/dist/server/routes.js.map +1 -1
  45. package/dist/threadline/AgentTrustManager.d.ts +40 -0
  46. package/dist/threadline/AgentTrustManager.d.ts.map +1 -1
  47. package/dist/threadline/AgentTrustManager.js +115 -0
  48. package/dist/threadline/AgentTrustManager.js.map +1 -1
  49. package/dist/threadline/ContentClassifier.d.ts +83 -0
  50. package/dist/threadline/ContentClassifier.d.ts.map +1 -0
  51. package/dist/threadline/ContentClassifier.js +201 -0
  52. package/dist/threadline/ContentClassifier.js.map +1 -0
  53. package/dist/threadline/InboundMessageGate.d.ts +69 -0
  54. package/dist/threadline/InboundMessageGate.d.ts.map +1 -0
  55. package/dist/threadline/InboundMessageGate.js +196 -0
  56. package/dist/threadline/InboundMessageGate.js.map +1 -0
  57. package/dist/threadline/RelayGroundingPreamble.d.ts +48 -0
  58. package/dist/threadline/RelayGroundingPreamble.d.ts.map +1 -0
  59. package/dist/threadline/RelayGroundingPreamble.js +68 -0
  60. package/dist/threadline/RelayGroundingPreamble.js.map +1 -0
  61. package/dist/threadline/ThreadlineBootstrap.d.ts +19 -0
  62. package/dist/threadline/ThreadlineBootstrap.d.ts.map +1 -1
  63. package/dist/threadline/ThreadlineBootstrap.js +125 -2
  64. package/dist/threadline/ThreadlineBootstrap.js.map +1 -1
  65. package/dist/threadline/ThreadlineMCPServer.d.ts +10 -0
  66. package/dist/threadline/ThreadlineMCPServer.d.ts.map +1 -1
  67. package/dist/threadline/ThreadlineMCPServer.js +289 -0
  68. package/dist/threadline/ThreadlineMCPServer.js.map +1 -1
  69. package/dist/threadline/ThreadlineRouter.d.ts +19 -1
  70. package/dist/threadline/ThreadlineRouter.d.ts.map +1 -1
  71. package/dist/threadline/ThreadlineRouter.js +42 -17
  72. package/dist/threadline/ThreadlineRouter.js.map +1 -1
  73. package/dist/threadline/client/ThreadlineClient.d.ts +13 -0
  74. package/dist/threadline/client/ThreadlineClient.d.ts.map +1 -1
  75. package/dist/threadline/client/ThreadlineClient.js +43 -0
  76. package/dist/threadline/client/ThreadlineClient.js.map +1 -1
  77. package/dist/threadline/index.d.ts +7 -1
  78. package/dist/threadline/index.d.ts.map +1 -1
  79. package/dist/threadline/index.js +6 -0
  80. package/dist/threadline/index.js.map +1 -1
  81. package/dist/threadline/mcp-stdio-entry.js +46 -0
  82. package/dist/threadline/mcp-stdio-entry.js.map +1 -1
  83. package/dist/threadline/relay/RelayRateLimiter.js +1 -1
  84. package/dist/threadline/relay/RelayRateLimiter.js.map +1 -1
  85. package/dist/threadline/relay/RelayServer.d.ts.map +1 -1
  86. package/dist/threadline/relay/RelayServer.js +4 -3
  87. package/dist/threadline/relay/RelayServer.js.map +1 -1
  88. package/package.json +14 -7
  89. package/src/data/builtin-manifest.json +48 -48
  90. package/upgrades/0.17.14.md +26 -0
  91. package/upgrades/0.18.1.md +34 -0
@@ -27,6 +27,8 @@ export interface AgentTrustHistory {
27
27
  }
28
28
  export interface AgentTrustProfile {
29
29
  agent: string;
30
+ /** Cryptographic fingerprint (Ed25519-derived). Primary identity key. */
31
+ fingerprint?: string;
30
32
  level: AgentTrustLevel;
31
33
  source: AgentTrustSource;
32
34
  history: AgentTrustHistory;
@@ -68,6 +70,8 @@ export declare class AgentTrustManager {
68
70
  private readonly auditPath;
69
71
  private profiles;
70
72
  private onTrustChange;
73
+ private saveDirty;
74
+ private saveTimer;
71
75
  constructor(options: {
72
76
  stateDir: string;
73
77
  onTrustChange?: TrustChangeCallback;
@@ -81,6 +85,32 @@ export declare class AgentTrustManager {
81
85
  * New agents start as 'untrusted' with 'setup-default' source.
82
86
  */
83
87
  getOrCreateProfile(agentName: string): AgentTrustProfile;
88
+ /**
89
+ * Get trust profile by cryptographic fingerprint.
90
+ * Used for relay inbound messages where identity is fingerprint-based.
91
+ */
92
+ getProfileByFingerprint(fingerprint: string): AgentTrustProfile | null;
93
+ /**
94
+ * Get or create a trust profile keyed by fingerprint.
95
+ * For relay agents, the fingerprint IS the identity.
96
+ */
97
+ getOrCreateProfileByFingerprint(fingerprint: string, displayName?: string): AgentTrustProfile;
98
+ /**
99
+ * Get trust level by fingerprint. Returns 'untrusted' for unknown agents.
100
+ */
101
+ getTrustLevelByFingerprint(fingerprint: string): AgentTrustLevel;
102
+ /**
103
+ * Get allowed operations by fingerprint.
104
+ */
105
+ getAllowedOperationsByFingerprint(fingerprint: string): string[];
106
+ /**
107
+ * Set trust level by fingerprint.
108
+ */
109
+ setTrustLevelByFingerprint(fingerprint: string, level: AgentTrustLevel, source: AgentTrustSource, reason?: string, displayName?: string): boolean;
110
+ /**
111
+ * Record a received message by fingerprint (debounced save).
112
+ */
113
+ recordMessageReceivedByFingerprint(fingerprint: string): void;
84
114
  /**
85
115
  * Set trust level for an agent.
86
116
  * UPGRADES require source: 'user-granted' or 'paired-machine-granted'.
@@ -142,6 +172,16 @@ export declare class AgentTrustManager {
142
172
  * Force reload profiles from disk.
143
173
  */
144
174
  reload(): void;
175
+ /**
176
+ * Flush any pending saves and stop the debounce timer.
177
+ * Call on shutdown for clean exit.
178
+ */
179
+ flush(): void;
180
+ /**
181
+ * Schedule a debounced save (dirty-flag + interval flush).
182
+ * Avoids synchronous disk writes on every message received.
183
+ */
184
+ private scheduleSave;
145
185
  private loadProfiles;
146
186
  private save;
147
187
  private writeAudit;
@@ -1 +1 @@
1
- {"version":3,"file":"AgentTrustManager.d.ts","sourceRoot":"","sources":["../../src/threadline/AgentTrustManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentTrustManager.d.ts","sourceRoot":"","sources":["../../src/threadline/AgentTrustManager.ts"],"names":[],"mappings":"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"}
@@ -60,6 +60,8 @@ export class AgentTrustManager {
60
60
  auditPath;
61
61
  profiles;
62
62
  onTrustChange;
63
+ saveDirty = false;
64
+ saveTimer = null;
63
65
  constructor(options) {
64
66
  this.threadlineDir = path.join(options.stateDir, 'threadline');
65
67
  fs.mkdirSync(this.threadlineDir, { recursive: true });
@@ -103,6 +105,87 @@ export class AgentTrustManager {
103
105
  }
104
106
  return this.profiles[agentName];
105
107
  }
108
+ // ── Fingerprint-Based Access (for relay messages) ──────────────
109
+ /**
110
+ * Get trust profile by cryptographic fingerprint.
111
+ * Used for relay inbound messages where identity is fingerprint-based.
112
+ */
113
+ getProfileByFingerprint(fingerprint) {
114
+ for (const profile of Object.values(this.profiles)) {
115
+ if (profile.fingerprint === fingerprint) {
116
+ return profile;
117
+ }
118
+ }
119
+ return null;
120
+ }
121
+ /**
122
+ * Get or create a trust profile keyed by fingerprint.
123
+ * For relay agents, the fingerprint IS the identity.
124
+ */
125
+ getOrCreateProfileByFingerprint(fingerprint, displayName) {
126
+ // Check if profile already exists by fingerprint
127
+ const existing = this.getProfileByFingerprint(fingerprint);
128
+ if (existing)
129
+ return existing;
130
+ // Create new profile keyed by fingerprint
131
+ const now = new Date().toISOString();
132
+ const key = displayName ?? fingerprint;
133
+ this.profiles[key] = {
134
+ agent: key,
135
+ fingerprint,
136
+ level: 'untrusted',
137
+ source: 'setup-default',
138
+ history: {
139
+ messagesReceived: 0,
140
+ messagesResponded: 0,
141
+ successfulInteractions: 0,
142
+ failedInteractions: 0,
143
+ lastInteraction: '',
144
+ streakSinceIncident: 0,
145
+ },
146
+ allowedOperations: [...DEFAULT_ALLOWED_OPS.untrusted],
147
+ blockedOperations: [],
148
+ createdAt: now,
149
+ updatedAt: now,
150
+ };
151
+ this.save();
152
+ return this.profiles[key];
153
+ }
154
+ /**
155
+ * Get trust level by fingerprint. Returns 'untrusted' for unknown agents.
156
+ */
157
+ getTrustLevelByFingerprint(fingerprint) {
158
+ const profile = this.getProfileByFingerprint(fingerprint);
159
+ return profile?.level ?? 'untrusted';
160
+ }
161
+ /**
162
+ * Get allowed operations by fingerprint.
163
+ */
164
+ getAllowedOperationsByFingerprint(fingerprint) {
165
+ const profile = this.getProfileByFingerprint(fingerprint);
166
+ if (!profile)
167
+ return [...DEFAULT_ALLOWED_OPS.untrusted];
168
+ return profile.allowedOperations.length > 0
169
+ ? profile.allowedOperations
170
+ : [...DEFAULT_ALLOWED_OPS[profile.level]];
171
+ }
172
+ /**
173
+ * Set trust level by fingerprint.
174
+ */
175
+ setTrustLevelByFingerprint(fingerprint, level, source, reason, displayName) {
176
+ const profile = this.getOrCreateProfileByFingerprint(fingerprint, displayName);
177
+ return this.setTrustLevel(profile.agent, level, source, reason);
178
+ }
179
+ /**
180
+ * Record a received message by fingerprint (debounced save).
181
+ */
182
+ recordMessageReceivedByFingerprint(fingerprint) {
183
+ const profile = this.getOrCreateProfileByFingerprint(fingerprint);
184
+ profile.history.messagesReceived++;
185
+ profile.history.lastInteraction = new Date().toISOString();
186
+ profile.updatedAt = new Date().toISOString();
187
+ this.scheduleSave();
188
+ }
106
189
  // ── Trust Level Management ──────────────────────────────────────
107
190
  /**
108
191
  * Set trust level for an agent.
@@ -376,7 +459,39 @@ export class AgentTrustManager {
376
459
  reload() {
377
460
  this.profiles = this.loadProfiles();
378
461
  }
462
+ /**
463
+ * Flush any pending saves and stop the debounce timer.
464
+ * Call on shutdown for clean exit.
465
+ */
466
+ flush() {
467
+ if (this.saveDirty) {
468
+ this.save();
469
+ this.saveDirty = false;
470
+ }
471
+ if (this.saveTimer) {
472
+ clearInterval(this.saveTimer);
473
+ this.saveTimer = null;
474
+ }
475
+ }
379
476
  // ── Private ─────────────────────────────────────────────────────
477
+ /**
478
+ * Schedule a debounced save (dirty-flag + interval flush).
479
+ * Avoids synchronous disk writes on every message received.
480
+ */
481
+ scheduleSave() {
482
+ this.saveDirty = true;
483
+ if (!this.saveTimer) {
484
+ this.saveTimer = setInterval(() => {
485
+ if (this.saveDirty) {
486
+ this.save();
487
+ this.saveDirty = false;
488
+ }
489
+ }, 5000); // Flush every 5 seconds
490
+ // Don't keep process alive just for this timer
491
+ if (this.saveTimer.unref)
492
+ this.saveTimer.unref();
493
+ }
494
+ }
380
495
  loadProfiles() {
381
496
  const data = safeJsonParse(this.profilesPath, {
382
497
  profiles: {},
@@ -1 +1 @@
1
- {"version":3,"file":"AgentTrustManager.js","sourceRoot":"","sources":["../../src/threadline/AgentTrustManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentTrustManager.js","sourceRoot":"","sources":["../../src/threadline/AgentTrustManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * ContentClassifier — Optional outbound content filter for relay responses.
3
+ *
4
+ * Evaluates outbound messages before they're sent to detect sensitive data:
5
+ * - API keys, tokens, credentials
6
+ * - Database queries or internal data
7
+ * - System prompts or internal instructions
8
+ * - Personal user information
9
+ *
10
+ * Default: disabled. Operators enable via config for agents handling
11
+ * sensitive data. Layer 4 (grounding preamble) is behavioral guidance;
12
+ * Layer 5 (this) is the actual outbound enforcement.
13
+ *
14
+ * Part of PROP-relay-auto-connect, Layer 5.
15
+ */
16
+ export type ContentClassification = 'safe' | 'sensitive' | 'blocked';
17
+ export interface ClassificationResult {
18
+ /** Overall classification */
19
+ classification: ContentClassification;
20
+ /** Why it was flagged (if not safe) */
21
+ reason?: string;
22
+ /** Sanitized version (if sensitive and redaction is available) */
23
+ redacted?: string;
24
+ }
25
+ export interface ContentClassifierConfig {
26
+ /** Enable the classifier (default: false) */
27
+ enabled: boolean;
28
+ /** Block sensitive content outright, or just flag it (default: false — flag only) */
29
+ blockSensitive?: boolean;
30
+ /** Custom patterns to detect (in addition to defaults) */
31
+ customPatterns?: Array<{
32
+ pattern: string;
33
+ label: string;
34
+ }>;
35
+ /** LLM classifier function — if provided, used for deep classification */
36
+ llmClassify?: (content: string, systemPrompt: string) => Promise<string>;
37
+ }
38
+ export interface ThreadContext {
39
+ /** Trust level of the conversation partner */
40
+ trustLevel: string;
41
+ /** Thread ID */
42
+ threadId?: string;
43
+ /** Remote agent name */
44
+ remoteAgent?: string;
45
+ }
46
+ export declare class ContentClassifier {
47
+ private readonly config;
48
+ private metrics;
49
+ constructor(config: ContentClassifierConfig);
50
+ /**
51
+ * Whether the classifier is active.
52
+ */
53
+ get enabled(): boolean;
54
+ /**
55
+ * Classify outbound content before sending.
56
+ *
57
+ * Two-stage pipeline:
58
+ * 1. Fast regex pattern matching (catches obvious leaks)
59
+ * 2. LLM classification (catches subtle leaks, if llmClassify is provided)
60
+ *
61
+ * If regex catches something definitive (API key, private key), we skip
62
+ * the LLM call for speed and cost savings.
63
+ */
64
+ classify(content: string, context: ThreadContext): Promise<ClassificationResult>;
65
+ /**
66
+ * Get classifier metrics for observability.
67
+ */
68
+ getMetrics(): {
69
+ classified: number;
70
+ safe: number;
71
+ sensitive: number;
72
+ blocked: number;
73
+ errors: number;
74
+ patternDetections: number;
75
+ llmClassifications: number;
76
+ };
77
+ }
78
+ /**
79
+ * Create a disabled (no-op) classifier.
80
+ * Used as default when content classification is not configured.
81
+ */
82
+ export declare function createDisabledClassifier(): ContentClassifier;
83
+ //# sourceMappingURL=ContentClassifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentClassifier.d.ts","sourceRoot":"","sources":["../../src/threadline/ContentClassifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,6BAA6B;IAC7B,cAAc,EAAE,qBAAqB,CAAC;IACtC,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,0EAA0E;IAC1E,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuGD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IAGjD,OAAO,CAAC,OAAO,CAQb;gBAEU,MAAM,EAAE,uBAAuB;IAI3C;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;;;;OASG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAyEtF;;OAEG;IACH,UAAU;;;;;;;;;CAGX;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,iBAAiB,CAE5D"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * ContentClassifier — Optional outbound content filter for relay responses.
3
+ *
4
+ * Evaluates outbound messages before they're sent to detect sensitive data:
5
+ * - API keys, tokens, credentials
6
+ * - Database queries or internal data
7
+ * - System prompts or internal instructions
8
+ * - Personal user information
9
+ *
10
+ * Default: disabled. Operators enable via config for agents handling
11
+ * sensitive data. Layer 4 (grounding preamble) is behavioral guidance;
12
+ * Layer 5 (this) is the actual outbound enforcement.
13
+ *
14
+ * Part of PROP-relay-auto-connect, Layer 5.
15
+ */
16
+ /**
17
+ * Fast regex-based detection for common sensitive patterns.
18
+ * This runs before (and sometimes instead of) the LLM classifier.
19
+ */
20
+ const BUILTIN_PATTERNS = [
21
+ // API keys and tokens
22
+ { regex: /sk-[a-zA-Z0-9]{20,}/, label: 'API key (sk-* pattern)' },
23
+ { regex: /sk-ant-api[a-zA-Z0-9-]{20,}/, label: 'Anthropic API key' },
24
+ { regex: /ghp_[a-zA-Z0-9]{36,}/, label: 'GitHub personal access token' },
25
+ { regex: /gho_[a-zA-Z0-9]{36,}/, label: 'GitHub OAuth token' },
26
+ { regex: /xoxb-[0-9]{10,}-[a-zA-Z0-9-]+/, label: 'Slack bot token' },
27
+ { regex: /xoxp-[0-9]{10,}-[a-zA-Z0-9-]+/, label: 'Slack user token' },
28
+ { regex: /Bearer\s+[a-zA-Z0-9._\-]{20,}/, label: 'Bearer token' },
29
+ { regex: /AKIA[0-9A-Z]{16}/, label: 'AWS access key' },
30
+ { regex: /-----BEGIN (RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----/, label: 'Private key' },
31
+ // Database content
32
+ { regex: /(?:postgres|mysql|mongodb|redis):\/\/[^\s]+:[^\s]+@/, label: 'Database connection string' },
33
+ { regex: /SELECT\s+.+\s+FROM\s+\w+\s+WHERE/i, label: 'SQL query with data' },
34
+ // Internal instructions
35
+ { regex: /system\s*prompt\s*[:=]/i, label: 'System prompt reference' },
36
+ { regex: /\[INTERNAL\].*(?:instruction|directive|config)/i, label: 'Internal instruction' },
37
+ // PII patterns
38
+ { regex: /\b\d{3}[-.]?\d{2}[-.]?\d{4}\b/, label: 'Possible SSN' },
39
+ { regex: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b.*(?:password|passwd|pwd)/i, label: 'Email with password context' },
40
+ ];
41
+ function detectPatterns(content, customPatterns) {
42
+ const matches = [];
43
+ for (const { regex, label } of BUILTIN_PATTERNS) {
44
+ const match = content.match(regex);
45
+ if (match) {
46
+ matches.push({ label, match: match[0].slice(0, 30) + (match[0].length > 30 ? '...' : '') });
47
+ }
48
+ }
49
+ if (customPatterns) {
50
+ for (const { pattern, label } of customPatterns) {
51
+ try {
52
+ const regex = new RegExp(pattern);
53
+ const match = content.match(regex);
54
+ if (match) {
55
+ matches.push({ label, match: match[0].slice(0, 30) + (match[0].length > 30 ? '...' : '') });
56
+ }
57
+ }
58
+ catch {
59
+ // Invalid regex — skip
60
+ }
61
+ }
62
+ }
63
+ return matches;
64
+ }
65
+ // ── LLM Classification Prompt ────────────────────────────────────────
66
+ const LLM_CLASSIFIER_PROMPT = `You are a content safety classifier for an AI agent's outbound messages.
67
+
68
+ Evaluate whether the following message contains any sensitive information that should NOT be shared with an external agent:
69
+
70
+ 1. API keys, tokens, secrets, or credentials
71
+ 2. Database contents, queries, or connection strings
72
+ 3. System prompts, internal instructions, or configuration details
73
+ 4. Personal user information (emails with passwords, SSNs, financial data)
74
+ 5. Proprietary business logic or trade secrets
75
+
76
+ Respond with EXACTLY one line in this format:
77
+ CLASSIFICATION: safe|sensitive|blocked
78
+ REASON: [brief reason if not safe]
79
+
80
+ "safe" = no sensitive content detected
81
+ "sensitive" = contains information that could be sensitive in context
82
+ "blocked" = contains clearly dangerous content (credentials, keys, PII)`;
83
+ function parseLLMResponse(response) {
84
+ const classLine = response.match(/CLASSIFICATION:\s*(safe|sensitive|blocked)/i);
85
+ const reasonLine = response.match(/REASON:\s*(.+)/i);
86
+ if (!classLine) {
87
+ // If LLM didn't follow format, default to safe (fail-open for availability)
88
+ return { classification: 'safe' };
89
+ }
90
+ const classification = classLine[1].toLowerCase();
91
+ return {
92
+ classification,
93
+ reason: reasonLine?.[1]?.trim(),
94
+ };
95
+ }
96
+ // ── Implementation ───────────────────────────────────────────────────
97
+ export class ContentClassifier {
98
+ config;
99
+ // Metrics
100
+ metrics = {
101
+ classified: 0,
102
+ safe: 0,
103
+ sensitive: 0,
104
+ blocked: 0,
105
+ errors: 0,
106
+ patternDetections: 0,
107
+ llmClassifications: 0,
108
+ };
109
+ constructor(config) {
110
+ this.config = config;
111
+ }
112
+ /**
113
+ * Whether the classifier is active.
114
+ */
115
+ get enabled() {
116
+ return this.config.enabled;
117
+ }
118
+ /**
119
+ * Classify outbound content before sending.
120
+ *
121
+ * Two-stage pipeline:
122
+ * 1. Fast regex pattern matching (catches obvious leaks)
123
+ * 2. LLM classification (catches subtle leaks, if llmClassify is provided)
124
+ *
125
+ * If regex catches something definitive (API key, private key), we skip
126
+ * the LLM call for speed and cost savings.
127
+ */
128
+ async classify(content, context) {
129
+ if (!this.config.enabled) {
130
+ return { classification: 'safe' };
131
+ }
132
+ this.metrics.classified++;
133
+ try {
134
+ // Stage 1: Fast pattern detection
135
+ const patterns = detectPatterns(content, this.config.customPatterns);
136
+ if (patterns.length > 0) {
137
+ this.metrics.patternDetections++;
138
+ // Definitive blocks: private keys, API keys, connection strings
139
+ const definitiveLabels = ['Private key', 'Database connection string', 'AWS access key'];
140
+ const isDefinitive = patterns.some(p => definitiveLabels.some(d => p.label.includes(d)));
141
+ if (isDefinitive) {
142
+ this.metrics.blocked++;
143
+ return {
144
+ classification: 'blocked',
145
+ reason: `Pattern detected: ${patterns.map(p => p.label).join(', ')}`,
146
+ };
147
+ }
148
+ // Non-definitive patterns → sensitive
149
+ const result = {
150
+ classification: this.config.blockSensitive ? 'blocked' : 'sensitive',
151
+ reason: `Potential sensitive content: ${patterns.map(p => p.label).join(', ')}`,
152
+ };
153
+ if (this.config.blockSensitive) {
154
+ this.metrics.blocked++;
155
+ }
156
+ else {
157
+ this.metrics.sensitive++;
158
+ }
159
+ return result;
160
+ }
161
+ // Stage 2: LLM classification (if available and no patterns found)
162
+ if (this.config.llmClassify) {
163
+ this.metrics.llmClassifications++;
164
+ const llmResponse = await this.config.llmClassify(content, LLM_CLASSIFIER_PROMPT);
165
+ const result = parseLLMResponse(llmResponse);
166
+ // Apply blockSensitive policy
167
+ if (result.classification === 'sensitive' && this.config.blockSensitive) {
168
+ result.classification = 'blocked';
169
+ }
170
+ this.metrics[result.classification]++;
171
+ return result;
172
+ }
173
+ // No patterns, no LLM → safe
174
+ this.metrics.safe++;
175
+ return { classification: 'safe' };
176
+ }
177
+ catch (err) {
178
+ this.metrics.errors++;
179
+ // Fail-open: classification errors don't block messages
180
+ // (availability > perfect security for a behavioral layer)
181
+ return {
182
+ classification: 'safe',
183
+ reason: `Classification error (fail-open): ${err instanceof Error ? err.message : 'unknown'}`,
184
+ };
185
+ }
186
+ }
187
+ /**
188
+ * Get classifier metrics for observability.
189
+ */
190
+ getMetrics() {
191
+ return { ...this.metrics };
192
+ }
193
+ }
194
+ /**
195
+ * Create a disabled (no-op) classifier.
196
+ * Used as default when content classification is not configured.
197
+ */
198
+ export function createDisabledClassifier() {
199
+ return new ContentClassifier({ enabled: false });
200
+ }
201
+ //# sourceMappingURL=ContentClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentClassifier.js","sourceRoot":"","sources":["../../src/threadline/ContentClassifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0CH;;;GAGG;AACH,MAAM,gBAAgB,GAA4C;IAChE,sBAAsB;IACtB,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,wBAAwB,EAAE;IACjE,EAAE,KAAK,EAAE,6BAA6B,EAAE,KAAK,EAAE,mBAAmB,EAAE;IACpE,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,8BAA8B,EAAE;IACxE,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,oBAAoB,EAAE;IAC9D,EAAE,KAAK,EAAE,+BAA+B,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACpE,EAAE,KAAK,EAAE,+BAA+B,EAAE,KAAK,EAAE,kBAAkB,EAAE;IACrE,EAAE,KAAK,EAAE,+BAA+B,EAAE,KAAK,EAAE,cAAc,EAAE;IACjE,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAE;IACtD,EAAE,KAAK,EAAE,sDAAsD,EAAE,KAAK,EAAE,aAAa,EAAE;IAEvF,mBAAmB;IACnB,EAAE,KAAK,EAAE,qDAAqD,EAAE,KAAK,EAAE,4BAA4B,EAAE;IACrG,EAAE,KAAK,EAAE,mCAAmC,EAAE,KAAK,EAAE,qBAAqB,EAAE;IAE5E,wBAAwB;IACxB,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,yBAAyB,EAAE;IACtE,EAAE,KAAK,EAAE,iDAAiD,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAE3F,eAAe;IACf,EAAE,KAAK,EAAE,+BAA+B,EAAE,KAAK,EAAE,cAAc,EAAE;IACjE,EAAE,KAAK,EAAE,+EAA+E,EAAE,KAAK,EAAE,6BAA6B,EAAE;CACjI,CAAC;AAEF,SAAS,cAAc,CAAC,OAAe,EAAE,cAA0D;IACjG,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,gBAAgB,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,cAAc,EAAE,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;gBAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9F,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,wEAAwE;AAExE,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;wEAgB0C,CAAC;AAEzE,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChF,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAErD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,4EAA4E;QAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAA2B,CAAC;IAC3E,OAAO;QACL,cAAc;QACd,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;KAChC,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE,MAAM,OAAO,iBAAiB;IACX,MAAM,CAA0B;IAEjD,UAAU;IACF,OAAO,GAAG;QAChB,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,CAAC;QACP,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,iBAAiB,EAAE,CAAC;QACpB,kBAAkB,EAAE,CAAC;KACtB,CAAC;IAEF,YAAY,MAA+B;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,OAAsB;QACpD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAE1B,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAErE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBAEjC,gEAAgE;gBAChE,MAAM,gBAAgB,GAAG,CAAC,aAAa,EAAE,4BAA4B,EAAE,gBAAgB,CAAC,CAAC;gBACzF,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACrC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAChD,CAAC;gBAEF,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACvB,OAAO;wBACL,cAAc,EAAE,SAAS;wBACzB,MAAM,EAAE,qBAAqB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACrE,CAAC;gBACJ,CAAC;gBAED,sCAAsC;gBACtC,MAAM,MAAM,GAAyB;oBACnC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;oBACpE,MAAM,EAAE,gCAAgC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAChF,CAAC;gBAEF,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBAC3B,CAAC;gBAED,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,mEAAmE;YACnE,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;gBAElC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;gBAClF,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBAE7C,8BAA8B;gBAC9B,IAAI,MAAM,CAAC,cAAc,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;oBACxE,MAAM,CAAC,cAAc,GAAG,SAAS,CAAC;gBACpC,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;gBACtC,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,6BAA6B;YAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACtB,wDAAwD;YACxD,2DAA2D;YAC3D,OAAO;gBACL,cAAc,EAAE,MAAM;gBACtB,MAAM,EAAE,qCAAqC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE;aAC9F,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,iBAAiB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * InboundMessageGate — Pre-filter for relay inbound messages.
3
+ *
4
+ * Gates on sender identity, trust level, rate limits, and payload size.
5
+ * Does NOT determine delivery mode — that's AutonomyGate's job.
6
+ *
7
+ * Part of PROP-relay-auto-connect.
8
+ */
9
+ import type { AgentTrustManager, AgentTrustLevel } from './AgentTrustManager.js';
10
+ import type { ThreadlineRouter } from './ThreadlineRouter.js';
11
+ import type { ReceivedMessage } from './client/ThreadlineClient.js';
12
+ export interface InboundGateConfig {
13
+ /** Max payload size in bytes (default: 64KB) */
14
+ maxPayloadBytes?: number;
15
+ /** Per-trust-level rate limits */
16
+ rateLimits?: Partial<Record<AgentTrustLevel, {
17
+ probesPerHour: number;
18
+ messagesPerHour: number;
19
+ messagesPerDay: number;
20
+ }>>;
21
+ }
22
+ export interface GateDecision {
23
+ action: 'pass' | 'block';
24
+ reason?: string;
25
+ fingerprint?: string;
26
+ message?: ReceivedMessage;
27
+ trustLevel?: AgentTrustLevel;
28
+ }
29
+ export declare class InboundMessageGate {
30
+ private readonly trustManager;
31
+ private router;
32
+ private readonly config;
33
+ private readonly rateLimiter;
34
+ private readonly maxPayloadBytes;
35
+ private cleanupTimer;
36
+ private metrics;
37
+ constructor(trustManager: AgentTrustManager, router: ThreadlineRouter | null, config?: InboundGateConfig);
38
+ /**
39
+ * Late-bind the router after server initialization.
40
+ * The router isn't available at bootstrap time — it's created in server.ts
41
+ * after the Threadline bootstrap completes.
42
+ */
43
+ setRouter(router: ThreadlineRouter): void;
44
+ /**
45
+ * Evaluate an inbound relay message.
46
+ * Returns 'pass' to route to ThreadlineRouter/AutonomyGate,
47
+ * or 'block' with reason.
48
+ */
49
+ evaluate(message: ReceivedMessage): Promise<GateDecision>;
50
+ /**
51
+ * Get gate metrics for observability.
52
+ */
53
+ getMetrics(): {
54
+ passed: number;
55
+ blocked: number;
56
+ blockedByTrust: number;
57
+ blockedByRate: number;
58
+ blockedBySize: number;
59
+ probesHandled: number;
60
+ };
61
+ /**
62
+ * Shutdown: cleanup timers.
63
+ */
64
+ shutdown(): void;
65
+ private classifyOperation;
66
+ private estimatePayloadSize;
67
+ private getRateLimits;
68
+ }
69
+ //# sourceMappingURL=InboundMessageGate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InboundMessageGate.d.ts","sourceRoot":"","sources":["../../src/threadline/InboundMessageGate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAIpE,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAC3H;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AA6ED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,YAAY,CAA+C;IAGnE,OAAO,CAAC,OAAO,CAOb;gBAGA,YAAY,EAAE,iBAAiB,EAC/B,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAC/B,MAAM,GAAE,iBAAsB;IAYhC;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAIzC;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IA2D/D;;OAEG;IACH,UAAU;;;;;;;;IAIV;;OAEG;IACH,QAAQ,IAAI,IAAI;IAShB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,aAAa;CAMtB"}