@beingmartinbmc/ojas 0.2.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 +21 -0
- package/README.md +308 -0
- package/dist/aahar/index.d.ts +179 -0
- package/dist/aahar/index.d.ts.map +1 -0
- package/dist/aahar/index.js +657 -0
- package/dist/aahar/index.js.map +1 -0
- package/dist/aahar/scoring.d.ts +85 -0
- package/dist/aahar/scoring.d.ts.map +1 -0
- package/dist/aahar/scoring.js +268 -0
- package/dist/aahar/scoring.js.map +1 -0
- package/dist/agni/index.d.ts +113 -0
- package/dist/agni/index.d.ts.map +1 -0
- package/dist/agni/index.js +328 -0
- package/dist/agni/index.js.map +1 -0
- package/dist/agni/model-router.d.ts +77 -0
- package/dist/agni/model-router.d.ts.map +1 -0
- package/dist/agni/model-router.js +163 -0
- package/dist/agni/model-router.js.map +1 -0
- package/dist/agni/response-distiller.d.ts +37 -0
- package/dist/agni/response-distiller.d.ts.map +1 -0
- package/dist/agni/response-distiller.js +193 -0
- package/dist/agni/response-distiller.js.map +1 -0
- package/dist/agni/tiktoken-adapter.d.ts +55 -0
- package/dist/agni/tiktoken-adapter.d.ts.map +1 -0
- package/dist/agni/tiktoken-adapter.js +113 -0
- package/dist/agni/tiktoken-adapter.js.map +1 -0
- package/dist/chikitsa/index.d.ts +130 -0
- package/dist/chikitsa/index.d.ts.map +1 -0
- package/dist/chikitsa/index.js +565 -0
- package/dist/chikitsa/index.js.map +1 -0
- package/dist/demo.d.ts +15 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +278 -0
- package/dist/demo.js.map +1 -0
- package/dist/index.d.ts +201 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +588 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/audit.d.ts +39 -0
- package/dist/mcp/audit.d.ts.map +1 -0
- package/dist/mcp/audit.js +73 -0
- package/dist/mcp/audit.js.map +1 -0
- package/dist/mcp/contracts.d.ts +76 -0
- package/dist/mcp/contracts.d.ts.map +1 -0
- package/dist/mcp/contracts.js +44 -0
- package/dist/mcp/contracts.js.map +1 -0
- package/dist/mcp/envelope.d.ts +107 -0
- package/dist/mcp/envelope.d.ts.map +1 -0
- package/dist/mcp/envelope.js +162 -0
- package/dist/mcp/envelope.js.map +1 -0
- package/dist/mcp/registry.d.ts +110 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +258 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/mcp/server.d.ts +26 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +107 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/agent.d.ts +4 -0
- package/dist/mcp/tools/agent.d.ts.map +1 -0
- package/dist/mcp/tools/agent.js +300 -0
- package/dist/mcp/tools/agent.js.map +1 -0
- package/dist/mcp/tools/context.d.ts +4 -0
- package/dist/mcp/tools/context.d.ts.map +1 -0
- package/dist/mcp/tools/context.js +261 -0
- package/dist/mcp/tools/context.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +5 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +20 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/memory.d.ts +4 -0
- package/dist/mcp/tools/memory.d.ts.map +1 -0
- package/dist/mcp/tools/memory.js +220 -0
- package/dist/mcp/tools/memory.js.map +1 -0
- package/dist/mcp/tools/output.d.ts +4 -0
- package/dist/mcp/tools/output.d.ts.map +1 -0
- package/dist/mcp/tools/output.js +206 -0
- package/dist/mcp/tools/output.js.map +1 -0
- package/dist/mcp/tools/recovery.d.ts +4 -0
- package/dist/mcp/tools/recovery.d.ts.map +1 -0
- package/dist/mcp/tools/recovery.js +165 -0
- package/dist/mcp/tools/recovery.js.map +1 -0
- package/dist/mcp/tools/registrar.d.ts +4 -0
- package/dist/mcp/tools/registrar.d.ts.map +1 -0
- package/dist/mcp/tools/registrar.js +17 -0
- package/dist/mcp/tools/registrar.js.map +1 -0
- package/dist/mcp/tools/report.d.ts +4 -0
- package/dist/mcp/tools/report.d.ts.map +1 -0
- package/dist/mcp/tools/report.js +68 -0
- package/dist/mcp/tools/report.js.map +1 -0
- package/dist/mcp/tools/shared.d.ts +37 -0
- package/dist/mcp/tools/shared.d.ts.map +1 -0
- package/dist/mcp/tools/shared.js +214 -0
- package/dist/mcp/tools/shared.js.map +1 -0
- package/dist/mcp/trace.d.ts +47 -0
- package/dist/mcp/trace.d.ts.map +1 -0
- package/dist/mcp/trace.js +216 -0
- package/dist/mcp/trace.js.map +1 -0
- package/dist/nidra/index.d.ts +275 -0
- package/dist/nidra/index.d.ts.map +1 -0
- package/dist/nidra/index.js +889 -0
- package/dist/nidra/index.js.map +1 -0
- package/dist/persistence/migrations.d.ts +10 -0
- package/dist/persistence/migrations.d.ts.map +1 -0
- package/dist/persistence/migrations.js +77 -0
- package/dist/persistence/migrations.js.map +1 -0
- package/dist/persistence/sqlite.d.ts +30 -0
- package/dist/persistence/sqlite.d.ts.map +1 -0
- package/dist/persistence/sqlite.js +209 -0
- package/dist/persistence/sqlite.js.map +1 -0
- package/dist/persistence/types.d.ts +104 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +5 -0
- package/dist/persistence/types.js.map +1 -0
- package/dist/pulse/index.d.ts +144 -0
- package/dist/pulse/index.d.ts.map +1 -0
- package/dist/pulse/index.js +453 -0
- package/dist/pulse/index.js.map +1 -0
- package/dist/raksha/classifiers/http-classifier.d.ts +26 -0
- package/dist/raksha/classifiers/http-classifier.d.ts.map +1 -0
- package/dist/raksha/classifiers/http-classifier.js +62 -0
- package/dist/raksha/classifiers/http-classifier.js.map +1 -0
- package/dist/raksha/classifiers/index.d.ts +5 -0
- package/dist/raksha/classifiers/index.d.ts.map +1 -0
- package/dist/raksha/classifiers/index.js +8 -0
- package/dist/raksha/classifiers/index.js.map +1 -0
- package/dist/raksha/classifiers/onnx-classifier.d.ts +41 -0
- package/dist/raksha/classifiers/onnx-classifier.d.ts.map +1 -0
- package/dist/raksha/classifiers/onnx-classifier.js +99 -0
- package/dist/raksha/classifiers/onnx-classifier.js.map +1 -0
- package/dist/raksha/hallucination-detectors.d.ts +106 -0
- package/dist/raksha/hallucination-detectors.d.ts.map +1 -0
- package/dist/raksha/hallucination-detectors.js +327 -0
- package/dist/raksha/hallucination-detectors.js.map +1 -0
- package/dist/raksha/index.d.ts +168 -0
- package/dist/raksha/index.d.ts.map +1 -0
- package/dist/raksha/index.js +597 -0
- package/dist/raksha/index.js.map +1 -0
- package/dist/raksha/prompt-injection-detectors.d.ts +30 -0
- package/dist/raksha/prompt-injection-detectors.d.ts.map +1 -0
- package/dist/raksha/prompt-injection-detectors.js +153 -0
- package/dist/raksha/prompt-injection-detectors.js.map +1 -0
- package/dist/types.d.ts +1115 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +71 -0
- package/dist/types.js.map +1 -0
- package/dist/util/calibration.d.ts +32 -0
- package/dist/util/calibration.d.ts.map +1 -0
- package/dist/util/calibration.js +108 -0
- package/dist/util/calibration.js.map +1 -0
- package/dist/util/id.d.ts +2 -0
- package/dist/util/id.d.ts.map +1 -0
- package/dist/util/id.js +9 -0
- package/dist/util/id.js.map +1 -0
- package/dist/vyayam/index.d.ts +76 -0
- package/dist/vyayam/index.d.ts.map +1 -0
- package/dist/vyayam/index.js +528 -0
- package/dist/vyayam/index.js.map +1 -0
- package/dist/vyayam/tool-fault-proxy.d.ts +95 -0
- package/dist/vyayam/tool-fault-proxy.d.ts.map +1 -0
- package/dist/vyayam/tool-fault-proxy.js +170 -0
- package/dist/vyayam/tool-fault-proxy.js.map +1 -0
- package/docs/ARCHITECTURE.md +162 -0
- package/docs/BACKLOG.md +342 -0
- package/docs/CONFIGURATION.md +305 -0
- package/docs/EVIDENCE.md +232 -0
- package/docs/EVIDENCE_MATRIX.md +293 -0
- package/docs/KNOWN_FAILURES.md +367 -0
- package/docs/MCP.md +614 -0
- package/docs/MODULES.md +368 -0
- package/docs/SECURITY.md +251 -0
- package/docs/TRUST.md +88 -0
- package/docs/assets/ojas-hero.png +0 -0
- package/package.json +101 -0
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ojas Chikitsa (ओजस चिकित्सा) — AI Repair & Rehabilitation System
|
|
4
|
+
*
|
|
5
|
+
* Diagnoses failures and creates structured repair protocols.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.Chikitsa = void 0;
|
|
9
|
+
const types_1 = require("../types");
|
|
10
|
+
const id_1 = require("../util/id");
|
|
11
|
+
function now() {
|
|
12
|
+
return new Date().toISOString();
|
|
13
|
+
}
|
|
14
|
+
function clamp(v, min = 0, max = 1) {
|
|
15
|
+
return Math.max(min, Math.min(max, v));
|
|
16
|
+
}
|
|
17
|
+
function healthScore(value, source) {
|
|
18
|
+
return { value: clamp(value), timestamp: now(), source };
|
|
19
|
+
}
|
|
20
|
+
function protocolId() {
|
|
21
|
+
return (0, id_1.newId)('chikitsa');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Deterministic protocol ID for previews: a stable hash of the inputs
|
|
25
|
+
* `buildProtocol` would consume. Two `previewDiagnose([f])` calls with
|
|
26
|
+
* structurally-identical failures yield identical IDs, so callers can
|
|
27
|
+
* diff/dedupe preview output without surprises.
|
|
28
|
+
*
|
|
29
|
+
* 32-bit FNV-1a is plenty for this — the IDs are advisory, not
|
|
30
|
+
* cryptographic. Format mirrors `protocolId()` for grep symmetry.
|
|
31
|
+
*/
|
|
32
|
+
function previewProtocolId(failure) {
|
|
33
|
+
const key = `${failure.type}|${failure.severity}|${failure.message ?? ''}`;
|
|
34
|
+
let h = 0x811c9dc5;
|
|
35
|
+
for (let i = 0; i < key.length; i++) {
|
|
36
|
+
h ^= key.charCodeAt(i);
|
|
37
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
38
|
+
}
|
|
39
|
+
return `chikitsa-preview-${h.toString(36)}`;
|
|
40
|
+
}
|
|
41
|
+
function recommendationSeverity(severity) {
|
|
42
|
+
if (severity === 'critical' || severity === 'high')
|
|
43
|
+
return 'critical';
|
|
44
|
+
if (severity === 'medium')
|
|
45
|
+
return 'warning';
|
|
46
|
+
return 'info';
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Linear-interpolated percentile over a sorted-ascending sample.
|
|
50
|
+
* Returns 0 for an empty array; clamps `p` to `[0, 1]`. Used by
|
|
51
|
+
* `getVelocityStats()` for duration percentiles. Kept module-private
|
|
52
|
+
* so we don't pull in a stats library for one call site.
|
|
53
|
+
*/
|
|
54
|
+
function percentile(sortedAsc, p) {
|
|
55
|
+
if (sortedAsc.length === 0)
|
|
56
|
+
return 0;
|
|
57
|
+
const q = Math.max(0, Math.min(1, p));
|
|
58
|
+
const idx = q * (sortedAsc.length - 1);
|
|
59
|
+
const lo = Math.floor(idx);
|
|
60
|
+
const hi = Math.ceil(idx);
|
|
61
|
+
if (lo === hi)
|
|
62
|
+
return sortedAsc[lo];
|
|
63
|
+
const w = idx - lo;
|
|
64
|
+
return sortedAsc[lo] * (1 - w) + sortedAsc[hi] * w;
|
|
65
|
+
}
|
|
66
|
+
class Chikitsa {
|
|
67
|
+
policy;
|
|
68
|
+
protocols = [];
|
|
69
|
+
/**
|
|
70
|
+
* Rolling window of trailing task outcomes. Used by
|
|
71
|
+
* `getVelocityStats()` to compute success rate + duration percentiles
|
|
72
|
+
* + tasks/hour. Bounded by `policy.velocityWindowSize` so memory
|
|
73
|
+
* usage is stable across long-running agents.
|
|
74
|
+
*/
|
|
75
|
+
taskOutcomes = [];
|
|
76
|
+
/**
|
|
77
|
+
* Set of protocol ids that `executeProtocol()` has already applied
|
|
78
|
+
* via a `RepairExecutor`. A second call with the same protocol id
|
|
79
|
+
* short-circuits to `status: 'already-applied'` regardless of the
|
|
80
|
+
* executor's idempotency — Chikitsa is the source of truth for
|
|
81
|
+
* "this protocol has been run".
|
|
82
|
+
*/
|
|
83
|
+
appliedProtocolIds = new Set();
|
|
84
|
+
/** Audit log of every executeProtocol() invocation. Capped by `maxProtocols`. */
|
|
85
|
+
executions = [];
|
|
86
|
+
constructor(policy = {}) {
|
|
87
|
+
this.policy = this.validatePolicy({ ...types_1.DEFAULT_REHABILITATION_POLICY, ...policy });
|
|
88
|
+
}
|
|
89
|
+
validatePolicy(policy) {
|
|
90
|
+
if (!Number.isInteger(policy.maxProtocolsPerCycle) || policy.maxProtocolsPerCycle <= 0) {
|
|
91
|
+
throw new Error('Chikitsa: maxProtocolsPerCycle must be a positive integer');
|
|
92
|
+
}
|
|
93
|
+
if (policy.maxProtocols !== undefined &&
|
|
94
|
+
(!Number.isInteger(policy.maxProtocols) || policy.maxProtocols < 0)) {
|
|
95
|
+
throw new Error('Chikitsa: maxProtocols must be a non-negative integer if set');
|
|
96
|
+
}
|
|
97
|
+
if (policy.velocityWindowSize !== undefined &&
|
|
98
|
+
(!Number.isInteger(policy.velocityWindowSize) || policy.velocityWindowSize <= 0)) {
|
|
99
|
+
throw new Error('Chikitsa: velocityWindowSize must be a positive integer if set');
|
|
100
|
+
}
|
|
101
|
+
return policy;
|
|
102
|
+
}
|
|
103
|
+
/** Drop the oldest protocols when retention cap is exceeded. */
|
|
104
|
+
enforceProtocolLimit() {
|
|
105
|
+
const cap = this.policy.maxProtocols ?? 0;
|
|
106
|
+
if (cap > 0 && this.protocols.length > cap) {
|
|
107
|
+
this.protocols.splice(0, this.protocols.length - cap);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// ── Velocity tracking (Block 6 — Chikitsa upgrades) ──────────────────────
|
|
111
|
+
/**
|
|
112
|
+
* Append a task outcome to the rolling velocity window. Rejects
|
|
113
|
+
* malformed entries (non-finite `durationMs`, unparseable
|
|
114
|
+
* `completedAt`) at the boundary so a buggy caller can't poison
|
|
115
|
+
* percentile math. Older entries past `velocityWindowSize` are
|
|
116
|
+
* evicted from the front.
|
|
117
|
+
*/
|
|
118
|
+
recordTaskOutcome(record) {
|
|
119
|
+
if (typeof record.taskId !== 'string' || record.taskId.length === 0) {
|
|
120
|
+
throw new Error('Chikitsa: TaskOutcomeRecord.taskId must be a non-empty string');
|
|
121
|
+
}
|
|
122
|
+
if (typeof record.durationMs !== 'number' || !Number.isFinite(record.durationMs) || record.durationMs < 0) {
|
|
123
|
+
throw new Error('Chikitsa: TaskOutcomeRecord.durationMs must be a non-negative finite number');
|
|
124
|
+
}
|
|
125
|
+
if (typeof record.completedAt !== 'string' || Number.isNaN(Date.parse(record.completedAt))) {
|
|
126
|
+
throw new Error('Chikitsa: TaskOutcomeRecord.completedAt must be a parseable ISO timestamp');
|
|
127
|
+
}
|
|
128
|
+
if (typeof record.succeeded !== 'boolean') {
|
|
129
|
+
throw new Error('Chikitsa: TaskOutcomeRecord.succeeded must be a boolean');
|
|
130
|
+
}
|
|
131
|
+
this.taskOutcomes.push(record);
|
|
132
|
+
const cap = this.policy.velocityWindowSize ?? 50;
|
|
133
|
+
if (this.taskOutcomes.length > cap) {
|
|
134
|
+
this.taskOutcomes.splice(0, this.taskOutcomes.length - cap);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Windowed velocity summary over the trailing `velocityWindowSize`
|
|
139
|
+
* outcomes (default 50). Returns a zero-valued struct for an empty
|
|
140
|
+
* window so callers don't need to null-check before rendering.
|
|
141
|
+
*/
|
|
142
|
+
getVelocityStats() {
|
|
143
|
+
const window = this.taskOutcomes;
|
|
144
|
+
if (window.length === 0) {
|
|
145
|
+
return {
|
|
146
|
+
windowSize: 0,
|
|
147
|
+
successRate: 0,
|
|
148
|
+
medianDurationMs: 0,
|
|
149
|
+
p90DurationMs: 0,
|
|
150
|
+
tasksPerHour: 0,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
const successes = window.filter((r) => r.succeeded).length;
|
|
154
|
+
const durations = window.map((r) => r.durationMs).sort((a, b) => a - b);
|
|
155
|
+
const median = percentile(durations, 0.5);
|
|
156
|
+
const p90 = percentile(durations, 0.9);
|
|
157
|
+
// Tasks/hour: total successes / (newest - oldest) in hours. Needs at
|
|
158
|
+
// least two points with distinct timestamps.
|
|
159
|
+
let tasksPerHour = 0;
|
|
160
|
+
if (window.length >= 2) {
|
|
161
|
+
const times = window.map((r) => Date.parse(r.completedAt)).sort((a, b) => a - b);
|
|
162
|
+
const spanMs = times[times.length - 1] - times[0];
|
|
163
|
+
if (spanMs > 0) {
|
|
164
|
+
tasksPerHour = (successes * 3_600_000) / spanMs;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
windowSize: window.length,
|
|
169
|
+
successRate: successes / window.length,
|
|
170
|
+
medianDurationMs: median,
|
|
171
|
+
p90DurationMs: p90,
|
|
172
|
+
tasksPerHour,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/** Read-only view of the current outcome window. Useful for tests + dashboards. */
|
|
176
|
+
getRecentOutcomes() {
|
|
177
|
+
return this.taskOutcomes.map((o) => ({ ...o }));
|
|
178
|
+
}
|
|
179
|
+
/** Clear the velocity window. Useful for tests + cross-session boundaries. */
|
|
180
|
+
resetVelocityWindow() {
|
|
181
|
+
this.taskOutcomes = [];
|
|
182
|
+
}
|
|
183
|
+
// ── Handoff generation (Block 6 — Chikitsa upgrades) ─────────────────────
|
|
184
|
+
/**
|
|
185
|
+
* Serialise a structured `HandoffSnapshot` into a Markdown document
|
|
186
|
+
* the next agent (or the same agent in a fresh session) can read at
|
|
187
|
+
* boot. The file becomes the single source of truth for "what was
|
|
188
|
+
* I doing and where am I in it" across sessions.
|
|
189
|
+
*
|
|
190
|
+
* Markdown is intentionally human-first; structured callers should
|
|
191
|
+
* pass the snapshot object around directly and only call this when
|
|
192
|
+
* they want a persistable artefact.
|
|
193
|
+
*/
|
|
194
|
+
generateHandoff(snapshot) {
|
|
195
|
+
if (!snapshot || typeof snapshot.agentId !== 'string' || snapshot.agentId.length === 0) {
|
|
196
|
+
throw new Error('Chikitsa: HandoffSnapshot.agentId is required');
|
|
197
|
+
}
|
|
198
|
+
const lines = [];
|
|
199
|
+
lines.push(`# Handoff — ${snapshot.agentId}`);
|
|
200
|
+
lines.push('');
|
|
201
|
+
lines.push(`_Generated: ${snapshot.generatedAt}_`);
|
|
202
|
+
lines.push('');
|
|
203
|
+
if (snapshot.focus) {
|
|
204
|
+
lines.push(`## Current focus`);
|
|
205
|
+
lines.push('');
|
|
206
|
+
lines.push(snapshot.focus);
|
|
207
|
+
lines.push('');
|
|
208
|
+
}
|
|
209
|
+
if (snapshot.velocity) {
|
|
210
|
+
const v = snapshot.velocity;
|
|
211
|
+
lines.push(`## Velocity (last ${v.windowSize} task${v.windowSize === 1 ? '' : 's'})`);
|
|
212
|
+
lines.push('');
|
|
213
|
+
lines.push(`- **Success rate**: ${(v.successRate * 100).toFixed(1)}%`);
|
|
214
|
+
lines.push(`- **Median duration**: ${Math.round(v.medianDurationMs)}ms`);
|
|
215
|
+
lines.push(`- **P90 duration**: ${Math.round(v.p90DurationMs)}ms`);
|
|
216
|
+
lines.push(`- **Tasks/hour**: ${v.tasksPerHour.toFixed(2)}`);
|
|
217
|
+
lines.push('');
|
|
218
|
+
}
|
|
219
|
+
lines.push(`## Pending (${snapshot.pendingTasks.length})`);
|
|
220
|
+
lines.push('');
|
|
221
|
+
if (snapshot.pendingTasks.length === 0) {
|
|
222
|
+
lines.push('_None_');
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
for (const t of snapshot.pendingTasks)
|
|
226
|
+
lines.push(`- [ ] ${t}`);
|
|
227
|
+
}
|
|
228
|
+
lines.push('');
|
|
229
|
+
lines.push(`## Completed (${snapshot.completedTasks.length})`);
|
|
230
|
+
lines.push('');
|
|
231
|
+
if (snapshot.completedTasks.length === 0) {
|
|
232
|
+
lines.push('_None_');
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
for (const t of snapshot.completedTasks)
|
|
236
|
+
lines.push(`- [x] ${t}`);
|
|
237
|
+
}
|
|
238
|
+
lines.push('');
|
|
239
|
+
if (snapshot.notes && snapshot.notes.length > 0) {
|
|
240
|
+
lines.push(`## Notes`);
|
|
241
|
+
lines.push('');
|
|
242
|
+
for (const n of snapshot.notes)
|
|
243
|
+
lines.push(`- ${n}`);
|
|
244
|
+
lines.push('');
|
|
245
|
+
}
|
|
246
|
+
return lines.join('\n');
|
|
247
|
+
}
|
|
248
|
+
// ── Closed-loop repair: execute + verify ─────────────────────────────────
|
|
249
|
+
/**
|
|
250
|
+
* Run a `RepairProtocol` through a pluggable `RepairExecutor` and,
|
|
251
|
+
* optionally, a `RepairVerifier`. Closes the
|
|
252
|
+
* detect → diagnose → repair → **verify** loop so the agent has
|
|
253
|
+
* evidence the repair actually fixed the failure.
|
|
254
|
+
*
|
|
255
|
+
* Idempotency: Chikitsa is the source of truth for "has this
|
|
256
|
+
* protocol already run". A second call with the same `protocol.id`
|
|
257
|
+
* short-circuits to `status: 'already-applied'` without invoking
|
|
258
|
+
* the executor.
|
|
259
|
+
*
|
|
260
|
+
* Failure handling:
|
|
261
|
+
* - Executor throws → `status: 'failed'`, `error` set
|
|
262
|
+
* - Executor returns `failed` → `status: 'failed'`
|
|
263
|
+
* - No verifier configured → `status: 'applied'`
|
|
264
|
+
* - Verifier returns `false` → `status: 'unverified'`, then
|
|
265
|
+
* if `executor.rollback` is defined the rollback runs and
|
|
266
|
+
* status promotes to `'rolled-back'` (rollback errors are
|
|
267
|
+
* swallowed; the status is still `'rolled-back'` so the
|
|
268
|
+
* audit log captures the attempt).
|
|
269
|
+
* - Verifier returns `true` → `status: 'verified'`
|
|
270
|
+
*
|
|
271
|
+
* Pulse events emitted via the passed-in pulse, when provided, are
|
|
272
|
+
* the caller's job to wire — Chikitsa returns the record and lets
|
|
273
|
+
* Ojas's outer loop translate that to events.
|
|
274
|
+
*/
|
|
275
|
+
async executeProtocol(protocol, executor, verifier) {
|
|
276
|
+
if (!protocol || typeof protocol.id !== 'string' || protocol.id.length === 0) {
|
|
277
|
+
throw new Error('Chikitsa: executeProtocol requires a protocol with a non-empty id');
|
|
278
|
+
}
|
|
279
|
+
if (!executor || typeof executor.execute !== 'function') {
|
|
280
|
+
throw new Error('Chikitsa: executeProtocol requires a RepairExecutor');
|
|
281
|
+
}
|
|
282
|
+
const startedAt = now();
|
|
283
|
+
if (this.appliedProtocolIds.has(protocol.id)) {
|
|
284
|
+
const record = {
|
|
285
|
+
protocolId: protocol.id,
|
|
286
|
+
startedAt,
|
|
287
|
+
finishedAt: now(),
|
|
288
|
+
status: 'already-applied',
|
|
289
|
+
executor: executor.name,
|
|
290
|
+
verifier: verifier?.name,
|
|
291
|
+
};
|
|
292
|
+
this.recordExecution(record);
|
|
293
|
+
return record;
|
|
294
|
+
}
|
|
295
|
+
let execResult;
|
|
296
|
+
try {
|
|
297
|
+
execResult = await executor.execute(protocol);
|
|
298
|
+
}
|
|
299
|
+
catch (err) {
|
|
300
|
+
const record = {
|
|
301
|
+
protocolId: protocol.id,
|
|
302
|
+
startedAt,
|
|
303
|
+
finishedAt: now(),
|
|
304
|
+
status: 'failed',
|
|
305
|
+
executor: executor.name,
|
|
306
|
+
verifier: verifier?.name,
|
|
307
|
+
error: err instanceof Error ? err.message : String(err),
|
|
308
|
+
};
|
|
309
|
+
this.recordExecution(record);
|
|
310
|
+
return record;
|
|
311
|
+
}
|
|
312
|
+
if (!execResult || execResult.status === 'failed') {
|
|
313
|
+
const record = {
|
|
314
|
+
protocolId: protocol.id,
|
|
315
|
+
startedAt,
|
|
316
|
+
finishedAt: now(),
|
|
317
|
+
status: 'failed',
|
|
318
|
+
executor: executor.name,
|
|
319
|
+
verifier: verifier?.name,
|
|
320
|
+
executionResult: execResult,
|
|
321
|
+
};
|
|
322
|
+
this.recordExecution(record);
|
|
323
|
+
return record;
|
|
324
|
+
}
|
|
325
|
+
// Mark the protocol as applied BEFORE verification — even an
|
|
326
|
+
// unverified repair has run-side-effects we need to remember so
|
|
327
|
+
// a retry doesn't double-apply.
|
|
328
|
+
this.appliedProtocolIds.add(protocol.id);
|
|
329
|
+
if (!verifier) {
|
|
330
|
+
const record = {
|
|
331
|
+
protocolId: protocol.id,
|
|
332
|
+
startedAt,
|
|
333
|
+
finishedAt: now(),
|
|
334
|
+
status: 'applied',
|
|
335
|
+
executor: executor.name,
|
|
336
|
+
executionResult: execResult,
|
|
337
|
+
};
|
|
338
|
+
this.recordExecution(record);
|
|
339
|
+
return record;
|
|
340
|
+
}
|
|
341
|
+
let verifyResult;
|
|
342
|
+
try {
|
|
343
|
+
verifyResult = await verifier.verify(protocol, execResult);
|
|
344
|
+
}
|
|
345
|
+
catch (err) {
|
|
346
|
+
verifyResult = {
|
|
347
|
+
verified: false,
|
|
348
|
+
reason: `Verifier threw: ${err instanceof Error ? err.message : String(err)}`,
|
|
349
|
+
confidence: 0,
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
if (verifyResult.verified) {
|
|
353
|
+
const record = {
|
|
354
|
+
protocolId: protocol.id,
|
|
355
|
+
startedAt,
|
|
356
|
+
finishedAt: now(),
|
|
357
|
+
status: 'verified',
|
|
358
|
+
executor: executor.name,
|
|
359
|
+
verifier: verifier.name,
|
|
360
|
+
executionResult: execResult,
|
|
361
|
+
verificationResult: verifyResult,
|
|
362
|
+
};
|
|
363
|
+
this.recordExecution(record);
|
|
364
|
+
return record;
|
|
365
|
+
}
|
|
366
|
+
// Verification failed. Try to roll back when the executor offers it.
|
|
367
|
+
let rolledBack = false;
|
|
368
|
+
if (typeof executor.rollback === 'function') {
|
|
369
|
+
try {
|
|
370
|
+
await executor.rollback(protocol, execResult.details);
|
|
371
|
+
rolledBack = true;
|
|
372
|
+
// Once rolled back, the protocol is no longer "applied" and
|
|
373
|
+
// can legitimately be re-attempted in the future.
|
|
374
|
+
this.appliedProtocolIds.delete(protocol.id);
|
|
375
|
+
}
|
|
376
|
+
catch {
|
|
377
|
+
// Intentional: rollback errors are surfaced as an unverified
|
|
378
|
+
// record, not a thrown exception.
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
const record = {
|
|
382
|
+
protocolId: protocol.id,
|
|
383
|
+
startedAt,
|
|
384
|
+
finishedAt: now(),
|
|
385
|
+
status: rolledBack ? 'rolled-back' : 'unverified',
|
|
386
|
+
executor: executor.name,
|
|
387
|
+
verifier: verifier.name,
|
|
388
|
+
executionResult: execResult,
|
|
389
|
+
verificationResult: verifyResult,
|
|
390
|
+
};
|
|
391
|
+
this.recordExecution(record);
|
|
392
|
+
return record;
|
|
393
|
+
}
|
|
394
|
+
/** Read-only audit log of every `executeProtocol()` call. */
|
|
395
|
+
executionHistory() {
|
|
396
|
+
return structuredClone(this.executions);
|
|
397
|
+
}
|
|
398
|
+
/** Whether a protocol id has been successfully applied (and not rolled back). */
|
|
399
|
+
hasProtocolBeenApplied(protocolId) {
|
|
400
|
+
return this.appliedProtocolIds.has(protocolId);
|
|
401
|
+
}
|
|
402
|
+
/** Clear all execution / applied state. Useful for tests + cross-session boundaries. */
|
|
403
|
+
resetExecutionHistory() {
|
|
404
|
+
this.appliedProtocolIds.clear();
|
|
405
|
+
this.executions = [];
|
|
406
|
+
}
|
|
407
|
+
recordExecution(record) {
|
|
408
|
+
this.executions.push(record);
|
|
409
|
+
const cap = this.policy.maxProtocols ?? 0;
|
|
410
|
+
if (cap > 0 && this.executions.length > cap) {
|
|
411
|
+
this.executions.splice(0, this.executions.length - cap);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Build a repair protocol for a single failure. Encapsulates ALL the
|
|
416
|
+
* policy logic (severity mapping, criticalRequiresHuman) so preview and
|
|
417
|
+
* commit produce identical results for the same input.
|
|
418
|
+
*
|
|
419
|
+
* `idMode` controls the protocol id: `'random'` produces a unique id
|
|
420
|
+
* suitable for committed protocols (each diagnose() call mints a new
|
|
421
|
+
* one); `'deterministic'` produces a stable hash of the failure so
|
|
422
|
+
* preview output can be diffed and deduped across calls.
|
|
423
|
+
*/
|
|
424
|
+
buildProtocol(failure, idMode = 'random') {
|
|
425
|
+
const severity = recommendationSeverity(failure.severity);
|
|
426
|
+
const actions = this.actionsFor(failure);
|
|
427
|
+
if (this.policy.criticalRequiresHuman &&
|
|
428
|
+
severity === 'critical' &&
|
|
429
|
+
!actions.includes('human_escalation')) {
|
|
430
|
+
actions.push('human_escalation');
|
|
431
|
+
}
|
|
432
|
+
return {
|
|
433
|
+
id: idMode === 'deterministic' ? previewProtocolId(failure) : protocolId(),
|
|
434
|
+
diagnosis: this.diagnosisFor(failure),
|
|
435
|
+
actions,
|
|
436
|
+
severity,
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Pure: compute repair protocols for the given failures without appending
|
|
441
|
+
* them to internal state. Output is byte-identical to what `diagnose()`
|
|
442
|
+
* would produce *except* for the id, which is deterministic here so
|
|
443
|
+
* callers can diff or dedupe preview output across repeated calls.
|
|
444
|
+
*/
|
|
445
|
+
previewDiagnose(failures) {
|
|
446
|
+
return failures
|
|
447
|
+
.slice(0, this.policy.maxProtocolsPerCycle)
|
|
448
|
+
.map((f) => this.buildProtocol(f, 'deterministic'));
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Compute repair protocols and record them in internal state. Honors
|
|
452
|
+
* `policy.criticalRequiresHuman` via the same shared path as preview,
|
|
453
|
+
* but uses random ids so each diagnose() commit can be tracked
|
|
454
|
+
* independently in history.
|
|
455
|
+
*/
|
|
456
|
+
diagnose(failures) {
|
|
457
|
+
const protocols = failures
|
|
458
|
+
.slice(0, this.policy.maxProtocolsPerCycle)
|
|
459
|
+
.map((f) => this.buildProtocol(f, 'random'));
|
|
460
|
+
this.protocols.push(...protocols);
|
|
461
|
+
this.enforceProtocolLimit();
|
|
462
|
+
return protocols;
|
|
463
|
+
}
|
|
464
|
+
diagnosisFor(failure) {
|
|
465
|
+
switch (failure.type) {
|
|
466
|
+
case 'tool_error':
|
|
467
|
+
return 'Tool execution failed or returned unreliable output.';
|
|
468
|
+
case 'timeout':
|
|
469
|
+
return 'Execution exceeded safe latency budget.';
|
|
470
|
+
case 'hallucination':
|
|
471
|
+
return 'Output was insufficiently grounded or overconfident.';
|
|
472
|
+
case 'policy_violation':
|
|
473
|
+
return 'Agent violated safety or instruction policy.';
|
|
474
|
+
case 'retrieval_noise':
|
|
475
|
+
return 'Retrieved context introduced excessive noise.';
|
|
476
|
+
case 'loop':
|
|
477
|
+
return 'Agent entered a repeated reasoning or tool-use loop.';
|
|
478
|
+
case 'prompt_injection':
|
|
479
|
+
return 'Agent was exposed to hostile instruction content.';
|
|
480
|
+
default:
|
|
481
|
+
return 'Unknown degradation mode detected.';
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
actionsFor(failure) {
|
|
485
|
+
switch (failure.type) {
|
|
486
|
+
case 'tool_error':
|
|
487
|
+
return ['tool_retry', 'safe_mode_activation'];
|
|
488
|
+
case 'timeout':
|
|
489
|
+
return ['plan_regeneration', 'safe_mode_activation'];
|
|
490
|
+
case 'hallucination':
|
|
491
|
+
return ['retrieval_refresh', 'instruction_regrounding'];
|
|
492
|
+
case 'policy_violation':
|
|
493
|
+
return ['instruction_regrounding', 'human_escalation'];
|
|
494
|
+
case 'retrieval_noise':
|
|
495
|
+
return ['context_reset', 'retrieval_refresh'];
|
|
496
|
+
case 'loop':
|
|
497
|
+
return ['context_reset', 'plan_regeneration'];
|
|
498
|
+
case 'prompt_injection':
|
|
499
|
+
return ['context_reset', 'memory_rollback', 'human_escalation'];
|
|
500
|
+
default:
|
|
501
|
+
return ['safe_mode_activation', 'human_escalation'];
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
assess() {
|
|
505
|
+
const hasRollback = this.protocols.some((protocol) => protocol.actions.includes('memory_rollback'));
|
|
506
|
+
const playbookCoverage = Math.min(1, this.protocols.length / Math.max(1, this.policy.maxProtocolsPerCycle));
|
|
507
|
+
return {
|
|
508
|
+
repairReadiness: healthScore(this.policy.autoRepairEnabled ? 0.8 : 0.6, 'chikitsa.repairReadiness'),
|
|
509
|
+
rollbackSafety: healthScore(hasRollback ? 0.8 : 0.5, 'chikitsa.rollbackSafety'),
|
|
510
|
+
recoveryPlaybooks: healthScore(playbookCoverage, 'chikitsa.playbooks'),
|
|
511
|
+
protocolsAvailable: this.protocols.length,
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
recommend() {
|
|
515
|
+
const health = this.assess();
|
|
516
|
+
const recs = [];
|
|
517
|
+
if (health.protocolsAvailable === 0) {
|
|
518
|
+
// Absence of protocols is a readiness note, not a degradation. An agent
|
|
519
|
+
// that hasn't needed repair yet should not look unhealthy.
|
|
520
|
+
recs.push({
|
|
521
|
+
module: 'chikitsa',
|
|
522
|
+
severity: 'info',
|
|
523
|
+
message: 'No repair protocols have been generated yet.',
|
|
524
|
+
action: 'Feed runtime failures into Chikitsa diagnosis when they occur.',
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
if (!this.policy.autoRepairEnabled) {
|
|
528
|
+
recs.push({
|
|
529
|
+
module: 'chikitsa',
|
|
530
|
+
severity: 'info',
|
|
531
|
+
message: 'Automatic repair is disabled; repairs require explicit operator action.',
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
if (recs.length === 0) {
|
|
535
|
+
recs.push({ module: 'chikitsa', severity: 'info', message: 'Repair and rehabilitation readiness is healthy.' });
|
|
536
|
+
}
|
|
537
|
+
return recs;
|
|
538
|
+
}
|
|
539
|
+
getProtocols() {
|
|
540
|
+
return structuredClone(this.protocols);
|
|
541
|
+
}
|
|
542
|
+
exportState() {
|
|
543
|
+
return {
|
|
544
|
+
taskOutcomes: this.getRecentOutcomes().map((o) => ({ ...o })),
|
|
545
|
+
protocols: [...this.getProtocols()],
|
|
546
|
+
executions: [...this.executionHistory()],
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
importState(snapshot) {
|
|
550
|
+
if (!snapshot)
|
|
551
|
+
return;
|
|
552
|
+
this.taskOutcomes = (snapshot.taskOutcomes ?? []).map((o) => ({ ...o }));
|
|
553
|
+
this.protocols = structuredClone(snapshot.protocols ?? []);
|
|
554
|
+
this.executions = structuredClone(snapshot.executions ?? []);
|
|
555
|
+
}
|
|
556
|
+
getPolicy() {
|
|
557
|
+
return { ...this.policy };
|
|
558
|
+
}
|
|
559
|
+
updatePolicy(updates) {
|
|
560
|
+
this.policy = this.validatePolicy({ ...this.policy, ...updates });
|
|
561
|
+
this.enforceProtocolLimit();
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
exports.Chikitsa = Chikitsa;
|
|
565
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chikitsa/index.ts"],"names":[],"mappings":"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"}
|
package/dist/demo.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ojas Demo — AI Health System in Action
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates all seven modules working together:
|
|
5
|
+
* 1. Aahar filters noisy context → clean cognitive input
|
|
6
|
+
* 2. Raksha quarantines hostile inputs → safe memory
|
|
7
|
+
* 3. Agni scores cognitive metabolism → token + latency efficiency
|
|
8
|
+
* 4. Nidra consolidates execution traces → reusable intelligence
|
|
9
|
+
* 5. Vyayam stress-tests the agent → resilience report
|
|
10
|
+
* 6. Chikitsa diagnoses failures → repair protocols
|
|
11
|
+
* 7. Pulse emits health events → continuous telemetry
|
|
12
|
+
* → Unified health check → comprehensive health report with per-module scores
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=demo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|