@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,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerAgentTools = registerAgentTools;
|
|
4
|
+
const v3_1 = require("zod/v3");
|
|
5
|
+
const contracts_1 = require("../contracts");
|
|
6
|
+
const envelope_1 = require("../envelope");
|
|
7
|
+
const trace_1 = require("../trace");
|
|
8
|
+
const id_1 = require("../../util/id");
|
|
9
|
+
const shared_1 = require("./shared");
|
|
10
|
+
function registerAgentTools(registerOjasTool, registry, _audit) {
|
|
11
|
+
// ── 1. ojas_register_agent ────────────────────────────────────────────────
|
|
12
|
+
registerOjasTool('ojas_register_agent', {
|
|
13
|
+
title: 'Register an agent and create its health contract',
|
|
14
|
+
description: 'Register an autonomous agent with Ojas and create its health contract. ' +
|
|
15
|
+
'Defines risk level, allowed tools, score thresholds, and recovery policies. ' +
|
|
16
|
+
'Returns the contract id and the initial Ojas score.',
|
|
17
|
+
inputSchema: {
|
|
18
|
+
agent_id: v3_1.z.string().min(1),
|
|
19
|
+
agent_name: v3_1.z.string().optional(),
|
|
20
|
+
agent_type: v3_1.z.string().optional(),
|
|
21
|
+
risk_level: v3_1.z.enum(shared_1.RISK_LEVELS).default('medium'),
|
|
22
|
+
description: v3_1.z.string().optional(),
|
|
23
|
+
allowed_tools: v3_1.z.array(v3_1.z.string()).optional(),
|
|
24
|
+
replace_existing: v3_1.z.boolean().default(false),
|
|
25
|
+
health_thresholds: v3_1.z
|
|
26
|
+
.object({
|
|
27
|
+
minimum_ojas_score: v3_1.z.number().min(0).max(100).optional(),
|
|
28
|
+
minimum_context_quality: v3_1.z.number().min(0).max(100).optional(),
|
|
29
|
+
maximum_hallucination_risk: v3_1.z.number().min(0).max(100).optional(),
|
|
30
|
+
})
|
|
31
|
+
.optional(),
|
|
32
|
+
recovery_policy: v3_1.z
|
|
33
|
+
.object({
|
|
34
|
+
on_context_overload: v3_1.z.enum(shared_1.RECOVERY_ACTIONS).optional(),
|
|
35
|
+
on_prompt_injection: v3_1.z.enum(shared_1.RECOVERY_ACTIONS).optional(),
|
|
36
|
+
on_repeated_failure: v3_1.z.enum(shared_1.RECOVERY_ACTIONS).optional(),
|
|
37
|
+
on_memory_conflict: v3_1.z.enum(shared_1.RECOVERY_ACTIONS).optional(),
|
|
38
|
+
on_tool_failure_loop: v3_1.z.enum(shared_1.RECOVERY_ACTIONS).optional(),
|
|
39
|
+
})
|
|
40
|
+
.optional(),
|
|
41
|
+
},
|
|
42
|
+
}, async (args) => {
|
|
43
|
+
const entry = registry.register({
|
|
44
|
+
agent_id: args.agent_id,
|
|
45
|
+
agent_name: args.agent_name,
|
|
46
|
+
agent_type: args.agent_type,
|
|
47
|
+
risk_level: args.risk_level,
|
|
48
|
+
description: args.description,
|
|
49
|
+
allowed_tools: args.allowed_tools,
|
|
50
|
+
replace_existing: args.replace_existing,
|
|
51
|
+
health_thresholds: args.health_thresholds,
|
|
52
|
+
recovery_policy: args.recovery_policy,
|
|
53
|
+
});
|
|
54
|
+
const report = entry.ojas.healthCheck();
|
|
55
|
+
const initialScore = Math.round(report.overall.value * 100);
|
|
56
|
+
entry.last_health_score = initialScore;
|
|
57
|
+
entry.last_health_report = report;
|
|
58
|
+
const event = registry.recordEvent(entry, 'agent_registered', `Agent ${args.agent_id} registered.`);
|
|
59
|
+
return (0, envelope_1.mcpReply)({
|
|
60
|
+
registered: true,
|
|
61
|
+
health_contract: entry.contract,
|
|
62
|
+
initial_ojas_score: initialScore,
|
|
63
|
+
health_state: (0, contracts_1.classifyHealthState)(initialScore, entry.contract),
|
|
64
|
+
}, {
|
|
65
|
+
agent_id: entry.agent_id,
|
|
66
|
+
affected_modules: ['pulse'],
|
|
67
|
+
events_created: [event.id],
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
// ── 2. ojas_ingest_trace ─────────────────────────────────────────────────
|
|
71
|
+
registerOjasTool('ojas_ingest_trace', {
|
|
72
|
+
title: 'Ingest a runtime trace event',
|
|
73
|
+
description: 'Stream a runtime event from the calling agent into Ojas (tool calls, retrievals, memory ops, failures, ' +
|
|
74
|
+
'latency, planning loops, fallbacks, policy violations). Routes the event to the appropriate health modules ' +
|
|
75
|
+
'and returns a recommended follow-up action if the event signals degradation.',
|
|
76
|
+
inputSchema: {
|
|
77
|
+
agent_id: v3_1.z.string().min(1),
|
|
78
|
+
session_id: v3_1.z.string().optional(),
|
|
79
|
+
event_type: v3_1.z.enum(shared_1.TRACE_EVENT_TYPES),
|
|
80
|
+
timestamp: v3_1.z.string().datetime().optional(),
|
|
81
|
+
data: v3_1.z.record(v3_1.z.string(), v3_1.z.unknown()).default({}),
|
|
82
|
+
},
|
|
83
|
+
}, async ({ agent_id, session_id, event_type, timestamp, data }) => {
|
|
84
|
+
const entry = registry.getOrAutoRegisterSession(agent_id, session_id);
|
|
85
|
+
const { meta, affected_modules, health_impact } = (0, trace_1.classifyEvent)(event_type, data);
|
|
86
|
+
// ── Policy decisions BEFORE the trace is constructed ───────────────
|
|
87
|
+
// The previous version recorded the trace, then mutated it in place
|
|
88
|
+
// for `allowed_tools` violations. That worked only by object
|
|
89
|
+
// aliasing — a future defensive clone in `recordTrace()` would
|
|
90
|
+
// silently break enforcement. Decide everything up front.
|
|
91
|
+
const toolName = typeof data.tool_name === 'string' ? data.tool_name : undefined;
|
|
92
|
+
const policyViolation = Boolean(toolName &&
|
|
93
|
+
entry.contract.allowed_tools?.length &&
|
|
94
|
+
!entry.contract.allowed_tools.includes(toolName));
|
|
95
|
+
// Validate top-level token-telemetry fields and surface rejections
|
|
96
|
+
// rather than silently falling back to payload-size estimates.
|
|
97
|
+
const invalidTelemetryFields = [];
|
|
98
|
+
const TOKEN_FIELDS = ['input_tokens', 'output_tokens', 'total_tokens', 'tokens_used', 'tool_calls'];
|
|
99
|
+
for (const f of TOKEN_FIELDS) {
|
|
100
|
+
const v = data[f];
|
|
101
|
+
if (v === undefined)
|
|
102
|
+
continue;
|
|
103
|
+
if (typeof v !== 'number' || !Number.isFinite(v) || v < 0 || !Number.isInteger(v)) {
|
|
104
|
+
invalidTelemetryFields.push(f);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const costUsdRaw = data.cost_usd;
|
|
108
|
+
if (costUsdRaw !== undefined && (typeof costUsdRaw !== 'number' || !Number.isFinite(costUsdRaw) || costUsdRaw < 0)) {
|
|
109
|
+
invalidTelemetryFields.push('cost_usd');
|
|
110
|
+
}
|
|
111
|
+
// Sanitize invalid telemetry out of the recorded trace payload so
|
|
112
|
+
// downstream consumers reading `trace.input.total_tokens` etc. can
|
|
113
|
+
// never accidentally trust values we already rejected. The dropped
|
|
114
|
+
// values land in `meta.invalid_telemetry_fields` instead.
|
|
115
|
+
const sanitizedData = invalidTelemetryFields.length === 0
|
|
116
|
+
? data
|
|
117
|
+
: Object.fromEntries(Object.entries(data).filter(([k]) => !invalidTelemetryFields.includes(k)));
|
|
118
|
+
const trace = {
|
|
119
|
+
id: (0, id_1.newId)('trace'),
|
|
120
|
+
agentId: agent_id,
|
|
121
|
+
timestamp: timestamp ?? new Date().toISOString(),
|
|
122
|
+
action: meta.action,
|
|
123
|
+
input: sanitizedData,
|
|
124
|
+
output: sanitizedData,
|
|
125
|
+
// Reflect policy decision in the recorded trace itself, not after.
|
|
126
|
+
success: meta.success && !policyViolation,
|
|
127
|
+
durationMs: meta.duration_ms,
|
|
128
|
+
reasoning: meta.reasoning,
|
|
129
|
+
error: policyViolation ? `tool_not_allowed:${toolName}` : meta.error,
|
|
130
|
+
failures: policyViolation
|
|
131
|
+
? [{ type: 'policy_violation', message: `Tool '${toolName}' is not allowed by health contract.`, severity: 'high' }]
|
|
132
|
+
: undefined,
|
|
133
|
+
// Forward token / cost telemetry parsed from `data` so Agni reflects
|
|
134
|
+
// real reported numbers rather than payload-size estimates.
|
|
135
|
+
tokensUsed: meta.tokens_used,
|
|
136
|
+
inputTokens: meta.input_tokens,
|
|
137
|
+
outputTokens: meta.output_tokens,
|
|
138
|
+
toolCalls: meta.tool_calls,
|
|
139
|
+
costUsd: meta.cost_usd,
|
|
140
|
+
};
|
|
141
|
+
entry.ojas.recordTrace(trace);
|
|
142
|
+
if (toolName) {
|
|
143
|
+
registry.recordToolOutcome(entry, toolName, {
|
|
144
|
+
success: meta.success && !policyViolation,
|
|
145
|
+
latencyMs: meta.duration_ms,
|
|
146
|
+
timeout: event_type === 'tool_call_failed' && data.error_type === 'timeout',
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
const recordedEvent = registry.recordEvent(entry, policyViolation ? 'tool_policy_violation' : event_type, meta.action);
|
|
150
|
+
const recommended = policyViolation ? 'review_tool_policy_violation' : (0, trace_1.recommendActionFor)(event_type);
|
|
151
|
+
// Telemetry validity is a separate axis from policy violation. The
|
|
152
|
+
// trace is still recorded (we don't want to lose the event), but a
|
|
153
|
+
// `warning` status + `telemetry_accepted=false` tells the client
|
|
154
|
+
// their instrumentation is producing values Ojas had to discard,
|
|
155
|
+
// so downstream Agni numbers will fall back to payload-size
|
|
156
|
+
// estimates rather than reflect the reported tokens.
|
|
157
|
+
const telemetryInvalid = invalidTelemetryFields.length > 0;
|
|
158
|
+
const envelopeStatus = policyViolation || telemetryInvalid ? 'warning' : 'success';
|
|
159
|
+
return (0, envelope_1.mcpReply)({
|
|
160
|
+
// `accepted` is preserved for backward compatibility — it
|
|
161
|
+
// remains the same boolean (= !policyViolation) that v0.1
|
|
162
|
+
// clients have always read. New code should branch on the
|
|
163
|
+
// three explicit flags below to avoid the historical ambiguity
|
|
164
|
+
// between "event recorded" and "all checks passed".
|
|
165
|
+
accepted: !policyViolation,
|
|
166
|
+
// True whenever the trace landed in the store, regardless of
|
|
167
|
+
// policy or telemetry verdict.
|
|
168
|
+
event_recorded: true,
|
|
169
|
+
// True when the health-contract / allowed_tools policy gates passed.
|
|
170
|
+
policy_accepted: !policyViolation,
|
|
171
|
+
// True when every reported token / cost field parsed cleanly.
|
|
172
|
+
telemetry_accepted: !telemetryInvalid,
|
|
173
|
+
event_id: recordedEvent.id,
|
|
174
|
+
trace_id: trace.id,
|
|
175
|
+
health_impact_detected: health_impact || policyViolation,
|
|
176
|
+
recommended_action: recommended,
|
|
177
|
+
policy_violation: policyViolation,
|
|
178
|
+
...(0, envelope_1.sessionScopeFields)(session_id),
|
|
179
|
+
// Empty array unless we rejected reported telemetry; tells the
|
|
180
|
+
// client their instrumentation needs fixing.
|
|
181
|
+
invalid_telemetry_fields: invalidTelemetryFields,
|
|
182
|
+
}, {
|
|
183
|
+
agent_id,
|
|
184
|
+
status: envelopeStatus,
|
|
185
|
+
affected_modules: policyViolation
|
|
186
|
+
? [...new Set([...affected_modules, 'raksha', 'chikitsa'])]
|
|
187
|
+
: affected_modules,
|
|
188
|
+
events_created: [recordedEvent.id],
|
|
189
|
+
requires_human_review: event_type === 'policy_violation' || policyViolation,
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
// ── 3. ojas_get_health ────────────────────────────────────────────────────
|
|
193
|
+
registerOjasTool('ojas_get_health', {
|
|
194
|
+
title: 'Get the current Ojas health snapshot for an agent',
|
|
195
|
+
description: 'Return the agent\'s current Ojas health: overall score, per-module breakdown, health state, ' +
|
|
196
|
+
'active risks, and prioritized recommendations.',
|
|
197
|
+
inputSchema: {
|
|
198
|
+
agent_id: v3_1.z.string().min(1),
|
|
199
|
+
session_id: v3_1.z.string().optional(),
|
|
200
|
+
include_modules: v3_1.z.boolean().default(true),
|
|
201
|
+
include_recent_events: v3_1.z.boolean().default(true),
|
|
202
|
+
},
|
|
203
|
+
}, async ({ agent_id, session_id, include_modules, include_recent_events }) => {
|
|
204
|
+
const entry = registry.getOrAutoRegisterSession(agent_id, session_id);
|
|
205
|
+
// Read-only tool: no snapshot mutation, no score-delta attribution.
|
|
206
|
+
const report = entry.ojas.healthCheck();
|
|
207
|
+
const delta = 0;
|
|
208
|
+
const ojasScore = Math.round(report.overall.value * 100);
|
|
209
|
+
const healthState = (0, contracts_1.classifyHealthState)(ojasScore, entry.contract);
|
|
210
|
+
const activeRisks = report.recommendations
|
|
211
|
+
.filter((r) => r.severity !== 'info')
|
|
212
|
+
.map((r) => r.message);
|
|
213
|
+
const recommendedActions = report.recommendations
|
|
214
|
+
.filter((r) => r.severity !== 'info' && r.action)
|
|
215
|
+
.map((r) => r.action);
|
|
216
|
+
return (0, envelope_1.mcpReply)({
|
|
217
|
+
ojas_score: ojasScore,
|
|
218
|
+
health_state: healthState,
|
|
219
|
+
safe_mode: entry.safe_mode,
|
|
220
|
+
module_scores: include_modules ? report.moduleScores : undefined,
|
|
221
|
+
active_risks: activeRisks,
|
|
222
|
+
recommended_actions: recommendedActions,
|
|
223
|
+
recent_events: include_recent_events ? entry.recent_events.slice(-10) : undefined,
|
|
224
|
+
...(0, envelope_1.sessionScopeFields)(session_id),
|
|
225
|
+
}, {
|
|
226
|
+
agent_id,
|
|
227
|
+
ojas_score_delta: delta,
|
|
228
|
+
affected_modules: ['pulse'],
|
|
229
|
+
recommended_next_actions: recommendedActions,
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
// ── 4. ojas_is_agent_fit_to_continue ─────────────────────────────────────
|
|
233
|
+
registerOjasTool('ojas_is_agent_fit_to_continue', {
|
|
234
|
+
title: 'Decide whether an agent is fit to continue operating',
|
|
235
|
+
description: 'Ojas\'s signature decision tool. Combines the agent\'s current Ojas score, its health contract, the ' +
|
|
236
|
+
'declared task risk level, and the planned next action to decide whether the agent should proceed, ' +
|
|
237
|
+
'pause, run a repair first, or fall back to safe mode.',
|
|
238
|
+
inputSchema: {
|
|
239
|
+
agent_id: v3_1.z.string().min(1),
|
|
240
|
+
session_id: v3_1.z.string().optional(),
|
|
241
|
+
task_risk_level: v3_1.z.enum(shared_1.RISK_LEVELS).default('medium'),
|
|
242
|
+
planned_next_action: v3_1.z.string().optional(),
|
|
243
|
+
},
|
|
244
|
+
}, async ({ agent_id, session_id, task_risk_level, planned_next_action }) => {
|
|
245
|
+
const entry = registry.getOrAutoRegisterSession(agent_id, session_id);
|
|
246
|
+
// Read-only decision tool: no snapshot mutation.
|
|
247
|
+
const report = entry.ojas.healthCheck();
|
|
248
|
+
const delta = 0;
|
|
249
|
+
const ojasScore = Math.round(report.overall.value * 100);
|
|
250
|
+
const healthState = (0, contracts_1.classifyHealthState)(ojasScore, entry.contract);
|
|
251
|
+
// Raise the bar for riskier tasks. medium → minimum; high → +10; critical → +20.
|
|
252
|
+
const baseThreshold = entry.contract.health_thresholds.minimum_ojas_score;
|
|
253
|
+
const riskBoost = task_risk_level === 'critical' ? 20 : task_risk_level === 'high' ? 10 : 0;
|
|
254
|
+
const requiredScore = Math.min(100, baseThreshold + riskBoost);
|
|
255
|
+
const risks = report.recommendations.filter((r) => r.severity !== 'info').map((r) => r.message);
|
|
256
|
+
const required = [];
|
|
257
|
+
let fit = ojasScore >= requiredScore;
|
|
258
|
+
let safeModeRequired = entry.safe_mode;
|
|
259
|
+
if (!fit) {
|
|
260
|
+
required.push('run ojas_run_recovery to lift score above threshold');
|
|
261
|
+
}
|
|
262
|
+
if (report.defense.quarantinedItems > 0) {
|
|
263
|
+
required.push('verify quarantined inputs and consider freeze_memory_writes');
|
|
264
|
+
}
|
|
265
|
+
if (report.metabolism.costPressure > 0.85) {
|
|
266
|
+
required.push('compress_context before next costly action');
|
|
267
|
+
}
|
|
268
|
+
if (report.recovery.driftScore > 0.6) {
|
|
269
|
+
required.push('consolidate_memory to reduce cognitive drift');
|
|
270
|
+
if (task_risk_level === 'high' || task_risk_level === 'critical') {
|
|
271
|
+
fit = false;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
if (task_risk_level === 'critical' && healthState !== 'healthy') {
|
|
275
|
+
safeModeRequired = true;
|
|
276
|
+
required.push('enter_safe_mode before any critical-risk action');
|
|
277
|
+
}
|
|
278
|
+
void planned_next_action; // accepted; could be used to score the *type* of action later.
|
|
279
|
+
const confidence = Math.max(0, Math.min(1, ojasScore / 100));
|
|
280
|
+
return (0, envelope_1.mcpReply)({
|
|
281
|
+
fit_to_continue: fit,
|
|
282
|
+
confidence: Number(confidence.toFixed(2)),
|
|
283
|
+
health_state: healthState,
|
|
284
|
+
ojas_score: ojasScore,
|
|
285
|
+
required_score: requiredScore,
|
|
286
|
+
risks,
|
|
287
|
+
required_actions_before_continue: required,
|
|
288
|
+
safe_mode_required: safeModeRequired,
|
|
289
|
+
...(0, envelope_1.sessionScopeFields)(session_id),
|
|
290
|
+
}, {
|
|
291
|
+
agent_id,
|
|
292
|
+
status: fit ? 'success' : 'warning',
|
|
293
|
+
ojas_score_delta: delta,
|
|
294
|
+
affected_modules: ['pulse'],
|
|
295
|
+
recommended_next_actions: required,
|
|
296
|
+
requires_human_review: !fit && task_risk_level === 'critical',
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/mcp/tools/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AgentRegistry } from '../registry';
|
|
2
|
+
import type { OjasToolRegistrar } from './registrar';
|
|
3
|
+
export declare function registerContextTools(registerOjasTool: OjasToolRegistrar, registry: AgentRegistry, _audit?: import('../audit').AuditLogger): void;
|
|
4
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAarD,wBAAgB,oBAAoB,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,UAAU,EAAE,WAAW,GAAG,IAAI,CAmShJ"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerContextTools = registerContextTools;
|
|
4
|
+
const v3_1 = require("zod/v3");
|
|
5
|
+
const envelope_1 = require("../envelope");
|
|
6
|
+
const id_1 = require("../../util/id");
|
|
7
|
+
const shared_1 = require("./shared");
|
|
8
|
+
function registerContextTools(registerOjasTool, registry, _audit) {
|
|
9
|
+
// ── 5. ojas_score_context ─────────────────────────────────────────────────
|
|
10
|
+
registerOjasTool('ojas_score_context', {
|
|
11
|
+
title: 'Score a context bundle for cognitive nutrition',
|
|
12
|
+
description: 'Score a candidate set of context items per Aahar + Raksha before the agent consumes them. ' +
|
|
13
|
+
'Returns an overall health score plus per-item relevance / freshness / trust / risk scores.',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
agent_id: v3_1.z.string().min(1),
|
|
16
|
+
session_id: v3_1.z.string().optional(),
|
|
17
|
+
task: v3_1.z.string(),
|
|
18
|
+
context_items: v3_1.z
|
|
19
|
+
.array(v3_1.z.object({
|
|
20
|
+
id: v3_1.z.string(),
|
|
21
|
+
content: v3_1.z.string(),
|
|
22
|
+
source: v3_1.z.string().default('user'),
|
|
23
|
+
relevance_score: v3_1.z.number().min(0).max(1).optional(),
|
|
24
|
+
created_at: v3_1.z.string().datetime().optional(),
|
|
25
|
+
trust_level: v3_1.z.enum(['low', 'medium', 'high']).optional(),
|
|
26
|
+
}))
|
|
27
|
+
.min(1),
|
|
28
|
+
},
|
|
29
|
+
}, async ({ agent_id, session_id, task, context_items }) => {
|
|
30
|
+
const entry = registry.getOrAutoRegisterSession(agent_id, session_id);
|
|
31
|
+
const t = (0, shared_1.nowSec)();
|
|
32
|
+
// Compute lexical relevance and track its provenance per-item.
|
|
33
|
+
const normalized = context_items.map((i) => {
|
|
34
|
+
const rel = (0, shared_1.resolveRelevance)(i.relevance_score, task, i.content);
|
|
35
|
+
const parsed = (0, shared_1.parseCreatedAt)(i.created_at);
|
|
36
|
+
if (parsed.ok === false) {
|
|
37
|
+
throw new envelope_1.OjasError('invalid_input', `ojas_score_context: ${parsed.reason} (item ${i.id})`);
|
|
38
|
+
}
|
|
39
|
+
const freshness = parsed.ok === 'absent' ? t : parsed.epochSec;
|
|
40
|
+
const item = {
|
|
41
|
+
id: i.id,
|
|
42
|
+
content: i.content,
|
|
43
|
+
source: i.source,
|
|
44
|
+
relevanceScore: rel.score,
|
|
45
|
+
freshness,
|
|
46
|
+
tokenCount: (0, shared_1.estimateTokens)(i.content),
|
|
47
|
+
trustScore: i.trust_level === 'high' ? 0.9 : i.trust_level === 'low' ? 0.2 : 0.6,
|
|
48
|
+
};
|
|
49
|
+
return { item, relevanceSource: rel.source };
|
|
50
|
+
});
|
|
51
|
+
const items = normalized.map((n) => n.item);
|
|
52
|
+
const relevanceSources = new Map(normalized.map((n) => [n.item.id, n.relevanceSource]));
|
|
53
|
+
const nutrition = entry.ojas.aahar.assess(items);
|
|
54
|
+
const itemScores = items.map((item) => {
|
|
55
|
+
// Pure scan: scoring candidate context must not mutate defense history.
|
|
56
|
+
const { assessment: threat } = entry.ojas.raksha.scanItem(item, { agentId: agent_id });
|
|
57
|
+
const ageSec = Math.max(0, t - item.freshness);
|
|
58
|
+
const freshness = Math.exp(-ageSec / entry.ojas.aahar.getPolicy().freshnessWindowSec);
|
|
59
|
+
return {
|
|
60
|
+
id: item.id,
|
|
61
|
+
relevance_score: Number(item.relevanceScore.toFixed(2)),
|
|
62
|
+
relevance_source: relevanceSources.get(item.id),
|
|
63
|
+
freshness_score: Number(freshness.toFixed(2)),
|
|
64
|
+
trust_score: Number((item.trustScore ?? 0.6).toFixed(2)),
|
|
65
|
+
risk_score: Number(threat.riskScore.toFixed(2)),
|
|
66
|
+
recommendation: threat.quarantined
|
|
67
|
+
? 'quarantine'
|
|
68
|
+
: item.relevanceScore < entry.ojas.aahar.getPolicy().relevanceThreshold
|
|
69
|
+
? 'exclude'
|
|
70
|
+
: 'include',
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
const duplicateContent = new Set();
|
|
74
|
+
const warnings = [];
|
|
75
|
+
for (const it of items) {
|
|
76
|
+
const sig = it.content.slice(0, 80);
|
|
77
|
+
if (duplicateContent.has(sig))
|
|
78
|
+
warnings.push('duplicate_context_detected');
|
|
79
|
+
duplicateContent.add(sig);
|
|
80
|
+
}
|
|
81
|
+
if (itemScores.some((s) => s.trust_score < 0.4))
|
|
82
|
+
warnings.push('one_or_more_sources_need_verification');
|
|
83
|
+
if (itemScores.some((s) => s.risk_score > 0.5))
|
|
84
|
+
warnings.push('potentially_unsafe_content_present');
|
|
85
|
+
const score100 = Math.round(nutrition.contextQuality.value * 100);
|
|
86
|
+
void task;
|
|
87
|
+
return (0, envelope_1.mcpReply)({
|
|
88
|
+
context_health_score: score100,
|
|
89
|
+
summary: `Evaluated ${items.length} items for "${task.slice(0, 60)}".`,
|
|
90
|
+
item_scores: itemScores,
|
|
91
|
+
warnings: [...new Set(warnings)],
|
|
92
|
+
...(0, envelope_1.sessionScopeFields)(session_id),
|
|
93
|
+
}, {
|
|
94
|
+
agent_id,
|
|
95
|
+
affected_modules: ['aahar', 'raksha'],
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
// ── 6. ojas_build_context ─────────────────────────────────────────────────
|
|
99
|
+
registerOjasTool('ojas_build_context', {
|
|
100
|
+
title: 'Build the healthiest context bundle for a task',
|
|
101
|
+
description: 'Given candidate context items and a token budget, run Raksha (defense) + Aahar (nutrition) ' +
|
|
102
|
+
'and assemble the highest-signal bundle that fits the budget. Returns the included items, what ' +
|
|
103
|
+
'was excluded, and a compression ratio.',
|
|
104
|
+
inputSchema: {
|
|
105
|
+
agent_id: v3_1.z.string().min(1),
|
|
106
|
+
session_id: v3_1.z.string().optional(),
|
|
107
|
+
task: v3_1.z.string(),
|
|
108
|
+
max_tokens: v3_1.z.number().int().positive().default(4096),
|
|
109
|
+
risk_level: v3_1.z.enum(shared_1.RISK_LEVELS).default('medium'),
|
|
110
|
+
freshness_required: v3_1.z.boolean().default(false),
|
|
111
|
+
candidate_items: v3_1.z
|
|
112
|
+
.array(v3_1.z.object({
|
|
113
|
+
id: v3_1.z.string(),
|
|
114
|
+
content: v3_1.z.string(),
|
|
115
|
+
source: v3_1.z.string().default('user'),
|
|
116
|
+
relevance_score: v3_1.z.number().min(0).max(1).optional(),
|
|
117
|
+
created_at: v3_1.z.string().datetime().optional(),
|
|
118
|
+
trust_level: v3_1.z.enum(['low', 'medium', 'high']).optional(),
|
|
119
|
+
}))
|
|
120
|
+
.min(1),
|
|
121
|
+
},
|
|
122
|
+
}, async ({ agent_id, session_id, task, max_tokens, risk_level, freshness_required, candidate_items }) => {
|
|
123
|
+
const entry = registry.getOrAutoRegisterSession(agent_id, session_id);
|
|
124
|
+
const t = (0, shared_1.nowSec)();
|
|
125
|
+
// Compute lexical relevance and reject invalid created_at timestamps
|
|
126
|
+
// up-front so we never silently produce NaN-tainted freshness scoring.
|
|
127
|
+
const items = candidate_items.map((i) => {
|
|
128
|
+
const rel = (0, shared_1.resolveRelevance)(i.relevance_score, task, i.content);
|
|
129
|
+
const parsed = (0, shared_1.parseCreatedAt)(i.created_at);
|
|
130
|
+
if (parsed.ok === false) {
|
|
131
|
+
throw new envelope_1.OjasError('invalid_input', `ojas_build_context: ${parsed.reason} (item ${i.id})`);
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
id: i.id,
|
|
135
|
+
content: i.content,
|
|
136
|
+
source: i.source,
|
|
137
|
+
relevanceScore: rel.score,
|
|
138
|
+
freshness: parsed.ok === 'absent' ? t : parsed.epochSec,
|
|
139
|
+
tokenCount: (0, shared_1.estimateTokens)(i.content),
|
|
140
|
+
trustScore: i.trust_level === 'high' ? 0.9 : i.trust_level === 'low' ? 0.2 : 0.6,
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
// try/finally guarantees the shared Aahar policy is restored even if
|
|
144
|
+
// feed() throws. Long-lived agents would otherwise be left with the
|
|
145
|
+
// temporary token budget for all subsequent calls.
|
|
146
|
+
const previousMaxTokens = entry.ojas.aahar.getPolicy().maxContextTokens;
|
|
147
|
+
let accepted;
|
|
148
|
+
try {
|
|
149
|
+
entry.ojas.aahar.updatePolicy({ maxContextTokens: max_tokens });
|
|
150
|
+
accepted = entry.ojas.feed(items, { query: task });
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
entry.ojas.aahar.updatePolicy({ maxContextTokens: previousMaxTokens });
|
|
154
|
+
}
|
|
155
|
+
const acceptedIds = new Set(accepted.map((i) => i.id));
|
|
156
|
+
const excluded = items.filter((i) => !acceptedIds.has(i.id));
|
|
157
|
+
const acceptedTokens = accepted.reduce((s, i) => s + i.tokenCount, 0);
|
|
158
|
+
const totalTokens = items.reduce((s, i) => s + i.tokenCount, 0);
|
|
159
|
+
const retainedTokenRatio = totalTokens === 0 ? 0 : Number((acceptedTokens / totalTokens).toFixed(2));
|
|
160
|
+
const nutrition = entry.ojas.aahar.assess(accepted);
|
|
161
|
+
const warnings = [];
|
|
162
|
+
const staleCount = excluded.filter((i) => t - i.freshness > entry.ojas.aahar.getPolicy().freshnessWindowSec).length;
|
|
163
|
+
if (staleCount > 0)
|
|
164
|
+
warnings.push(`excluded ${staleCount} stale items`);
|
|
165
|
+
const lowTrustCount = excluded.filter((i) => (i.trustScore ?? 1) < 0.4).length;
|
|
166
|
+
if (lowTrustCount > 0)
|
|
167
|
+
warnings.push(`excluded ${lowTrustCount} low-trust items`);
|
|
168
|
+
if (risk_level === 'critical' && entry.ojas.raksha.getEvents().length > 0) {
|
|
169
|
+
warnings.push('quarantined inputs detected on a critical-risk task');
|
|
170
|
+
}
|
|
171
|
+
if (freshness_required && staleCount > 0) {
|
|
172
|
+
warnings.push('freshness_required=true: stale items were dropped from the bundle');
|
|
173
|
+
}
|
|
174
|
+
const bundle = accepted.map((i) => `[#${i.id} | ${i.source}] ${i.content}`).join('\n\n');
|
|
175
|
+
void task;
|
|
176
|
+
return (0, envelope_1.mcpReply)({
|
|
177
|
+
context_bundle_id: (0, id_1.newId)('bundle'),
|
|
178
|
+
context_health_score: Math.round(nutrition.contextQuality.value * 100),
|
|
179
|
+
included_items: accepted.length,
|
|
180
|
+
excluded_items: excluded.length,
|
|
181
|
+
included_ids: accepted.map((i) => i.id),
|
|
182
|
+
// Three fields to thread a backwards-compatible rename without
|
|
183
|
+
// a silent meaning flip:
|
|
184
|
+
// retained_token_ratio = accepted_tokens / total_tokens (new, explicit)
|
|
185
|
+
// compression_ratio = retained_token_ratio (legacy alias,
|
|
186
|
+
// matches the
|
|
187
|
+
// original v0.1
|
|
188
|
+
// semantics)
|
|
189
|
+
// actual_compression_ratio = 1 - retained_token_ratio (new, the real
|
|
190
|
+
// definition of
|
|
191
|
+
// "compression")
|
|
192
|
+
// Old clients reading `compression_ratio` keep getting the same
|
|
193
|
+
// number they always got. New clients should switch to either
|
|
194
|
+
// `retained_token_ratio` or `actual_compression_ratio` and the
|
|
195
|
+
// legacy field will be removed in a future major version.
|
|
196
|
+
retained_token_ratio: retainedTokenRatio,
|
|
197
|
+
compression_ratio: retainedTokenRatio,
|
|
198
|
+
actual_compression_ratio: Number((1 - retainedTokenRatio).toFixed(2)),
|
|
199
|
+
warnings,
|
|
200
|
+
context: bundle,
|
|
201
|
+
...(0, envelope_1.sessionScopeFields)(session_id),
|
|
202
|
+
}, {
|
|
203
|
+
agent_id,
|
|
204
|
+
affected_modules: ['aahar', 'raksha'],
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
// ── 7. ojas_scan_for_injection ───────────────────────────────────────────
|
|
208
|
+
registerOjasTool('ojas_scan_for_injection', {
|
|
209
|
+
title: 'Scan content for prompt injection and unsafe instructions',
|
|
210
|
+
description: 'Run Raksha threat assessment on a single piece of content (user input, retrieved webpage, ' +
|
|
211
|
+
'tool output, candidate memory) and return whether it is safe to feed into the agent context or memory.',
|
|
212
|
+
inputSchema: {
|
|
213
|
+
agent_id: v3_1.z.string().min(1),
|
|
214
|
+
session_id: v3_1.z.string().optional(),
|
|
215
|
+
source_type: v3_1.z
|
|
216
|
+
.enum(['user_input', 'retrieved_webpage', 'tool_output', 'memory_candidate', 'other'])
|
|
217
|
+
.default('user_input'),
|
|
218
|
+
content: v3_1.z.string().min(1),
|
|
219
|
+
intended_use: v3_1.z
|
|
220
|
+
.enum(['agent_context', 'memory_write', 'tool_argument', 'display_only'])
|
|
221
|
+
.default('agent_context'),
|
|
222
|
+
},
|
|
223
|
+
}, async ({ agent_id, session_id, source_type, content, intended_use }) => {
|
|
224
|
+
const entry = registry.getOrAutoRegisterSession(agent_id, session_id);
|
|
225
|
+
// Pure scan: this is a one-shot verdict; do not record into defense state.
|
|
226
|
+
const { assessment } = entry.ojas.raksha.scanItem({
|
|
227
|
+
id: (0, id_1.newId)('scan'),
|
|
228
|
+
content,
|
|
229
|
+
source: source_type,
|
|
230
|
+
relevanceScore: 0.5,
|
|
231
|
+
freshness: (0, shared_1.nowSec)(),
|
|
232
|
+
tokenCount: (0, shared_1.estimateTokens)(content),
|
|
233
|
+
});
|
|
234
|
+
const allowedForContext = !assessment.quarantined && assessment.riskScore < 0.5;
|
|
235
|
+
const allowedForMemory = intended_use === 'memory_write' ? assessment.riskScore < 0.3 : allowedForContext;
|
|
236
|
+
const recommendedAction = assessment.quarantined
|
|
237
|
+
? 'quarantine'
|
|
238
|
+
: assessment.riskScore > 0.4
|
|
239
|
+
? 'verify_before_use'
|
|
240
|
+
: 'allow';
|
|
241
|
+
const safeExcerpt = assessment.threatType !== 'unknown'
|
|
242
|
+
? `Content contains "${assessment.threatType}" patterns: ${assessment.reasons.slice(0, 2).join('; ')}`
|
|
243
|
+
: content.slice(0, 200);
|
|
244
|
+
return (0, envelope_1.mcpReply)({
|
|
245
|
+
injection_detected: assessment.quarantined || assessment.riskScore > 0.4,
|
|
246
|
+
risk_score: Number(assessment.riskScore.toFixed(2)),
|
|
247
|
+
attack_type: assessment.threatType,
|
|
248
|
+
recommended_action: recommendedAction,
|
|
249
|
+
safe_excerpt: safeExcerpt,
|
|
250
|
+
reasons: assessment.reasons,
|
|
251
|
+
allowed_for_context: allowedForContext,
|
|
252
|
+
allowed_for_memory: allowedForMemory,
|
|
253
|
+
...(0, envelope_1.sessionScopeFields)(session_id),
|
|
254
|
+
}, {
|
|
255
|
+
agent_id,
|
|
256
|
+
affected_modules: ['raksha'],
|
|
257
|
+
requires_human_review: assessment.quarantined,
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/mcp/tools/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { AgentRegistry } from '../registry';
|
|
3
|
+
import type { AuditLogger } from '../audit';
|
|
4
|
+
export declare function registerAllOjasTools(server: McpServer, registry: AgentRegistry, audit?: AuditLogger): void;
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAS5C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAS1G"}
|