instar 1.3.755 → 1.3.757

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.
@@ -1,144 +0,0 @@
1
- /**
2
- * TopicClassifier — Deterministic, rule-based topic classification.
3
- *
4
- * Part of the Consent & Discovery Framework (Round 2 hardening).
5
- *
6
- * Why not LLM-based:
7
- * Adversarial reviewer flagged that LLM-based topic extraction reintroduces
8
- * prompt injection risk into the discovery pipeline. A user could craft input
9
- * that manipulates the topic classifier to trigger specific feature surfacing.
10
- *
11
- * This classifier uses keyword matching against a fixed taxonomy. It's less
12
- * nuanced than an LLM classifier but has zero injection surface. The evaluator
13
- * (which IS LLM-based) receives these labels as sanitized input.
14
- *
15
- * Design:
16
- * - Fixed taxonomy of ~15 topic categories
17
- * - Keyword sets per category, scored by match density
18
- * - Returns top category + confidence score
19
- * - Also classifies conversation intent (same approach)
20
- * - Input sanitized: lowercased, truncated, non-alpha stripped
21
- */
22
- // ── Keyword Taxonomy ─────────────────────────────────────────────────
23
- const TOPIC_KEYWORDS = {
24
- debugging: ['bug', 'error', 'fix', 'broken', 'crash', 'fail', 'exception', 'stack trace', 'debug', 'issue', 'wrong', 'not working', 'undefined', 'null', 'timeout', 'hang', 'stuck'],
25
- configuration: ['config', 'setting', 'enable', 'disable', 'toggle', 'option', 'preference', 'setup', 'configure', 'turn on', 'turn off', 'activate', 'deactivate', 'parameter'],
26
- deployment: ['deploy', 'ship', 'release', 'publish', 'build', 'ci', 'cd', 'pipeline', 'production', 'staging', 'rollback', 'version', 'upgrade'],
27
- security: ['security', 'auth', 'token', 'secret', 'permission', 'access', 'encrypt', 'credential', 'password', 'vulnerability', 'trust', 'certificate'],
28
- communication: ['message', 'telegram', 'email', 'notify', 'alert', 'send', 'reply', 'chat', 'notification', 'whatsapp', 'slack'],
29
- monitoring: ['monitor', 'health', 'status', 'metric', 'log', 'dashboard', 'alert', 'uptime', 'latency', 'memory', 'disk', 'cpu', 'usage'],
30
- development: ['code', 'implement', 'function', 'class', 'test', 'refactor', 'api', 'endpoint', 'module', 'type', 'interface', 'typescript', 'javascript'],
31
- documentation: ['doc', 'readme', 'spec', 'document', 'explain', 'comment', 'description', 'guide', 'tutorial', 'wiki'],
32
- collaboration: ['agent', 'threadline', 'network', 'machine', 'sync', 'share', 'collaborate', 'peer', 'relay', 'handshake', 'discover'],
33
- 'data-management': ['database', 'sqlite', 'backup', 'restore', 'snapshot', 'migrate', 'data', 'storage', 'file', 'persist', 'cache'],
34
- automation: ['job', 'schedule', 'cron', 'automate', 'workflow', 'task', 'recurring', 'trigger', 'hook', 'event'],
35
- performance: ['slow', 'fast', 'performance', 'optimize', 'speed', 'efficient', 'bottleneck', 'profil', 'memory leak', 'resource'],
36
- architecture: ['architecture', 'design', 'pattern', 'structure', 'system', 'framework', 'component', 'layer', 'module', 'principle'],
37
- onboarding: ['new', 'start', 'begin', 'init', 'first', 'getting started', 'install', 'setup', 'introduction', 'welcome'],
38
- general: [],
39
- };
40
- const INTENT_KEYWORDS = {
41
- debugging: ['bug', 'error', 'fix', 'broken', 'crash', 'fail', 'not working', 'wrong', 'issue', 'debug', 'trace'],
42
- configuring: ['config', 'setting', 'enable', 'disable', 'setup', 'configure', 'option', 'toggle', 'turn on', 'turn off'],
43
- exploring: ['what', 'how', 'why', 'show', 'list', 'tell me', 'capabilities', 'features', 'can you', 'do you'],
44
- building: ['build', 'create', 'implement', 'add', 'make', 'write', 'develop', 'code', 'new feature', 'spec'],
45
- asking: ['question', 'help', 'explain', 'clarify', 'understand', 'meaning', 'difference', 'purpose'],
46
- monitoring: ['check', 'status', 'health', 'monitor', 'watch', 'track', 'log', 'dashboard', 'metric'],
47
- unknown: [],
48
- };
49
- const PROBLEM_KEYWORDS = {
50
- 'connectivity': ['connect', 'network', 'timeout', 'offline', 'unreachable', 'dns', 'tunnel'],
51
- 'authentication': ['auth', 'login', '401', '403', 'forbidden', 'unauthorized', 'token expired'],
52
- 'data-loss': ['lost', 'missing', 'deleted', 'gone', 'disappeared', 'corrupted', 'empty'],
53
- 'resource-exhaustion': ['memory', 'disk full', 'out of space', 'quota', 'limit', 'exceeded', 'oom'],
54
- 'permission': ['permission', 'denied', 'access', 'readonly', 'write', 'forbidden'],
55
- };
56
- // ── Classifier ───────────────────────────────────────────────────────
57
- const MAX_INPUT_LENGTH = 500;
58
- /**
59
- * Sanitize input text for classification.
60
- * Strips control characters, lowercases, truncates.
61
- */
62
- export function sanitizeInput(text) {
63
- return text
64
- .slice(0, MAX_INPUT_LENGTH)
65
- .toLowerCase()
66
- .replace(/[^\w\s\-'.?!]/g, ' ')
67
- .replace(/\s+/g, ' ')
68
- .trim();
69
- }
70
- /**
71
- * Score a text against a keyword set.
72
- * Returns 0-1 based on match density.
73
- */
74
- function scoreKeywords(text, keywords) {
75
- if (keywords.length === 0)
76
- return 0;
77
- let matches = 0;
78
- for (const kw of keywords) {
79
- if (text.includes(kw))
80
- matches++;
81
- }
82
- return matches / keywords.length;
83
- }
84
- /**
85
- * Classify a text into topic category and conversation intent.
86
- * Purely deterministic — no LLM, no injection surface.
87
- */
88
- export function classify(rawText) {
89
- const text = sanitizeInput(rawText);
90
- // Score topics
91
- let bestTopic = 'general';
92
- let bestTopicScore = 0;
93
- for (const [category, keywords] of Object.entries(TOPIC_KEYWORDS)) {
94
- if (category === 'general')
95
- continue;
96
- const score = scoreKeywords(text, keywords);
97
- if (score > bestTopicScore) {
98
- bestTopicScore = score;
99
- bestTopic = category;
100
- }
101
- }
102
- // Score intents
103
- let bestIntent = 'unknown';
104
- let bestIntentScore = 0;
105
- for (const [intent, keywords] of Object.entries(INTENT_KEYWORDS)) {
106
- if (intent === 'unknown')
107
- continue;
108
- const score = scoreKeywords(text, keywords);
109
- if (score > bestIntentScore) {
110
- bestIntentScore = score;
111
- bestIntent = intent;
112
- }
113
- }
114
- // Detect problem categories
115
- const problemCategories = [];
116
- for (const [problem, keywords] of Object.entries(PROBLEM_KEYWORDS)) {
117
- if (scoreKeywords(text, keywords) > 0) {
118
- problemCategories.push(problem);
119
- }
120
- }
121
- return {
122
- topicCategory: bestTopic,
123
- topicConfidence: Math.min(bestTopicScore * 5, 1), // Scale up for useful range
124
- conversationIntent: bestIntent,
125
- intentConfidence: Math.min(bestIntentScore * 5, 1),
126
- problemCategories,
127
- };
128
- }
129
- /**
130
- * Classify and return a sanitized DiscoveryContext-compatible object.
131
- * This is the main entry point for the discovery pipeline.
132
- */
133
- export function classifyForDiscovery(rawText, autonomyProfile, enabledFeatures, userId) {
134
- const result = classify(rawText);
135
- return {
136
- topicCategory: result.topicCategory,
137
- conversationIntent: result.conversationIntent,
138
- problemCategories: result.problemCategories,
139
- autonomyProfile,
140
- enabledFeatures,
141
- userId: userId || 'default',
142
- };
143
- }
144
- //# sourceMappingURL=TopicClassifier.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TopicClassifier.js","sourceRoot":"","sources":["../../src/core/TopicClassifier.ts"],"names":[],"mappings":"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"}