@cybedefend/vibedefend 1.4.4 → 1.4.6

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 (67) hide show
  1. package/README.md +39 -3
  2. package/dist/auth/auth.js +15 -2
  3. package/dist/auth/auth.js.map +1 -1
  4. package/dist/clients/claude-code.js +108 -30
  5. package/dist/clients/claude-code.js.map +1 -1
  6. package/dist/clients/codex.js +117 -18
  7. package/dist/clients/codex.js.map +1 -1
  8. package/dist/clients/cursor-guards-rules.js +26 -1
  9. package/dist/clients/cursor-guards-rules.js.map +1 -1
  10. package/dist/clients/cursor.js +24 -14
  11. package/dist/clients/cursor.js.map +1 -1
  12. package/dist/clients/mcp-url.js +42 -0
  13. package/dist/clients/mcp-url.js.map +1 -0
  14. package/dist/clients/unwire.js +57 -0
  15. package/dist/clients/unwire.js.map +1 -0
  16. package/dist/clients/vscode.js +38 -16
  17. package/dist/clients/vscode.js.map +1 -1
  18. package/dist/clients/windsurf.js +32 -14
  19. package/dist/clients/windsurf.js.map +1 -1
  20. package/dist/config.js +7 -0
  21. package/dist/config.js.map +1 -1
  22. package/dist/diagnostics.js +4 -2
  23. package/dist/diagnostics.js.map +1 -1
  24. package/dist/doctor.js +15 -3
  25. package/dist/doctor.js.map +1 -1
  26. package/dist/global-cli.js +138 -0
  27. package/dist/global-cli.js.map +1 -0
  28. package/dist/hook-runner.js +196 -85
  29. package/dist/hooks/install.js +3 -1
  30. package/dist/hooks/install.js.map +1 -1
  31. package/dist/hooks/runtime/pre-compact.js +9 -2
  32. package/dist/hooks/runtime/pre-compact.js.map +1 -1
  33. package/dist/hooks/runtime/proposal-mode.js +75 -0
  34. package/dist/hooks/runtime/proposal-mode.js.map +1 -0
  35. package/dist/hooks/runtime/resolve.js +12 -5
  36. package/dist/hooks/runtime/resolve.js.map +1 -1
  37. package/dist/hooks/runtime/session-review.js +40 -20
  38. package/dist/hooks/runtime/session-review.js.map +1 -1
  39. package/dist/hooks/runtime/session-start.js +7 -1
  40. package/dist/hooks/runtime/session-start.js.map +1 -1
  41. package/dist/hooks/runtime/shell-writes.js +3 -2
  42. package/dist/hooks/runtime/shell-writes.js.map +1 -1
  43. package/dist/hooks/runtime/user-prompt-submit.js +12 -2
  44. package/dist/hooks/runtime/user-prompt-submit.js.map +1 -1
  45. package/dist/index.js +12 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/install.js +118 -23
  48. package/dist/install.js.map +1 -1
  49. package/dist/json-file.js +115 -0
  50. package/dist/json-file.js.map +1 -0
  51. package/dist/link.js +5 -2
  52. package/dist/link.js.map +1 -1
  53. package/dist/login.js +12 -4
  54. package/dist/login.js.map +1 -1
  55. package/dist/prompts.js +18 -3
  56. package/dist/prompts.js.map +1 -1
  57. package/dist/refresh-hooks.js +1 -1
  58. package/dist/refresh-hooks.js.map +1 -1
  59. package/dist/self-update.js +5 -0
  60. package/dist/self-update.js.map +1 -1
  61. package/dist/status.js +5 -1
  62. package/dist/status.js.map +1 -1
  63. package/dist/uninstall.js +166 -0
  64. package/dist/uninstall.js.map +1 -0
  65. package/dist/utils.js +1 -20
  66. package/dist/utils.js.map +1 -1
  67. package/package.json +6 -4
@@ -25,8 +25,11 @@
25
25
  * Claude Code and Codex.
26
26
  */
27
27
  import { existsSync, readFileSync } from 'node:fs';
28
- import { home, log, readJson, writeJson } from '../utils.js';
28
+ import { readJson, writeJson } from '../json-file.js';
29
+ import { home, log } from '../utils.js';
29
30
  import { hookCommand, textReferencesHookRunner, isVibedefendOwnedHookCommand, } from '../hooks/install.js';
31
+ import { mcpStatus, readJsonServerEntry } from './mcp-url.js';
32
+ import { deleteKeys, dropFromEventArrays, editJsonFile } from './unwire.js';
30
33
  import { configDirExists, probeBinaryVersion, versionAtLeast, } from './detect.js';
31
34
  const CURSOR_HOOKS = home('.cursor', 'hooks.json');
32
35
  const CURSOR_MCP = home('.cursor', 'mcp.json');
@@ -135,9 +138,9 @@ function registerMcp(opts) {
135
138
  return true;
136
139
  }
137
140
  /**
138
- * Pure introspection — never throws. `hooksWired` from `~/.cursor/hooks.json`,
139
- * `mcpRegistered` from `~/.cursor/mcp.json`. A raw-text substring check is
140
- * sufficient and keeps the never-throw guarantee (no JSON parse to fail on).
141
+ * Pure introspection — never throws. `hooksWired` from `~/.cursor/hooks.json`
142
+ * (raw-text marker check), `mcpRegistered` from the `url` of our entry in
143
+ * `~/.cursor/mcp.json` — it must point at this region, not just exist.
141
144
  */
142
145
  function inspect(region) {
143
146
  let hooksWired = false;
@@ -149,16 +152,22 @@ function inspect(region) {
149
152
  catch {
150
153
  /* missing/unreadable → false */
151
154
  }
152
- let mcpRegistered = false;
153
- try {
154
- if (existsSync(CURSOR_MCP)) {
155
- mcpRegistered = readFileSync(CURSOR_MCP, 'utf8').includes(region.mcpName);
156
- }
157
- }
158
- catch {
159
- /* → false */
160
- }
161
- return { hooksWired, mcpRegistered };
155
+ const entry = readJsonServerEntry(() => readFileSync(CURSOR_MCP, 'utf8'), 'mcpServers', region.mcpName);
156
+ return { hooksWired, ...mcpStatus(entry?.url, region) };
157
+ }
158
+ /** Drop our entries from `~/.cursor/hooks.json` and our servers from `~/.cursor/mcp.json`. */
159
+ function uninstall(opts) {
160
+ const hooksRemoved = editJsonFile(CURSOR_HOOKS, (file) => {
161
+ if (!file.hooks || typeof file.hooks !== 'object')
162
+ return false;
163
+ return dropFromEventArrays(file.hooks, dropOurs);
164
+ });
165
+ let mcpRemoved = [];
166
+ editJsonFile(CURSOR_MCP, (file) => {
167
+ mcpRemoved = deleteKeys(file.mcpServers, opts.mcpNames);
168
+ return mcpRemoved.length > 0;
169
+ });
170
+ return { hookFiles: hooksRemoved ? [CURSOR_HOOKS] : [], mcpRemoved };
162
171
  }
163
172
  export const cursorAdapter = {
164
173
  id: 'cursor',
@@ -168,5 +177,6 @@ export const cursorAdapter = {
168
177
  writeSettings,
169
178
  registerMcp,
170
179
  inspect,
180
+ uninstall,
171
181
  };
172
182
  //# sourceMappingURL=cursor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/clients/cursor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACnD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC;AAwB5B,SAAS,MAAM;IACb,2EAA2E;IAC3E,qEAAqE;IACrE,gEAAgE;IAChE,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;IAC1D,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,IAAI,YAAY,CAAC;IAExD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,uDAAuD;SAChE,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,wEAAwE;QACxE,gDAAgD;QAChD,OAAO;YACL,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,IAAI;YACnB,MAAM,EACJ,oFAAoF;SACvF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;QAC1C,OAAO;YACL,SAAS,EAAE,IAAI;YACf,OAAO;YACP,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,UAAU,OAAO,yBAAyB,WAAW,qCAAqC;SACnG,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAqB;IACrC,0DAA0D;IAC1D,OAAO,CAAC,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,CACrE,KAAK,CACN,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,OAA0B;IAC1C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,aAAa,CAAC,IAAiB;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAkB,YAAY,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC;IACrB,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;IAClB,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,EAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;IACvB,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,CAAC;IAE7B,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAExD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,WAAW,CAAC,aAAa,CAAC;QACnC,OAAO,EAAE,sBAAsB;QAC/B,gEAAgE;QAChE,kEAAkE;KACnE,CAAC,CAAC;IAEH,wEAAwE;IACxE,qEAAqE;IACrE,iEAAiE;IACjE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,WAAW,CAAC,aAAa,CAAC;KACpC,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAExE,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAC9B,GAAG,CAAC,EAAE,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;IAElD,4EAA4E;IAC5E,+EAA+E;IAC/E,4EAA4E;IAC5E,6EAA6E;IAC7E,8EAA8E;IAC9E,2BAA2B;AAC7B,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,WAAW,CAAC,IAA8B;IACjD,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;IAC/D,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAgB,UAAU,EAAE,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACnE,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC5B,GAAG,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,mBAAmB,UAAU,EAAE,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,OAAO,CAAC,MAAoB;IAInC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,UAAU,GAAG,wBAAwB,CACnC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CACnC,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,aAAa,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,aAAa;IACf,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,QAAQ;IACf,MAAM;IACN,QAAQ;IACR,aAAa;IACb,WAAW;IACX,OAAO;CACR,CAAC"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/clients/cursor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAY7B,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACnD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC;AAwB5B,SAAS,MAAM;IACb,2EAA2E;IAC3E,qEAAqE;IACrE,gEAAgE;IAChE,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;IAC1D,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,IAAI,YAAY,CAAC;IAExD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,uDAAuD;SAChE,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,wEAAwE;QACxE,gDAAgD;QAChD,OAAO;YACL,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,IAAI;YACnB,MAAM,EACJ,oFAAoF;SACvF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;QAC1C,OAAO;YACL,SAAS,EAAE,IAAI;YACf,OAAO;YACP,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,UAAU,OAAO,yBAAyB,WAAW,qCAAqC;SACnG,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAqB;IACrC,0DAA0D;IAC1D,OAAO,CAAC,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,CACrE,KAAK,CACN,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,OAA0B;IAC1C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,aAAa,CAAC,IAAiB;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAkB,YAAY,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC;IACrB,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;IAClB,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,EAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;IACvB,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,CAAC;IAE7B,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAExD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,WAAW,CAAC,aAAa,CAAC;QACnC,OAAO,EAAE,sBAAsB;QAC/B,gEAAgE;QAChE,kEAAkE;KACnE,CAAC,CAAC;IAEH,wEAAwE;IACxE,qEAAqE;IACrE,iEAAiE;IACjE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,WAAW,CAAC,aAAa,CAAC;KACpC,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAExE,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAC9B,GAAG,CAAC,EAAE,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;IAElD,4EAA4E;IAC5E,+EAA+E;IAC/E,4EAA4E;IAC5E,6EAA6E;IAC7E,8EAA8E;IAC9E,2BAA2B;AAC7B,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,WAAW,CAAC,IAA8B;IACjD,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;IAC/D,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAgB,UAAU,EAAE,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACnE,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC5B,GAAG,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,mBAAmB,UAAU,EAAE,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,OAAO,CAAC,MAAoB;IACnC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,UAAU,GAAG,wBAAwB,CACnC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CACnC,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,MAAM,KAAK,GAAG,mBAAmB,CAC/B,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,EACtC,YAAY,EACZ,MAAM,CAAC,OAAO,CACf,CAAC;IACF,OAAO,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,8FAA8F;AAC9F,SAAS,SAAS,CAAC,IAAmB;IACpC,MAAM,YAAY,GAAG,YAAY,CAAkB,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;QACxE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAChE,OAAO,mBAAmB,CAAkB,IAAI,CAAC,KAAgC,EAAE,QAAQ,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IACH,IAAI,UAAU,GAAa,EAAE,CAAC;IAC9B,YAAY,CAAgB,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;QAC/C,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,QAAQ;IACf,MAAM;IACN,QAAQ;IACR,aAAa;IACb,WAAW;IACX,OAAO;IACP,SAAS;CACV,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { parseJsonc } from '../json-file.js';
2
+ /** Same MCP endpoint? A trailing slash doesn't change it. */
3
+ export function sameMcpUrl(a, b) {
4
+ const norm = (url) => url.trim().replace(/\/+$/, '');
5
+ return norm(a) === norm(b);
6
+ }
7
+ /**
8
+ * The MCP half of an `InspectResult`, from the `url` field of the entry
9
+ * registered under `region.mcpName` (`undefined` when there is no entry).
10
+ * A non-string URL counts as no URL.
11
+ */
12
+ export function mcpStatus(registeredUrl, region) {
13
+ const mcpUrl = typeof registeredUrl === 'string' && registeredUrl.trim() !== ''
14
+ ? registeredUrl
15
+ : null;
16
+ return {
17
+ mcpRegistered: mcpUrl !== null && sameMcpUrl(mcpUrl, region.mcpUrl),
18
+ mcpUrl,
19
+ };
20
+ }
21
+ /**
22
+ * The entry registered under `name` in a JSON config's server map
23
+ * (`mcpServers` for Cursor / Windsurf, `servers` for VS Code), or `null`.
24
+ * Read as JSONC, like the clients do. Never throws: a missing / malformed
25
+ * file or map is `null`.
26
+ */
27
+ export function readJsonServerEntry(read, mapKey, name) {
28
+ try {
29
+ const config = parseJsonc(read(), 'config');
30
+ const servers = config?.[mapKey];
31
+ if (servers === null || typeof servers !== 'object')
32
+ return null;
33
+ const entry = servers[name];
34
+ return entry !== null && typeof entry === 'object'
35
+ ? entry
36
+ : null;
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ //# sourceMappingURL=mcp-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-url.js","sourceRoot":"","sources":["../../src/clients/mcp-url.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,6DAA6D;AAC7D,MAAM,UAAU,UAAU,CAAC,CAAS,EAAE,CAAS;IAC7C,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,aAAsB,EACtB,MAAoB;IAEpB,MAAM,MAAM,GACV,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE;QAC9D,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,IAAI,CAAC;IACX,OAAO;QACL,aAAa,EAAE,MAAM,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACnE,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAkB,EAClB,MAAc,EACd,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAmC,CAAC;QAC9E,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACjE,MAAM,KAAK,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;YAChD,CAAC,CAAE,KAAiC;YACpC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Shared helpers for the adapters' `uninstall()` — the inverse of
3
+ * `writeSettings` / `registerMcp`. Each adapter keeps its own `dropOurs`
4
+ * (entry shapes differ per client); these only walk the containers and make
5
+ * sure a config file is rewritten only when something was actually removed.
6
+ */
7
+ import { existsSync } from 'node:fs';
8
+ import { readJson, writeJson } from '../json-file.js';
9
+ /**
10
+ * Apply `drop` to every array under `container` (an object keyed by event
11
+ * name), then delete the arrays left empty — including the empty ones the
12
+ * installer itself created with `??= []`. Non-array keys are left alone.
13
+ * Returns true when `drop` removed at least one entry.
14
+ */
15
+ export function dropFromEventArrays(container, drop) {
16
+ let removed = false;
17
+ for (const [event, entries] of Object.entries(container)) {
18
+ if (!Array.isArray(entries))
19
+ continue;
20
+ const kept = drop(entries);
21
+ if (kept.length !== entries.length)
22
+ removed = true;
23
+ container[event] = kept;
24
+ }
25
+ if (removed) {
26
+ for (const [event, entries] of Object.entries(container)) {
27
+ if (Array.isArray(entries) && entries.length === 0)
28
+ delete container[event];
29
+ }
30
+ }
31
+ return removed;
32
+ }
33
+ /** Delete each of `names` from `obj`; returns the names that were present. */
34
+ export function deleteKeys(obj, names) {
35
+ if (!obj || typeof obj !== 'object')
36
+ return [];
37
+ const record = obj;
38
+ const present = names.filter((n) => Object.prototype.hasOwnProperty.call(record, n));
39
+ for (const n of present)
40
+ delete record[n];
41
+ return present;
42
+ }
43
+ /**
44
+ * Read the JSON file at `path`, let `mutate` edit it in place, and write it
45
+ * back only when `mutate` reports a change. A missing file is a no-op.
46
+ * Returns whether the file was rewritten.
47
+ */
48
+ export function editJsonFile(path, mutate) {
49
+ if (!existsSync(path))
50
+ return false;
51
+ const data = readJson(path, {});
52
+ if (!data || typeof data !== 'object' || !mutate(data))
53
+ return false;
54
+ writeJson(path, data);
55
+ return true;
56
+ }
57
+ //# sourceMappingURL=unwire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unwire.js","sourceRoot":"","sources":["../../src/clients/unwire.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAkC,EAClC,IAA2B;IAE3B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,SAAS;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAc,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;YAAE,OAAO,GAAG,IAAI,CAAC;QACnD,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,UAAU,CAAC,GAAY,EAAE,KAAwB;IAC/D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,MAA4B;IAE5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,QAAQ,CAAI,IAAI,EAAE,EAAO,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -17,11 +17,14 @@
17
17
  *
18
18
  * Min version: 1.110.0 (February 2026 — first release with hook support).
19
19
  */
20
- import { existsSync, mkdirSync, readFileSync } from 'node:fs';
20
+ import { existsSync, mkdirSync, readFileSync, rmSync } from 'node:fs';
21
21
  import { dirname, join } from 'node:path';
22
22
  import { platform } from 'node:os';
23
- import { home, log, readJson, writeJson } from '../utils.js';
23
+ import { readJson, writeJson } from '../json-file.js';
24
+ import { home, log } from '../utils.js';
24
25
  import { hookCommand, textReferencesHookRunner, isVibedefendOwnedHookCommand, } from '../hooks/install.js';
26
+ import { mcpStatus, readJsonServerEntry } from './mcp-url.js';
27
+ import { deleteKeys, dropFromEventArrays, editJsonFile } from './unwire.js';
25
28
  import { probeBinaryVersion, versionAtLeast } from './detect.js';
26
29
  const COPILOT_HOOKS = home('.copilot', 'hooks', 'cybedefend.json');
27
30
  const MIN_VERSION = '1.110.0';
@@ -149,9 +152,10 @@ function registerMcp(opts) {
149
152
  }
150
153
  /**
151
154
  * Pure introspection — never throws. `hooksWired` from
152
- * `~/.copilot/hooks/cybedefend.json`, `mcpRegistered` from the per-OS
153
- * user-profile `mcp.json` (same path `registerMcp` writes to). Raw-text
154
- * substring checks keep the never-throw guarantee.
155
+ * `~/.copilot/hooks/cybedefend.json` (raw-text marker check),
156
+ * `mcpRegistered` from the `url` of our entry in the per-OS user-profile
157
+ * `mcp.json` (same path `registerMcp` writes to) — it must point at this
158
+ * region, not just exist.
155
159
  */
156
160
  function inspect(region) {
157
161
  let hooksWired = false;
@@ -163,17 +167,34 @@ function inspect(region) {
163
167
  catch {
164
168
  /* missing/unreadable → false */
165
169
  }
166
- let mcpRegistered = false;
167
- try {
168
- const mcpPath = vscodeUserMcpPath();
169
- if (existsSync(mcpPath)) {
170
- mcpRegistered = readFileSync(mcpPath, 'utf8').includes(region.mcpName);
171
- }
172
- }
173
- catch {
174
- /* → false */
175
- }
176
- return { hooksWired, mcpRegistered };
170
+ const entry = readJsonServerEntry(() => readFileSync(vscodeUserMcpPath(), 'utf8'), 'servers', region.mcpName);
171
+ return { hooksWired, ...mcpStatus(entry?.url, region) };
172
+ }
173
+ /**
174
+ * Drop our entries from `~/.copilot/hooks/cybedefend.json` — a file we own,
175
+ * deleted outright once nothing else is left in it — and our servers from the
176
+ * user-profile `mcp.json`.
177
+ */
178
+ function uninstall(opts) {
179
+ let leftEmpty = false;
180
+ const hooksRemoved = editJsonFile(COPILOT_HOOKS, (file) => {
181
+ if (!file.hooks || typeof file.hooks !== 'object')
182
+ return false;
183
+ const hooks = file.hooks;
184
+ const removed = dropFromEventArrays(hooks, dropOurs);
185
+ if (removed && Object.keys(hooks).length === 0)
186
+ delete file.hooks;
187
+ leftEmpty = Object.keys(file).length === 0;
188
+ return removed;
189
+ });
190
+ if (hooksRemoved && leftEmpty)
191
+ rmSync(COPILOT_HOOKS, { force: true });
192
+ let mcpRemoved = [];
193
+ editJsonFile(vscodeUserMcpPath(), (file) => {
194
+ mcpRemoved = deleteKeys(file.servers, opts.mcpNames);
195
+ return mcpRemoved.length > 0;
196
+ });
197
+ return { hookFiles: hooksRemoved ? [COPILOT_HOOKS] : [], mcpRemoved };
177
198
  }
178
199
  export const vscodeAdapter = {
179
200
  id: 'vscode',
@@ -183,5 +204,6 @@ export const vscodeAdapter = {
183
204
  writeSettings,
184
205
  registerMcp,
185
206
  inspect,
207
+ uninstall,
186
208
  };
187
209
  //# sourceMappingURL=vscode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../src/clients/vscode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../src/clients/vscode.ts"],"names":[],"mappings":"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"}
@@ -27,9 +27,12 @@
27
27
  */
28
28
  import { existsSync, readFileSync } from 'node:fs';
29
29
  import { join } from 'node:path';
30
- import { home, log, readJson, writeJson } from '../utils.js';
31
- import { WINDSURF_GUARDS_SNIPPET, appendGuardSnippetIdempotent, } from './cursor-guards-rules.js';
30
+ import { readJson, writeJson } from '../json-file.js';
31
+ import { home, log } from '../utils.js';
32
+ import { WINDSURF_GUARDS_SNIPPET, appendGuardSnippetIdempotent, removeGuardSnippet, } from './cursor-guards-rules.js';
32
33
  import { hookCommand, textReferencesHookRunner, isVibedefendOwnedHookCommand, } from '../hooks/install.js';
34
+ import { mcpStatus, readJsonServerEntry } from './mcp-url.js';
35
+ import { deleteKeys, dropFromEventArrays, editJsonFile } from './unwire.js';
33
36
  import { configDirExists, probeBinaryVersion, } from './detect.js';
34
37
  const WINDSURF_HOOKS = home('.codeium', 'windsurf', 'hooks.json');
35
38
  const WINDSURF_MCP = home('.codeium', 'windsurf', 'mcp_config.json');
@@ -114,9 +117,10 @@ function registerMcp(opts) {
114
117
  }
115
118
  /**
116
119
  * Pure introspection — never throws. `hooksWired` from
117
- * `~/.codeium/windsurf/hooks.json`, `mcpRegistered` from
118
- * `~/.codeium/windsurf/mcp_config.json`. Raw-text substring checks keep
119
- * the never-throw guarantee.
120
+ * `~/.codeium/windsurf/hooks.json` (raw-text marker check),
121
+ * `mcpRegistered` from the `serverUrl` of our entry in
122
+ * `~/.codeium/windsurf/mcp_config.json` — it must point at this region,
123
+ * not just exist.
120
124
  */
121
125
  function inspect(region) {
122
126
  let hooksWired = false;
@@ -128,16 +132,29 @@ function inspect(region) {
128
132
  catch {
129
133
  /* missing/unreadable → false */
130
134
  }
131
- let mcpRegistered = false;
132
- try {
133
- if (existsSync(WINDSURF_MCP)) {
134
- mcpRegistered = readFileSync(WINDSURF_MCP, 'utf8').includes(region.mcpName);
135
- }
136
- }
137
- catch {
138
- /* → false */
135
+ const entry = readJsonServerEntry(() => readFileSync(WINDSURF_MCP, 'utf8'), 'mcpServers', region.mcpName);
136
+ return { hooksWired, ...mcpStatus(entry?.serverUrl, region) };
137
+ }
138
+ /**
139
+ * Drop our entries from `~/.codeium/windsurf/hooks.json` (event arrays sit at
140
+ * the top level) and our servers from `mcp_config.json`. The `.windsurfrules`
141
+ * snippet is per-repo — written to the cwd at install time — so only the
142
+ * current directory's copy can be cleaned here.
143
+ */
144
+ function uninstall(opts) {
145
+ const hookFiles = [];
146
+ if (editJsonFile(WINDSURF_HOOKS, (file) => dropFromEventArrays(file, dropOurs))) {
147
+ hookFiles.push(WINDSURF_HOOKS);
139
148
  }
140
- return { hooksWired, mcpRegistered };
149
+ const rulesPath = join(opts.cwd ?? process.cwd(), '.windsurfrules');
150
+ if (removeGuardSnippet(rulesPath))
151
+ hookFiles.push(rulesPath);
152
+ let mcpRemoved = [];
153
+ editJsonFile(WINDSURF_MCP, (file) => {
154
+ mcpRemoved = deleteKeys(file.mcpServers, opts.mcpNames);
155
+ return mcpRemoved.length > 0;
156
+ });
157
+ return { hookFiles, mcpRemoved };
141
158
  }
142
159
  export const windsurfAdapter = {
143
160
  id: 'windsurf',
@@ -147,5 +164,6 @@ export const windsurfAdapter = {
147
164
  writeSettings,
148
165
  registerMcp,
149
166
  inspect,
167
+ uninstall,
150
168
  };
151
169
  //# sourceMappingURL=windsurf.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/clients/windsurf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EACL,eAAe,EACf,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AAClE,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAsBrE,SAAS,MAAM;IACb,4EAA4E;IAC5E,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC;IAC5D,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,IAAI,YAAY,CAAC;IAExD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,mEAAmE;SAC5E,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,IAAI;QACf,OAAO;QACP,aAAa,EAAE,IAAI;QACnB,oEAAoE;QACpE,kEAAkE;QAClE,+DAA+D;KAChE,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAqB;IACrC,mEAAmE;IACnE,4DAA4D;IAC5D,OAAO,KAAK,KAAK,aAAa,CAAC;AACjC,CAAC;AAED,SAAS,QAAQ,CAAC,OAA4B;IAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,aAAa,CAAC,IAAiB;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAoB,cAAc,EAAE,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,cAAc,KAAK,EAAE,CAAC;IAC3B,IAAI,CAAC,eAAe,KAAK,EAAE,CAAC;IAC5B,IAAI,CAAC,qBAAqB,KAAK,EAAE,CAAC;IAElC,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACpD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACtD,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAElE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAErE,mEAAmE;IACnE,8DAA8D;IAC9D,iEAAiE;IACjE,iBAAiB;IACjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAElE,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAC9B,OAAO,EAAE,WAAW,CAAC,gBAAgB,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAChC,GAAG,CAAC,EAAE,CAAC,6BAA6B,cAAc,EAAE,CAAC,CAAC;IACtD,GAAG,CAAC,IAAI,CACN,4HAA4H,CAC7H,CAAC;IAEF,yEAAyE;IACzE,oEAAoE;IACpE,yEAAyE;IACzE,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAChE,4BAA4B,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,+BAA+B,CAAC,CAAC;IAC1G,GAAG,CAAC,EAAE,CAAC,6BAA6B,iBAAiB,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,IAA8B;IACjD,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;IACjE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAkB,YAAY,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACzE,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAC9B,GAAG,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,mBAAmB,YAAY,EAAE,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,OAAO,CAAC,MAAoB;IAInC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,UAAU,GAAG,wBAAwB,CACnC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CACrC,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,aAAa,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,QAAQ,CACzD,MAAM,CAAC,OAAO,CACf,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,aAAa;IACf,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,oBAAoB;IAC3B,MAAM;IACN,QAAQ;IACR,aAAa;IACb,WAAW;IACX,OAAO;CACR,CAAC"}
1
+ {"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/clients/windsurf.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -31,11 +31,18 @@ export const REGIONS = [
31
31
  * low threshold surfaces genuine gaps without spamming proposals. Raise it if
32
32
  * a team finds the nudge too noisy. `autoProposeMode` stays OFF because policy
33
33
  * mutations need an explicit user "yes" in the chat by default.
34
+ * `nonBlockingMode` stays OFF too: it is meant for autonomous agents (Cyrus,
35
+ * CI runners…) that have no human in the chat to answer an Accept/Reject.
34
36
  */
35
37
  export const HOOK_DEFAULTS = {
36
38
  enableSessionReview: true,
37
39
  reviewThreshold: 1,
38
40
  autoProposeMode: false,
41
+ // Non-blocking mode: the hooks never ask the agent to pause for a chat-side
42
+ // Accept/Reject on business-rule proposals. Pending proposals are left for a
43
+ // human to review in the dashboard, and the gap analysis pushes its proposal
44
+ // directly. Overridable per process with CYBEDEFEND_NON_BLOCKING=1|0.
45
+ nonBlockingMode: false,
39
46
  autoUpdate: true,
40
47
  // Pre-commit diff scan ON by default: the Stop hook asks the agent to scan
41
48
  // the files it changed (cybe_scan_diff) before the user commits. Opt-out at
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAwCA,MAAM,CAAC,MAAM,OAAO,GAA4B;IAC9C;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,kFAAkF;QACpF,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,2BAA2B;KAC1C;IACD;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,0EAA0E;QAC5E,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,2BAA2B;KAC1C;CACO,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,mBAAmB,EAAE,IAAI;IACzB,eAAe,EAAE,CAAC;IAClB,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,IAAI;IAChB,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,cAAc,EAAE,IAAI;CACZ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAwCA,MAAM,CAAC,MAAM,OAAO,GAA4B;IAC9C;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,kFAAkF;QACpF,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,2BAA2B;KAC1C;IACD;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,0EAA0E;QAC5E,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,2BAA2B;KAC1C;CACO,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,mBAAmB,EAAE,IAAI;IACzB,eAAe,EAAE,CAAC;IAClB,eAAe,EAAE,KAAK;IACtB,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,sEAAsE;IACtE,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,IAAI;IAChB,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,cAAc,EAAE,IAAI;CACZ,CAAC"}
@@ -54,22 +54,24 @@ export async function gatherInstallState(opts = {}) {
54
54
  return false;
55
55
  }
56
56
  })();
57
+ const absent = { hooksWired: false, mcpRegistered: false, mcpUrl: null };
57
58
  const ins = region
58
59
  ? (() => {
59
60
  try {
60
61
  return a.inspect(region);
61
62
  }
62
63
  catch {
63
- return { hooksWired: false, mcpRegistered: false };
64
+ return absent;
64
65
  }
65
66
  })()
66
- : { hooksWired: false, mcpRegistered: false };
67
+ : absent;
67
68
  return {
68
69
  id: a.id,
69
70
  label: a.label,
70
71
  detected,
71
72
  hooksWired: ins.hooksWired,
72
73
  mcpRegistered: ins.mcpRegistered,
74
+ mcpUrl: ins.mcpUrl,
73
75
  };
74
76
  });
75
77
  // `resolveProjectId` never throws — it swallows malformed config JSON and
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
package/dist/doctor.js CHANGED
@@ -10,11 +10,12 @@
10
10
  * derives repairs, prints them, confirms, and applies the fixes.
11
11
  */
12
12
  import kleur from 'kleur';
13
+ import { sameMcpUrl } from './clients/mcp-url.js';
13
14
  import { adapterFor } from './clients/registry.js';
14
15
  import { gatherInstallState } from './diagnostics.js';
15
16
  import { installHookRuntime } from './hooks/install.js';
16
17
  import { loadRuntimeConfig } from './hooks/runtime/config.js';
17
- import { HOOK_DEFAULTS } from './config.js';
18
+ import { HOOK_DEFAULTS, REGIONS } from './config.js';
18
19
  import { log } from './utils.js';
19
20
  import { pkg } from './version.js';
20
21
  /**
@@ -34,7 +35,8 @@ function resolveHookConfig() {
34
35
  * when no config exists), return a complete `HookConfig`. `enableDiffScan` is
35
36
  * defaulted from `HOOK_DEFAULTS` when absent so the default-on rollout reaches
36
37
  * legacy configs, while an explicit `false` is preserved (opt-out survives a
37
- * doctor repair). Exported for unit testing.
38
+ * doctor repair). `nonBlockingMode` is backfilled the same way (absent → OFF,
39
+ * an explicit `true` survives). Exported for unit testing.
38
40
  */
39
41
  export function resolveHookConfigFrom(hooks) {
40
42
  if (!hooks)
@@ -42,8 +44,14 @@ export function resolveHookConfigFrom(hooks) {
42
44
  return {
43
45
  ...hooks,
44
46
  enableDiffScan: hooks.enableDiffScan ?? HOOK_DEFAULTS.enableDiffScan,
47
+ nonBlockingMode: hooks.nonBlockingMode ?? HOOK_DEFAULTS.nonBlockingMode,
45
48
  };
46
49
  }
50
+ /** A built-in region's label + URL for its MCP URL, else the URL alone. */
51
+ function describeMcpUrl(url) {
52
+ const known = REGIONS.find((r) => sameMcpUrl(r.mcpUrl, url));
53
+ return known ? `${known.label}, ${url}` : url;
54
+ }
47
55
  /** Pure: derive the repair list from a gathered state. */
48
56
  export function deriveRepairs(state) {
49
57
  const repairs = [];
@@ -98,9 +106,13 @@ export function deriveRepairs(state) {
98
106
  });
99
107
  }
100
108
  if (c.detected && !c.mcpRegistered) {
109
+ // An entry under our name with a URL, yet not registered: it points at
110
+ // another region (EU and US share the name) — `registerMcp` re-points it.
101
111
  repairs.push({
102
112
  id: `mcp-${c.id}`,
103
- description: `${c.label} is installed but the MCP server is not registered — register it.`,
113
+ description: c.mcpUrl !== null
114
+ ? `${c.label}'s MCP server points at another region (${describeMcpUrl(c.mcpUrl)}), not ${region.label} — re-point it.`
115
+ : `${c.label} is installed but the MCP server is not registered — register it.`,
104
116
  fix: () => {
105
117
  const adapter = adapterFor(c.id);
106
118
  adapter.registerMcp?.({ region });
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}