xtctx 0.11.1 → 0.11.3

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 (105) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/src/cli/hook.d.ts.map +1 -1
  3. package/dist/src/cli/hook.js +25 -14
  4. package/dist/src/cli/hook.js.map +1 -1
  5. package/dist/src/cli/index.d.ts.map +1 -1
  6. package/dist/src/cli/index.js +16 -1
  7. package/dist/src/cli/index.js.map +1 -1
  8. package/dist/src/cli/setup.d.ts.map +1 -1
  9. package/dist/src/cli/setup.js +1 -2
  10. package/dist/src/cli/setup.js.map +1 -1
  11. package/dist/src/cli/status.d.ts.map +1 -1
  12. package/dist/src/cli/status.js +54 -5
  13. package/dist/src/cli/status.js.map +1 -1
  14. package/dist/src/config/disconnect.d.ts +2 -0
  15. package/dist/src/config/disconnect.d.ts.map +1 -1
  16. package/dist/src/config/disconnect.js +109 -27
  17. package/dist/src/config/disconnect.js.map +1 -1
  18. package/dist/src/config/managed-block.d.ts +29 -0
  19. package/dist/src/config/managed-block.d.ts.map +1 -0
  20. package/dist/src/config/managed-block.js +67 -0
  21. package/dist/src/config/managed-block.js.map +1 -0
  22. package/dist/src/config/mcp-config.d.ts +2 -0
  23. package/dist/src/config/mcp-config.d.ts.map +1 -1
  24. package/dist/src/config/mcp-config.js +101 -7
  25. package/dist/src/config/mcp-config.js.map +1 -1
  26. package/dist/src/config/setup.d.ts +2 -0
  27. package/dist/src/config/setup.d.ts.map +1 -1
  28. package/dist/src/config/setup.js +78 -37
  29. package/dist/src/config/setup.js.map +1 -1
  30. package/dist/src/config/skills.d.ts.map +1 -1
  31. package/dist/src/config/skills.js +4 -4
  32. package/dist/src/config/skills.js.map +1 -1
  33. package/dist/src/handoff/embeddings.d.ts +11 -0
  34. package/dist/src/handoff/embeddings.d.ts.map +1 -1
  35. package/dist/src/handoff/embeddings.js +74 -5
  36. package/dist/src/handoff/embeddings.js.map +1 -1
  37. package/dist/src/handoff/sqlite-index.d.ts +9 -0
  38. package/dist/src/handoff/sqlite-index.d.ts.map +1 -1
  39. package/dist/src/handoff/sqlite-index.js +285 -98
  40. package/dist/src/handoff/sqlite-index.js.map +1 -1
  41. package/dist/src/handoff/types.d.ts +6 -0
  42. package/dist/src/handoff/types.d.ts.map +1 -1
  43. package/dist/src/mcp/server.d.ts +1 -1
  44. package/dist/src/mcp/server.d.ts.map +1 -1
  45. package/dist/src/mcp/server.js +17 -8
  46. package/dist/src/mcp/server.js.map +1 -1
  47. package/dist/src/mcp/tools/continuity.d.ts +19 -1
  48. package/dist/src/mcp/tools/continuity.d.ts.map +1 -1
  49. package/dist/src/mcp/tools/continuity.js +27 -2
  50. package/dist/src/mcp/tools/continuity.js.map +1 -1
  51. package/dist/src/mcp/tools/manifest.d.ts.map +1 -1
  52. package/dist/src/mcp/tools/manifest.js +15 -6
  53. package/dist/src/mcp/tools/manifest.js.map +1 -1
  54. package/dist/src/mcp/tools/sessions.d.ts +9 -1
  55. package/dist/src/mcp/tools/sessions.d.ts.map +1 -1
  56. package/dist/src/mcp/tools/sessions.js +68 -9
  57. package/dist/src/mcp/tools/sessions.js.map +1 -1
  58. package/dist/src/runtime/services.d.ts.map +1 -1
  59. package/dist/src/runtime/services.js +22 -2
  60. package/dist/src/runtime/services.js.map +1 -1
  61. package/dist/src/scrapers/antigravity.d.ts +11 -0
  62. package/dist/src/scrapers/antigravity.d.ts.map +1 -1
  63. package/dist/src/scrapers/antigravity.js +47 -36
  64. package/dist/src/scrapers/antigravity.js.map +1 -1
  65. package/dist/src/scrapers/base.d.ts.map +1 -1
  66. package/dist/src/scrapers/base.js +4 -1
  67. package/dist/src/scrapers/base.js.map +1 -1
  68. package/dist/src/scrapers/claude-code.d.ts +17 -0
  69. package/dist/src/scrapers/claude-code.d.ts.map +1 -1
  70. package/dist/src/scrapers/claude-code.js +115 -59
  71. package/dist/src/scrapers/claude-code.js.map +1 -1
  72. package/dist/src/scrapers/codex.d.ts.map +1 -1
  73. package/dist/src/scrapers/codex.js +166 -153
  74. package/dist/src/scrapers/codex.js.map +1 -1
  75. package/dist/src/scrapers/copilot-cli.d.ts +2 -1
  76. package/dist/src/scrapers/copilot-cli.d.ts.map +1 -1
  77. package/dist/src/scrapers/copilot-cli.js +88 -3
  78. package/dist/src/scrapers/copilot-cli.js.map +1 -1
  79. package/dist/src/scrapers/cursor.d.ts.map +1 -1
  80. package/dist/src/scrapers/cursor.js +20 -9
  81. package/dist/src/scrapers/cursor.js.map +1 -1
  82. package/dist/src/scrapers/index.d.ts +7 -2
  83. package/dist/src/scrapers/index.d.ts.map +1 -1
  84. package/dist/src/scrapers/index.js +7 -2
  85. package/dist/src/scrapers/index.js.map +1 -1
  86. package/dist/src/scrapers/opencode.d.ts +2 -1
  87. package/dist/src/scrapers/opencode.d.ts.map +1 -1
  88. package/dist/src/scrapers/opencode.js +38 -9
  89. package/dist/src/scrapers/opencode.js.map +1 -1
  90. package/dist/src/tools/sources.d.ts.map +1 -1
  91. package/dist/src/tools/sources.js +2 -2
  92. package/dist/src/tools/sources.js.map +1 -1
  93. package/dist/src/utils/atomic-file.d.ts +8 -0
  94. package/dist/src/utils/atomic-file.d.ts.map +1 -0
  95. package/dist/src/utils/atomic-file.js +15 -0
  96. package/dist/src/utils/atomic-file.js.map +1 -0
  97. package/dist/src/utils/errors.d.ts +5 -0
  98. package/dist/src/utils/errors.d.ts.map +1 -1
  99. package/dist/src/utils/errors.js +9 -0
  100. package/dist/src/utils/errors.js.map +1 -1
  101. package/dist/src/utils/project-scope.d.ts +16 -0
  102. package/dist/src/utils/project-scope.d.ts.map +1 -1
  103. package/dist/src/utils/project-scope.js +18 -2
  104. package/dist/src/utils/project-scope.js.map +1 -1
  105. package/package.json +3 -3
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Managed-block splicing shared by setup and disconnect.
3
+ *
4
+ * These helpers were duplicated across both modules, and an audit found the
5
+ * same defect in each copy: removal collapsed every run of 3+ newlines in the
6
+ * whole file — including inside user code fences — which the block's own text
7
+ * ("Content outside this managed block is preserved") promises never happens.
8
+ * Fixing it twice is what justifies one home for it.
9
+ */
10
+ export declare const MARKERS: {
11
+ begin: string;
12
+ end: string;
13
+ };
14
+ export declare function normalizeNewlines(input: string): string;
15
+ export declare function escapeRegExp(value: string): string;
16
+ /**
17
+ * Remove every managed block, collapsing whitespace only at the splice seams
18
+ * so user content elsewhere in the file is byte-preserved.
19
+ */
20
+ export declare function removeManagedBlocks(content: string): string;
21
+ /**
22
+ * True when the file is predominantly CRLF, so writers can put it back the
23
+ * way the author had it instead of silently reformatting the whole file.
24
+ */
25
+ export declare function isCrlfDominant(content: string): boolean;
26
+ /** Re-apply a file's original line endings to rewritten content. */
27
+ export declare function matchLineEndings(content: string, original: string | null): string;
28
+ export declare function countManagedBlocks(content: string): number;
29
+ //# sourceMappingURL=managed-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-block.d.ts","sourceRoot":"","sources":["../../../src/config/managed-block.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,OAAO;;;CAGnB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AASD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAoB3D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIvD;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAIjF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Managed-block splicing shared by setup and disconnect.
3
+ *
4
+ * These helpers were duplicated across both modules, and an audit found the
5
+ * same defect in each copy: removal collapsed every run of 3+ newlines in the
6
+ * whole file — including inside user code fences — which the block's own text
7
+ * ("Content outside this managed block is preserved") promises never happens.
8
+ * Fixing it twice is what justifies one home for it.
9
+ */
10
+ export const MARKERS = {
11
+ begin: "<!-- xtctx:begin -->",
12
+ end: "<!-- xtctx:end -->",
13
+ };
14
+ export function normalizeNewlines(input) {
15
+ return input.replace(/\r\n/g, "\n");
16
+ }
17
+ export function escapeRegExp(value) {
18
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
19
+ }
20
+ function managedBlockPattern(trailingNewline) {
21
+ return new RegExp(`${escapeRegExp(MARKERS.begin)}[\\s\\S]*?${escapeRegExp(MARKERS.end)}${trailingNewline ? "\\n?" : ""}`, "g");
22
+ }
23
+ /**
24
+ * Remove every managed block, collapsing whitespace only at the splice seams
25
+ * so user content elsewhere in the file is byte-preserved.
26
+ */
27
+ export function removeManagedBlocks(content) {
28
+ const normalized = normalizeNewlines(content);
29
+ const parts = normalized.split(managedBlockPattern(true));
30
+ if (parts.length === 1) {
31
+ return normalized;
32
+ }
33
+ let result = parts[0];
34
+ for (let index = 1; index < parts.length; index += 1) {
35
+ const left = result.replace(/\n+$/, "");
36
+ const right = parts[index].replace(/^\n+/, "");
37
+ if (!left) {
38
+ result = right;
39
+ }
40
+ else if (!right) {
41
+ result = left;
42
+ }
43
+ else {
44
+ result = `${left}\n\n${right}`;
45
+ }
46
+ }
47
+ return result;
48
+ }
49
+ /**
50
+ * True when the file is predominantly CRLF, so writers can put it back the
51
+ * way the author had it instead of silently reformatting the whole file.
52
+ */
53
+ export function isCrlfDominant(content) {
54
+ const crlf = content.match(/\r\n/g)?.length ?? 0;
55
+ const lf = content.match(/\n/g)?.length ?? 0;
56
+ return crlf > 0 && crlf * 2 > lf;
57
+ }
58
+ /** Re-apply a file's original line endings to rewritten content. */
59
+ export function matchLineEndings(content, original) {
60
+ return original !== null && isCrlfDominant(original)
61
+ ? content.replace(/\r?\n/g, "\r\n")
62
+ : content;
63
+ }
64
+ export function countManagedBlocks(content) {
65
+ return normalizeNewlines(content).match(managedBlockPattern(false))?.length ?? 0;
66
+ }
67
+ //# sourceMappingURL=managed-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-block.js","sourceRoot":"","sources":["../../../src/config/managed-block.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,KAAK,EAAE,sBAAsB;IAC7B,GAAG,EAAE,oBAAoB;CAC1B,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,mBAAmB,CAAC,eAAwB;IACnD,OAAO,IAAI,MAAM,CACf,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EACtG,GAAG,CACJ,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;aAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,IAAI,OAAO,KAAK,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAC7C,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;AACnC,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,QAAuB;IACvE,OAAO,QAAQ,KAAK,IAAI,IAAI,cAAc,CAAC,QAAQ,CAAC;QAClD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;AACnF,CAAC"}
@@ -19,6 +19,8 @@ export interface McpSyncResult {
19
19
  created: boolean;
20
20
  skipped: boolean;
21
21
  warning?: string;
22
+ /** True when the config could not be read, parsed, or written at all. */
23
+ failed?: boolean;
22
24
  }
23
25
  export interface McpSyncSummary {
24
26
  results: McpSyncResult[];
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../../src/config/mcp-config.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,iBAAiB,CAAC;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,4CAA4C;IAC5C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvE;AAyED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,EAAE,EAC9B,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,OAAO,CAAC,cAAc,CAAC,CA4CzB;AAED,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA4B3B"}
1
+ {"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../../src/config/mcp-config.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,iBAAiB,CAAC;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,4CAA4C;IAC5C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvE;AAyED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,EAAE,EAC9B,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,OAAO,CAAC,cAAc,CAAC,CA4CzB;AAED,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA4B3B"}
@@ -1,7 +1,9 @@
1
- import { mkdir, readFile, writeFile } from "node:fs/promises";
1
+ import { readFile, rm } from "node:fs/promises";
2
2
  import { homedir } from "node:os";
3
- import { dirname, join } from "node:path";
3
+ import { join } from "node:path";
4
+ import { isDeepStrictEqual } from "node:util";
4
5
  import { parse as parseToml, stringify as stringifyToml } from "@iarna/toml";
6
+ import { writeFileAtomic } from "../utils/atomic-file.js";
5
7
  import { errorMessage } from "../utils/errors.js";
6
8
  /**
7
9
  * Tools with native MCP configuration support.
@@ -169,12 +171,26 @@ async function writeMcpConfig(tool, configPath, scope, renderer, servers) {
169
171
  }
170
172
  }
171
173
  let existing = null;
174
+ let hadComments = false;
172
175
  if (existingContent !== null) {
173
176
  try {
174
177
  existing = parseConfig(existingContent, format);
175
178
  }
176
179
  catch (error) {
177
- return failedMcpSync(tool, configPath, scope, `Failed to parse existing MCP config; leaving it unchanged: ${errorMessage(error)}`);
180
+ // VS Code-family configs are JSONC in practice: retry with comments
181
+ // stripped before declaring the file unparsable.
182
+ if (format === "json") {
183
+ try {
184
+ existing = JSON.parse(stripJsonComments(existingContent));
185
+ hadComments = true;
186
+ }
187
+ catch {
188
+ return failedMcpSync(tool, configPath, scope, `Failed to parse existing MCP config; leaving it unchanged: ${errorMessage(error)}`);
189
+ }
190
+ }
191
+ else {
192
+ return failedMcpSync(tool, configPath, scope, `Failed to parse existing MCP config; leaving it unchanged: ${errorMessage(error)}`);
193
+ }
178
194
  }
179
195
  }
180
196
  const serverEntries = buildServerEntries(servers, buildEntry);
@@ -190,8 +206,25 @@ async function writeMcpConfig(tool, configPath, scope, renderer, servers) {
190
206
  skipped: true,
191
207
  };
192
208
  }
193
- await mkdir(dirname(configPath), { recursive: true });
194
- await writeFile(configPath, content, "utf-8");
209
+ if (hadComments) {
210
+ // Rewriting would destroy the user's comments. If our entries are
211
+ // already present and identical the file is effectively up to date;
212
+ // otherwise leave it alone and say what to do.
213
+ if (existing && entriesUpToDate(existing, rootKey, serverEntries)) {
214
+ return { tool, path: configPath, scope, updated: false, created: false, skipped: true };
215
+ }
216
+ return {
217
+ tool,
218
+ path: configPath,
219
+ scope,
220
+ updated: false,
221
+ created: false,
222
+ skipped: true,
223
+ warning: `MCP config at ${configPath} contains comments, which xtctx will not rewrite. ` +
224
+ `Add the xtctx server entry manually or remove the comments so xtctx can manage it.`,
225
+ };
226
+ }
227
+ await writeFileAtomic(configPath, content);
195
228
  return {
196
229
  tool,
197
230
  path: configPath,
@@ -211,6 +244,55 @@ function parseConfig(raw, format) {
211
244
  }
212
245
  return JSON.parse(raw);
213
246
  }
247
+ /** Remove // and /* *\/ comments outside strings (JSONC tolerance). */
248
+ function stripJsonComments(raw) {
249
+ let out = "";
250
+ let inString = false;
251
+ let escaped = false;
252
+ for (let index = 0; index < raw.length; index += 1) {
253
+ const char = raw[index];
254
+ if (inString) {
255
+ out += char;
256
+ if (escaped) {
257
+ escaped = false;
258
+ }
259
+ else if (char === "\\") {
260
+ escaped = true;
261
+ }
262
+ else if (char === '"') {
263
+ inString = false;
264
+ }
265
+ continue;
266
+ }
267
+ if (char === '"') {
268
+ inString = true;
269
+ out += char;
270
+ continue;
271
+ }
272
+ if (char === "/" && raw[index + 1] === "/") {
273
+ while (index < raw.length && raw[index] !== "\n")
274
+ index += 1;
275
+ out += "\n";
276
+ continue;
277
+ }
278
+ if (char === "/" && raw[index + 1] === "*") {
279
+ index += 2;
280
+ while (index < raw.length && !(raw[index] === "*" && raw[index + 1] === "/"))
281
+ index += 1;
282
+ index += 1;
283
+ continue;
284
+ }
285
+ out += char;
286
+ }
287
+ return out;
288
+ }
289
+ function entriesUpToDate(existing, rootKey, serverEntries) {
290
+ const root = existing[rootKey];
291
+ if (!root || typeof root !== "object" || Array.isArray(root)) {
292
+ return false;
293
+ }
294
+ return Object.entries(serverEntries).every(([name, entry]) => isDeepStrictEqual(root[name], entry));
295
+ }
214
296
  function serializeConfig(value, format) {
215
297
  if (format === "toml") {
216
298
  // @iarna/toml emits a final newline already; normalise to single trailing.
@@ -250,6 +332,7 @@ function failedMcpSync(tool, configPath, scope, warning) {
250
332
  created: false,
251
333
  skipped: false,
252
334
  warning,
335
+ failed: true,
253
336
  };
254
337
  }
255
338
  // ---------------------------------------------------------------------------
@@ -426,10 +509,21 @@ async function removeMcpConfig(tool, configPath, scope, renderer, serverName) {
426
509
  }
427
510
  delete existingEntries[serverName];
428
511
  const updated = { ...existing, [rootKey]: existingEntries };
512
+ // If removing our entry leaves a project file that is nothing but an
513
+ // empty xtctx container, setup created it and disconnect owns removing it
514
+ // — leaving `{"mcp":{}}` behind is litter, not preservation. User-global
515
+ // app configs are left in place: they belong to the tool, not to us.
516
+ const onlyEmptyContainer = scope === "project" &&
517
+ Object.keys(existingEntries).length === 0 &&
518
+ Object.keys(updated).length === 1 &&
519
+ Object.prototype.hasOwnProperty.call(updated, rootKey);
520
+ if (onlyEmptyContainer) {
521
+ await rm(configPath, { force: true });
522
+ return { tool, path: configPath, scope, removed: true, skipped: false };
523
+ }
429
524
  const content = serializeConfig(updated, format);
430
525
  if (normalizeNewlines(existingContent) !== normalizeNewlines(content)) {
431
- await mkdir(dirname(configPath), { recursive: true });
432
- await writeFile(configPath, content, "utf-8");
526
+ await writeFileAtomic(configPath, content);
433
527
  }
434
528
  return {
435
529
  tool,
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../../src/config/mcp-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../../src/config/mcp-config.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,8 @@ export interface SetupResult {
16
16
  changed: boolean;
17
17
  }>;
18
18
  warnings: string[];
19
+ /** Hard failures (unreadable/unwritable configs); setup exits nonzero. */
20
+ failures: string[];
19
21
  }
20
22
  export interface PlannedSetupWrite {
21
23
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/config/setup.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAC;AAczB,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AASD,wBAAsB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAI/E;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAwEnF;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,GAAE,MAAM,EAAsB,EAC9C,gBAAgB,UAAQ,GACvB;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,CAyCA;AAkBD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC,CAWD;AAED,wBAAgB,qBAAqB,IAAI,mBAAmB,CAO3D;AAmOD,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/config/setup.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAC;AASzB,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AASD,wBAAsB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAI/E;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAuFnF;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,GAAE,MAAM,EAAsB,EAC9C,gBAAgB,UAAQ,GACvB;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,CA0CA;AAkBD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC,CAWD;AAED,wBAAgB,qBAAqB,IAAI,mBAAmB,CAO3D;AAuQD,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE"}
@@ -1,13 +1,11 @@
1
- import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
2
- import { dirname, join, resolve } from "node:path";
1
+ import { mkdir, readFile, rm, stat } from "node:fs/promises";
2
+ import { join, resolve } from "node:path";
3
+ import { writeFileAtomic } from "../utils/atomic-file.js";
4
+ import { MARKERS, countManagedBlocks, matchLineEndings, removeManagedBlocks, } from "./managed-block.js";
3
5
  import { stringify as stringifyYaml } from "yaml";
4
6
  import { isGlobalOnlyMcpTool, syncToolMcpConfigs, } from "./mcp-config.js";
5
7
  import { renderSyncedSkillsBlock, syncProjectSkills, } from "./skills.js";
6
8
  import { SUPPORTED_TOOLS } from "../tools/sources.js";
7
- const MARKERS = {
8
- begin: "<!-- xtctx:begin -->",
9
- end: "<!-- xtctx:end -->",
10
- };
11
9
  export async function runSetup(options = {}) {
12
10
  const result = await setupProject(options);
13
11
  printSetupResult(result);
@@ -20,6 +18,7 @@ export async function setupProject(options = {}) {
20
18
  const configPath = join(xtctxDir, "config.yaml");
21
19
  const writes = [];
22
20
  const warnings = [];
21
+ const failures = [];
23
22
  if (options.repair) {
24
23
  await rm(join(xtctxDir, ".store"), { recursive: true, force: true });
25
24
  await rm(stateDir, { recursive: true, force: true });
@@ -39,6 +38,14 @@ export async function setupProject(options = {}) {
39
38
  kind: "config",
40
39
  changed: await writeIfChanged(configPath, renderProjectConfig(projectRoot, skillSync.config)),
41
40
  });
41
+ // The index holds raw transcript text from every configured tool, so
42
+ // committing it would publish conversation content. config.yaml and
43
+ // skills/ are project config and stay committable.
44
+ writes.push({
45
+ path: join(xtctxDir, ".gitignore"),
46
+ kind: "gitignore",
47
+ changed: await writeIfChanged(join(xtctxDir, ".gitignore"), ["# Local transcript index — never commit (holds raw conversation text).", "state/", ""].join("\n")),
48
+ });
42
49
  const serverDefinition = xtctxServerDefinition();
43
50
  const mcpSummary = await syncToolMcpConfigs(projectRoot, [serverDefinition], supportedMcpTools(options.includeGlobalMcp), options.homeDir ? { homeDir: options.homeDir } : {});
44
51
  for (const file of mcpSummary.results) {
@@ -47,7 +54,10 @@ export async function setupProject(options = {}) {
47
54
  kind: `mcp:${file.tool}`,
48
55
  changed: file.updated || file.created,
49
56
  });
50
- if (file.warning) {
57
+ if (file.failed && file.warning) {
58
+ failures.push(file.warning);
59
+ }
60
+ else if (file.warning) {
51
61
  warnings.push(file.warning);
52
62
  }
53
63
  }
@@ -66,17 +76,18 @@ export async function setupProject(options = {}) {
66
76
  });
67
77
  }
68
78
  writes.push({
69
- path: join(projectRoot, ".claude", "hooks.json"),
79
+ path: join(projectRoot, ".claude", "settings.json"),
70
80
  kind: "hook:claude-code",
71
81
  changed: await installClaudeHook(projectRoot),
72
82
  });
73
- return { projectRoot, configPath, writes, warnings };
83
+ return { projectRoot, configPath, writes, warnings, failures };
74
84
  }
75
85
  export function describeSetupPlan(projectPath, selectedSkillIds = ["xtctx-handoff"], includeGlobalMcp = false) {
76
86
  const projectRoot = resolve(projectPath ?? process.cwd());
77
87
  const skillIds = [...new Set(["xtctx-handoff", ...selectedSkillIds])];
78
88
  const writes = [
79
89
  { path: join(projectRoot, ".xtctx", "config.yaml"), kind: "config" },
90
+ { path: join(projectRoot, ".xtctx", ".gitignore"), kind: "gitignore" },
80
91
  { path: join(projectRoot, ".mcp.json"), kind: "mcp:claude-code" },
81
92
  { path: join(projectRoot, ".cursor", "mcp.json"), kind: "mcp:cursor" },
82
93
  { path: join(projectRoot, ".vscode", "mcp.json"), kind: "mcp:copilot" },
@@ -87,7 +98,7 @@ export function describeSetupPlan(projectPath, selectedSkillIds = ["xtctx-handof
87
98
  { path: join(projectRoot, "GEMINI.md"), kind: "memory:antigravity" },
88
99
  { path: join(projectRoot, ".cursor", "rules", "xtctx.mdc"), kind: "memory:cursor" },
89
100
  { path: join(projectRoot, ".github", "copilot-instructions.md"), kind: "memory:copilot" },
90
- { path: join(projectRoot, ".claude", "hooks.json"), kind: "hook:claude-code" },
101
+ { path: join(projectRoot, ".claude", "settings.json"), kind: "hook:claude-code" },
91
102
  ];
92
103
  for (const skillId of skillIds) {
93
104
  writes.push({ path: join(projectRoot, ".xtctx", "skills", skillId, "SKILL.md"), kind: `skill-source:${skillId}` }, { path: join(projectRoot, ".claude", "skills", skillId, "SKILL.md"), kind: `skill:claude-code:${skillId}` }, { path: join(projectRoot, ".cursor", "rules", "xtctx-skills", `${skillId}.mdc`), kind: `skill:cursor:${skillId}` }, {
@@ -231,38 +242,70 @@ function renderManagedBlock(input) {
231
242
  "",
232
243
  ].join("\n");
233
244
  }
245
+ const CLAUDE_HOOK_MARKER = "xtctx --hook session-start";
246
+ // Claude Code runs hooks with cwd = project root, so the command stays
247
+ // path-independent — no shell-quoted absolute path to get injection wrong.
248
+ const CLAUDE_HOOK_COMMAND = "npx -y xtctx --hook session-start --tool claude-code";
234
249
  async function installClaudeHook(projectRoot) {
235
- const hooksPath = join(projectRoot, ".claude", "hooks.json");
236
- const command = `npx -y xtctx --hook session-start --tool claude-code --project "${projectRoot.replace(/"/g, '\\"')}"`;
237
- const existing = await readJsonIfExists(hooksPath);
250
+ // Claude Code reads hooks from .claude/settings.json (matcher-group shape).
251
+ // Earlier xtctx versions wrote a flat array to .claude/hooks.json, which
252
+ // Claude Code never loads — migrate those entries out.
253
+ const legacyChanged = await removeLegacyClaudeHook(join(projectRoot, ".claude", "hooks.json"));
254
+ const settingsPath = join(projectRoot, ".claude", "settings.json");
255
+ const existing = await readJsonIfExists(settingsPath);
238
256
  const root = isRecord(existing) ? existing : {};
239
257
  const hooks = isRecord(root.hooks) ? root.hooks : {};
240
258
  const sessionStart = Array.isArray(hooks.SessionStart) ? hooks.SessionStart : [];
241
- const alreadyInstalled = sessionStart.some((entry) => isRecord(entry) && typeof entry.command === "string" && entry.command.includes("xtctx --hook session-start"));
259
+ const alreadyInstalled = sessionStart.some((group) => isRecord(group) &&
260
+ Array.isArray(group.hooks) &&
261
+ group.hooks.some((hook) => isRecord(hook) &&
262
+ typeof hook.command === "string" &&
263
+ hook.command.includes(CLAUDE_HOOK_MARKER)));
242
264
  if (alreadyInstalled) {
243
- return false;
265
+ return legacyChanged;
244
266
  }
245
- hooks.SessionStart = [...sessionStart, { type: "command", command }];
267
+ hooks.SessionStart = [
268
+ ...sessionStart,
269
+ { hooks: [{ type: "command", command: CLAUDE_HOOK_COMMAND }] },
270
+ ];
246
271
  root.hooks = hooks;
247
- return writeIfChanged(hooksPath, JSON.stringify(root, null, 2) + "\n");
272
+ const changed = await writeIfChanged(settingsPath, JSON.stringify(root, null, 2) + "\n");
273
+ return changed || legacyChanged;
274
+ }
275
+ async function removeLegacyClaudeHook(hooksPath) {
276
+ const existing = await readJsonIfExists(hooksPath);
277
+ if (!isRecord(existing) || !isRecord(existing.hooks)) {
278
+ return false;
279
+ }
280
+ const hooks = existing.hooks;
281
+ const sessionStart = Array.isArray(hooks.SessionStart) ? hooks.SessionStart : [];
282
+ const kept = sessionStart.filter((entry) => !(isRecord(entry) &&
283
+ typeof entry.command === "string" &&
284
+ entry.command.includes(CLAUDE_HOOK_MARKER)));
285
+ if (kept.length === sessionStart.length) {
286
+ return false;
287
+ }
288
+ const otherHookKeys = Object.keys(hooks).filter((key) => key !== "SessionStart");
289
+ const otherRootKeys = Object.keys(existing).filter((key) => key !== "hooks");
290
+ if (kept.length === 0 && otherHookKeys.length === 0 && otherRootKeys.length === 0) {
291
+ // The file held nothing but the entry we wrote; remove it entirely.
292
+ await rm(hooksPath, { force: true });
293
+ return true;
294
+ }
295
+ hooks.SessionStart = kept;
296
+ return writeIfChanged(hooksPath, JSON.stringify(existing, null, 2) + "\n");
248
297
  }
249
298
  async function upsertManagedBlock(filePath, block, prelude = "") {
250
299
  const existing = await readUtf8IfExists(filePath);
251
300
  const repaired = existing ? removeManagedBlocks(existing).trimEnd() : "";
252
- const prefix = prelude && !repaired.startsWith(prelude.trimEnd()) ? prelude : "";
301
+ // A file that already opens with YAML frontmatter keeps it — prepending
302
+ // the prelude again would produce a second, invalid frontmatter block.
303
+ const hasFrontmatter = repaired.startsWith("---");
304
+ const prefix = prelude && !hasFrontmatter && !repaired.startsWith(prelude.trimEnd()) ? prelude : "";
253
305
  const separator = repaired.length > 0 ? "\n\n" : "";
254
306
  const content = `${prefix}${repaired}${separator}${block}`;
255
307
  return writeIfChanged(filePath, content);
256
308
  }
257
- function removeManagedBlocks(content) {
258
- const normalized = normalizeNewlines(content);
259
- const pattern = new RegExp(`${escapeRegExp(MARKERS.begin)}[\\s\\S]*?${escapeRegExp(MARKERS.end)}\\n?`, "g");
260
- return normalized.replace(pattern, "").replace(/\n{3,}/g, "\n\n");
261
- }
262
- function countManagedBlocks(content) {
263
- const pattern = new RegExp(`${escapeRegExp(MARKERS.begin)}[\\s\\S]*?${escapeRegExp(MARKERS.end)}`, "g");
264
- return content.match(pattern)?.length ?? 0;
265
- }
266
309
  function findStaleReferences(content) {
267
310
  const stale = [
268
311
  { label: "xtctx serve", pattern: /\bxtctx\s+serve\b/ },
@@ -276,13 +319,14 @@ function findStaleReferences(content) {
276
319
  return stale.filter((value) => value.pattern.test(content)).map((value) => value.label);
277
320
  }
278
321
  async function writeIfChanged(filePath, content) {
279
- const normalized = normalizeNewlines(content);
280
322
  const existing = await readUtf8IfExists(filePath);
281
- if (existing !== null && normalizeNewlines(existing) === normalized) {
323
+ // Preserve the existing file's dominant line endings instead of silently
324
+ // converting a CRLF-authored file to LF.
325
+ const finalContent = matchLineEndings(content, existing);
326
+ if (existing !== null && existing === finalContent) {
282
327
  return false;
283
328
  }
284
- await mkdir(dirname(filePath), { recursive: true });
285
- await writeFile(filePath, normalized, "utf-8");
329
+ await writeFileAtomic(filePath, finalContent);
286
330
  return true;
287
331
  }
288
332
  async function readUtf8IfExists(filePath) {
@@ -316,12 +360,9 @@ function printSetupResult(result) {
316
360
  for (const warning of result.warnings) {
317
361
  process.stdout.write(` warning ${warning}\n`);
318
362
  }
319
- }
320
- function normalizeNewlines(input) {
321
- return input.replace(/\r\n/g, "\n");
322
- }
323
- function escapeRegExp(value) {
324
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
363
+ for (const failure of result.failures) {
364
+ process.stdout.write(` error ${failure}\n`);
365
+ }
325
366
  }
326
367
  function isRecord(value) {
327
368
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);