@skillsmith/core 0.4.10 → 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/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.js +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/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/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/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.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/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/security/audit-types.d.ts +1 -1
- 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/scanner/SecurityScanner.formatters.js +1 -1
- package/dist/src/security/scanner/SecurityScanner.formatters.js.map +1 -1
- package/dist/src/services/quarantine/QuarantineService.d.ts +17 -9
- package/dist/src/services/quarantine/QuarantineService.d.ts.map +1 -1
- package/dist/src/services/quarantine/QuarantineService.js +114 -56
- package/dist/src/services/quarantine/QuarantineService.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/integration/QuarantineService.test.js +49 -1
- package/dist/tests/integration/QuarantineService.test.js.map +1 -1
- 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/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/config/index.test.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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export { RateLimiter, InMemoryRateLimitStorage, createRateLimiterFromPreset, RAT
|
|
|
21
21
|
export { AuditLogger, MIN_RETENTION_DAYS, MAX_RETENTION_DAYS } from './security/AuditLogger.js';
|
|
22
22
|
export { BaseSourceAdapter, SourceAdapterRegistry, SourceIndexer, defaultRegistry, isSourceAdapter, } from './sources/index.js';
|
|
23
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';
|
|
24
|
-
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';
|
|
25
25
|
export { checkForUpdates, formatUpdateNotification, type VersionCheckResult, } from './utils/version-check.js';
|
|
26
26
|
export { parseRepoUrl, isGitHubUrl, type ParsedRepoUrl } from './utils/github-url.js';
|
|
27
27
|
export { safeWriteFile, SymlinkError, HardlinkError } from './utils/safe-fs.js';
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -53,8 +53,8 @@ export { RateLimiter, InMemoryRateLimitStorage, createRateLimiterFromPreset, RAT
|
|
|
53
53
|
export { AuditLogger, MIN_RETENTION_DAYS, MAX_RETENTION_DAYS } from './security/AuditLogger.js';
|
|
54
54
|
// Source Adapters (SMI-589)
|
|
55
55
|
export { BaseSourceAdapter, SourceAdapterRegistry, SourceIndexer, defaultRegistry, isSourceAdapter, } from './sources/index.js';
|
|
56
|
-
// Configuration (SMI-1851)
|
|
57
|
-
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';
|
|
58
58
|
// Version Check (SMI-1952)
|
|
59
59
|
export { checkForUpdates, formatUpdateNotification, } from './utils/version-check.js';
|
|
60
60
|
// GitHub URL Parsing (SMI-2171)
|
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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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-2277: Approval Repository
|
|
3
|
+
*
|
|
4
|
+
* Persists multi-approval state to SQLite instead of in-memory Map.
|
|
5
|
+
* This ensures pending approvals survive service restarts.
|
|
6
|
+
*
|
|
7
|
+
* @module @skillsmith/core/repositories/quarantine/ApprovalRepository
|
|
8
|
+
*/
|
|
9
|
+
import type { Database as DatabaseType } from '../../db/database-interface.js';
|
|
10
|
+
/**
|
|
11
|
+
* Database row for quarantine_approvals table
|
|
12
|
+
*/
|
|
13
|
+
export interface ApprovalRow {
|
|
14
|
+
id: string;
|
|
15
|
+
skill_id: string;
|
|
16
|
+
reviewer_id: string;
|
|
17
|
+
reviewer_email: string;
|
|
18
|
+
decision: 'approved' | 'rejected';
|
|
19
|
+
reason: string | null;
|
|
20
|
+
created_at: string;
|
|
21
|
+
completed_at: string | null;
|
|
22
|
+
required_approvals: number;
|
|
23
|
+
is_complete: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Domain object for a recorded approval
|
|
27
|
+
*/
|
|
28
|
+
export interface ApprovalEntry {
|
|
29
|
+
id: string;
|
|
30
|
+
skillId: string;
|
|
31
|
+
reviewerId: string;
|
|
32
|
+
reviewerEmail: string;
|
|
33
|
+
decision: 'approved' | 'rejected';
|
|
34
|
+
reason: string | null;
|
|
35
|
+
createdAt: string;
|
|
36
|
+
completedAt: string | null;
|
|
37
|
+
requiredApprovals: number;
|
|
38
|
+
isComplete: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Input for recording a new approval
|
|
42
|
+
*/
|
|
43
|
+
export interface RecordApprovalInput {
|
|
44
|
+
skillId: string;
|
|
45
|
+
reviewerId: string;
|
|
46
|
+
reviewerEmail: string;
|
|
47
|
+
decision: 'approved' | 'rejected';
|
|
48
|
+
reason?: string;
|
|
49
|
+
requiredApprovals?: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Repository for persisting multi-approval workflow state.
|
|
53
|
+
*
|
|
54
|
+
* Replaces the in-memory Map<string, MultiApprovalStatus> with
|
|
55
|
+
* database-backed storage to survive service restarts.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const repo = new ApprovalRepository(db)
|
|
60
|
+
*
|
|
61
|
+
* // Record a reviewer's approval
|
|
62
|
+
* repo.recordApproval({
|
|
63
|
+
* skillId: 'quarantine-123',
|
|
64
|
+
* reviewerId: 'user-456',
|
|
65
|
+
* reviewerRole: 'reviewer@example.com',
|
|
66
|
+
* decision: 'approved',
|
|
67
|
+
* reason: 'Code verified safe',
|
|
68
|
+
* })
|
|
69
|
+
*
|
|
70
|
+
* // Check if enough approvals have been collected
|
|
71
|
+
* const complete = repo.isComplete('quarantine-123')
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare class ApprovalRepository {
|
|
75
|
+
private db;
|
|
76
|
+
constructor(db: DatabaseType);
|
|
77
|
+
/**
|
|
78
|
+
* Ensure the quarantine_approvals table exists
|
|
79
|
+
*/
|
|
80
|
+
private ensureTableExists;
|
|
81
|
+
/**
|
|
82
|
+
* Record a new approval or rejection for a quarantine entry
|
|
83
|
+
*
|
|
84
|
+
* @param input - Approval details
|
|
85
|
+
* @returns The created approval entry
|
|
86
|
+
* @throws Error if reviewer has already submitted for this skill
|
|
87
|
+
*/
|
|
88
|
+
recordApproval(input: RecordApprovalInput): ApprovalEntry;
|
|
89
|
+
/**
|
|
90
|
+
* Get all approvals for a quarantine entry (both pending and complete)
|
|
91
|
+
*
|
|
92
|
+
* @param skillId - The quarantine entry ID
|
|
93
|
+
* @returns All approval entries for this skill
|
|
94
|
+
*/
|
|
95
|
+
getApprovals(skillId: string): ApprovalEntry[];
|
|
96
|
+
/**
|
|
97
|
+
* Get only pending (non-complete) approvals for a quarantine entry
|
|
98
|
+
*
|
|
99
|
+
* @param skillId - The quarantine entry ID
|
|
100
|
+
* @returns Pending approval entries
|
|
101
|
+
*/
|
|
102
|
+
getPendingApprovals(skillId: string): ApprovalEntry[];
|
|
103
|
+
/**
|
|
104
|
+
* Check if a specific reviewer has already submitted for a skill
|
|
105
|
+
*
|
|
106
|
+
* @param skillId - The quarantine entry ID
|
|
107
|
+
* @param reviewerId - The reviewer's user ID
|
|
108
|
+
* @returns True if the reviewer already has a pending approval
|
|
109
|
+
*/
|
|
110
|
+
hasReviewerApproved(skillId: string, reviewerId: string): boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Check if the required number of approvals have been reached
|
|
113
|
+
*
|
|
114
|
+
* @param skillId - The quarantine entry ID
|
|
115
|
+
* @param requiredApprovals - Number of approvals needed (default: 2)
|
|
116
|
+
* @returns True if approval count meets or exceeds required
|
|
117
|
+
*/
|
|
118
|
+
isComplete(skillId: string, requiredApprovals?: number): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Mark all pending approvals for a skill as complete
|
|
121
|
+
*
|
|
122
|
+
* @param skillId - The quarantine entry ID
|
|
123
|
+
* @returns Number of rows updated
|
|
124
|
+
*/
|
|
125
|
+
markComplete(skillId: string): number;
|
|
126
|
+
/**
|
|
127
|
+
* Delete all approvals for a skill (for cleanup/reset/cancellation)
|
|
128
|
+
*
|
|
129
|
+
* @param skillId - The quarantine entry ID
|
|
130
|
+
* @returns Number of rows deleted
|
|
131
|
+
*/
|
|
132
|
+
clearApprovals(skillId: string): number;
|
|
133
|
+
/**
|
|
134
|
+
* Get the timestamp of the first pending approval for timeout checks
|
|
135
|
+
*
|
|
136
|
+
* @param skillId - The quarantine entry ID
|
|
137
|
+
* @returns ISO date string of the first approval, or null if none
|
|
138
|
+
*/
|
|
139
|
+
getWorkflowStartTime(skillId: string): string | null;
|
|
140
|
+
/**
|
|
141
|
+
* Get the count of pending approvals for a skill
|
|
142
|
+
*
|
|
143
|
+
* @param skillId - The quarantine entry ID
|
|
144
|
+
* @returns Count of pending approved entries
|
|
145
|
+
*/
|
|
146
|
+
getPendingApprovalCount(skillId: string): number;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=ApprovalRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApprovalRepository.d.ts","sourceRoot":"","sources":["../../../../src/repositories/quarantine/ApprovalRepository.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAQ9E;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAA;IACjC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAA;IACjC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,iBAAiB,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAA;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAyDD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAc;gBAEZ,EAAE,EAAE,YAAY;IAK5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;;;;OAMG;IACH,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,aAAa;IAuBzD;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;IAM9C;;;;;OAKG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;IAMrD;;;;;;OAMG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAMjE;;;;;;OAMG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAU,GAAG,OAAO;IAQnE;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAMrC;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAMvC;;;;;OAKG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQpD;;;;;OAKG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAOjD"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-2277: Approval Repository
|
|
3
|
+
*
|
|
4
|
+
* Persists multi-approval state to SQLite instead of in-memory Map.
|
|
5
|
+
* This ensures pending approvals survive service restarts.
|
|
6
|
+
*
|
|
7
|
+
* @module @skillsmith/core/repositories/quarantine/ApprovalRepository
|
|
8
|
+
*/
|
|
9
|
+
import { randomUUID } from 'crypto';
|
|
10
|
+
import { initializeQuarantineApprovalsSchema } from '../../db/quarantine-approvals-schema.js';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// SQL Queries
|
|
13
|
+
// ============================================================================
|
|
14
|
+
const INSERT_APPROVAL_QUERY = `
|
|
15
|
+
INSERT INTO quarantine_approvals (
|
|
16
|
+
id, skill_id, reviewer_id, reviewer_email, decision, reason,
|
|
17
|
+
created_at, required_approvals, is_complete
|
|
18
|
+
)
|
|
19
|
+
VALUES (?, ?, ?, ?, ?, ?, datetime('now') || 'Z', ?, 0)
|
|
20
|
+
`;
|
|
21
|
+
const SELECT_BY_SKILL_ID_QUERY = `
|
|
22
|
+
SELECT * FROM quarantine_approvals
|
|
23
|
+
WHERE skill_id = ?
|
|
24
|
+
ORDER BY created_at ASC
|
|
25
|
+
`;
|
|
26
|
+
const SELECT_PENDING_BY_SKILL_ID_QUERY = `
|
|
27
|
+
SELECT * FROM quarantine_approvals
|
|
28
|
+
WHERE skill_id = ? AND is_complete = 0
|
|
29
|
+
ORDER BY created_at ASC
|
|
30
|
+
`;
|
|
31
|
+
const COUNT_PENDING_APPROVALS_QUERY = `
|
|
32
|
+
SELECT COUNT(*) as count FROM quarantine_approvals
|
|
33
|
+
WHERE skill_id = ? AND is_complete = 0 AND decision = 'approved'
|
|
34
|
+
`;
|
|
35
|
+
const CHECK_REVIEWER_EXISTS_QUERY = `
|
|
36
|
+
SELECT id FROM quarantine_approvals
|
|
37
|
+
WHERE skill_id = ? AND reviewer_id = ? AND is_complete = 0
|
|
38
|
+
`;
|
|
39
|
+
const MARK_COMPLETE_QUERY = `
|
|
40
|
+
UPDATE quarantine_approvals
|
|
41
|
+
SET is_complete = 1, completed_at = datetime('now') || 'Z'
|
|
42
|
+
WHERE skill_id = ? AND is_complete = 0
|
|
43
|
+
`;
|
|
44
|
+
const DELETE_BY_SKILL_ID_QUERY = `
|
|
45
|
+
DELETE FROM quarantine_approvals WHERE skill_id = ?
|
|
46
|
+
`;
|
|
47
|
+
const SELECT_FIRST_PENDING_QUERY = `
|
|
48
|
+
SELECT created_at FROM quarantine_approvals
|
|
49
|
+
WHERE skill_id = ? AND is_complete = 0
|
|
50
|
+
ORDER BY created_at ASC
|
|
51
|
+
LIMIT 1
|
|
52
|
+
`;
|
|
53
|
+
// ============================================================================
|
|
54
|
+
// Repository Implementation
|
|
55
|
+
// ============================================================================
|
|
56
|
+
/**
|
|
57
|
+
* Repository for persisting multi-approval workflow state.
|
|
58
|
+
*
|
|
59
|
+
* Replaces the in-memory Map<string, MultiApprovalStatus> with
|
|
60
|
+
* database-backed storage to survive service restarts.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const repo = new ApprovalRepository(db)
|
|
65
|
+
*
|
|
66
|
+
* // Record a reviewer's approval
|
|
67
|
+
* repo.recordApproval({
|
|
68
|
+
* skillId: 'quarantine-123',
|
|
69
|
+
* reviewerId: 'user-456',
|
|
70
|
+
* reviewerRole: 'reviewer@example.com',
|
|
71
|
+
* decision: 'approved',
|
|
72
|
+
* reason: 'Code verified safe',
|
|
73
|
+
* })
|
|
74
|
+
*
|
|
75
|
+
* // Check if enough approvals have been collected
|
|
76
|
+
* const complete = repo.isComplete('quarantine-123')
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export class ApprovalRepository {
|
|
80
|
+
db;
|
|
81
|
+
constructor(db) {
|
|
82
|
+
this.db = db;
|
|
83
|
+
this.ensureTableExists();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Ensure the quarantine_approvals table exists
|
|
87
|
+
*/
|
|
88
|
+
ensureTableExists() {
|
|
89
|
+
initializeQuarantineApprovalsSchema(this.db);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Record a new approval or rejection for a quarantine entry
|
|
93
|
+
*
|
|
94
|
+
* @param input - Approval details
|
|
95
|
+
* @returns The created approval entry
|
|
96
|
+
* @throws Error if reviewer has already submitted for this skill
|
|
97
|
+
*/
|
|
98
|
+
recordApproval(input) {
|
|
99
|
+
const id = randomUUID();
|
|
100
|
+
const requiredApprovals = input.requiredApprovals ?? 2;
|
|
101
|
+
this.db
|
|
102
|
+
.prepare(INSERT_APPROVAL_QUERY)
|
|
103
|
+
.run(id, input.skillId, input.reviewerId, input.reviewerEmail, input.decision, input.reason ?? null, requiredApprovals);
|
|
104
|
+
const row = this.db
|
|
105
|
+
.prepare('SELECT * FROM quarantine_approvals WHERE id = ?')
|
|
106
|
+
.get(id);
|
|
107
|
+
return rowToEntry(row);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get all approvals for a quarantine entry (both pending and complete)
|
|
111
|
+
*
|
|
112
|
+
* @param skillId - The quarantine entry ID
|
|
113
|
+
* @returns All approval entries for this skill
|
|
114
|
+
*/
|
|
115
|
+
getApprovals(skillId) {
|
|
116
|
+
const rows = this.db.prepare(SELECT_BY_SKILL_ID_QUERY).all(skillId);
|
|
117
|
+
return rows.map(rowToEntry);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get only pending (non-complete) approvals for a quarantine entry
|
|
121
|
+
*
|
|
122
|
+
* @param skillId - The quarantine entry ID
|
|
123
|
+
* @returns Pending approval entries
|
|
124
|
+
*/
|
|
125
|
+
getPendingApprovals(skillId) {
|
|
126
|
+
const rows = this.db.prepare(SELECT_PENDING_BY_SKILL_ID_QUERY).all(skillId);
|
|
127
|
+
return rows.map(rowToEntry);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Check if a specific reviewer has already submitted for a skill
|
|
131
|
+
*
|
|
132
|
+
* @param skillId - The quarantine entry ID
|
|
133
|
+
* @param reviewerId - The reviewer's user ID
|
|
134
|
+
* @returns True if the reviewer already has a pending approval
|
|
135
|
+
*/
|
|
136
|
+
hasReviewerApproved(skillId, reviewerId) {
|
|
137
|
+
const row = this.db.prepare(CHECK_REVIEWER_EXISTS_QUERY).get(skillId, reviewerId);
|
|
138
|
+
return !!row;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Check if the required number of approvals have been reached
|
|
142
|
+
*
|
|
143
|
+
* @param skillId - The quarantine entry ID
|
|
144
|
+
* @param requiredApprovals - Number of approvals needed (default: 2)
|
|
145
|
+
* @returns True if approval count meets or exceeds required
|
|
146
|
+
*/
|
|
147
|
+
isComplete(skillId, requiredApprovals = 2) {
|
|
148
|
+
const { count } = this.db.prepare(COUNT_PENDING_APPROVALS_QUERY).get(skillId);
|
|
149
|
+
return count >= requiredApprovals;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Mark all pending approvals for a skill as complete
|
|
153
|
+
*
|
|
154
|
+
* @param skillId - The quarantine entry ID
|
|
155
|
+
* @returns Number of rows updated
|
|
156
|
+
*/
|
|
157
|
+
markComplete(skillId) {
|
|
158
|
+
const result = this.db.prepare(MARK_COMPLETE_QUERY).run(skillId);
|
|
159
|
+
return result.changes;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Delete all approvals for a skill (for cleanup/reset/cancellation)
|
|
163
|
+
*
|
|
164
|
+
* @param skillId - The quarantine entry ID
|
|
165
|
+
* @returns Number of rows deleted
|
|
166
|
+
*/
|
|
167
|
+
clearApprovals(skillId) {
|
|
168
|
+
const result = this.db.prepare(DELETE_BY_SKILL_ID_QUERY).run(skillId);
|
|
169
|
+
return result.changes;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get the timestamp of the first pending approval for timeout checks
|
|
173
|
+
*
|
|
174
|
+
* @param skillId - The quarantine entry ID
|
|
175
|
+
* @returns ISO date string of the first approval, or null if none
|
|
176
|
+
*/
|
|
177
|
+
getWorkflowStartTime(skillId) {
|
|
178
|
+
const row = this.db.prepare(SELECT_FIRST_PENDING_QUERY).get(skillId);
|
|
179
|
+
return row?.created_at ?? null;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get the count of pending approvals for a skill
|
|
183
|
+
*
|
|
184
|
+
* @param skillId - The quarantine entry ID
|
|
185
|
+
* @returns Count of pending approved entries
|
|
186
|
+
*/
|
|
187
|
+
getPendingApprovalCount(skillId) {
|
|
188
|
+
const { count } = this.db.prepare(COUNT_PENDING_APPROVALS_QUERY).get(skillId);
|
|
189
|
+
return count;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// ============================================================================
|
|
193
|
+
// Helpers
|
|
194
|
+
// ============================================================================
|
|
195
|
+
/**
|
|
196
|
+
* Convert a database row to a domain object
|
|
197
|
+
*/
|
|
198
|
+
function rowToEntry(row) {
|
|
199
|
+
return {
|
|
200
|
+
id: row.id,
|
|
201
|
+
skillId: row.skill_id,
|
|
202
|
+
reviewerId: row.reviewer_id,
|
|
203
|
+
reviewerEmail: row.reviewer_email,
|
|
204
|
+
decision: row.decision,
|
|
205
|
+
reason: row.reason,
|
|
206
|
+
createdAt: row.created_at,
|
|
207
|
+
completedAt: row.completed_at,
|
|
208
|
+
requiredApprovals: row.required_approvals,
|
|
209
|
+
isComplete: row.is_complete === 1,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=ApprovalRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApprovalRepository.js","sourceRoot":"","sources":["../../../../src/repositories/quarantine/ApprovalRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,4 +7,6 @@ export * from './types.js';
|
|
|
7
7
|
export * from './queries.js';
|
|
8
8
|
export * from './query-builder.js';
|
|
9
9
|
export { QuarantineRepository } from './QuarantineRepository.js';
|
|
10
|
+
export { ApprovalRepository } from './ApprovalRepository.js';
|
|
11
|
+
export type { ApprovalRow, ApprovalEntry, RecordApprovalInput } from './ApprovalRepository.js';
|
|
10
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/repositories/quarantine/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/repositories/quarantine/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/repositories/quarantine/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/repositories/quarantine/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
/**
|
|
8
8
|
* Types of security events that are audited
|
|
9
9
|
*/
|
|
10
|
-
export type AuditEventType = 'url_fetch' | 'file_access' | 'skill_install' | 'skill_uninstall' | 'security_scan' | 'cache_operation' | 'source_sync' | 'config_change' | 'quarantine_authenticated_review' | 'quarantine_multi_approval' | 'quarantine_multi_approval_complete' | 'quarantine_multi_approval_cancelled' | 'security_feature_flag_override';
|
|
10
|
+
export type AuditEventType = 'url_fetch' | 'file_access' | 'skill_install' | 'skill_uninstall' | 'security_scan' | 'cache_operation' | 'source_sync' | 'config_change' | 'quarantine_authenticated_review' | 'quarantine_multi_approval' | 'quarantine_multi_approval_complete' | 'quarantine_multi_approval_cancelled' | 'quarantine_multi_approval_timeout' | 'security_feature_flag_override';
|
|
11
11
|
/**
|
|
12
12
|
* Actor performing the action
|
|
13
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-types.d.ts","sourceRoot":"","sources":["../../../src/security/audit-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,aAAa,GACb,eAAe,GACf,iBAAiB,GACjB,eAAe,GACf,iBAAiB,GACjB,aAAa,GACb,eAAe,GAEf,iCAAiC,GACjC,2BAA2B,GAC3B,oCAAoC,GACpC,qCAAqC,
|
|
1
|
+
{"version":3,"file":"audit-types.d.ts","sourceRoot":"","sources":["../../../src/security/audit-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,aAAa,GACb,eAAe,GACf,iBAAiB,GACjB,eAAe,GACf,iBAAiB,GACjB,aAAa,GACb,eAAe,GAEf,iCAAiC,GACjC,2BAA2B,GAC3B,oCAAoC,GACpC,qCAAqC,GACrC,mCAAmC,GAEnC,gCAAgC,CAAA;AAEpC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAA;AAE/E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;AAErE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,cAAc,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,UAAU,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,CAAA;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,cAAc,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,UAAU,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,cAAc,CAAA;IAC3B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAA;AAEnC;;GAEG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAA;AAEtC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;IAC9C,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAC7C,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-types.js","sourceRoot":"","sources":["../../../src/security/audit-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"audit-types.js","sourceRoot":"","sources":["../../../src/security/audit-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6EH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAEnC;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAA,CAAC,WAAW"}
|
|
@@ -19,7 +19,7 @@ export function toMinimalRefs(report) {
|
|
|
19
19
|
return report.findings.map((finding) => {
|
|
20
20
|
const line = finding.lineNumber ?? 0;
|
|
21
21
|
const severity = finding.severity.toUpperCase();
|
|
22
|
-
const message = finding.message.replace(/"/g, '\\"');
|
|
22
|
+
const message = finding.message.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
23
23
|
// Format: skill_id:line:severity:type:message
|
|
24
24
|
return `${report.skillId}:${line}:${severity}:${finding.type}:${message}`;
|
|
25
25
|
});
|