vaspera 2.8.0 → 2.9.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.
- package/CHANGELOG.md +55 -0
- package/README.md +111 -7
- package/dist/__tests__/agents/adversary/tactics/api.test.d.ts +5 -0
- package/dist/__tests__/agents/adversary/tactics/api.test.d.ts.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/api.test.js +369 -0
- package/dist/__tests__/agents/adversary/tactics/api.test.js.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/llm.test.d.ts +5 -0
- package/dist/__tests__/agents/adversary/tactics/llm.test.d.ts.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/llm.test.js +409 -0
- package/dist/__tests__/agents/adversary/tactics/llm.test.js.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/registry.test.d.ts +7 -0
- package/dist/__tests__/agents/adversary/tactics/registry.test.d.ts.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/registry.test.js +74 -0
- package/dist/__tests__/agents/adversary/tactics/registry.test.js.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/web-app.test.d.ts +7 -0
- package/dist/__tests__/agents/adversary/tactics/web-app.test.d.ts.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/web-app.test.js +374 -0
- package/dist/__tests__/agents/adversary/tactics/web-app.test.js.map +1 -0
- package/dist/__tests__/compliance-bundle.test.d.ts +9 -0
- package/dist/__tests__/compliance-bundle.test.d.ts.map +1 -0
- package/dist/__tests__/compliance-bundle.test.js +344 -0
- package/dist/__tests__/compliance-bundle.test.js.map +1 -0
- package/dist/__tests__/healthcare-compliance.test.d.ts +9 -0
- package/dist/__tests__/healthcare-compliance.test.d.ts.map +1 -0
- package/dist/__tests__/healthcare-compliance.test.js +233 -0
- package/dist/__tests__/healthcare-compliance.test.js.map +1 -0
- package/dist/action/diff-mode.d.ts +124 -8
- package/dist/action/diff-mode.d.ts.map +1 -1
- package/dist/action/diff-mode.js +384 -65
- package/dist/action/diff-mode.js.map +1 -1
- package/dist/action/diff-mode.test.js +3 -3
- package/dist/action/diff-mode.test.js.map +1 -1
- package/dist/action/pr-comment.test.js +1 -0
- package/dist/action/pr-comment.test.js.map +1 -1
- package/dist/action/sarif-upload.test.js +1 -0
- package/dist/action/sarif-upload.test.js.map +1 -1
- package/dist/agents/adversary/config.d.ts +25 -4
- package/dist/agents/adversary/config.d.ts.map +1 -1
- package/dist/agents/adversary/config.js +38 -8
- package/dist/agents/adversary/config.js.map +1 -1
- package/dist/agents/adversary/index.d.ts +7 -0
- package/dist/agents/adversary/index.d.ts.map +1 -1
- package/dist/agents/adversary/index.js +83 -1
- package/dist/agents/adversary/index.js.map +1 -1
- package/dist/agents/adversary/reporting/compliance-mapper.d.ts +108 -0
- package/dist/agents/adversary/reporting/compliance-mapper.d.ts.map +1 -0
- package/dist/agents/adversary/reporting/compliance-mapper.js +391 -0
- package/dist/agents/adversary/reporting/compliance-mapper.js.map +1 -0
- package/dist/agents/adversary/reporting/index.d.ts +10 -0
- package/dist/agents/adversary/reporting/index.d.ts.map +1 -0
- package/dist/agents/adversary/reporting/index.js +10 -0
- package/dist/agents/adversary/reporting/index.js.map +1 -0
- package/dist/agents/adversary/reporting/poc-generator.d.ts +44 -0
- package/dist/agents/adversary/reporting/poc-generator.d.ts.map +1 -0
- package/dist/agents/adversary/reporting/poc-generator.js +308 -0
- package/dist/agents/adversary/reporting/poc-generator.js.map +1 -0
- package/dist/agents/adversary/tactics/api.d.ts +13 -0
- package/dist/agents/adversary/tactics/api.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/api.js +815 -0
- package/dist/agents/adversary/tactics/api.js.map +1 -0
- package/dist/agents/adversary/tactics/auth.d.ts +13 -0
- package/dist/agents/adversary/tactics/auth.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/auth.js +676 -0
- package/dist/agents/adversary/tactics/auth.js.map +1 -0
- package/dist/agents/adversary/tactics/index.d.ts +129 -0
- package/dist/agents/adversary/tactics/index.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/index.js +199 -0
- package/dist/agents/adversary/tactics/index.js.map +1 -0
- package/dist/agents/adversary/tactics/infra.d.ts +13 -0
- package/dist/agents/adversary/tactics/infra.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/infra.js +827 -0
- package/dist/agents/adversary/tactics/infra.js.map +1 -0
- package/dist/agents/adversary/tactics/injection.d.ts +12 -0
- package/dist/agents/adversary/tactics/injection.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/injection.js +549 -0
- package/dist/agents/adversary/tactics/injection.js.map +1 -0
- package/dist/agents/adversary/tactics/llm.d.ts +13 -0
- package/dist/agents/adversary/tactics/llm.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/llm.js +767 -0
- package/dist/agents/adversary/tactics/llm.js.map +1 -0
- package/dist/agents/adversary/tactics/web-app.d.ts +13 -0
- package/dist/agents/adversary/tactics/web-app.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/web-app.js +717 -0
- package/dist/agents/adversary/tactics/web-app.js.map +1 -0
- package/dist/agents/adversary/types.d.ts +66 -10
- package/dist/agents/adversary/types.d.ts.map +1 -1
- package/dist/agents/zero-day-hunter.d.ts +1 -1
- package/dist/agents/zero-day-hunter.d.ts.map +1 -1
- package/dist/analysis/data-flow.d.ts +154 -0
- package/dist/analysis/data-flow.d.ts.map +1 -0
- package/dist/analysis/data-flow.js +393 -0
- package/dist/analysis/data-flow.js.map +1 -0
- package/dist/analysis/index.d.ts +9 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +9 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/badge-service/index.d.ts +144 -0
- package/dist/badge-service/index.d.ts.map +1 -0
- package/dist/badge-service/index.js +206 -0
- package/dist/badge-service/index.js.map +1 -0
- package/dist/certification/types.d.ts +1 -1
- package/dist/certification/types.d.ts.map +1 -1
- package/dist/certification/types.js.map +1 -1
- package/dist/commands/certification/certify.d.ts.map +1 -1
- package/dist/commands/certification/certify.js +18 -4
- package/dist/commands/certification/certify.js.map +1 -1
- package/dist/compliance/attestation.d.ts +39 -0
- package/dist/compliance/attestation.d.ts.map +1 -0
- package/dist/compliance/attestation.js +364 -0
- package/dist/compliance/attestation.js.map +1 -0
- package/dist/compliance/cfr42-part2.d.ts +42 -0
- package/dist/compliance/cfr42-part2.d.ts.map +1 -0
- package/dist/compliance/cfr42-part2.js +408 -0
- package/dist/compliance/cfr42-part2.js.map +1 -0
- package/dist/compliance/compliance-bundle.d.ts +100 -0
- package/dist/compliance/compliance-bundle.d.ts.map +1 -0
- package/dist/compliance/compliance-bundle.js +210 -0
- package/dist/compliance/compliance-bundle.js.map +1 -0
- package/dist/compliance/healthcare-bundle.d.ts +68 -0
- package/dist/compliance/healthcare-bundle.d.ts.map +1 -0
- package/dist/compliance/healthcare-bundle.js +104 -0
- package/dist/compliance/healthcare-bundle.js.map +1 -0
- package/dist/compliance/hipaa.d.ts.map +1 -1
- package/dist/compliance/hipaa.js +14 -11
- package/dist/compliance/hipaa.js.map +1 -1
- package/dist/compliance/index.d.ts +10 -2
- package/dist/compliance/index.d.ts.map +1 -1
- package/dist/compliance/index.js +9 -3
- package/dist/compliance/index.js.map +1 -1
- package/dist/compliance/mapper.d.ts.map +1 -1
- package/dist/compliance/mapper.js +3 -17
- package/dist/compliance/mapper.js.map +1 -1
- package/dist/compliance/nist-800-53.d.ts +22 -6
- package/dist/compliance/nist-800-53.d.ts.map +1 -1
- package/dist/compliance/nist-800-53.js +264 -272
- package/dist/compliance/nist-800-53.js.map +1 -1
- package/dist/compliance/report.d.ts +31 -2
- package/dist/compliance/report.d.ts.map +1 -1
- package/dist/compliance/report.js +255 -4
- package/dist/compliance/report.js.map +1 -1
- package/dist/compliance/types.d.ts +1 -1
- package/dist/compliance/types.d.ts.map +1 -1
- package/dist/config/flags.d.ts +12 -12
- package/dist/cost/index.d.ts +1 -1
- package/dist/cost/index.d.ts.map +1 -1
- package/dist/cost/index.js +1 -1
- package/dist/cost/index.js.map +1 -1
- package/dist/cost/tracker.d.ts +64 -0
- package/dist/cost/tracker.d.ts.map +1 -1
- package/dist/cost/tracker.js +165 -0
- package/dist/cost/tracker.js.map +1 -1
- package/dist/eval/fixtures/healthcare/audit-gaps.d.ts +28 -0
- package/dist/eval/fixtures/healthcare/audit-gaps.d.ts.map +1 -0
- package/dist/eval/fixtures/healthcare/audit-gaps.js +90 -0
- package/dist/eval/fixtures/healthcare/audit-gaps.js.map +1 -0
- package/dist/eval/fixtures/healthcare/consent-bypass.d.ts +31 -0
- package/dist/eval/fixtures/healthcare/consent-bypass.d.ts.map +1 -0
- package/dist/eval/fixtures/healthcare/consent-bypass.js +61 -0
- package/dist/eval/fixtures/healthcare/consent-bypass.js.map +1 -0
- package/dist/eval/fixtures/healthcare/phi-in-logs.d.ts +24 -0
- package/dist/eval/fixtures/healthcare/phi-in-logs.d.ts.map +1 -0
- package/dist/eval/fixtures/healthcare/phi-in-logs.js +41 -0
- package/dist/eval/fixtures/healthcare/phi-in-logs.js.map +1 -0
- package/dist/evidence/collector.d.ts +21 -0
- package/dist/evidence/collector.d.ts.map +1 -0
- package/dist/evidence/collector.js +340 -0
- package/dist/evidence/collector.js.map +1 -0
- package/dist/evidence/index.d.ts +11 -0
- package/dist/evidence/index.d.ts.map +1 -0
- package/dist/evidence/index.js +12 -0
- package/dist/evidence/index.js.map +1 -0
- package/dist/evidence/store.d.ts +39 -0
- package/dist/evidence/store.d.ts.map +1 -0
- package/dist/evidence/store.js +173 -0
- package/dist/evidence/store.js.map +1 -0
- package/dist/evidence/types.d.ts +175 -0
- package/dist/evidence/types.d.ts.map +1 -0
- package/dist/evidence/types.js +9 -0
- package/dist/evidence/types.js.map +1 -0
- package/dist/exporters/checkmarx.d.ts +18 -0
- package/dist/exporters/checkmarx.d.ts.map +1 -0
- package/dist/exporters/checkmarx.js +203 -0
- package/dist/exporters/checkmarx.js.map +1 -0
- package/dist/exporters/index.d.ts +22 -0
- package/dist/exporters/index.d.ts.map +1 -0
- package/dist/exporters/index.js +41 -0
- package/dist/exporters/index.js.map +1 -0
- package/dist/exporters/snyk.d.ts +18 -0
- package/dist/exporters/snyk.d.ts.map +1 -0
- package/dist/exporters/snyk.js +119 -0
- package/dist/exporters/snyk.js.map +1 -0
- package/dist/exporters/sonarqube.d.ts +18 -0
- package/dist/exporters/sonarqube.d.ts.map +1 -0
- package/dist/exporters/sonarqube.js +125 -0
- package/dist/exporters/sonarqube.js.map +1 -0
- package/dist/exporters/types.d.ts +190 -0
- package/dist/exporters/types.d.ts.map +1 -0
- package/dist/exporters/types.js +9 -0
- package/dist/exporters/types.js.map +1 -0
- package/dist/frontier/index.d.ts +12 -0
- package/dist/frontier/index.d.ts.map +1 -0
- package/dist/frontier/index.js +12 -0
- package/dist/frontier/index.js.map +1 -0
- package/dist/frontier/orchestrator.d.ts +73 -0
- package/dist/frontier/orchestrator.d.ts.map +1 -0
- package/dist/frontier/orchestrator.js +312 -0
- package/dist/frontier/orchestrator.js.map +1 -0
- package/dist/frontier/providers/stub.d.ts +32 -0
- package/dist/frontier/providers/stub.d.ts.map +1 -0
- package/dist/frontier/providers/stub.js +66 -0
- package/dist/frontier/providers/stub.js.map +1 -0
- package/dist/frontier/types.d.ts +318 -0
- package/dist/frontier/types.d.ts.map +1 -0
- package/dist/frontier/types.js +27 -0
- package/dist/frontier/types.js.map +1 -0
- package/dist/history/index.d.ts +13 -0
- package/dist/history/index.d.ts.map +1 -0
- package/dist/history/index.js +15 -0
- package/dist/history/index.js.map +1 -0
- package/dist/history/store.d.ts +74 -0
- package/dist/history/store.d.ts.map +1 -0
- package/dist/history/store.js +399 -0
- package/dist/history/store.js.map +1 -0
- package/dist/history/types.d.ts +282 -0
- package/dist/history/types.d.ts.map +1 -0
- package/dist/history/types.js +41 -0
- package/dist/history/types.js.map +1 -0
- package/dist/history/verify.d.ts +44 -0
- package/dist/history/verify.d.ts.map +1 -0
- package/dist/history/verify.js +230 -0
- package/dist/history/verify.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +431 -18
- package/dist/index.js.map +1 -1
- package/dist/multimodel/index.d.ts +1 -0
- package/dist/multimodel/index.d.ts.map +1 -1
- package/dist/multimodel/index.js +2 -0
- package/dist/multimodel/index.js.map +1 -1
- package/dist/multimodel/leaderboard.d.ts +116 -0
- package/dist/multimodel/leaderboard.d.ts.map +1 -0
- package/dist/multimodel/leaderboard.js +262 -0
- package/dist/multimodel/leaderboard.js.map +1 -0
- package/dist/observability/otel.d.ts.map +1 -1
- package/dist/observability/otel.js +1 -3
- package/dist/observability/otel.js.map +1 -1
- package/dist/plugins/loader.js +1 -1
- package/dist/plugins/loader.js.map +1 -1
- package/dist/scanners/agent/agent-chain-analysis.d.ts +152 -0
- package/dist/scanners/agent/agent-chain-analysis.d.ts.map +1 -0
- package/dist/scanners/agent/agent-chain-analysis.js +438 -0
- package/dist/scanners/agent/agent-chain-analysis.js.map +1 -0
- package/dist/scanners/agent/payloads/index.d.ts +2 -1
- package/dist/scanners/agent/payloads/index.d.ts.map +1 -1
- package/dist/scanners/agent/payloads/index.js +25 -6
- package/dist/scanners/agent/payloads/index.js.map +1 -1
- package/dist/scanners/agent/prompt-injection-fuzzer.d.ts.map +1 -1
- package/dist/scanners/agent/prompt-injection-fuzzer.js +14 -0
- package/dist/scanners/agent/prompt-injection-fuzzer.js.map +1 -1
- package/dist/scanners/agent/types.d.ts +5 -5
- package/dist/scanners/agent/types.d.ts.map +1 -1
- package/dist/scanners/agent/types.js.map +1 -1
- package/dist/scanners/cache.d.ts +156 -0
- package/dist/scanners/cache.d.ts.map +1 -0
- package/dist/scanners/cache.js +462 -0
- package/dist/scanners/cache.js.map +1 -0
- package/dist/scanners/dependencies.js +4 -4
- package/dist/scanners/dependencies.js.map +1 -1
- package/dist/scanners/gosec.d.ts.map +1 -1
- package/dist/scanners/gosec.js +47 -9
- package/dist/scanners/gosec.js.map +1 -1
- package/dist/scanners/healthcare.d.ts +29 -0
- package/dist/scanners/healthcare.d.ts.map +1 -0
- package/dist/scanners/healthcare.js +526 -0
- package/dist/scanners/healthcare.js.map +1 -0
- package/dist/scanners/index.d.ts +1 -0
- package/dist/scanners/index.d.ts.map +1 -1
- package/dist/scanners/index.js +33 -0
- package/dist/scanners/index.js.map +1 -1
- package/dist/scanners/index.test.js +6 -6
- package/dist/scanners/index.test.js.map +1 -1
- package/dist/scanners/secrets.js +4 -4
- package/dist/scanners/secrets.js.map +1 -1
- package/dist/scanners/semgrep.js +5 -5
- package/dist/scanners/semgrep.js.map +1 -1
- package/dist/scanners/types.d.ts +1 -1
- package/dist/scanners/types.d.ts.map +1 -1
- package/dist/scanners/types.js +1 -0
- package/dist/scanners/types.js.map +1 -1
- package/dist/scanners/typescript.test.js +1 -1
- package/dist/scanners/typescript.test.js.map +1 -1
- package/dist/telemetry/index.d.ts +10 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +10 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/registry.d.ts +178 -0
- package/dist/telemetry/registry.d.ts.map +1 -0
- package/dist/telemetry/registry.js +297 -0
- package/dist/telemetry/registry.js.map +1 -0
- package/dist/telemetry/usage.d.ts +197 -0
- package/dist/telemetry/usage.d.ts.map +1 -0
- package/dist/telemetry/usage.js +244 -0
- package/dist/telemetry/usage.js.map +1 -0
- package/package.json +1 -1
package/dist/cost/index.js
CHANGED
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
// Pricing
|
|
9
9
|
export { MODEL_PRICING, getModelProvider, getModelPricing, calculateCost, estimateCost, formatCost, formatTokens, estimateTokens, getSupportedModels, getModelsByProvider, getCheapestModel, } from "./pricing.js";
|
|
10
10
|
// Tracker
|
|
11
|
-
export { CostTracker, BudgetExceededError, getTracker, removeTracker, getActiveTrackers, } from "./tracker.js";
|
|
11
|
+
export { CostTracker, BudgetExceededError, getTracker, removeTracker, getActiveTrackers, estimateCertificationCost, forecastCost, formatCostEstimate, } from "./tracker.js";
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
package/dist/cost/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cost/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,UAAU;AACV,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,UAAU;AACV,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cost/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,UAAU;AACV,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,UAAU;AACV,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EACZ,kBAAkB,GAInB,MAAM,cAAc,CAAC"}
|
package/dist/cost/tracker.d.ts
CHANGED
|
@@ -97,4 +97,68 @@ export declare function removeTracker(certificationId: string, projectPath: stri
|
|
|
97
97
|
* Get all active trackers
|
|
98
98
|
*/
|
|
99
99
|
export declare function getActiveTrackers(): Map<string, CostTracker>;
|
|
100
|
+
/**
|
|
101
|
+
* Cost estimation input
|
|
102
|
+
*/
|
|
103
|
+
export interface CostEstimationInput {
|
|
104
|
+
/** Number of files to scan */
|
|
105
|
+
fileCount: number;
|
|
106
|
+
/** Expected number of findings (or 0 for estimate) */
|
|
107
|
+
expectedFindings?: number;
|
|
108
|
+
/** Number of agents to run */
|
|
109
|
+
agentCount?: number;
|
|
110
|
+
/** Whether cross-verification is enabled */
|
|
111
|
+
crossVerify?: boolean;
|
|
112
|
+
/** Primary model to use */
|
|
113
|
+
model?: ModelId;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Cost estimation result
|
|
117
|
+
*/
|
|
118
|
+
export interface CostEstimate {
|
|
119
|
+
/** Estimated total cost */
|
|
120
|
+
estimatedCost: number;
|
|
121
|
+
/** Estimated input tokens */
|
|
122
|
+
estimatedInputTokens: number;
|
|
123
|
+
/** Estimated output tokens */
|
|
124
|
+
estimatedOutputTokens: number;
|
|
125
|
+
/** Cost breakdown by phase */
|
|
126
|
+
breakdown: {
|
|
127
|
+
scanning: number;
|
|
128
|
+
analysis: number;
|
|
129
|
+
crossVerification: number;
|
|
130
|
+
overhead: number;
|
|
131
|
+
};
|
|
132
|
+
/** Confidence level (low/medium/high) */
|
|
133
|
+
confidence: "low" | "medium" | "high";
|
|
134
|
+
/** Model used for estimation */
|
|
135
|
+
model: ModelId;
|
|
136
|
+
/** Assumptions used */
|
|
137
|
+
assumptions: string[];
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Estimate certification cost before running
|
|
141
|
+
*/
|
|
142
|
+
export declare function estimateCertificationCost(input: CostEstimationInput): CostEstimate;
|
|
143
|
+
/**
|
|
144
|
+
* Historical cost data for forecasting
|
|
145
|
+
*/
|
|
146
|
+
export interface HistoricalCostData {
|
|
147
|
+
fileCount: number;
|
|
148
|
+
findingCount: number;
|
|
149
|
+
agentCount: number;
|
|
150
|
+
actualCost: number;
|
|
151
|
+
actualInputTokens: number;
|
|
152
|
+
actualOutputTokens: number;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Forecast future costs based on historical data
|
|
156
|
+
*/
|
|
157
|
+
export declare function forecastCost(historical: HistoricalCostData[], future: CostEstimationInput): CostEstimate & {
|
|
158
|
+
historicalBasis: number;
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* Format cost estimate as markdown
|
|
162
|
+
*/
|
|
163
|
+
export declare function formatCostEstimate(estimate: CostEstimate): string;
|
|
100
164
|
//# sourceMappingURL=tracker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/cost/tracker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAYpB;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAS;gBAG3B,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,mBAAmB;IAsB/B;;OAEG;IACH,UAAU,CACR,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,UAAU,EACjB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GACjE,aAAa;IA+BhB;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,WAAW,IAAI,IAAI;IAWnB;;OAEG;IACH,UAAU,IAAI,WAAW;IAIzB;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAK9C;;OAEG;IACH,QAAQ,IAAI,aAAa,EAAE;IAI3B;;OAEG;IACH,QAAQ,IAAI,gBAAgB;IAU5B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAa9B;;OAEG;IACH,cAAc,IAAI,MAAM;IAkFxB;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAQhC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,YAAY;IAkDpB,OAAO,CAAC,mBAAmB;CAO5B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAG1B,OAAO,EAAE,WAAW;aACpB,MAAM,EAAE,YAAY;gBAFpC,OAAO,EAAE,MAAM,EACC,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,YAAY;CAKvC;AAOD;;GAEG;AACH,wBAAgB,UAAU,CACxB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,WAAW,CAQb;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAGhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAE5D"}
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/cost/tracker.ts"],"names":[],"mappings":"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"}
|
package/dist/cost/tracker.js
CHANGED
|
@@ -363,4 +363,169 @@ export function removeTracker(certificationId, projectPath) {
|
|
|
363
363
|
export function getActiveTrackers() {
|
|
364
364
|
return new Map(trackers);
|
|
365
365
|
}
|
|
366
|
+
// ---------------------------------------------------------------------------
|
|
367
|
+
// Cost Estimation & Forecasting
|
|
368
|
+
// ---------------------------------------------------------------------------
|
|
369
|
+
/**
|
|
370
|
+
* Estimation factors based on typical certification patterns
|
|
371
|
+
*/
|
|
372
|
+
const ESTIMATION_FACTORS = {
|
|
373
|
+
/** Tokens per file scanned (typical code file) */
|
|
374
|
+
tokensPerFile: 1500,
|
|
375
|
+
/** Tokens per finding analyzed */
|
|
376
|
+
tokensPerFinding: 2000,
|
|
377
|
+
/** Tokens for cross-verification per finding */
|
|
378
|
+
tokensPerCrossVerify: 1000,
|
|
379
|
+
/** Base overhead per agent */
|
|
380
|
+
baseOverheadPerAgent: 3000,
|
|
381
|
+
/** Output ratio (output/input) */
|
|
382
|
+
outputRatio: 0.3,
|
|
383
|
+
/** Safety margin multiplier */
|
|
384
|
+
safetyMargin: 1.2,
|
|
385
|
+
};
|
|
386
|
+
/**
|
|
387
|
+
* Estimate certification cost before running
|
|
388
|
+
*/
|
|
389
|
+
export function estimateCertificationCost(input) {
|
|
390
|
+
const { fileCount, expectedFindings, agentCount = 3, crossVerify = true, model = "claude-3.5-sonnet", } = input;
|
|
391
|
+
// Estimate findings if not provided (rough: 5% of files have findings)
|
|
392
|
+
const estimatedFindings = expectedFindings ?? Math.ceil(fileCount * 0.05);
|
|
393
|
+
// Calculate input tokens
|
|
394
|
+
const scanningTokens = fileCount * ESTIMATION_FACTORS.tokensPerFile;
|
|
395
|
+
const analysisTokens = estimatedFindings * ESTIMATION_FACTORS.tokensPerFinding;
|
|
396
|
+
const crossVerifyTokens = crossVerify
|
|
397
|
+
? estimatedFindings * ESTIMATION_FACTORS.tokensPerCrossVerify
|
|
398
|
+
: 0;
|
|
399
|
+
const overheadTokens = agentCount * ESTIMATION_FACTORS.baseOverheadPerAgent;
|
|
400
|
+
const totalInputTokens = Math.ceil((scanningTokens + analysisTokens + crossVerifyTokens + overheadTokens) *
|
|
401
|
+
ESTIMATION_FACTORS.safetyMargin);
|
|
402
|
+
const totalOutputTokens = Math.ceil(totalInputTokens * ESTIMATION_FACTORS.outputRatio);
|
|
403
|
+
// Helper to create full TokenUsage
|
|
404
|
+
const makeUsage = (input, output) => ({
|
|
405
|
+
inputTokens: input,
|
|
406
|
+
outputTokens: output,
|
|
407
|
+
totalTokens: input + output,
|
|
408
|
+
});
|
|
409
|
+
// Calculate costs using pricing
|
|
410
|
+
const cost = calculateCost(model, makeUsage(totalInputTokens, totalOutputTokens));
|
|
411
|
+
// Determine confidence based on input quality
|
|
412
|
+
let confidence = "medium";
|
|
413
|
+
const assumptions = [];
|
|
414
|
+
if (fileCount === 0) {
|
|
415
|
+
confidence = "low";
|
|
416
|
+
assumptions.push("No file count provided - using defaults");
|
|
417
|
+
}
|
|
418
|
+
if (!expectedFindings) {
|
|
419
|
+
confidence = "low";
|
|
420
|
+
assumptions.push("Finding count estimated at 5% of files");
|
|
421
|
+
}
|
|
422
|
+
if (expectedFindings && fileCount > 0) {
|
|
423
|
+
confidence = "high";
|
|
424
|
+
}
|
|
425
|
+
assumptions.push(`Model: ${model}`);
|
|
426
|
+
assumptions.push(`Agents: ${agentCount}`);
|
|
427
|
+
assumptions.push(`Cross-verification: ${crossVerify ? "enabled" : "disabled"}`);
|
|
428
|
+
assumptions.push(`Safety margin: ${((ESTIMATION_FACTORS.safetyMargin - 1) * 100).toFixed(0)}%`);
|
|
429
|
+
// Calculate breakdown costs
|
|
430
|
+
const scanInput = Math.ceil(scanningTokens * ESTIMATION_FACTORS.safetyMargin);
|
|
431
|
+
const scanOutput = Math.ceil(scanInput * ESTIMATION_FACTORS.outputRatio);
|
|
432
|
+
const analysisInput = Math.ceil(analysisTokens * ESTIMATION_FACTORS.safetyMargin);
|
|
433
|
+
const analysisOutput = Math.ceil(analysisInput * ESTIMATION_FACTORS.outputRatio);
|
|
434
|
+
const crossInput = Math.ceil(crossVerifyTokens * ESTIMATION_FACTORS.safetyMargin);
|
|
435
|
+
const crossOutput = Math.ceil(crossInput * ESTIMATION_FACTORS.outputRatio);
|
|
436
|
+
const overheadInput = Math.ceil(overheadTokens * ESTIMATION_FACTORS.safetyMargin);
|
|
437
|
+
const overheadOutput = Math.ceil(overheadInput * ESTIMATION_FACTORS.outputRatio);
|
|
438
|
+
return {
|
|
439
|
+
estimatedCost: cost.totalCost,
|
|
440
|
+
estimatedInputTokens: totalInputTokens,
|
|
441
|
+
estimatedOutputTokens: totalOutputTokens,
|
|
442
|
+
breakdown: {
|
|
443
|
+
scanning: calculateCost(model, makeUsage(scanInput, scanOutput)).totalCost,
|
|
444
|
+
analysis: calculateCost(model, makeUsage(analysisInput, analysisOutput)).totalCost,
|
|
445
|
+
crossVerification: calculateCost(model, makeUsage(crossInput, crossOutput)).totalCost,
|
|
446
|
+
overhead: calculateCost(model, makeUsage(overheadInput, overheadOutput)).totalCost,
|
|
447
|
+
},
|
|
448
|
+
confidence,
|
|
449
|
+
model,
|
|
450
|
+
assumptions,
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Forecast future costs based on historical data
|
|
455
|
+
*/
|
|
456
|
+
export function forecastCost(historical, future) {
|
|
457
|
+
if (historical.length === 0) {
|
|
458
|
+
// No historical data, use default estimation
|
|
459
|
+
return {
|
|
460
|
+
...estimateCertificationCost(future),
|
|
461
|
+
historicalBasis: 0,
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
// Calculate average cost per file from historical data
|
|
465
|
+
const avgCostPerFile = historical.reduce((sum, h) => {
|
|
466
|
+
return sum + (h.actualCost / Math.max(h.fileCount, 1));
|
|
467
|
+
}, 0) / historical.length;
|
|
468
|
+
// Calculate average tokens per file
|
|
469
|
+
const avgInputPerFile = historical.reduce((sum, h) => {
|
|
470
|
+
return sum + (h.actualInputTokens / Math.max(h.fileCount, 1));
|
|
471
|
+
}, 0) / historical.length;
|
|
472
|
+
const avgOutputPerFile = historical.reduce((sum, h) => {
|
|
473
|
+
return sum + (h.actualOutputTokens / Math.max(h.fileCount, 1));
|
|
474
|
+
}, 0) / historical.length;
|
|
475
|
+
// Apply to future estimate
|
|
476
|
+
const estimatedCost = avgCostPerFile * future.fileCount * ESTIMATION_FACTORS.safetyMargin;
|
|
477
|
+
const estimatedInputTokens = Math.ceil(avgInputPerFile * future.fileCount * ESTIMATION_FACTORS.safetyMargin);
|
|
478
|
+
const estimatedOutputTokens = Math.ceil(avgOutputPerFile * future.fileCount * ESTIMATION_FACTORS.safetyMargin);
|
|
479
|
+
// More confidence with more historical data
|
|
480
|
+
const confidence = historical.length >= 5 ? "high" :
|
|
481
|
+
historical.length >= 2 ? "medium" : "low";
|
|
482
|
+
return {
|
|
483
|
+
estimatedCost,
|
|
484
|
+
estimatedInputTokens,
|
|
485
|
+
estimatedOutputTokens,
|
|
486
|
+
breakdown: {
|
|
487
|
+
scanning: estimatedCost * 0.4,
|
|
488
|
+
analysis: estimatedCost * 0.35,
|
|
489
|
+
crossVerification: estimatedCost * 0.15,
|
|
490
|
+
overhead: estimatedCost * 0.1,
|
|
491
|
+
},
|
|
492
|
+
confidence,
|
|
493
|
+
model: future.model || "claude-3.5-sonnet",
|
|
494
|
+
assumptions: [
|
|
495
|
+
`Based on ${historical.length} historical certification(s)`,
|
|
496
|
+
`Average cost per file: ${formatCost(avgCostPerFile)}`,
|
|
497
|
+
`Safety margin: ${((ESTIMATION_FACTORS.safetyMargin - 1) * 100).toFixed(0)}%`,
|
|
498
|
+
],
|
|
499
|
+
historicalBasis: historical.length,
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* Format cost estimate as markdown
|
|
504
|
+
*/
|
|
505
|
+
export function formatCostEstimate(estimate) {
|
|
506
|
+
return [
|
|
507
|
+
"# Cost Estimate",
|
|
508
|
+
"",
|
|
509
|
+
`**Estimated Total**: ${formatCost(estimate.estimatedCost)}`,
|
|
510
|
+
`**Confidence**: ${estimate.confidence}`,
|
|
511
|
+
"",
|
|
512
|
+
"## Token Estimate",
|
|
513
|
+
"",
|
|
514
|
+
`- Input: ${formatTokens(estimate.estimatedInputTokens)}`,
|
|
515
|
+
`- Output: ${formatTokens(estimate.estimatedOutputTokens)}`,
|
|
516
|
+
"",
|
|
517
|
+
"## Cost Breakdown",
|
|
518
|
+
"",
|
|
519
|
+
`| Phase | Cost |`,
|
|
520
|
+
`|-------|------|`,
|
|
521
|
+
`| Scanning | ${formatCost(estimate.breakdown.scanning)} |`,
|
|
522
|
+
`| Analysis | ${formatCost(estimate.breakdown.analysis)} |`,
|
|
523
|
+
`| Cross-verification | ${formatCost(estimate.breakdown.crossVerification)} |`,
|
|
524
|
+
`| Overhead | ${formatCost(estimate.breakdown.overhead)} |`,
|
|
525
|
+
"",
|
|
526
|
+
"## Assumptions",
|
|
527
|
+
"",
|
|
528
|
+
estimate.assumptions.map((a) => `- ${a}`).join("\n"),
|
|
529
|
+
].join("\n");
|
|
530
|
+
}
|
|
366
531
|
//# sourceMappingURL=tracker.js.map
|
package/dist/cost/tracker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/cost/tracker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/cost/tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Fixture: Audit Gaps
|
|
3
|
+
*
|
|
4
|
+
* This file contains intentional audit trail gaps that should be
|
|
5
|
+
* detected by the healthcare scanner. Used for testing only.
|
|
6
|
+
*
|
|
7
|
+
* EXPECTED FINDINGS:
|
|
8
|
+
* - PHI access without audit log (high)
|
|
9
|
+
* - Missing user ID in audit entries (medium)
|
|
10
|
+
* - Audit log without timestamp (medium)
|
|
11
|
+
*
|
|
12
|
+
* @module eval/fixtures/healthcare/audit-gaps
|
|
13
|
+
*/
|
|
14
|
+
export declare function readPatientRecord(patientId: string, userId: string): Promise<{}>;
|
|
15
|
+
export declare function updateMedicalRecord(patientId: string, updates: object): Promise<{
|
|
16
|
+
success: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
export declare function viewPatientData(patientId: string): Promise<{
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function deletePatientData(patientId: string, userId: string): Promise<boolean>;
|
|
23
|
+
export declare function clearAuditLogs(adminId: string): Promise<void>;
|
|
24
|
+
export declare function properAuditedAccess(patientId: string, userId: string): Promise<{
|
|
25
|
+
id: string;
|
|
26
|
+
name: string;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=audit-gaps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-gaps.d.ts","sourceRoot":"","sources":["../../../../src/eval/fixtures/healthcare/audit-gaps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAIxE;AAGD,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;GAI3E;AAGD,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM;;;GAQtD;AAGD,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,oBAQxE;AAGD,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,iBAGnD;AAqBD,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;GA0B1E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Fixture: Audit Gaps
|
|
3
|
+
*
|
|
4
|
+
* This file contains intentional audit trail gaps that should be
|
|
5
|
+
* detected by the healthcare scanner. Used for testing only.
|
|
6
|
+
*
|
|
7
|
+
* EXPECTED FINDINGS:
|
|
8
|
+
* - PHI access without audit log (high)
|
|
9
|
+
* - Missing user ID in audit entries (medium)
|
|
10
|
+
* - Audit log without timestamp (medium)
|
|
11
|
+
*
|
|
12
|
+
* @module eval/fixtures/healthcare/audit-gaps
|
|
13
|
+
*/
|
|
14
|
+
// PHI access without audit logging - SHOULD BE DETECTED
|
|
15
|
+
export async function readPatientRecord(patientId, userId) {
|
|
16
|
+
// No audit log call before or after PHI access
|
|
17
|
+
const patient = await database.query(`SELECT * FROM patients WHERE id = ?`, [patientId]);
|
|
18
|
+
return patient;
|
|
19
|
+
}
|
|
20
|
+
// Another missing audit log - SHOULD BE DETECTED
|
|
21
|
+
export async function updateMedicalRecord(patientId, updates) {
|
|
22
|
+
await database.query(`UPDATE patients SET ? WHERE id = ?`, [updates, patientId]);
|
|
23
|
+
// No audit trail for this modification
|
|
24
|
+
return { success: true };
|
|
25
|
+
}
|
|
26
|
+
// Missing user ID in audit - SHOULD BE DETECTED
|
|
27
|
+
export async function viewPatientData(patientId) {
|
|
28
|
+
await auditLog.write({
|
|
29
|
+
action: "view_patient",
|
|
30
|
+
resourceId: patientId,
|
|
31
|
+
// Missing: userId
|
|
32
|
+
timestamp: new Date().toISOString(),
|
|
33
|
+
});
|
|
34
|
+
return await fetchPatient(patientId);
|
|
35
|
+
}
|
|
36
|
+
// Audit log without timestamp - SHOULD BE DETECTED
|
|
37
|
+
export async function deletePatientData(patientId, userId) {
|
|
38
|
+
await auditLog.write({
|
|
39
|
+
action: "delete_patient",
|
|
40
|
+
userId: userId,
|
|
41
|
+
resourceId: patientId,
|
|
42
|
+
// Missing: timestamp
|
|
43
|
+
});
|
|
44
|
+
return await database.delete("patients", patientId);
|
|
45
|
+
}
|
|
46
|
+
// Deletable audit log - SHOULD BE DETECTED
|
|
47
|
+
export async function clearAuditLogs(adminId) {
|
|
48
|
+
// Audit logs should be immutable
|
|
49
|
+
await database.query("DELETE FROM audit_logs WHERE created_at < ?", [thirtyDaysAgo()]);
|
|
50
|
+
}
|
|
51
|
+
// Simulated database and audit
|
|
52
|
+
const database = {
|
|
53
|
+
query: async (sql, params) => ({}),
|
|
54
|
+
delete: async (table, id) => true,
|
|
55
|
+
};
|
|
56
|
+
const auditLog = {
|
|
57
|
+
write: async (entry) => true,
|
|
58
|
+
};
|
|
59
|
+
function thirtyDaysAgo() {
|
|
60
|
+
return new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString();
|
|
61
|
+
}
|
|
62
|
+
async function fetchPatient(id) {
|
|
63
|
+
return { id, name: "Test Patient" };
|
|
64
|
+
}
|
|
65
|
+
// This is OK - proper audit trail
|
|
66
|
+
export async function properAuditedAccess(patientId, userId) {
|
|
67
|
+
// Log before access
|
|
68
|
+
await auditLog.write({
|
|
69
|
+
action: "phi_access",
|
|
70
|
+
userId: userId,
|
|
71
|
+
resourceType: "patient",
|
|
72
|
+
resourceId: patientId,
|
|
73
|
+
timestamp: new Date().toISOString(),
|
|
74
|
+
ipAddress: "127.0.0.1",
|
|
75
|
+
outcome: "pending",
|
|
76
|
+
});
|
|
77
|
+
const patient = await fetchPatient(patientId);
|
|
78
|
+
// Log after access with outcome
|
|
79
|
+
await auditLog.write({
|
|
80
|
+
action: "phi_access",
|
|
81
|
+
userId: userId,
|
|
82
|
+
resourceType: "patient",
|
|
83
|
+
resourceId: patientId,
|
|
84
|
+
timestamp: new Date().toISOString(),
|
|
85
|
+
outcome: "success",
|
|
86
|
+
dataAccessed: ["name", "dob", "mrn"],
|
|
87
|
+
});
|
|
88
|
+
return patient;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=audit-gaps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-gaps.js","sourceRoot":"","sources":["../../../../src/eval/fixtures/healthcare/audit-gaps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Fixture: Consent Bypass
|
|
3
|
+
*
|
|
4
|
+
* This file contains intentional consent validation bypass patterns that
|
|
5
|
+
* should be detected by the healthcare scanner. Used for testing only.
|
|
6
|
+
*
|
|
7
|
+
* EXPECTED FINDINGS:
|
|
8
|
+
* - Always-true consent check (high)
|
|
9
|
+
* - Missing consent validation in PHI access (high)
|
|
10
|
+
* - Consent check commented out (high)
|
|
11
|
+
*
|
|
12
|
+
* @module eval/fixtures/healthcare/consent-bypass
|
|
13
|
+
*/
|
|
14
|
+
export declare function hasConsent(): boolean;
|
|
15
|
+
export declare function checkConsentStatus(): boolean;
|
|
16
|
+
export declare function accessPatientRecord(patientId: string): Promise<{
|
|
17
|
+
id: string;
|
|
18
|
+
medicalHistory: never[];
|
|
19
|
+
ssn: string;
|
|
20
|
+
}>;
|
|
21
|
+
export declare function getPatientMedicalHistory(patientId: string): Promise<never[]>;
|
|
22
|
+
export declare function getSUDTreatmentPlan(patientId: string): Promise<{
|
|
23
|
+
patientId: string;
|
|
24
|
+
treatmentPlan: string;
|
|
25
|
+
}>;
|
|
26
|
+
export declare function properConsentCheck(patientId: string, userId: string): Promise<{
|
|
27
|
+
id: string;
|
|
28
|
+
medicalHistory: never[];
|
|
29
|
+
ssn: string;
|
|
30
|
+
}>;
|
|
31
|
+
//# sourceMappingURL=consent-bypass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consent-bypass.d.ts","sourceRoot":"","sources":["../../../../src/eval/fixtures/healthcare/consent-bypass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAGD,wBAAgB,kBAAkB,IAAI,OAAO,CAG5C;AAGD,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM;;;;GAK1D;AAGD,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,MAAM,oBAI/D;AAGD,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM;;;GAI1D;AAYD,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;GAMzE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Fixture: Consent Bypass
|
|
3
|
+
*
|
|
4
|
+
* This file contains intentional consent validation bypass patterns that
|
|
5
|
+
* should be detected by the healthcare scanner. Used for testing only.
|
|
6
|
+
*
|
|
7
|
+
* EXPECTED FINDINGS:
|
|
8
|
+
* - Always-true consent check (high)
|
|
9
|
+
* - Missing consent validation in PHI access (high)
|
|
10
|
+
* - Consent check commented out (high)
|
|
11
|
+
*
|
|
12
|
+
* @module eval/fixtures/healthcare/consent-bypass
|
|
13
|
+
*/
|
|
14
|
+
// Always-true consent check - SHOULD BE DETECTED
|
|
15
|
+
export function hasConsent() {
|
|
16
|
+
return true; // BUG: Always returns true without validation
|
|
17
|
+
}
|
|
18
|
+
// Another always-true pattern - SHOULD BE DETECTED
|
|
19
|
+
export function checkConsentStatus() {
|
|
20
|
+
const consentGiven = true;
|
|
21
|
+
return consentGiven; // BUG: Hard-coded consent
|
|
22
|
+
}
|
|
23
|
+
// Consent check commented out - SHOULD BE DETECTED
|
|
24
|
+
export async function accessPatientRecord(patientId) {
|
|
25
|
+
// if (!await checkConsentStatus()) {
|
|
26
|
+
// throw new Error("Consent not given");
|
|
27
|
+
// }
|
|
28
|
+
return fetchPatientData(patientId);
|
|
29
|
+
}
|
|
30
|
+
// Missing consent validation before PHI access - SHOULD BE DETECTED
|
|
31
|
+
export async function getPatientMedicalHistory(patientId) {
|
|
32
|
+
// No consent check before accessing sensitive data
|
|
33
|
+
const patient = await fetchPatientData(patientId);
|
|
34
|
+
return patient.medicalHistory;
|
|
35
|
+
}
|
|
36
|
+
// Missing consent check with SUD data - SHOULD BE DETECTED
|
|
37
|
+
export async function getSUDTreatmentPlan(patientId) {
|
|
38
|
+
// SUD data requires explicit consent under 42 CFR Part 2
|
|
39
|
+
// but no consent validation here
|
|
40
|
+
return await fetchSUDRecords(patientId);
|
|
41
|
+
}
|
|
42
|
+
// Helper functions (simulated)
|
|
43
|
+
async function fetchPatientData(patientId) {
|
|
44
|
+
return { id: patientId, medicalHistory: [], ssn: "123-45-6789" };
|
|
45
|
+
}
|
|
46
|
+
async function fetchSUDRecords(patientId) {
|
|
47
|
+
return { patientId, treatmentPlan: "Methadone maintenance" };
|
|
48
|
+
}
|
|
49
|
+
// This is OK - proper consent check
|
|
50
|
+
export async function properConsentCheck(patientId, userId) {
|
|
51
|
+
const consent = await validateConsent(patientId, userId);
|
|
52
|
+
if (!consent.valid) {
|
|
53
|
+
throw new Error("Patient consent not obtained");
|
|
54
|
+
}
|
|
55
|
+
return await fetchPatientData(patientId);
|
|
56
|
+
}
|
|
57
|
+
async function validateConsent(patientId, userId) {
|
|
58
|
+
// Real implementation would check database
|
|
59
|
+
return { valid: false, scope: [], expiresAt: null };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=consent-bypass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consent-bypass.js","sourceRoot":"","sources":["../../../../src/eval/fixtures/healthcare/consent-bypass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,iDAAiD;AACjD,MAAM,UAAU,UAAU;IACxB,OAAO,IAAI,CAAC,CAAC,8CAA8C;AAC7D,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,kBAAkB;IAChC,MAAM,YAAY,GAAG,IAAI,CAAC;IAC1B,OAAO,YAAY,CAAC,CAAC,0BAA0B;AACjD,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,SAAiB;IACzD,qCAAqC;IACrC,0CAA0C;IAC1C,IAAI;IACJ,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,SAAiB;IAC9D,mDAAmD;IACnD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,cAAc,CAAC;AAChC,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,SAAiB;IACzD,yDAAyD;IACzD,iCAAiC;IACjC,OAAO,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED,+BAA+B;AAC/B,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IAC/C,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,SAAiB;IAC9C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,uBAAuB,EAAE,CAAC;AAC/D,CAAC;AAED,oCAAoC;AACpC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAiB,EAAE,MAAc;IACxE,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,SAAiB,EAAE,MAAc;IAC9D,2CAA2C;IAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Fixture: PHI in Logs
|
|
3
|
+
*
|
|
4
|
+
* This file contains intentional PHI exposure patterns that should be
|
|
5
|
+
* detected by the healthcare scanner. Used for testing only.
|
|
6
|
+
*
|
|
7
|
+
* EXPECTED FINDINGS:
|
|
8
|
+
* - SSN in log output (critical)
|
|
9
|
+
* - MRN in console.log (critical)
|
|
10
|
+
* - Patient data in error logs (high)
|
|
11
|
+
*
|
|
12
|
+
* @module eval/fixtures/healthcare/phi-in-logs
|
|
13
|
+
*/
|
|
14
|
+
export declare function logPatientInfo(patientId: string, ssn: string): void;
|
|
15
|
+
export declare function logMedicalRecordAccess(mrn: string, action: string): void;
|
|
16
|
+
export declare function handlePatientError(error: Error, patientSSN: string): void;
|
|
17
|
+
export declare function debugPatientRecord(patient: {
|
|
18
|
+
name: string;
|
|
19
|
+
ssn: string;
|
|
20
|
+
mrn: string;
|
|
21
|
+
}): void;
|
|
22
|
+
export declare function logMedicationDispense(patientId: string, medication: string): void;
|
|
23
|
+
export declare function logGenericMessage(message: string): void;
|
|
24
|
+
//# sourceMappingURL=phi-in-logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phi-in-logs.d.ts","sourceRoot":"","sources":["../../../../src/eval/fixtures/healthcare/phi-in-logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAE5D;AAGD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAGjE;AAGD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,QAElE;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,QAErF;AAGD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAI1E;AAGD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,QAEhD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Fixture: PHI in Logs
|
|
3
|
+
*
|
|
4
|
+
* This file contains intentional PHI exposure patterns that should be
|
|
5
|
+
* detected by the healthcare scanner. Used for testing only.
|
|
6
|
+
*
|
|
7
|
+
* EXPECTED FINDINGS:
|
|
8
|
+
* - SSN in log output (critical)
|
|
9
|
+
* - MRN in console.log (critical)
|
|
10
|
+
* - Patient data in error logs (high)
|
|
11
|
+
*
|
|
12
|
+
* @module eval/fixtures/healthcare/phi-in-logs
|
|
13
|
+
*/
|
|
14
|
+
// SSN in logger output - SHOULD BE DETECTED
|
|
15
|
+
export function logPatientInfo(patientId, ssn) {
|
|
16
|
+
console.log(`Processing patient ${patientId} with SSN: ${ssn}`);
|
|
17
|
+
}
|
|
18
|
+
// MRN exposure in logs - SHOULD BE DETECTED
|
|
19
|
+
export function logMedicalRecordAccess(mrn, action) {
|
|
20
|
+
console.log(`MRN ${mrn}: ${action}`);
|
|
21
|
+
console.info(`Medical record MRN: ${mrn} accessed`);
|
|
22
|
+
}
|
|
23
|
+
// PHI in error message - SHOULD BE DETECTED
|
|
24
|
+
export function handlePatientError(error, patientSSN) {
|
|
25
|
+
console.error(`Failed to process patient. SSN: ${patientSSN}, Error: ${error.message}`);
|
|
26
|
+
}
|
|
27
|
+
// Patient data in debug logs - SHOULD BE DETECTED
|
|
28
|
+
export function debugPatientRecord(patient) {
|
|
29
|
+
console.debug(`Patient record: ${JSON.stringify(patient)}`);
|
|
30
|
+
}
|
|
31
|
+
// SUD medication in logs - SHOULD BE DETECTED
|
|
32
|
+
export function logMedicationDispense(patientId, medication) {
|
|
33
|
+
if (medication.toLowerCase().includes("methadone") || medication.toLowerCase().includes("suboxone")) {
|
|
34
|
+
console.log(`Dispensed ${medication} to patient ${patientId}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// This is OK - no PHI in logs
|
|
38
|
+
export function logGenericMessage(message) {
|
|
39
|
+
console.log(message);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=phi-in-logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phi-in-logs.js","sourceRoot":"","sources":["../../../../src/eval/fixtures/healthcare/phi-in-logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,4CAA4C;AAC5C,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,GAAW;IAC3D,OAAO,CAAC,GAAG,CAAC,sBAAsB,SAAS,cAAc,GAAG,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,sBAAsB,CAAC,GAAW,EAAE,MAAc;IAChE,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,uBAAuB,GAAG,WAAW,CAAC,CAAC;AACtD,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,kBAAkB,CAAC,KAAY,EAAE,UAAkB;IACjE,OAAO,CAAC,KAAK,CAAC,mCAAmC,UAAU,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,kBAAkB,CAAC,OAAmD;IACpF,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,qBAAqB,CAAC,SAAiB,EAAE,UAAkB;IACzE,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACpG,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,eAAe,SAAS,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC"}
|