@skillsmith/core 0.4.9 → 0.4.10
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/adapters/java-parsers.d.ts.map +1 -1
- package/dist/src/analysis/adapters/java-parsers.js +9 -2
- package/dist/src/analysis/adapters/java-parsers.js.map +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/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/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 +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -0
- 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/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/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/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 +149 -0
- package/dist/src/services/quarantine/QuarantineService.d.ts.map +1 -0
- package/dist/src/services/quarantine/QuarantineService.js +406 -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/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 +378 -0
- package/dist/tests/integration/QuarantineService.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,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-2274: Safe filesystem operations tests
|
|
3
|
+
*
|
|
4
|
+
* Tests for symlink-safe file write operations.
|
|
5
|
+
* Covers:
|
|
6
|
+
* - Normal file writes
|
|
7
|
+
* - Symlink detection and rejection
|
|
8
|
+
* - Non-existent file creation
|
|
9
|
+
* - Explicit file permissions
|
|
10
|
+
*/
|
|
11
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
12
|
+
import { safeWriteFile, SymlinkError, HardlinkError } from '../../src/utils/safe-fs.js';
|
|
13
|
+
import * as fs from 'fs/promises';
|
|
14
|
+
import * as path from 'path';
|
|
15
|
+
import * as os from 'os';
|
|
16
|
+
describe('SMI-2274: safeWriteFile', () => {
|
|
17
|
+
let tempDir;
|
|
18
|
+
beforeEach(async () => {
|
|
19
|
+
tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'safe-fs-test-'));
|
|
20
|
+
});
|
|
21
|
+
afterEach(async () => {
|
|
22
|
+
await fs.rm(tempDir, { recursive: true, force: true });
|
|
23
|
+
});
|
|
24
|
+
it('should write to a new file that does not exist', async () => {
|
|
25
|
+
const filePath = path.join(tempDir, 'new-file.md');
|
|
26
|
+
await safeWriteFile(filePath, '# Test Skill');
|
|
27
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
28
|
+
expect(content).toBe('# Test Skill');
|
|
29
|
+
});
|
|
30
|
+
it('should overwrite an existing regular file', async () => {
|
|
31
|
+
const filePath = path.join(tempDir, 'existing.md');
|
|
32
|
+
await fs.writeFile(filePath, 'old content');
|
|
33
|
+
await safeWriteFile(filePath, 'new content');
|
|
34
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
35
|
+
expect(content).toBe('new content');
|
|
36
|
+
});
|
|
37
|
+
it('should reject writing to a symlink', async () => {
|
|
38
|
+
const targetPath = path.join(tempDir, 'target.md');
|
|
39
|
+
const symlinkPath = path.join(tempDir, 'symlink.md');
|
|
40
|
+
await fs.writeFile(targetPath, 'target content');
|
|
41
|
+
await fs.symlink(targetPath, symlinkPath);
|
|
42
|
+
await expect(safeWriteFile(symlinkPath, 'malicious')).rejects.toThrow(SymlinkError);
|
|
43
|
+
await expect(safeWriteFile(symlinkPath, 'malicious')).rejects.toThrow('Refusing to write to symlink');
|
|
44
|
+
// Verify target was not modified
|
|
45
|
+
const content = await fs.readFile(targetPath, 'utf-8');
|
|
46
|
+
expect(content).toBe('target content');
|
|
47
|
+
});
|
|
48
|
+
it('should reject writing to a dangling symlink', async () => {
|
|
49
|
+
const symlinkPath = path.join(tempDir, 'dangling.md');
|
|
50
|
+
await fs.symlink('/nonexistent/path', symlinkPath);
|
|
51
|
+
await expect(safeWriteFile(symlinkPath, 'content')).rejects.toThrow(SymlinkError);
|
|
52
|
+
});
|
|
53
|
+
it('should set default file permissions to 0o644', async () => {
|
|
54
|
+
const filePath = path.join(tempDir, 'permissions.md');
|
|
55
|
+
await safeWriteFile(filePath, 'content');
|
|
56
|
+
const stats = await fs.stat(filePath);
|
|
57
|
+
// Check the file permission bits (mask out file type bits)
|
|
58
|
+
const mode = stats.mode & 0o777;
|
|
59
|
+
expect(mode).toBe(0o644);
|
|
60
|
+
});
|
|
61
|
+
it('should respect custom mode option', async () => {
|
|
62
|
+
const filePath = path.join(tempDir, 'custom-mode.md');
|
|
63
|
+
await safeWriteFile(filePath, 'content', { mode: 0o600 });
|
|
64
|
+
const stats = await fs.stat(filePath);
|
|
65
|
+
const mode = stats.mode & 0o777;
|
|
66
|
+
expect(mode).toBe(0o600);
|
|
67
|
+
});
|
|
68
|
+
it('should handle Buffer content', async () => {
|
|
69
|
+
const filePath = path.join(tempDir, 'buffer.bin');
|
|
70
|
+
const buffer = Buffer.from([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
|
|
71
|
+
await safeWriteFile(filePath, buffer);
|
|
72
|
+
const content = await fs.readFile(filePath);
|
|
73
|
+
expect(content.toString()).toBe('Hello');
|
|
74
|
+
});
|
|
75
|
+
it('should propagate non-ENOENT errors', async () => {
|
|
76
|
+
// Try to write to a path where the parent directory doesn't exist
|
|
77
|
+
const filePath = path.join(tempDir, 'nonexistent', 'deep', 'file.md');
|
|
78
|
+
await expect(safeWriteFile(filePath, 'content')).rejects.toThrow();
|
|
79
|
+
});
|
|
80
|
+
it('should apply default permissions when encoding string is passed', async () => {
|
|
81
|
+
const filePath = path.join(tempDir, 'encoding-test.md');
|
|
82
|
+
await safeWriteFile(filePath, 'content', 'utf-8');
|
|
83
|
+
const stats = await fs.stat(filePath);
|
|
84
|
+
const mode = stats.mode & 0o777;
|
|
85
|
+
expect(mode).toBe(0o644);
|
|
86
|
+
});
|
|
87
|
+
it('should reject writing to a hardlinked file', async () => {
|
|
88
|
+
const originalPath = path.join(tempDir, 'original.md');
|
|
89
|
+
const hardlinkPath = path.join(tempDir, 'hardlink.md');
|
|
90
|
+
await fs.writeFile(originalPath, 'original content');
|
|
91
|
+
await fs.link(originalPath, hardlinkPath);
|
|
92
|
+
await expect(safeWriteFile(hardlinkPath, 'malicious')).rejects.toThrow(HardlinkError);
|
|
93
|
+
// Verify original was not modified
|
|
94
|
+
const content = await fs.readFile(originalPath, 'utf-8');
|
|
95
|
+
expect(content).toBe('original content');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('SMI-2274: SymlinkError', () => {
|
|
99
|
+
it('should have correct name, message, and filePath', () => {
|
|
100
|
+
const error = new SymlinkError('/path/to/file');
|
|
101
|
+
expect(error.name).toBe('SymlinkError');
|
|
102
|
+
expect(error.message).toBe('Refusing to write to symlink: /path/to/file');
|
|
103
|
+
expect(error.filePath).toBe('/path/to/file');
|
|
104
|
+
expect(error).toBeInstanceOf(Error);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe('SMI-2290: HardlinkError', () => {
|
|
108
|
+
it('should have correct name, message, and filePath', () => {
|
|
109
|
+
const error = new HardlinkError('/path/to/file');
|
|
110
|
+
expect(error.name).toBe('HardlinkError');
|
|
111
|
+
expect(error.message).toBe('Refusing to write to hardlinked file: /path/to/file');
|
|
112
|
+
expect(error.filePath).toBe('/path/to/file');
|
|
113
|
+
expect(error).toBeInstanceOf(Error);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=safe-fs.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-fs.test.js","sourceRoot":"","sources":["../../../tests/utils/safe-fs.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skillsmith/core",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.10",
|
|
4
4
|
"description": "Core types and utilities for Skillsmith",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -8,27 +8,33 @@
|
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
10
|
"types": "./dist/src/index.d.ts",
|
|
11
|
-
"import": "./dist/src/index.js"
|
|
11
|
+
"import": "./dist/src/index.js",
|
|
12
|
+
"default": "./dist/src/index.js"
|
|
12
13
|
},
|
|
13
14
|
"./errors": {
|
|
14
15
|
"types": "./dist/src/errors.d.ts",
|
|
15
|
-
"import": "./dist/src/errors.js"
|
|
16
|
+
"import": "./dist/src/errors.js",
|
|
17
|
+
"default": "./dist/src/errors.js"
|
|
16
18
|
},
|
|
17
19
|
"./embeddings": {
|
|
18
20
|
"types": "./dist/src/embeddings/index.d.ts",
|
|
19
|
-
"import": "./dist/src/embeddings/index.js"
|
|
21
|
+
"import": "./dist/src/embeddings/index.js",
|
|
22
|
+
"default": "./dist/src/embeddings/index.js"
|
|
20
23
|
},
|
|
21
24
|
"./testing": {
|
|
22
25
|
"types": "./dist/src/testing/index.d.ts",
|
|
23
|
-
"import": "./dist/src/testing/index.js"
|
|
26
|
+
"import": "./dist/src/testing/index.js",
|
|
27
|
+
"default": "./dist/src/testing/index.js"
|
|
24
28
|
},
|
|
25
29
|
"./learning": {
|
|
26
30
|
"types": "./dist/src/learning/index.d.ts",
|
|
27
|
-
"import": "./dist/src/learning/index.js"
|
|
31
|
+
"import": "./dist/src/learning/index.js",
|
|
32
|
+
"default": "./dist/src/learning/index.js"
|
|
28
33
|
},
|
|
29
34
|
"./billing": {
|
|
30
35
|
"types": "./dist/src/billing/index.d.ts",
|
|
31
|
-
"import": "./dist/src/billing/index.js"
|
|
36
|
+
"import": "./dist/src/billing/index.js",
|
|
37
|
+
"default": "./dist/src/billing/index.js"
|
|
32
38
|
}
|
|
33
39
|
},
|
|
34
40
|
"scripts": {
|
|
@@ -81,12 +87,10 @@
|
|
|
81
87
|
"url": "https://github.com/smith-horn/skillsmith/issues"
|
|
82
88
|
},
|
|
83
89
|
"keywords": [
|
|
84
|
-
"claude",
|
|
85
90
|
"ai",
|
|
86
91
|
"skills",
|
|
87
92
|
"mcp",
|
|
88
|
-
"llm"
|
|
89
|
-
"anthropic"
|
|
93
|
+
"llm"
|
|
90
94
|
],
|
|
91
95
|
"engines": {
|
|
92
96
|
"node": ">=22.0.0"
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SMI-2180: Database Driver Parity Integration Tests
|
|
3
|
-
*
|
|
4
|
-
* Ensures end-to-end parity between better-sqlite3 and sql.js drivers
|
|
5
|
-
* by running identical operations on SkillRepository with both drivers.
|
|
6
|
-
*
|
|
7
|
-
* Tests cover:
|
|
8
|
-
* - CRUD operations
|
|
9
|
-
* - Transactions and rollback behavior
|
|
10
|
-
* - Prepared statement reuse
|
|
11
|
-
* - Search operations
|
|
12
|
-
* - Batch insertions
|
|
13
|
-
* - Edge cases and error handling
|
|
14
|
-
*/
|
|
15
|
-
export {};
|
|
16
|
-
//# sourceMappingURL=driver-parity.integration.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"driver-parity.integration.test.d.ts","sourceRoot":"","sources":["../../../tests/db/driver-parity.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|