@intutic/sync-daemon 1.10.0 → 2.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 (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 @@
1
+ {"version":3,"file":"protectedPaths.js","sourceRoot":"","sources":["../../src/harness/protectedPaths.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rooCodeHooks.d.ts","sourceRoot":"","sources":["../../src/harness/rooCodeHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAmOH;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAK,GACf,OAAO,CAAC,IAAI,CAAC,CAuEf"}
1
+ {"version":3,"file":"rooCodeHooks.d.ts","sourceRoot":"","sources":["../../src/harness/rooCodeHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAqNH;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAK,GACf,OAAO,CAAC,IAAI,CAAC,CAuEf"}
@@ -20,18 +20,10 @@ import * as path from 'node:path';
20
20
  import * as os from 'node:os';
21
21
  import { createLogger } from '@intutic/logger';
22
22
  import { newIso } from '@intutic/id';
23
+ import { emitJsGate, emitJsFailClosedPrelude } from './gateBody.js';
24
+ import { UNIVERSAL_PROTECTED_PATHS } from './protectedPaths.js';
23
25
  const log = createLogger('sync-roo-code-hooks');
24
26
  /** Governance-sensitive paths that the hook gate protects. */
25
- const PROTECTED_PATHS = [
26
- path.join(os.homedir(), '.claude', 'settings.json'),
27
- path.join(os.homedir(), '.claude', 'settings.local.json'),
28
- '.claude/settings.json',
29
- '.claude/settings.local.json',
30
- '.intutic/hooks',
31
- '.intutic/integrity.json',
32
- '.intutic/context_integrity.json',
33
- '.roorules/hooks',
34
- ];
35
27
  // ─── Node.js hook script template ─────────────────────────────────────────────
36
28
  function buildRooCheckScript(proxyUrl, workspaceRoot, workspaceId) {
37
29
  const hookEventsLog = path.join(workspaceRoot, '.intutic', 'events', 'roo-hook-events.jsonl');
@@ -52,6 +44,7 @@ function buildRooCheckScript(proxyUrl, workspaceRoot, workspaceId) {
52
44
  * Workspace: ${workspaceId}
53
45
  */
54
46
  'use strict';
47
+ ${emitJsFailClosedPrelude({ harness: 'roo-code', contract: 'stdout-cancel' })}
55
48
  const path = require('path');
56
49
  const os = require('os');
57
50
  const fs = require('fs');
@@ -83,11 +76,12 @@ function loadRuntimeEnv() {
83
76
  }
84
77
 
85
78
  // ── Governance-sensitive paths ────────────────────────────────────────────────
86
- const PROTECTED_PATHS = ${JSON.stringify(PROTECTED_PATHS)};
79
+ ${emitJsGate({ harness: "roo-code", contract: 'stdout-cancel' })}
87
80
 
88
81
  // ── Dual-path logEvent ────────────────────────────────────────────────────────
89
82
  const HOOK_EVENTS_LOG = ${JSON.stringify(hookEventsLog)};
90
83
 
84
+ let _intuticSessionId = '';
91
85
  function logEvent(env, verdict, toolName, reason) {
92
86
  const ts = new Date().toISOString();
93
87
  const incidentId = crypto.createHash('sha1')
@@ -95,13 +89,16 @@ function logEvent(env, verdict, toolName, reason) {
95
89
  .digest('hex').slice(0, 16);
96
90
 
97
91
  const entry = {
98
- event: verdict === 'blocked' ? 'tool_blocked' : 'tool_allowed',
92
+ // Passed through, not collapsed to two values: the advisory tier emits
93
+ // 'tool_flagged', and a ternary here silently recorded it as an allow.
94
+ event: verdict,
99
95
  toolName,
100
96
  reason: reason || '',
101
97
  workspaceId: env.INTUTIC_WORKSPACE_ID,
102
98
  harnessType: 'roo-code',
103
99
  timestamp: ts,
104
100
  incidentId,
101
+ ...(_intuticSessionId ? { sessionId: _intuticSessionId } : {}),
105
102
  };
106
103
 
107
104
  // Path B — reliable file append
@@ -135,13 +132,13 @@ function logEvent(env, verdict, toolName, reason) {
135
132
  }
136
133
 
137
134
  function block(env, toolName, reason) {
138
- logEvent(env, 'blocked', toolName, reason);
135
+ logEvent(env, 'tool_blocked', toolName, reason);
139
136
  process.stdout.write(JSON.stringify({ cancel: true, errorMessage: reason }));
140
137
  process.exit(0);
141
138
  }
142
139
 
143
140
  function allow(env, toolName) {
144
- logEvent(env, 'allowed', toolName, '');
141
+ logEvent(env, 'tool_allowed', toolName, '');
145
142
  process.stdout.write(JSON.stringify({ cancel: false }));
146
143
  process.exit(0);
147
144
  }
@@ -153,47 +150,36 @@ process.stdin.on('data', (chunk) => { inputData += chunk; });
153
150
  process.stdin.on('end', () => {
154
151
  try {
155
152
  const ctx = JSON.parse(inputData);
156
- const toolName = (ctx.tool_name || ctx.toolName || '').toLowerCase();
153
+ _intuticSessionId = ctx.session_id || ctx.sessionId || ctx.conversation_id || ctx.conversationId || ctx.task_id || ctx.taskId || '';
154
+ // An envelope carrying none of the tool fields extracts to empty strings,
155
+ // which match no rule — an allow. Refused instead, and the refusal CANCELS
156
+ // (this harness ignores exit codes); see intuticGuardEnvelope.
157
+ intuticGuardEnvelope(ctx, ['tool_name', 'toolName', 'tool_input', 'toolInput'],
158
+ (v, t, r) => logEvent(runtimeEnv, v, t, r));
159
+ const toolName = (ctx.tool_name || ctx.toolName || '').toLowerCase()
160
+ // Case preserved for the gate. A BLOCK: SOP compiles to a tool-name
161
+ // pattern the operator wrote as they see it (Bash, Write) and this
162
+ // harness lowercases the tool for its own matching. Handing the gate the
163
+ // lowercased form means every SOP tool rule silently matches nothing here
164
+ // while appearing active everywhere else.
165
+ const rawToolName = ctx.tool_name || ctx.toolName || '';
157
166
  const toolInput = ctx.tool_input || ctx.toolInput || {};
158
167
  const toolInputStr = JSON.stringify(toolInput);
159
168
 
160
- // 1. Protected-path guard
161
- if (['edit', 'write', 'multiedit'].includes(toolName)) {
162
- const targetPath = toolInput.path || toolInput.file_path ||
163
- toolInput.new_path || toolInput.target || '';
164
- for (const p of PROTECTED_PATHS) {
165
- if (targetPath.includes(p) || String(targetPath).startsWith(p)) {
166
- const reason = 'Attempt to modify governance-protected path: "' + targetPath + '". ' +
167
- 'To change governance policy, update your SOP via the Intutic control plane.';
168
- block(runtimeEnv, toolName, reason);
169
- return;
170
- }
171
- }
172
- }
173
-
174
- // 2. Bash/shell command bypass guard
175
- if (toolName === 'bash') {
176
- const cmd = toolInput.command || toolInput.cmd || '';
177
- const BYPASS_PATTERNS = [
178
- 'chflags nouchg',
179
- 'chattr -i',
180
- 'rm -rf .intutic',
181
- 'rm -rf .roorules',
182
- ];
183
- for (const pattern of BYPASS_PATTERNS) {
184
- if (cmd.includes(pattern)) {
185
- const reason = 'Shell command matches governance bypass pattern: "' + pattern + '"';
186
- block(runtimeEnv, toolName, reason);
187
- return;
188
- }
189
- }
190
- }
169
+ // Roo Code ignores the exit code and reads a cancel object from stdout, so
170
+ // the shared gate is emitted with the stdout-cancel contract. Getting that
171
+ // wrong is invisible in review — the gate would exit 2 into a harness that
172
+ // never looks at it, and every call would proceed.
173
+ const targetPath = toolInput.path || toolInput.file_path || toolInput.filePath ||
174
+ toolInput.new_path || toolInput.target || toolInput.notebook_path || '';
175
+ const command = toolInput.command || toolInput.cmd || toolInput.script || '';
176
+ intuticGate(rawToolName, targetPath, command, (v, t, r) => logEvent(runtimeEnv, v, t, r), runtimeEnv.INTUTIC_WORKSPACE_ID, toolInput);
191
177
 
192
178
  allow(runtimeEnv, toolName);
193
179
  } catch (err) {
194
180
  // Fail closed on parse error
195
181
  const env = runtimeEnv;
196
- logEvent(env, 'blocked', 'unknown', String(err));
182
+ logEvent(env, 'tool_blocked', 'unknown', String(err));
197
183
  process.stdout.write(JSON.stringify({ cancel: true, errorMessage: '[Intutic] Hook error: ' + String(err) }));
198
184
  process.exit(0);
199
185
  }
@@ -217,7 +203,7 @@ function buildRooRulesContent() {
217
203
  '',
218
204
  'The following paths must not be modified by any agent:',
219
205
  '',
220
- ...PROTECTED_PATHS.map((p) => `- \`${p}\``),
206
+ ...UNIVERSAL_PROTECTED_PATHS.map((p) => `- \`${p}\``),
221
207
  '',
222
208
  '### Hook Events',
223
209
  '',
@@ -1 +1 @@
1
- {"version":3,"file":"rooCodeHooks.js","sourceRoot":"","sources":["../../src/harness/rooCodeHooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rooCodeHooks.js","sourceRoot":"","sources":["../../src/harness/rooCodeHooks.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,78 @@
12
12
  * LLD #14 — Phase 3 cross-harness defence
13
13
  * HLD §3.14 — Three-Tier Defense Cascade
14
14
  *
15
+ * # Correction (2026-08-18): this file's hook event names and payload
16
+ * # extraction were WRONG from the day this file was written, not a case of
17
+ * # Windsurf changing later
18
+ *
19
+ * The original implementation (2026-06-18) registered
20
+ * `beforeShellExecution`/`beforeMCPExecution`/`beforeFileEdit` — Cursor's
21
+ * event names — under the stated assumption that Windsurf's hook system
22
+ * "registers the same event names Cursor's does." That assumption was never
23
+ * independently verified, and it was wrong: Windsurf/Cascade's REAL hook
24
+ * system (confirmed against docs.devin.ai/desktop/cascade/hooks — the
25
+ * current authoritative source; docs.windsurf.com/windsurf/cascade/hooks
26
+ * redirects there post-Cognition/Devin acquisition — 2026-08-18) uses
27
+ * entirely different event names and a differently-shaped payload, and this
28
+ * naming was ALREADY the live one when this file was first written — a
29
+ * March-2026 third-party integration guide already documents
30
+ * `pre_run_command`/`tool_info.command_line`, predating this file's own
31
+ * 2026-06-18 commit date. This was a copy-without-verifying mistake at
32
+ * authoring time, not a later drift.
33
+ *
34
+ * Confirmed real facts, all from docs.devin.ai/desktop/cascade/hooks:
35
+ * - Event names (the `hooks.json` top-level keys) are `pre_run_command`,
36
+ * `pre_write_code`, `pre_mcp_tool_use` (plus `post_*` variants this file
37
+ * has no use for — only pre-hooks can block, via exit code 2; any other
38
+ * non-zero exit is treated as a hook ERROR and the action proceeds, i.e.
39
+ * Cascade fails OPEN if this script itself cannot run — same as every
40
+ * other harness in this codebase, not a Windsurf-specific gap).
41
+ * - Each event's value in `hooks.json` is an ARRAY of `{command, ...}`
42
+ * objects, not a single object — `[{command: "..."}]`, not
43
+ * `{command: "..."}`. There is no `failClosed` field in Windsurf's schema
44
+ * (that was Cursor's field, also copied without verification); dropped
45
+ * from the config this file writes.
46
+ * - The payload delivered on stdin has `agent_action_name` as its event-name
47
+ * field (not `hook_event_name`/`event`, which are Cursor's field names),
48
+ * and nests event-specific data under `tool_info`:
49
+ * `tool_info.command_line`/`tool_info.cwd` for `pre_run_command`,
50
+ * `tool_info.file_path`/`tool_info.edits[]` for `pre_write_code`,
51
+ * `tool_info.mcp_server_name`/`tool_info.mcp_tool_name`/
52
+ * `tool_info.mcp_tool_arguments` for `pre_mcp_tool_use`. `trajectory_id`
53
+ * is Cascade's real conversation-identifier field.
54
+ *
55
+ * # Follow-up (2026-08-18): JetBrains plugin coverage
56
+ *
57
+ * The JetBrains plugin reads user-level hooks.json from a DIFFERENT path —
58
+ * `~/.codeium/hooks.json`, no `windsurf` subdirectory — which this file now
59
+ * also writes (same config content). Its own changelog (v2.12.4) naming
60
+ * `post_setup_worktree`, one of Cascade's documented event names, as a hook
61
+ * it added is corroborating evidence the JetBrains plugin dispatches the
62
+ * SAME event/payload system as Desktop, not a guess. Workspace-level
63
+ * `.windsurf/hooks.json` needed no change — that path is workspace-root-
64
+ * relative, not app-specific, so the existing write already covers both
65
+ * clients. Still not independently verified: whether `post_mcp_tool_use`'s
66
+ * `mcp_result` field would be useful for anything (it isn't used here —
67
+ * post-hooks can't block, so there is nothing this file's threat model
68
+ * gains from it).
69
+ *
70
+ * # Follow-up 2 (2026-08-18): JetBrains proxy configuration
71
+ *
72
+ * The JetBrains plugin's proxy-config surface — the thing that decides
73
+ * whether its OWN AI traffic (not just hook dispatch) routes through
74
+ * Intutic's TLS MITM proxy — is now also configured, via
75
+ * `windsurfJetBrainsProxy.ts`. See that module's doc comment for the full
76
+ * research record: the plugin has no manual-proxy field of its own (only
77
+ * a `detectProxy` boolean that opts into the IDE PLATFORM's proxy
78
+ * setting), confirmed by decompiling the actual published plugin JAR, not
79
+ * guessed.
80
+ *
81
+ * The Cursor-shaped field names this file previously relied on exclusively
82
+ * are kept as a SECOND, lower-priority fallback in the extraction below —
83
+ * not because they are believed to be real for Windsurf, but because they
84
+ * cost nothing to keep checking and this file has already been wrong about
85
+ * a Windsurf-specific assumption once.
86
+ *
15
87
  * @module
16
88
  */
17
89
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"windsurfHooks.d.ts","sourceRoot":"","sources":["../../src/harness/windsurfHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAiJH;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAO,EAChB,WAAW,SAAK,GACf,OAAO,CAAC,IAAI,CAAC,CA2Cf"}
1
+ {"version":3,"file":"windsurfHooks.d.ts","sourceRoot":"","sources":["../../src/harness/windsurfHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuFG;AAuKH;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAO,EAChB,WAAW,SAAK,GACf,OAAO,CAAC,IAAI,CAAC,CAwEf"}
@@ -12,6 +12,78 @@
12
12
  * LLD #14 — Phase 3 cross-harness defence
13
13
  * HLD §3.14 — Three-Tier Defense Cascade
14
14
  *
15
+ * # Correction (2026-08-18): this file's hook event names and payload
16
+ * # extraction were WRONG from the day this file was written, not a case of
17
+ * # Windsurf changing later
18
+ *
19
+ * The original implementation (2026-06-18) registered
20
+ * `beforeShellExecution`/`beforeMCPExecution`/`beforeFileEdit` — Cursor's
21
+ * event names — under the stated assumption that Windsurf's hook system
22
+ * "registers the same event names Cursor's does." That assumption was never
23
+ * independently verified, and it was wrong: Windsurf/Cascade's REAL hook
24
+ * system (confirmed against docs.devin.ai/desktop/cascade/hooks — the
25
+ * current authoritative source; docs.windsurf.com/windsurf/cascade/hooks
26
+ * redirects there post-Cognition/Devin acquisition — 2026-08-18) uses
27
+ * entirely different event names and a differently-shaped payload, and this
28
+ * naming was ALREADY the live one when this file was first written — a
29
+ * March-2026 third-party integration guide already documents
30
+ * `pre_run_command`/`tool_info.command_line`, predating this file's own
31
+ * 2026-06-18 commit date. This was a copy-without-verifying mistake at
32
+ * authoring time, not a later drift.
33
+ *
34
+ * Confirmed real facts, all from docs.devin.ai/desktop/cascade/hooks:
35
+ * - Event names (the `hooks.json` top-level keys) are `pre_run_command`,
36
+ * `pre_write_code`, `pre_mcp_tool_use` (plus `post_*` variants this file
37
+ * has no use for — only pre-hooks can block, via exit code 2; any other
38
+ * non-zero exit is treated as a hook ERROR and the action proceeds, i.e.
39
+ * Cascade fails OPEN if this script itself cannot run — same as every
40
+ * other harness in this codebase, not a Windsurf-specific gap).
41
+ * - Each event's value in `hooks.json` is an ARRAY of `{command, ...}`
42
+ * objects, not a single object — `[{command: "..."}]`, not
43
+ * `{command: "..."}`. There is no `failClosed` field in Windsurf's schema
44
+ * (that was Cursor's field, also copied without verification); dropped
45
+ * from the config this file writes.
46
+ * - The payload delivered on stdin has `agent_action_name` as its event-name
47
+ * field (not `hook_event_name`/`event`, which are Cursor's field names),
48
+ * and nests event-specific data under `tool_info`:
49
+ * `tool_info.command_line`/`tool_info.cwd` for `pre_run_command`,
50
+ * `tool_info.file_path`/`tool_info.edits[]` for `pre_write_code`,
51
+ * `tool_info.mcp_server_name`/`tool_info.mcp_tool_name`/
52
+ * `tool_info.mcp_tool_arguments` for `pre_mcp_tool_use`. `trajectory_id`
53
+ * is Cascade's real conversation-identifier field.
54
+ *
55
+ * # Follow-up (2026-08-18): JetBrains plugin coverage
56
+ *
57
+ * The JetBrains plugin reads user-level hooks.json from a DIFFERENT path —
58
+ * `~/.codeium/hooks.json`, no `windsurf` subdirectory — which this file now
59
+ * also writes (same config content). Its own changelog (v2.12.4) naming
60
+ * `post_setup_worktree`, one of Cascade's documented event names, as a hook
61
+ * it added is corroborating evidence the JetBrains plugin dispatches the
62
+ * SAME event/payload system as Desktop, not a guess. Workspace-level
63
+ * `.windsurf/hooks.json` needed no change — that path is workspace-root-
64
+ * relative, not app-specific, so the existing write already covers both
65
+ * clients. Still not independently verified: whether `post_mcp_tool_use`'s
66
+ * `mcp_result` field would be useful for anything (it isn't used here —
67
+ * post-hooks can't block, so there is nothing this file's threat model
68
+ * gains from it).
69
+ *
70
+ * # Follow-up 2 (2026-08-18): JetBrains proxy configuration
71
+ *
72
+ * The JetBrains plugin's proxy-config surface — the thing that decides
73
+ * whether its OWN AI traffic (not just hook dispatch) routes through
74
+ * Intutic's TLS MITM proxy — is now also configured, via
75
+ * `windsurfJetBrainsProxy.ts`. See that module's doc comment for the full
76
+ * research record: the plugin has no manual-proxy field of its own (only
77
+ * a `detectProxy` boolean that opts into the IDE PLATFORM's proxy
78
+ * setting), confirmed by decompiling the actual published plugin JAR, not
79
+ * guessed.
80
+ *
81
+ * The Cursor-shaped field names this file previously relied on exclusively
82
+ * are kept as a SECOND, lower-priority fallback in the extraction below —
83
+ * not because they are believed to be real for Windsurf, but because they
84
+ * cost nothing to keep checking and this file has already been wrong about
85
+ * a Windsurf-specific assumption once.
86
+ *
15
87
  * @module
16
88
  */
17
89
  import * as fs from 'node:fs/promises';
@@ -19,37 +91,28 @@ import * as path from 'node:path';
19
91
  import * as os from 'node:os';
20
92
  import { createLogger } from '@intutic/logger';
21
93
  import { newIso } from '@intutic/id';
94
+ import { emitJsGate, emitJsFailClosedPrelude } from './gateBody.js';
95
+ import { configureJetBrainsWindsurfProxy } from './windsurfJetBrainsProxy.js';
22
96
  const log = createLogger('sync-windsurf-hooks');
23
97
  const WINDSURF_USER_DIR = path.join(os.homedir(), '.codeium', 'windsurf');
24
- const PROTECTED_PATHS = [
25
- '.codeium/windsurf/hooks.json',
26
- '.windsurf/hooks.json',
27
- '.intutic/hooks',
28
- '.intutic/integrity.json',
29
- '.claude/settings.json',
30
- '.cursor/hooks.json',
31
- '.cline/hooks',
32
- '.agents/plugins/intutic-governance',
33
- '.openhands/hooks.json',
34
- ];
98
+ /** The JetBrains plugin's user-level hooks.json lives directly under
99
+ * `~/.codeium` — no `windsurf` subdirectory — confirmed against
100
+ * docs.devin.ai/desktop/cascade/hooks (see module doc comment). Only
101
+ * hooks.json goes here: this writer's `settings.json` proxy-config write
102
+ * targets Desktop's known path specifically, and whether/how the
103
+ * JetBrains plugin has an equivalent proxy-config surface was not
104
+ * researched — out of scope for this fix, which is about hook dispatch. */
105
+ const WINDSURF_JETBRAINS_USER_DIR = path.join(os.homedir(), '.codeium');
106
+ /** Cascade's real pre-hook event names (see module doc comment). Each maps
107
+ * to an ARRAY of hook entries in `hooks.json` — Windsurf's schema, unlike
108
+ * Cursor's, has no `failClosed` field; exit code 2 is the only block
109
+ * signal Cascade recognizes. */
110
+ const CASCADE_HOOK_EVENTS = ['pre_run_command', 'pre_write_code', 'pre_mcp_tool_use'];
35
111
  function buildHooksConfig(hookScriptPath) {
36
112
  return {
37
113
  _comment: 'Intutic governance hooks — auto-generated. DO NOT EDIT.',
38
114
  _lastSync: newIso(),
39
- hooks: {
40
- beforeShellExecution: {
41
- command: `node "${hookScriptPath}"`,
42
- failClosed: true,
43
- },
44
- beforeMCPExecution: {
45
- command: `node "${hookScriptPath}"`,
46
- failClosed: true,
47
- },
48
- beforeFileEdit: {
49
- command: `node "${hookScriptPath}"`,
50
- failClosed: true,
51
- },
52
- },
115
+ hooks: Object.fromEntries(CASCADE_HOOK_EVENTS.map((event) => [event, [{ command: `node "${hookScriptPath}"` }]])),
53
116
  };
54
117
  }
55
118
  function buildHookScript(proxyUrl, workspaceRoot, workspaceId) {
@@ -61,6 +124,7 @@ function buildHookScript(proxyUrl, workspaceRoot, workspaceId) {
61
124
  * Proxy: ${proxyUrl}
62
125
  * Generated: ${newIso()}
63
126
  */
127
+ ${emitJsFailClosedPrelude({ harness: 'windsurf', contract: 'exit2' })}
64
128
  const fs = require('fs');
65
129
  const crypto = require('crypto');
66
130
  const https = require('https');
@@ -78,19 +142,23 @@ try {
78
142
  });
79
143
  } catch {}
80
144
 
81
- const PROTECTED_PATHS = ${JSON.stringify(PROTECTED_PATHS)};
145
+ ${emitJsGate({ harness: "windsurf", contract: 'exit2' })}
82
146
 
147
+ let _intuticSessionId = '';
83
148
  function logEvent(verdict, toolName, reason) {
84
149
  try {
85
150
  const ts = new Date().toISOString();
86
151
  const incidentId = crypto.createHash('sha1').update(ts + toolName + _intuticWsId).digest('hex').slice(0, 16);
87
152
  const entry = JSON.stringify({
88
- event: verdict === 'blocked' ? 'tool_blocked' : 'tool_allowed',
153
+ // Passed through, not collapsed to two values: the advisory tier emits
154
+ // 'tool_flagged', and a ternary here silently recorded it as an allow.
155
+ event: verdict,
89
156
  toolName, reason: reason || '',
90
157
  workspaceId: _intuticWsId,
91
158
  harnessType: 'windsurf',
92
159
  timestamp: ts,
93
160
  incidentId,
161
+ ...(_intuticSessionId ? { sessionId: _intuticSessionId } : {}),
94
162
  }) + '\\n';
95
163
  fs.appendFileSync(${JSON.stringify(hookEventsLog)}, entry, { flag: 'a' });
96
164
  if (_intuticKey) {
@@ -111,41 +179,63 @@ process.stdin.on('data', (c) => { raw += c; });
111
179
  process.stdin.on('end', () => {
112
180
  try {
113
181
  const ctx = JSON.parse(raw);
114
- const event = (ctx.event || '').toLowerCase();
115
- const input = ctx.input || ctx;
182
+ _intuticSessionId = ctx.trajectory_id || ctx.trajectoryId || ctx.session_id || ctx.sessionId ||
183
+ ctx.conversation_id || ctx.conversationId || ctx.task_id || ctx.taskId || '';
184
+ // 'agent_action_name' and 'tool_info' are Cascade's REAL top-level
185
+ // fields (docs.devin.ai/desktop/cascade/hooks; see this file's module
186
+ // doc comment for the correction record). The rest of this list is the
187
+ // Claude-Code-shaped envelope this repo's own generic gate-behaviour
188
+ // test suite drives every harness writer with uniformly, plus the
189
+ // Cursor-shaped fields this file incorrectly targeted before — kept so
190
+ // neither that test coverage nor an unconfirmed Windsurf variant loses
191
+ // recognition.
192
+ intuticGuardEnvelope(ctx, ['agent_action_name', 'tool_info', 'tool_name', 'toolName', 'tool_input', 'toolInput',
193
+ 'input', 'event', 'hook_event_name', 'command', 'cmd', 'script', 'path', 'file_path', 'filePath', 'file',
194
+ 'target', 'notebook_path'], logEvent);
195
+ // Cascade's real event field is 'agent_action_name' (values like
196
+ // 'pre_run_command'/'pre_write_code'/'pre_mcp_tool_use'), checked
197
+ // first. 'hook_event_name'/'event' are Cursor's field names, kept as a
198
+ // fallback this file no longer trusts as primary.
199
+ const event = (ctx.agent_action_name || ctx.hook_event_name || ctx.event || '').toLowerCase();
200
+ // Cascade nests event-specific data under 'tool_info' — NOT 'input' or
201
+ // 'tool_input', which are the Claude-Code/Cursor-shaped fields this file
202
+ // previously read exclusively. Prefer 'tool_info' when present; fall
203
+ // back to the others for the generic test envelope / an unconfirmed
204
+ // variant.
205
+ const toolInfo = ctx.tool_info || {};
206
+ const input = ctx.input || ctx.tool_input || ctx.toolInput || toolInfo || ctx;
116
207
 
117
- const targetPath = input.path || input.file || input.target || '';
118
- for (const p of PROTECTED_PATHS) {
119
- if (String(targetPath).includes(p)) {
120
- const reason = 'Attempt to modify protected path "' + targetPath + '"';
121
- process.stderr.write('[Intutic Governance] BLOCKED: ' + reason + '\\n');
122
- logEvent('blocked', 'edit', reason);
123
- process.exit(2);
124
- }
125
- }
208
+ const targetPath = toolInfo.file_path || input.path || input.file_path || input.filePath || input.file ||
209
+ input.target || input.notebook_path || '';
210
+ const command = toolInfo.command_line || input.command || input.cmd || input.script || '';
211
+ let toolName = ctx.tool_name || ctx.toolName || event || 'tool';
126
212
 
127
- // Scan shell commands for governance bypass patterns
128
- const command = input.command || input.cmd || '';
129
- const dangerPatterns = [
130
- /chflags\\s+nouchg/,
131
- /chattr\\s+-i\\s+/,
132
- /chmod\\s+[0-9]*[2367][0-9]*\\s+.*hooks/,
133
- ];
134
- for (const pat of dangerPatterns) {
135
- if (pat.test(command)) {
136
- const reason = 'Command matches bypass pattern: "' + command + '"';
137
- process.stderr.write('[Intutic Governance] BLOCKED: ' + reason + '\\n');
138
- logEvent('blocked', 'bash', reason);
139
- process.exit(2);
140
- }
213
+ // M3: compose \`mcp__<server>__<tool>\` for an MCP tool call. Cascade's
214
+ // CONFIRMED real shape is event 'pre_mcp_tool_use' with
215
+ // tool_info.mcp_server_name/tool_info.mcp_tool_name (see module doc
216
+ // comment). The 'beforemcpexecution'/ctx.command-or-url branch below is
217
+ // Cursor's shape, which this file previously assumed without
218
+ // verification and which never matched anything Cascade actually
219
+ // sends — kept only as a fallback, now second priority.
220
+ if (event === 'pre_mcp_tool_use' && toolInfo.mcp_tool_name) {
221
+ toolName = 'mcp__' + toolInfo.mcp_server_name + '__' + toolInfo.mcp_tool_name;
222
+ } else if (event === 'beforemcpexecution' && ctx.tool_name) {
223
+ const mcpServer = ctx.command || ctx.url || ctx.server_name || ctx.serverName;
224
+ if (mcpServer) toolName = 'mcp__' + mcpServer + '__' + ctx.tool_name;
141
225
  }
142
226
 
143
- logEvent('allowed', event || 'tool', '');
227
+ // The block reason now comes from the shared gate and always contains
228
+ // "governance rule". hookEvents.resolveSeverity keys CRITICAL off the
229
+ // "governance-protected" substring, and this was the one harness of twelve
230
+ // that omitted it — so a Windsurf agent caught tampering was filed MEDIUM.
231
+ intuticGate(toolName, targetPath, command, logEvent, _intuticWsId, input);
232
+
233
+ logEvent('tool_allowed', toolName, '');
144
234
  process.exit(0);
145
235
  } catch (err) {
146
236
  const errMsg = String(err);
147
237
  process.stderr.write('[Intutic Governance] Hook error (fail-closed): ' + errMsg + '\\n');
148
- logEvent('blocked', 'unknown', errMsg);
238
+ logEvent('tool_blocked', 'unknown', errMsg);
149
239
  process.exit(2);
150
240
  }
151
241
  });
@@ -171,19 +261,38 @@ export async function writeWindsurfHooks(workspaceRoot, proxyUrl, proxyPort = 88
171
261
  await fs.rename(tmpScript, hookScriptPath);
172
262
  await fs.chmod(hookScriptPath, 0o755);
173
263
  const config = buildHooksConfig(hookScriptPath);
174
- // 1. User-level hooks
264
+ // 1. User-level hooks — Desktop's path.
175
265
  await fs.mkdir(WINDSURF_USER_DIR, { recursive: true });
176
266
  await atomicWriteJson(path.join(WINDSURF_USER_DIR, 'hooks.json'), config);
177
267
  log.info({ action: 'windsurf_hooks_written', level: 'user' }, 'Windsurf user-level hooks written');
178
- // 2. Workspace-level hooks (.windsurf/hooks.json)
268
+ // 1b. User-level hooks — the JetBrains plugin's SEPARATE path. Same config
269
+ // content: the JetBrains plugin's own changelog (v2.12.4) names
270
+ // `post_setup_worktree` — one of Cascade's documented event names — as a
271
+ // hook it added, which is corroborating evidence (not a guess) that it
272
+ // dispatches the same Cascade hook event/payload system as Desktop, just
273
+ // reads its user-level config from this different file.
274
+ await fs.mkdir(WINDSURF_JETBRAINS_USER_DIR, { recursive: true });
275
+ await atomicWriteJson(path.join(WINDSURF_JETBRAINS_USER_DIR, 'hooks.json'), config);
276
+ log.info({ action: 'windsurf_hooks_written', level: 'user-jetbrains' }, 'Windsurf JetBrains plugin user-level hooks written');
277
+ // 2. Workspace-level hooks (.windsurf/hooks.json) — the SAME relative path
278
+ // for both Desktop and the JetBrains plugin (workspace-root-relative, not
279
+ // app-specific), so this one write already covers both. Hooks configured
280
+ // at multiple levels are NOT one-wins: Cascade runs every level's hooks
281
+ // for a matching event, in order system → user → workspace (confirmed
282
+ // against docs.devin.ai/desktop/cascade/hooks) — an earlier version of
283
+ // this comment claimed user-level "takes precedence," which was another
284
+ // unverified assumption.
179
285
  const wsWindsurfDir = path.join(workspaceRoot, '.windsurf');
180
286
  await fs.mkdir(wsWindsurfDir, { recursive: true });
181
287
  await atomicWriteJson(path.join(wsWindsurfDir, 'hooks.json'), {
182
288
  ...config,
183
- _note: 'Workspace-level hooks — agent may be able to modify this file. User-level hooks take precedence.',
289
+ _note: 'Workspace-level hooks — agent may be able to modify this file. Runs IN ADDITION to ' +
290
+ 'user-level hooks (Cascade runs every configured level for a matching event; last-wins/' +
291
+ 'precedence is not how this works), so this file being tampered with does not disable ' +
292
+ 'user-level enforcement.',
184
293
  });
185
294
  log.info({ action: 'windsurf_hooks_written', level: 'workspace' }, 'Windsurf workspace-level hooks written');
186
- // 3. HTTP proxy settings → routes Windsurf's Cascade AI traffic through Intutic TLS MITM
295
+ // 3. HTTP proxy settings — Desktop's own settings.json.
187
296
  const wsSettings = {
188
297
  _comment: 'Intutic proxy settings — auto-generated. DO NOT EDIT.',
189
298
  _lastSync: newIso(),
@@ -193,6 +302,11 @@ export async function writeWindsurfHooks(workspaceRoot, proxyUrl, proxyPort = 88
193
302
  };
194
303
  await atomicWriteJson(path.join(WINDSURF_USER_DIR, 'settings.json'), wsSettings);
195
304
  log.info({ action: 'windsurf_proxy_configured', port: proxyPort }, 'Windsurf HTTP proxy configured for TLS MITM interception');
305
+ // 4. HTTP proxy settings — every installed JetBrains product. See
306
+ // windsurfJetBrainsProxy.ts's module doc comment for what this
307
+ // configures and why it needs two merge-writes per product rather than
308
+ // one owned file the way Desktop's settings.json is.
309
+ await configureJetBrainsWindsurfProxy(proxyPort);
196
310
  }
197
311
  async function atomicWriteJson(filePath, data) {
198
312
  const tmp = filePath + '.intutic-tmp';
@@ -1 +1 @@
1
- {"version":3,"file":"windsurfHooks.js","sourceRoot":"","sources":["../../src/harness/windsurfHooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"windsurfHooks.js","sourceRoot":"","sources":["../../src/harness/windsurfHooks.ts"],"names":[],"mappings":"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"}