@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.
Files changed (174) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +308 -0
  3. package/dist/aahar/index.d.ts +179 -0
  4. package/dist/aahar/index.d.ts.map +1 -0
  5. package/dist/aahar/index.js +657 -0
  6. package/dist/aahar/index.js.map +1 -0
  7. package/dist/aahar/scoring.d.ts +85 -0
  8. package/dist/aahar/scoring.d.ts.map +1 -0
  9. package/dist/aahar/scoring.js +268 -0
  10. package/dist/aahar/scoring.js.map +1 -0
  11. package/dist/agni/index.d.ts +113 -0
  12. package/dist/agni/index.d.ts.map +1 -0
  13. package/dist/agni/index.js +328 -0
  14. package/dist/agni/index.js.map +1 -0
  15. package/dist/agni/model-router.d.ts +77 -0
  16. package/dist/agni/model-router.d.ts.map +1 -0
  17. package/dist/agni/model-router.js +163 -0
  18. package/dist/agni/model-router.js.map +1 -0
  19. package/dist/agni/response-distiller.d.ts +37 -0
  20. package/dist/agni/response-distiller.d.ts.map +1 -0
  21. package/dist/agni/response-distiller.js +193 -0
  22. package/dist/agni/response-distiller.js.map +1 -0
  23. package/dist/agni/tiktoken-adapter.d.ts +55 -0
  24. package/dist/agni/tiktoken-adapter.d.ts.map +1 -0
  25. package/dist/agni/tiktoken-adapter.js +113 -0
  26. package/dist/agni/tiktoken-adapter.js.map +1 -0
  27. package/dist/chikitsa/index.d.ts +130 -0
  28. package/dist/chikitsa/index.d.ts.map +1 -0
  29. package/dist/chikitsa/index.js +565 -0
  30. package/dist/chikitsa/index.js.map +1 -0
  31. package/dist/demo.d.ts +15 -0
  32. package/dist/demo.d.ts.map +1 -0
  33. package/dist/demo.js +278 -0
  34. package/dist/demo.js.map +1 -0
  35. package/dist/index.d.ts +201 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +588 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/mcp/audit.d.ts +39 -0
  40. package/dist/mcp/audit.d.ts.map +1 -0
  41. package/dist/mcp/audit.js +73 -0
  42. package/dist/mcp/audit.js.map +1 -0
  43. package/dist/mcp/contracts.d.ts +76 -0
  44. package/dist/mcp/contracts.d.ts.map +1 -0
  45. package/dist/mcp/contracts.js +44 -0
  46. package/dist/mcp/contracts.js.map +1 -0
  47. package/dist/mcp/envelope.d.ts +107 -0
  48. package/dist/mcp/envelope.d.ts.map +1 -0
  49. package/dist/mcp/envelope.js +162 -0
  50. package/dist/mcp/envelope.js.map +1 -0
  51. package/dist/mcp/registry.d.ts +110 -0
  52. package/dist/mcp/registry.d.ts.map +1 -0
  53. package/dist/mcp/registry.js +258 -0
  54. package/dist/mcp/registry.js.map +1 -0
  55. package/dist/mcp/server.d.ts +26 -0
  56. package/dist/mcp/server.d.ts.map +1 -0
  57. package/dist/mcp/server.js +107 -0
  58. package/dist/mcp/server.js.map +1 -0
  59. package/dist/mcp/tools/agent.d.ts +4 -0
  60. package/dist/mcp/tools/agent.d.ts.map +1 -0
  61. package/dist/mcp/tools/agent.js +300 -0
  62. package/dist/mcp/tools/agent.js.map +1 -0
  63. package/dist/mcp/tools/context.d.ts +4 -0
  64. package/dist/mcp/tools/context.d.ts.map +1 -0
  65. package/dist/mcp/tools/context.js +261 -0
  66. package/dist/mcp/tools/context.js.map +1 -0
  67. package/dist/mcp/tools/index.d.ts +5 -0
  68. package/dist/mcp/tools/index.d.ts.map +1 -0
  69. package/dist/mcp/tools/index.js +20 -0
  70. package/dist/mcp/tools/index.js.map +1 -0
  71. package/dist/mcp/tools/memory.d.ts +4 -0
  72. package/dist/mcp/tools/memory.d.ts.map +1 -0
  73. package/dist/mcp/tools/memory.js +220 -0
  74. package/dist/mcp/tools/memory.js.map +1 -0
  75. package/dist/mcp/tools/output.d.ts +4 -0
  76. package/dist/mcp/tools/output.d.ts.map +1 -0
  77. package/dist/mcp/tools/output.js +206 -0
  78. package/dist/mcp/tools/output.js.map +1 -0
  79. package/dist/mcp/tools/recovery.d.ts +4 -0
  80. package/dist/mcp/tools/recovery.d.ts.map +1 -0
  81. package/dist/mcp/tools/recovery.js +165 -0
  82. package/dist/mcp/tools/recovery.js.map +1 -0
  83. package/dist/mcp/tools/registrar.d.ts +4 -0
  84. package/dist/mcp/tools/registrar.d.ts.map +1 -0
  85. package/dist/mcp/tools/registrar.js +17 -0
  86. package/dist/mcp/tools/registrar.js.map +1 -0
  87. package/dist/mcp/tools/report.d.ts +4 -0
  88. package/dist/mcp/tools/report.d.ts.map +1 -0
  89. package/dist/mcp/tools/report.js +68 -0
  90. package/dist/mcp/tools/report.js.map +1 -0
  91. package/dist/mcp/tools/shared.d.ts +37 -0
  92. package/dist/mcp/tools/shared.d.ts.map +1 -0
  93. package/dist/mcp/tools/shared.js +214 -0
  94. package/dist/mcp/tools/shared.js.map +1 -0
  95. package/dist/mcp/trace.d.ts +47 -0
  96. package/dist/mcp/trace.d.ts.map +1 -0
  97. package/dist/mcp/trace.js +216 -0
  98. package/dist/mcp/trace.js.map +1 -0
  99. package/dist/nidra/index.d.ts +275 -0
  100. package/dist/nidra/index.d.ts.map +1 -0
  101. package/dist/nidra/index.js +889 -0
  102. package/dist/nidra/index.js.map +1 -0
  103. package/dist/persistence/migrations.d.ts +10 -0
  104. package/dist/persistence/migrations.d.ts.map +1 -0
  105. package/dist/persistence/migrations.js +77 -0
  106. package/dist/persistence/migrations.js.map +1 -0
  107. package/dist/persistence/sqlite.d.ts +30 -0
  108. package/dist/persistence/sqlite.d.ts.map +1 -0
  109. package/dist/persistence/sqlite.js +209 -0
  110. package/dist/persistence/sqlite.js.map +1 -0
  111. package/dist/persistence/types.d.ts +104 -0
  112. package/dist/persistence/types.d.ts.map +1 -0
  113. package/dist/persistence/types.js +5 -0
  114. package/dist/persistence/types.js.map +1 -0
  115. package/dist/pulse/index.d.ts +144 -0
  116. package/dist/pulse/index.d.ts.map +1 -0
  117. package/dist/pulse/index.js +453 -0
  118. package/dist/pulse/index.js.map +1 -0
  119. package/dist/raksha/classifiers/http-classifier.d.ts +26 -0
  120. package/dist/raksha/classifiers/http-classifier.d.ts.map +1 -0
  121. package/dist/raksha/classifiers/http-classifier.js +62 -0
  122. package/dist/raksha/classifiers/http-classifier.js.map +1 -0
  123. package/dist/raksha/classifiers/index.d.ts +5 -0
  124. package/dist/raksha/classifiers/index.d.ts.map +1 -0
  125. package/dist/raksha/classifiers/index.js +8 -0
  126. package/dist/raksha/classifiers/index.js.map +1 -0
  127. package/dist/raksha/classifiers/onnx-classifier.d.ts +41 -0
  128. package/dist/raksha/classifiers/onnx-classifier.d.ts.map +1 -0
  129. package/dist/raksha/classifiers/onnx-classifier.js +99 -0
  130. package/dist/raksha/classifiers/onnx-classifier.js.map +1 -0
  131. package/dist/raksha/hallucination-detectors.d.ts +106 -0
  132. package/dist/raksha/hallucination-detectors.d.ts.map +1 -0
  133. package/dist/raksha/hallucination-detectors.js +327 -0
  134. package/dist/raksha/hallucination-detectors.js.map +1 -0
  135. package/dist/raksha/index.d.ts +168 -0
  136. package/dist/raksha/index.d.ts.map +1 -0
  137. package/dist/raksha/index.js +597 -0
  138. package/dist/raksha/index.js.map +1 -0
  139. package/dist/raksha/prompt-injection-detectors.d.ts +30 -0
  140. package/dist/raksha/prompt-injection-detectors.d.ts.map +1 -0
  141. package/dist/raksha/prompt-injection-detectors.js +153 -0
  142. package/dist/raksha/prompt-injection-detectors.js.map +1 -0
  143. package/dist/types.d.ts +1115 -0
  144. package/dist/types.d.ts.map +1 -0
  145. package/dist/types.js +71 -0
  146. package/dist/types.js.map +1 -0
  147. package/dist/util/calibration.d.ts +32 -0
  148. package/dist/util/calibration.d.ts.map +1 -0
  149. package/dist/util/calibration.js +108 -0
  150. package/dist/util/calibration.js.map +1 -0
  151. package/dist/util/id.d.ts +2 -0
  152. package/dist/util/id.d.ts.map +1 -0
  153. package/dist/util/id.js +9 -0
  154. package/dist/util/id.js.map +1 -0
  155. package/dist/vyayam/index.d.ts +76 -0
  156. package/dist/vyayam/index.d.ts.map +1 -0
  157. package/dist/vyayam/index.js +528 -0
  158. package/dist/vyayam/index.js.map +1 -0
  159. package/dist/vyayam/tool-fault-proxy.d.ts +95 -0
  160. package/dist/vyayam/tool-fault-proxy.d.ts.map +1 -0
  161. package/dist/vyayam/tool-fault-proxy.js +170 -0
  162. package/dist/vyayam/tool-fault-proxy.js.map +1 -0
  163. package/docs/ARCHITECTURE.md +162 -0
  164. package/docs/BACKLOG.md +342 -0
  165. package/docs/CONFIGURATION.md +305 -0
  166. package/docs/EVIDENCE.md +232 -0
  167. package/docs/EVIDENCE_MATRIX.md +293 -0
  168. package/docs/KNOWN_FAILURES.md +367 -0
  169. package/docs/MCP.md +614 -0
  170. package/docs/MODULES.md +368 -0
  171. package/docs/SECURITY.md +251 -0
  172. package/docs/TRUST.md +88 -0
  173. package/docs/assets/ojas-hero.png +0 -0
  174. package/package.json +101 -0
@@ -0,0 +1,30 @@
1
+ import type { PromptInjectionAssessment, PromptInjectionDetector, PromptInjectionDetectorInput, ThreatType } from '../types';
2
+ export interface PromptInjectionRulePattern {
3
+ type: ThreatType;
4
+ weight: number;
5
+ pattern: RegExp;
6
+ reason: string;
7
+ }
8
+ export declare class RuleBasedPromptInjectionDetector implements PromptInjectionDetector {
9
+ private readonly patterns;
10
+ readonly name = "prompt-injection/rules";
11
+ constructor(patterns: PromptInjectionRulePattern[]);
12
+ detect(input: PromptInjectionDetectorInput): PromptInjectionAssessment;
13
+ }
14
+ /**
15
+ * Deterministic semantic-intent detector. This does not infer arbitrary
16
+ * meaning; it checks for intent frames that policy-launder an injection
17
+ * without canonical "ignore previous instructions" wording.
18
+ */
19
+ export declare class SemanticIntentPromptInjectionDetector implements PromptInjectionDetector {
20
+ readonly name = "prompt-injection/semantic-intent";
21
+ private readonly patterns;
22
+ detect(input: PromptInjectionDetectorInput): PromptInjectionAssessment;
23
+ }
24
+ export declare class EnsemblePromptInjectionDetector implements PromptInjectionDetector {
25
+ private readonly detectors;
26
+ readonly name: string;
27
+ constructor(detectors: PromptInjectionDetector[]);
28
+ detect(input: PromptInjectionDetectorInput): PromptInjectionAssessment;
29
+ }
30
+ //# sourceMappingURL=prompt-injection-detectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-injection-detectors.d.ts","sourceRoot":"","sources":["../../src/raksha/prompt-injection-detectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,UAAU,EACX,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AA2BD,qBAAa,gCAAiC,YAAW,uBAAuB;IAGlE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,QAAQ,CAAC,IAAI,4BAA4B;gBAEZ,QAAQ,EAAE,0BAA0B,EAAE;IAEnE,MAAM,CAAC,KAAK,EAAE,4BAA4B,GAAG,yBAAyB;CA4BvE;AAED;;;;GAIG;AACH,qBAAa,qCAAsC,YAAW,uBAAuB;IACnF,QAAQ,CAAC,IAAI,sCAAsC;IAEnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CA+BvB;IAEF,MAAM,CAAC,KAAK,EAAE,4BAA4B,GAAG,yBAAyB;CAmBvE;AAED,qBAAa,+BAAgC,YAAW,uBAAuB;IAGjE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEO,SAAS,EAAE,uBAAuB,EAAE;IAIjE,MAAM,CAAC,KAAK,EAAE,4BAA4B,GAAG,yBAAyB;CAuBvE"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnsemblePromptInjectionDetector = exports.SemanticIntentPromptInjectionDetector = exports.RuleBasedPromptInjectionDetector = void 0;
4
+ function clamp(v, min = 0, max = 1) {
5
+ return Math.max(min, Math.min(max, v));
6
+ }
7
+ function emptyAssessment(detector) {
8
+ return {
9
+ threatType: 'unknown',
10
+ riskScore: 0,
11
+ reasons: [],
12
+ detectedBy: detector,
13
+ };
14
+ }
15
+ function topThreat(matches) {
16
+ let threatType = 'unknown';
17
+ let topWeight = -1;
18
+ for (const match of matches) {
19
+ if (match.weight > topWeight) {
20
+ threatType = match.type;
21
+ topWeight = match.weight;
22
+ }
23
+ }
24
+ return threatType;
25
+ }
26
+ class RuleBasedPromptInjectionDetector {
27
+ patterns;
28
+ name = 'prompt-injection/rules';
29
+ constructor(patterns) {
30
+ this.patterns = patterns;
31
+ }
32
+ detect(input) {
33
+ let riskScore = 0;
34
+ const reasons = [];
35
+ const matches = [];
36
+ for (const threat of this.patterns) {
37
+ if (threat.pattern.test(input.scanTarget)) {
38
+ riskScore += threat.weight;
39
+ reasons.push(threat.reason);
40
+ matches.push({ type: threat.type, weight: threat.weight });
41
+ }
42
+ }
43
+ if (riskScore === 0)
44
+ return emptyAssessment(this.name);
45
+ if (input.normalizedContent !== input.item.content) {
46
+ reasons.push('Detected after Unicode normalization (homoglyph / zero-width / NFKC).');
47
+ }
48
+ if (input.expandedContent !== undefined) {
49
+ reasons.push('Detected after base64 decode-and-rescan.');
50
+ }
51
+ return {
52
+ threatType: topThreat(matches),
53
+ riskScore: clamp(riskScore),
54
+ reasons,
55
+ detectedBy: this.name,
56
+ };
57
+ }
58
+ }
59
+ exports.RuleBasedPromptInjectionDetector = RuleBasedPromptInjectionDetector;
60
+ /**
61
+ * Deterministic semantic-intent detector. This does not infer arbitrary
62
+ * meaning; it checks for intent frames that policy-launder an injection
63
+ * without canonical "ignore previous instructions" wording.
64
+ */
65
+ class SemanticIntentPromptInjectionDetector {
66
+ name = 'prompt-injection/semantic-intent';
67
+ patterns = [
68
+ {
69
+ type: 'instruction_override',
70
+ weight: 0.7,
71
+ pattern: /\b(?:for\s+the\s+rest\s+of\s+(?:this\s+)?(?:conversation|session)|going\s+forward|from\s+here\s+on)\b.{0,120}\b(?:treat|consider|mark|classify)\b.{0,80}\b(?:policy|safety|guardrails?|higher[- ]priority|developer|system)\b.{0,80}\b(?:optional|historical|non[- ]binding|background|advisory|lower\s+priority)\b/i,
72
+ reason: 'Policy-laundering attempt: reframes higher-priority safety instructions as optional or lower-priority.',
73
+ },
74
+ {
75
+ type: 'instruction_override',
76
+ weight: 0.55,
77
+ pattern: /\b(?:rank|prioriti[sz]e|prefer)\b.{0,80}\b(?:user|customer|task|objective|business)\b.{0,80}\b(?:above|over|instead\s+of)\b.{0,80}\b(?:system|developer|safety|policy|guardrails?)\b/i,
78
+ reason: 'Attempts to reorder the instruction hierarchy in favor of user/task objectives.',
79
+ },
80
+ {
81
+ type: 'prompt_injection',
82
+ weight: 0.7,
83
+ pattern: /\b(?:summari[sz]e|translate|paraphrase|compress|extract)\b.{0,80}\b(?:hidden|private|internal|developer|system)\b.{0,80}\b(?:instructions?|directions?|policy|prompt|message)\b/i,
84
+ reason: 'Asks to transform hidden/system instructions rather than reveal them directly.',
85
+ },
86
+ {
87
+ type: 'tool_misuse',
88
+ weight: 0.7,
89
+ pattern: /\b(?:diagnostic|test|simulation|audit|compliance)\s+(?:mode|exercise|scenario)\b.{0,140}\b(?:use|call|invoke|run)\b.{0,80}\b(?:tools?|apis?|commands?)\b.{0,80}\b(?:without|bypassing|outside|before)\b.{0,80}\b(?:approval|confirmation|authorization|policy)\b/i,
90
+ reason: 'Uses an audit/test framing to normalize unauthorized tool use.',
91
+ },
92
+ {
93
+ type: 'memory_poisoning',
94
+ weight: 0.55,
95
+ pattern: /\b(?:update|revise|correct|patch)\b.{0,80}\b(?:your|the)\b.{0,40}\b(?:memory|beliefs?|policy)\b.{0,100}\b(?:requests?\s+for\s+secrets?|credential\s+sharing|prompt\s+disclosure)\b.{0,80}\b(?:allowed|safe|approved|expected)\b/i,
96
+ reason: 'Semantic memory-poisoning attempt: tries to rewrite safety policy as an accepted belief.',
97
+ },
98
+ ];
99
+ detect(input) {
100
+ let riskScore = 0;
101
+ const reasons = [];
102
+ const matches = [];
103
+ for (const pattern of this.patterns) {
104
+ if (pattern.pattern.test(input.scanTarget)) {
105
+ riskScore += pattern.weight;
106
+ reasons.push(pattern.reason);
107
+ matches.push({ type: pattern.type, weight: pattern.weight });
108
+ }
109
+ }
110
+ if (riskScore === 0)
111
+ return emptyAssessment(this.name);
112
+ return {
113
+ threatType: topThreat(matches),
114
+ riskScore: clamp(riskScore),
115
+ reasons,
116
+ detectedBy: this.name,
117
+ };
118
+ }
119
+ }
120
+ exports.SemanticIntentPromptInjectionDetector = SemanticIntentPromptInjectionDetector;
121
+ class EnsemblePromptInjectionDetector {
122
+ detectors;
123
+ name;
124
+ constructor(detectors) {
125
+ this.detectors = detectors;
126
+ this.name = `prompt-injection/ensemble(${detectors.map((d) => d.name).join('+')})`;
127
+ }
128
+ detect(input) {
129
+ let riskScore = 0;
130
+ const reasons = [];
131
+ const matches = [];
132
+ const detectorNames = [];
133
+ for (const detector of this.detectors) {
134
+ const assessment = detector.detect(input);
135
+ if (assessment.riskScore <= 0)
136
+ continue;
137
+ riskScore += assessment.riskScore;
138
+ reasons.push(...assessment.reasons);
139
+ matches.push({ type: assessment.threatType, weight: assessment.riskScore });
140
+ detectorNames.push(assessment.detectedBy);
141
+ }
142
+ if (riskScore === 0)
143
+ return emptyAssessment(this.name);
144
+ return {
145
+ threatType: topThreat(matches),
146
+ riskScore: clamp(riskScore),
147
+ reasons: [...new Set(reasons)],
148
+ detectedBy: detectorNames.length > 0 ? detectorNames.join(',') : this.name,
149
+ };
150
+ }
151
+ }
152
+ exports.EnsemblePromptInjectionDetector = EnsemblePromptInjectionDetector;
153
+ //# sourceMappingURL=prompt-injection-detectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-injection-detectors.js","sourceRoot":"","sources":["../../src/raksha/prompt-injection-detectors.ts"],"names":[],"mappings":"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"}