4runr-os 2.9.128 → 2.9.129
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/package.json +5 -2
- package/packages/sentinel/dist/adapters/audit.d.ts +33 -0
- package/packages/sentinel/dist/adapters/audit.d.ts.map +1 -0
- package/packages/sentinel/dist/adapters/audit.js +118 -0
- package/packages/sentinel/dist/adapters/audit.js.map +1 -0
- package/packages/sentinel/dist/adapters/cancel-adapter.d.ts +20 -0
- package/packages/sentinel/dist/adapters/cancel-adapter.d.ts.map +1 -0
- package/packages/sentinel/dist/adapters/cancel-adapter.js +75 -0
- package/packages/sentinel/dist/adapters/cancel-adapter.js.map +1 -0
- package/packages/sentinel/dist/adapters/telemetry.d.ts +25 -0
- package/packages/sentinel/dist/adapters/telemetry.d.ts.map +1 -0
- package/packages/sentinel/dist/adapters/telemetry.js +46 -0
- package/packages/sentinel/dist/adapters/telemetry.js.map +1 -0
- package/packages/sentinel/dist/config.d.ts +6 -0
- package/packages/sentinel/dist/config.d.ts.map +1 -0
- package/packages/sentinel/dist/config.js +52 -0
- package/packages/sentinel/dist/config.js.map +1 -0
- package/packages/sentinel/dist/index.d.ts +12 -0
- package/packages/sentinel/dist/index.d.ts.map +1 -0
- package/packages/sentinel/dist/index.js +33 -0
- package/packages/sentinel/dist/index.js.map +1 -0
- package/packages/sentinel/dist/internal/event-buffer.d.ts +13 -0
- package/packages/sentinel/dist/internal/event-buffer.d.ts.map +1 -0
- package/packages/sentinel/dist/internal/event-buffer.js +93 -0
- package/packages/sentinel/dist/internal/event-buffer.js.map +1 -0
- package/packages/sentinel/dist/policies.d.ts +41 -0
- package/packages/sentinel/dist/policies.d.ts.map +1 -0
- package/packages/sentinel/dist/policies.js +179 -0
- package/packages/sentinel/dist/policies.js.map +1 -0
- package/packages/sentinel/dist/policy-templates.d.ts +13 -0
- package/packages/sentinel/dist/policy-templates.d.ts.map +1 -0
- package/packages/sentinel/dist/policy-templates.js +143 -0
- package/packages/sentinel/dist/policy-templates.js.map +1 -0
- package/packages/sentinel/dist/predictive.d.ts +13 -0
- package/packages/sentinel/dist/predictive.d.ts.map +1 -0
- package/packages/sentinel/dist/predictive.js +105 -0
- package/packages/sentinel/dist/predictive.js.map +1 -0
- package/packages/sentinel/dist/sentinel.d.ts +31 -0
- package/packages/sentinel/dist/sentinel.d.ts.map +1 -0
- package/packages/sentinel/dist/sentinel.js +217 -0
- package/packages/sentinel/dist/sentinel.js.map +1 -0
- package/packages/sentinel/dist/types.d.ts +58 -0
- package/packages/sentinel/dist/types.d.ts.map +1 -0
- package/packages/sentinel/dist/types.js +3 -0
- package/packages/sentinel/dist/types.js.map +1 -0
- package/packages/shared/dist/env.d.ts +84 -0
- package/packages/shared/dist/env.d.ts.map +1 -0
- package/packages/shared/dist/env.js +222 -0
- package/packages/shared/dist/env.js.map +1 -0
- package/packages/shared/dist/index.d.ts +6 -0
- package/packages/shared/dist/index.d.ts.map +1 -0
- package/packages/shared/dist/index.js +47 -0
- package/packages/shared/dist/index.js.map +1 -0
- package/packages/shared/dist/logger.d.ts +33 -0
- package/packages/shared/dist/logger.d.ts.map +1 -0
- package/packages/shared/dist/logger.js +128 -0
- package/packages/shared/dist/logger.js.map +1 -0
- package/packages/shared/dist/persistence/db-blocker.d.ts +11 -0
- package/packages/shared/dist/persistence/db-blocker.d.ts.map +1 -0
- package/packages/shared/dist/persistence/db-blocker.js +58 -0
- package/packages/shared/dist/persistence/db-blocker.js.map +1 -0
- package/packages/shared/dist/persistence/fs-blocker.d.ts +26 -0
- package/packages/shared/dist/persistence/fs-blocker.d.ts.map +1 -0
- package/packages/shared/dist/persistence/fs-blocker.js +232 -0
- package/packages/shared/dist/persistence/fs-blocker.js.map +1 -0
- package/packages/shared/dist/persistence/index.d.ts +9 -0
- package/packages/shared/dist/persistence/index.d.ts.map +1 -0
- package/packages/shared/dist/persistence/index.js +68 -0
- package/packages/shared/dist/persistence/index.js.map +1 -0
- package/packages/shared/dist/persistence/memory-store.d.ts +57 -0
- package/packages/shared/dist/persistence/memory-store.d.ts.map +1 -0
- package/packages/shared/dist/persistence/memory-store.js +221 -0
- package/packages/shared/dist/persistence/memory-store.js.map +1 -0
- package/packages/shared/dist/types.d.ts +155 -0
- package/packages/shared/dist/types.d.ts.map +1 -0
- package/packages/shared/dist/types.js +3 -0
- package/packages/shared/dist/types.js.map +1 -0
- package/packages/shared/dist/utils.d.ts +25 -0
- package/packages/shared/dist/utils.d.ts.map +1 -0
- package/packages/shared/dist/utils.js +147 -0
- package/packages/shared/dist/utils.js.map +1 -0
- package/packages/shield/dist/detectors/hallucination-detector.d.ts +26 -0
- package/packages/shield/dist/detectors/hallucination-detector.d.ts.map +1 -0
- package/packages/shield/dist/detectors/hallucination-detector.js +185 -0
- package/packages/shield/dist/detectors/hallucination-detector.js.map +1 -0
- package/packages/shield/dist/detectors/injection-detector.d.ts +31 -0
- package/packages/shield/dist/detectors/injection-detector.d.ts.map +1 -0
- package/packages/shield/dist/detectors/injection-detector.js +256 -0
- package/packages/shield/dist/detectors/injection-detector.js.map +1 -0
- package/packages/shield/dist/detectors/pii-detector.d.ts +35 -0
- package/packages/shield/dist/detectors/pii-detector.d.ts.map +1 -0
- package/packages/shield/dist/detectors/pii-detector.js +126 -0
- package/packages/shield/dist/detectors/pii-detector.js.map +1 -0
- package/packages/shield/dist/index.d.ts +5 -0
- package/packages/shield/dist/index.d.ts.map +1 -0
- package/packages/shield/dist/index.js +12 -0
- package/packages/shield/dist/index.js.map +1 -0
- package/packages/shield/dist/shield.d.ts +64 -0
- package/packages/shield/dist/shield.d.ts.map +1 -0
- package/packages/shield/dist/shield.js +319 -0
- package/packages/shield/dist/shield.js.map +1 -0
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "4runr-os",
|
|
3
|
-
"version": "2.9.
|
|
3
|
+
"version": "2.9.129",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "4Runr AI Agent OS - Secure terminal interface for AI agents. v2.9.
|
|
5
|
+
"description": "4Runr AI Agent OS - Secure terminal interface for AI agents. v2.9.129: CRITICAL FIX - Bundle @4runr/* packages so Gateway can start (was crashing on missing imports). Prior: 65s autostart timeout, Portal activity log, Gateway shutdown order. ⚠️ Pre-MVP / Development Phase",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
8
8
|
"4runr": "dist/index.js",
|
|
@@ -84,6 +84,9 @@
|
|
|
84
84
|
"mk3-tui/bin/**/*",
|
|
85
85
|
"mk3-tui/binaries/**/*",
|
|
86
86
|
"apps/gateway/**/*",
|
|
87
|
+
"packages/shared/dist/**/*",
|
|
88
|
+
"packages/sentinel/dist/**/*",
|
|
89
|
+
"packages/shield/dist/**/*",
|
|
87
90
|
"packages/middleware/idempotency/idempotency.js",
|
|
88
91
|
"packages/adapters/redis/IdempotencyStore.js",
|
|
89
92
|
"scripts/setup.js",
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface AuditRecord {
|
|
2
|
+
id: string;
|
|
3
|
+
timestamp: number;
|
|
4
|
+
action: string;
|
|
5
|
+
runId: string;
|
|
6
|
+
reason?: string;
|
|
7
|
+
config: Record<string, any>;
|
|
8
|
+
metadata?: Record<string, any>;
|
|
9
|
+
}
|
|
10
|
+
export interface AuditAdapter {
|
|
11
|
+
logAudit(record: AuditRecord): Promise<void>;
|
|
12
|
+
logKill(runId: string, reason: string, config: Record<string, any>, metadata?: Record<string, any>): Promise<void>;
|
|
13
|
+
logPolicyViolation(runId: string, policy: string, threshold: any, config: Record<string, any>, metadata?: Record<string, any>): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export declare class FileAuditAdapter implements AuditAdapter {
|
|
16
|
+
private logFile;
|
|
17
|
+
private fs;
|
|
18
|
+
constructor(logFile?: string);
|
|
19
|
+
logAudit(record: AuditRecord): Promise<void>;
|
|
20
|
+
logKill(runId: string, reason: string, config: Record<string, any>, metadata?: Record<string, any>): Promise<void>;
|
|
21
|
+
logPolicyViolation(runId: string, policy: string, threshold: any, config: Record<string, any>, metadata?: Record<string, any>): Promise<void>;
|
|
22
|
+
private formatLogEntry;
|
|
23
|
+
private generateId;
|
|
24
|
+
}
|
|
25
|
+
export declare class ConsoleAuditAdapter implements AuditAdapter {
|
|
26
|
+
logAudit(record: AuditRecord): Promise<void>;
|
|
27
|
+
logKill(runId: string, reason: string, config: Record<string, any>, metadata?: Record<string, any>): Promise<void>;
|
|
28
|
+
logPolicyViolation(runId: string, policy: string, threshold: any, config: Record<string, any>, metadata?: Record<string, any>): Promise<void>;
|
|
29
|
+
private generateId;
|
|
30
|
+
}
|
|
31
|
+
export declare function createAuditAdapter(): AuditAdapter;
|
|
32
|
+
export declare const auditAdapter: AuditAdapter;
|
|
33
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/adapters/audit.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnH,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/I;AAKD,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,EAAE,CAAM;gBAEJ,OAAO,GAAE,MAA6B;IAY5C,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAe5C,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAclH,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBnJ,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,UAAU;CAGnB;AAKD,qBAAa,mBAAoB,YAAW,YAAY;IAChD,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAalH,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBnJ,OAAO,CAAC,UAAU;CAGnB;AAKD,wBAAgB,kBAAkB,IAAI,YAAY,CAUjD;AAGD,eAAO,MAAM,YAAY,cAAuB,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.auditAdapter = exports.ConsoleAuditAdapter = exports.FileAuditAdapter = void 0;
|
|
4
|
+
exports.createAuditAdapter = createAuditAdapter;
|
|
5
|
+
class FileAuditAdapter {
|
|
6
|
+
constructor(logFile = 'sentinel_audit.log') {
|
|
7
|
+
this.logFile = logFile;
|
|
8
|
+
try {
|
|
9
|
+
this.fs = require('fs').promises;
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
console.warn('File system not available, falling back to console audit');
|
|
13
|
+
this.fs = null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async logAudit(record) {
|
|
17
|
+
const logEntry = this.formatLogEntry(record);
|
|
18
|
+
if (this.fs) {
|
|
19
|
+
try {
|
|
20
|
+
await this.fs.appendFile(this.logFile, logEntry + '\n');
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.error('Failed to write to audit log:', error);
|
|
24
|
+
console.log('Audit entry:', logEntry);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
console.log('Audit entry:', logEntry);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async logKill(runId, reason, config, metadata) {
|
|
32
|
+
const record = {
|
|
33
|
+
id: this.generateId(),
|
|
34
|
+
timestamp: Date.now(),
|
|
35
|
+
action: 'kill',
|
|
36
|
+
runId,
|
|
37
|
+
reason,
|
|
38
|
+
config,
|
|
39
|
+
...(metadata !== undefined && { metadata })
|
|
40
|
+
};
|
|
41
|
+
await this.logAudit(record);
|
|
42
|
+
}
|
|
43
|
+
async logPolicyViolation(runId, policy, threshold, config, metadata) {
|
|
44
|
+
const record = {
|
|
45
|
+
id: this.generateId(),
|
|
46
|
+
timestamp: Date.now(),
|
|
47
|
+
action: 'policy_violation',
|
|
48
|
+
runId,
|
|
49
|
+
reason: `Policy ${policy} exceeded threshold ${threshold}`,
|
|
50
|
+
config,
|
|
51
|
+
metadata: {
|
|
52
|
+
policy,
|
|
53
|
+
threshold,
|
|
54
|
+
...metadata
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
await this.logAudit(record);
|
|
58
|
+
}
|
|
59
|
+
formatLogEntry(record) {
|
|
60
|
+
return JSON.stringify({
|
|
61
|
+
...record,
|
|
62
|
+
timestamp: new Date(record.timestamp).toISOString()
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
generateId() {
|
|
66
|
+
return `audit_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.FileAuditAdapter = FileAuditAdapter;
|
|
70
|
+
class ConsoleAuditAdapter {
|
|
71
|
+
async logAudit(record) {
|
|
72
|
+
console.log('🔒 Sentinel Audit:', {
|
|
73
|
+
...record,
|
|
74
|
+
timestamp: new Date(record.timestamp).toISOString()
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
async logKill(runId, reason, config, metadata) {
|
|
78
|
+
const record = {
|
|
79
|
+
id: this.generateId(),
|
|
80
|
+
timestamp: Date.now(),
|
|
81
|
+
action: 'kill',
|
|
82
|
+
runId,
|
|
83
|
+
reason,
|
|
84
|
+
config,
|
|
85
|
+
...(metadata !== undefined && { metadata })
|
|
86
|
+
};
|
|
87
|
+
await this.logAudit(record);
|
|
88
|
+
}
|
|
89
|
+
async logPolicyViolation(runId, policy, threshold, config, metadata) {
|
|
90
|
+
await this.logAudit({
|
|
91
|
+
id: this.generateId(),
|
|
92
|
+
timestamp: Date.now(),
|
|
93
|
+
action: 'policy_violation',
|
|
94
|
+
runId,
|
|
95
|
+
reason: `Policy ${policy} exceeded threshold ${threshold}`,
|
|
96
|
+
config,
|
|
97
|
+
metadata: {
|
|
98
|
+
policy,
|
|
99
|
+
threshold,
|
|
100
|
+
...metadata
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
generateId() {
|
|
105
|
+
return `audit_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.ConsoleAuditAdapter = ConsoleAuditAdapter;
|
|
109
|
+
function createAuditAdapter() {
|
|
110
|
+
const sink = process.env['SENTINEL_AUDIT_SINK'];
|
|
111
|
+
const file = process.env['SENTINEL_AUDIT_FILE'] || 'packages/sentinel/sentinel_audit.log';
|
|
112
|
+
if (sink === 'file') {
|
|
113
|
+
return new FileAuditAdapter(file);
|
|
114
|
+
}
|
|
115
|
+
return new ConsoleAuditAdapter();
|
|
116
|
+
}
|
|
117
|
+
exports.auditAdapter = createAuditAdapter();
|
|
118
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/adapters/audit.ts"],"names":[],"mappings":";;;AAmJA,gDAUC;AArID,MAAa,gBAAgB;IAI3B,YAAY,UAAkB,oBAAoB;QAChD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAGvB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACzE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAmB;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,MAAc,EAAE,MAA2B,EAAE,QAA8B;QACtG,MAAM,MAAM,GAAgB;YAC1B,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,MAAM;YACd,KAAK;YACL,MAAM;YACN,MAAM;YACN,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC5C,CAAC;QAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAAa,EAAE,MAAc,EAAE,SAAc,EAAE,MAA2B,EAAE,QAA8B;QACjI,MAAM,MAAM,GAAgB;YAC1B,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,kBAAkB;YAC1B,KAAK;YACL,MAAM,EAAE,UAAU,MAAM,uBAAuB,SAAS,EAAE;YAC1D,MAAM;YACN,QAAQ,EAAE;gBACR,MAAM;gBACN,SAAS;gBACT,GAAG,QAAQ;aACZ;SACF,CAAC;QAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAEO,cAAc,CAAC,MAAmB;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,GAAG,MAAM;YACT,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;SACpD,CAAC,CAAC;IACL,CAAC;IAEO,UAAU;QAChB,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC1E,CAAC;CACF;AAzED,4CAyEC;AAKD,MAAa,mBAAmB;IAC9B,KAAK,CAAC,QAAQ,CAAC,MAAmB;QAChC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE;YAChC,GAAG,MAAM;YACT,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;SACpD,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,MAAc,EAAE,MAA2B,EAAE,QAA8B;QACtG,MAAM,MAAM,GAAgB;YAC1B,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,MAAM;YACd,KAAK;YACL,MAAM;YACN,MAAM;YACN,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC5C,CAAC;QACF,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAAa,EAAE,MAAc,EAAE,SAAc,EAAE,MAA2B,EAAE,QAA8B;QACjI,MAAM,IAAI,CAAC,QAAQ,CAAC;YAClB,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,kBAAkB;YAC1B,KAAK;YACL,MAAM,EAAE,UAAU,MAAM,uBAAuB,SAAS,EAAE;YAC1D,MAAM;YACN,QAAQ,EAAE;gBACR,MAAM;gBACN,SAAS;gBACT,GAAG,QAAQ;aACZ;SACF,CAAC,CAAC;IACL,CAAC;IAEO,UAAU;QAChB,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC1E,CAAC;CACF;AAxCD,kDAwCC;AAKD,SAAgB,kBAAkB;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,sCAAsC,CAAC;IAE1F,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAGD,OAAO,IAAI,mBAAmB,EAAE,CAAC;AACnC,CAAC;AAGY,QAAA,YAAY,GAAG,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface CancelResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
reason?: string;
|
|
4
|
+
timestamp: number;
|
|
5
|
+
}
|
|
6
|
+
export interface CancelAdapter {
|
|
7
|
+
cancelRun(runId: string, reason: string): Promise<CancelResult>;
|
|
8
|
+
}
|
|
9
|
+
export declare class DefaultCancelAdapter implements CancelAdapter {
|
|
10
|
+
private cancelledRuns;
|
|
11
|
+
private gatewayUrl;
|
|
12
|
+
constructor();
|
|
13
|
+
cancelRun(runId: string, reason: string): Promise<CancelResult>;
|
|
14
|
+
isCancelled(runId: string): boolean;
|
|
15
|
+
getCancelledRuns(): string[];
|
|
16
|
+
clearCancelledRuns(): void;
|
|
17
|
+
}
|
|
18
|
+
export declare function createCancelAdapter(): CancelAdapter;
|
|
19
|
+
export declare const cancelAdapter: CancelAdapter;
|
|
20
|
+
//# sourceMappingURL=cancel-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/cancel-adapter.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACjE;AAKD,qBAAa,oBAAqB,YAAW,aAAa;IACxD,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,UAAU,CAAS;;IASrB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAqErE,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAOnC,gBAAgB,IAAI,MAAM,EAAE;IAO5B,kBAAkB,IAAI,IAAI;CAG3B;AAKD,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD;AAGD,eAAO,MAAM,aAAa,eAAwB,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cancelAdapter = exports.DefaultCancelAdapter = void 0;
|
|
4
|
+
exports.createCancelAdapter = createCancelAdapter;
|
|
5
|
+
class DefaultCancelAdapter {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.cancelledRuns = new Set();
|
|
8
|
+
this.gatewayUrl = process.env['GATEWAY_URL'] ||
|
|
9
|
+
process.env['GATEWAY_BASE_URL'] ||
|
|
10
|
+
'http://localhost:3001';
|
|
11
|
+
}
|
|
12
|
+
async cancelRun(runId, reason) {
|
|
13
|
+
console.log(`🛑 CancelAdapter: Cancelling run ${runId} - Reason: ${reason}`);
|
|
14
|
+
if (this.cancelledRuns.has(runId)) {
|
|
15
|
+
return {
|
|
16
|
+
success: false,
|
|
17
|
+
reason: 'Run already cancelled',
|
|
18
|
+
timestamp: Date.now()
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
this.cancelledRuns.add(runId);
|
|
22
|
+
try {
|
|
23
|
+
const cancelUrl = `${this.gatewayUrl}/api/runs/${runId}/cancel`;
|
|
24
|
+
const response = await fetch(cancelUrl, {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: {
|
|
27
|
+
'Content-Type': 'application/json',
|
|
28
|
+
},
|
|
29
|
+
body: JSON.stringify({ reason }),
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
const errorText = await response.text();
|
|
33
|
+
console.error(`❌ CancelAdapter: Failed to cancel run ${runId}: ${response.status} - ${errorText}`);
|
|
34
|
+
this.cancelledRuns.delete(runId);
|
|
35
|
+
return {
|
|
36
|
+
success: false,
|
|
37
|
+
reason: `Gateway returned ${response.status}: ${errorText}`,
|
|
38
|
+
timestamp: Date.now()
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const result = await response.json().catch(() => ({}));
|
|
42
|
+
console.log(`✅ CancelAdapter: Run ${runId} cancelled successfully`);
|
|
43
|
+
return {
|
|
44
|
+
success: true,
|
|
45
|
+
reason: result?.message || 'Cancellation requested',
|
|
46
|
+
timestamp: Date.now()
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
this.cancelledRuns.delete(runId);
|
|
51
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
52
|
+
console.error(`❌ CancelAdapter: Error cancelling run ${runId}:`, errorMessage);
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
reason: `Cancel request failed: ${errorMessage}`,
|
|
56
|
+
timestamp: Date.now()
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
isCancelled(runId) {
|
|
61
|
+
return this.cancelledRuns.has(runId);
|
|
62
|
+
}
|
|
63
|
+
getCancelledRuns() {
|
|
64
|
+
return Array.from(this.cancelledRuns);
|
|
65
|
+
}
|
|
66
|
+
clearCancelledRuns() {
|
|
67
|
+
this.cancelledRuns.clear();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.DefaultCancelAdapter = DefaultCancelAdapter;
|
|
71
|
+
function createCancelAdapter() {
|
|
72
|
+
return new DefaultCancelAdapter();
|
|
73
|
+
}
|
|
74
|
+
exports.cancelAdapter = createCancelAdapter();
|
|
75
|
+
//# sourceMappingURL=cancel-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel-adapter.js","sourceRoot":"","sources":["../../src/adapters/cancel-adapter.ts"],"names":[],"mappings":";;;AAwHA,kDAEC;AAxGD,MAAa,oBAAoB;IAI/B;QAHQ,kBAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAKxC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAC/B,uBAAuB,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,MAAc;QAC3C,OAAO,CAAC,GAAG,CAAC,oCAAoC,KAAK,cAAc,MAAM,EAAE,CAAC,CAAC;QAG7E,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,uBAAuB;gBAC/B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;QACJ,CAAC;QAGD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE9B,IAAI,CAAC;YAEH,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,UAAU,aAAa,KAAK,SAAS,CAAC;YAGhE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;gBACtC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;aACjC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,CAAC,yCAAyC,KAAK,KAAK,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;gBAGnG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEjC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,oBAAoB,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;oBAC3D,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE5D,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,yBAAyB,CAAC,CAAC;YAEpE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,EAAE,OAAO,IAAI,wBAAwB;gBACnD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEjC,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,yCAAyC,KAAK,GAAG,EAAE,YAAY,CAAC,CAAC;YAE/E,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,0BAA0B,YAAY,EAAE;gBAChD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAKD,WAAW,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAKD,gBAAgB;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;IAKD,kBAAkB;QAChB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF;AAjGD,oDAiGC;AAKD,SAAgB,mBAAmB;IACjC,OAAO,IAAI,oBAAoB,EAAE,CAAC;AACpC,CAAC;AAGY,QAAA,aAAa,GAAG,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface TelemetryEvent {
|
|
2
|
+
type: string;
|
|
3
|
+
runId: string;
|
|
4
|
+
reason?: string;
|
|
5
|
+
timestamp: number;
|
|
6
|
+
metadata?: Record<string, any>;
|
|
7
|
+
}
|
|
8
|
+
export interface TelemetryAdapter {
|
|
9
|
+
logEvent(event: TelemetryEvent): void;
|
|
10
|
+
logKill(runId: string, reason: string, metadata?: Record<string, any>): void;
|
|
11
|
+
logPolicyViolation(runId: string, policy: string, threshold: any, metadata?: Record<string, any>): void;
|
|
12
|
+
}
|
|
13
|
+
export declare class NoOpTelemetryAdapter implements TelemetryAdapter {
|
|
14
|
+
logEvent(event: TelemetryEvent): void;
|
|
15
|
+
logKill(runId: string, reason: string, metadata?: Record<string, any>): void;
|
|
16
|
+
logPolicyViolation(runId: string, policy: string, threshold: any, metadata?: Record<string, any>): void;
|
|
17
|
+
}
|
|
18
|
+
export declare class ConsoleTelemetryAdapter implements TelemetryAdapter {
|
|
19
|
+
logEvent(event: TelemetryEvent): void;
|
|
20
|
+
logKill(runId: string, reason: string, metadata?: Record<string, any>): void;
|
|
21
|
+
logPolicyViolation(runId: string, policy: string, threshold: any, metadata?: Record<string, any>): void;
|
|
22
|
+
}
|
|
23
|
+
export declare function createTelemetryAdapter(): TelemetryAdapter;
|
|
24
|
+
export declare const telemetryAdapter: TelemetryAdapter;
|
|
25
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/adapters/telemetry.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAC7E,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CACzG;AAKD,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAIrC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAI5E,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;CAGxG;AAKD,qBAAa,uBAAwB,YAAW,gBAAgB;IAC9D,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAQrC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAQ5E,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;CAQxG;AAKD,wBAAgB,sBAAsB,IAAI,gBAAgB,CAQzD;AAGD,eAAO,MAAM,gBAAgB,kBAA2B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.telemetryAdapter = exports.ConsoleTelemetryAdapter = exports.NoOpTelemetryAdapter = void 0;
|
|
4
|
+
exports.createTelemetryAdapter = createTelemetryAdapter;
|
|
5
|
+
class NoOpTelemetryAdapter {
|
|
6
|
+
logEvent(event) {
|
|
7
|
+
}
|
|
8
|
+
logKill(runId, reason, metadata) {
|
|
9
|
+
}
|
|
10
|
+
logPolicyViolation(runId, policy, threshold, metadata) {
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.NoOpTelemetryAdapter = NoOpTelemetryAdapter;
|
|
14
|
+
class ConsoleTelemetryAdapter {
|
|
15
|
+
logEvent(event) {
|
|
16
|
+
console.log(`📊 Sentinel Telemetry: ${event.type}`, {
|
|
17
|
+
runId: event.runId,
|
|
18
|
+
timestamp: new Date(event.timestamp).toISOString(),
|
|
19
|
+
...event.metadata
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
logKill(runId, reason, metadata) {
|
|
23
|
+
console.log(`🛑 Sentinel Kill: ${runId}`, {
|
|
24
|
+
reason,
|
|
25
|
+
timestamp: new Date().toISOString(),
|
|
26
|
+
...metadata
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
logPolicyViolation(runId, policy, threshold, metadata) {
|
|
30
|
+
console.log(`⚠️ Sentinel Policy Violation: ${runId}`, {
|
|
31
|
+
policy,
|
|
32
|
+
threshold,
|
|
33
|
+
timestamp: new Date().toISOString(),
|
|
34
|
+
...metadata
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.ConsoleTelemetryAdapter = ConsoleTelemetryAdapter;
|
|
39
|
+
function createTelemetryAdapter() {
|
|
40
|
+
if (process.env['NODE_ENV'] === 'development' || process.env['NODE_ENV'] === 'test') {
|
|
41
|
+
return new ConsoleTelemetryAdapter();
|
|
42
|
+
}
|
|
43
|
+
return new NoOpTelemetryAdapter();
|
|
44
|
+
}
|
|
45
|
+
exports.telemetryAdapter = createTelemetryAdapter();
|
|
46
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/adapters/telemetry.ts"],"names":[],"mappings":";;;AAqEA,wDAQC;AAvDD,MAAa,oBAAoB;IAC/B,QAAQ,CAAC,KAAqB;IAE9B,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,MAAc,EAAE,QAA8B;IAErE,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,MAAc,EAAE,SAAc,EAAE,QAA8B;IAEhG,CAAC;CACF;AAZD,oDAYC;AAKD,MAAa,uBAAuB;IAClC,QAAQ,CAAC,KAAqB;QAC5B,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,CAAC,IAAI,EAAE,EAAE;YAClD,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;YAClD,GAAG,KAAK,CAAC,QAAQ;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,MAAc,EAAE,QAA8B;QACnE,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,EAAE,EAAE;YACxC,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,GAAG,QAAQ;SACZ,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,MAAc,EAAE,SAAc,EAAE,QAA8B;QAC9F,OAAO,CAAC,GAAG,CAAC,iCAAiC,KAAK,EAAE,EAAE;YACpD,MAAM;YACN,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,GAAG,QAAQ;SACZ,CAAC,CAAC;IACL,CAAC;CACF;AAzBD,0DAyBC;AAKD,SAAgB,sBAAsB;IAGpC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM,EAAE,CAAC;QACpF,OAAO,IAAI,uBAAuB,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,IAAI,oBAAoB,EAAE,CAAC;AACpC,CAAC;AAGY,QAAA,gBAAgB,GAAG,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SentinelConfig } from './types';
|
|
2
|
+
export declare const sentinelConfig: Readonly<SentinelConfig>;
|
|
3
|
+
export declare function getConfigString(): string;
|
|
4
|
+
export declare function isSentinelEnabled(): boolean;
|
|
5
|
+
export declare function getConfigValue<K extends keyof SentinelConfig>(key: K): SentinelConfig[K];
|
|
6
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA0CzC,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAyB,CAAC;AAK9E,wBAAgB,eAAe,IAAI,MAAM,CAQxC;AAKD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAKD,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAExF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sentinelConfig = void 0;
|
|
4
|
+
exports.getConfigString = getConfigString;
|
|
5
|
+
exports.isSentinelEnabled = isSentinelEnabled;
|
|
6
|
+
exports.getConfigValue = getConfigValue;
|
|
7
|
+
const config = {
|
|
8
|
+
enabled: process.env['SENTINEL_ENABLED'] === 'true',
|
|
9
|
+
runMaxDurationMs: parseInt(process.env['RUN_MAX_DURATION_MS'] || '120000', 10),
|
|
10
|
+
runMaxTokens: parseInt(process.env['RUN_MAX_TOKENS'] || '16000', 10),
|
|
11
|
+
runIdleMs: parseInt(process.env['SENTINEL_IDLE_MS'] || process.env['RUN_IDLE_MS'] || '30000', 10),
|
|
12
|
+
loopWindow: parseInt(process.env['SENTINEL_LOOP_WINDOW'] || '15', 10),
|
|
13
|
+
loopMax: parseInt(process.env['SENTINEL_LOOP_MAX'] || '5', 10),
|
|
14
|
+
runMaxCost: parseFloat(process.env['RUN_MAX_COST'] || process.env['SENTINEL_MAX_COST'] || '1.00'),
|
|
15
|
+
auditSink: (process.env['SENTINEL_AUDIT_SINK'] === 'file' ? 'file' : 'console'),
|
|
16
|
+
auditFile: process.env['SENTINEL_AUDIT_FILE'] || 'packages/sentinel/sentinel_audit.log'
|
|
17
|
+
};
|
|
18
|
+
if (config.runMaxDurationMs <= 0) {
|
|
19
|
+
throw new Error('RUN_MAX_DURATION_MS must be positive');
|
|
20
|
+
}
|
|
21
|
+
if (config.runMaxTokens <= 0) {
|
|
22
|
+
throw new Error('RUN_MAX_TOKENS must be positive');
|
|
23
|
+
}
|
|
24
|
+
if (config.runIdleMs <= 0) {
|
|
25
|
+
throw new Error('RUN_IDLE_MS must be positive');
|
|
26
|
+
}
|
|
27
|
+
if (config.loopWindow <= 0) {
|
|
28
|
+
throw new Error('SENTINEL_LOOP_WINDOW must be positive');
|
|
29
|
+
}
|
|
30
|
+
if (config.loopMax <= 0) {
|
|
31
|
+
throw new Error('SENTINEL_LOOP_MAX must be positive');
|
|
32
|
+
}
|
|
33
|
+
if (config.loopMax > config.loopWindow) {
|
|
34
|
+
throw new Error('SENTINEL_LOOP_MAX cannot exceed SENTINEL_LOOP_WINDOW');
|
|
35
|
+
}
|
|
36
|
+
exports.sentinelConfig = Object.freeze(config);
|
|
37
|
+
function getConfigString() {
|
|
38
|
+
return `Sentinel Config:
|
|
39
|
+
Enabled: ${exports.sentinelConfig.enabled}
|
|
40
|
+
Max Duration: ${exports.sentinelConfig.runMaxDurationMs}ms
|
|
41
|
+
Max Tokens: ${exports.sentinelConfig.runMaxTokens}
|
|
42
|
+
Idle Timeout: ${exports.sentinelConfig.runIdleMs}ms
|
|
43
|
+
Loop Window: ${exports.sentinelConfig.loopWindow}
|
|
44
|
+
Loop Max: ${exports.sentinelConfig.loopMax}`;
|
|
45
|
+
}
|
|
46
|
+
function isSentinelEnabled() {
|
|
47
|
+
return exports.sentinelConfig.enabled;
|
|
48
|
+
}
|
|
49
|
+
function getConfigValue(key) {
|
|
50
|
+
return exports.sentinelConfig[key];
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AA+CA,0CAQC;AAKD,8CAEC;AAKD,wCAEC;AA/DD,MAAM,MAAM,GAAiG;IAC3G,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,MAAM;IACnD,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,QAAQ,EAAE,EAAE,CAAC;IAC9E,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,OAAO,EAAE,EAAE,CAAC;IAEpE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,OAAO,EAAE,EAAE,CAAC;IACjG,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;IACrE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;IAE9D,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC;IAEjG,SAAS,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,sCAAsC;CACxF,CAAC;AAGF,IAAI,MAAM,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;IACjC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAC1D,CAAC;AACD,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC;IAC7B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACrD,CAAC;AACD,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;IAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAClD,CAAC;AACD,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;IAC3B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC3D,CAAC;AACD,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;IACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACxD,CAAC;AACD,IAAI,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACvC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;AAC1E,CAAC;AAGY,QAAA,cAAc,GAA6B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAK9E,SAAgB,eAAe;IAC7B,OAAO;aACI,sBAAc,CAAC,OAAO;kBACjB,sBAAc,CAAC,gBAAgB;gBACjC,sBAAc,CAAC,YAAY;kBACzB,sBAAc,CAAC,SAAS;iBACzB,sBAAc,CAAC,UAAU;cAC5B,sBAAc,CAAC,OAAO,EAAE,CAAC;AACvC,CAAC;AAKD,SAAgB,iBAAiB;IAC/B,OAAO,sBAAc,CAAC,OAAO,CAAC;AAChC,CAAC;AAKD,SAAgB,cAAc,CAAiC,GAAM;IACnE,OAAO,sBAAc,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { Sentinel } from './sentinel';
|
|
2
|
+
export type { RunEvent, EventStream, RunState, SentinelConfig } from './types';
|
|
3
|
+
export { EventBuffer } from './internal/event-buffer';
|
|
4
|
+
export { sentinelConfig } from './config';
|
|
5
|
+
export { cancelAdapter, CancelAdapter } from './adapters/cancel-adapter';
|
|
6
|
+
export { telemetryAdapter, TelemetryAdapter } from './adapters/telemetry';
|
|
7
|
+
export { auditAdapter, AuditAdapter } from './adapters/audit';
|
|
8
|
+
export { policyManager, PolicyManager, Policy, PolicyViolation } from './policies';
|
|
9
|
+
export { TimeoutPolicy, IdlePolicy, TokenCapPolicy, LoopDetectionPolicy } from './policies';
|
|
10
|
+
export { policyTemplates, getPolicyTemplate, listPolicyTemplates, applyPolicyTemplate, recommendTemplate, type PolicyTemplate } from './policy-templates';
|
|
11
|
+
export { predictViolations, getMostLikelyViolation, type ViolationPrediction } from './predictive';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMostLikelyViolation = exports.predictViolations = exports.recommendTemplate = exports.applyPolicyTemplate = exports.listPolicyTemplates = exports.getPolicyTemplate = exports.policyTemplates = exports.LoopDetectionPolicy = exports.TokenCapPolicy = exports.IdlePolicy = exports.TimeoutPolicy = exports.PolicyManager = exports.policyManager = exports.auditAdapter = exports.telemetryAdapter = exports.cancelAdapter = exports.sentinelConfig = exports.EventBuffer = exports.Sentinel = void 0;
|
|
4
|
+
var sentinel_1 = require("./sentinel");
|
|
5
|
+
Object.defineProperty(exports, "Sentinel", { enumerable: true, get: function () { return sentinel_1.Sentinel; } });
|
|
6
|
+
var event_buffer_1 = require("./internal/event-buffer");
|
|
7
|
+
Object.defineProperty(exports, "EventBuffer", { enumerable: true, get: function () { return event_buffer_1.EventBuffer; } });
|
|
8
|
+
var config_1 = require("./config");
|
|
9
|
+
Object.defineProperty(exports, "sentinelConfig", { enumerable: true, get: function () { return config_1.sentinelConfig; } });
|
|
10
|
+
var cancel_adapter_1 = require("./adapters/cancel-adapter");
|
|
11
|
+
Object.defineProperty(exports, "cancelAdapter", { enumerable: true, get: function () { return cancel_adapter_1.cancelAdapter; } });
|
|
12
|
+
var telemetry_1 = require("./adapters/telemetry");
|
|
13
|
+
Object.defineProperty(exports, "telemetryAdapter", { enumerable: true, get: function () { return telemetry_1.telemetryAdapter; } });
|
|
14
|
+
var audit_1 = require("./adapters/audit");
|
|
15
|
+
Object.defineProperty(exports, "auditAdapter", { enumerable: true, get: function () { return audit_1.auditAdapter; } });
|
|
16
|
+
var policies_1 = require("./policies");
|
|
17
|
+
Object.defineProperty(exports, "policyManager", { enumerable: true, get: function () { return policies_1.policyManager; } });
|
|
18
|
+
Object.defineProperty(exports, "PolicyManager", { enumerable: true, get: function () { return policies_1.PolicyManager; } });
|
|
19
|
+
var policies_2 = require("./policies");
|
|
20
|
+
Object.defineProperty(exports, "TimeoutPolicy", { enumerable: true, get: function () { return policies_2.TimeoutPolicy; } });
|
|
21
|
+
Object.defineProperty(exports, "IdlePolicy", { enumerable: true, get: function () { return policies_2.IdlePolicy; } });
|
|
22
|
+
Object.defineProperty(exports, "TokenCapPolicy", { enumerable: true, get: function () { return policies_2.TokenCapPolicy; } });
|
|
23
|
+
Object.defineProperty(exports, "LoopDetectionPolicy", { enumerable: true, get: function () { return policies_2.LoopDetectionPolicy; } });
|
|
24
|
+
var policy_templates_1 = require("./policy-templates");
|
|
25
|
+
Object.defineProperty(exports, "policyTemplates", { enumerable: true, get: function () { return policy_templates_1.policyTemplates; } });
|
|
26
|
+
Object.defineProperty(exports, "getPolicyTemplate", { enumerable: true, get: function () { return policy_templates_1.getPolicyTemplate; } });
|
|
27
|
+
Object.defineProperty(exports, "listPolicyTemplates", { enumerable: true, get: function () { return policy_templates_1.listPolicyTemplates; } });
|
|
28
|
+
Object.defineProperty(exports, "applyPolicyTemplate", { enumerable: true, get: function () { return policy_templates_1.applyPolicyTemplate; } });
|
|
29
|
+
Object.defineProperty(exports, "recommendTemplate", { enumerable: true, get: function () { return policy_templates_1.recommendTemplate; } });
|
|
30
|
+
var predictive_1 = require("./predictive");
|
|
31
|
+
Object.defineProperty(exports, "predictViolations", { enumerable: true, get: function () { return predictive_1.predictViolations; } });
|
|
32
|
+
Object.defineProperty(exports, "getMostLikelyViolation", { enumerable: true, get: function () { return predictive_1.getMostLikelyViolation; } });
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAEjB,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AACvB,4DAAyE;AAAhE,+GAAA,aAAa,OAAA;AACtB,kDAA0E;AAAjE,6GAAA,gBAAgB,OAAA;AACzB,0CAA8D;AAArD,qGAAA,YAAY,OAAA;AACrB,uCAAmF;AAA1E,yGAAA,aAAa,OAAA;AAAE,yGAAA,aAAa,OAAA;AACrC,uCAA4F;AAAnF,yGAAA,aAAa,OAAA;AAAE,sGAAA,UAAU,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AACvE,uDAO4B;AAN1B,mHAAA,eAAe,OAAA;AACf,qHAAA,iBAAiB,OAAA;AACjB,uHAAA,mBAAmB,OAAA;AACnB,uHAAA,mBAAmB,OAAA;AACnB,qHAAA,iBAAiB,OAAA;AAGnB,2CAIsB;AAHpB,+GAAA,iBAAiB,OAAA;AACjB,oHAAA,sBAAsB,OAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { RunEvent, RunState } from '../types';
|
|
2
|
+
export declare class EventBuffer {
|
|
3
|
+
private static readonly MAX_EVENTS_PER_RUN;
|
|
4
|
+
private runStates;
|
|
5
|
+
processEvent(event: RunEvent): void;
|
|
6
|
+
getRunState(runId: string): RunState | undefined;
|
|
7
|
+
getActiveRuns(): RunState[];
|
|
8
|
+
markKilled(runId: string, reason: string): void;
|
|
9
|
+
cleanup(): void;
|
|
10
|
+
getRecentEvents(runId: string, count?: number): RunEvent[];
|
|
11
|
+
getTokenEventsInWindow(runId: string, windowMs: number): RunEvent[];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=event-buffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-buffer.d.ts","sourceRoot":"","sources":["../../src/internal/event-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE9C,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAO;IACjD,OAAO,CAAC,SAAS,CAA+B;IAKzC,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAuDnC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAOhD,aAAa,IAAI,QAAQ,EAAE;IAQ3B,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAW/C,OAAO,IAAI,IAAI;IAiBf,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,QAAQ,EAAE;IAU9D,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;CAW3E"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventBuffer = void 0;
|
|
4
|
+
class EventBuffer {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.runStates = new Map();
|
|
7
|
+
}
|
|
8
|
+
processEvent(event) {
|
|
9
|
+
const runId = event.runId;
|
|
10
|
+
let runState = this.runStates.get(runId);
|
|
11
|
+
if (!runState) {
|
|
12
|
+
runState = {
|
|
13
|
+
runId,
|
|
14
|
+
createdAt: Date.now(),
|
|
15
|
+
tokenCount: 0,
|
|
16
|
+
status: 'created',
|
|
17
|
+
events: []
|
|
18
|
+
};
|
|
19
|
+
this.runStates.set(runId, runState);
|
|
20
|
+
}
|
|
21
|
+
runState.events.push(event);
|
|
22
|
+
if (runState.events.length > EventBuffer.MAX_EVENTS_PER_RUN) {
|
|
23
|
+
runState.events.shift();
|
|
24
|
+
}
|
|
25
|
+
switch (event.type) {
|
|
26
|
+
case 'created':
|
|
27
|
+
runState.createdAt = event.at;
|
|
28
|
+
break;
|
|
29
|
+
case 'started':
|
|
30
|
+
runState.startedAt = event.at;
|
|
31
|
+
runState.status = 'running';
|
|
32
|
+
break;
|
|
33
|
+
case 'token':
|
|
34
|
+
runState.lastTokenAt = event.at;
|
|
35
|
+
runState.tokenCount += event.tokens;
|
|
36
|
+
if (event.cost !== undefined) {
|
|
37
|
+
runState.cost = (runState.cost || 0) + event.cost;
|
|
38
|
+
}
|
|
39
|
+
break;
|
|
40
|
+
case 'finish':
|
|
41
|
+
runState.status = 'finished';
|
|
42
|
+
break;
|
|
43
|
+
case 'error':
|
|
44
|
+
runState.status = 'finished';
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
getRunState(runId) {
|
|
49
|
+
return this.runStates.get(runId);
|
|
50
|
+
}
|
|
51
|
+
getActiveRuns() {
|
|
52
|
+
return Array.from(this.runStates.values())
|
|
53
|
+
.filter(run => run.status === 'created' || run.status === 'running');
|
|
54
|
+
}
|
|
55
|
+
markKilled(runId, reason) {
|
|
56
|
+
const runState = this.runStates.get(runId);
|
|
57
|
+
if (runState) {
|
|
58
|
+
runState.status = 'killed';
|
|
59
|
+
runState.killReason = reason;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
cleanup() {
|
|
63
|
+
const now = Date.now();
|
|
64
|
+
const maxAge = 60 * 60 * 1000;
|
|
65
|
+
for (const [runId, runState] of this.runStates.entries()) {
|
|
66
|
+
if (runState.status === 'finished' || runState.status === 'killed') {
|
|
67
|
+
const age = now - Math.max(runState.createdAt, runState.startedAt || 0);
|
|
68
|
+
if (age > maxAge) {
|
|
69
|
+
this.runStates.delete(runId);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
getRecentEvents(runId, count = 10) {
|
|
75
|
+
const runState = this.runStates.get(runId);
|
|
76
|
+
if (!runState)
|
|
77
|
+
return [];
|
|
78
|
+
return runState.events.slice(-count);
|
|
79
|
+
}
|
|
80
|
+
getTokenEventsInWindow(runId, windowMs) {
|
|
81
|
+
const runState = this.runStates.get(runId);
|
|
82
|
+
if (!runState)
|
|
83
|
+
return [];
|
|
84
|
+
const now = Date.now();
|
|
85
|
+
const cutoff = now - windowMs;
|
|
86
|
+
return runState.events
|
|
87
|
+
.filter(event => event.type === 'token' && event.at >= cutoff)
|
|
88
|
+
.slice(-10);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.EventBuffer = EventBuffer;
|
|
92
|
+
EventBuffer.MAX_EVENTS_PER_RUN = 100;
|
|
93
|
+
//# sourceMappingURL=event-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-buffer.js","sourceRoot":"","sources":["../../src/internal/event-buffer.ts"],"names":[],"mappings":";;;AAEA,MAAa,WAAW;IAAxB;QAEU,cAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IA4HlD,CAAC;IAvHQ,YAAY,CAAC,KAAe;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG;gBACT,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,UAAU,EAAE,CAAC;gBACb,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,EAAE;aACX,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;QAGD,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,kBAAkB,EAAE,CAAC;YAC5D,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QAID,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS;gBACZ,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM;YAER,KAAK,SAAS;gBACZ,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC5B,MAAM;YAER,KAAK,OAAO;gBACV,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC;gBAChC,QAAQ,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;gBAEpC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC7B,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;gBACpD,CAAC;gBACD,MAAM;YAER,KAAK,QAAQ;gBACX,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;gBAC7B,MAAM;YAER,KAAK,OAAO;gBACV,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;gBAC7B,MAAM;QACV,CAAC;IACH,CAAC;IAKM,WAAW,CAAC,KAAa;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAKM,aAAa;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;aACvC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACzE,CAAC;IAKM,UAAU,CAAC,KAAa,EAAE,MAAc;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC;YAC3B,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC;QAC/B,CAAC;IACH,CAAC;IAKM,OAAO;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAE9B,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACnE,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;gBACxE,IAAI,GAAG,GAAG,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAKM,eAAe,CAAC,KAAa,EAAE,QAAgB,EAAE;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEzB,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAKM,sBAAsB,CAAC,KAAa,EAAE,QAAgB;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC;QAE9B,OAAO,QAAQ,CAAC,MAAM;aACnB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,EAAE,IAAI,MAAM,CAAC;aAC7D,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;;AA7HH,kCA8HC;AA7HyB,8BAAkB,GAAG,GAAG,AAAN,CAAO"}
|