@intutic/sync-daemon 2.1.0 → 2.2.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 (179) hide show
  1. package/dist/agentReporter.d.ts +1 -0
  2. package/dist/agentReporter.d.ts.map +1 -1
  3. package/dist/configReader.d.ts +44 -22
  4. package/dist/configReader.d.ts.map +1 -1
  5. package/dist/configReader.js +70 -44
  6. package/dist/configReader.js.map +1 -1
  7. package/dist/configWriter.d.ts +29 -41
  8. package/dist/configWriter.d.ts.map +1 -1
  9. package/dist/configWriter.js +26 -637
  10. package/dist/configWriter.js.map +1 -1
  11. package/dist/disconnect/harnesses.d.ts +31 -0
  12. package/dist/disconnect/harnesses.d.ts.map +1 -0
  13. package/dist/disconnect/harnesses.js +728 -0
  14. package/dist/disconnect/harnesses.js.map +1 -0
  15. package/dist/disconnect/index.d.ts +25 -0
  16. package/dist/disconnect/index.d.ts.map +1 -0
  17. package/dist/disconnect/index.js +82 -0
  18. package/dist/disconnect/index.js.map +1 -0
  19. package/dist/disconnect/mcp.d.ts +60 -0
  20. package/dist/disconnect/mcp.d.ts.map +1 -0
  21. package/dist/disconnect/mcp.js +283 -0
  22. package/dist/disconnect/mcp.js.map +1 -0
  23. package/dist/disconnect/originals.d.ts +88 -0
  24. package/dist/disconnect/originals.d.ts.map +1 -0
  25. package/dist/disconnect/originals.js +257 -0
  26. package/dist/disconnect/originals.js.map +1 -0
  27. package/dist/disconnect/plan.d.ts +175 -0
  28. package/dist/disconnect/plan.d.ts.map +1 -0
  29. package/dist/disconnect/plan.js +580 -0
  30. package/dist/disconnect/plan.js.map +1 -0
  31. package/dist/disconnect/recognise.d.ts +43 -0
  32. package/dist/disconnect/recognise.d.ts.map +1 -0
  33. package/dist/disconnect/recognise.js +98 -0
  34. package/dist/disconnect/recognise.js.map +1 -0
  35. package/dist/disconnect/tomlLines.d.ts +39 -0
  36. package/dist/disconnect/tomlLines.d.ts.map +1 -0
  37. package/dist/disconnect/tomlLines.js +105 -0
  38. package/dist/disconnect/tomlLines.js.map +1 -0
  39. package/dist/harness/aiderConfigMerger.d.ts +1 -0
  40. package/dist/harness/aiderConfigMerger.d.ts.map +1 -1
  41. package/dist/harness/aiderConfigMerger.js +4 -1
  42. package/dist/harness/aiderConfigMerger.js.map +1 -1
  43. package/dist/harness/antigravityHooks.d.ts.map +1 -1
  44. package/dist/harness/antigravityHooks.js +2 -0
  45. package/dist/harness/antigravityHooks.js.map +1 -1
  46. package/dist/harness/claudeCodeHooks.d.ts +1 -2
  47. package/dist/harness/claudeCodeHooks.d.ts.map +1 -1
  48. package/dist/harness/claudeCodeHooks.js +19 -6
  49. package/dist/harness/claudeCodeHooks.js.map +1 -1
  50. package/dist/harness/claudeDesktopHooks.d.ts +3 -0
  51. package/dist/harness/claudeDesktopHooks.d.ts.map +1 -1
  52. package/dist/harness/claudeDesktopHooks.js +3 -1
  53. package/dist/harness/claudeDesktopHooks.js.map +1 -1
  54. package/dist/harness/claudeProjectApproval.d.ts +53 -0
  55. package/dist/harness/claudeProjectApproval.d.ts.map +1 -0
  56. package/dist/harness/claudeProjectApproval.js +159 -0
  57. package/dist/harness/claudeProjectApproval.js.map +1 -0
  58. package/dist/harness/clineHooks.d.ts.map +1 -1
  59. package/dist/harness/clineHooks.js +3 -0
  60. package/dist/harness/clineHooks.js.map +1 -1
  61. package/dist/harness/codexConfigMerger.d.ts.map +1 -1
  62. package/dist/harness/codexConfigMerger.js +4 -0
  63. package/dist/harness/codexConfigMerger.js.map +1 -1
  64. package/dist/harness/codexHooks.d.ts.map +1 -1
  65. package/dist/harness/codexHooks.js +3 -0
  66. package/dist/harness/codexHooks.js.map +1 -1
  67. package/dist/harness/continueConfigMerger.d.ts.map +1 -1
  68. package/dist/harness/continueConfigMerger.js +4 -0
  69. package/dist/harness/continueConfigMerger.js.map +1 -1
  70. package/dist/harness/continueHooks.d.ts.map +1 -1
  71. package/dist/harness/continueHooks.js +3 -0
  72. package/dist/harness/continueHooks.js.map +1 -1
  73. package/dist/harness/cursorHooks.d.ts.map +1 -1
  74. package/dist/harness/cursorHooks.js +3 -0
  75. package/dist/harness/cursorHooks.js.map +1 -1
  76. package/dist/harness/dshHooks.d.ts.map +1 -1
  77. package/dist/harness/dshHooks.js +7 -0
  78. package/dist/harness/dshHooks.js.map +1 -1
  79. package/dist/harness/gateBody.d.ts +11 -2
  80. package/dist/harness/gateBody.d.ts.map +1 -1
  81. package/dist/harness/gateBody.js +33 -6
  82. package/dist/harness/gateBody.js.map +1 -1
  83. package/dist/harness/githubCopilotHooks.d.ts.map +1 -1
  84. package/dist/harness/githubCopilotHooks.js +4 -9
  85. package/dist/harness/githubCopilotHooks.js.map +1 -1
  86. package/dist/harness/gooseHooks.d.ts +15 -0
  87. package/dist/harness/gooseHooks.d.ts.map +1 -1
  88. package/dist/harness/gooseHooks.js +55 -43
  89. package/dist/harness/gooseHooks.js.map +1 -1
  90. package/dist/harness/grokHooks.d.ts.map +1 -1
  91. package/dist/harness/grokHooks.js +9 -12
  92. package/dist/harness/grokHooks.js.map +1 -1
  93. package/dist/harness/hermesHooks.d.ts.map +1 -1
  94. package/dist/harness/hermesHooks.js +7 -2
  95. package/dist/harness/hermesHooks.js.map +1 -1
  96. package/dist/harness/holdRedaction.d.ts +4 -1
  97. package/dist/harness/holdRedaction.d.ts.map +1 -1
  98. package/dist/harness/holdRedaction.js +32 -8
  99. package/dist/harness/holdRedaction.js.map +1 -1
  100. package/dist/harness/jetbrainsXmlConfig.d.ts +20 -0
  101. package/dist/harness/jetbrainsXmlConfig.d.ts.map +1 -1
  102. package/dist/harness/jetbrainsXmlConfig.js +39 -18
  103. package/dist/harness/jetbrainsXmlConfig.js.map +1 -1
  104. package/dist/harness/mcpAutoWrite.d.ts +39 -17
  105. package/dist/harness/mcpAutoWrite.d.ts.map +1 -1
  106. package/dist/harness/mcpAutoWrite.js +189 -71
  107. package/dist/harness/mcpAutoWrite.js.map +1 -1
  108. package/dist/harness/museHooks.d.ts.map +1 -1
  109. package/dist/harness/museHooks.js +6 -2
  110. package/dist/harness/museHooks.js.map +1 -1
  111. package/dist/harness/openCodeHooks.d.ts.map +1 -1
  112. package/dist/harness/openCodeHooks.js +2 -5
  113. package/dist/harness/openCodeHooks.js.map +1 -1
  114. package/dist/harness/openWebuiHooks.d.ts.map +1 -1
  115. package/dist/harness/openWebuiHooks.js +6 -2
  116. package/dist/harness/openWebuiHooks.js.map +1 -1
  117. package/dist/harness/openclawHooks.d.ts +5 -0
  118. package/dist/harness/openclawHooks.d.ts.map +1 -1
  119. package/dist/harness/openclawHooks.js +3 -1
  120. package/dist/harness/openclawHooks.js.map +1 -1
  121. package/dist/harness/openhandsHooks.d.ts +13 -1
  122. package/dist/harness/openhandsHooks.d.ts.map +1 -1
  123. package/dist/harness/openhandsHooks.js +106 -56
  124. package/dist/harness/openhandsHooks.js.map +1 -1
  125. package/dist/harness/piHooks.d.ts.map +1 -1
  126. package/dist/harness/piHooks.js +3 -0
  127. package/dist/harness/piHooks.js.map +1 -1
  128. package/dist/harness/rooCodeHooks.d.ts.map +1 -1
  129. package/dist/harness/rooCodeHooks.js +5 -10
  130. package/dist/harness/rooCodeHooks.js.map +1 -1
  131. package/dist/harness/windsurfHooks.d.ts +18 -2
  132. package/dist/harness/windsurfHooks.d.ts.map +1 -1
  133. package/dist/harness/windsurfHooks.js +37 -7
  134. package/dist/harness/windsurfHooks.js.map +1 -1
  135. package/dist/harness/windsurfJetBrainsProxy.d.ts +1 -1
  136. package/dist/harness/windsurfJetBrainsProxy.d.ts.map +1 -1
  137. package/dist/harness/windsurfJetBrainsProxy.js +5 -1
  138. package/dist/harness/windsurfJetBrainsProxy.js.map +1 -1
  139. package/dist/index.d.ts +9 -12
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +8 -10
  142. package/dist/index.js.map +1 -1
  143. package/dist/lib/decisionsDigest.d.ts +1 -1
  144. package/dist/lib/decisionsDigest.js +1 -1
  145. package/dist/lib/policySnapshot.d.ts +18 -0
  146. package/dist/lib/policySnapshot.d.ts.map +1 -1
  147. package/dist/lib/policySnapshot.js +142 -7
  148. package/dist/lib/policySnapshot.js.map +1 -1
  149. package/dist/sessionReporter.d.ts +2 -2
  150. package/dist/sessionReporter.js +2 -2
  151. package/dist/syncCycle.d.ts +142 -0
  152. package/dist/syncCycle.d.ts.map +1 -0
  153. package/dist/syncCycle.js +315 -0
  154. package/dist/syncCycle.js.map +1 -0
  155. package/dist/trajectoryMonitor.d.ts +1 -1
  156. package/dist/trajectoryMonitor.d.ts.map +1 -1
  157. package/dist/trajectoryMonitor.js +1 -1
  158. package/dist/trajectoryMonitor.js.map +1 -1
  159. package/dist/watcher/settingsGuard.d.ts +4 -1
  160. package/dist/watcher/settingsGuard.d.ts.map +1 -1
  161. package/dist/watcher/settingsGuard.js +28 -3
  162. package/dist/watcher/settingsGuard.js.map +1 -1
  163. package/package.json +5 -5
  164. package/dist/hashReporter.d.ts +0 -33
  165. package/dist/hashReporter.d.ts.map +0 -1
  166. package/dist/hashReporter.js +0 -69
  167. package/dist/hashReporter.js.map +0 -1
  168. package/dist/integrityStore.d.ts +0 -35
  169. package/dist/integrityStore.d.ts.map +0 -1
  170. package/dist/integrityStore.js +0 -71
  171. package/dist/integrityStore.js.map +0 -1
  172. package/dist/lib/gitWorktrees.d.ts +0 -140
  173. package/dist/lib/gitWorktrees.d.ts.map +0 -1
  174. package/dist/lib/gitWorktrees.js +0 -191
  175. package/dist/lib/gitWorktrees.js.map +0 -1
  176. package/dist/syncLoop.d.ts +0 -172
  177. package/dist/syncLoop.d.ts.map +0 -1
  178. package/dist/syncLoop.js +0 -878
  179. package/dist/syncLoop.js.map +0 -1
@@ -20,6 +20,7 @@ import * as fs from 'node:fs/promises';
20
20
  import * as path from 'node:path';
21
21
  import * as os from 'node:os';
22
22
  import { createLogger } from '@intutic/logger';
23
+ import { keepOriginal, noteWritten } from '../disconnect/originals.js';
23
24
  import { parseDocument, isMap } from 'yaml';
24
25
  import { newIso } from '@intutic/id';
25
26
  import { emitShellGate, SHELL_EXTRACT, SHELL_FAIL_CLOSED } from './gateBody.js';
@@ -179,6 +180,9 @@ export async function writeHermesHooks(workspaceRoot, proxyUrl, workspaceId = ''
179
180
  const envDir = path.join(workspaceRoot, '.intutic', 'env');
180
181
  const hermesDir = path.join(os.homedir(), '.hermes');
181
182
  const skillsDir = path.join(hermesDir, 'skills', 'intutic-governance');
183
+ const skillPath = path.join(skillsDir, 'SKILL.md');
184
+ await keepOriginal(HERMES_CONFIG, workspaceRoot);
185
+ await keepOriginal(skillPath, workspaceRoot);
182
186
  await Promise.all([
183
187
  fs.mkdir(globalHookDir, { recursive: true }),
184
188
  fs.mkdir(hookEventsDir, { recursive: true }),
@@ -197,10 +201,11 @@ export async function writeHermesHooks(workspaceRoot, proxyUrl, workspaceId = ''
197
201
  await mergeHermesConfig(hookScriptPath);
198
202
  log.info({ action: 'hermes_config_merged', path: HERMES_CONFIG }, 'Merged Intutic hook into ~/.hermes/config.yaml');
199
203
  // ── 4. Write governance skill ──────────────────────────────────────────────
200
- const skillPath = path.join(skillsDir, 'SKILL.md');
204
+ const skill = buildGovernanceSkill(proxyUrl);
201
205
  const tmpSkill = skillPath + '.intutic-tmp';
202
- await fs.writeFile(tmpSkill, buildGovernanceSkill(proxyUrl), 'utf-8');
206
+ await fs.writeFile(tmpSkill, skill, 'utf-8');
203
207
  await fs.rename(tmpSkill, skillPath);
208
+ await noteWritten(skillPath, workspaceRoot, skill);
204
209
  log.info({ action: 'hermes_skill_written', path: skillPath }, 'Hermes governance skill written');
205
210
  // ── 5. Write env snippet ───────────────────────────────────────────────────
206
211
  const envSnippet = [
@@ -1 +1 @@
1
- {"version":3,"file":"hermesHooks.js","sourceRoot":"","sources":["../../src/harness/hermesHooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hermesHooks.js","sourceRoot":"","sources":["../../src/harness/hermesHooks.ts"],"names":[],"mappings":"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"}
@@ -42,11 +42,14 @@ export declare const MAX_SNAPSHOT_BYTES = 32768;
42
42
  /**
43
43
  * Returns a redacted, size-capped copy of `value`.
44
44
  *
45
+ * `maxString` caps each string (the middle is dropped); config capture passes
46
+ * `Infinity`, because a captured file is uploaded whole or not at all.
47
+ *
45
48
  * Self-contained by contract — see the module docstring. Do not add imports or
46
49
  * outer-scope references to this function; `emitRedactor()` asserts it stays
47
50
  * closed over nothing.
48
51
  */
49
- export declare function redactSecrets(value: unknown, depth?: number): unknown;
52
+ export declare function redactSecrets(value: unknown, depth?: number, maxString?: number): unknown;
50
53
  /**
51
54
  * Emits both functions as standalone JavaScript for the generated hook.
52
55
  *
@@ -1 +1 @@
1
- {"version":3,"file":"holdRedaction.d.ts","sourceRoot":"","sources":["../../src/harness/holdRedaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,kFAAkF;AAClF,eAAO,MAAM,UAAU,OAAQ,CAAA;AAC/B,yEAAyE;AACzE,eAAO,MAAM,SAAS,IAAI,CAAA;AAC1B,gCAAgC;AAChC,eAAO,MAAM,SAAS,KAAK,CAAA;AAC3B,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,QAAS,CAAA;AAExC;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,OAAO,CAwGhE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAsBrC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkB1B"}
1
+ {"version":3,"file":"holdRedaction.d.ts","sourceRoot":"","sources":["../../src/harness/holdRedaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,kFAAkF;AAClF,eAAO,MAAM,UAAU,OAAQ,CAAA;AAC/B,yEAAyE;AACzE,eAAO,MAAM,SAAS,IAAI,CAAA;AAC1B,gCAAgC;AAChC,eAAO,MAAM,SAAS,KAAK,CAAA;AAC3B,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,QAAS,CAAA;AAExC;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,EAAE,SAAS,SAAa,GAAG,OAAO,CA6HxF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAsBrC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkB1B"}
@@ -42,11 +42,14 @@ export const MAX_SNAPSHOT_BYTES = 32_768;
42
42
  /**
43
43
  * Returns a redacted, size-capped copy of `value`.
44
44
  *
45
+ * `maxString` caps each string (the middle is dropped); config capture passes
46
+ * `Infinity`, because a captured file is uploaded whole or not at all.
47
+ *
45
48
  * Self-contained by contract — see the module docstring. Do not add imports or
46
49
  * outer-scope references to this function; `emitRedactor()` asserts it stays
47
50
  * closed over nothing.
48
51
  */
49
- export function redactSecrets(value, depth = 0) {
52
+ export function redactSecrets(value, depth = 0, maxString = MAX_STRING) {
50
53
  // Keys whose value is a credential regardless of what it looks like. Matched
51
54
  // loosely on purpose: `apiKey`, `api_key`, `X-Api-Key` and `apikey` all occur.
52
55
  const SECRET_KEY = /(pass(word|phrase)?|secret|token|api[-_ ]?key|auth(orization)?|credential|private[-_ ]?key|session[-_ ]?id|cookie)/i;
@@ -62,7 +65,7 @@ export function redactSecrets(value, depth = 0) {
62
65
  /xox[abprs]-[A-Za-z0-9-]{10,}/g, // Slack
63
66
  /AIza[0-9A-Za-z_-]{30,}/g, // Google
64
67
  /eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g, // JWT
65
- /-----BEGIN[A-Z ]*PRIVATE KEY-----[\s\S]*?-----END[A-Z ]*PRIVATE KEY-----/g,
68
+ // PEM private keys are handled by redactPem below, not a pattern here.
66
69
  // Bare basic-auth in a URL.
67
70
  /\/\/[^/\s:@]+:[^/\s:@]+@/g,
68
71
  ];
@@ -116,17 +119,38 @@ export function redactSecrets(value, depth = 0) {
116
119
  // `[redacted]` swallowing the key name does not.
117
120
  return copied === 0 ? s : out + s.slice(copied);
118
121
  };
122
+ // A PEM private key, header to footer. Scanned rather than matched with one
123
+ // lazy `BEGIN[\s\S]*?END` pattern, which rescans to the end of the text from
124
+ // every header that has no footer: quadratic, and this runs before any
125
+ // length cap. A header with no footer is redacted to the end of the text,
126
+ // because a truncated key is still a key.
127
+ const redactPem = (s) => {
128
+ const BEGIN = /-----BEGIN[A-Z ]*PRIVATE KEY-----/g;
129
+ const END = /-----END[A-Z ]*PRIVATE KEY-----/g;
130
+ let out = '';
131
+ let copied = 0;
132
+ let m;
133
+ while ((m = BEGIN.exec(s)) !== null) {
134
+ out += s.slice(copied, m.index) + '[redacted]';
135
+ END.lastIndex = BEGIN.lastIndex;
136
+ if (END.exec(s) === null)
137
+ return out;
138
+ copied = END.lastIndex;
139
+ BEGIN.lastIndex = copied;
140
+ }
141
+ return copied === 0 ? s : out + s.slice(copied);
142
+ };
119
143
  const scrub = (s) => {
120
- let out = s;
144
+ let out = redactPem(s);
121
145
  for (const re of SECRET_VALUE)
122
146
  out = out.replace(re, '[redacted]');
123
147
  out = redactAssignments(out);
124
- if (out.length > MAX_STRING) {
148
+ if (out.length > maxString) {
125
149
  // Keep both ends. A command's verb is at the front and its target is at
126
150
  // the back; truncating the tail throws away the half that identifies what
127
151
  // the hold was about.
128
- const half = Math.floor(MAX_STRING / 2);
129
- out = `${out.slice(0, half)}…[${out.length - MAX_STRING} chars elided]…${out.slice(-half)}`;
152
+ const half = Math.floor(maxString / 2);
153
+ out = `${out.slice(0, half)}…[${out.length - maxString} chars elided]…${out.slice(-half)}`;
130
154
  }
131
155
  return out;
132
156
  };
@@ -139,7 +163,7 @@ export function redactSecrets(value, depth = 0) {
139
163
  if (typeof value === 'number' || typeof value === 'boolean')
140
164
  return value;
141
165
  if (Array.isArray(value)) {
142
- const kept = value.slice(0, MAX_ARRAY).map((v) => redactSecrets(v, depth + 1));
166
+ const kept = value.slice(0, MAX_ARRAY).map((v) => redactSecrets(v, depth + 1, maxString));
143
167
  if (value.length > MAX_ARRAY)
144
168
  kept.push(`[${value.length - MAX_ARRAY} more elided]`);
145
169
  return kept;
@@ -147,7 +171,7 @@ export function redactSecrets(value, depth = 0) {
147
171
  if (typeof value === 'object') {
148
172
  const out = {};
149
173
  for (const [k, v] of Object.entries(value)) {
150
- out[k] = SECRET_KEY.test(k) ? '[redacted]' : redactSecrets(v, depth + 1);
174
+ out[k] = SECRET_KEY.test(k) ? '[redacted]' : redactSecrets(v, depth + 1, maxString);
151
175
  }
152
176
  return out;
153
177
  }
@@ -1 +1 @@
1
- {"version":3,"file":"holdRedaction.js","sourceRoot":"","sources":["../../src/harness/holdRedaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"holdRedaction.js","sourceRoot":"","sources":["../../src/harness/holdRedaction.ts"],"names":[],"mappings":"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"}
@@ -48,4 +48,24 @@
48
48
  * at all — refusal, not a guess.
49
49
  */
50
50
  export declare function mergeXmlComponentOptions(filePath: string, componentName: string, desiredOptions: Readonly<Record<string, string | boolean>>, readFile: (path: string) => Promise<string | null>, writeFileAtomic: (path: string, content: string) => Promise<void>): Promise<boolean>;
51
+ /** One settings file as {@link parseComponentOptions} reads it. */
52
+ export interface ComponentOptionsFile {
53
+ /** The named component's simple options. */
54
+ options: Record<string, string>;
55
+ /** Everything else inside that component, verbatim (normalised whitespace). */
56
+ extra?: string;
57
+ /** Every other component's block, verbatim, by name. */
58
+ others: Record<string, string>;
59
+ }
60
+ /**
61
+ * Reads `componentName`'s simple options from a settings file's text
62
+ * (`null` or empty: a file that does not exist yet). Returns null when the
63
+ * file is not the `<application><component>` shape this module understands.
64
+ */
65
+ export declare function parseComponentOptions(raw: string | null, componentName: string): ComponentOptionsFile | null;
66
+ /**
67
+ * Writes a settings file back in the layout {@link mergeXmlComponentOptions}
68
+ * uses. A component left with no options and nothing else is dropped.
69
+ */
70
+ export declare function serializeComponentOptions(file: ComponentOptionsFile, componentName: string): string;
51
71
  //# sourceMappingURL=jetbrainsXmlConfig.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jetbrainsXmlConfig.d.ts","sourceRoot":"","sources":["../../src/harness/jetbrainsXmlConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAwGH;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAC1D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAClD,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAChE,OAAO,CAAC,OAAO,CAAC,CA0BlB"}
1
+ {"version":3,"file":"jetbrainsXmlConfig.d.ts","sourceRoot":"","sources":["../../src/harness/jetbrainsXmlConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAwGH;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAC1D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAClD,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAChE,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAS5G;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAanG"}
@@ -125,27 +125,48 @@ function parseApplicationXml(raw, targetComponentName) {
125
125
  * at all — refusal, not a guess.
126
126
  */
127
127
  export async function mergeXmlComponentOptions(filePath, componentName, desiredOptions, readFile, writeFileAtomic) {
128
- const existing = await readFile(filePath);
129
- const parsed = parseApplicationXml(existing, componentName);
130
- if (!parsed.ok)
128
+ const parsed = parseComponentOptions(await readFile(filePath), componentName);
129
+ if (parsed === null)
131
130
  return false;
132
- const options = parsed.target?.simpleOptions ?? new Map();
133
131
  for (const [key, value] of Object.entries(desiredOptions)) {
134
- options.set(key, typeof value === 'boolean' ? String(value) : value);
132
+ parsed.options[key] = typeof value === 'boolean' ? String(value) : value;
135
133
  }
136
- const optionLines = [...options.entries()]
137
- .sort(([a], [b]) => a.localeCompare(b))
138
- .map(([key, value]) => ` <option name="${escapeXmlAttr(key)}" value="${escapeXmlAttr(value)}" />`)
139
- .join('\n');
140
- const extra = parsed.target?.extra;
141
- const componentBody = extra ? `${optionLines}\n${extra.split('\n').map((l) => ` ${l}`).join('\n')}` : optionLines;
142
- const componentBlock = ` <component name="${escapeXmlAttr(componentName)}">\n${componentBody}\n </component>`;
143
- const otherBlocks = [...parsed.otherComponents.entries()]
144
- .sort(([a], [b]) => a.localeCompare(b))
145
- .map(([, block]) => ` ${block}`);
146
- const body = [componentBlock, ...otherBlocks].join('\n');
147
- const serialized = `<application>\n${body}\n</application>\n`;
148
- await writeFileAtomic(filePath, serialized);
134
+ await writeFileAtomic(filePath, serializeComponentOptions(parsed, componentName));
149
135
  return true;
150
136
  }
137
+ /**
138
+ * Reads `componentName`'s simple options from a settings file's text
139
+ * (`null` or empty: a file that does not exist yet). Returns null when the
140
+ * file is not the `<application><component>` shape this module understands.
141
+ */
142
+ export function parseComponentOptions(raw, componentName) {
143
+ const parsed = parseApplicationXml(raw, componentName);
144
+ if (!parsed.ok)
145
+ return null;
146
+ const out = {
147
+ options: Object.fromEntries(parsed.target?.simpleOptions ?? new Map()),
148
+ others: Object.fromEntries(parsed.otherComponents),
149
+ };
150
+ if (parsed.target?.extra)
151
+ out.extra = parsed.target.extra;
152
+ return out;
153
+ }
154
+ /**
155
+ * Writes a settings file back in the layout {@link mergeXmlComponentOptions}
156
+ * uses. A component left with no options and nothing else is dropped.
157
+ */
158
+ export function serializeComponentOptions(file, componentName) {
159
+ const optionLines = Object.entries(file.options)
160
+ .sort(([a], [b]) => a.localeCompare(b))
161
+ .map(([key, value]) => ` <option name="${escapeXmlAttr(key)}" value="${escapeXmlAttr(value)}" />`);
162
+ const extraLines = file.extra ? file.extra.split('\n').map((l) => ` ${l}`) : [];
163
+ const blocks = Object.entries(file.others).map(([name, block]) => [name, ` ${block}`]);
164
+ if (optionLines.length + extraLines.length > 0) {
165
+ const componentBody = [...optionLines, ...extraLines].join('\n');
166
+ blocks.push([componentName, ` <component name="${escapeXmlAttr(componentName)}">\n${componentBody}\n </component>`]);
167
+ }
168
+ // The target component first, then the rest by name: the order the merge has always written.
169
+ blocks.sort(([a], [b]) => (a === componentName ? -1 : b === componentName ? 1 : a.localeCompare(b)));
170
+ return `<application>\n${blocks.map(([, block]) => block).join('\n')}\n</application>\n`;
171
+ }
151
172
  //# sourceMappingURL=jetbrainsXmlConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jetbrainsXmlConfig.js","sourceRoot":"","sources":["../../src/harness/jetbrainsXmlConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jetbrainsXmlConfig.js","sourceRoot":"","sources":["../../src/harness/jetbrainsXmlConfig.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,10 @@
4
4
  *
5
5
  * Injects and proxy-wraps MCP server entries in:
6
6
  * - Claude Code: ~/.claude.json (user-scope `mcpServers`, and the
7
- * local-scope `projects[<workspaceRoot>].mcpServers`)
7
+ * local-scope `projects[<workspaceRoot>].mcpServers`,
8
+ * where the approved servers of the project's
9
+ * `.mcp.json` also get wrapped shadows — the shared
10
+ * `.mcp.json` itself is only read)
8
11
  * - Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json
9
12
  * - Cursor (global): ~/Library/Application Support/Cursor/User/globalSettings.json
10
13
  * - Cursor (project): <workspaceRoot>/.cursor/mcp.json
@@ -22,8 +25,8 @@
22
25
  * That is 14 config paths across 11 `HarnessType` values (Cursor, Grok
23
26
  * Build and OpenCode each own two paths — global/project for Cursor and
24
27
  * OpenCode, user/project for Grok Build). `discoverMcpServers` below reads
25
- * all fourteen read-only, for reporting; the injectors above are the only
26
- * thing that writes.
28
+ * all fourteen read-only, for reporting, plus Claude Code's project
29
+ * `.mcp.json`; the injectors above are the only thing that writes.
27
30
  *
28
31
  * # Grok Build's compat-path overlap — dedup, not a bug
29
32
  *
@@ -69,15 +72,13 @@
69
72
  * comment used to describe as "left untouched": the entry is rewritten to
70
73
  * spawn the SAME proxy binary in bridge mode (`--remote-url`/
71
74
  * `--remote-transport`, headers riding in `INTUTIC_REMOTE_HEADERS` env, not
72
- * argv — `ps` visibility). `__intutic_original` preserves the entry's
73
- * pre-wrap `url`/`type`/`headers` so `classifyEntry` can report the TRUE
74
- * transport of what got wrapped, and so a wrapped entry could be unwrapped
75
- * later. See TECH_DEBT.md TD-354 for the historical decline this phase
76
- * supersedes.
77
- *
78
- * Continuous invariant, not one-shot: `injectMcpServer` is called once from
79
- * `intutic connect` (tools/cli) AND once per sync-loop iteration
80
- * (services/sync-daemon/src/syncLoop.ts), so a server a user adds to a harness
75
+ * argv — `ps` visibility). `__intutic_original` keeps the whole pre-wrap
76
+ * entry, stdio or remote, so `classifyEntry` can report the TRUE transport
77
+ * of what got wrapped and `intutic disconnect` can put the entry back
78
+ * exactly.
79
+ *
80
+ * Continuous invariant, not one-shot: `intutic connect` (tools/cli) calls
81
+ * `injectMcpServer` on every sync cycle, so a server a user adds to a harness
81
82
  * config after their first `connect` still gets wrapped on the next sync
82
83
  * cycle rather than staying invisible to governance forever. Running this
83
84
  * every ~30s only works because `writeJsonFile` below is write-if-changed —
@@ -95,6 +96,12 @@ export interface DiscoveredMcpServer {
95
96
  harness: string;
96
97
  transport: 'stdio' | 'http' | 'sse' | 'unknown';
97
98
  wrapped: boolean;
99
+ /**
100
+ * Set on a server the harness will start but the proxy cannot govern, with
101
+ * the reason. Today: an approved Claude Code project server that gets no
102
+ * local-scope copy (see `shadowBlocker` and `projectServerApproval`).
103
+ */
104
+ ungovernedReason?: string;
98
105
  }
99
106
  /**
100
107
  * Resolve the path to the @intutic/mcp-governance-proxy entry point.
@@ -114,6 +121,19 @@ export interface DiscoveredMcpServer {
114
121
  * hot path.
115
122
  */
116
123
  export declare function resolveProxyBin(workspaceRoot: string): string;
124
+ export declare function claudeDesktopConfigPath(): string;
125
+ export declare function cursorGlobalConfigPath(): string;
126
+ export declare function windsurfConfigPath(): string;
127
+ export declare function continueConfigPath(): string;
128
+ export declare function gooseConfigPath(): string;
129
+ export declare function museConfigPath(): string;
130
+ export declare function grokUserConfigPath(): string;
131
+ /** OpenCode's global config: `$XDG_CONFIG_HOME/opencode/opencode.json`, which
132
+ * is `~/.config/opencode/opencode.json` unless XDG_CONFIG_HOME is set (OpenCode
133
+ * resolves it through xdg-basedir). Only the `.json` spelling — see `injectOpenCode`. */
134
+ export declare function openCodeGlobalConfigPath(): string;
135
+ /** The proxy binary path `resolveProxyBin` returns, in either of its two forms. */
136
+ export declare const PROXY_BIN_PATTERN: RegExp;
117
137
  /**
118
138
  * Discover every MCP server declared in any harness config this daemon knows
119
139
  * how to parse — the same 14 config paths / 11 harnesses `injectMcpServer`
@@ -139,16 +159,18 @@ export declare function discoverMcpServers(workspaceRoot: string): Promise<Disco
139
159
  *
140
160
  * Non-fatal: a failure in one harness does not prevent other harnesses from being updated.
141
161
  *
142
- * Called from two places by design: once from `intutic connect` (tools/cli)
143
- * for immediate effect, and once per sync-loop iteration
144
- * (services/sync-daemon/src/syncLoop.ts) so it is a continuous invariant
145
- * rather than a one-shot — a server a user adds after their first `connect`
162
+ * Called by `intutic connect` (tools/cli) on every sync cycle, so it is a
163
+ * continuous invariant rather than a one-shot — a server a user adds after their first `connect`
146
164
  * still gets wrapped on the next cycle. Safe to call every cycle because
147
165
  * `writeJsonFile` is write-if-changed: an already-wrapped, unchanged config
148
166
  * writes zero bytes.
149
167
  *
150
168
  * @param workspaceId - The workspace ID for policy lookups and event attribution.
151
169
  * @param workspaceRoot - Absolute path to the project workspace root.
170
+ * @param options.skip - Harness ids to leave alone: the ones `intutic
171
+ * disconnect --harness` took out.
152
172
  */
153
- export declare function injectMcpServer(workspaceRoot: string, workspaceId?: string): Promise<void>;
173
+ export declare function injectMcpServer(workspaceRoot: string, workspaceId?: string, options?: {
174
+ skip?: readonly string[];
175
+ }): Promise<void>;
154
176
  //# sourceMappingURL=mcpAutoWrite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcpAutoWrite.d.ts","sourceRoot":"","sources":["../../src/harness/mcpAutoWrite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyFG;AAsDH;gEACgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;IAC/C,OAAO,EAAE,OAAO,CAAA;CACjB;AAQD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAc7D;AAopCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAgB9F;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,SAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BnG"}
1
+ {"version":3,"file":"mcpAutoWrite.d.ts","sourceRoot":"","sources":["../../src/harness/mcpAutoWrite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AAgEH;gEACgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;IAC/C,OAAO,EAAE,OAAO,CAAA;IAChB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAQD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAc7D;AAgBD,wBAAgB,uBAAuB,IAAI,MAAM,CAQhD;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAQ/C;AAUD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAMD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAMD;;0FAE0F;AAC1F,wBAAgB,wBAAwB,IAAI,MAAM,CAGjD;AA6yBD,mFAAmF;AACnF,eAAO,MAAM,iBAAiB,QAAoG,CAAA;AA6YlI;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAgB9F;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,WAAW,SAAY,EACvB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAO,GACzC,OAAO,CAAC,IAAI,CAAC,CA2Bf"}