@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.
Files changed (156) hide show
  1. package/README.md +337 -0
  2. package/bin/overwatch +12 -0
  3. package/dist/auth/cli-oauth.d.ts +13 -0
  4. package/dist/auth/cli-oauth.d.ts.map +1 -0
  5. package/dist/auth/html-utils.d.ts +20 -0
  6. package/dist/auth/html-utils.d.ts.map +1 -0
  7. package/dist/auth/index.d.ts +10 -0
  8. package/dist/auth/index.d.ts.map +1 -0
  9. package/dist/auth/oauth.d.ts +81 -0
  10. package/dist/auth/oauth.d.ts.map +1 -0
  11. package/dist/auth/pkce.d.ts +26 -0
  12. package/dist/auth/pkce.d.ts.map +1 -0
  13. package/dist/auth/token-store.d.ts +44 -0
  14. package/dist/auth/token-store.d.ts.map +1 -0
  15. package/dist/bin/overwatch +12 -0
  16. package/dist/cli.d.ts +6 -0
  17. package/dist/cli.d.ts.map +1 -0
  18. package/dist/cli.js +5449 -0
  19. package/dist/cli.js.map +7 -0
  20. package/dist/config/index.d.ts +5 -0
  21. package/dist/config/index.d.ts.map +1 -0
  22. package/dist/config/manager.d.ts +54 -0
  23. package/dist/config/manager.d.ts.map +1 -0
  24. package/dist/daemon.d.ts +11 -0
  25. package/dist/daemon.d.ts.map +1 -0
  26. package/dist/daemon.js +6004 -0
  27. package/dist/daemon.js.map +7 -0
  28. package/dist/data/ingestor.d.ts +31 -0
  29. package/dist/data/ingestor.d.ts.map +1 -0
  30. package/dist/data/processor.d.ts +96 -0
  31. package/dist/data/processor.d.ts.map +1 -0
  32. package/dist/data/reader.d.ts +24 -0
  33. package/dist/data/reader.d.ts.map +1 -0
  34. package/dist/data/recorder.d.ts +12 -0
  35. package/dist/data/recorder.d.ts.map +1 -0
  36. package/dist/engines/cedar.d.ts +41 -0
  37. package/dist/engines/cedar.d.ts.map +1 -0
  38. package/dist/engines/remote.d.ts +21 -0
  39. package/dist/engines/remote.d.ts.map +1 -0
  40. package/dist/engines/yara.d.ts +12 -0
  41. package/dist/engines/yara.d.ts.map +1 -0
  42. package/dist/handlers/dashboard-handler.d.ts +7 -0
  43. package/dist/handlers/dashboard-handler.d.ts.map +1 -0
  44. package/dist/handlers/hook-handler.d.ts +23 -0
  45. package/dist/handlers/hook-handler.d.ts.map +1 -0
  46. package/dist/handlers/oauth-handler.d.ts +12 -0
  47. package/dist/handlers/oauth-handler.d.ts.map +1 -0
  48. package/dist/handlers/scan-handler.d.ts +13 -0
  49. package/dist/handlers/scan-handler.d.ts.map +1 -0
  50. package/dist/handlers/utils.d.ts +11 -0
  51. package/dist/handlers/utils.d.ts.map +1 -0
  52. package/dist/hooks/claudecode/hooks.json.template +20 -0
  53. package/dist/hooks/cursor/hooks.json.template +74 -0
  54. package/dist/hooks/universal-hook.sh +36 -0
  55. package/dist/http/server.d.ts +38 -0
  56. package/dist/http/server.d.ts.map +1 -0
  57. package/dist/index.d.ts +8 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +5941 -0
  60. package/dist/index.js.map +7 -0
  61. package/dist/installer.d.ts +25 -0
  62. package/dist/installer.d.ts.map +1 -0
  63. package/dist/javelin/admin-client.d.ts +75 -0
  64. package/dist/javelin/admin-client.d.ts.map +1 -0
  65. package/dist/javelin/client.d.ts +30 -0
  66. package/dist/javelin/client.d.ts.map +1 -0
  67. package/dist/javelin/config-reader.d.ts +70 -0
  68. package/dist/javelin/config-reader.d.ts.map +1 -0
  69. package/dist/javelin/index.d.ts +5 -0
  70. package/dist/javelin/index.d.ts.map +1 -0
  71. package/dist/javelin/types.d.ts +81 -0
  72. package/dist/javelin/types.d.ts.map +1 -0
  73. package/dist/lib/policy-engine.d.ts +34 -0
  74. package/dist/lib/policy-engine.d.ts.map +1 -0
  75. package/dist/lib/policy-manager.d.ts +86 -0
  76. package/dist/lib/policy-manager.d.ts.map +1 -0
  77. package/dist/module.d.ts +52 -0
  78. package/dist/module.d.ts.map +1 -0
  79. package/dist/pipeline/context-mapper.d.ts +16 -0
  80. package/dist/pipeline/context-mapper.d.ts.map +1 -0
  81. package/dist/pipeline/extractors/claude-extractor.d.ts +48 -0
  82. package/dist/pipeline/extractors/claude-extractor.d.ts.map +1 -0
  83. package/dist/pipeline/extractors/cursor-extractor.d.ts +44 -0
  84. package/dist/pipeline/extractors/cursor-extractor.d.ts.map +1 -0
  85. package/dist/pipeline/extractors/github-copilot-extractor.d.ts +49 -0
  86. package/dist/pipeline/extractors/github-copilot-extractor.d.ts.map +1 -0
  87. package/dist/pipeline/extractors/index.d.ts +47 -0
  88. package/dist/pipeline/extractors/index.d.ts.map +1 -0
  89. package/dist/pipeline/extractors/registry.d.ts +38 -0
  90. package/dist/pipeline/extractors/registry.d.ts.map +1 -0
  91. package/dist/pipeline/hook-pipeline.d.ts +25 -0
  92. package/dist/pipeline/hook-pipeline.d.ts.map +1 -0
  93. package/dist/policy.cedar +783 -0
  94. package/dist/rules/pre/command_injection.yar +60 -0
  95. package/dist/rules/pre/cross_origin_escalation.yar +106 -0
  96. package/dist/rules/pre/mcp_config_risk.yar +35 -0
  97. package/dist/rules/pre/path_traversal.yar +50 -0
  98. package/dist/rules/pre/prompt_injection.yar +101 -0
  99. package/dist/rules/pre/secrets_leakage.yar +100 -0
  100. package/dist/rules/pre/sql_injection.yar +65 -0
  101. package/dist/scanner.d.ts +80 -0
  102. package/dist/scanner.d.ts.map +1 -0
  103. package/dist/service.d.ts +18 -0
  104. package/dist/service.d.ts.map +1 -0
  105. package/dist/services/interface.d.ts +11 -0
  106. package/dist/services/interface.d.ts.map +1 -0
  107. package/dist/services/launchd.d.ts +12 -0
  108. package/dist/services/launchd.d.ts.map +1 -0
  109. package/dist/services/systemd.d.ts +12 -0
  110. package/dist/services/systemd.d.ts.map +1 -0
  111. package/dist/services/windows.d.ts +7 -0
  112. package/dist/services/windows.d.ts.map +1 -0
  113. package/dist/skills/index.d.ts +7 -0
  114. package/dist/skills/index.d.ts.map +1 -0
  115. package/dist/skills/scanner.d.ts +44 -0
  116. package/dist/skills/scanner.d.ts.map +1 -0
  117. package/dist/skills/types.d.ts +29 -0
  118. package/dist/skills/types.d.ts.map +1 -0
  119. package/dist/types/config.d.ts +165 -0
  120. package/dist/types/config.d.ts.map +1 -0
  121. package/dist/types/events.d.ts +225 -0
  122. package/dist/types/events.d.ts.map +1 -0
  123. package/dist/types/index.d.ts +6 -0
  124. package/dist/types/index.d.ts.map +1 -0
  125. package/dist/types/remote-policy.d.ts +129 -0
  126. package/dist/types/remote-policy.d.ts.map +1 -0
  127. package/dist/types/requests.d.ts +45 -0
  128. package/dist/types/requests.d.ts.map +1 -0
  129. package/dist/types/responses.d.ts +60 -0
  130. package/dist/types/responses.d.ts.map +1 -0
  131. package/dist/ui/images/highflame-mono.png +0 -0
  132. package/dist/ui/views/dashboard.ejs +301 -0
  133. package/dist/ui/views/dashboard.js +785 -0
  134. package/dist/ui/views/partials/commands-table.ejs +54 -0
  135. package/dist/ui/views/partials/events-table.ejs +36 -0
  136. package/dist/ui/views/partials/filter-dropdown.ejs +12 -0
  137. package/dist/ui/views/partials/overview-charts.ejs +149 -0
  138. package/dist/ui/views/partials/scans-table.ejs +136 -0
  139. package/dist/ui/views/partials/sessions-table.ejs +50 -0
  140. package/dist/ui/views/partials/stats-grid.ejs +23 -0
  141. package/dist/ui/views/partials/threats-table.ejs +60 -0
  142. package/dist/utils/index.d.ts +3 -0
  143. package/dist/utils/index.d.ts.map +1 -0
  144. package/dist/utils/logger.d.ts +28 -0
  145. package/dist/utils/logger.d.ts.map +1 -0
  146. package/dist/utils/performance.d.ts +26 -0
  147. package/dist/utils/performance.d.ts.map +1 -0
  148. package/dist/utils/port-manager.d.ts +6 -0
  149. package/dist/utils/port-manager.d.ts.map +1 -0
  150. package/dist/yara/engine.d.ts +58 -0
  151. package/dist/yara/engine.d.ts.map +1 -0
  152. package/dist/yara/index.d.ts +5 -0
  153. package/dist/yara/index.d.ts.map +1 -0
  154. package/lib/platform-loader.js +210 -0
  155. package/package.json +63 -0
  156. 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,5 @@
1
+ export * from "./types";
2
+ export * from "./config-reader";
3
+ export * from "./client";
4
+ export * from "./admin-client";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -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"}