@rexymayderio/sentinel 0.1.0

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.
Files changed (191) hide show
  1. package/README.md +295 -0
  2. package/dist/acquire/acquirer.d.ts +38 -0
  3. package/dist/acquire/acquirer.d.ts.map +1 -0
  4. package/dist/acquire/acquirer.js +178 -0
  5. package/dist/acquire/acquirer.js.map +1 -0
  6. package/dist/adapters/cli-approval-prompt.d.ts +13 -0
  7. package/dist/adapters/cli-approval-prompt.d.ts.map +1 -0
  8. package/dist/adapters/cli-approval-prompt.js +44 -0
  9. package/dist/adapters/cli-approval-prompt.js.map +1 -0
  10. package/dist/adapters/github-repo-client.d.ts +9 -0
  11. package/dist/adapters/github-repo-client.d.ts.map +1 -0
  12. package/dist/adapters/github-repo-client.js +48 -0
  13. package/dist/adapters/github-repo-client.js.map +1 -0
  14. package/dist/adapters/index.d.ts +5 -0
  15. package/dist/adapters/index.d.ts.map +1 -0
  16. package/dist/adapters/index.js +5 -0
  17. package/dist/adapters/index.js.map +1 -0
  18. package/dist/adapters/node-process-runner.d.ts +8 -0
  19. package/dist/adapters/node-process-runner.d.ts.map +1 -0
  20. package/dist/adapters/node-process-runner.js +21 -0
  21. package/dist/adapters/node-process-runner.js.map +1 -0
  22. package/dist/adapters/npm-registry-client.d.ts +8 -0
  23. package/dist/adapters/npm-registry-client.d.ts.map +1 -0
  24. package/dist/adapters/npm-registry-client.js +66 -0
  25. package/dist/adapters/npm-registry-client.js.map +1 -0
  26. package/dist/analyzers/ai-prompt-analyzer.d.ts +7 -0
  27. package/dist/analyzers/ai-prompt-analyzer.d.ts.map +1 -0
  28. package/dist/analyzers/ai-prompt-analyzer.js +88 -0
  29. package/dist/analyzers/ai-prompt-analyzer.js.map +1 -0
  30. package/dist/analyzers/analyzer.d.ts +14 -0
  31. package/dist/analyzers/analyzer.d.ts.map +1 -0
  32. package/dist/analyzers/analyzer.js +11 -0
  33. package/dist/analyzers/analyzer.js.map +1 -0
  34. package/dist/analyzers/dependency-analyzer.d.ts +10 -0
  35. package/dist/analyzers/dependency-analyzer.d.ts.map +1 -0
  36. package/dist/analyzers/dependency-analyzer.js +79 -0
  37. package/dist/analyzers/dependency-analyzer.js.map +1 -0
  38. package/dist/analyzers/index.d.ts +13 -0
  39. package/dist/analyzers/index.d.ts.map +1 -0
  40. package/dist/analyzers/index.js +30 -0
  41. package/dist/analyzers/index.js.map +1 -0
  42. package/dist/analyzers/install-script-analyzer.d.ts +7 -0
  43. package/dist/analyzers/install-script-analyzer.d.ts.map +1 -0
  44. package/dist/analyzers/install-script-analyzer.js +64 -0
  45. package/dist/analyzers/install-script-analyzer.js.map +1 -0
  46. package/dist/analyzers/match-evidence.d.ts +6 -0
  47. package/dist/analyzers/match-evidence.d.ts.map +1 -0
  48. package/dist/analyzers/match-evidence.js +15 -0
  49. package/dist/analyzers/match-evidence.js.map +1 -0
  50. package/dist/analyzers/metadata-analyzer.d.ts +7 -0
  51. package/dist/analyzers/metadata-analyzer.d.ts.map +1 -0
  52. package/dist/analyzers/metadata-analyzer.js +105 -0
  53. package/dist/analyzers/metadata-analyzer.js.map +1 -0
  54. package/dist/analyzers/network-analyzer.d.ts +7 -0
  55. package/dist/analyzers/network-analyzer.d.ts.map +1 -0
  56. package/dist/analyzers/network-analyzer.js +47 -0
  57. package/dist/analyzers/network-analyzer.js.map +1 -0
  58. package/dist/analyzers/rules/index.d.ts +19 -0
  59. package/dist/analyzers/rules/index.d.ts.map +1 -0
  60. package/dist/analyzers/rules/index.js +70 -0
  61. package/dist/analyzers/rules/index.js.map +1 -0
  62. package/dist/analyzers/secret-analyzer.d.ts +7 -0
  63. package/dist/analyzers/secret-analyzer.d.ts.map +1 -0
  64. package/dist/analyzers/secret-analyzer.js +33 -0
  65. package/dist/analyzers/secret-analyzer.js.map +1 -0
  66. package/dist/analyzers/source-analyzer.d.ts +7 -0
  67. package/dist/analyzers/source-analyzer.d.ts.map +1 -0
  68. package/dist/analyzers/source-analyzer.js +73 -0
  69. package/dist/analyzers/source-analyzer.js.map +1 -0
  70. package/dist/analyzers/static-code-analyzer.d.ts +7 -0
  71. package/dist/analyzers/static-code-analyzer.d.ts.map +1 -0
  72. package/dist/analyzers/static-code-analyzer.js +67 -0
  73. package/dist/analyzers/static-code-analyzer.js.map +1 -0
  74. package/dist/analyzers/test-path.d.ts +2 -0
  75. package/dist/analyzers/test-path.d.ts.map +1 -0
  76. package/dist/analyzers/test-path.js +32 -0
  77. package/dist/analyzers/test-path.js.map +1 -0
  78. package/dist/cli/index.d.ts +3 -0
  79. package/dist/cli/index.d.ts.map +1 -0
  80. package/dist/cli/index.js +176 -0
  81. package/dist/cli/index.js.map +1 -0
  82. package/dist/cli/spinner.d.ts +5 -0
  83. package/dist/cli/spinner.d.ts.map +1 -0
  84. package/dist/cli/spinner.js +39 -0
  85. package/dist/cli/spinner.js.map +1 -0
  86. package/dist/core/index.d.ts +3 -0
  87. package/dist/core/index.d.ts.map +1 -0
  88. package/dist/core/index.js +3 -0
  89. package/dist/core/index.js.map +1 -0
  90. package/dist/core/permissions.d.ts +4 -0
  91. package/dist/core/permissions.d.ts.map +1 -0
  92. package/dist/core/permissions.js +28 -0
  93. package/dist/core/permissions.js.map +1 -0
  94. package/dist/core/sentinel.d.ts +32 -0
  95. package/dist/core/sentinel.d.ts.map +1 -0
  96. package/dist/core/sentinel.js +164 -0
  97. package/dist/core/sentinel.js.map +1 -0
  98. package/dist/domain/artifact.d.ts +34 -0
  99. package/dist/domain/artifact.d.ts.map +1 -0
  100. package/dist/domain/artifact.js +2 -0
  101. package/dist/domain/artifact.js.map +1 -0
  102. package/dist/domain/finding.d.ts +22 -0
  103. package/dist/domain/finding.d.ts.map +1 -0
  104. package/dist/domain/finding.js +30 -0
  105. package/dist/domain/finding.js.map +1 -0
  106. package/dist/domain/index.d.ts +7 -0
  107. package/dist/domain/index.d.ts.map +1 -0
  108. package/dist/domain/index.js +7 -0
  109. package/dist/domain/index.js.map +1 -0
  110. package/dist/domain/permission.d.ts +8 -0
  111. package/dist/domain/permission.d.ts.map +1 -0
  112. package/dist/domain/permission.js +21 -0
  113. package/dist/domain/permission.js.map +1 -0
  114. package/dist/domain/report.d.ts +35 -0
  115. package/dist/domain/report.d.ts.map +1 -0
  116. package/dist/domain/report.js +2 -0
  117. package/dist/domain/report.js.map +1 -0
  118. package/dist/domain/risk.d.ts +14 -0
  119. package/dist/domain/risk.d.ts.map +1 -0
  120. package/dist/domain/risk.js +15 -0
  121. package/dist/domain/risk.js.map +1 -0
  122. package/dist/domain/target.d.ts +12 -0
  123. package/dist/domain/target.d.ts.map +1 -0
  124. package/dist/domain/target.js +43 -0
  125. package/dist/domain/target.js.map +1 -0
  126. package/dist/engine/data-assessment.d.ts +10 -0
  127. package/dist/engine/data-assessment.d.ts.map +1 -0
  128. package/dist/engine/data-assessment.js +39 -0
  129. package/dist/engine/data-assessment.js.map +1 -0
  130. package/dist/engine/default-policy.d.ts +16 -0
  131. package/dist/engine/default-policy.d.ts.map +1 -0
  132. package/dist/engine/default-policy.js +15 -0
  133. package/dist/engine/default-policy.js.map +1 -0
  134. package/dist/engine/index.d.ts +4 -0
  135. package/dist/engine/index.d.ts.map +1 -0
  136. package/dist/engine/index.js +4 -0
  137. package/dist/engine/index.js.map +1 -0
  138. package/dist/engine/policy-engine.d.ts +13 -0
  139. package/dist/engine/policy-engine.d.ts.map +1 -0
  140. package/dist/engine/policy-engine.js +78 -0
  141. package/dist/engine/policy-engine.js.map +1 -0
  142. package/dist/engine/risk-calculator.d.ts +15 -0
  143. package/dist/engine/risk-calculator.d.ts.map +1 -0
  144. package/dist/engine/risk-calculator.js +57 -0
  145. package/dist/engine/risk-calculator.js.map +1 -0
  146. package/dist/factory.d.ts +14 -0
  147. package/dist/factory.d.ts.map +1 -0
  148. package/dist/factory.js +25 -0
  149. package/dist/factory.js.map +1 -0
  150. package/dist/index.d.ts +4 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +4 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/mcp/server.d.ts +3 -0
  155. package/dist/mcp/server.d.ts.map +1 -0
  156. package/dist/mcp/server.js +151 -0
  157. package/dist/mcp/server.js.map +1 -0
  158. package/dist/ports/approval-prompt.d.ts +5 -0
  159. package/dist/ports/approval-prompt.d.ts.map +1 -0
  160. package/dist/ports/approval-prompt.js +2 -0
  161. package/dist/ports/approval-prompt.js.map +1 -0
  162. package/dist/ports/clock.d.ts +5 -0
  163. package/dist/ports/clock.d.ts.map +1 -0
  164. package/dist/ports/clock.js +4 -0
  165. package/dist/ports/clock.js.map +1 -0
  166. package/dist/ports/index.d.ts +6 -0
  167. package/dist/ports/index.d.ts.map +1 -0
  168. package/dist/ports/index.js +6 -0
  169. package/dist/ports/index.js.map +1 -0
  170. package/dist/ports/process-runner.d.ts +12 -0
  171. package/dist/ports/process-runner.d.ts.map +1 -0
  172. package/dist/ports/process-runner.js +2 -0
  173. package/dist/ports/process-runner.js.map +1 -0
  174. package/dist/ports/registry-client.d.ts +14 -0
  175. package/dist/ports/registry-client.d.ts.map +1 -0
  176. package/dist/ports/registry-client.js +2 -0
  177. package/dist/ports/registry-client.js.map +1 -0
  178. package/dist/ports/repo-client.d.ts +18 -0
  179. package/dist/ports/repo-client.d.ts.map +1 -0
  180. package/dist/ports/repo-client.js +2 -0
  181. package/dist/ports/repo-client.js.map +1 -0
  182. package/dist/report/index.d.ts +2 -0
  183. package/dist/report/index.d.ts.map +1 -0
  184. package/dist/report/index.js +2 -0
  185. package/dist/report/index.js.map +1 -0
  186. package/dist/report/report-generator.d.ts +29 -0
  187. package/dist/report/report-generator.d.ts.map +1 -0
  188. package/dist/report/report-generator.js +167 -0
  189. package/dist/report/report-generator.js.map +1 -0
  190. package/package.json +50 -0
  191. package/skills/sentinel/SKILL.md +525 -0
@@ -0,0 +1,7 @@
1
+ export * from './target.js';
2
+ export * from './finding.js';
3
+ export * from './risk.js';
4
+ export * from './artifact.js';
5
+ export * from './permission.js';
6
+ export * from './report.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const PERMISSION_TYPES: readonly ["filesystem-read", "filesystem-write", "filesystem-delete", "network-internet", "network-localhost", "network-lan", "shell", "clipboard", "camera", "microphone", "notifications", "browser", "mcp-tools", "secrets", "git", "ssh", "docker", "kubernetes"];
2
+ export type PermissionType = (typeof PERMISSION_TYPES)[number];
3
+ export interface Permission {
4
+ readonly type: PermissionType;
5
+ readonly description: string;
6
+ readonly source?: string;
7
+ }
8
+ //# sourceMappingURL=permission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../../src/domain/permission.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,uQAmBnB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,21 @@
1
+ export const PERMISSION_TYPES = [
2
+ 'filesystem-read',
3
+ 'filesystem-write',
4
+ 'filesystem-delete',
5
+ 'network-internet',
6
+ 'network-localhost',
7
+ 'network-lan',
8
+ 'shell',
9
+ 'clipboard',
10
+ 'camera',
11
+ 'microphone',
12
+ 'notifications',
13
+ 'browser',
14
+ 'mcp-tools',
15
+ 'secrets',
16
+ 'git',
17
+ 'ssh',
18
+ 'docker',
19
+ 'kubernetes',
20
+ ];
21
+ //# sourceMappingURL=permission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/domain/permission.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;IAClB,mBAAmB;IACnB,aAAa;IACb,OAAO;IACP,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,eAAe;IACf,SAAS;IACT,WAAW;IACX,SAAS;IACT,KAAK;IACL,KAAK;IACL,QAAQ;IACR,YAAY;CACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { Finding } from './finding.js';
2
+ import type { Permission } from './permission.js';
3
+ import type { PolicyDecision } from './risk.js';
4
+ import type { RiskScore } from './risk.js';
5
+ import type { Target } from './target.js';
6
+ export declare const REPORT_FORMATS: readonly ["terminal", "json", "markdown", "sarif", "html", "pdf"];
7
+ export type ReportFormat = (typeof REPORT_FORMATS)[number];
8
+ export interface PolicyResult {
9
+ readonly decision: PolicyDecision;
10
+ readonly reasons: string[];
11
+ readonly overrides: string[];
12
+ }
13
+ export interface DataAssessment {
14
+ readonly sufficient: boolean;
15
+ readonly confidence: number;
16
+ readonly reasons: string[];
17
+ }
18
+ export interface VerificationReport {
19
+ readonly target: Target;
20
+ readonly findings: Finding[];
21
+ readonly risk: RiskScore;
22
+ readonly policy: PolicyResult;
23
+ readonly permissions: Permission[];
24
+ readonly dataAssessment: DataAssessment;
25
+ readonly summary: string;
26
+ readonly recommendedAction: string;
27
+ readonly scannedAt: string;
28
+ readonly durationMs: number;
29
+ }
30
+ export interface InstallResult {
31
+ readonly success: boolean;
32
+ readonly message: string;
33
+ readonly report: VerificationReport;
34
+ }
35
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/domain/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,eAAO,MAAM,cAAc,mEAAoE,CAAC;AAChG,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC"}
@@ -0,0 +1,2 @@
1
+ export const REPORT_FORMATS = ['terminal', 'json', 'markdown', 'sarif', 'html', 'pdf'];
2
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/domain/report.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare const RISK_LEVELS: readonly ["LOW", "MEDIUM", "HIGH", "CRITICAL"];
2
+ export type RiskLevel = (typeof RISK_LEVELS)[number];
3
+ export declare const POLICY_DECISIONS: readonly ["AUTO_APPROVE", "APPROVE", "WARN", "REQUIRE_APPROVAL", "BLOCK"];
4
+ export type PolicyDecision = (typeof POLICY_DECISIONS)[number];
5
+ export interface RiskScore {
6
+ readonly score: number;
7
+ readonly level: RiskLevel;
8
+ readonly confidence: number;
9
+ readonly positiveSignals: number;
10
+ readonly negativeSignals: number;
11
+ }
12
+ export declare function scoreToLevel(score: number): RiskLevel;
13
+ export declare function clampScore(score: number): number;
14
+ //# sourceMappingURL=risk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.d.ts","sourceRoot":"","sources":["../../src/domain/risk.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,gDAAiD,CAAC;AAC1E,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,gBAAgB,2EAA4E,CAAC;AAC1G,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAKrD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
@@ -0,0 +1,15 @@
1
+ export const RISK_LEVELS = ['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
2
+ export const POLICY_DECISIONS = ['AUTO_APPROVE', 'APPROVE', 'WARN', 'REQUIRE_APPROVAL', 'BLOCK'];
3
+ export function scoreToLevel(score) {
4
+ if (score >= 80)
5
+ return 'CRITICAL';
6
+ if (score >= 50)
7
+ return 'HIGH';
8
+ if (score >= 20)
9
+ return 'MEDIUM';
10
+ return 'LOW';
11
+ }
12
+ export function clampScore(score) {
13
+ return Math.max(0, Math.min(100, Math.round(score)));
14
+ }
15
+ //# sourceMappingURL=risk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.js","sourceRoot":"","sources":["../../src/domain/risk.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAU,CAAC;AAG1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAU,CAAC;AAW1G,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,UAAU,CAAC;IACnC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const ECOSYSTEMS: readonly ["npm", "github", "skill", "local", "mcp", "pip", "uv", "cargo", "go", "docker", "vscode", "cursor-rules", "git", "zip"];
2
+ export type Ecosystem = (typeof ECOSYSTEMS)[number];
3
+ export declare const MVP_ECOSYSTEMS: Ecosystem[];
4
+ export interface Target {
5
+ readonly ecosystem: Ecosystem;
6
+ readonly raw: string;
7
+ readonly name: string;
8
+ readonly version?: string;
9
+ }
10
+ export declare function parseTarget(ecosystem: string, raw: string): Target;
11
+ export declare function isMvpEcosystem(ecosystem: Ecosystem): boolean;
12
+ //# sourceMappingURL=target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../src/domain/target.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,mIAeb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,eAAO,MAAM,cAAc,EAAE,SAAS,EAAwC,CAAC;AAE/E,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAsBlE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAE5D"}
@@ -0,0 +1,43 @@
1
+ export const ECOSYSTEMS = [
2
+ 'npm',
3
+ 'github',
4
+ 'skill',
5
+ 'local',
6
+ 'mcp',
7
+ 'pip',
8
+ 'uv',
9
+ 'cargo',
10
+ 'go',
11
+ 'docker',
12
+ 'vscode',
13
+ 'cursor-rules',
14
+ 'git',
15
+ 'zip',
16
+ ];
17
+ export const MVP_ECOSYSTEMS = ['npm', 'github', 'skill', 'local'];
18
+ export function parseTarget(ecosystem, raw) {
19
+ const normalized = ecosystem.toLowerCase();
20
+ if (!ECOSYSTEMS.includes(normalized)) {
21
+ throw new Error(`Unsupported ecosystem: ${ecosystem}`);
22
+ }
23
+ let name = raw;
24
+ let version;
25
+ if (normalized === 'npm' && raw.includes('@') && !raw.startsWith('@')) {
26
+ const atIndex = raw.lastIndexOf('@');
27
+ name = raw.slice(0, atIndex);
28
+ version = raw.slice(atIndex + 1);
29
+ }
30
+ else if (normalized === 'npm' && raw.startsWith('@') && raw.includes('@', 1)) {
31
+ const atIndex = raw.lastIndexOf('@');
32
+ name = raw.slice(0, atIndex);
33
+ version = raw.slice(atIndex + 1);
34
+ }
35
+ else if (normalized === 'github') {
36
+ name = raw.replace(/^https?:\/\/github\.com\//, '').replace(/\.git$/, '').replace(/\/$/, '');
37
+ }
38
+ return { ecosystem: normalized, raw, name, version };
39
+ }
40
+ export function isMvpEcosystem(ecosystem) {
41
+ return MVP_ECOSYSTEMS.includes(ecosystem);
42
+ }
43
+ //# sourceMappingURL=target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/domain/target.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK;IACL,QAAQ;IACR,OAAO;IACP,OAAO;IACP,KAAK;IACL,KAAK;IACL,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,QAAQ;IACR,QAAQ;IACR,cAAc;IACd,KAAK;IACL,KAAK;CACG,CAAC;AAIX,MAAM,CAAC,MAAM,cAAc,GAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAS/E,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,GAAW;IACxD,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAe,CAAC;IACxD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,IAAI,OAA2B,CAAC;IAEhC,IAAI,UAAU,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7B,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,UAAU,KAAK,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7B,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAoB;IACjD,OAAO,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Artifact } from '../domain/artifact.js';
2
+ import type { Finding } from '../domain/finding.js';
3
+ import type { DataAssessment } from '../domain/report.js';
4
+ import type { RiskScore } from '../domain/risk.js';
5
+ import type { Target } from '../domain/target.js';
6
+ import type { PolicyConfig } from './default-policy.js';
7
+ export declare function hasMeaningfulMetadata(metadata: Artifact['metadata']): boolean;
8
+ export declare function assessData(target: Target, artifact: Artifact, findings: Finding[], risk: RiskScore, config: PolicyConfig): DataAssessment;
9
+ export declare function unverifiableAssessment(reason: string): DataAssessment;
10
+ //# sourceMappingURL=data-assessment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-assessment.d.ts","sourceRoot":"","sources":["../../src/engine/data-assessment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,CAS7E;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,YAAY,GACnB,cAAc,CA4BhB;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAMrE"}
@@ -0,0 +1,39 @@
1
+ const REMOTE_ECOSYSTEMS = ['npm', 'github', 'pip', 'uv', 'cargo', 'go', 'docker', 'vscode', 'mcp', 'git'];
2
+ export function hasMeaningfulMetadata(metadata) {
3
+ return !!(metadata.version ||
4
+ metadata.publishDate ||
5
+ metadata.repository ||
6
+ metadata.downloadCount !== undefined ||
7
+ metadata.license ||
8
+ metadata.author);
9
+ }
10
+ export function assessData(target, artifact, findings, risk, config) {
11
+ const reasons = [];
12
+ const fileCount = artifact.files.length;
13
+ const isRemote = REMOTE_ECOSYSTEMS.includes(target.ecosystem);
14
+ if (fileCount === 0) {
15
+ reasons.push('No files were available to scan');
16
+ }
17
+ if (isRemote && !hasMeaningfulMetadata(artifact.metadata)) {
18
+ reasons.push('No package metadata could be gathered from the registry or source');
19
+ }
20
+ if (risk.confidence < config.minConfidence) {
21
+ reasons.push(`Analysis confidence ${risk.confidence}% is below the minimum threshold (${config.minConfidence}%)`);
22
+ }
23
+ if (findings.length === 0 && fileCount === 0) {
24
+ reasons.push('No analyzable signals were gathered');
25
+ }
26
+ return {
27
+ sufficient: reasons.length === 0,
28
+ confidence: risk.confidence,
29
+ reasons,
30
+ };
31
+ }
32
+ export function unverifiableAssessment(reason) {
33
+ return {
34
+ sufficient: false,
35
+ confidence: 0,
36
+ reasons: [reason],
37
+ };
38
+ }
39
+ //# sourceMappingURL=data-assessment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-assessment.js","sourceRoot":"","sources":["../../src/engine/data-assessment.ts"],"names":[],"mappings":"AAOA,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAE1G,MAAM,UAAU,qBAAqB,CAAC,QAA8B;IAClE,OAAO,CAAC,CAAC,CACP,QAAQ,CAAC,OAAO;QAChB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,UAAU;QACnB,QAAQ,CAAC,aAAa,KAAK,SAAS;QACpC,QAAQ,CAAC,OAAO;QAChB,QAAQ,CAAC,MAAM,CAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,MAAc,EACd,QAAkB,EAClB,QAAmB,EACnB,IAAe,EACf,MAAoB;IAEpB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IACxC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE9D,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,QAAQ,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CACV,uBAAuB,IAAI,CAAC,UAAU,qCAAqC,MAAM,CAAC,aAAa,IAAI,CACpG,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;QAChC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,OAAO;QACL,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,CAAC,MAAM,CAAC;KAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface PolicyConfig {
2
+ readonly blockThreshold: number;
3
+ readonly warnThreshold: number;
4
+ readonly minConfidence: number;
5
+ readonly trustedPublishers: string[];
6
+ readonly corporateWhitelist: string[];
7
+ readonly corporateBlacklist: string[];
8
+ readonly autoApproveTrusted: boolean;
9
+ readonly requireApprovalForNetwork: boolean;
10
+ readonly warnOnInstallScript: boolean;
11
+ readonly warnOnShellAccess: boolean;
12
+ readonly allowOverrides: boolean;
13
+ readonly scoreTestCodeFully: boolean;
14
+ }
15
+ export declare const DEFAULT_POLICY: PolicyConfig;
16
+ //# sourceMappingURL=default-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-policy.d.ts","sourceRoot":"","sources":["../../src/engine/default-policy.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;CACtC;AAED,eAAO,MAAM,cAAc,EAAE,YAa5B,CAAC"}
@@ -0,0 +1,15 @@
1
+ export const DEFAULT_POLICY = {
2
+ blockThreshold: 80,
3
+ warnThreshold: 50,
4
+ minConfidence: 40,
5
+ trustedPublishers: [],
6
+ corporateWhitelist: [],
7
+ corporateBlacklist: [],
8
+ autoApproveTrusted: true,
9
+ requireApprovalForNetwork: true,
10
+ warnOnInstallScript: true,
11
+ warnOnShellAccess: true,
12
+ allowOverrides: true,
13
+ scoreTestCodeFully: false,
14
+ };
15
+ //# sourceMappingURL=default-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-policy.js","sourceRoot":"","sources":["../../src/engine/default-policy.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,EAAE;IACjB,iBAAiB,EAAE,EAAE;IACrB,kBAAkB,EAAE,EAAE;IACtB,kBAAkB,EAAE,EAAE;IACtB,kBAAkB,EAAE,IAAI;IACxB,yBAAyB,EAAE,IAAI;IAC/B,mBAAmB,EAAE,IAAI;IACzB,iBAAiB,EAAE,IAAI;IACvB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,KAAK;CAC1B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './risk-calculator.js';
2
+ export * from './policy-engine.js';
3
+ export * from './default-policy.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './risk-calculator.js';
2
+ export * from './policy-engine.js';
3
+ export * from './default-policy.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Finding } from '../domain/finding.js';
2
+ import type { Permission } from '../domain/permission.js';
3
+ import type { DataAssessment, PolicyResult } from '../domain/report.js';
4
+ import type { RiskScore } from '../domain/risk.js';
5
+ import type { Target } from '../domain/target.js';
6
+ import type { PolicyConfig } from './default-policy.js';
7
+ export declare class PolicyEngine {
8
+ private readonly config;
9
+ constructor(config?: PolicyConfig);
10
+ evaluate(target: Target, risk: RiskScore, findings: Finding[], permissions: Permission[], dataAssessment: DataAssessment): PolicyResult;
11
+ }
12
+ export declare function loadPolicyConfig(overrides?: Partial<PolicyConfig>): PolicyConfig;
13
+ //# sourceMappingURL=policy-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-engine.d.ts","sourceRoot":"","sources":["../../src/engine/policy-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAkB,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,YAA6B;IAElE,QAAQ,CACN,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,OAAO,EAAE,EACnB,WAAW,EAAE,UAAU,EAAE,EACzB,cAAc,EAAE,cAAc,GAC7B,YAAY;CAqFhB;AAED,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAEhF"}
@@ -0,0 +1,78 @@
1
+ import { DEFAULT_POLICY } from './default-policy.js';
2
+ export class PolicyEngine {
3
+ config;
4
+ constructor(config = DEFAULT_POLICY) {
5
+ this.config = config;
6
+ }
7
+ evaluate(target, risk, findings, permissions, dataAssessment) {
8
+ const reasons = [];
9
+ const overrides = [];
10
+ const name = target.name.toLowerCase();
11
+ if (this.config.corporateBlacklist.some((b) => name.includes(b.toLowerCase()))) {
12
+ return { decision: 'BLOCK', reasons: ['Package is on corporate blacklist'], overrides };
13
+ }
14
+ if (this.config.corporateWhitelist.some((w) => name.includes(w.toLowerCase()))) {
15
+ return { decision: 'AUTO_APPROVE', reasons: ['Package is on corporate whitelist'], overrides };
16
+ }
17
+ if (risk.score >= this.config.blockThreshold) {
18
+ reasons.push(`Risk score ${risk.score} exceeds block threshold (${this.config.blockThreshold})`);
19
+ return { decision: 'BLOCK', reasons, overrides };
20
+ }
21
+ if (!dataAssessment.sufficient) {
22
+ return {
23
+ decision: 'REQUIRE_APPROVAL',
24
+ reasons: [
25
+ 'Not enough data was gathered to verify this target automatically',
26
+ ...dataAssessment.reasons,
27
+ ],
28
+ overrides,
29
+ };
30
+ }
31
+ if (this.config.autoApproveTrusted) {
32
+ const verified = findings.some((f) => f.ruleId === 'verified-publisher' && f.positive);
33
+ if (verified) {
34
+ reasons.push('Verified publisher');
35
+ return { decision: 'AUTO_APPROVE', reasons, overrides };
36
+ }
37
+ if (this.config.trustedPublishers.some((p) => name.includes(p.toLowerCase()))) {
38
+ reasons.push('Trusted publisher');
39
+ return { decision: 'AUTO_APPROVE', reasons, overrides };
40
+ }
41
+ }
42
+ let decision = 'APPROVE';
43
+ if (this.config.warnOnInstallScript) {
44
+ const hasInstallScript = findings.some((f) => f.category === 'install-script' && f.ruleId?.startsWith('script-'));
45
+ if (hasInstallScript) {
46
+ reasons.push('Package has install scripts');
47
+ decision = 'WARN';
48
+ }
49
+ }
50
+ if (this.config.warnOnShellAccess) {
51
+ const hasShell = findings.some((f) => f.category === 'static-code' && ['spawn', 'exec', 'child-process', 'os-system', 'subprocess'].includes(f.ruleId ?? ''));
52
+ if (hasShell) {
53
+ reasons.push('Package requires shell access');
54
+ decision = decision === 'WARN' ? 'WARN' : 'REQUIRE_APPROVAL';
55
+ }
56
+ }
57
+ if (this.config.requireApprovalForNetwork) {
58
+ const hasNetwork = permissions.some((p) => p.type.startsWith('network-')) ||
59
+ findings.some((f) => f.category === 'network' && f.severity !== 'LOW');
60
+ if (hasNetwork) {
61
+ reasons.push('Package requires network access');
62
+ decision = 'REQUIRE_APPROVAL';
63
+ }
64
+ }
65
+ if (risk.score >= this.config.warnThreshold && decision === 'APPROVE') {
66
+ reasons.push(`Risk score ${risk.score} exceeds warn threshold (${this.config.warnThreshold})`);
67
+ decision = 'WARN';
68
+ }
69
+ if (reasons.length === 0) {
70
+ reasons.push('No policy violations detected');
71
+ }
72
+ return { decision, reasons, overrides };
73
+ }
74
+ }
75
+ export function loadPolicyConfig(overrides) {
76
+ return { ...DEFAULT_POLICY, ...overrides };
77
+ }
78
+ //# sourceMappingURL=policy-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-engine.js","sourceRoot":"","sources":["../../src/engine/policy-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Finding } from '../domain/finding.js';
2
+ import type { RiskScore } from '../domain/risk.js';
3
+ export declare const TEST_FINDING_WEIGHT = 0.1;
4
+ export interface AnalysisEvidence {
5
+ readonly hasMetadata: boolean;
6
+ readonly fileCount: number;
7
+ }
8
+ export interface RiskOptions {
9
+ readonly testFindingWeight?: number;
10
+ }
11
+ export declare class RiskCalculator {
12
+ calculate(findings: Finding[], evidence?: AnalysisEvidence, options?: RiskOptions): RiskScore;
13
+ private computeConfidence;
14
+ }
15
+ //# sourceMappingURL=risk-calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk-calculator.d.ts","sourceRoot":"","sources":["../../src/engine/risk-calculator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMnD,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAUvC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,qBAAa,cAAc;IACzB,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS;IA+B7F,OAAO,CAAC,iBAAiB;CAe1B"}
@@ -0,0 +1,57 @@
1
+ import { SEVERITY_WEIGHTS } from '../domain/finding.js';
2
+ import { clampScore, scoreToLevel } from '../domain/risk.js';
3
+ const POSITIVE_SIGNAL_WEIGHT = 5;
4
+ const MAX_POSITIVE_REDUCTION = 30;
5
+ export const TEST_FINDING_WEIGHT = 0.1;
6
+ const FULL_WEIGHT = 1;
7
+ const CONFIDENCE_METADATA = 35;
8
+ const CONFIDENCE_HAS_FILES = 25;
9
+ const CONFIDENCE_PER_FILE = 2;
10
+ const CONFIDENCE_MAX_FILE_BONUS = 20;
11
+ const CONFIDENCE_PER_SIGNAL = 2;
12
+ const CONFIDENCE_MAX_SIGNAL_BONUS = 20;
13
+ export class RiskCalculator {
14
+ calculate(findings, evidence, options) {
15
+ const testFindingWeight = options?.testFindingWeight ?? FULL_WEIGHT;
16
+ let negativeScore = 0;
17
+ let positiveReduction = 0;
18
+ let positiveSignals = 0;
19
+ let negativeSignals = 0;
20
+ for (const finding of findings) {
21
+ if (finding.positive) {
22
+ positiveSignals++;
23
+ positiveReduction += POSITIVE_SIGNAL_WEIGHT;
24
+ }
25
+ else if (finding.severity !== 'INFO') {
26
+ negativeSignals++;
27
+ const weight = finding.isTest ? testFindingWeight : FULL_WEIGHT;
28
+ negativeScore += SEVERITY_WEIGHTS[finding.severity] * weight;
29
+ }
30
+ }
31
+ const cappedReduction = Math.min(positiveReduction, MAX_POSITIVE_REDUCTION);
32
+ const finalScore = clampScore(negativeScore - cappedReduction);
33
+ const totalSignals = positiveSignals + negativeSignals;
34
+ return {
35
+ score: finalScore,
36
+ level: scoreToLevel(finalScore),
37
+ confidence: this.computeConfidence(totalSignals, evidence),
38
+ positiveSignals,
39
+ negativeSignals,
40
+ };
41
+ }
42
+ computeConfidence(totalSignals, evidence) {
43
+ if (!evidence) {
44
+ return totalSignals > 0 ? Math.min(100, 50 + totalSignals * 5) : 30;
45
+ }
46
+ let confidence = 0;
47
+ if (evidence.hasMetadata)
48
+ confidence += CONFIDENCE_METADATA;
49
+ if (evidence.fileCount > 0) {
50
+ confidence += CONFIDENCE_HAS_FILES;
51
+ confidence += Math.min(evidence.fileCount * CONFIDENCE_PER_FILE, CONFIDENCE_MAX_FILE_BONUS);
52
+ }
53
+ confidence += Math.min(totalSignals * CONFIDENCE_PER_SIGNAL, CONFIDENCE_MAX_SIGNAL_BONUS);
54
+ return clampScore(confidence);
55
+ }
56
+ }
57
+ //# sourceMappingURL=risk-calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk-calculator.js","sourceRoot":"","sources":["../../src/engine/risk-calculator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,yBAAyB,GAAG,EAAE,CAAC;AACrC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAWvC,MAAM,OAAO,cAAc;IACzB,SAAS,CAAC,QAAmB,EAAE,QAA2B,EAAE,OAAqB;QAC/E,MAAM,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,IAAI,WAAW,CAAC;QACpE,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,eAAe,EAAE,CAAC;gBAClB,iBAAiB,IAAI,sBAAsB,CAAC;YAC9C,CAAC;iBAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACvC,eAAe,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC;gBAChE,aAAa,IAAI,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,GAAG,eAAe,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,eAAe,GAAG,eAAe,CAAC;QAEvD,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC;YAC/B,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,QAAQ,CAAC;YAC1D,eAAe;YACf,eAAe;SAChB,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,YAAoB,EAAE,QAA2B;QACzE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,QAAQ,CAAC,WAAW;YAAE,UAAU,IAAI,mBAAmB,CAAC;QAC5D,IAAI,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YAC3B,UAAU,IAAI,oBAAoB,CAAC;YACnC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,mBAAmB,EAAE,yBAAyB,CAAC,CAAC;QAC9F,CAAC;QACD,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,qBAAqB,EAAE,2BAA2B,CAAC,CAAC;QAE1F,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import type { PolicyConfig } from './engine/default-policy.js';
2
+ import type { ReportFormat } from './domain/report.js';
3
+ import type { ApprovalPrompt } from './ports/approval-prompt.js';
4
+ import type { ProcessRunner } from './ports/process-runner.js';
5
+ export interface SentinelFactoryOptions {
6
+ policyConfig?: Partial<PolicyConfig>;
7
+ reportFormat?: ReportFormat;
8
+ autoApprove?: boolean;
9
+ approvalPrompt?: ApprovalPrompt;
10
+ processRunner?: ProcessRunner;
11
+ registryUrl?: string;
12
+ }
13
+ export declare function createDefaultSentinel(options?: SentinelFactoryOptions): import("./core/sentinel.js").Sentinel;
14
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,yCAkBzE"}
@@ -0,0 +1,25 @@
1
+ import { AcquirerRegistry, GithubAcquirer, LocalAcquirer, NpmAcquirer } from './acquire/acquirer.js';
2
+ import { createDefaultAnalyzers } from './analyzers/index.js';
3
+ import { CliApprovalPrompt } from './adapters/cli-approval-prompt.js';
4
+ import { GithubRepoClient } from './adapters/github-repo-client.js';
5
+ import { NodeProcessRunner } from './adapters/node-process-runner.js';
6
+ import { NpmRegistryClient } from './adapters/npm-registry-client.js';
7
+ import { createSentinel } from './core/sentinel.js';
8
+ export function createDefaultSentinel(options = {}) {
9
+ const registry = new NpmRegistryClient(options.registryUrl);
10
+ const repoClient = new GithubRepoClient();
11
+ const acquirerRegistry = new AcquirerRegistry();
12
+ acquirerRegistry.register(new NpmAcquirer(registry));
13
+ acquirerRegistry.register(new GithubAcquirer(repoClient));
14
+ acquirerRegistry.register(new LocalAcquirer('skill'));
15
+ acquirerRegistry.register(new LocalAcquirer('local'));
16
+ return createSentinel({
17
+ acquirerRegistry,
18
+ analyzers: createDefaultAnalyzers(registry),
19
+ policyConfig: options.policyConfig,
20
+ approvalPrompt: options.approvalPrompt ?? new CliApprovalPrompt(options.autoApprove),
21
+ processRunner: options.processRunner ?? new NodeProcessRunner(),
22
+ reportFormat: options.reportFormat,
23
+ });
24
+ }
25
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrG,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAepD,MAAM,UAAU,qBAAqB,CAAC,UAAkC,EAAE;IACxE,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAE1C,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAChD,gBAAgB,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,gBAAgB,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1D,gBAAgB,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,gBAAgB,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtD,OAAO,cAAc,CAAC;QACpB,gBAAgB;QAChB,SAAS,EAAE,sBAAsB,CAAC,QAAQ,CAAC;QAC3C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC;QACpF,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI,iBAAiB,EAAE;QAC/D,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './domain/index.js';
2
+ export * from './core/index.js';
3
+ export * from './factory.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export * from './domain/index.js';
2
+ export * from './core/index.js';
3
+ export * from './factory.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":""}