@auxiora/consciousness 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/dist/consciousness.d.ts +34 -0
- package/dist/consciousness.d.ts.map +1 -0
- package/dist/consciousness.js +48 -0
- package/dist/consciousness.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/journal/journal-types.d.ts +55 -0
- package/dist/journal/journal-types.d.ts.map +1 -0
- package/dist/journal/journal-types.js +2 -0
- package/dist/journal/journal-types.js.map +1 -0
- package/dist/journal/session-journal.d.ts +23 -0
- package/dist/journal/session-journal.d.ts.map +1 -0
- package/dist/journal/session-journal.js +149 -0
- package/dist/journal/session-journal.js.map +1 -0
- package/dist/model/model-types.d.ts +37 -0
- package/dist/model/model-types.d.ts.map +1 -0
- package/dist/model/model-types.js +2 -0
- package/dist/model/model-types.js.map +1 -0
- package/dist/model/self-model.d.ts +53 -0
- package/dist/model/self-model.d.ts.map +1 -0
- package/dist/model/self-model.js +126 -0
- package/dist/model/self-model.js.map +1 -0
- package/dist/monitor/monitor-types.d.ts +38 -0
- package/dist/monitor/monitor-types.d.ts.map +1 -0
- package/dist/monitor/monitor-types.js +2 -0
- package/dist/monitor/monitor-types.js.map +1 -0
- package/dist/monitor/self-monitor.d.ts +20 -0
- package/dist/monitor/self-monitor.d.ts.map +1 -0
- package/dist/monitor/self-monitor.js +55 -0
- package/dist/monitor/self-monitor.js.map +1 -0
- package/dist/monitor/signal-synthesizer.d.ts +57 -0
- package/dist/monitor/signal-synthesizer.d.ts.map +1 -0
- package/dist/monitor/signal-synthesizer.js +81 -0
- package/dist/monitor/signal-synthesizer.js.map +1 -0
- package/dist/repair/repair-actions.d.ts +10 -0
- package/dist/repair/repair-actions.d.ts.map +1 -0
- package/dist/repair/repair-actions.js +77 -0
- package/dist/repair/repair-actions.js.map +1 -0
- package/dist/repair/repair-types.d.ts +28 -0
- package/dist/repair/repair-types.d.ts.map +1 -0
- package/dist/repair/repair-types.js +2 -0
- package/dist/repair/repair-types.js.map +1 -0
- package/dist/repair/self-repair-engine.d.ts +32 -0
- package/dist/repair/self-repair-engine.d.ts.map +1 -0
- package/dist/repair/self-repair-engine.js +122 -0
- package/dist/repair/self-repair-engine.js.map +1 -0
- package/package.json +31 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { SessionSummary } from '../journal/journal-types.js';
|
|
2
|
+
import type { SystemPulse } from '../monitor/monitor-types.js';
|
|
3
|
+
import type { SelfModelSnapshot } from './model-types.js';
|
|
4
|
+
export interface SessionJournalLike {
|
|
5
|
+
getRecentSessions(limit?: number): Promise<SessionSummary[]>;
|
|
6
|
+
}
|
|
7
|
+
export interface SelfMonitorLike {
|
|
8
|
+
getPulse(): SystemPulse;
|
|
9
|
+
}
|
|
10
|
+
export interface SelfRepairEngineLike {
|
|
11
|
+
getRepairHistory(limit?: number): Array<{
|
|
12
|
+
actionId: string;
|
|
13
|
+
executedAt: number;
|
|
14
|
+
}>;
|
|
15
|
+
getPendingApprovals(): unknown[];
|
|
16
|
+
}
|
|
17
|
+
export interface DecisionLogLike {
|
|
18
|
+
query(q: {
|
|
19
|
+
status?: string;
|
|
20
|
+
limit?: number;
|
|
21
|
+
}): Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
status: string;
|
|
24
|
+
}>;
|
|
25
|
+
getDueFollowUps(): unknown[];
|
|
26
|
+
}
|
|
27
|
+
export interface FeedbackStoreLike {
|
|
28
|
+
getInsights(): {
|
|
29
|
+
weakDomains: string[];
|
|
30
|
+
trend: 'improving' | 'declining' | 'stable';
|
|
31
|
+
totalFeedback: number;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export interface SelfModelDeps {
|
|
35
|
+
journal: SessionJournalLike;
|
|
36
|
+
monitor: SelfMonitorLike;
|
|
37
|
+
repair: SelfRepairEngineLike;
|
|
38
|
+
decisionLog: DecisionLogLike;
|
|
39
|
+
feedbackStore: FeedbackStoreLike;
|
|
40
|
+
version: string;
|
|
41
|
+
}
|
|
42
|
+
export declare class SelfModel {
|
|
43
|
+
private readonly deps;
|
|
44
|
+
constructor(deps: SelfModelDeps);
|
|
45
|
+
synthesize(): Promise<SelfModelSnapshot>;
|
|
46
|
+
private buildIdentity;
|
|
47
|
+
private buildMemory;
|
|
48
|
+
private buildPerformance;
|
|
49
|
+
private buildRepair;
|
|
50
|
+
private formatUptime;
|
|
51
|
+
private buildNarrative;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=self-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-model.d.ts","sourceRoot":"","sources":["../../src/model/self-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EACV,iBAAiB,EAKlB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,IAAI,WAAW,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClF,mBAAmB,IAAI,OAAO,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,eAAe,IAAI,OAAO,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,IAAI;QACb,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;QAC5C,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,WAAW,EAAE,eAAe,CAAC;IAC7B,aAAa,EAAE,iBAAiB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgB;gBAEzB,IAAI,EAAE,aAAa;IAIzB,UAAU,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAiC9C,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;IA8BnB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,cAAc;CAkDvB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
2
|
+
export class SelfModel {
|
|
3
|
+
deps;
|
|
4
|
+
constructor(deps) {
|
|
5
|
+
this.deps = deps;
|
|
6
|
+
}
|
|
7
|
+
async synthesize() {
|
|
8
|
+
const now = Date.now();
|
|
9
|
+
const pulse = this.deps.monitor.getPulse();
|
|
10
|
+
const sessions = await this.deps.journal.getRecentSessions(100);
|
|
11
|
+
const feedback = this.deps.feedbackStore.getInsights();
|
|
12
|
+
const activeDecisions = this.deps.decisionLog.query({ status: 'active' });
|
|
13
|
+
const pendingFollowUps = this.deps.decisionLog.getDueFollowUps();
|
|
14
|
+
const repairHistory = this.deps.repair.getRepairHistory(100);
|
|
15
|
+
const pendingApprovals = this.deps.repair.getPendingApprovals();
|
|
16
|
+
const identity = this.buildIdentity(pulse);
|
|
17
|
+
const memory = this.buildMemory(sessions, activeDecisions, pendingFollowUps);
|
|
18
|
+
const performance = this.buildPerformance(pulse, feedback);
|
|
19
|
+
const repair = this.buildRepair(repairHistory, pendingApprovals, now);
|
|
20
|
+
const selfNarrative = this.buildNarrative(identity, memory, pulse, feedback, pendingApprovals);
|
|
21
|
+
return {
|
|
22
|
+
generatedAt: now,
|
|
23
|
+
identity,
|
|
24
|
+
memory,
|
|
25
|
+
health: pulse,
|
|
26
|
+
performance,
|
|
27
|
+
repair,
|
|
28
|
+
selfNarrative,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
buildIdentity(pulse) {
|
|
32
|
+
return {
|
|
33
|
+
name: 'Auxiora',
|
|
34
|
+
version: this.deps.version,
|
|
35
|
+
personality: 'The Architect',
|
|
36
|
+
uptime: pulse.resources.uptimeSeconds,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
buildMemory(sessions, activeDecisions, pendingFollowUps) {
|
|
40
|
+
const totalSessions = sessions.length;
|
|
41
|
+
const totalMessages = sessions.reduce((sum, s) => sum + s.messageCount, 0);
|
|
42
|
+
const oldestMemory = sessions.length > 0
|
|
43
|
+
? Math.min(...sessions.map((s) => s.startTime))
|
|
44
|
+
: 0;
|
|
45
|
+
const domainSet = new Set();
|
|
46
|
+
for (const session of sessions) {
|
|
47
|
+
for (const domain of session.domains) {
|
|
48
|
+
domainSet.add(domain);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const recentTopics = [...domainSet].slice(0, 5);
|
|
52
|
+
return {
|
|
53
|
+
totalSessions,
|
|
54
|
+
totalMessages,
|
|
55
|
+
oldestMemory,
|
|
56
|
+
recentTopics,
|
|
57
|
+
activeDecisions: activeDecisions.length,
|
|
58
|
+
pendingFollowUps: pendingFollowUps.length,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
buildPerformance(pulse, feedback) {
|
|
62
|
+
return {
|
|
63
|
+
responseQuality: pulse.reasoning.avgResponseQuality,
|
|
64
|
+
domainAccuracy: pulse.reasoning.domainAccuracy,
|
|
65
|
+
userSatisfaction: feedback.trend,
|
|
66
|
+
strongDomains: [],
|
|
67
|
+
weakDomains: feedback.weakDomains,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
buildRepair(repairHistory, pendingApprovals, now) {
|
|
71
|
+
const recentCutoff = now - DAY_MS;
|
|
72
|
+
const recentActions = repairHistory.filter((r) => r.executedAt >= recentCutoff).length;
|
|
73
|
+
const lastRepairAt = repairHistory.length > 0
|
|
74
|
+
? Math.max(...repairHistory.map((r) => r.executedAt))
|
|
75
|
+
: null;
|
|
76
|
+
return {
|
|
77
|
+
recentActions,
|
|
78
|
+
pendingApprovals: pendingApprovals.length,
|
|
79
|
+
lastRepairAt,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
formatUptime(seconds) {
|
|
83
|
+
if (seconds < 60)
|
|
84
|
+
return `${seconds}s`;
|
|
85
|
+
if (seconds < 3600)
|
|
86
|
+
return `${Math.floor(seconds / 60)}m`;
|
|
87
|
+
if (seconds < 86400)
|
|
88
|
+
return `${Math.floor(seconds / 3600)}h`;
|
|
89
|
+
return `${Math.floor(seconds / 86400)}d`;
|
|
90
|
+
}
|
|
91
|
+
buildNarrative(identity, memory, pulse, feedback, pendingApprovals) {
|
|
92
|
+
const parts = [];
|
|
93
|
+
// Sentence 1: Identity
|
|
94
|
+
parts.push(`I am Auxiora v${identity.version}, running for ${this.formatUptime(identity.uptime)}. I use The Architect personality framework.`);
|
|
95
|
+
// Sentence 2: Memory
|
|
96
|
+
if (memory.totalSessions === 0) {
|
|
97
|
+
parts.push('I have no conversation history yet.');
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const topicStr = memory.recentTopics.length > 0
|
|
101
|
+
? ` My recent focus has been on ${memory.recentTopics.join(', ')}.`
|
|
102
|
+
: '';
|
|
103
|
+
parts.push(`I remember ${memory.totalSessions} conversations with ${memory.totalMessages} messages.${topicStr}`);
|
|
104
|
+
}
|
|
105
|
+
// Sentence 3: Health
|
|
106
|
+
let healthStr = `My systems are ${pulse.overall}.`;
|
|
107
|
+
if (pulse.overall !== 'healthy' && pulse.anomalies.length > 0) {
|
|
108
|
+
const issues = pulse.anomalies.map((a) => a.description).join('; ');
|
|
109
|
+
healthStr += ` Issues: ${issues}.`;
|
|
110
|
+
}
|
|
111
|
+
parts.push(healthStr);
|
|
112
|
+
// Sentence 4: Satisfaction
|
|
113
|
+
parts.push(`User satisfaction is ${feedback.trend}.`);
|
|
114
|
+
// Sentence 5: Decisions / approvals (conditional)
|
|
115
|
+
if (memory.activeDecisions > 0 || pendingApprovals.length > 0) {
|
|
116
|
+
let decisionStr = `I have ${memory.activeDecisions} active decisions`;
|
|
117
|
+
if (pendingApprovals.length > 0) {
|
|
118
|
+
decisionStr += ` and ${pendingApprovals.length} repair actions awaiting approval`;
|
|
119
|
+
}
|
|
120
|
+
decisionStr += '.';
|
|
121
|
+
parts.push(decisionStr);
|
|
122
|
+
}
|
|
123
|
+
return parts.join(' ');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=self-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-model.js","sourceRoot":"","sources":["../../src/model/self-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface SubsystemStatus {
|
|
2
|
+
name: string;
|
|
3
|
+
status: 'up' | 'degraded' | 'down';
|
|
4
|
+
lastCheck: number;
|
|
5
|
+
metrics?: Record<string, number>;
|
|
6
|
+
}
|
|
7
|
+
export interface Anomaly {
|
|
8
|
+
subsystem: string;
|
|
9
|
+
severity: 'low' | 'medium' | 'high';
|
|
10
|
+
description: string;
|
|
11
|
+
detectedAt: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ReasoningMetrics {
|
|
14
|
+
avgResponseQuality: number;
|
|
15
|
+
domainAccuracy: number;
|
|
16
|
+
preferenceStability: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ResourceMetrics {
|
|
19
|
+
memoryUsageMb: number;
|
|
20
|
+
cpuPercent: number;
|
|
21
|
+
activeConnections: number;
|
|
22
|
+
uptimeSeconds: number;
|
|
23
|
+
}
|
|
24
|
+
export interface CapabilityMetrics {
|
|
25
|
+
totalCapabilities: number;
|
|
26
|
+
healthyCapabilities: number;
|
|
27
|
+
degradedCapabilities: string[];
|
|
28
|
+
}
|
|
29
|
+
export interface SystemPulse {
|
|
30
|
+
timestamp: number;
|
|
31
|
+
overall: 'healthy' | 'degraded' | 'critical';
|
|
32
|
+
subsystems: SubsystemStatus[];
|
|
33
|
+
anomalies: Anomaly[];
|
|
34
|
+
reasoning: ReasoningMetrics;
|
|
35
|
+
resources: ResourceMetrics;
|
|
36
|
+
capabilities: CapabilityMetrics;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=monitor-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-types.d.ts","sourceRoot":"","sources":["../../src/monitor/monitor-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC7C,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,iBAAiB,CAAC;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-types.js","sourceRoot":"","sources":["../../src/monitor/monitor-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SystemPulse, Anomaly } from './monitor-types.js';
|
|
2
|
+
import type { SignalSynthesizer } from './signal-synthesizer.js';
|
|
3
|
+
export interface SelfMonitorOptions {
|
|
4
|
+
intervalMs?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare class SelfMonitor {
|
|
7
|
+
private readonly synthesizer;
|
|
8
|
+
private readonly intervalMs;
|
|
9
|
+
private latestPulse;
|
|
10
|
+
private previousAnomalyKeys;
|
|
11
|
+
private intervalId;
|
|
12
|
+
private anomalyHandlers;
|
|
13
|
+
constructor(synthesizer: SignalSynthesizer, options?: SelfMonitorOptions);
|
|
14
|
+
start(): void;
|
|
15
|
+
stop(): void;
|
|
16
|
+
getPulse(): SystemPulse;
|
|
17
|
+
onAnomaly(handler: (anomaly: Anomaly) => void): void;
|
|
18
|
+
private tick;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=self-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-monitor.d.ts","sourceRoot":"","sources":["../../src/monitor/self-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgBD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,eAAe,CAAyC;gBAEpD,WAAW,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,kBAAkB;IAKxE,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IAOZ,QAAQ,IAAI,WAAW;IAIvB,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIpD,OAAO,CAAC,IAAI;CAiBb"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
const EMPTY_PULSE = {
|
|
2
|
+
timestamp: 0,
|
|
3
|
+
overall: 'healthy',
|
|
4
|
+
subsystems: [],
|
|
5
|
+
anomalies: [],
|
|
6
|
+
reasoning: { avgResponseQuality: 0, domainAccuracy: 0, preferenceStability: 0 },
|
|
7
|
+
resources: { memoryUsageMb: 0, cpuPercent: 0, activeConnections: 0, uptimeSeconds: 0 },
|
|
8
|
+
capabilities: { totalCapabilities: 0, healthyCapabilities: 0, degradedCapabilities: [] },
|
|
9
|
+
};
|
|
10
|
+
function anomalyKey(a) {
|
|
11
|
+
return `${a.subsystem}:${a.description}`;
|
|
12
|
+
}
|
|
13
|
+
export class SelfMonitor {
|
|
14
|
+
synthesizer;
|
|
15
|
+
intervalMs;
|
|
16
|
+
latestPulse = EMPTY_PULSE;
|
|
17
|
+
previousAnomalyKeys = new Set();
|
|
18
|
+
intervalId;
|
|
19
|
+
anomalyHandlers = [];
|
|
20
|
+
constructor(synthesizer, options) {
|
|
21
|
+
this.synthesizer = synthesizer;
|
|
22
|
+
this.intervalMs = options?.intervalMs ?? 30_000;
|
|
23
|
+
}
|
|
24
|
+
start() {
|
|
25
|
+
this.tick();
|
|
26
|
+
this.intervalId = setInterval(() => this.tick(), this.intervalMs);
|
|
27
|
+
}
|
|
28
|
+
stop() {
|
|
29
|
+
if (this.intervalId !== undefined) {
|
|
30
|
+
clearInterval(this.intervalId);
|
|
31
|
+
this.intervalId = undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
getPulse() {
|
|
35
|
+
return this.latestPulse;
|
|
36
|
+
}
|
|
37
|
+
onAnomaly(handler) {
|
|
38
|
+
this.anomalyHandlers.push(handler);
|
|
39
|
+
}
|
|
40
|
+
tick() {
|
|
41
|
+
const pulse = this.synthesizer.synthesize();
|
|
42
|
+
this.latestPulse = pulse;
|
|
43
|
+
const currentKeys = new Set(pulse.anomalies.map(anomalyKey));
|
|
44
|
+
for (const anomaly of pulse.anomalies) {
|
|
45
|
+
const key = anomalyKey(anomaly);
|
|
46
|
+
if (!this.previousAnomalyKeys.has(key)) {
|
|
47
|
+
for (const handler of this.anomalyHandlers) {
|
|
48
|
+
handler(anomaly);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
this.previousAnomalyKeys = currentKeys;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=self-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-monitor.js","sourceRoot":"","sources":["../../src/monitor/self-monitor.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,GAAgB;IAC/B,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,EAAE;IACd,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE;IAC/E,SAAS,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;IACtF,YAAY,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,oBAAoB,EAAE,EAAE,EAAE;CACzF,CAAC;AAEF,SAAS,UAAU,CAAC,CAAU;IAC5B,OAAO,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,OAAO,WAAW;IACL,WAAW,CAAoB;IAC/B,UAAU,CAAS;IAC5B,WAAW,GAAgB,WAAW,CAAC;IACvC,mBAAmB,GAAgB,IAAI,GAAG,EAAE,CAAC;IAC7C,UAAU,CAA6C;IACvD,eAAe,GAAsC,EAAE,CAAC;IAEhE,YAAY,WAA8B,EAAE,OAA4B;QACtE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC;IAClD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACpE,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,SAAS,CAAC,OAAmC;QAC3C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAEO,IAAI;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAEzB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QAE7D,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC3C,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { SystemPulse, ResourceMetrics, CapabilityMetrics } from './monitor-types.js';
|
|
2
|
+
export interface HealthMonitorLike {
|
|
3
|
+
getHealthState(): {
|
|
4
|
+
overall: 'healthy' | 'degraded' | 'unhealthy';
|
|
5
|
+
subsystems: Array<{
|
|
6
|
+
name: string;
|
|
7
|
+
status: string;
|
|
8
|
+
lastCheck: string;
|
|
9
|
+
details?: string;
|
|
10
|
+
}>;
|
|
11
|
+
issues: Array<{
|
|
12
|
+
id: string;
|
|
13
|
+
subsystem: string;
|
|
14
|
+
severity: 'warning' | 'critical';
|
|
15
|
+
description: string;
|
|
16
|
+
detectedAt: string;
|
|
17
|
+
autoFixable: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
lastCheck: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface FeedbackStoreLike {
|
|
23
|
+
getInsights(): {
|
|
24
|
+
suggestedAdjustments: Record<string, number>;
|
|
25
|
+
weakDomains: string[];
|
|
26
|
+
trend: 'improving' | 'declining' | 'stable';
|
|
27
|
+
totalFeedback: number;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface CorrectionStoreLike {
|
|
31
|
+
getStats(): {
|
|
32
|
+
totalCorrections: number;
|
|
33
|
+
topMisclassifications: Array<{
|
|
34
|
+
from: string;
|
|
35
|
+
to: string;
|
|
36
|
+
count: number;
|
|
37
|
+
}>;
|
|
38
|
+
correctionRate: Record<string, number>;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface PreferenceHistoryLike {
|
|
42
|
+
detectConflicts(): unknown[];
|
|
43
|
+
}
|
|
44
|
+
export interface SignalSynthesizerDeps {
|
|
45
|
+
healthMonitor: HealthMonitorLike;
|
|
46
|
+
feedbackStore: FeedbackStoreLike;
|
|
47
|
+
correctionStore: CorrectionStoreLike;
|
|
48
|
+
preferenceHistory: PreferenceHistoryLike;
|
|
49
|
+
getResourceMetrics: () => ResourceMetrics;
|
|
50
|
+
getCapabilityMetrics: () => CapabilityMetrics;
|
|
51
|
+
}
|
|
52
|
+
export declare class SignalSynthesizer {
|
|
53
|
+
private readonly deps;
|
|
54
|
+
constructor(deps: SignalSynthesizerDeps);
|
|
55
|
+
synthesize(): SystemPulse;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=signal-synthesizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-synthesizer.d.ts","sourceRoot":"","sources":["../../src/monitor/signal-synthesizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAIX,eAAe,EACf,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,iBAAiB;IAChC,cAAc,IAAI;QAChB,OAAO,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;QAC9C,UAAU,EAAE,KAAK,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,MAAM,CAAC;YAClB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC,CAAC;QACH,MAAM,EAAE,KAAK,CAAC;YACZ,EAAE,EAAE,MAAM,CAAC;YACX,SAAS,EAAE,MAAM,CAAC;YAClB,QAAQ,EAAE,SAAS,GAAG,UAAU,CAAC;YACjC,WAAW,EAAE,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,OAAO,CAAC;SACtB,CAAC,CAAC;QACH,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,IAAI;QACb,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;QAC5C,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,IAAI;QACV,gBAAgB,EAAE,MAAM,CAAC;QACzB,qBAAqB,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC1E,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACxC,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,IAAI,OAAO,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,iBAAiB,CAAC;IACjC,aAAa,EAAE,iBAAiB,CAAC;IACjC,eAAe,EAAE,mBAAmB,CAAC;IACrC,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,kBAAkB,EAAE,MAAM,eAAe,CAAC;IAC1C,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;CAC/C;AAwDD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;gBAEjC,IAAI,EAAE,qBAAqB;IAIvC,UAAU,IAAI,WAAW;CAqC1B"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
function mapOverall(overall) {
|
|
2
|
+
if (overall === 'unhealthy')
|
|
3
|
+
return 'critical';
|
|
4
|
+
return overall;
|
|
5
|
+
}
|
|
6
|
+
function mapSubsystemStatus(status) {
|
|
7
|
+
if (status === 'healthy')
|
|
8
|
+
return 'up';
|
|
9
|
+
if (status === 'degraded')
|
|
10
|
+
return 'degraded';
|
|
11
|
+
return 'down';
|
|
12
|
+
}
|
|
13
|
+
function mapIssueSeverity(severity) {
|
|
14
|
+
return severity === 'critical' ? 'high' : 'low';
|
|
15
|
+
}
|
|
16
|
+
function computeReasoning(feedbackStore, correctionStore, preferenceHistory) {
|
|
17
|
+
const insights = feedbackStore.getInsights();
|
|
18
|
+
const stats = correctionStore.getStats();
|
|
19
|
+
const conflicts = preferenceHistory.detectConflicts();
|
|
20
|
+
// avgResponseQuality: trend-based, 0.5 if no feedback
|
|
21
|
+
let avgResponseQuality;
|
|
22
|
+
if (insights.totalFeedback === 0) {
|
|
23
|
+
avgResponseQuality = 0.5;
|
|
24
|
+
}
|
|
25
|
+
else if (insights.trend === 'improving') {
|
|
26
|
+
avgResponseQuality = 0.85;
|
|
27
|
+
}
|
|
28
|
+
else if (insights.trend === 'stable') {
|
|
29
|
+
avgResponseQuality = 0.7;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
avgResponseQuality = 0.5;
|
|
33
|
+
}
|
|
34
|
+
// domainAccuracy: 1 - avg(correctionRates), clamped [0,1]
|
|
35
|
+
const rates = Object.values(stats.correctionRate);
|
|
36
|
+
let domainAccuracy;
|
|
37
|
+
if (rates.length === 0) {
|
|
38
|
+
domainAccuracy = 1;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const avg = rates.reduce((sum, r) => sum + r, 0) / rates.length;
|
|
42
|
+
domainAccuracy = Math.max(0, Math.min(1, 1 - avg));
|
|
43
|
+
}
|
|
44
|
+
// preferenceStability: max(0, 1 - conflicts.length * 0.15)
|
|
45
|
+
const preferenceStability = Math.max(0, 1 - conflicts.length * 0.15);
|
|
46
|
+
return { avgResponseQuality, domainAccuracy, preferenceStability };
|
|
47
|
+
}
|
|
48
|
+
export class SignalSynthesizer {
|
|
49
|
+
deps;
|
|
50
|
+
constructor(deps) {
|
|
51
|
+
this.deps = deps;
|
|
52
|
+
}
|
|
53
|
+
synthesize() {
|
|
54
|
+
const healthState = this.deps.healthMonitor.getHealthState();
|
|
55
|
+
const overall = mapOverall(healthState.overall);
|
|
56
|
+
const subsystems = healthState.subsystems.map((s) => ({
|
|
57
|
+
name: s.name,
|
|
58
|
+
status: mapSubsystemStatus(s.status),
|
|
59
|
+
lastCheck: new Date(s.lastCheck).getTime(),
|
|
60
|
+
}));
|
|
61
|
+
const anomalies = healthState.issues.map((issue) => ({
|
|
62
|
+
subsystem: issue.subsystem,
|
|
63
|
+
severity: mapIssueSeverity(issue.severity),
|
|
64
|
+
description: issue.description,
|
|
65
|
+
detectedAt: new Date(issue.detectedAt).getTime(),
|
|
66
|
+
}));
|
|
67
|
+
const reasoning = computeReasoning(this.deps.feedbackStore, this.deps.correctionStore, this.deps.preferenceHistory);
|
|
68
|
+
const resources = this.deps.getResourceMetrics();
|
|
69
|
+
const capabilities = this.deps.getCapabilityMetrics();
|
|
70
|
+
return {
|
|
71
|
+
timestamp: Date.now(),
|
|
72
|
+
overall,
|
|
73
|
+
subsystems,
|
|
74
|
+
anomalies,
|
|
75
|
+
reasoning,
|
|
76
|
+
resources,
|
|
77
|
+
capabilities,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=signal-synthesizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-synthesizer.js","sourceRoot":"","sources":["../../src/monitor/signal-synthesizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Anomaly } from '../monitor/monitor-types.js';
|
|
2
|
+
import type { RepairAction } from './repair-types.js';
|
|
3
|
+
export interface RepairPattern {
|
|
4
|
+
match: (anomaly: Anomaly) => boolean;
|
|
5
|
+
rootCause: string;
|
|
6
|
+
confidence: number;
|
|
7
|
+
actions: () => RepairAction[];
|
|
8
|
+
}
|
|
9
|
+
export declare const BUILT_IN_PATTERNS: RepairPattern[];
|
|
10
|
+
//# sourceMappingURL=repair-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repair-actions.d.ts","sourceRoot":"","sources":["../../src/repair/repair-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,YAAY,EAAE,CAAC;CAC/B;AAED,eAAO,MAAM,iBAAiB,EAAE,aAAa,EA0E5C,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
export const BUILT_IN_PATTERNS = [
|
|
3
|
+
{
|
|
4
|
+
match: (a) => a.subsystem === 'providers' && a.description.includes('all down'),
|
|
5
|
+
rootCause: 'All providers are down — likely credential expiry or upstream outage',
|
|
6
|
+
confidence: 0.9,
|
|
7
|
+
actions: () => [
|
|
8
|
+
{
|
|
9
|
+
id: randomUUID(),
|
|
10
|
+
tier: 'approve',
|
|
11
|
+
description: 'Rotate provider credentials',
|
|
12
|
+
command: 'rotateCredentials --subsystem providers',
|
|
13
|
+
rollback: 'restoreCredentials --subsystem providers',
|
|
14
|
+
estimatedImpact: 'Brief downtime during credential rotation',
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
match: (a) => a.subsystem === 'providers' && a.severity === 'high',
|
|
20
|
+
rootCause: 'Provider subsystem degraded with high severity',
|
|
21
|
+
confidence: 0.75,
|
|
22
|
+
actions: () => [
|
|
23
|
+
{
|
|
24
|
+
id: randomUUID(),
|
|
25
|
+
tier: 'notify',
|
|
26
|
+
description: 'Failover to backup provider',
|
|
27
|
+
command: 'failover --subsystem providers',
|
|
28
|
+
rollback: 'revert-failover --subsystem providers',
|
|
29
|
+
estimatedImpact: 'Temporary switch to backup provider',
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
match: (a) => a.subsystem === 'cache' || a.description.includes('stale'),
|
|
35
|
+
rootCause: 'Stale or corrupted cache detected',
|
|
36
|
+
confidence: 0.85,
|
|
37
|
+
actions: () => [
|
|
38
|
+
{
|
|
39
|
+
id: randomUUID(),
|
|
40
|
+
tier: 'auto',
|
|
41
|
+
description: 'Clear stale cache entries',
|
|
42
|
+
command: 'clearCache --all',
|
|
43
|
+
estimatedImpact: 'Cache miss spike until entries are rebuilt',
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
match: (a) => a.subsystem === 'channels',
|
|
49
|
+
rootCause: 'Channel connection lost or unstable',
|
|
50
|
+
confidence: 0.8,
|
|
51
|
+
actions: () => [
|
|
52
|
+
{
|
|
53
|
+
id: randomUUID(),
|
|
54
|
+
tier: 'auto',
|
|
55
|
+
description: 'Reconnect channel',
|
|
56
|
+
command: 'reconnect --subsystem channels',
|
|
57
|
+
estimatedImpact: 'Brief message delivery delay during reconnect',
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
match: (a) => a.subsystem === 'memory' && a.severity !== 'low',
|
|
63
|
+
rootCause: 'Memory subsystem pressure detected',
|
|
64
|
+
confidence: 0.7,
|
|
65
|
+
actions: () => [
|
|
66
|
+
{
|
|
67
|
+
id: randomUUID(),
|
|
68
|
+
tier: 'notify',
|
|
69
|
+
description: 'Clear memory caches to reduce pressure',
|
|
70
|
+
command: 'clearCaches --subsystem memory',
|
|
71
|
+
rollback: 'restoreCaches --subsystem memory',
|
|
72
|
+
estimatedImpact: 'Temporary performance degradation while caches rebuild',
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
];
|
|
77
|
+
//# sourceMappingURL=repair-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repair-actions.js","sourceRoot":"","sources":["../../src/repair/repair-actions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AASzC,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC/E,SAAS,EAAE,sEAAsE;QACjF,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,GAAG,EAAE,CAAC;YACb;gBACE,EAAE,EAAE,UAAU,EAAE;gBAChB,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,6BAA6B;gBAC1C,OAAO,EAAE,yCAAyC;gBAClD,QAAQ,EAAE,0CAA0C;gBACpD,eAAe,EAAE,2CAA2C;aAC7D;SACF;KACF;IACD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;QAClE,SAAS,EAAE,gDAAgD;QAC3D,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,GAAG,EAAE,CAAC;YACb;gBACE,EAAE,EAAE,UAAU,EAAE;gBAChB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6BAA6B;gBAC1C,OAAO,EAAE,gCAAgC;gBACzC,QAAQ,EAAE,uCAAuC;gBACjD,eAAe,EAAE,qCAAqC;aACvD;SACF;KACF;IACD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxE,SAAS,EAAE,mCAAmC;QAC9C,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,GAAG,EAAE,CAAC;YACb;gBACE,EAAE,EAAE,UAAU,EAAE;gBAChB,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,2BAA2B;gBACxC,OAAO,EAAE,kBAAkB;gBAC3B,eAAe,EAAE,4CAA4C;aAC9D;SACF;KACF;IACD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,UAAU;QACxC,SAAS,EAAE,qCAAqC;QAChD,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,GAAG,EAAE,CAAC;YACb;gBACE,EAAE,EAAE,UAAU,EAAE;gBAChB,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,mBAAmB;gBAChC,OAAO,EAAE,gCAAgC;gBACzC,eAAe,EAAE,+CAA+C;aACjE;SACF;KACF;IACD;QACE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK;QAC9D,SAAS,EAAE,oCAAoC;QAC/C,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,GAAG,EAAE,CAAC;YACb;gBACE,EAAE,EAAE,UAAU,EAAE;gBAChB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wCAAwC;gBACrD,OAAO,EAAE,gCAAgC;gBACzC,QAAQ,EAAE,kCAAkC;gBAC5C,eAAe,EAAE,wDAAwD;aAC1E;SACF;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Anomaly } from '../monitor/monitor-types.js';
|
|
2
|
+
export type RepairTier = 'auto' | 'notify' | 'approve';
|
|
3
|
+
export interface Diagnosis {
|
|
4
|
+
id: string;
|
|
5
|
+
timestamp: number;
|
|
6
|
+
anomaly: Anomaly;
|
|
7
|
+
rootCause: string;
|
|
8
|
+
confidence: number;
|
|
9
|
+
suggestedActions: RepairAction[];
|
|
10
|
+
}
|
|
11
|
+
export interface RepairAction {
|
|
12
|
+
id: string;
|
|
13
|
+
tier: RepairTier;
|
|
14
|
+
description: string;
|
|
15
|
+
command: string;
|
|
16
|
+
rollback?: string;
|
|
17
|
+
estimatedImpact: string;
|
|
18
|
+
}
|
|
19
|
+
export interface RepairLog {
|
|
20
|
+
actionId: string;
|
|
21
|
+
diagnosisId: string;
|
|
22
|
+
tier: RepairTier;
|
|
23
|
+
status: 'executed' | 'approved' | 'rejected' | 'failed' | 'rolled_back';
|
|
24
|
+
executedAt: number;
|
|
25
|
+
result?: string;
|
|
26
|
+
error?: string;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=repair-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repair-types.d.ts","sourceRoot":"","sources":["../../src/repair/repair-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,YAAY,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAC;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repair-types.js","sourceRoot":"","sources":["../../src/repair/repair-types.ts"],"names":[],"mappings":""}
|