@skillsmith/core 2.1.0 → 2.1.2
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/dist/.tsbuildinfo +1 -1
- package/dist/src/analysis/types.d.ts +2 -0
- package/dist/src/analysis/types.d.ts.map +1 -1
- package/dist/src/analysis/types.js +13 -1
- package/dist/src/analysis/types.js.map +1 -1
- package/dist/src/analytics/AnalyticsRepository.d.ts +4 -0
- package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -1
- package/dist/src/analytics/AnalyticsRepository.js +26 -44
- package/dist/src/analytics/AnalyticsRepository.js.map +1 -1
- package/dist/src/analytics/schema.d.ts +1 -1
- package/dist/src/analytics/schema.d.ts.map +1 -1
- package/dist/src/analytics/schema.js +68 -0
- package/dist/src/analytics/schema.js.map +1 -1
- package/dist/src/api/client.d.ts +33 -29
- package/dist/src/api/client.d.ts.map +1 -1
- package/dist/src/api/client.js +15 -10
- package/dist/src/api/client.js.map +1 -1
- package/dist/src/billing/BillingService.d.ts +139 -0
- package/dist/src/billing/BillingService.d.ts.map +1 -0
- package/dist/src/billing/BillingService.js +393 -0
- package/dist/src/billing/BillingService.js.map +1 -0
- package/dist/src/billing/GDPRComplianceService.d.ts +176 -0
- package/dist/src/billing/GDPRComplianceService.d.ts.map +1 -0
- package/dist/src/billing/GDPRComplianceService.js +361 -0
- package/dist/src/billing/GDPRComplianceService.js.map +1 -0
- package/dist/src/billing/StripeClient.d.ts +177 -0
- package/dist/src/billing/StripeClient.d.ts.map +1 -0
- package/dist/src/billing/StripeClient.js +462 -0
- package/dist/src/billing/StripeClient.js.map +1 -0
- package/dist/src/billing/StripeReconciliationJob.d.ts +95 -0
- package/dist/src/billing/StripeReconciliationJob.d.ts.map +1 -0
- package/dist/src/billing/StripeReconciliationJob.js +405 -0
- package/dist/src/billing/StripeReconciliationJob.js.map +1 -0
- package/dist/src/billing/StripeWebhookHandler.d.ts +92 -0
- package/dist/src/billing/StripeWebhookHandler.d.ts.map +1 -0
- package/dist/src/billing/StripeWebhookHandler.js +409 -0
- package/dist/src/billing/StripeWebhookHandler.js.map +1 -0
- package/dist/src/billing/index.d.ts +18 -0
- package/dist/src/billing/index.d.ts.map +1 -0
- package/dist/src/billing/index.js +19 -0
- package/dist/src/billing/index.js.map +1 -0
- package/dist/src/billing/types.d.ts +266 -0
- package/dist/src/billing/types.d.ts.map +1 -0
- package/dist/src/billing/types.js +23 -0
- package/dist/src/billing/types.js.map +1 -0
- package/dist/src/embeddings/hnsw-store.d.ts +568 -0
- package/dist/src/embeddings/hnsw-store.d.ts.map +1 -0
- package/dist/src/embeddings/hnsw-store.js +805 -0
- package/dist/src/embeddings/hnsw-store.js.map +1 -0
- package/dist/src/embeddings/index.d.ts +2 -0
- package/dist/src/embeddings/index.d.ts.map +1 -1
- package/dist/src/embeddings/index.js +2 -0
- package/dist/src/embeddings/index.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/learning/PatternStore.d.ts +457 -0
- package/dist/src/learning/PatternStore.d.ts.map +1 -0
- package/dist/src/learning/PatternStore.js +893 -0
- package/dist/src/learning/PatternStore.js.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.d.ts +403 -0
- package/dist/src/learning/ReasoningBankIntegration.d.ts.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.js +627 -0
- package/dist/src/learning/ReasoningBankIntegration.js.map +1 -0
- package/dist/src/learning/index.d.ts +15 -0
- package/dist/src/learning/index.d.ts.map +1 -0
- package/dist/src/learning/index.js +15 -0
- package/dist/src/learning/index.js.map +1 -0
- package/dist/src/routing/SONARouter.d.ts +154 -0
- package/dist/src/routing/SONARouter.d.ts.map +1 -0
- package/dist/src/routing/SONARouter.js +679 -0
- package/dist/src/routing/SONARouter.js.map +1 -0
- package/dist/src/routing/index.d.ts +9 -0
- package/dist/src/routing/index.d.ts.map +1 -0
- package/dist/src/routing/index.js +10 -0
- package/dist/src/routing/index.js.map +1 -0
- package/dist/src/routing/types.d.ts +331 -0
- package/dist/src/routing/types.d.ts.map +1 -0
- package/dist/src/routing/types.js +203 -0
- package/dist/src/routing/types.js.map +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js +5 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
- package/dist/src/security/SkillSandbox.d.ts +156 -0
- package/dist/src/security/SkillSandbox.d.ts.map +1 -0
- package/dist/src/security/SkillSandbox.js +303 -0
- package/dist/src/security/SkillSandbox.js.map +1 -0
- package/dist/src/security/index.d.ts +3 -1
- package/dist/src/security/index.d.ts.map +1 -1
- package/dist/src/security/index.js +5 -1
- package/dist/src/security/index.js.map +1 -1
- package/dist/src/security/rate-limiter/presets.d.ts +12 -0
- package/dist/src/security/rate-limiter/presets.d.ts.map +1 -1
- package/dist/src/security/rate-limiter/presets.js +12 -0
- package/dist/src/security/rate-limiter/presets.js.map +1 -1
- package/dist/src/security/sanitization.d.ts +85 -0
- package/dist/src/security/sanitization.d.ts.map +1 -1
- package/dist/src/security/sanitization.js +133 -0
- package/dist/src/security/sanitization.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.d.ts +23 -0
- package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.js +232 -28
- package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
- package/dist/src/security/scanner/patterns.d.ts +13 -0
- package/dist/src/security/scanner/patterns.d.ts.map +1 -1
- package/dist/src/security/scanner/patterns.js +51 -0
- package/dist/src/security/scanner/patterns.js.map +1 -1
- package/dist/src/security/scanner/types.d.ts +13 -1
- package/dist/src/security/scanner/types.d.ts.map +1 -1
- package/dist/src/security/scanner/weights.d.ts.map +1 -1
- package/dist/src/security/scanner/weights.js +1 -0
- package/dist/src/security/scanner/weights.js.map +1 -1
- package/dist/src/session/SessionManager.d.ts +7 -0
- package/dist/src/session/SessionManager.d.ts.map +1 -1
- package/dist/src/session/SessionManager.js +117 -10
- package/dist/src/session/SessionManager.js.map +1 -1
- package/dist/src/sync/SyncEngine.d.ts.map +1 -1
- package/dist/src/sync/SyncEngine.js +52 -32
- package/dist/src/sync/SyncEngine.js.map +1 -1
- package/dist/src/testing/MultiLLMProvider.d.ts +374 -0
- package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -0
- package/dist/src/testing/MultiLLMProvider.js +720 -0
- package/dist/src/testing/MultiLLMProvider.js.map +1 -0
- package/dist/src/testing/index.d.ts +8 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +9 -0
- package/dist/src/testing/index.js.map +1 -0
- package/dist/src/types.d.ts +3 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/tests/SecurityScanner.test.js +337 -1
- package/dist/tests/SecurityScanner.test.js.map +1 -1
- package/dist/tests/billing/BillingService.test.d.ts +7 -0
- package/dist/tests/billing/BillingService.test.d.ts.map +1 -0
- package/dist/tests/billing/BillingService.test.js +168 -0
- package/dist/tests/billing/BillingService.test.js.map +1 -0
- package/dist/tests/billing/GDPRCompliance.test.d.ts +7 -0
- package/dist/tests/billing/GDPRCompliance.test.d.ts.map +1 -0
- package/dist/tests/billing/GDPRCompliance.test.js +195 -0
- package/dist/tests/billing/GDPRCompliance.test.js.map +1 -0
- package/dist/tests/billing/StripeReconciliation.test.d.ts +7 -0
- package/dist/tests/billing/StripeReconciliation.test.d.ts.map +1 -0
- package/dist/tests/billing/StripeReconciliation.test.js +266 -0
- package/dist/tests/billing/StripeReconciliation.test.js.map +1 -0
- package/dist/tests/billing/stripe-validators.test.d.ts +7 -0
- package/dist/tests/billing/stripe-validators.test.d.ts.map +1 -0
- package/dist/tests/billing/stripe-validators.test.js +107 -0
- package/dist/tests/billing/stripe-validators.test.js.map +1 -0
- package/dist/tests/embeddings/hnsw-store.test.d.ts +7 -0
- package/dist/tests/embeddings/hnsw-store.test.d.ts.map +1 -0
- package/dist/tests/embeddings/hnsw-store.test.js +295 -0
- package/dist/tests/embeddings/hnsw-store.test.js.map +1 -0
- package/dist/tests/integration/neural/e2e-learning.test.d.ts +17 -0
- package/dist/tests/integration/neural/e2e-learning.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/e2e-learning.test.js +238 -0
- package/dist/tests/integration/neural/e2e-learning.test.js.map +1 -0
- package/dist/tests/integration/neural/helpers.d.ts +132 -0
- package/dist/tests/integration/neural/helpers.d.ts.map +1 -0
- package/dist/tests/integration/neural/helpers.js +287 -0
- package/dist/tests/integration/neural/helpers.js.map +1 -0
- package/dist/tests/integration/neural/personalization.test.d.ts +21 -0
- package/dist/tests/integration/neural/personalization.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/personalization.test.js +304 -0
- package/dist/tests/integration/neural/personalization.test.js.map +1 -0
- package/dist/tests/integration/neural/preference-learner.test.d.ts +23 -0
- package/dist/tests/integration/neural/preference-learner.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/preference-learner.test.js +289 -0
- package/dist/tests/integration/neural/preference-learner.test.js.map +1 -0
- package/dist/tests/integration/neural/privacy.test.d.ts +19 -0
- package/dist/tests/integration/neural/privacy.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/privacy.test.js +249 -0
- package/dist/tests/integration/neural/privacy.test.js.map +1 -0
- package/dist/tests/integration/neural/setup.d.ts +175 -0
- package/dist/tests/integration/neural/setup.d.ts.map +1 -0
- package/dist/tests/integration/neural/setup.js +487 -0
- package/dist/tests/integration/neural/setup.js.map +1 -0
- package/dist/tests/integration/neural/signal-collection.test.d.ts +21 -0
- package/dist/tests/integration/neural/signal-collection.test.d.ts.map +1 -0
- package/dist/tests/integration/neural/signal-collection.test.js +232 -0
- package/dist/tests/integration/neural/signal-collection.test.js.map +1 -0
- package/dist/tests/learning/PatternStore.test.d.ts +8 -0
- package/dist/tests/learning/PatternStore.test.d.ts.map +1 -0
- package/dist/tests/learning/PatternStore.test.js +589 -0
- package/dist/tests/learning/PatternStore.test.js.map +1 -0
- package/dist/tests/learning/ReasoningBankIntegration.test.d.ts +8 -0
- package/dist/tests/learning/ReasoningBankIntegration.test.d.ts.map +1 -0
- package/dist/tests/learning/ReasoningBankIntegration.test.js +269 -0
- package/dist/tests/learning/ReasoningBankIntegration.test.js.map +1 -0
- package/dist/tests/routing/SONARouter.test.d.ts +8 -0
- package/dist/tests/routing/SONARouter.test.d.ts.map +1 -0
- package/dist/tests/routing/SONARouter.test.js +400 -0
- package/dist/tests/routing/SONARouter.test.js.map +1 -0
- package/dist/tests/security/ContinuousSecurity.test.js +10 -12
- package/dist/tests/security/ContinuousSecurity.test.js.map +1 -1
- package/dist/tests/security/SkillSandbox.test.d.ts +8 -0
- package/dist/tests/security/SkillSandbox.test.d.ts.map +1 -0
- package/dist/tests/security/SkillSandbox.test.js +321 -0
- package/dist/tests/security/SkillSandbox.test.js.map +1 -0
- package/dist/tests/sync/SyncEngine.test.js +4 -2
- package/dist/tests/sync/SyncEngine.test.js.map +1 -1
- package/dist/tests/testing/MultiLLMProvider.test.d.ts +14 -0
- package/dist/tests/testing/MultiLLMProvider.test.d.ts.map +1 -0
- package/dist/tests/testing/MultiLLMProvider.test.js +438 -0
- package/dist/tests/testing/MultiLLMProvider.test.js.map +1 -0
- package/package.json +16 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preference-learner.test.js","sourceRoot":"","sources":["../../../../tests/integration/neural/preference-learner.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1536: Privacy Manager Integration Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests the IPrivacyManager interface for GDPR compliance and
|
|
5
|
+
* data lifecycle management in the Recommendation Learning Loop.
|
|
6
|
+
*
|
|
7
|
+
* Test Cases:
|
|
8
|
+
* 1. purgeOldSignals() removes signals older than 90 days
|
|
9
|
+
* 2. exportUserData() returns all user signals and profile
|
|
10
|
+
* 3. wipeAllData() removes profile and all signals
|
|
11
|
+
* 4. Signal anonymization strips PII
|
|
12
|
+
* 5. Retention policy configurable per-tenant
|
|
13
|
+
* 6. Privacy audit log records all operations
|
|
14
|
+
*
|
|
15
|
+
* @see packages/core/src/learning/interfaces.ts
|
|
16
|
+
* @see docs/execution/phase5-testing-execution.md
|
|
17
|
+
*/
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=privacy.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privacy.test.d.ts","sourceRoot":"","sources":["../../../../tests/integration/neural/privacy.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1536: Privacy Manager Integration Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests the IPrivacyManager interface for GDPR compliance and
|
|
5
|
+
* data lifecycle management in the Recommendation Learning Loop.
|
|
6
|
+
*
|
|
7
|
+
* Test Cases:
|
|
8
|
+
* 1. purgeOldSignals() removes signals older than 90 days
|
|
9
|
+
* 2. exportUserData() returns all user signals and profile
|
|
10
|
+
* 3. wipeAllData() removes profile and all signals
|
|
11
|
+
* 4. Signal anonymization strips PII
|
|
12
|
+
* 5. Retention policy configurable per-tenant
|
|
13
|
+
* 6. Privacy audit log records all operations
|
|
14
|
+
*
|
|
15
|
+
* @see packages/core/src/learning/interfaces.ts
|
|
16
|
+
* @see docs/execution/phase5-testing-execution.md
|
|
17
|
+
*/
|
|
18
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
19
|
+
import { createNeuralTestContext, cleanupNeuralTestContext, createDefaultProfile, } from './setup.js';
|
|
20
|
+
import { generateSignal, generateContext, daysAgo } from './helpers.js';
|
|
21
|
+
import { SignalType, SkillCategory } from '../../../src/learning/types.js';
|
|
22
|
+
describe('PrivacyManager Integration', () => {
|
|
23
|
+
let ctx;
|
|
24
|
+
beforeEach(() => {
|
|
25
|
+
ctx = createNeuralTestContext();
|
|
26
|
+
});
|
|
27
|
+
afterEach(async () => {
|
|
28
|
+
await cleanupNeuralTestContext(ctx);
|
|
29
|
+
});
|
|
30
|
+
describe('Signal Retention', () => {
|
|
31
|
+
it('should purge signals older than 90 days', async () => {
|
|
32
|
+
// Add signals at various ages
|
|
33
|
+
// Old signals (should be purged)
|
|
34
|
+
ctx.signalCollector.addSignal(generateSignal({
|
|
35
|
+
skillId: 'old-skill-1',
|
|
36
|
+
timestamp: daysAgo(100), // 100 days old
|
|
37
|
+
}));
|
|
38
|
+
ctx.signalCollector.addSignal(generateSignal({
|
|
39
|
+
skillId: 'old-skill-2',
|
|
40
|
+
timestamp: daysAgo(95), // 95 days old
|
|
41
|
+
}));
|
|
42
|
+
ctx.signalCollector.addSignal(generateSignal({
|
|
43
|
+
skillId: 'old-skill-3',
|
|
44
|
+
timestamp: daysAgo(91), // 91 days old
|
|
45
|
+
}));
|
|
46
|
+
// Recent signals (should be kept)
|
|
47
|
+
ctx.signalCollector.addSignal(generateSignal({
|
|
48
|
+
skillId: 'recent-skill-1',
|
|
49
|
+
timestamp: daysAgo(30),
|
|
50
|
+
}));
|
|
51
|
+
ctx.signalCollector.addSignal(generateSignal({
|
|
52
|
+
skillId: 'recent-skill-2',
|
|
53
|
+
timestamp: daysAgo(1),
|
|
54
|
+
}));
|
|
55
|
+
const countBefore = await ctx.signalCollector.getSignalCount();
|
|
56
|
+
expect(countBefore).toBe(5);
|
|
57
|
+
// Purge signals older than 90 days
|
|
58
|
+
const deletedCount = await ctx.privacyManager.purgeOldSignals(90);
|
|
59
|
+
expect(deletedCount).toBe(3); // 3 old signals removed
|
|
60
|
+
const countAfter = await ctx.signalCollector.getSignalCount();
|
|
61
|
+
expect(countAfter).toBe(2); // 2 recent signals remain
|
|
62
|
+
// Verify remaining signals
|
|
63
|
+
const remaining = ctx.signalCollector.getAllSignals();
|
|
64
|
+
expect(remaining.every((s) => s.timestamp >= daysAgo(90))).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
it('should handle custom retention periods', async () => {
|
|
67
|
+
// Add signals at various ages
|
|
68
|
+
ctx.signalCollector.addSignal(generateSignal({
|
|
69
|
+
skillId: 'skill-45-days',
|
|
70
|
+
timestamp: daysAgo(45),
|
|
71
|
+
}));
|
|
72
|
+
ctx.signalCollector.addSignal(generateSignal({
|
|
73
|
+
skillId: 'skill-20-days',
|
|
74
|
+
timestamp: daysAgo(20),
|
|
75
|
+
}));
|
|
76
|
+
// Purge with 30-day retention
|
|
77
|
+
const deleted = await ctx.privacyManager.purgeOldSignals(30);
|
|
78
|
+
expect(deleted).toBe(1); // 45-day old signal removed
|
|
79
|
+
expect(await ctx.signalCollector.getSignalCount()).toBe(1);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('Data Export', () => {
|
|
83
|
+
it('should export all user signals and profile', async () => {
|
|
84
|
+
// Add some signals
|
|
85
|
+
for (let i = 0; i < 5; i++) {
|
|
86
|
+
await ctx.signalCollector.recordAccept(`skill-${i}`, generateContext({ category: SkillCategory.TESTING }));
|
|
87
|
+
}
|
|
88
|
+
await ctx.signalCollector.recordDismiss('unwanted-skill', generateContext());
|
|
89
|
+
// Build and save profile
|
|
90
|
+
let profile = createDefaultProfile();
|
|
91
|
+
const signals = await ctx.signalCollector.getSignals({});
|
|
92
|
+
profile = await ctx.preferenceLearner.batchUpdateProfile(profile, signals);
|
|
93
|
+
await ctx.profileRepository.saveProfile(profile);
|
|
94
|
+
// Export data
|
|
95
|
+
const exported = await ctx.privacyManager.exportUserData();
|
|
96
|
+
// Verify export contents
|
|
97
|
+
expect(exported.exported_at).toBeDefined();
|
|
98
|
+
expect(exported.version).toBe(1);
|
|
99
|
+
expect(exported.profile.signal_count).toBe(6);
|
|
100
|
+
expect(exported.signals).toHaveLength(6);
|
|
101
|
+
// Profile should have learned preferences
|
|
102
|
+
expect(exported.profile.category_weights[SkillCategory.TESTING]).toBeGreaterThan(0);
|
|
103
|
+
});
|
|
104
|
+
it('should include all signal types in export', async () => {
|
|
105
|
+
// Add various signal types
|
|
106
|
+
await ctx.signalCollector.recordAccept('accepted', generateContext());
|
|
107
|
+
await ctx.signalCollector.recordDismiss('dismissed', generateContext());
|
|
108
|
+
await ctx.signalCollector.recordUsage('used', 'daily');
|
|
109
|
+
await ctx.signalCollector.recordAbandonment('abandoned', 30);
|
|
110
|
+
await ctx.signalCollector.recordUninstall('uninstalled', 14);
|
|
111
|
+
const exported = await ctx.privacyManager.exportUserData();
|
|
112
|
+
expect(exported.signals).toHaveLength(5);
|
|
113
|
+
const types = exported.signals.map((s) => s.type);
|
|
114
|
+
expect(types).toContain(SignalType.ACCEPT);
|
|
115
|
+
expect(types).toContain(SignalType.DISMISS);
|
|
116
|
+
expect(types).toContain(SignalType.USAGE_DAILY);
|
|
117
|
+
expect(types).toContain(SignalType.ABANDONED);
|
|
118
|
+
expect(types).toContain(SignalType.UNINSTALL);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe('Data Wipe', () => {
|
|
122
|
+
it('should remove profile and all signals', async () => {
|
|
123
|
+
// Add signals
|
|
124
|
+
for (let i = 0; i < 10; i++) {
|
|
125
|
+
await ctx.signalCollector.recordAccept(`skill-${i}`, generateContext());
|
|
126
|
+
}
|
|
127
|
+
// Create and save profile
|
|
128
|
+
let profile = createDefaultProfile();
|
|
129
|
+
const signals = await ctx.signalCollector.getSignals({});
|
|
130
|
+
profile = await ctx.preferenceLearner.batchUpdateProfile(profile, signals);
|
|
131
|
+
await ctx.profileRepository.saveProfile(profile);
|
|
132
|
+
// Verify data exists
|
|
133
|
+
expect(await ctx.signalCollector.getSignalCount()).toBe(10);
|
|
134
|
+
expect(await ctx.profileRepository.exists()).toBe(true);
|
|
135
|
+
// Wipe all data
|
|
136
|
+
const deletedCount = await ctx.privacyManager.wipeAllData();
|
|
137
|
+
expect(deletedCount).toBe(11); // 10 signals + 1 profile
|
|
138
|
+
expect(await ctx.signalCollector.getSignalCount()).toBe(0);
|
|
139
|
+
expect(await ctx.profileRepository.exists()).toBe(false);
|
|
140
|
+
});
|
|
141
|
+
it('should handle wipe with no data', async () => {
|
|
142
|
+
const deletedCount = await ctx.privacyManager.wipeAllData();
|
|
143
|
+
// Returns 0 signals + attempts profile delete (which may return 1 even if no profile)
|
|
144
|
+
// Implementation detail: wipeAllData returns signalCount + 1 for profile
|
|
145
|
+
expect(deletedCount).toBeGreaterThanOrEqual(0);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
describe('Anonymization', () => {
|
|
149
|
+
it('should produce anonymized aggregate statistics', async () => {
|
|
150
|
+
// Add signals with categories
|
|
151
|
+
for (let i = 0; i < 10; i++) {
|
|
152
|
+
await ctx.signalCollector.recordAccept(`testing-skill-${i}`, generateContext({ category: SkillCategory.TESTING }));
|
|
153
|
+
}
|
|
154
|
+
for (let i = 0; i < 5; i++) {
|
|
155
|
+
await ctx.signalCollector.recordDismiss(`git-skill-${i}`, generateContext({ category: SkillCategory.GIT }));
|
|
156
|
+
}
|
|
157
|
+
for (let i = 0; i < 3; i++) {
|
|
158
|
+
await ctx.signalCollector.recordUsage(`testing-skill-${i}`, 'daily');
|
|
159
|
+
}
|
|
160
|
+
const stats = await ctx.privacyManager.anonymizeForAnalytics();
|
|
161
|
+
// Check aggregate stats
|
|
162
|
+
expect(stats.date).toMatch(/^\d{4}-\d{2}-\d{2}$/); // YYYY-MM-DD format
|
|
163
|
+
expect(stats.total_signals).toBe(18);
|
|
164
|
+
// Signal type counts
|
|
165
|
+
expect(stats.signal_counts[SignalType.ACCEPT]).toBe(10);
|
|
166
|
+
expect(stats.signal_counts[SignalType.DISMISS]).toBe(5);
|
|
167
|
+
expect(stats.signal_counts[SignalType.USAGE_DAILY]).toBe(3);
|
|
168
|
+
// Accept rate: 10 / (10 + 5) = 0.667
|
|
169
|
+
expect(stats.avg_accept_rate).toBeCloseTo(0.667, 2);
|
|
170
|
+
// Popular categories (only counted from signals with category in context)
|
|
171
|
+
expect(stats.popular_categories.length).toBeGreaterThan(0);
|
|
172
|
+
// TESTING category has 10 accepts with category context
|
|
173
|
+
// Usage signals don't have category in their context by default
|
|
174
|
+
expect(stats.popular_categories[0].category).toBe(SkillCategory.TESTING);
|
|
175
|
+
expect(stats.popular_categories[0].count).toBe(10);
|
|
176
|
+
});
|
|
177
|
+
it('should not include PII in anonymized stats', async () => {
|
|
178
|
+
await ctx.signalCollector.recordAccept('skill-1', generateContext());
|
|
179
|
+
await ctx.signalCollector.recordAccept('skill-2', generateContext());
|
|
180
|
+
const stats = await ctx.privacyManager.anonymizeForAnalytics();
|
|
181
|
+
// Stats should not contain skill IDs or other identifying info
|
|
182
|
+
const statsJson = JSON.stringify(stats);
|
|
183
|
+
expect(statsJson).not.toContain('skill-1');
|
|
184
|
+
expect(statsJson).not.toContain('skill-2');
|
|
185
|
+
// Verify no specific timestamps that could identify sessions
|
|
186
|
+
// Stats should only contain aggregated date (YYYY-MM-DD), not precise timestamps
|
|
187
|
+
expect(stats.date).toMatch(/^\d{4}-\d{2}-\d{2}$/);
|
|
188
|
+
expect(statsJson).not.toMatch(/\d{13}/); // No 13-digit Unix timestamps
|
|
189
|
+
// Verify no user identifiers are present
|
|
190
|
+
expect(statsJson).not.toContain('user_id');
|
|
191
|
+
expect(statsJson).not.toContain('session_id');
|
|
192
|
+
expect(statsJson).not.toContain('profile_id');
|
|
193
|
+
// Verify signal counts are aggregated (not individual signal data)
|
|
194
|
+
expect(stats.signal_counts).toBeDefined();
|
|
195
|
+
expect(typeof stats.total_signals).toBe('number');
|
|
196
|
+
// Aggregated counts should be numbers, not arrays of individual signals
|
|
197
|
+
for (const [_type, count] of Object.entries(stats.signal_counts)) {
|
|
198
|
+
expect(typeof count).toBe('number');
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
describe('Privacy Verification', () => {
|
|
203
|
+
it('should verify no data leaks', async () => {
|
|
204
|
+
await ctx.signalCollector.recordAccept('sensitive-skill', generateContext());
|
|
205
|
+
const isPrivate = await ctx.privacyManager.verifyPrivacy();
|
|
206
|
+
expect(isPrivate).toBe(true);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
describe('Audit Logging', () => {
|
|
210
|
+
it('should record audit log for purge operations', async () => {
|
|
211
|
+
ctx.signalCollector.addSignal(generateSignal({
|
|
212
|
+
timestamp: daysAgo(100),
|
|
213
|
+
}));
|
|
214
|
+
await ctx.privacyManager.purgeOldSignals(90);
|
|
215
|
+
const auditLog = ctx.privacyManager.getAuditLog();
|
|
216
|
+
expect(auditLog).toHaveLength(1);
|
|
217
|
+
expect(auditLog[0].operation).toBe('purgeOldSignals');
|
|
218
|
+
expect(auditLog[0].timestamp).toBeDefined();
|
|
219
|
+
expect(auditLog[0].details).toContain('Deleted 1 signals');
|
|
220
|
+
});
|
|
221
|
+
it('should record audit log for export operations', async () => {
|
|
222
|
+
await ctx.signalCollector.recordAccept('skill-1', generateContext());
|
|
223
|
+
await ctx.privacyManager.exportUserData();
|
|
224
|
+
const auditLog = ctx.privacyManager.getAuditLog();
|
|
225
|
+
expect(auditLog.some((e) => e.operation === 'exportUserData')).toBe(true);
|
|
226
|
+
});
|
|
227
|
+
it('should record audit log for wipe operations', async () => {
|
|
228
|
+
await ctx.signalCollector.recordAccept('skill-1', generateContext());
|
|
229
|
+
await ctx.privacyManager.wipeAllData();
|
|
230
|
+
const auditLog = ctx.privacyManager.getAuditLog();
|
|
231
|
+
expect(auditLog.some((e) => e.operation === 'wipeAllData')).toBe(true);
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
describe('Storage Size', () => {
|
|
235
|
+
it('should report storage size', async () => {
|
|
236
|
+
// Empty storage - size depends on implementation (could be 0, 2 for '[]', or other base value)
|
|
237
|
+
const emptySize = await ctx.privacyManager.getStorageSize();
|
|
238
|
+
expect(emptySize).toBeGreaterThanOrEqual(0);
|
|
239
|
+
expect(emptySize).toBeLessThan(100); // Reasonable upper bound for empty storage
|
|
240
|
+
// Add signals
|
|
241
|
+
for (let i = 0; i < 10; i++) {
|
|
242
|
+
await ctx.signalCollector.recordAccept(`skill-${i}`, generateContext());
|
|
243
|
+
}
|
|
244
|
+
const populatedSize = await ctx.privacyManager.getStorageSize();
|
|
245
|
+
expect(populatedSize).toBeGreaterThan(emptySize);
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
//# sourceMappingURL=privacy.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privacy.test.js","sourceRoot":"","sources":["../../../../tests/integration/neural/privacy.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1535: Neural Test Infrastructure - Setup
|
|
3
|
+
*
|
|
4
|
+
* Provides test context factory and mock implementations for
|
|
5
|
+
* the Recommendation Learning Loop integration tests.
|
|
6
|
+
*
|
|
7
|
+
* @see packages/core/src/learning/interfaces.ts
|
|
8
|
+
* @see packages/core/src/learning/types.ts
|
|
9
|
+
*/
|
|
10
|
+
import type { ISignalCollector, IPreferenceLearner, IPersonalizationEngine, IPrivacyManager, IUserPreferenceRepository } from '../../../src/learning/interfaces.js';
|
|
11
|
+
import { type SignalEvent, type SignalFilter, type RecommendationContext, type SignalMetadata, type DismissReason, type UserPreferenceProfile, type LearningConfig, type PersonalizedRecommendation, type UserDataExport, type AggregateStats } from '../../../src/learning/types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Neural test context containing all mock service instances
|
|
14
|
+
*/
|
|
15
|
+
export interface NeuralTestContext {
|
|
16
|
+
signalCollector: MockSignalCollector;
|
|
17
|
+
preferenceLearner: MockPreferenceLearner;
|
|
18
|
+
personalizationEngine: MockPersonalizationEngine;
|
|
19
|
+
privacyManager: MockPrivacyManager;
|
|
20
|
+
profileRepository: MockUserPreferenceRepository;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create a fresh neural test context with all mock services
|
|
24
|
+
*/
|
|
25
|
+
export declare function createNeuralTestContext(): NeuralTestContext;
|
|
26
|
+
/**
|
|
27
|
+
* Clean up a neural test context (release resources)
|
|
28
|
+
*/
|
|
29
|
+
export declare function cleanupNeuralTestContext(ctx: NeuralTestContext): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Create a default empty user preference profile
|
|
32
|
+
*
|
|
33
|
+
* Note: COLD_START_WEIGHTS only defines weights for a subset of SkillCategory values
|
|
34
|
+
* (TESTING, GIT, DEVOPS, DOCUMENTATION, FRONTEND, BACKEND). Categories not in
|
|
35
|
+
* COLD_START_WEIGHTS (DATABASE, SECURITY, PRODUCTIVITY, ANALYSIS) will have
|
|
36
|
+
* undefined weights, which is handled gracefully by the learning algorithm
|
|
37
|
+
* by defaulting to 0 when accessing missing keys.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createDefaultProfile(): UserPreferenceProfile;
|
|
40
|
+
/**
|
|
41
|
+
* Mock implementation of ISignalCollector for testing
|
|
42
|
+
*/
|
|
43
|
+
export declare class MockSignalCollector implements ISignalCollector {
|
|
44
|
+
private signals;
|
|
45
|
+
recordAccept(skillId: string, context: RecommendationContext, metadata?: SignalMetadata): Promise<void>;
|
|
46
|
+
recordDismiss(skillId: string, context: RecommendationContext, reason?: DismissReason): Promise<void>;
|
|
47
|
+
recordUsage(skillId: string, frequency: 'daily' | 'weekly'): Promise<void>;
|
|
48
|
+
recordAbandonment(skillId: string, daysSinceInstall: number): Promise<void>;
|
|
49
|
+
recordUninstall(skillId: string, daysSinceInstall: number): Promise<void>;
|
|
50
|
+
getSignals(filter: SignalFilter, limit?: number): Promise<SignalEvent[]>;
|
|
51
|
+
getSignalCount(): Promise<number>;
|
|
52
|
+
getSignalsForSkill(skillId: string): Promise<SignalEvent[]>;
|
|
53
|
+
clear(): void;
|
|
54
|
+
getAllSignals(): SignalEvent[];
|
|
55
|
+
addSignal(signal: SignalEvent): void;
|
|
56
|
+
removeOldSignals(cutoffTimestamp: number): number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Mock implementation of IPreferenceLearner for testing
|
|
60
|
+
*/
|
|
61
|
+
export declare class MockPreferenceLearner implements IPreferenceLearner {
|
|
62
|
+
private config;
|
|
63
|
+
updateProfile(profile: UserPreferenceProfile, signal: SignalEvent): Promise<UserPreferenceProfile>;
|
|
64
|
+
batchUpdateProfile(profile: UserPreferenceProfile, signals: SignalEvent[]): Promise<UserPreferenceProfile>;
|
|
65
|
+
decayWeights(profile: UserPreferenceProfile, decayFactor?: number): Promise<UserPreferenceProfile>;
|
|
66
|
+
calculatePersonalizedScore(skillData: {
|
|
67
|
+
id: string;
|
|
68
|
+
category?: string;
|
|
69
|
+
trustTier?: string;
|
|
70
|
+
keywords?: string[];
|
|
71
|
+
triggerPhrases?: string[];
|
|
72
|
+
}, baseScore: number, profile: UserPreferenceProfile): PersonalizedRecommendation;
|
|
73
|
+
getConfig(): LearningConfig;
|
|
74
|
+
setConfig(config: Partial<LearningConfig>): void;
|
|
75
|
+
private clampWeight;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Mock implementation of IPersonalizationEngine for testing
|
|
79
|
+
*/
|
|
80
|
+
export declare class MockPersonalizationEngine implements IPersonalizationEngine {
|
|
81
|
+
private learner;
|
|
82
|
+
private profileRepo;
|
|
83
|
+
private signalCollector;
|
|
84
|
+
constructor(learner: MockPreferenceLearner, profileRepo: MockUserPreferenceRepository, signalCollector: MockSignalCollector);
|
|
85
|
+
personalizeRecommendations(baseRecommendations: Array<{
|
|
86
|
+
skill_id: string;
|
|
87
|
+
base_score: number;
|
|
88
|
+
skill_data: {
|
|
89
|
+
category?: string;
|
|
90
|
+
trustTier?: string;
|
|
91
|
+
keywords?: string[];
|
|
92
|
+
};
|
|
93
|
+
}>, userId?: string): Promise<PersonalizedRecommendation[]>;
|
|
94
|
+
/**
|
|
95
|
+
* Determine if personalization should be applied.
|
|
96
|
+
*
|
|
97
|
+
* IMPORTANT: Mock Implementation Limitation
|
|
98
|
+
* -----------------------------------------
|
|
99
|
+
* This mock checks the GLOBAL signal count across all users, not the
|
|
100
|
+
* per-user signal count. This is a simplification for testing purposes.
|
|
101
|
+
*
|
|
102
|
+
* In a real implementation, shouldPersonalize should:
|
|
103
|
+
* 1. Look up the user's profile by userId
|
|
104
|
+
* 2. Check that user's individual signal_count against the threshold
|
|
105
|
+
* 3. Return true only if that specific user has enough signals
|
|
106
|
+
*
|
|
107
|
+
* The mock behavior works for single-user test scenarios but does not
|
|
108
|
+
* accurately model multi-user environments where each user has their
|
|
109
|
+
* own signal history and personalization threshold.
|
|
110
|
+
*
|
|
111
|
+
* @param _userId - User ID (ignored in mock - uses global count)
|
|
112
|
+
* @returns Promise<boolean> - True if global signal count meets threshold
|
|
113
|
+
*/
|
|
114
|
+
shouldPersonalize(_userId?: string): Promise<boolean>;
|
|
115
|
+
getUserProfile(userId?: string): Promise<UserPreferenceProfile>;
|
|
116
|
+
resetToDefault(userId?: string): Promise<void>;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Mock implementation of IPrivacyManager for testing
|
|
120
|
+
*/
|
|
121
|
+
export declare class MockPrivacyManager implements IPrivacyManager {
|
|
122
|
+
private signalCollector;
|
|
123
|
+
private profileRepo;
|
|
124
|
+
private auditLog;
|
|
125
|
+
constructor(signalCollector: MockSignalCollector, profileRepo: MockUserPreferenceRepository);
|
|
126
|
+
purgeOldSignals(retentionDays: number): Promise<number>;
|
|
127
|
+
exportUserData(): Promise<UserDataExport>;
|
|
128
|
+
wipeAllData(): Promise<number>;
|
|
129
|
+
anonymizeForAnalytics(): Promise<AggregateStats>;
|
|
130
|
+
getStorageSize(): Promise<number>;
|
|
131
|
+
/**
|
|
132
|
+
* Verify that no PII (Personally Identifiable Information) is stored.
|
|
133
|
+
*
|
|
134
|
+
* Mock Implementation Details
|
|
135
|
+
* ---------------------------
|
|
136
|
+
* This mock always returns true because the test environment uses
|
|
137
|
+
* controlled, synthetic data that never contains real PII.
|
|
138
|
+
*
|
|
139
|
+
* A real implementation should:
|
|
140
|
+
* 1. Scan signal events for PII patterns (emails, names, IPs, etc.)
|
|
141
|
+
* 2. Check that skill_id values don't contain user identifiers
|
|
142
|
+
* 3. Verify context fields don't leak sensitive project paths
|
|
143
|
+
* 4. Ensure keyword_weights don't contain personal identifiers
|
|
144
|
+
* 5. Validate that exported data is properly anonymized
|
|
145
|
+
*
|
|
146
|
+
* The mock skips these checks since test data is constructed with
|
|
147
|
+
* known-safe values (UUIDs, generic skill names, etc.).
|
|
148
|
+
*
|
|
149
|
+
* @returns Promise<boolean> - Always true in mock (no real PII checks)
|
|
150
|
+
*/
|
|
151
|
+
verifyPrivacy(): Promise<boolean>;
|
|
152
|
+
getAuditLog(): Array<{
|
|
153
|
+
operation: string;
|
|
154
|
+
timestamp: number;
|
|
155
|
+
details?: string;
|
|
156
|
+
}>;
|
|
157
|
+
/**
|
|
158
|
+
* Clear the audit log.
|
|
159
|
+
* Used in test cleanup to reset state between tests.
|
|
160
|
+
*/
|
|
161
|
+
clearAuditLog(): void;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Mock implementation of IUserPreferenceRepository for testing
|
|
165
|
+
*/
|
|
166
|
+
export declare class MockUserPreferenceRepository implements IUserPreferenceRepository {
|
|
167
|
+
private profiles;
|
|
168
|
+
private readonly defaultUserId;
|
|
169
|
+
getProfile(userId?: string): Promise<UserPreferenceProfile | null>;
|
|
170
|
+
saveProfile(profile: UserPreferenceProfile, userId?: string): Promise<void>;
|
|
171
|
+
deleteProfile(userId?: string): Promise<void>;
|
|
172
|
+
exists(userId?: string): Promise<boolean>;
|
|
173
|
+
clear(): void;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../tests/integration/neural/setup.ts"],"names":[],"mappings":"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"}
|