@skillsmith/core 0.4.9 → 0.4.11
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/README.md +1 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/analysis/__tests__/incremental.test.d.ts +1 -1
- package/dist/src/analysis/__tests__/incremental.test.js +1 -1
- package/dist/src/analysis/__tests__/integration.test.d.ts +1 -1
- package/dist/src/analysis/__tests__/integration.test.js +1 -1
- package/dist/src/analysis/__tests__/performance.test.d.ts +1 -1
- package/dist/src/analysis/__tests__/performance.test.js +1 -1
- package/dist/src/analysis/adapters/__tests__/python.test.d.ts +1 -1
- package/dist/src/analysis/adapters/__tests__/python.test.js +1 -1
- package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts +1 -1
- package/dist/src/analysis/adapters/__tests__/typescript.test.js +1 -1
- package/dist/src/analysis/adapters/base.d.ts +1 -1
- package/dist/src/analysis/adapters/base.js +1 -1
- package/dist/src/analysis/adapters/factory.d.ts +1 -1
- package/dist/src/analysis/adapters/factory.js +1 -1
- package/dist/src/analysis/adapters/go.d.ts +1 -1
- package/dist/src/analysis/adapters/go.js +1 -1
- package/dist/src/analysis/adapters/index.d.ts +1 -1
- package/dist/src/analysis/adapters/index.js +1 -1
- package/dist/src/analysis/adapters/java-parsers.d.ts +1 -1
- package/dist/src/analysis/adapters/java-parsers.d.ts.map +1 -1
- package/dist/src/analysis/adapters/java-parsers.js +10 -3
- package/dist/src/analysis/adapters/java-parsers.js.map +1 -1
- package/dist/src/analysis/adapters/java.d.ts +1 -1
- package/dist/src/analysis/adapters/java.js +1 -1
- package/dist/src/analysis/adapters/python-frameworks.d.ts +1 -1
- package/dist/src/analysis/adapters/python-frameworks.js +1 -1
- package/dist/src/analysis/adapters/python.d.ts +1 -1
- package/dist/src/analysis/adapters/python.js +1 -1
- package/dist/src/analysis/adapters/rust-parsers.d.ts +1 -1
- package/dist/src/analysis/adapters/rust-parsers.js +1 -1
- package/dist/src/analysis/adapters/rust.d.ts +1 -1
- package/dist/src/analysis/adapters/rust.js +1 -1
- package/dist/src/analysis/adapters/typescript.d.ts +1 -1
- package/dist/src/analysis/adapters/typescript.js +1 -1
- package/dist/src/analysis/aggregator.d.ts +1 -1
- package/dist/src/analysis/aggregator.js +1 -1
- package/dist/src/analysis/cache.d.ts +1 -1
- package/dist/src/analysis/cache.js +1 -1
- package/dist/src/analysis/file-streamer.d.ts +1 -1
- package/dist/src/analysis/file-streamer.js +1 -1
- package/dist/src/analysis/incremental-parser.d.ts +1 -1
- package/dist/src/analysis/incremental-parser.js +1 -1
- package/dist/src/analysis/incremental.d.ts +1 -1
- package/dist/src/analysis/incremental.js +1 -1
- package/dist/src/analysis/index.d.ts +1 -1
- package/dist/src/analysis/index.js +1 -1
- package/dist/src/analysis/language-detector.d.ts +1 -1
- package/dist/src/analysis/language-detector.js +1 -1
- package/dist/src/analysis/memory-monitor.d.ts +1 -1
- package/dist/src/analysis/memory-monitor.js +1 -1
- package/dist/src/analysis/metrics.d.ts +1 -1
- package/dist/src/analysis/metrics.js +1 -1
- package/dist/src/analysis/router.d.ts +1 -1
- package/dist/src/analysis/router.js +1 -1
- package/dist/src/analysis/tree-cache.d.ts +1 -1
- package/dist/src/analysis/tree-cache.js +1 -1
- package/dist/src/analysis/tree-sitter/manager.d.ts +1 -1
- package/dist/src/analysis/tree-sitter/manager.js +1 -1
- package/dist/src/analysis/types.d.ts +1 -1
- package/dist/src/analysis/types.js +1 -1
- package/dist/src/analysis/worker-pool.d.ts +1 -1
- package/dist/src/analysis/worker-pool.js +1 -1
- package/dist/src/analysis/worker-types.d.ts +1 -1
- package/dist/src/analysis/worker-types.js +1 -1
- package/dist/src/analysis/worker-utils.d.ts +1 -1
- package/dist/src/analysis/worker-utils.js +1 -1
- package/dist/src/api/client.d.ts +1 -0
- package/dist/src/api/client.d.ts.map +1 -1
- package/dist/src/api/client.js.map +1 -1
- package/dist/src/api/schemas.d.ts +11 -4
- package/dist/src/api/schemas.d.ts.map +1 -1
- package/dist/src/api/schemas.js +8 -1
- package/dist/src/api/schemas.js.map +1 -1
- package/dist/src/config/index.d.ts +49 -1
- package/dist/src/config/index.d.ts.map +1 -1
- package/dist/src/config/index.js +166 -3
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/config/index.test.d.ts +11 -0
- package/dist/src/config/index.test.d.ts.map +1 -0
- package/dist/src/config/index.test.js +288 -0
- package/dist/src/config/index.test.js.map +1 -0
- package/dist/src/db/drivers/betterSqlite3Driver.d.ts.map +1 -1
- package/dist/src/db/drivers/betterSqlite3Driver.js +5 -3
- package/dist/src/db/drivers/betterSqlite3Driver.js.map +1 -1
- package/dist/src/db/quarantine-approvals-schema.d.ts +37 -0
- package/dist/src/db/quarantine-approvals-schema.d.ts.map +1 -0
- package/dist/src/db/quarantine-approvals-schema.js +71 -0
- package/dist/src/db/quarantine-approvals-schema.js.map +1 -0
- package/dist/src/exports/services.d.ts +1 -0
- package/dist/src/exports/services.d.ts.map +1 -1
- package/dist/src/exports/services.js +4 -0
- package/dist/src/exports/services.js.map +1 -1
- package/dist/src/index.d.ts +4 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/indexer/SkillParser.d.ts +20 -0
- package/dist/src/indexer/SkillParser.d.ts.map +1 -1
- package/dist/src/indexer/SkillParser.js +58 -0
- package/dist/src/indexer/SkillParser.js.map +1 -1
- package/dist/src/repositories/quarantine/ApprovalRepository.d.ts +148 -0
- package/dist/src/repositories/quarantine/ApprovalRepository.d.ts.map +1 -0
- package/dist/src/repositories/quarantine/ApprovalRepository.js +212 -0
- package/dist/src/repositories/quarantine/ApprovalRepository.js.map +1 -0
- package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -1
- package/dist/src/repositories/quarantine/QuarantineRepository.js +4 -1
- package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -1
- package/dist/src/repositories/quarantine/index.d.ts +2 -0
- package/dist/src/repositories/quarantine/index.d.ts.map +1 -1
- package/dist/src/repositories/quarantine/index.js +1 -0
- package/dist/src/repositories/quarantine/index.js.map +1 -1
- package/dist/src/scripts/validation/types.d.ts +2 -2
- package/dist/src/security/audit-types.d.ts +2 -2
- package/dist/src/security/audit-types.d.ts.map +1 -1
- package/dist/src/security/audit-types.js.map +1 -1
- package/dist/src/security/sanitization.d.ts.map +1 -1
- package/dist/src/security/sanitization.js +25 -17
- package/dist/src/security/sanitization.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.formatters.js +1 -1
- package/dist/src/security/scanner/SecurityScanner.formatters.js.map +1 -1
- package/dist/src/services/index.d.ts +9 -0
- package/dist/src/services/index.d.ts.map +1 -0
- package/dist/src/services/index.js +10 -0
- package/dist/src/services/index.js.map +1 -0
- package/dist/src/services/quarantine/QuarantineService.d.ts +157 -0
- package/dist/src/services/quarantine/QuarantineService.d.ts.map +1 -0
- package/dist/src/services/quarantine/QuarantineService.js +464 -0
- package/dist/src/services/quarantine/QuarantineService.js.map +1 -0
- package/dist/src/services/quarantine/index.d.ts +10 -0
- package/dist/src/services/quarantine/index.d.ts.map +1 -0
- package/dist/src/services/quarantine/index.js +14 -0
- package/dist/src/services/quarantine/index.js.map +1 -0
- package/dist/src/services/quarantine/types.d.ts +127 -0
- package/dist/src/services/quarantine/types.d.ts.map +1 -0
- package/dist/src/services/quarantine/types.js +59 -0
- package/dist/src/services/quarantine/types.js.map +1 -0
- package/dist/src/types/skill.d.ts +6 -1
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/types/skill.js.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +2 -0
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/safe-fs.d.ts +63 -0
- package/dist/src/utils/safe-fs.d.ts.map +1 -0
- package/dist/src/utils/safe-fs.js +119 -0
- package/dist/src/utils/safe-fs.js.map +1 -0
- package/dist/src/validation/input-validators.d.ts.map +1 -1
- package/dist/src/validation/input-validators.js +11 -4
- package/dist/src/validation/input-validators.js.map +1 -1
- package/dist/tests/QuarantineRepository.test.js +39 -2
- package/dist/tests/QuarantineRepository.test.js.map +1 -1
- package/dist/tests/RawUrlSourceAdapter.security.test.js +2 -1
- package/dist/tests/RawUrlSourceAdapter.security.test.js.map +1 -1
- package/dist/tests/SecurityScanner.test.js +2 -2
- package/dist/tests/SecurityScanner.test.js.map +1 -1
- package/dist/tests/adapters-factory.test.d.ts +1 -1
- package/dist/tests/adapters-factory.test.js +1 -1
- package/dist/tests/edge-cases/EdgeCases.test.js +5 -2
- package/dist/tests/edge-cases/EdgeCases.test.js.map +1 -1
- package/dist/tests/integration/QuarantineService.test.d.ts +11 -0
- package/dist/tests/integration/QuarantineService.test.d.ts.map +1 -0
- package/dist/tests/integration/QuarantineService.test.js +426 -0
- package/dist/tests/integration/QuarantineService.test.js.map +1 -0
- package/dist/tests/integration/neural/e2e-learning.test.d.ts +1 -1
- package/dist/tests/integration/neural/e2e-learning.test.js +1 -1
- package/dist/tests/integration/neural/personalization.test.d.ts +1 -1
- package/dist/tests/integration/neural/personalization.test.js +1 -1
- package/dist/tests/integration/neural/preference-learner.test.d.ts +1 -1
- package/dist/tests/integration/neural/preference-learner.test.js +1 -1
- package/dist/tests/integration/neural/privacy.test.d.ts +1 -1
- package/dist/tests/integration/neural/privacy.test.js +1 -1
- package/dist/tests/integration/neural/signal-collection.test.d.ts +1 -1
- package/dist/tests/integration/neural/signal-collection.test.js +1 -1
- package/dist/tests/language-detector.test.d.ts +1 -1
- package/dist/tests/language-detector.test.js +1 -1
- package/dist/tests/unit/approval-repository.test.d.ts +9 -0
- package/dist/tests/unit/approval-repository.test.d.ts.map +1 -0
- package/dist/tests/unit/approval-repository.test.js +509 -0
- package/dist/tests/unit/approval-repository.test.js.map +1 -0
- package/dist/tests/unit/check-references.test.d.ts +2 -0
- package/dist/tests/unit/check-references.test.d.ts.map +1 -0
- package/dist/tests/unit/check-references.test.js +118 -0
- package/dist/tests/unit/check-references.test.js.map +1 -0
- package/dist/tests/utils/safe-fs.test.d.ts +12 -0
- package/dist/tests/utils/safe-fs.test.d.ts.map +1 -0
- package/dist/tests/utils/safe-fs.test.js +116 -0
- package/dist/tests/utils/safe-fs.test.js.map +1 -0
- package/package.json +14 -10
- package/dist/tests/db/driver-parity.integration.test.d.ts +0 -16
- package/dist/tests/db/driver-parity.integration.test.d.ts.map +0 -1
- package/dist/tests/db/driver-parity.integration.test.js +0 -555
- package/dist/tests/db/driver-parity.integration.test.js.map +0 -1
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-2714: Config module credential storage tests
|
|
3
|
+
*
|
|
4
|
+
* Tests for storeApiKey, clearApiKey, getAuthStatus, and the updated
|
|
5
|
+
* isValidApiKeyFormat with ReDoS guard.
|
|
6
|
+
*
|
|
7
|
+
* vi.mock factory is hoisted before module load — never use vi.doMock for the
|
|
8
|
+
* primary keytar mock (it would arrive too late).
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
11
|
+
import { existsSync, readFileSync } from 'fs';
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
import * as os from 'os';
|
|
14
|
+
// MUST be declared before any imports of the module under test so Vitest hoists
|
|
15
|
+
// this factory and the mock is in place when config/index.ts is first loaded.
|
|
16
|
+
vi.mock('@isaacs/keytar', () => ({
|
|
17
|
+
default: {
|
|
18
|
+
setPassword: vi.fn(),
|
|
19
|
+
getPassword: vi.fn(),
|
|
20
|
+
deletePassword: vi.fn(),
|
|
21
|
+
},
|
|
22
|
+
}));
|
|
23
|
+
// Retrieve the mocked keytar module using Vitest's module registry.
|
|
24
|
+
// We can't use a static import (no types in core) nor a standard dynamic import
|
|
25
|
+
// (same reason), so we resolve the mock via vi.importMock after the mock factory
|
|
26
|
+
// above has run.
|
|
27
|
+
const keytarMod = await vi.importMock('@isaacs/keytar');
|
|
28
|
+
const mockKeytar = keytarMod.default;
|
|
29
|
+
// Import module under test AFTER mocks are declared
|
|
30
|
+
import { storeApiKey, clearApiKey, getAuthStatus, isValidApiKeyFormat, saveConfig, loadConfig, } from './index.js';
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Helpers
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
const VALID_KEY = 'sk_live_' + 'a'.repeat(32);
|
|
35
|
+
const VALID_KEY_LONG = 'sk_live_' + 'b'.repeat(128);
|
|
36
|
+
/** Unique temp config dir per test run to avoid cross-test pollution */
|
|
37
|
+
function makeTempConfigDir() {
|
|
38
|
+
return path.join(os.tmpdir(), `skillsmith-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
39
|
+
}
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// isValidApiKeyFormat
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
describe('isValidApiKeyFormat', () => {
|
|
44
|
+
it('accepts a key with exactly 32 suffix chars', () => {
|
|
45
|
+
expect(isValidApiKeyFormat(VALID_KEY)).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
it('accepts a key with exactly 128 suffix chars', () => {
|
|
48
|
+
expect(isValidApiKeyFormat(VALID_KEY_LONG)).toBe(true);
|
|
49
|
+
});
|
|
50
|
+
it('rejects a key with 129 suffix chars (over cap)', () => {
|
|
51
|
+
const tooLong = 'sk_live_' + 'c'.repeat(129);
|
|
52
|
+
expect(isValidApiKeyFormat(tooLong)).toBe(false);
|
|
53
|
+
});
|
|
54
|
+
it('rejects a key shorter than 32 suffix chars', () => {
|
|
55
|
+
const tooShort = 'sk_live_' + 'a'.repeat(31);
|
|
56
|
+
expect(isValidApiKeyFormat(tooShort)).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
it('rejects a key with wrong prefix', () => {
|
|
59
|
+
expect(isValidApiKeyFormat('sk_test_' + 'a'.repeat(32))).toBe(false);
|
|
60
|
+
});
|
|
61
|
+
it('rejects an empty string', () => {
|
|
62
|
+
expect(isValidApiKeyFormat('')).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
it('rejects a string over 200 chars (ReDoS pre-check)', () => {
|
|
65
|
+
const huge = 'sk_live_' + 'a'.repeat(193); // total 201 chars
|
|
66
|
+
expect(isValidApiKeyFormat(huge)).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
it('rejects exactly 200 chars if suffix > 128', () => {
|
|
69
|
+
// 200 total — 8 prefix = 192 suffix chars, which exceeds the 128 cap
|
|
70
|
+
const edge = 'sk_live_' + 'a'.repeat(192);
|
|
71
|
+
expect(isValidApiKeyFormat(edge)).toBe(false);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// storeApiKey
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
describe('storeApiKey', () => {
|
|
78
|
+
beforeEach(() => {
|
|
79
|
+
vi.clearAllMocks();
|
|
80
|
+
});
|
|
81
|
+
it('stores in keyring when keytar is available', async () => {
|
|
82
|
+
mockKeytar.setPassword.mockResolvedValue(undefined);
|
|
83
|
+
await storeApiKey(VALID_KEY);
|
|
84
|
+
expect(mockKeytar.setPassword).toHaveBeenCalledWith('skillsmith-cli', 'api-key', VALID_KEY);
|
|
85
|
+
});
|
|
86
|
+
it('falls back to config file when keytar.setPassword throws', async () => {
|
|
87
|
+
mockKeytar.setPassword.mockRejectedValue(new Error('keyring locked'));
|
|
88
|
+
const originalHome = process.env.HOME;
|
|
89
|
+
const tmpDir = makeTempConfigDir();
|
|
90
|
+
process.env.HOME = tmpDir;
|
|
91
|
+
try {
|
|
92
|
+
await storeApiKey(VALID_KEY);
|
|
93
|
+
// If config dir was created, the key should be in the file
|
|
94
|
+
const configPath = path.join(tmpDir, '.skillsmith', 'config.json');
|
|
95
|
+
if (existsSync(configPath)) {
|
|
96
|
+
const saved = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
97
|
+
expect(saved.apiKey).toBe(VALID_KEY);
|
|
98
|
+
}
|
|
99
|
+
// Test passed if no exception was thrown
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
process.env.HOME = originalHome;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
// clearApiKey
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
describe('clearApiKey', () => {
|
|
110
|
+
beforeEach(() => {
|
|
111
|
+
vi.clearAllMocks();
|
|
112
|
+
});
|
|
113
|
+
it('clears from keyring and reports success', async () => {
|
|
114
|
+
mockKeytar.deletePassword.mockResolvedValue(true);
|
|
115
|
+
const result = await clearApiKey();
|
|
116
|
+
expect(mockKeytar.deletePassword).toHaveBeenCalledWith('skillsmith-cli', 'api-key');
|
|
117
|
+
expect(result.success).toBe(true);
|
|
118
|
+
expect(result.source).toContain('keyring');
|
|
119
|
+
});
|
|
120
|
+
it('always clears apiKey from config file (undefined, not empty string)', async () => {
|
|
121
|
+
mockKeytar.deletePassword.mockResolvedValue(false);
|
|
122
|
+
// Pre-populate a config with an API key
|
|
123
|
+
const originalHome = process.env.HOME;
|
|
124
|
+
const tmpDir = makeTempConfigDir();
|
|
125
|
+
process.env.HOME = tmpDir;
|
|
126
|
+
try {
|
|
127
|
+
saveConfig({ apiKey: VALID_KEY });
|
|
128
|
+
await clearApiKey();
|
|
129
|
+
const config = loadConfig();
|
|
130
|
+
// apiKey must be absent or undefined — NEVER an empty string
|
|
131
|
+
expect(config.apiKey).toBeUndefined();
|
|
132
|
+
// Verify the raw JSON does not contain an empty-string apiKey
|
|
133
|
+
const configPath = path.join(tmpDir, '.skillsmith', 'config.json');
|
|
134
|
+
if (existsSync(configPath)) {
|
|
135
|
+
const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
136
|
+
expect(raw.apiKey).toBeUndefined();
|
|
137
|
+
expect('apiKey' in raw ? raw.apiKey : 'NOT_PRESENT').not.toBe('');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
process.env.HOME = originalHome;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
it('reports partial failure when keyring throws but config still cleared', async () => {
|
|
145
|
+
mockKeytar.deletePassword.mockRejectedValue(new Error('access denied'));
|
|
146
|
+
const originalHome = process.env.HOME;
|
|
147
|
+
const tmpDir = makeTempConfigDir();
|
|
148
|
+
process.env.HOME = tmpDir;
|
|
149
|
+
try {
|
|
150
|
+
saveConfig({ apiKey: VALID_KEY });
|
|
151
|
+
const result = await clearApiKey();
|
|
152
|
+
// Config file should still be cleared
|
|
153
|
+
const config = loadConfig();
|
|
154
|
+
expect(config.apiKey).toBeUndefined();
|
|
155
|
+
// Result should reflect the keyring error
|
|
156
|
+
expect(result.success).toBe(false);
|
|
157
|
+
expect(result.error).toBeDefined();
|
|
158
|
+
expect(result.error).toContain('access denied');
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
process.env.HOME = originalHome;
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
it('succeeds when no key is stored in keyring', async () => {
|
|
165
|
+
mockKeytar.deletePassword.mockResolvedValue(false);
|
|
166
|
+
const result = await clearApiKey();
|
|
167
|
+
expect(result.success).toBe(true);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
// getAuthStatus
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
173
|
+
describe('getAuthStatus', () => {
|
|
174
|
+
let originalHome;
|
|
175
|
+
let originalApiKey;
|
|
176
|
+
beforeEach(() => {
|
|
177
|
+
vi.clearAllMocks();
|
|
178
|
+
originalHome = process.env['HOME'];
|
|
179
|
+
originalApiKey = process.env['SKILLSMITH_API_KEY'];
|
|
180
|
+
// Start each test with no API key set
|
|
181
|
+
delete process.env['SKILLSMITH_API_KEY'];
|
|
182
|
+
});
|
|
183
|
+
afterEach(() => {
|
|
184
|
+
// Restore HOME
|
|
185
|
+
if (originalHome !== undefined) {
|
|
186
|
+
process.env['HOME'] = originalHome;
|
|
187
|
+
}
|
|
188
|
+
// Restore API key (delete if it wasn't set before)
|
|
189
|
+
if (originalApiKey !== undefined) {
|
|
190
|
+
process.env['SKILLSMITH_API_KEY'] = originalApiKey;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
delete process.env['SKILLSMITH_API_KEY'];
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
describe('env source', () => {
|
|
197
|
+
it('returns env source when SKILLSMITH_API_KEY is set and valid', async () => {
|
|
198
|
+
process.env['SKILLSMITH_API_KEY'] = VALID_KEY;
|
|
199
|
+
const status = await getAuthStatus();
|
|
200
|
+
expect(status.authenticated).toBe(true);
|
|
201
|
+
expect(status.source).toBe('env');
|
|
202
|
+
expect(status.keyPrefix).toBe(VALID_KEY.substring(0, 12));
|
|
203
|
+
});
|
|
204
|
+
it('does not return env source for an invalid env key format', async () => {
|
|
205
|
+
process.env['SKILLSMITH_API_KEY'] = 'not-a-valid-key';
|
|
206
|
+
mockKeytar.getPassword.mockResolvedValue(null);
|
|
207
|
+
const tmpDir = makeTempConfigDir();
|
|
208
|
+
process.env.HOME = tmpDir;
|
|
209
|
+
const status = await getAuthStatus();
|
|
210
|
+
expect(status.source).not.toBe('env');
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
describe('keyring source', () => {
|
|
214
|
+
it('returns keyring source when keytar has a valid key and env is not set', async () => {
|
|
215
|
+
delete process.env['SKILLSMITH_API_KEY'];
|
|
216
|
+
mockKeytar.getPassword.mockResolvedValue(VALID_KEY);
|
|
217
|
+
const tmpDir = makeTempConfigDir();
|
|
218
|
+
process.env.HOME = tmpDir;
|
|
219
|
+
const status = await getAuthStatus();
|
|
220
|
+
expect(status.authenticated).toBe(true);
|
|
221
|
+
expect(status.source).toBe('keyring');
|
|
222
|
+
expect(status.keyPrefix).toBe(VALID_KEY.substring(0, 12));
|
|
223
|
+
});
|
|
224
|
+
it('falls through when keyring returns null', async () => {
|
|
225
|
+
delete process.env['SKILLSMITH_API_KEY'];
|
|
226
|
+
mockKeytar.getPassword.mockResolvedValue(null);
|
|
227
|
+
const tmpDir = makeTempConfigDir();
|
|
228
|
+
process.env.HOME = tmpDir;
|
|
229
|
+
const status = await getAuthStatus();
|
|
230
|
+
expect(status.source).not.toBe('keyring');
|
|
231
|
+
});
|
|
232
|
+
it('falls through when keyring throws', async () => {
|
|
233
|
+
delete process.env['SKILLSMITH_API_KEY'];
|
|
234
|
+
mockKeytar.getPassword.mockRejectedValue(new Error('keyring unavailable'));
|
|
235
|
+
const tmpDir = makeTempConfigDir();
|
|
236
|
+
process.env.HOME = tmpDir;
|
|
237
|
+
const status = await getAuthStatus();
|
|
238
|
+
// Should not throw; should fall through to config/none
|
|
239
|
+
expect(status.authenticated).toBe(false);
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
describe('config source', () => {
|
|
243
|
+
it('returns config source when key is in config file and env/keyring are absent', async () => {
|
|
244
|
+
delete process.env['SKILLSMITH_API_KEY'];
|
|
245
|
+
mockKeytar.getPassword.mockResolvedValue(null);
|
|
246
|
+
const tmpDir = makeTempConfigDir();
|
|
247
|
+
process.env.HOME = tmpDir;
|
|
248
|
+
saveConfig({ apiKey: VALID_KEY });
|
|
249
|
+
const status = await getAuthStatus();
|
|
250
|
+
expect(status.authenticated).toBe(true);
|
|
251
|
+
expect(status.source).toBe('config');
|
|
252
|
+
expect(status.keyPrefix).toBe(VALID_KEY.substring(0, 12));
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
describe('none source', () => {
|
|
256
|
+
it('returns none when no key is stored anywhere', async () => {
|
|
257
|
+
delete process.env['SKILLSMITH_API_KEY'];
|
|
258
|
+
mockKeytar.getPassword.mockResolvedValue(null);
|
|
259
|
+
const tmpDir = makeTempConfigDir();
|
|
260
|
+
process.env.HOME = tmpDir;
|
|
261
|
+
const status = await getAuthStatus();
|
|
262
|
+
expect(status.authenticated).toBe(false);
|
|
263
|
+
expect(status.keyPrefix).toBeNull();
|
|
264
|
+
expect(status.source).toBe('none');
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
// ---------------------------------------------------------------------------
|
|
269
|
+
// Keytar import failure simulation
|
|
270
|
+
// ---------------------------------------------------------------------------
|
|
271
|
+
describe('keytar import failure fallback', () => {
|
|
272
|
+
it('falls back to config file when @isaacs/keytar cannot be imported', async () => {
|
|
273
|
+
// We simulate unavailability by mocking setPassword to throw.
|
|
274
|
+
// A full module-import-failure path is covered by the storeApiKey fallback test above.
|
|
275
|
+
mockKeytar.setPassword.mockRejectedValue(new Error('simulated import failure'));
|
|
276
|
+
const originalHome = process.env.HOME;
|
|
277
|
+
const tmpDir = makeTempConfigDir();
|
|
278
|
+
process.env.HOME = tmpDir;
|
|
279
|
+
try {
|
|
280
|
+
await storeApiKey(VALID_KEY);
|
|
281
|
+
// No exception means fallback succeeded
|
|
282
|
+
}
|
|
283
|
+
finally {
|
|
284
|
+
process.env.HOME = originalHome;
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/config/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"betterSqlite3Driver.d.ts","sourceRoot":"","sources":["../../../../src/db/drivers/betterSqlite3Driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAa,eAAe,EAAE,MAAM,0BAA0B,CAAA;AA0C/F;;GAEG;AACH,qBAAa,qBAAsB,YAAW,QAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa,CAAC,QAAQ;IAEvD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAK/C,WAAW,CAAC,CAAC,EAAE,IAAI,SAAS,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC;IAK3F,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI/B,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,aAAa,CAAC,QAAQ,CAEnC;CACF;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,GAAE,MAAmB,EACzB,OAAO,CAAC,EAAE,eAAe,GACxB,qBAAqB,CAyBvB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"betterSqlite3Driver.d.ts","sourceRoot":"","sources":["../../../../src/db/drivers/betterSqlite3Driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAa,eAAe,EAAE,MAAM,0BAA0B,CAAA;AA0C/F;;GAEG;AACH,qBAAa,qBAAsB,YAAW,QAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa,CAAC,QAAQ;IAEvD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAK/C,WAAW,CAAC,CAAC,EAAE,IAAI,SAAS,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC;IAK3F,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI/B,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,aAAa,CAAC,QAAQ,CAEnC;CACF;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,GAAE,MAAmB,EACzB,OAAO,CAAC,EAAE,eAAe,GACxB,qBAAqB,CAyBvB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAWlD"}
|
|
@@ -124,9 +124,11 @@ export function createBetterSqlite3Database(path = ':memory:', options) {
|
|
|
124
124
|
*/
|
|
125
125
|
export function isBetterSqlite3Available() {
|
|
126
126
|
try {
|
|
127
|
-
require
|
|
128
|
-
//
|
|
129
|
-
|
|
127
|
+
const Database = require('better-sqlite3');
|
|
128
|
+
// Instantiate in-memory DB to trigger dlopen of the native binary.
|
|
129
|
+
// Catches ABI mismatch (Node upgrade) and platform mismatch (Linux binary on macOS).
|
|
130
|
+
const testDb = new Database(':memory:');
|
|
131
|
+
testDb.close();
|
|
130
132
|
return true;
|
|
131
133
|
}
|
|
132
134
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"betterSqlite3Driver.js","sourceRoot":"","sources":["../../../../src/db/drivers/betterSqlite3Driver.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"betterSqlite3Driver.js","sourceRoot":"","sources":["../../../../src/db/drivers/betterSqlite3Driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-2277: Quarantine Approvals Schema
|
|
3
|
+
*
|
|
4
|
+
* Database schema for persisting multi-approval state. Replaces the
|
|
5
|
+
* in-memory Map<string, ApprovalState> that was lost on service restart.
|
|
6
|
+
*
|
|
7
|
+
* Note on type mappings:
|
|
8
|
+
* - `reviewer_id` is TEXT here (SQLite) but UUID in the Supabase migration.
|
|
9
|
+
* In production, values are always UUIDs from auth providers. Tests may
|
|
10
|
+
* use human-readable strings like 'user-456' for clarity.
|
|
11
|
+
* - `is_complete` is INTEGER 0/1 here (SQLite has no native boolean) but
|
|
12
|
+
* BOOLEAN in the PostgreSQL migration. Queries in ApprovalRepository use
|
|
13
|
+
* integer literals (0/1) which are SQLite-specific.
|
|
14
|
+
* - `created_at` uses `datetime('now') || 'Z'` to produce UTC ISO-8601
|
|
15
|
+
* strings (e.g. '2026-02-13 12:00:00Z') so Date parsing is unambiguous.
|
|
16
|
+
*
|
|
17
|
+
* @module @skillsmith/core/db/quarantine-approvals-schema
|
|
18
|
+
*/
|
|
19
|
+
import type { Database as DatabaseType } from './database-interface.js';
|
|
20
|
+
/**
|
|
21
|
+
* SQL statement to create the quarantine_approvals table
|
|
22
|
+
*/
|
|
23
|
+
export declare const QUARANTINE_APPROVALS_SCHEMA_SQL = "\n-- SMI-2277: Quarantine multi-approval persistence\nCREATE TABLE IF NOT EXISTS quarantine_approvals (\n id TEXT PRIMARY KEY,\n skill_id TEXT NOT NULL,\n reviewer_id TEXT NOT NULL,\n reviewer_email TEXT NOT NULL,\n decision TEXT NOT NULL CHECK(decision IN ('approved', 'rejected')),\n reason TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now') || 'Z'),\n completed_at TEXT,\n required_approvals INTEGER NOT NULL DEFAULT 2,\n is_complete INTEGER NOT NULL DEFAULT 0\n);\n\n-- Index for efficient lookup by skill_id (most common query path)\nCREATE INDEX IF NOT EXISTS idx_quarantine_approvals_skill_id\n ON quarantine_approvals(skill_id);\n\n-- Enforce one pending review per reviewer per skill (defense-in-depth)\nCREATE UNIQUE INDEX IF NOT EXISTS idx_quarantine_approvals_reviewer_unique\n ON quarantine_approvals(skill_id, reviewer_id)\n WHERE is_complete = 0;\n\n-- Efficient count of pending approvals (used by isComplete check)\nCREATE INDEX IF NOT EXISTS idx_quarantine_approvals_pending\n ON quarantine_approvals(skill_id, decision)\n WHERE is_complete = 0;\n";
|
|
24
|
+
/**
|
|
25
|
+
* Initialize the quarantine_approvals schema in the database
|
|
26
|
+
*
|
|
27
|
+
* @param db - Database connection
|
|
28
|
+
*/
|
|
29
|
+
export declare function initializeQuarantineApprovalsSchema(db: DatabaseType): void;
|
|
30
|
+
/**
|
|
31
|
+
* Check if the quarantine_approvals table exists
|
|
32
|
+
*
|
|
33
|
+
* @param db - Database connection
|
|
34
|
+
* @returns True if quarantine_approvals table exists
|
|
35
|
+
*/
|
|
36
|
+
export declare function hasQuarantineApprovalsTable(db: DatabaseType): boolean;
|
|
37
|
+
//# sourceMappingURL=quarantine-approvals-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quarantine-approvals-schema.d.ts","sourceRoot":"","sources":["../../../src/db/quarantine-approvals-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEvE;;GAEG;AACH,eAAO,MAAM,+BAA+B,okCA4B3C,CAAA;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAE1E;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAKrE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-2277: Quarantine Approvals Schema
|
|
3
|
+
*
|
|
4
|
+
* Database schema for persisting multi-approval state. Replaces the
|
|
5
|
+
* in-memory Map<string, ApprovalState> that was lost on service restart.
|
|
6
|
+
*
|
|
7
|
+
* Note on type mappings:
|
|
8
|
+
* - `reviewer_id` is TEXT here (SQLite) but UUID in the Supabase migration.
|
|
9
|
+
* In production, values are always UUIDs from auth providers. Tests may
|
|
10
|
+
* use human-readable strings like 'user-456' for clarity.
|
|
11
|
+
* - `is_complete` is INTEGER 0/1 here (SQLite has no native boolean) but
|
|
12
|
+
* BOOLEAN in the PostgreSQL migration. Queries in ApprovalRepository use
|
|
13
|
+
* integer literals (0/1) which are SQLite-specific.
|
|
14
|
+
* - `created_at` uses `datetime('now') || 'Z'` to produce UTC ISO-8601
|
|
15
|
+
* strings (e.g. '2026-02-13 12:00:00Z') so Date parsing is unambiguous.
|
|
16
|
+
*
|
|
17
|
+
* @module @skillsmith/core/db/quarantine-approvals-schema
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* SQL statement to create the quarantine_approvals table
|
|
21
|
+
*/
|
|
22
|
+
export const QUARANTINE_APPROVALS_SCHEMA_SQL = `
|
|
23
|
+
-- SMI-2277: Quarantine multi-approval persistence
|
|
24
|
+
CREATE TABLE IF NOT EXISTS quarantine_approvals (
|
|
25
|
+
id TEXT PRIMARY KEY,
|
|
26
|
+
skill_id TEXT NOT NULL,
|
|
27
|
+
reviewer_id TEXT NOT NULL,
|
|
28
|
+
reviewer_email TEXT NOT NULL,
|
|
29
|
+
decision TEXT NOT NULL CHECK(decision IN ('approved', 'rejected')),
|
|
30
|
+
reason TEXT,
|
|
31
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now') || 'Z'),
|
|
32
|
+
completed_at TEXT,
|
|
33
|
+
required_approvals INTEGER NOT NULL DEFAULT 2,
|
|
34
|
+
is_complete INTEGER NOT NULL DEFAULT 0
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
-- Index for efficient lookup by skill_id (most common query path)
|
|
38
|
+
CREATE INDEX IF NOT EXISTS idx_quarantine_approvals_skill_id
|
|
39
|
+
ON quarantine_approvals(skill_id);
|
|
40
|
+
|
|
41
|
+
-- Enforce one pending review per reviewer per skill (defense-in-depth)
|
|
42
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_quarantine_approvals_reviewer_unique
|
|
43
|
+
ON quarantine_approvals(skill_id, reviewer_id)
|
|
44
|
+
WHERE is_complete = 0;
|
|
45
|
+
|
|
46
|
+
-- Efficient count of pending approvals (used by isComplete check)
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_quarantine_approvals_pending
|
|
48
|
+
ON quarantine_approvals(skill_id, decision)
|
|
49
|
+
WHERE is_complete = 0;
|
|
50
|
+
`;
|
|
51
|
+
/**
|
|
52
|
+
* Initialize the quarantine_approvals schema in the database
|
|
53
|
+
*
|
|
54
|
+
* @param db - Database connection
|
|
55
|
+
*/
|
|
56
|
+
export function initializeQuarantineApprovalsSchema(db) {
|
|
57
|
+
db.exec(QUARANTINE_APPROVALS_SCHEMA_SQL);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if the quarantine_approvals table exists
|
|
61
|
+
*
|
|
62
|
+
* @param db - Database connection
|
|
63
|
+
* @returns True if quarantine_approvals table exists
|
|
64
|
+
*/
|
|
65
|
+
export function hasQuarantineApprovalsTable(db) {
|
|
66
|
+
const result = db
|
|
67
|
+
.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='quarantine_approvals'")
|
|
68
|
+
.get();
|
|
69
|
+
return !!result;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=quarantine-approvals-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quarantine-approvals-schema.js","sourceRoot":"","sources":["../../../src/db/quarantine-approvals-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B9C,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,mCAAmC,CAAC,EAAgB;IAClE,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,EAAgB;IAC1D,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CAAC,mFAAmF,CAAC;SAC5F,GAAG,EAAE,CAAA;IACR,OAAO,CAAC,CAAC,MAAM,CAAA;AACjB,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Barrel file for service-related exports
|
|
6
6
|
*/
|
|
7
7
|
export { SearchService } from '../services/SearchService.js';
|
|
8
|
+
export { QuarantineService, QuarantineServiceError, hasPermission, isSessionValid, requirePermission, type QuarantinePermission, type AuthenticatedSession, type ApprovalRecord, type MultiApprovalStatus, type AuthenticatedReviewInput, type AuthenticatedReviewResult, type QuarantineServiceErrorCode, } from '../services/quarantine/index.js';
|
|
8
9
|
export { analyzeSkill, quickTransformCheck, type SkillAnalysis, type ToolUsageAnalysis, type TaskPatternAnalysis, type ExtractableSection, type OptimizationRecommendation, } from '../services/SkillAnalyzer.js';
|
|
9
10
|
export { decomposeSkill, parallelizeTaskCalls, type DecompositionResult, type DecomposedSkill, type SubSkill, type DecompositionStats, type DecomposerOptions, } from '../services/SkillDecomposer.js';
|
|
10
11
|
export { generateSubagent, generateMinimalSubagent, CLAUDE_MODELS, type SubagentDefinition, type SubagentGenerationResult, type ClaudeModel, } from '../services/SubagentGenerator.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/exports/services.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/exports/services.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
// ============================================================================
|
|
10
10
|
export { SearchService } from '../services/SearchService.js';
|
|
11
11
|
// ============================================================================
|
|
12
|
+
// Quarantine Service (SMI-2269: Authenticated Quarantine Operations)
|
|
13
|
+
// ============================================================================
|
|
14
|
+
export { QuarantineService, QuarantineServiceError, hasPermission, isSessionValid, requirePermission, } from '../services/quarantine/index.js';
|
|
15
|
+
// ============================================================================
|
|
12
16
|
// Optimization Services (Skillsmith Optimization Layer)
|
|
13
17
|
// ============================================================================
|
|
14
18
|
export { analyzeSkill, quickTransformCheck, } from '../services/SkillAnalyzer.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/exports/services.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/exports/services.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
export declare const VERSION = "0.2.0";
|
|
5
5
|
export * from './exports/services.js';
|
|
6
6
|
export * from './exports/repositories.js';
|
|
7
|
+
export { createDatabaseSync } from './db/createDatabase.js';
|
|
8
|
+
export type { Database } from './db/database-interface.js';
|
|
7
9
|
export * from './exports/types.js';
|
|
8
10
|
export { SkillsmithApiClient, createApiClient, generateAnonymousId, ApiCache, createCache, getGlobalCache, DEFAULT_TTL, type ApiClientConfig, } from './api/index.js';
|
|
9
11
|
export { HybridSearch } from './search/index.js';
|
|
@@ -19,7 +21,8 @@ export { RateLimiter, InMemoryRateLimitStorage, createRateLimiterFromPreset, RAT
|
|
|
19
21
|
export { AuditLogger, MIN_RETENTION_DAYS, MAX_RETENTION_DAYS } from './security/AuditLogger.js';
|
|
20
22
|
export { BaseSourceAdapter, SourceAdapterRegistry, SourceIndexer, defaultRegistry, isSourceAdapter, } from './sources/index.js';
|
|
21
23
|
export type { ISourceAdapter, SourceType, SourceConfig, RateLimitConfig as SourceRateLimitConfig, SourceAuthConfig, SourceLocation, SourceRepository, SkillContent, SourceSearchOptions, SourceSearchResult, SkillIndexResult, BatchIndexResult, SourceHealth, SourceAdapterFactory, RegistryStats, ParsedSkillMetadata as SourceParsedSkillMetadata, ISkillParser, ISkillRepository, SourceIndexerOptions, } from './sources/index.js';
|
|
22
|
-
export { loadConfig, saveConfig, getApiKey, getApiBaseUrl, getConfigDir, getConfigPath, ensureConfigDir, isDebugEnabled, isTelemetryEnabled, isValidApiKeyFormat, type SkillsmithConfig, } from './config/index.js';
|
|
24
|
+
export { loadConfig, saveConfig, getApiKey, getApiBaseUrl, getConfigDir, getConfigPath, ensureConfigDir, isDebugEnabled, isTelemetryEnabled, isValidApiKeyFormat, storeApiKey, clearApiKey, getAuthStatus, type SkillsmithConfig, } from './config/index.js';
|
|
23
25
|
export { checkForUpdates, formatUpdateNotification, type VersionCheckResult, } from './utils/version-check.js';
|
|
24
26
|
export { parseRepoUrl, isGitHubUrl, type ParsedRepoUrl } from './utils/github-url.js';
|
|
27
|
+
export { safeWriteFile, SymlinkError, HardlinkError } from './utils/safe-fs.js';
|
|
25
28
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,eAAO,MAAM,OAAO,UAAU,CAAA;AAO9B,cAAc,uBAAuB,CAAA;AAGrC,cAAc,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -10,6 +10,10 @@ export const VERSION = '0.2.0';
|
|
|
10
10
|
export * from './exports/services.js';
|
|
11
11
|
// Repositories - Database, repositories, quarantine, migrations
|
|
12
12
|
export * from './exports/repositories.js';
|
|
13
|
+
// SMI-2229: Explicit re-exports for TypeScript project reference resolution
|
|
14
|
+
// These are already exported via repositories.js but TypeScript composite projects
|
|
15
|
+
// don't always follow the re-export chain correctly
|
|
16
|
+
export { createDatabaseSync } from './db/createDatabase.js';
|
|
13
17
|
// Types - All type definitions
|
|
14
18
|
export * from './exports/types.js';
|
|
15
19
|
// ============================================================================
|
|
@@ -49,12 +53,14 @@ export { RateLimiter, InMemoryRateLimitStorage, createRateLimiterFromPreset, RAT
|
|
|
49
53
|
export { AuditLogger, MIN_RETENTION_DAYS, MAX_RETENTION_DAYS } from './security/AuditLogger.js';
|
|
50
54
|
// Source Adapters (SMI-589)
|
|
51
55
|
export { BaseSourceAdapter, SourceAdapterRegistry, SourceIndexer, defaultRegistry, isSourceAdapter, } from './sources/index.js';
|
|
52
|
-
// Configuration (SMI-1851)
|
|
53
|
-
export { loadConfig, saveConfig, getApiKey, getApiBaseUrl, getConfigDir, getConfigPath, ensureConfigDir, isDebugEnabled, isTelemetryEnabled, isValidApiKeyFormat, } from './config/index.js';
|
|
56
|
+
// Configuration (SMI-1851, SMI-2714)
|
|
57
|
+
export { loadConfig, saveConfig, getApiKey, getApiBaseUrl, getConfigDir, getConfigPath, ensureConfigDir, isDebugEnabled, isTelemetryEnabled, isValidApiKeyFormat, storeApiKey, clearApiKey, getAuthStatus, } from './config/index.js';
|
|
54
58
|
// Version Check (SMI-1952)
|
|
55
59
|
export { checkForUpdates, formatUpdateNotification, } from './utils/version-check.js';
|
|
56
60
|
// GitHub URL Parsing (SMI-2171)
|
|
57
61
|
export { parseRepoUrl, isGitHubUrl } from './utils/github-url.js';
|
|
62
|
+
// SMI-2274: Safe filesystem operations
|
|
63
|
+
export { safeWriteFile, SymlinkError, HardlinkError } from './utils/safe-fs.js';
|
|
58
64
|
// ============================================================================
|
|
59
65
|
// LIVE SERVICES WORKTREE STUBS (Phase 0 - Conflict Prevention)
|
|
60
66
|
// ============================================================================
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|