@intutic/sync-daemon 1.10.0 → 1.10.1

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 (200) hide show
  1. package/README.md +2 -2
  2. package/dist/agentReporter.d.ts +205 -0
  3. package/dist/agentReporter.d.ts.map +1 -0
  4. package/dist/agentReporter.js +394 -0
  5. package/dist/agentReporter.js.map +1 -0
  6. package/dist/configReader.d.ts +39 -2
  7. package/dist/configReader.d.ts.map +1 -1
  8. package/dist/configReader.js +56 -2
  9. package/dist/configReader.js.map +1 -1
  10. package/dist/configWriter.d.ts +51 -1
  11. package/dist/configWriter.d.ts.map +1 -1
  12. package/dist/configWriter.js +490 -63
  13. package/dist/configWriter.js.map +1 -1
  14. package/dist/harness/antigravityHooks.d.ts.map +1 -1
  15. package/dist/harness/antigravityHooks.js +33 -55
  16. package/dist/harness/antigravityHooks.js.map +1 -1
  17. package/dist/harness/claudeCodeHooks.d.ts +47 -13
  18. package/dist/harness/claudeCodeHooks.d.ts.map +1 -1
  19. package/dist/harness/claudeCodeHooks.js +316 -54
  20. package/dist/harness/claudeCodeHooks.js.map +1 -1
  21. package/dist/harness/claudeDesktopHooks.d.ts.map +1 -1
  22. package/dist/harness/claudeDesktopHooks.js +35 -48
  23. package/dist/harness/claudeDesktopHooks.js.map +1 -1
  24. package/dist/harness/clineHooks.d.ts.map +1 -1
  25. package/dist/harness/clineHooks.js +42 -34
  26. package/dist/harness/clineHooks.js.map +1 -1
  27. package/dist/harness/codexHooks.d.ts +36 -0
  28. package/dist/harness/codexHooks.d.ts.map +1 -0
  29. package/dist/harness/codexHooks.js +227 -0
  30. package/dist/harness/codexHooks.js.map +1 -0
  31. package/dist/harness/continueHooks.d.ts +45 -5
  32. package/dist/harness/continueHooks.d.ts.map +1 -1
  33. package/dist/harness/continueHooks.js +225 -5
  34. package/dist/harness/continueHooks.js.map +1 -1
  35. package/dist/harness/cursorHooks.d.ts +31 -0
  36. package/dist/harness/cursorHooks.d.ts.map +1 -1
  37. package/dist/harness/cursorHooks.js +78 -49
  38. package/dist/harness/cursorHooks.js.map +1 -1
  39. package/dist/harness/dshHooks.d.ts +198 -0
  40. package/dist/harness/dshHooks.d.ts.map +1 -0
  41. package/dist/harness/dshHooks.js +569 -0
  42. package/dist/harness/dshHooks.js.map +1 -0
  43. package/dist/harness/gateBody.d.ts +422 -0
  44. package/dist/harness/gateBody.d.ts.map +1 -0
  45. package/dist/harness/gateBody.js +1816 -0
  46. package/dist/harness/gateBody.js.map +1 -0
  47. package/dist/harness/gateKind.d.ts +164 -0
  48. package/dist/harness/gateKind.d.ts.map +1 -0
  49. package/dist/harness/gateKind.js +143 -0
  50. package/dist/harness/gateKind.js.map +1 -0
  51. package/dist/harness/githubCopilotHooks.d.ts +54 -0
  52. package/dist/harness/githubCopilotHooks.d.ts.map +1 -0
  53. package/dist/harness/githubCopilotHooks.js +218 -0
  54. package/dist/harness/githubCopilotHooks.js.map +1 -0
  55. package/dist/harness/gooseHooks.d.ts.map +1 -1
  56. package/dist/harness/gooseHooks.js +67 -37
  57. package/dist/harness/gooseHooks.js.map +1 -1
  58. package/dist/harness/grokHooks.d.ts +77 -0
  59. package/dist/harness/grokHooks.d.ts.map +1 -0
  60. package/dist/harness/grokHooks.js +350 -0
  61. package/dist/harness/grokHooks.js.map +1 -0
  62. package/dist/harness/hermesHooks.d.ts.map +1 -1
  63. package/dist/harness/hermesHooks.js +26 -55
  64. package/dist/harness/hermesHooks.js.map +1 -1
  65. package/dist/harness/holdRedaction.d.ts +69 -0
  66. package/dist/harness/holdRedaction.d.ts.map +1 -0
  67. package/dist/harness/holdRedaction.js +211 -0
  68. package/dist/harness/holdRedaction.js.map +1 -0
  69. package/dist/harness/jetbrainsXmlConfig.d.ts +51 -0
  70. package/dist/harness/jetbrainsXmlConfig.d.ts.map +1 -0
  71. package/dist/harness/jetbrainsXmlConfig.js +151 -0
  72. package/dist/harness/jetbrainsXmlConfig.js.map +1 -0
  73. package/dist/harness/mcpAutoWrite.d.ts +100 -3
  74. package/dist/harness/mcpAutoWrite.d.ts.map +1 -1
  75. package/dist/harness/mcpAutoWrite.js +712 -90
  76. package/dist/harness/mcpAutoWrite.js.map +1 -1
  77. package/dist/harness/museHooks.d.ts +53 -0
  78. package/dist/harness/museHooks.d.ts.map +1 -0
  79. package/dist/harness/museHooks.js +273 -0
  80. package/dist/harness/museHooks.js.map +1 -0
  81. package/dist/harness/n8nHooks.d.ts +25 -9
  82. package/dist/harness/n8nHooks.d.ts.map +1 -1
  83. package/dist/harness/n8nHooks.js +174 -9
  84. package/dist/harness/n8nHooks.js.map +1 -1
  85. package/dist/harness/openCodeHooks.d.ts +93 -0
  86. package/dist/harness/openCodeHooks.d.ts.map +1 -0
  87. package/dist/harness/openCodeHooks.js +248 -0
  88. package/dist/harness/openCodeHooks.js.map +1 -0
  89. package/dist/harness/openWebuiHooks.d.ts.map +1 -1
  90. package/dist/harness/openWebuiHooks.js +56 -11
  91. package/dist/harness/openWebuiHooks.js.map +1 -1
  92. package/dist/harness/openclawHooks.d.ts.map +1 -1
  93. package/dist/harness/openclawHooks.js +30 -54
  94. package/dist/harness/openclawHooks.js.map +1 -1
  95. package/dist/harness/openhandsHooks.d.ts.map +1 -1
  96. package/dist/harness/openhandsHooks.js +35 -41
  97. package/dist/harness/openhandsHooks.js.map +1 -1
  98. package/dist/harness/piHooks.d.ts.map +1 -1
  99. package/dist/harness/piHooks.js +31 -58
  100. package/dist/harness/piHooks.js.map +1 -1
  101. package/dist/harness/protectedPaths.d.ts +353 -0
  102. package/dist/harness/protectedPaths.d.ts.map +1 -0
  103. package/dist/harness/protectedPaths.js +805 -0
  104. package/dist/harness/protectedPaths.js.map +1 -0
  105. package/dist/harness/rooCodeHooks.d.ts.map +1 -1
  106. package/dist/harness/rooCodeHooks.js +34 -48
  107. package/dist/harness/rooCodeHooks.js.map +1 -1
  108. package/dist/harness/windsurfHooks.d.ts +72 -0
  109. package/dist/harness/windsurfHooks.d.ts.map +1 -1
  110. package/dist/harness/windsurfHooks.js +172 -58
  111. package/dist/harness/windsurfHooks.js.map +1 -1
  112. package/dist/harness/windsurfJetBrainsProxy.d.ts +78 -0
  113. package/dist/harness/windsurfJetBrainsProxy.d.ts.map +1 -0
  114. package/dist/harness/windsurfJetBrainsProxy.js +159 -0
  115. package/dist/harness/windsurfJetBrainsProxy.js.map +1 -0
  116. package/dist/hashReporter.js +1 -1
  117. package/dist/hashReporter.js.map +1 -1
  118. package/dist/index.d.ts +12 -6
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +14 -6
  121. package/dist/index.js.map +1 -1
  122. package/dist/integrityStore.d.ts +0 -8
  123. package/dist/integrityStore.d.ts.map +1 -1
  124. package/dist/integrityStore.js +6 -29
  125. package/dist/integrityStore.js.map +1 -1
  126. package/dist/lib/approvedBypasses.d.ts +76 -0
  127. package/dist/lib/approvedBypasses.d.ts.map +1 -0
  128. package/dist/lib/approvedBypasses.js +140 -0
  129. package/dist/lib/approvedBypasses.js.map +1 -0
  130. package/dist/lib/complianceProbes.d.ts.map +1 -1
  131. package/dist/lib/complianceProbes.js +5 -0
  132. package/dist/lib/complianceProbes.js.map +1 -1
  133. package/dist/lib/decisionsDigest.d.ts +99 -0
  134. package/dist/lib/decisionsDigest.d.ts.map +1 -0
  135. package/dist/lib/decisionsDigest.js +199 -0
  136. package/dist/lib/decisionsDigest.js.map +1 -0
  137. package/dist/lib/egressPolicy.d.ts +69 -0
  138. package/dist/lib/egressPolicy.d.ts.map +1 -0
  139. package/dist/lib/egressPolicy.js +126 -0
  140. package/dist/lib/egressPolicy.js.map +1 -0
  141. package/dist/lib/gitWorktrees.d.ts +140 -0
  142. package/dist/lib/gitWorktrees.d.ts.map +1 -0
  143. package/dist/lib/gitWorktrees.js +191 -0
  144. package/dist/lib/gitWorktrees.js.map +1 -0
  145. package/dist/lib/policySnapshot.d.ts +224 -0
  146. package/dist/lib/policySnapshot.d.ts.map +1 -0
  147. package/dist/lib/policySnapshot.js +637 -0
  148. package/dist/lib/policySnapshot.js.map +1 -0
  149. package/dist/lib/processPoller.d.ts +44 -0
  150. package/dist/lib/processPoller.d.ts.map +1 -1
  151. package/dist/lib/processPoller.js +176 -1
  152. package/dist/lib/processPoller.js.map +1 -1
  153. package/dist/lib/runtimeEnv.d.ts +8 -0
  154. package/dist/lib/runtimeEnv.d.ts.map +1 -1
  155. package/dist/lib/runtimeEnv.js +3 -0
  156. package/dist/lib/runtimeEnv.js.map +1 -1
  157. package/dist/localTrajectoryHeuristics.d.ts +51 -0
  158. package/dist/localTrajectoryHeuristics.d.ts.map +1 -0
  159. package/dist/localTrajectoryHeuristics.js +90 -0
  160. package/dist/localTrajectoryHeuristics.js.map +1 -0
  161. package/dist/sessionReporter.d.ts +70 -0
  162. package/dist/sessionReporter.d.ts.map +1 -0
  163. package/dist/sessionReporter.js +140 -0
  164. package/dist/sessionReporter.js.map +1 -0
  165. package/dist/skillWriter.d.ts +1 -1
  166. package/dist/skillWriter.d.ts.map +1 -1
  167. package/dist/skillWriter.js +5 -2
  168. package/dist/skillWriter.js.map +1 -1
  169. package/dist/syncLoop.d.ts +105 -3
  170. package/dist/syncLoop.d.ts.map +1 -1
  171. package/dist/syncLoop.js +397 -65
  172. package/dist/syncLoop.js.map +1 -1
  173. package/dist/trajectoryMonitor.d.ts +2 -0
  174. package/dist/trajectoryMonitor.d.ts.map +1 -1
  175. package/dist/trajectoryMonitor.js +57 -0
  176. package/dist/trajectoryMonitor.js.map +1 -1
  177. package/dist/watcher/driftWatcher.d.ts.map +1 -1
  178. package/dist/watcher/driftWatcher.js +12 -3
  179. package/dist/watcher/driftWatcher.js.map +1 -1
  180. package/dist/watcher/settingsGuard.d.ts +23 -0
  181. package/dist/watcher/settingsGuard.d.ts.map +1 -1
  182. package/dist/watcher/settingsGuard.js +202 -17
  183. package/dist/watcher/settingsGuard.js.map +1 -1
  184. package/package.json +37 -6
  185. package/dist/brainIndexer.d.ts +0 -51
  186. package/dist/brainIndexer.d.ts.map +0 -1
  187. package/dist/brainIndexer.js +0 -148
  188. package/dist/brainIndexer.js.map +0 -1
  189. package/dist/harness/cursorHooksJson.d.ts +0 -29
  190. package/dist/harness/cursorHooksJson.d.ts.map +0 -1
  191. package/dist/harness/cursorHooksJson.js +0 -130
  192. package/dist/harness/cursorHooksJson.js.map +0 -1
  193. package/dist/harness/gooseHooksWriter.d.ts +0 -27
  194. package/dist/harness/gooseHooksWriter.d.ts.map +0 -1
  195. package/dist/harness/gooseHooksWriter.js +0 -147
  196. package/dist/harness/gooseHooksWriter.js.map +0 -1
  197. package/dist/harness/openhandsHooksWriter.d.ts +0 -23
  198. package/dist/harness/openhandsHooksWriter.d.ts.map +0 -1
  199. package/dist/harness/openhandsHooksWriter.js +0 -146
  200. package/dist/harness/openhandsHooksWriter.js.map +0 -1
@@ -0,0 +1,78 @@
1
+ /**
2
+ * windsurfJetBrainsProxy.ts — routes the Windsurf JetBrains plugin's
3
+ * Cascade AI traffic through Intutic's TLS MITM proxy, for every installed
4
+ * JetBrains product.
5
+ *
6
+ * # What this configures, and why it takes two files per IDE
7
+ *
8
+ * Unlike Desktop (one fixed `~/.codeium/windsurf/settings.json`), the
9
+ * JetBrains plugin has no config surface of its own for a manual proxy
10
+ * endpoint — confirmed by extracting the plugin's own compiled settings
11
+ * class (`com.codeium.intellij.settings.AppSettingsState`, decompiled from
12
+ * the real `codeium-2.12.27.jar` published on the JetBrains Marketplace,
13
+ * 2026-08-18): its only proxy-related field is `detectProxy` (boolean —
14
+ * exactly the "Detect proxy" toggle
15
+ * docs.devin.ai/desktop/troubleshooting/plugins-enterprise/jetbrains-proxy
16
+ * describes), persisted via `@State(name =
17
+ * "com.codeium.intellij.settings.AppSettingsState", storages =
18
+ * @Storage("CodeiumSettings.xml"))`. There is no `customProxyUrl`-shaped
19
+ * field alongside the plugin's OTHER custom-endpoint fields
20
+ * (`customApiServerUrl`/`customInferenceApiServerUrl`/`customWebsiteUrl`)
21
+ * — those exist, but redirecting to a custom API server is a materially
22
+ * different mechanism (a different backend, not transparent interception
23
+ * of the same traffic) than the TLS-MITM-via-system-proxy model this
24
+ * codebase already uses for every other harness, so this module does not
25
+ * use them.
26
+ *
27
+ * "Detect proxy" makes the plugin use the IDE PLATFORM's own HTTP proxy
28
+ * setting — a SEPARATE file, `proxy.settings.xml`, backing JetBrains
29
+ * Platform's `HttpConfigurable` state (`@Storage("proxy.settings.xml")`,
30
+ * still live in current `intellij-community` source despite being
31
+ * `@Deprecated(forRemoval = true)` in favor of a newer `ProxySettings`
32
+ * API — the deprecated class still persists to this same file today; see
33
+ * the module doc comment in `jetbrainsXmlConfig.ts` for why this module
34
+ * merges rather than overwrites it). So configuring the plugin needs
35
+ * BOTH: `detectProxy=true` in `CodeiumSettings.xml`, and a manual HTTP
36
+ * proxy pointed at Intutic's local port in `proxy.settings.xml`.
37
+ *
38
+ * # Discovery: no fixed path, unlike Desktop
39
+ *
40
+ * The JetBrains plugin ships for every JetBrains product (IntelliJ IDEA,
41
+ * PyCharm, WebStorm, GoLand, CLion, RubyMine, PhpStorm, RustRover,
42
+ * DataSpell, Rider, DataGrip, Android Studio, ...), each with its own
43
+ * `<Product><Version>` config directory under a shared JetBrains root
44
+ * (`~/Library/Application Support/JetBrains` on macOS, `~/.config/
45
+ * JetBrains` on Linux, `%APPDATA%\JetBrains` on Windows — confirmed
46
+ * against JetBrains' own support KB). This module does not enumerate
47
+ * product names; it lists that root's subdirectories and configures ONLY
48
+ * ones that already have an `options/` directory — the signal that this
49
+ * is a real, already-initialized IDE install, not a guess at a product
50
+ * name or version number this codebase should never invent.
51
+ *
52
+ * @module
53
+ */
54
+ /** The shared JetBrains config root for this OS, or `null` on a platform
55
+ * this module has no confirmed path for (anything but darwin/linux/
56
+ * win32) — callers treat `null` as "nothing to configure," never guess a
57
+ * path. */
58
+ export declare function jetbrainsConfigRoot(): string | null;
59
+ /**
60
+ * Every `<Product><Version>/options` directory under the JetBrains config
61
+ * root that ALREADY EXISTS — never a guessed or newly-created product/
62
+ * version directory. Returns `[]` when the root itself is absent (no
63
+ * JetBrains product ever installed for this user) rather than treating
64
+ * that as an error.
65
+ */
66
+ export declare function discoverJetBrainsOptionsDirs(): Promise<string[]>;
67
+ /**
68
+ * Configures every installed JetBrains product's HTTP proxy + the
69
+ * Windsurf plugin's `detectProxy` toggle to route through Intutic's local
70
+ * TLS MITM proxy. Never throws: a product whose settings files don't
71
+ * match the shape `jetbrainsXmlConfig.ts` understands is skipped and
72
+ * logged, not corrupted; a system with no JetBrains products installed at
73
+ * all is a normal, silent no-op (this integration is opt-in by
74
+ * installation, the same way the Cisco skill-scanner integration degrades
75
+ * when its binary is absent).
76
+ */
77
+ export declare function configureJetBrainsWindsurfProxy(proxyPort: number): Promise<void>;
78
+ //# sourceMappingURL=windsurfJetBrainsProxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurfJetBrainsProxy.d.ts","sourceRoot":"","sources":["../../src/harness/windsurfJetBrainsProxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAkBH;;;YAGY;AACZ,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAWnD;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBtE;AAgBD;;;;;;;;;GASG;AACH,wBAAsB,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCtF"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * windsurfJetBrainsProxy.ts — routes the Windsurf JetBrains plugin's
3
+ * Cascade AI traffic through Intutic's TLS MITM proxy, for every installed
4
+ * JetBrains product.
5
+ *
6
+ * # What this configures, and why it takes two files per IDE
7
+ *
8
+ * Unlike Desktop (one fixed `~/.codeium/windsurf/settings.json`), the
9
+ * JetBrains plugin has no config surface of its own for a manual proxy
10
+ * endpoint — confirmed by extracting the plugin's own compiled settings
11
+ * class (`com.codeium.intellij.settings.AppSettingsState`, decompiled from
12
+ * the real `codeium-2.12.27.jar` published on the JetBrains Marketplace,
13
+ * 2026-08-18): its only proxy-related field is `detectProxy` (boolean —
14
+ * exactly the "Detect proxy" toggle
15
+ * docs.devin.ai/desktop/troubleshooting/plugins-enterprise/jetbrains-proxy
16
+ * describes), persisted via `@State(name =
17
+ * "com.codeium.intellij.settings.AppSettingsState", storages =
18
+ * @Storage("CodeiumSettings.xml"))`. There is no `customProxyUrl`-shaped
19
+ * field alongside the plugin's OTHER custom-endpoint fields
20
+ * (`customApiServerUrl`/`customInferenceApiServerUrl`/`customWebsiteUrl`)
21
+ * — those exist, but redirecting to a custom API server is a materially
22
+ * different mechanism (a different backend, not transparent interception
23
+ * of the same traffic) than the TLS-MITM-via-system-proxy model this
24
+ * codebase already uses for every other harness, so this module does not
25
+ * use them.
26
+ *
27
+ * "Detect proxy" makes the plugin use the IDE PLATFORM's own HTTP proxy
28
+ * setting — a SEPARATE file, `proxy.settings.xml`, backing JetBrains
29
+ * Platform's `HttpConfigurable` state (`@Storage("proxy.settings.xml")`,
30
+ * still live in current `intellij-community` source despite being
31
+ * `@Deprecated(forRemoval = true)` in favor of a newer `ProxySettings`
32
+ * API — the deprecated class still persists to this same file today; see
33
+ * the module doc comment in `jetbrainsXmlConfig.ts` for why this module
34
+ * merges rather than overwrites it). So configuring the plugin needs
35
+ * BOTH: `detectProxy=true` in `CodeiumSettings.xml`, and a manual HTTP
36
+ * proxy pointed at Intutic's local port in `proxy.settings.xml`.
37
+ *
38
+ * # Discovery: no fixed path, unlike Desktop
39
+ *
40
+ * The JetBrains plugin ships for every JetBrains product (IntelliJ IDEA,
41
+ * PyCharm, WebStorm, GoLand, CLion, RubyMine, PhpStorm, RustRover,
42
+ * DataSpell, Rider, DataGrip, Android Studio, ...), each with its own
43
+ * `<Product><Version>` config directory under a shared JetBrains root
44
+ * (`~/Library/Application Support/JetBrains` on macOS, `~/.config/
45
+ * JetBrains` on Linux, `%APPDATA%\JetBrains` on Windows — confirmed
46
+ * against JetBrains' own support KB). This module does not enumerate
47
+ * product names; it lists that root's subdirectories and configures ONLY
48
+ * ones that already have an `options/` directory — the signal that this
49
+ * is a real, already-initialized IDE install, not a guess at a product
50
+ * name or version number this codebase should never invent.
51
+ *
52
+ * @module
53
+ */
54
+ import * as fs from 'node:fs/promises';
55
+ import * as path from 'node:path';
56
+ import * as os from 'node:os';
57
+ import { createLogger } from '@intutic/logger';
58
+ import { mergeXmlComponentOptions } from './jetbrainsXmlConfig.js';
59
+ const log = createLogger('sync-windsurf-jetbrains-proxy');
60
+ /** The Windsurf plugin's own settings component — see module doc comment. */
61
+ const CODEIUM_SETTINGS_COMPONENT = 'com.codeium.intellij.settings.AppSettingsState';
62
+ const CODEIUM_SETTINGS_FILE = 'CodeiumSettings.xml';
63
+ /** JetBrains Platform's own HTTP proxy state — see module doc comment. */
64
+ const HTTP_CONFIGURABLE_COMPONENT = 'HttpConfigurable';
65
+ const PROXY_SETTINGS_FILE = 'proxy.settings.xml';
66
+ /** The shared JetBrains config root for this OS, or `null` on a platform
67
+ * this module has no confirmed path for (anything but darwin/linux/
68
+ * win32) — callers treat `null` as "nothing to configure," never guess a
69
+ * path. */
70
+ export function jetbrainsConfigRoot() {
71
+ switch (process.platform) {
72
+ case 'darwin':
73
+ return path.join(os.homedir(), 'Library', 'Application Support', 'JetBrains');
74
+ case 'linux':
75
+ return path.join(os.homedir(), '.config', 'JetBrains');
76
+ case 'win32':
77
+ return process.env.APPDATA ? path.join(process.env.APPDATA, 'JetBrains') : null;
78
+ default:
79
+ return null;
80
+ }
81
+ }
82
+ /**
83
+ * Every `<Product><Version>/options` directory under the JetBrains config
84
+ * root that ALREADY EXISTS — never a guessed or newly-created product/
85
+ * version directory. Returns `[]` when the root itself is absent (no
86
+ * JetBrains product ever installed for this user) rather than treating
87
+ * that as an error.
88
+ */
89
+ export async function discoverJetBrainsOptionsDirs() {
90
+ const root = jetbrainsConfigRoot();
91
+ if (!root)
92
+ return [];
93
+ let entries;
94
+ try {
95
+ entries = await fs.readdir(root);
96
+ }
97
+ catch {
98
+ return [];
99
+ }
100
+ const dirs = [];
101
+ for (const entry of entries) {
102
+ const optionsDir = path.join(root, entry, 'options');
103
+ try {
104
+ const stat = await fs.stat(optionsDir);
105
+ if (stat.isDirectory())
106
+ dirs.push(optionsDir);
107
+ }
108
+ catch {
109
+ // Not a real IDE install (no options/ dir yet) — skip, don't create it.
110
+ }
111
+ }
112
+ return dirs;
113
+ }
114
+ async function readFileOrNull(filePath) {
115
+ try {
116
+ return await fs.readFile(filePath, 'utf-8');
117
+ }
118
+ catch {
119
+ return null;
120
+ }
121
+ }
122
+ async function writeFileAtomic(filePath, content) {
123
+ const tmp = filePath + '.intutic-tmp';
124
+ await fs.writeFile(tmp, content, 'utf-8');
125
+ await fs.rename(tmp, filePath);
126
+ }
127
+ /**
128
+ * Configures every installed JetBrains product's HTTP proxy + the
129
+ * Windsurf plugin's `detectProxy` toggle to route through Intutic's local
130
+ * TLS MITM proxy. Never throws: a product whose settings files don't
131
+ * match the shape `jetbrainsXmlConfig.ts` understands is skipped and
132
+ * logged, not corrupted; a system with no JetBrains products installed at
133
+ * all is a normal, silent no-op (this integration is opt-in by
134
+ * installation, the same way the Cisco skill-scanner integration degrades
135
+ * when its binary is absent).
136
+ */
137
+ export async function configureJetBrainsWindsurfProxy(proxyPort) {
138
+ const optionsDirs = await discoverJetBrainsOptionsDirs();
139
+ if (optionsDirs.length === 0)
140
+ return;
141
+ for (const optionsDir of optionsDirs) {
142
+ const product = path.basename(path.dirname(optionsDir));
143
+ const proxyOk = await mergeXmlComponentOptions(path.join(optionsDir, PROXY_SETTINGS_FILE), HTTP_CONFIGURABLE_COMPONENT, {
144
+ USE_HTTP_PROXY: true,
145
+ USE_PROXY_PAC: false,
146
+ PROXY_TYPE_IS_SOCKS: false,
147
+ PROXY_HOST: '127.0.0.1',
148
+ PROXY_PORT: String(proxyPort),
149
+ }, readFileOrNull, writeFileAtomic);
150
+ const settingsOk = await mergeXmlComponentOptions(path.join(optionsDir, CODEIUM_SETTINGS_FILE), CODEIUM_SETTINGS_COMPONENT, { detectProxy: true }, readFileOrNull, writeFileAtomic);
151
+ if (proxyOk && settingsOk) {
152
+ log.info({ action: 'jetbrains_windsurf_proxy_configured', product, port: proxyPort }, 'Configured JetBrains platform proxy + Windsurf plugin detectProxy');
153
+ }
154
+ else {
155
+ log.warn({ action: 'jetbrains_windsurf_proxy_skipped', product, proxyOk, settingsOk }, 'One or both JetBrains settings files did not match the expected shape — left untouched');
156
+ }
157
+ }
158
+ }
159
+ //# sourceMappingURL=windsurfJetBrainsProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurfJetBrainsProxy.js","sourceRoot":"","sources":["../../src/harness/windsurfJetBrainsProxy.ts"],"names":[],"mappings":"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"}
@@ -43,7 +43,7 @@ export async function computeFileHashes(workspaceRoot, harnesses, canonicalHashe
43
43
  drifted,
44
44
  });
45
45
  }
46
- catch (err) {
46
+ catch {
47
47
  // File doesn't exist or isn't readable — report empty hash, not drifted
48
48
  results.push({
49
49
  filePath: relativePath,
@@ -1 +1 @@
1
- {"version":3,"file":"hashReporter.js","sourceRoot":"","sources":["../src/hashReporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,aAAqB,EACrB,SAAwB,EACxB,eAAuC;IAEvC,MAAM,OAAO,GAAkB,EAAE,CAAA;IAEjC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,CAAC,QAAQ;YAAE,SAAQ,CAAC,mBAAmB;QAE3C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;QAC1D,MAAM,YAAY,GAAG,QAAQ,CAAA;QAE7B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAA;YAC5C,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;YACrD,MAAM,OAAO,GAAG,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,SAAS,CAAA;YAE3D,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,YAAY;gBACtB,SAAS;gBACT,aAAa,EAAE,SAAS;gBACxB,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,wEAAwE;YACxE,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,EAAE;gBACb,aAAa,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE;gBAClD,OAAO,EAAE,KAAK;aACf,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACzD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACpE,CAAC"}
1
+ {"version":3,"file":"hashReporter.js","sourceRoot":"","sources":["../src/hashReporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,aAAqB,EACrB,SAAwB,EACxB,eAAuC;IAEvC,MAAM,OAAO,GAAkB,EAAE,CAAA;IAEjC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,CAAC,QAAQ;YAAE,SAAQ,CAAC,mBAAmB;QAE3C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;QAC1D,MAAM,YAAY,GAAG,QAAQ,CAAA;QAE7B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAA;YAC5C,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;YACrD,MAAM,OAAO,GAAG,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,SAAS,CAAA;YAE3D,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,YAAY;gBACtB,SAAS;gBACT,aAAa,EAAE,SAAS;gBACxB,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;YACxE,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,EAAE;gBACb,aAAa,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE;gBAClD,OAAO,EAAE,KAAK;aACf,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACzD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACpE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -12,21 +12,22 @@
12
12
  *
13
13
  * @module
14
14
  */
15
- export { startSyncLoop, syncOfflineTraces } from './syncLoop.js';
15
+ export { startSyncLoop, syncOfflineTraces, refreshGateCaches, localHoldTokensFor } from './syncLoop.js';
16
+ export { collectAgentReport, reportAgent, fetchLocalProxyInstanceId } from './agentReporter.js';
17
+ export { startHarnessSession, endAllOpenSessions, readGitInfo } from './sessionReporter.js';
16
18
  export type { SyncLoopOptions, SyncResult } from './syncLoop.js';
17
- export { writeConfigFiles } from './configWriter.js';
19
+ export { writeConfigFiles, loadLocalSopEntries } from './configWriter.js';
18
20
  export type { WriteResult } from './configWriter.js';
19
21
  export { computeFileHashes, hashFile } from './hashReporter.js';
20
- export { loadIntegrity, saveIntegrity, loadContextIntegrity, saveContextIntegrity } from './integrityStore.js';
21
- export { BrainIndexer } from './brainIndexer.js';
22
+ export { loadIntegrity, saveIntegrity } from './integrityStore.js';
22
23
  export { HARNESS_FILES } from './configWriter.js';
23
24
  export { SyncWsClient } from './wsClient.js';
24
25
  export type { WsClientOptions } from './wsClient.js';
25
26
  export { startWatcher } from './watcher/driftWatcher.js';
26
- export { updatePreToolUseHooks, parseSopConstraints, drainHookEvents } from './harness/claudeCodeHooks.js';
27
+ export { updatePreToolUseHooks, parseSopConstraints, drainHookEvents, drainReviewRequests, REVIEW_REQUESTS_LOG, REVIEW_REQUESTS_BASENAME, REVIEW_REQUEST_VERSION, } from './harness/claudeCodeHooks.js';
27
28
  export type { SopHookConstraints } from './harness/claudeCodeHooks.js';
28
29
  export { injectMcpServer } from './harness/mcpAutoWrite.js';
29
- export { guardSettingsFile } from './watcher/settingsGuard.js';
30
+ export { guardSettingsFile, warnIfDshCoverageGap } from './watcher/settingsGuard.js';
30
31
  export { writeAntigravityHooks } from './harness/antigravityHooks.js';
31
32
  export { writeClaudeDesktopHooks } from './harness/claudeDesktopHooks.js';
32
33
  export { writeRooCodeHooks } from './harness/rooCodeHooks.js';
@@ -36,8 +37,13 @@ export { writeN8nHooks } from './harness/n8nHooks.js';
36
37
  export { writeHermesHooks } from './harness/hermesHooks.js';
37
38
  export { writeOpenclawHooks } from './harness/openclawHooks.js';
38
39
  export { writePiHooks } from './harness/piHooks.js';
40
+ export { writeCodexHooks } from './harness/codexHooks.js';
41
+ export { writeGithubCopilotHooks } from './harness/githubCopilotHooks.js';
39
42
  export { writeRuntimeEnv } from './lib/runtimeEnv.js';
43
+ export { refreshPolicySnapshot, writePolicySnapshot, fetchResolvedPolicy, buildSnapshotRules, validateRule, DEFAULT_SNAPSHOT_DIR, DESTRUCTIVE_TIER_SEVERITY, } from './lib/policySnapshot.js';
40
44
  export { runComplianceProbes } from './lib/complianceProbes.js';
41
45
  export { getActiveAgentProcesses } from './lib/processPoller.js';
42
46
  export { TrajectoryMonitor } from './trajectoryMonitor.js';
47
+ export { refreshDecisionsDigest, fetchDecisionsDigest, renderDecisionsMarkdown, renderBoundedSection, injectBoundedSection, DECISIONS_LOG_RELATIVE_PATH, } from './lib/decisionsDigest.js';
48
+ export type { DecisionsDigestEntry, DecisionsDigestResponse, DecisionsDigestOptions, } from './lib/decisionsDigest.js';
43
49
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC9G,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC1G,YAAY,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAG9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAGrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAEvG,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAC3F,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAEhE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AACrC,YAAY,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAGpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAGrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAInD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAGzE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAA;AACjC,YAAY,EACV,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAA"}
package/dist/index.js CHANGED
@@ -12,17 +12,18 @@
12
12
  *
13
13
  * @module
14
14
  */
15
- export { startSyncLoop, syncOfflineTraces } from './syncLoop.js';
16
- export { writeConfigFiles } from './configWriter.js';
15
+ export { startSyncLoop, syncOfflineTraces, refreshGateCaches, localHoldTokensFor } from './syncLoop.js';
16
+ export { collectAgentReport, reportAgent, fetchLocalProxyInstanceId } from './agentReporter.js';
17
+ export { startHarnessSession, endAllOpenSessions, readGitInfo } from './sessionReporter.js';
18
+ export { writeConfigFiles, loadLocalSopEntries } from './configWriter.js';
17
19
  export { computeFileHashes, hashFile } from './hashReporter.js';
18
- export { loadIntegrity, saveIntegrity, loadContextIntegrity, saveContextIntegrity } from './integrityStore.js';
19
- export { BrainIndexer } from './brainIndexer.js';
20
+ export { loadIntegrity, saveIntegrity } from './integrityStore.js';
20
21
  export { HARNESS_FILES } from './configWriter.js';
21
22
  export { SyncWsClient } from './wsClient.js';
22
23
  export { startWatcher } from './watcher/driftWatcher.js';
23
- export { updatePreToolUseHooks, parseSopConstraints, drainHookEvents } from './harness/claudeCodeHooks.js';
24
+ export { updatePreToolUseHooks, parseSopConstraints, drainHookEvents, drainReviewRequests, REVIEW_REQUESTS_LOG, REVIEW_REQUESTS_BASENAME, REVIEW_REQUEST_VERSION, } from './harness/claudeCodeHooks.js';
24
25
  export { injectMcpServer } from './harness/mcpAutoWrite.js';
25
- export { guardSettingsFile } from './watcher/settingsGuard.js';
26
+ export { guardSettingsFile, warnIfDshCoverageGap } from './watcher/settingsGuard.js';
26
27
  // Gap 3 fix — Antigravity (Gemini CLI) hook coverage
27
28
  export { writeAntigravityHooks } from './harness/antigravityHooks.js';
28
29
  // WS-B — new harness hook coverage (claude-desktop, roo-code, continue, open-webui, n8n)
@@ -35,9 +36,16 @@ export { writeN8nHooks } from './harness/n8nHooks.js';
35
36
  export { writeHermesHooks } from './harness/hermesHooks.js';
36
37
  export { writeOpenclawHooks } from './harness/openclawHooks.js';
37
38
  export { writePiHooks } from './harness/piHooks.js';
39
+ // Formerly ungated harnesses with verified native mechanisms
40
+ // (codex: ~/.codex/hooks.json; github-copilot: VS Code agent hooks, Preview)
41
+ export { writeCodexHooks } from './harness/codexHooks.js';
42
+ export { writeGithubCopilotHooks } from './harness/githubCopilotHooks.js';
38
43
  // WS-A & WS-F — runtime env writer and compliance probes
39
44
  export { writeRuntimeEnv } from './lib/runtimeEnv.js';
45
+ export { refreshPolicySnapshot, writePolicySnapshot, fetchResolvedPolicy, buildSnapshotRules, validateRule, DEFAULT_SNAPSHOT_DIR, DESTRUCTIVE_TIER_SEVERITY, } from './lib/policySnapshot.js';
40
46
  export { runComplianceProbes } from './lib/complianceProbes.js';
41
47
  export { getActiveAgentProcesses } from './lib/processPoller.js';
42
48
  export { TrajectoryMonitor } from './trajectoryMonitor.js';
49
+ // Phase 6 — governed decisions log
50
+ export { refreshDecisionsDigest, fetchDecisionsDigest, renderDecisionsMarkdown, renderBoundedSection, injectBoundedSection, DECISIONS_LOG_RELATIVE_PATH, } from './lib/decisionsDigest.js';
43
51
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAGhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAGpD,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC9G,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAG1G,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAE9D,qDAAqD;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAErE,yFAAyF;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,kEAAkE;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,yDAAyD;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAEvG,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAG3F,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAGzE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAEpF,qDAAqD;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAErE,yFAAyF;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,kEAAkE;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,6DAA6D;AAC7D,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAEzE,yDAAyD;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,mCAAmC;AACnC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAA"}
@@ -32,12 +32,4 @@ export declare function loadIntegrity(workspaceRoot: string): Promise<IntegrityS
32
32
  * @param store - The IntegrityStore to persist.
33
33
  */
34
34
  export declare function saveIntegrity(workspaceRoot: string, store: IntegrityStore): Promise<void>;
35
- /**
36
- * Load the local context integrity store from `.intutic/context_integrity.json`.
37
- */
38
- export declare function loadContextIntegrity(workspaceRoot: string): Promise<IntegrityStore | null>;
39
- /**
40
- * Save the context integrity store to `.intutic/context_integrity.json`.
41
- */
42
- export declare function saveContextIntegrity(workspaceRoot: string, store: IntegrityStore): Promise<void>;
43
35
  //# sourceMappingURL=integrityStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"integrityStore.d.ts","sourceRoot":"","sources":["../src/integrityStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAQ3D;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAqBhC;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAahC;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAUf"}
1
+ {"version":3,"file":"integrityStore.d.ts","sourceRoot":"","sources":["../src/integrityStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAQ3D;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAqBhC;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -62,33 +62,10 @@ export async function saveIntegrity(workspaceRoot, store) {
62
62
  await node_fs.writeFile(tmpPath, content, 'utf-8');
63
63
  await node_fs.rename(tmpPath, filePath);
64
64
  }
65
- /**
66
- * Load the local context integrity store from `.intutic/context_integrity.json`.
67
- */
68
- export async function loadContextIntegrity(workspaceRoot) {
69
- const filePath = node_path.join(workspaceRoot, INTUTIC_DIR, 'context_integrity.json');
70
- try {
71
- const raw = await node_fs.readFile(filePath, 'utf-8');
72
- const parsed = JSON.parse(raw);
73
- if (typeof parsed.files !== 'object') {
74
- return null;
75
- }
76
- return parsed;
77
- }
78
- catch {
79
- return null;
80
- }
81
- }
82
- /**
83
- * Save the context integrity store to `.intutic/context_integrity.json`.
84
- */
85
- export async function saveContextIntegrity(workspaceRoot, store) {
86
- const dir = node_path.join(workspaceRoot, INTUTIC_DIR);
87
- await node_fs.mkdir(dir, { recursive: true });
88
- const filePath = node_path.join(dir, 'context_integrity.json');
89
- const tmpPath = `${filePath}.tmp`;
90
- const content = JSON.stringify(store, null, 2) + '\n';
91
- await node_fs.writeFile(tmpPath, content, 'utf-8');
92
- await node_fs.rename(tmpPath, filePath);
93
- }
65
+ // `loadContextIntegrity` / `saveContextIntegrity` were removed on 2026-07-30. They
66
+ // had no callers in either repo — not even tests — while
67
+ // `.intutic/context_integrity.json` sat in three harness hook denylists as a
68
+ // protected path. The file was never created, so those hooks guarded nothing. The
69
+ // config integrity store above already hashes every governed file `syncLoop` writes,
70
+ // which is what the second store would have duplicated.
94
71
  //# sourceMappingURL=integrityStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"integrityStore.js","sourceRoot":"","sources":["../src/integrityStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integrityStore.js","sourceRoot":"","sources":["../src/integrityStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAGtC,yEAAyE;AACzE,MAAM,cAAc,GAAG,gBAAgB,CAAA;AAEvC,8CAA8C;AAC9C,MAAM,WAAW,GAAG,UAAU,CAAA;AAE9B;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAqB;IAErB,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;IAE3E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAA;QAEhD,yBAAyB;QACzB,IACE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;YACrC,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;YACxC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAChC,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;QACrC,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAqB,EACrB,KAAqB;IAErB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;IACtD,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE7C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,CAAA;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;IAErD,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAClD,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzC,CAAC;AAGD,mFAAmF;AACnF,yDAAyD;AACzD,6EAA6E;AAC7E,kFAAkF;AAClF,qFAAqF;AACrF,wDAAwD"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * approvedBypasses.ts — ships approved `review_before` bypasses *to* the
3
+ * machine, mirroring how `policySnapshot.ts` ships policy.
4
+ *
5
+ * # Why a separate file from policySnapshot.ts
6
+ *
7
+ * A bypass entry is not a rule: it is a one-time, per-call approval keyed on
8
+ * (workspace, SOP rule id, normalised tool name, hashed command/target), with
9
+ * its own TTL, and it is additive in the *opposite* direction from a policy
10
+ * rule — a policy snapshot can only turn an allow into a block, this cache can
11
+ * only turn one already-held call into an allow, for the one caller who
12
+ * already approved it. Folding the two into one artifact would make either
13
+ * "what does this line do" or "is this additive in the safe direction"
14
+ * dependent on which column you are looking at.
15
+ *
16
+ * # The contract with the gate
17
+ *
18
+ * `.intutic/hooks/approved-bypasses.jsonl` — same directory as the policy
19
+ * snapshot, and for the same reason: `.intutic/hooks` is already in
20
+ * `UNIVERSAL_PROTECTED_PATHS`, so every gate already refuses an agent's own
21
+ * attempt to write here. Two header lines carry integrity, exactly like the
22
+ * `.rules` projection: `#digest` (sha256 of the JSONL body, first 32 hex
23
+ * chars) and `#workspace` (refused if it does not match the gate's own
24
+ * workspace id). Unlike the policy snapshot there is no `#generated` age
25
+ * check — each line carries its own `expiresAt`, and the gate compares that
26
+ * against wall-clock time on every read. A stale FILE degrades to "fewer
27
+ * valid bypasses" (fail closed toward the hold); it can never resurrect an
28
+ * entry whose own TTL has passed.
29
+ *
30
+ * Only `review_before` gates read this today (claudeCodeHooks.ts's
31
+ * `_intuticApprovedBypass`) — see that module's docstring for why the other
32
+ * harness writers are not wired to it: none of them implement `review_before`
33
+ * holds at all, so there is nothing for a bypass to apply to there yet.
34
+ *
35
+ * @module
36
+ */
37
+ export declare const DEFAULT_BYPASS_CACHE_DIR: string;
38
+ export declare const APPROVED_BYPASSES_FILE = "approved-bypasses.jsonl";
39
+ /** One approved bypass, as `GET /api/v1/decisions/approved-bypasses` returns it. */
40
+ export interface ApprovedBypassEntry {
41
+ workspaceId: string;
42
+ sopRuleId: string;
43
+ toolNameNormalized: string;
44
+ targetHash: string;
45
+ holdId: string;
46
+ decidedBy: string;
47
+ decidedAt: string;
48
+ expiresAt: string;
49
+ }
50
+ export interface ApprovedBypassOptions {
51
+ controlPlaneUrl: string;
52
+ apiKey: string;
53
+ workspaceId: string;
54
+ /** Override the directory (tests). */
55
+ cacheDir?: string;
56
+ }
57
+ /** Fetches the workspace's currently-approved bypasses. Returns null on any
58
+ * failure — the caller keeps the previous cache file rather than replacing
59
+ * it with nothing, same rule `fetchResolvedPolicy` follows. */
60
+ export declare function fetchApprovedBypasses(opts: ApprovedBypassOptions): Promise<ApprovedBypassEntry[] | null>;
61
+ /** Writes the cache file atomically, digest and workspace header included —
62
+ * same convention as `writePolicySnapshot`. Exported so a test can assert
63
+ * the on-disk shape directly. */
64
+ export declare function writeApprovedBypasses(entries: ApprovedBypassEntry[], workspaceId: string, cacheDir?: string): Promise<{
65
+ digest: string;
66
+ count: number;
67
+ }>;
68
+ /** Fetch and write in one call. Safe to run on every sync cycle. Never
69
+ * throws — a failed poll must not take down the sync loop, and leaves the
70
+ * previous cache in place (stale bypasses still expire on their own TTL,
71
+ * which is what makes that safe). */
72
+ export declare function refreshApprovedBypasses(opts: ApprovedBypassOptions): Promise<{
73
+ digest: string;
74
+ count: number;
75
+ } | null>;
76
+ //# sourceMappingURL=approvedBypasses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvedBypasses.d.ts","sourceRoot":"","sources":["../../src/lib/approvedBypasses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAUH,eAAO,MAAM,wBAAwB,QAA+C,CAAA;AACpF,eAAO,MAAM,sBAAsB,4BAA4B,CAAA;AAE/D,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAmBD;;gEAEgE;AAChE,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAmCvC;AAED;;kCAEkC;AAClC,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAiC,GAC1C,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAsB5C;AAED;;;sCAGsC;AACtC,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CASnD"}