@rangerchaz/aimem 0.1.5 → 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 (49) hide show
  1. package/README.md +589 -432
  2. package/dist/cli/commands/guardrails.d.ts +3 -0
  3. package/dist/cli/commands/guardrails.d.ts.map +1 -0
  4. package/dist/cli/commands/guardrails.js +340 -0
  5. package/dist/cli/commands/guardrails.js.map +1 -0
  6. package/dist/cli/commands/reindex.d.ts +7 -0
  7. package/dist/cli/commands/reindex.d.ts.map +1 -0
  8. package/dist/cli/commands/reindex.js +117 -0
  9. package/dist/cli/commands/reindex.js.map +1 -0
  10. package/dist/cli/index.js +15 -0
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/db/index.d.ts +30 -1
  13. package/dist/db/index.d.ts.map +1 -1
  14. package/dist/db/index.js +192 -1
  15. package/dist/db/index.js.map +1 -1
  16. package/dist/db/schema.d.ts +1 -0
  17. package/dist/db/schema.d.ts.map +1 -1
  18. package/dist/db/schema.js +54 -0
  19. package/dist/db/schema.js.map +1 -1
  20. package/dist/guardrails/analyzer.d.ts +20 -0
  21. package/dist/guardrails/analyzer.d.ts.map +1 -0
  22. package/dist/guardrails/analyzer.js +329 -0
  23. package/dist/guardrails/analyzer.js.map +1 -0
  24. package/dist/guardrails/calculator.d.ts +46 -0
  25. package/dist/guardrails/calculator.d.ts.map +1 -0
  26. package/dist/guardrails/calculator.js +97 -0
  27. package/dist/guardrails/calculator.js.map +1 -0
  28. package/dist/guardrails/enforcer.d.ts +28 -0
  29. package/dist/guardrails/enforcer.d.ts.map +1 -0
  30. package/dist/guardrails/enforcer.js +153 -0
  31. package/dist/guardrails/enforcer.js.map +1 -0
  32. package/dist/guardrails/index.d.ts +12 -0
  33. package/dist/guardrails/index.d.ts.map +1 -0
  34. package/dist/guardrails/index.js +17 -0
  35. package/dist/guardrails/index.js.map +1 -0
  36. package/dist/guardrails/linter-import.d.ts +31 -0
  37. package/dist/guardrails/linter-import.d.ts.map +1 -0
  38. package/dist/guardrails/linter-import.js +547 -0
  39. package/dist/guardrails/linter-import.js.map +1 -0
  40. package/dist/guardrails/responder.d.ts +28 -0
  41. package/dist/guardrails/responder.d.ts.map +1 -0
  42. package/dist/guardrails/responder.js +98 -0
  43. package/dist/guardrails/responder.js.map +1 -0
  44. package/dist/mcp/server.d.ts.map +1 -1
  45. package/dist/mcp/server.js +409 -10
  46. package/dist/mcp/server.js.map +1 -1
  47. package/dist/types/index.d.ts +58 -0
  48. package/dist/types/index.d.ts.map +1 -1
  49. package/package.json +56 -56
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Violation Checker / Enforcer
3
+ *
4
+ * Checks if proposed actions violate any guardrails.
5
+ */
6
+ import { getProjectGuardrails, getOrCreateProjectDik, getGuardrailHistory, insertGuardrailEvent, incrementDikCounter, getGuardrailEvent, } from '../db/index.js';
7
+ import { calculateDik } from './calculator.js';
8
+ import { generateCombinedResponse } from './responder.js';
9
+ /**
10
+ * Check if an action violates any guardrails.
11
+ *
12
+ * This does keyword/pattern matching against the action text.
13
+ * For more sophisticated matching, the analyzer should pre-tag
14
+ * guardrails with keywords.
15
+ */
16
+ export function checkGuardrails(projectId, action, context) {
17
+ const guardrails = getProjectGuardrails(projectId, { activeOnly: true });
18
+ const dikData = getOrCreateProjectDik(projectId);
19
+ const dikLevel = calculateDik(dikData);
20
+ const violations = [];
21
+ const violationHistories = [];
22
+ const actionLower = action.toLowerCase();
23
+ const contextLower = context?.toLowerCase() || '';
24
+ const combined = actionLower + ' ' + contextLower;
25
+ for (const guardrail of guardrails) {
26
+ if (matchesGuardrail(combined, guardrail)) {
27
+ const violation = {
28
+ id: guardrail.id,
29
+ rule: guardrail.rule,
30
+ category: guardrail.category,
31
+ severity: guardrail.severity,
32
+ rationale: guardrail.rationale,
33
+ };
34
+ violations.push(violation);
35
+ const history = getGuardrailHistory(guardrail.id);
36
+ violationHistories.push({
37
+ violation,
38
+ history: {
39
+ previousOverrides: history.overrides,
40
+ wasVindicated: history.vindicated,
41
+ },
42
+ });
43
+ // Log the trigger event
44
+ insertGuardrailEvent(guardrail.id, 'triggered', action.slice(0, 500), // Truncate for storage
45
+ null, dikLevel);
46
+ }
47
+ }
48
+ // Increment conversation count
49
+ incrementDikCounter(projectId, 'conversations');
50
+ // Generate response
51
+ const response = generateCombinedResponse(violationHistories, dikLevel);
52
+ return {
53
+ violations,
54
+ dik_level: dikLevel,
55
+ response,
56
+ };
57
+ }
58
+ /**
59
+ * Check if the action text matches a guardrail.
60
+ *
61
+ * This uses simple keyword matching. Rules can contain:
62
+ * - Exact phrases to look for
63
+ * - Category-specific patterns
64
+ */
65
+ function matchesGuardrail(text, guardrail) {
66
+ // Extract keywords from the rule
67
+ const keywords = extractKeywords(guardrail.rule, guardrail.category);
68
+ // Check if any keyword matches
69
+ for (const keyword of keywords) {
70
+ if (text.includes(keyword.toLowerCase())) {
71
+ return true;
72
+ }
73
+ }
74
+ return false;
75
+ }
76
+ /**
77
+ * Extract keywords from a rule for matching.
78
+ */
79
+ function extractKeywords(rule, category) {
80
+ const keywords = [];
81
+ // Extract quoted phrases
82
+ const quotedMatches = rule.match(/"[^"]+"/g) || [];
83
+ for (const match of quotedMatches) {
84
+ keywords.push(match.slice(1, -1)); // Remove quotes
85
+ }
86
+ // Extract backtick-wrapped code
87
+ const codeMatches = rule.match(/`[^`]+`/g) || [];
88
+ for (const match of codeMatches) {
89
+ keywords.push(match.slice(1, -1)); // Remove backticks
90
+ }
91
+ // Category-specific keyword extraction
92
+ switch (category) {
93
+ case 'naming':
94
+ // Look for case patterns mentioned
95
+ if (rule.includes('snake_case'))
96
+ keywords.push('snake_case');
97
+ if (rule.includes('camelCase'))
98
+ keywords.push('camelCase');
99
+ if (rule.includes('PascalCase'))
100
+ keywords.push('PascalCase');
101
+ if (rule.includes('kebab-case'))
102
+ keywords.push('kebab-case');
103
+ break;
104
+ case 'architecture':
105
+ // Look for path patterns
106
+ const pathMatches = rule.match(/\/[a-zA-Z_-]+\//g) || [];
107
+ keywords.push(...pathMatches);
108
+ break;
109
+ case 'security':
110
+ // Common security keywords
111
+ if (rule.toLowerCase().includes('auth'))
112
+ keywords.push('password', 'token', 'secret', 'credential');
113
+ if (rule.toLowerCase().includes('sanitiz'))
114
+ keywords.push('sanitize', 'escape', 'validate');
115
+ break;
116
+ }
117
+ return keywords;
118
+ }
119
+ /**
120
+ * Record that a user accepted a triggered guardrail.
121
+ */
122
+ export function acceptGuardrail(guardrailId, projectId) {
123
+ const dikData = getOrCreateProjectDik(projectId);
124
+ const dikLevel = calculateDik(dikData);
125
+ insertGuardrailEvent(guardrailId, 'accepted', null, null, dikLevel);
126
+ incrementDikCounter(projectId, 'corrections_made');
127
+ }
128
+ /**
129
+ * Record that a user overrode a triggered guardrail.
130
+ */
131
+ export function overrideGuardrail(guardrailId, projectId, reason) {
132
+ const dikData = getOrCreateProjectDik(projectId);
133
+ const dikLevel = calculateDik(dikData);
134
+ const event = insertGuardrailEvent(guardrailId, 'overridden', reason, null, dikLevel);
135
+ return event.id;
136
+ }
137
+ /**
138
+ * Mark an override as vindicated (user regretted it).
139
+ * This is gold for DIK.
140
+ */
141
+ export function vindicateOverride(eventId, projectId) {
142
+ const dikData = getOrCreateProjectDik(projectId);
143
+ // Get the event to find the guardrail
144
+ const event = getGuardrailEvent(eventId);
145
+ if (event && event.event_type === 'overridden') {
146
+ insertGuardrailEvent(event.guardrail_id, 'vindicated', null, null, calculateDik(dikData));
147
+ incrementDikCounter(projectId, 'overrides_regretted');
148
+ }
149
+ // Recalculate and return new DIK level
150
+ const updatedDik = getOrCreateProjectDik(projectId);
151
+ return calculateDik(updatedDik);
152
+ }
153
+ //# sourceMappingURL=enforcer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforcer.js","sourceRoot":"","sources":["../../src/guardrails/enforcer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Guardrails Module - DIK (Digital Interface Knowledge)
3
+ *
4
+ * A rules enforcement system that earns authority over time.
5
+ * The AI doesn't just remember - it has opinions, and those opinions are earned.
6
+ */
7
+ export { calculateDik, getDikBreakdown, getDikTier, describeDikLevel, getPersonalityInjection, type DikBreakdown, } from './calculator.js';
8
+ export { analyzeProject, saveProposedRules, } from './analyzer.js';
9
+ export { checkGuardrails, acceptGuardrail, overrideGuardrail, vindicateOverride, } from './enforcer.js';
10
+ export { generateResponse, generateCombinedResponse, formatSeverityPrefix, } from './responder.js';
11
+ export { importLinterRules, type LinterConfig, type ImportedRule, } from './linter-import.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guardrails/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,YAAY,EACZ,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,YAAY,GAClB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Guardrails Module - DIK (Digital Interface Knowledge)
3
+ *
4
+ * A rules enforcement system that earns authority over time.
5
+ * The AI doesn't just remember - it has opinions, and those opinions are earned.
6
+ */
7
+ // Calculator exports
8
+ export { calculateDik, getDikBreakdown, getDikTier, describeDikLevel, getPersonalityInjection, } from './calculator.js';
9
+ // Analyzer exports
10
+ export { analyzeProject, saveProposedRules, } from './analyzer.js';
11
+ // Enforcer exports
12
+ export { checkGuardrails, acceptGuardrail, overrideGuardrail, vindicateOverride, } from './enforcer.js';
13
+ // Responder exports
14
+ export { generateResponse, generateCombinedResponse, formatSeverityPrefix, } from './responder.js';
15
+ // Linter import exports
16
+ export { importLinterRules, } from './linter-import.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guardrails/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qBAAqB;AACrB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,uBAAuB,GAExB,MAAM,iBAAiB,CAAC;AAEzB,mBAAmB;AACnB,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,mBAAmB;AACnB,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,oBAAoB;AACpB,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,wBAAwB;AACxB,OAAO,EACL,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Linter Import
3
+ *
4
+ * Imports rules from existing linter configurations and converts them to guardrails.
5
+ * Supports: ESLint, RuboCop, Ruff/Black/isort (pyproject.toml), Prettier
6
+ */
7
+ import type { Guardrail, GuardrailCategory } from '../types/index.js';
8
+ export interface LinterConfig {
9
+ type: string;
10
+ path: string;
11
+ rules: ImportedRule[];
12
+ }
13
+ export interface ImportedRule {
14
+ category: GuardrailCategory;
15
+ rule: string;
16
+ rationale: string;
17
+ source: string;
18
+ }
19
+ interface ImportResult {
20
+ configs: LinterConfig[];
21
+ totalRules: number;
22
+ saved: Guardrail[];
23
+ }
24
+ /**
25
+ * Scan project for linter configs and import rules.
26
+ */
27
+ export declare function importLinterRules(projectId: number, projectPath: string, options?: {
28
+ dryRun?: boolean;
29
+ }): ImportResult;
30
+ export {};
31
+ //# sourceMappingURL=linter-import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linter-import.d.ts","sourceRoot":"","sources":["../../src/guardrails/linter-import.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,YAAY,CA6Cd"}