@highflame/overwatch 1.0.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/README.md +337 -0
- package/bin/overwatch +12 -0
- package/dist/auth/cli-oauth.d.ts +13 -0
- package/dist/auth/cli-oauth.d.ts.map +1 -0
- package/dist/auth/html-utils.d.ts +20 -0
- package/dist/auth/html-utils.d.ts.map +1 -0
- package/dist/auth/index.d.ts +10 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/oauth.d.ts +81 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/pkce.d.ts +26 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/token-store.d.ts +44 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/bin/overwatch +12 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +5449 -0
- package/dist/cli.js.map +7 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/manager.d.ts +54 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/daemon.d.ts +11 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +6004 -0
- package/dist/daemon.js.map +7 -0
- package/dist/data/ingestor.d.ts +31 -0
- package/dist/data/ingestor.d.ts.map +1 -0
- package/dist/data/processor.d.ts +96 -0
- package/dist/data/processor.d.ts.map +1 -0
- package/dist/data/reader.d.ts +24 -0
- package/dist/data/reader.d.ts.map +1 -0
- package/dist/data/recorder.d.ts +12 -0
- package/dist/data/recorder.d.ts.map +1 -0
- package/dist/engines/cedar.d.ts +41 -0
- package/dist/engines/cedar.d.ts.map +1 -0
- package/dist/engines/remote.d.ts +21 -0
- package/dist/engines/remote.d.ts.map +1 -0
- package/dist/engines/yara.d.ts +12 -0
- package/dist/engines/yara.d.ts.map +1 -0
- package/dist/handlers/dashboard-handler.d.ts +7 -0
- package/dist/handlers/dashboard-handler.d.ts.map +1 -0
- package/dist/handlers/hook-handler.d.ts +23 -0
- package/dist/handlers/hook-handler.d.ts.map +1 -0
- package/dist/handlers/oauth-handler.d.ts +12 -0
- package/dist/handlers/oauth-handler.d.ts.map +1 -0
- package/dist/handlers/scan-handler.d.ts +13 -0
- package/dist/handlers/scan-handler.d.ts.map +1 -0
- package/dist/handlers/utils.d.ts +11 -0
- package/dist/handlers/utils.d.ts.map +1 -0
- package/dist/hooks/claudecode/hooks.json.template +20 -0
- package/dist/hooks/cursor/hooks.json.template +74 -0
- package/dist/hooks/universal-hook.sh +36 -0
- package/dist/http/server.d.ts +38 -0
- package/dist/http/server.d.ts.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5941 -0
- package/dist/index.js.map +7 -0
- package/dist/installer.d.ts +25 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/javelin/admin-client.d.ts +75 -0
- package/dist/javelin/admin-client.d.ts.map +1 -0
- package/dist/javelin/client.d.ts +30 -0
- package/dist/javelin/client.d.ts.map +1 -0
- package/dist/javelin/config-reader.d.ts +70 -0
- package/dist/javelin/config-reader.d.ts.map +1 -0
- package/dist/javelin/index.d.ts +5 -0
- package/dist/javelin/index.d.ts.map +1 -0
- package/dist/javelin/types.d.ts +81 -0
- package/dist/javelin/types.d.ts.map +1 -0
- package/dist/lib/policy-engine.d.ts +34 -0
- package/dist/lib/policy-engine.d.ts.map +1 -0
- package/dist/lib/policy-manager.d.ts +86 -0
- package/dist/lib/policy-manager.d.ts.map +1 -0
- package/dist/module.d.ts +52 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/pipeline/context-mapper.d.ts +16 -0
- package/dist/pipeline/context-mapper.d.ts.map +1 -0
- package/dist/pipeline/extractors/claude-extractor.d.ts +48 -0
- package/dist/pipeline/extractors/claude-extractor.d.ts.map +1 -0
- package/dist/pipeline/extractors/cursor-extractor.d.ts +44 -0
- package/dist/pipeline/extractors/cursor-extractor.d.ts.map +1 -0
- package/dist/pipeline/extractors/github-copilot-extractor.d.ts +49 -0
- package/dist/pipeline/extractors/github-copilot-extractor.d.ts.map +1 -0
- package/dist/pipeline/extractors/index.d.ts +47 -0
- package/dist/pipeline/extractors/index.d.ts.map +1 -0
- package/dist/pipeline/extractors/registry.d.ts +38 -0
- package/dist/pipeline/extractors/registry.d.ts.map +1 -0
- package/dist/pipeline/hook-pipeline.d.ts +25 -0
- package/dist/pipeline/hook-pipeline.d.ts.map +1 -0
- package/dist/policy.cedar +783 -0
- package/dist/rules/pre/command_injection.yar +60 -0
- package/dist/rules/pre/cross_origin_escalation.yar +106 -0
- package/dist/rules/pre/mcp_config_risk.yar +35 -0
- package/dist/rules/pre/path_traversal.yar +50 -0
- package/dist/rules/pre/prompt_injection.yar +101 -0
- package/dist/rules/pre/secrets_leakage.yar +100 -0
- package/dist/rules/pre/sql_injection.yar +65 -0
- package/dist/scanner.d.ts +80 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/service.d.ts +18 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/services/interface.d.ts +11 -0
- package/dist/services/interface.d.ts.map +1 -0
- package/dist/services/launchd.d.ts +12 -0
- package/dist/services/launchd.d.ts.map +1 -0
- package/dist/services/systemd.d.ts +12 -0
- package/dist/services/systemd.d.ts.map +1 -0
- package/dist/services/windows.d.ts +7 -0
- package/dist/services/windows.d.ts.map +1 -0
- package/dist/skills/index.d.ts +7 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/scanner.d.ts +44 -0
- package/dist/skills/scanner.d.ts.map +1 -0
- package/dist/skills/types.d.ts +29 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/types/config.d.ts +165 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/events.d.ts +225 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/remote-policy.d.ts +129 -0
- package/dist/types/remote-policy.d.ts.map +1 -0
- package/dist/types/requests.d.ts +45 -0
- package/dist/types/requests.d.ts.map +1 -0
- package/dist/types/responses.d.ts +60 -0
- package/dist/types/responses.d.ts.map +1 -0
- package/dist/ui/images/highflame-mono.png +0 -0
- package/dist/ui/views/dashboard.ejs +301 -0
- package/dist/ui/views/dashboard.js +785 -0
- package/dist/ui/views/partials/commands-table.ejs +54 -0
- package/dist/ui/views/partials/events-table.ejs +36 -0
- package/dist/ui/views/partials/filter-dropdown.ejs +12 -0
- package/dist/ui/views/partials/overview-charts.ejs +149 -0
- package/dist/ui/views/partials/scans-table.ejs +136 -0
- package/dist/ui/views/partials/sessions-table.ejs +50 -0
- package/dist/ui/views/partials/stats-grid.ejs +23 -0
- package/dist/ui/views/partials/threats-table.ejs +60 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +28 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/performance.d.ts +26 -0
- package/dist/utils/performance.d.ts.map +1 -0
- package/dist/utils/port-manager.d.ts +6 -0
- package/dist/utils/port-manager.d.ts.map +1 -0
- package/dist/yara/engine.d.ts +58 -0
- package/dist/yara/engine.d.ts.map +1 -0
- package/dist/yara/index.d.ts +5 -0
- package/dist/yara/index.d.ts.map +1 -0
- package/lib/platform-loader.js +210 -0
- package/package.json +63 -0
- package/scripts/postinstall.js +121 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Installer
|
|
3
|
+
* Installs IDE-specific hooks that integrate with Guardian daemon
|
|
4
|
+
*/
|
|
5
|
+
interface InstallResult {
|
|
6
|
+
ide: string;
|
|
7
|
+
hooksPath: string;
|
|
8
|
+
hooksInstalled: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Install hooks for an IDE
|
|
12
|
+
*/
|
|
13
|
+
export declare function installHooks(ide: string): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Uninstall hooks for an IDE
|
|
16
|
+
* @param ide IDE name
|
|
17
|
+
* @param silent If true, don't print messages (used by clear command)
|
|
18
|
+
*/
|
|
19
|
+
export declare function uninstallHooks(ide: string, silent?: boolean): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* List installed hooks
|
|
22
|
+
*/
|
|
23
|
+
export declare function listInstalledHooks(): Promise<InstallResult[]>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;CACzB;AAwbD;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD7D;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAoE/E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAsBnE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin API client for Guardian
|
|
3
|
+
*
|
|
4
|
+
* Handles communication with highflame-admin for:
|
|
5
|
+
* - Recording installation events
|
|
6
|
+
* - Fetching code_agent applications (via existing application API)
|
|
7
|
+
* - Fetching Cedar policies for applications (via existing policy API)
|
|
8
|
+
*/
|
|
9
|
+
import { CodeAgentApplication, RemoteCedarPolicy, InstallationEvent } from "../types/remote-policy";
|
|
10
|
+
/**
|
|
11
|
+
* Raw policy response from /v1/admin/policy/:uuid API
|
|
12
|
+
*/
|
|
13
|
+
interface RawPolicy {
|
|
14
|
+
uuid: string;
|
|
15
|
+
name: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
policy?: {
|
|
18
|
+
code_agent_security?: {
|
|
19
|
+
enabled?: boolean;
|
|
20
|
+
policy_cedar?: string;
|
|
21
|
+
};
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
};
|
|
24
|
+
modified_at?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Admin API client for Guardian
|
|
28
|
+
* Uses existing application and policy APIs from highflame-admin
|
|
29
|
+
*/
|
|
30
|
+
export declare class AdminClient {
|
|
31
|
+
private baseUrl;
|
|
32
|
+
private token;
|
|
33
|
+
private timeout;
|
|
34
|
+
constructor(baseUrl: string, token: string, timeout?: number);
|
|
35
|
+
/**
|
|
36
|
+
* Record installation event
|
|
37
|
+
* Called on first event from a new user/IDE combination
|
|
38
|
+
*/
|
|
39
|
+
recordInstallation(event: InstallationEvent): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* Fetch code_agent applications using existing application API
|
|
42
|
+
* GET /v1/admin/applications?type=code_agent
|
|
43
|
+
*/
|
|
44
|
+
getCodeAgentApplications(): Promise<CodeAgentApplication[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Fetch policy by UUID using existing policy API
|
|
47
|
+
* GET /v1/admin/policy/:uuid
|
|
48
|
+
*/
|
|
49
|
+
getPolicyByUUID(policyUUID: string): Promise<RawPolicy | null>;
|
|
50
|
+
/**
|
|
51
|
+
* Get Cedar policy for a specific IDE type
|
|
52
|
+
*
|
|
53
|
+
* Flow:
|
|
54
|
+
* 1. Fetch all code_agent applications
|
|
55
|
+
* 2. Find app matching the IDE name (cursor, claudecode, etc.)
|
|
56
|
+
* 3. Get policy_template UUID from app config
|
|
57
|
+
* 4. Fetch policy by UUID
|
|
58
|
+
* 5. Extract policy_cedar from policy.code_agent_security
|
|
59
|
+
*/
|
|
60
|
+
getCedarPolicyForIDE(ideType: string): Promise<RemoteCedarPolicy | null>;
|
|
61
|
+
/**
|
|
62
|
+
* Fetch Cedar policies for all configured IDEs in one efficient call
|
|
63
|
+
* Returns a map of IDE type to RemoteCedarPolicy
|
|
64
|
+
*
|
|
65
|
+
* This is more efficient than calling getCedarPolicyForIDE() multiple times
|
|
66
|
+
* since it fetches applications only once.
|
|
67
|
+
*/
|
|
68
|
+
getAllIDEPolicies(): Promise<Map<string, RemoteCedarPolicy>>;
|
|
69
|
+
/**
|
|
70
|
+
* Health check - verify connection to admin API
|
|
71
|
+
*/
|
|
72
|
+
healthCheck(): Promise<boolean>;
|
|
73
|
+
}
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=admin-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-client.d.ts","sourceRoot":"","sources":["../../src/javelin/admin-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAoBhC;;GAEG;AACH,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE;QACP,mBAAmB,CAAC,EAAE;YACpB,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC;QACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;gBAGtB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAwB;IAanC;;;OAGG;IACG,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAsCpE;;;OAGG;IACG,wBAAwB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAmDjE;;;OAGG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAgDpE;;;;;;;;;OASG;IACG,oBAAoB,CACxB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAiFpC;;;;;;OAMG;IACG,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAuElE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAwBtC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { JavelinConfig, JavelinValidationResponse } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Highflame HTTP client for guardrails validation
|
|
4
|
+
*/
|
|
5
|
+
export declare class JavelinClient {
|
|
6
|
+
private config;
|
|
7
|
+
private requestCount;
|
|
8
|
+
constructor(config: JavelinConfig);
|
|
9
|
+
/**
|
|
10
|
+
* Get current config
|
|
11
|
+
*/
|
|
12
|
+
getConfig(): JavelinConfig;
|
|
13
|
+
/**
|
|
14
|
+
* Validate content using Highflame guardrails API
|
|
15
|
+
* @param engine - Guardrail engine type (guardrails, yara)
|
|
16
|
+
* @param payload - Content to validate
|
|
17
|
+
* @param metadata - Optional metadata to include in request
|
|
18
|
+
* @param applicationId - Optional application ID for x-javelin-application header
|
|
19
|
+
*/
|
|
20
|
+
validateWithGuardrails(engine: string, payload: string, metadata?: Record<string, unknown>, applicationId?: string): Promise<JavelinValidationResponse>;
|
|
21
|
+
/**
|
|
22
|
+
* Test connection to Highflame API
|
|
23
|
+
*/
|
|
24
|
+
testConnection(): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Update configuration
|
|
27
|
+
*/
|
|
28
|
+
updateConfig(config: JavelinConfig): void;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/javelin/client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,yBAAyB,EAG1B,MAAM,SAAS,CAAC;AAoBjB;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,YAAY,CAAK;gBAEb,MAAM,EAAE,aAAa;IAOjC;;OAEG;IACH,SAAS,IAAI,aAAa;IAI1B;;;;;;OAMG;IACG,sBAAsB,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,yBAAyB,CAAC;IA4LrC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IASxC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;CAO1C"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { JavelinConfig } from "./types";
|
|
2
|
+
import { IDEType, OperatingMode, OverwatchConfig, AdminConfig } from "../types";
|
|
3
|
+
/**
|
|
4
|
+
* Configuration reader for ~/.overwatch/config.json
|
|
5
|
+
* Uses JWT token from session.json for API authentication
|
|
6
|
+
*/
|
|
7
|
+
export declare class ConfigReader {
|
|
8
|
+
private configPath;
|
|
9
|
+
private cachedConfig;
|
|
10
|
+
private rawConfig;
|
|
11
|
+
constructor(configPath?: string);
|
|
12
|
+
/**
|
|
13
|
+
* JWT token from session.json
|
|
14
|
+
*/
|
|
15
|
+
readHighflameConfig(ide: IDEType): Promise<JavelinConfig | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Get operating mode for an IDE (inspect or enforce)
|
|
18
|
+
*/
|
|
19
|
+
getMode(ide: IDEType): OperatingMode;
|
|
20
|
+
/**
|
|
21
|
+
* Get the full overwatch config
|
|
22
|
+
*/
|
|
23
|
+
getOverwatchConfig(): OverwatchConfig | null;
|
|
24
|
+
/**
|
|
25
|
+
* Get Highflame API configuration
|
|
26
|
+
*/
|
|
27
|
+
getHighflameConfig(): {
|
|
28
|
+
baseUrl: string;
|
|
29
|
+
enabled: boolean;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Get JWT token from session.json for API authentication
|
|
33
|
+
*/
|
|
34
|
+
getJwtToken(): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* Get LLM API key from config or environment
|
|
37
|
+
*/
|
|
38
|
+
getLLMApiKey(): string | null;
|
|
39
|
+
/**
|
|
40
|
+
* Load raw config from file
|
|
41
|
+
*/
|
|
42
|
+
private loadRawConfig;
|
|
43
|
+
/**
|
|
44
|
+
* Get default configuration
|
|
45
|
+
*/
|
|
46
|
+
private getDefaultConfig;
|
|
47
|
+
/**
|
|
48
|
+
* Get cached configuration for an IDE
|
|
49
|
+
*/
|
|
50
|
+
getCachedConfig(ide: IDEType): JavelinConfig | null;
|
|
51
|
+
/**
|
|
52
|
+
* Check if configuration is valid
|
|
53
|
+
*/
|
|
54
|
+
isValid(config: JavelinConfig | null): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Get admin API configuration (derived from Highflame config)
|
|
57
|
+
* Used by PolicyManager and AdminClient for remote policy fetching
|
|
58
|
+
*/
|
|
59
|
+
getAdminConfig(): AdminConfig;
|
|
60
|
+
/**
|
|
61
|
+
* Get admin token for API authentication
|
|
62
|
+
* Alias for getJwtToken for backwards compatibility
|
|
63
|
+
*/
|
|
64
|
+
getAdminToken(): string | null;
|
|
65
|
+
/**
|
|
66
|
+
* Clear cache (useful for config reload)
|
|
67
|
+
*/
|
|
68
|
+
clearCache(): void;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=config-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-reader.d.ts","sourceRoot":"","sources":["../../src/javelin/config-reader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAKhF;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,SAAS,CAAgC;gBAErC,UAAU,CAAC,EAAE,MAAM;IAM/B;;OAEG;IACG,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA0CtE;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa;IASpC;;OAEG;IACH,kBAAkB,IAAI,eAAe,GAAG,IAAI;IAI5C;;OAEG;IACH,kBAAkB,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAS3D;;OAEG;IACH,WAAW,IAAI,MAAM,GAAG,IAAI;IAY5B;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAK7B;;OAEG;YACW,aAAa;IA6B3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI;IASnD;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO;IAW9C;;;OAGG;IACH,cAAc,IAAI,WAAW;IAQ7B;;;OAGG;IACH,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B;;OAEG;IACH,UAAU,IAAI,IAAI;CAQnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/javelin/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Javelin API configuration
|
|
3
|
+
*/
|
|
4
|
+
export interface JavelinConfig {
|
|
5
|
+
/** Highflame API base URL */
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
/** Highflame API Token (JWT) */
|
|
8
|
+
token: string;
|
|
9
|
+
/** Request timeout in milliseconds */
|
|
10
|
+
timeout: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Highflame Guardrails API request format
|
|
14
|
+
*/
|
|
15
|
+
export interface HighflameGuardrailsRequest {
|
|
16
|
+
input: {
|
|
17
|
+
text: string;
|
|
18
|
+
};
|
|
19
|
+
guardrails: Array<{
|
|
20
|
+
name: string;
|
|
21
|
+
config: Record<string, unknown>;
|
|
22
|
+
}>;
|
|
23
|
+
metadata: {
|
|
24
|
+
direction: "request";
|
|
25
|
+
request_source: string;
|
|
26
|
+
session_id: string;
|
|
27
|
+
[key: string]: unknown;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Individual guardrail assessment result
|
|
32
|
+
*/
|
|
33
|
+
export interface HighflameGuardrailAssessment {
|
|
34
|
+
request_reject: boolean;
|
|
35
|
+
results: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Highflame Guardrails API response format
|
|
39
|
+
*/
|
|
40
|
+
export interface HighflameGuardrailsResponse {
|
|
41
|
+
assessments: Array<Record<string, HighflameGuardrailAssessment>>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Javelin validation request
|
|
45
|
+
* (matches Javelin API format)
|
|
46
|
+
*/
|
|
47
|
+
export interface JavelinValidationRequest {
|
|
48
|
+
/** Engine/guardrail to use */
|
|
49
|
+
engine: string;
|
|
50
|
+
/** Content to validate */
|
|
51
|
+
content: string;
|
|
52
|
+
/** Additional parameters */
|
|
53
|
+
parameters?: Record<string, unknown>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Javelin validation response
|
|
57
|
+
* (matches Javelin API response format)
|
|
58
|
+
*/
|
|
59
|
+
export interface JavelinValidationResponse {
|
|
60
|
+
/** Whether validation passed */
|
|
61
|
+
success: boolean;
|
|
62
|
+
/** Response message */
|
|
63
|
+
message?: string;
|
|
64
|
+
/** Detailed results */
|
|
65
|
+
results?: {
|
|
66
|
+
findings?: Array<{
|
|
67
|
+
severity: string;
|
|
68
|
+
type: string;
|
|
69
|
+
message: string;
|
|
70
|
+
location?: Record<string, unknown>;
|
|
71
|
+
}>;
|
|
72
|
+
metadata?: Record<string, unknown>;
|
|
73
|
+
};
|
|
74
|
+
/** Error details if request failed */
|
|
75
|
+
error?: {
|
|
76
|
+
code: string;
|
|
77
|
+
message: string;
|
|
78
|
+
details?: unknown;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/javelin/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IAEd,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACrE,QAAQ,EAAE;QACR,SAAS,EAAE,SAAS,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC,CAAC;CAClE;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IAEf,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAEhB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAC;IAEjB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,uBAAuB;IACvB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,KAAK,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACpC,CAAC,CAAC;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC;IAEF,sCAAsC;IACtC,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy Engine Loader
|
|
3
|
+
*
|
|
4
|
+
* Uses @highflame/policy npm package for Cedar policy evaluation.
|
|
5
|
+
* The package uses @cedar-policy/cedar-wasm (WebAssembly) for cross-platform support.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* PolicyEngine interface matching the expected API
|
|
9
|
+
*/
|
|
10
|
+
export interface PolicyEngine {
|
|
11
|
+
loadPoliciesFromFile(path: string): void;
|
|
12
|
+
evaluate(principalType: string, principalId: string, action: string, resourceType: string, resourceId: string, context?: Record<string, unknown> | null): {
|
|
13
|
+
effect: "Allow" | "Deny";
|
|
14
|
+
determining_policies: string[];
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a new PolicyEngine instance
|
|
19
|
+
* Returns undefined if the module is not available
|
|
20
|
+
*
|
|
21
|
+
* Note: This function is async internally but returns synchronously for compatibility.
|
|
22
|
+
* Call initPolicyEngine() first to ensure the module is loaded.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createPolicyEngine(): PolicyEngine | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Initialize the policy engine module (async)
|
|
27
|
+
* Must be called before createPolicyEngine()
|
|
28
|
+
*/
|
|
29
|
+
export declare function initPolicyEngine(): Promise<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Check if the policy engine module is available
|
|
32
|
+
*/
|
|
33
|
+
export declare function isPolicyEngineAvailable(): boolean;
|
|
34
|
+
//# sourceMappingURL=policy-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-engine.d.ts","sourceRoot":"","sources":["../../src/lib/policy-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CACN,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACvC;QAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACjE;AAsED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,GAAG,SAAS,CAuB7D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAGzD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy Manager for Guardian
|
|
3
|
+
*
|
|
4
|
+
* Manages Cedar policies with support for:
|
|
5
|
+
* - Remote policy fetching from highflame-admin
|
|
6
|
+
* - IDE-specific policy mapping (cursor, claudecode, github_copilot)
|
|
7
|
+
* - Configurable polling for policy updates
|
|
8
|
+
* - Local policy fallback when remote is unavailable
|
|
9
|
+
*/
|
|
10
|
+
import { PolicyEngine } from "./policy-engine";
|
|
11
|
+
import { IDESource, PolicyMapping } from "../types";
|
|
12
|
+
/**
|
|
13
|
+
* PolicyManager handles remote policy fetching and local fallback
|
|
14
|
+
* Maintains policy mapping per IDE source
|
|
15
|
+
*/
|
|
16
|
+
export declare class PolicyManager {
|
|
17
|
+
private adminClient;
|
|
18
|
+
private policyEngines;
|
|
19
|
+
private localPolicyEngine;
|
|
20
|
+
private policyMapping;
|
|
21
|
+
private pollTimer;
|
|
22
|
+
private pollIntervalMs;
|
|
23
|
+
private _localPolicyPath;
|
|
24
|
+
private initialized;
|
|
25
|
+
private lastFetchTime;
|
|
26
|
+
constructor(pollIntervalMs?: number);
|
|
27
|
+
/**
|
|
28
|
+
* Initialize with admin client and local fallback
|
|
29
|
+
*/
|
|
30
|
+
init(baseUrl: string | null, token: string | null, localPolicyPath: string | null): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Start polling for policy updates
|
|
33
|
+
*/
|
|
34
|
+
startPolling(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Stop polling
|
|
37
|
+
*/
|
|
38
|
+
stopPolling(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Fetch remote policies and update engines
|
|
41
|
+
*/
|
|
42
|
+
fetchRemotePolicies(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Update policy engine for specific IDE
|
|
45
|
+
*/
|
|
46
|
+
private updatePolicyForIDE;
|
|
47
|
+
/**
|
|
48
|
+
* Get policy engine for IDE source
|
|
49
|
+
* Falls back to local policy if no remote policy available
|
|
50
|
+
*/
|
|
51
|
+
getEngineForIDE(ide: IDESource): PolicyEngine | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Get policy content for IDE source
|
|
54
|
+
* Returns the Cedar policy string for parsing metadata
|
|
55
|
+
*/
|
|
56
|
+
getPolicyContentForIDE(ide: IDESource): string | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Check if a specific IDE has remote policy
|
|
59
|
+
*/
|
|
60
|
+
hasRemotePolicyForIDE(ide: IDESource): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Get policy mapping info
|
|
63
|
+
*/
|
|
64
|
+
getPolicyMapping(): PolicyMapping;
|
|
65
|
+
/**
|
|
66
|
+
* Get last fetch time
|
|
67
|
+
*/
|
|
68
|
+
getLastFetchTime(): number;
|
|
69
|
+
/**
|
|
70
|
+
* Get status information
|
|
71
|
+
*/
|
|
72
|
+
getStatus(): {
|
|
73
|
+
initialized: boolean;
|
|
74
|
+
hasAdminClient: boolean;
|
|
75
|
+
hasLocalPolicy: boolean;
|
|
76
|
+
localPolicyPath: string | null;
|
|
77
|
+
remotePolicies: string[];
|
|
78
|
+
isPolling: boolean;
|
|
79
|
+
lastFetchTime: number;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Force refresh policies
|
|
83
|
+
*/
|
|
84
|
+
refreshPolicies(): Promise<void>;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=policy-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-manager.d.ts","sourceRoot":"","sources":["../../src/lib/policy-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EACL,YAAY,EAGb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,SAAS,EAET,aAAa,EAGd,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAA2C;IAChE,OAAO,CAAC,iBAAiB,CAA2B;IACpD,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAa;gBAGhC,cAAc,GAAE,MAAoD;IAQtE;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,eAAe,EAAE,MAAM,GAAG,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC;IAiDhB;;OAEG;IACH,YAAY,IAAI,IAAI;IAyBpB;;OAEG;IACH,WAAW,IAAI,IAAI;IAQnB;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC1C;;OAEG;YACW,kBAAkB;IA4DhC;;;OAGG;IACH,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS;IAoBzD;;;OAGG;IACH,sBAAsB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAsB1D;;OAEG;IACH,qBAAqB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO;IAI9C;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,SAAS,IAAI;QACX,WAAW,EAAE,OAAO,CAAC;QACrB,cAAc,EAAE,OAAO,CAAC;QACxB,cAAc,EAAE,OAAO,CAAC;QACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,SAAS,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;KACvB;IAYD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAIvC"}
|
package/dist/module.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export declare class GuardianModule {
|
|
2
|
+
private javelinClients;
|
|
3
|
+
private configReader;
|
|
4
|
+
private httpServer;
|
|
5
|
+
private scanner;
|
|
6
|
+
private yaraEngine;
|
|
7
|
+
private cedarEngine;
|
|
8
|
+
private yaraExecutor;
|
|
9
|
+
private remoteExecutor;
|
|
10
|
+
private hookPipeline;
|
|
11
|
+
private hookHandler;
|
|
12
|
+
private scanHandler;
|
|
13
|
+
private dashboardHandler;
|
|
14
|
+
private oauthHandler;
|
|
15
|
+
private skillsScanner;
|
|
16
|
+
private projectSkillsCache;
|
|
17
|
+
private static readonly PROJECT_SKILLS_CACHE_TTL;
|
|
18
|
+
private eventIngestor;
|
|
19
|
+
private scanIngestor;
|
|
20
|
+
private skillsIngestor;
|
|
21
|
+
private policyManager;
|
|
22
|
+
private adminClient;
|
|
23
|
+
private seenInstallations;
|
|
24
|
+
private pendingOAuthStates;
|
|
25
|
+
private readonly oauthStateTimeout;
|
|
26
|
+
private initialized;
|
|
27
|
+
private debug;
|
|
28
|
+
constructor(config?: {
|
|
29
|
+
httpPort?: number;
|
|
30
|
+
debug?: boolean;
|
|
31
|
+
});
|
|
32
|
+
init(): Promise<void>;
|
|
33
|
+
private loadHighflameConfig;
|
|
34
|
+
private loadYaraRules;
|
|
35
|
+
private findRulesDir;
|
|
36
|
+
private initCedarEngine;
|
|
37
|
+
private findPolicyFile;
|
|
38
|
+
private initPolicyManager;
|
|
39
|
+
private checkInstallation;
|
|
40
|
+
private recordInstallation;
|
|
41
|
+
startServer(): Promise<void>;
|
|
42
|
+
private runStartupSkillsScan;
|
|
43
|
+
private handleShutdown;
|
|
44
|
+
stopServer(): Promise<void>;
|
|
45
|
+
getPort(): number;
|
|
46
|
+
/**
|
|
47
|
+
* Scan project-level skills if not recently cached
|
|
48
|
+
* Called from hook handler when workspace is present in event
|
|
49
|
+
*/
|
|
50
|
+
scanProjectSkillsIfNeeded(workspace: string): Promise<void>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAkCA,qBAAa,cAAc;IACzB,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,OAAO,CAAa;IAG5B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAA2B;IAG9C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,cAAc,CAAiB;IAGvC,OAAO,CAAC,YAAY,CAA2B;IAG/C,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,YAAY,CAA2B;IAG/C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,kBAAkB,CAA4C;IACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAiB;IAGjE,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,cAAc,CAA+C;IAGrE,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAA4B;IAE/C,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,kBAAkB,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiB;IAEnD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;IAmBzD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAiFb,mBAAmB;YAUnB,aAAa;IAO3B,OAAO,CAAC,YAAY;YAYN,eAAe;IAmB7B,OAAO,CAAC,cAAc;YAaR,iBAAiB;IAwB/B,OAAO,CAAC,iBAAiB;YAkBX,kBAAkB;IAmB1B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;YAyEpB,oBAAoB;IAkBlC,OAAO,CAAC,cAAc;IAoBhB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,OAAO,IAAI,MAAM;IAIjB;;;OAGG;IACG,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAuBlE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { OverwatchEvent, ThreatSummary, DetectionResult } from "../types";
|
|
2
|
+
export interface CedarContext {
|
|
3
|
+
principalType: string;
|
|
4
|
+
principalId: string;
|
|
5
|
+
action: string;
|
|
6
|
+
resourceType: string;
|
|
7
|
+
resourceId: string;
|
|
8
|
+
contextData: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Map OverwatchEvent + threat/yara results to Cedar policy context.
|
|
12
|
+
*/
|
|
13
|
+
export declare class ContextMapper {
|
|
14
|
+
static mapToCedarContext(overwatchEvent: OverwatchEvent, threatSummary: ThreatSummary, yaraResult: DetectionResult): CedarContext;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=context-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-mapper.d.ts","sourceRoot":"","sources":["../../src/pipeline/context-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,aAAa,EACb,eAAe,EAChB,MAAM,UAAU,CAAC;AAGlB,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,MAAM,CAAC,iBAAiB,CACtB,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,eAAe,GAC1B,YAAY;CAmFhB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code Extractor
|
|
3
|
+
*
|
|
4
|
+
* Converts Claude Code hook payloads into canonical OverwatchEvent format.
|
|
5
|
+
* Claude Code events: UserPromptSubmit, PreToolUse, PostToolUse.
|
|
6
|
+
*/
|
|
7
|
+
import { IExtractor } from './index';
|
|
8
|
+
import { OverwatchEvent, IDESource } from '../../types/events';
|
|
9
|
+
export declare class ClaudeExtractor implements IExtractor {
|
|
10
|
+
/**
|
|
11
|
+
* Check if this extractor can handle the given event from Claude Code
|
|
12
|
+
*/
|
|
13
|
+
canHandle(event: string, source: IDESource): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Convert Claude Code hook payload to canonical OverwatchEvent
|
|
16
|
+
* canHandle(event, source) is called before and must return true before calling this method
|
|
17
|
+
*/
|
|
18
|
+
toCanonical(event: string, input: Record<string, any>, _source: IDESource): Promise<OverwatchEvent | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Normalize Claude tool names to standard names
|
|
21
|
+
*/
|
|
22
|
+
private normalizeToolName;
|
|
23
|
+
/**
|
|
24
|
+
* Extract content to be scanned by security engines
|
|
25
|
+
*/
|
|
26
|
+
private extractContent;
|
|
27
|
+
/**
|
|
28
|
+
* Extract file path from tool input
|
|
29
|
+
*/
|
|
30
|
+
private extractFilePath;
|
|
31
|
+
/**
|
|
32
|
+
* Extract command from tool input (for Bash tools)
|
|
33
|
+
*/
|
|
34
|
+
private extractCommand;
|
|
35
|
+
/**
|
|
36
|
+
* Extract tool arguments
|
|
37
|
+
*/
|
|
38
|
+
private extractArguments;
|
|
39
|
+
/**
|
|
40
|
+
* Resolve workspace root from Claude Code formats
|
|
41
|
+
*/
|
|
42
|
+
private resolveWorkspaceRoot;
|
|
43
|
+
/**
|
|
44
|
+
* Generate default response format for Claude Code
|
|
45
|
+
*/
|
|
46
|
+
getDefaultResponse(event: string, allowed: boolean, reason?: string): Record<string, any>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=claude-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-extractor.d.ts","sourceRoot":"","sources":["../../../src/pipeline/extractors/claude-extractor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAkB,MAAM,oBAAoB,CAAC;AAG/E,qBAAa,eAAgB,YAAW,UAAU;IAC9C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO;IAepD;;;OAGG;IACG,WAAW,CACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,OAAO,EAAE,SAAS,GACnB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAmFjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;YACW,cAAc;IAkD5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,kBAAkB,CACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAsBzB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cursor IDE Extractor
|
|
3
|
+
*
|
|
4
|
+
* Converts Cursor hook payloads into canonical OverwatchEvent format.
|
|
5
|
+
* Handles all Cursor hook events: prompt, shell, MCP, file operations.
|
|
6
|
+
*/
|
|
7
|
+
import { IExtractor } from './index';
|
|
8
|
+
import { OverwatchEvent, IDESource } from '../../types/events';
|
|
9
|
+
export declare class CursorExtractor implements IExtractor {
|
|
10
|
+
/**
|
|
11
|
+
* Check if the extractor can handle given event from Cursor
|
|
12
|
+
*/
|
|
13
|
+
canHandle(event: string, source: IDESource): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Convert Cursor hook payload to canonical OverwatchEvent
|
|
16
|
+
* canHandle(event, source) is called before andmust return true before calling this method
|
|
17
|
+
*/
|
|
18
|
+
toCanonical(event: string, input: Record<string, any>, _source: IDESource): Promise<OverwatchEvent | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Extract content to be scanned by security engines
|
|
21
|
+
*/
|
|
22
|
+
private extractContent;
|
|
23
|
+
/**
|
|
24
|
+
* Extract tool name and MCP information
|
|
25
|
+
*/
|
|
26
|
+
private extractToolInfo;
|
|
27
|
+
/**
|
|
28
|
+
* Extract file path from input
|
|
29
|
+
*/
|
|
30
|
+
private extractFilePath;
|
|
31
|
+
/**
|
|
32
|
+
* Extract tool arguments
|
|
33
|
+
*/
|
|
34
|
+
private extractArguments;
|
|
35
|
+
/**
|
|
36
|
+
* Resolve workspace root from various Cursor formats
|
|
37
|
+
*/
|
|
38
|
+
private resolveWorkspaceRoot;
|
|
39
|
+
/**
|
|
40
|
+
* Generate default response format for Cursor
|
|
41
|
+
*/
|
|
42
|
+
getDefaultResponse(event: string, allowed: boolean, reason?: string): Record<string, any>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=cursor-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-extractor.d.ts","sourceRoot":"","sources":["../../../src/pipeline/extractors/cursor-extractor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAkB,MAAM,oBAAoB,CAAC;AAG/E,qBAAa,eAAgB,YAAW,UAAU;IAC9C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO;IAwBpD;;;OAGG;IACG,WAAW,CACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,OAAO,EAAE,SAAS,GACnB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IA2DjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAiFtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAwCvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACH,kBAAkB,CACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAuCzB"}
|