@googlarz/agents-sync 1.4.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 (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +507 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +267 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config/loader.d.ts +9 -0
  8. package/dist/config/loader.d.ts.map +1 -0
  9. package/dist/config/loader.js +55 -0
  10. package/dist/config/loader.js.map +1 -0
  11. package/dist/config/schema.d.ts +69 -0
  12. package/dist/config/schema.d.ts.map +1 -0
  13. package/dist/config/schema.js +33 -0
  14. package/dist/config/schema.js.map +1 -0
  15. package/dist/derivers/aider.d.ts +19 -0
  16. package/dist/derivers/aider.d.ts.map +1 -0
  17. package/dist/derivers/aider.js +117 -0
  18. package/dist/derivers/aider.js.map +1 -0
  19. package/dist/derivers/claude.d.ts +19 -0
  20. package/dist/derivers/claude.d.ts.map +1 -0
  21. package/dist/derivers/claude.js +93 -0
  22. package/dist/derivers/claude.js.map +1 -0
  23. package/dist/derivers/cline.d.ts +17 -0
  24. package/dist/derivers/cline.d.ts.map +1 -0
  25. package/dist/derivers/cline.js +92 -0
  26. package/dist/derivers/cline.js.map +1 -0
  27. package/dist/derivers/copilot.d.ts +16 -0
  28. package/dist/derivers/copilot.d.ts.map +1 -0
  29. package/dist/derivers/copilot.js +162 -0
  30. package/dist/derivers/copilot.js.map +1 -0
  31. package/dist/derivers/cursor.d.ts +16 -0
  32. package/dist/derivers/cursor.d.ts.map +1 -0
  33. package/dist/derivers/cursor.js +121 -0
  34. package/dist/derivers/cursor.js.map +1 -0
  35. package/dist/derivers/gemini.d.ts +19 -0
  36. package/dist/derivers/gemini.d.ts.map +1 -0
  37. package/dist/derivers/gemini.js +33 -0
  38. package/dist/derivers/gemini.js.map +1 -0
  39. package/dist/derivers/index.d.ts +33 -0
  40. package/dist/derivers/index.d.ts.map +1 -0
  41. package/dist/derivers/index.js +134 -0
  42. package/dist/derivers/index.js.map +1 -0
  43. package/dist/derivers/merger.d.ts +36 -0
  44. package/dist/derivers/merger.d.ts.map +1 -0
  45. package/dist/derivers/merger.js +83 -0
  46. package/dist/derivers/merger.js.map +1 -0
  47. package/dist/derivers/roo.d.ts +18 -0
  48. package/dist/derivers/roo.d.ts.map +1 -0
  49. package/dist/derivers/roo.js +92 -0
  50. package/dist/derivers/roo.js.map +1 -0
  51. package/dist/derivers/windsurf.d.ts +16 -0
  52. package/dist/derivers/windsurf.d.ts.map +1 -0
  53. package/dist/derivers/windsurf.js +91 -0
  54. package/dist/derivers/windsurf.js.map +1 -0
  55. package/dist/extractor/extractor.d.ts +4 -0
  56. package/dist/extractor/extractor.d.ts.map +1 -0
  57. package/dist/extractor/extractor.js +125 -0
  58. package/dist/extractor/extractor.js.map +1 -0
  59. package/dist/extractor/schema.d.ts +187 -0
  60. package/dist/extractor/schema.d.ts.map +1 -0
  61. package/dist/extractor/schema.js +44 -0
  62. package/dist/extractor/schema.js.map +1 -0
  63. package/dist/generator/agents-md.d.ts +6 -0
  64. package/dist/generator/agents-md.d.ts.map +1 -0
  65. package/dist/generator/agents-md.js +135 -0
  66. package/dist/generator/agents-md.js.map +1 -0
  67. package/dist/generator/validator.d.ts +7 -0
  68. package/dist/generator/validator.d.ts.map +1 -0
  69. package/dist/generator/validator.js +67 -0
  70. package/dist/generator/validator.js.map +1 -0
  71. package/dist/lib/claude-client.d.ts +11 -0
  72. package/dist/lib/claude-client.d.ts.map +1 -0
  73. package/dist/lib/claude-client.js +74 -0
  74. package/dist/lib/claude-client.js.map +1 -0
  75. package/dist/lib/errors.d.ts +10 -0
  76. package/dist/lib/errors.d.ts.map +1 -0
  77. package/dist/lib/errors.js +27 -0
  78. package/dist/lib/errors.js.map +1 -0
  79. package/dist/lib/file-utils.d.ts +7 -0
  80. package/dist/lib/file-utils.d.ts.map +1 -0
  81. package/dist/lib/file-utils.js +56 -0
  82. package/dist/lib/file-utils.js.map +1 -0
  83. package/dist/lib/token-estimate.d.ts +7 -0
  84. package/dist/lib/token-estimate.d.ts.map +1 -0
  85. package/dist/lib/token-estimate.js +15 -0
  86. package/dist/lib/token-estimate.js.map +1 -0
  87. package/dist/scanner/codegraph.d.ts +13 -0
  88. package/dist/scanner/codegraph.d.ts.map +1 -0
  89. package/dist/scanner/codegraph.js +65 -0
  90. package/dist/scanner/codegraph.js.map +1 -0
  91. package/dist/scanner/docs.d.ts +13 -0
  92. package/dist/scanner/docs.d.ts.map +1 -0
  93. package/dist/scanner/docs.js +63 -0
  94. package/dist/scanner/docs.js.map +1 -0
  95. package/dist/scanner/gotchas.d.ts +8 -0
  96. package/dist/scanner/gotchas.d.ts.map +1 -0
  97. package/dist/scanner/gotchas.js +107 -0
  98. package/dist/scanner/gotchas.js.map +1 -0
  99. package/dist/scanner/index.d.ts +26 -0
  100. package/dist/scanner/index.d.ts.map +1 -0
  101. package/dist/scanner/index.js +95 -0
  102. package/dist/scanner/index.js.map +1 -0
  103. package/dist/scanner/manifest.d.ts +13 -0
  104. package/dist/scanner/manifest.d.ts.map +1 -0
  105. package/dist/scanner/manifest.js +285 -0
  106. package/dist/scanner/manifest.js.map +1 -0
  107. package/dist/scanner/mcp.d.ts +12 -0
  108. package/dist/scanner/mcp.d.ts.map +1 -0
  109. package/dist/scanner/mcp.js +96 -0
  110. package/dist/scanner/mcp.js.map +1 -0
  111. package/dist/scanner/repomix.d.ts +11 -0
  112. package/dist/scanner/repomix.d.ts.map +1 -0
  113. package/dist/scanner/repomix.js +87 -0
  114. package/dist/scanner/repomix.js.map +1 -0
  115. package/dist/scanner/skills.d.ts +18 -0
  116. package/dist/scanner/skills.d.ts.map +1 -0
  117. package/dist/scanner/skills.js +100 -0
  118. package/dist/scanner/skills.js.map +1 -0
  119. package/dist/scanner/source.d.ts +13 -0
  120. package/dist/scanner/source.d.ts.map +1 -0
  121. package/dist/scanner/source.js +157 -0
  122. package/dist/scanner/source.js.map +1 -0
  123. package/dist/scanner/structure.d.ts +10 -0
  124. package/dist/scanner/structure.d.ts.map +1 -0
  125. package/dist/scanner/structure.js +168 -0
  126. package/dist/scanner/structure.js.map +1 -0
  127. package/dist/server.d.ts +2 -0
  128. package/dist/server.d.ts.map +1 -0
  129. package/dist/server.js +245 -0
  130. package/dist/server.js.map +1 -0
  131. package/dist/snapshot/drift.d.ts +28 -0
  132. package/dist/snapshot/drift.d.ts.map +1 -0
  133. package/dist/snapshot/drift.js +205 -0
  134. package/dist/snapshot/drift.js.map +1 -0
  135. package/dist/snapshot/schema.d.ts +94 -0
  136. package/dist/snapshot/schema.d.ts.map +1 -0
  137. package/dist/snapshot/schema.js +24 -0
  138. package/dist/snapshot/schema.js.map +1 -0
  139. package/dist/snapshot/writer.d.ts +17 -0
  140. package/dist/snapshot/writer.d.ts.map +1 -0
  141. package/dist/snapshot/writer.js +44 -0
  142. package/dist/snapshot/writer.js.map +1 -0
  143. package/dist/tools/drift.d.ts +15 -0
  144. package/dist/tools/drift.d.ts.map +1 -0
  145. package/dist/tools/drift.js +51 -0
  146. package/dist/tools/drift.js.map +1 -0
  147. package/dist/tools/export.d.ts +14 -0
  148. package/dist/tools/export.d.ts.map +1 -0
  149. package/dist/tools/export.js +53 -0
  150. package/dist/tools/export.js.map +1 -0
  151. package/dist/tools/init.d.ts +28 -0
  152. package/dist/tools/init.d.ts.map +1 -0
  153. package/dist/tools/init.js +103 -0
  154. package/dist/tools/init.js.map +1 -0
  155. package/dist/tools/lint.d.ts +24 -0
  156. package/dist/tools/lint.d.ts.map +1 -0
  157. package/dist/tools/lint.js +213 -0
  158. package/dist/tools/lint.js.map +1 -0
  159. package/dist/tools/scan-report.d.ts +14 -0
  160. package/dist/tools/scan-report.d.ts.map +1 -0
  161. package/dist/tools/scan-report.js +136 -0
  162. package/dist/tools/scan-report.js.map +1 -0
  163. package/dist/tools/status.d.ts +18 -0
  164. package/dist/tools/status.d.ts.map +1 -0
  165. package/dist/tools/status.js +38 -0
  166. package/dist/tools/status.js.map +1 -0
  167. package/dist/tools/sync.d.ts +22 -0
  168. package/dist/tools/sync.d.ts.map +1 -0
  169. package/dist/tools/sync.js +123 -0
  170. package/dist/tools/sync.js.map +1 -0
  171. package/dist/tools/validate.d.ts +22 -0
  172. package/dist/tools/validate.d.ts.map +1 -0
  173. package/dist/tools/validate.js +97 -0
  174. package/dist/tools/validate.js.map +1 -0
  175. package/docs/agents-md-spec.md +233 -0
  176. package/docs/examples/.clinerules +29 -0
  177. package/docs/examples/.cursorrules +19 -0
  178. package/docs/examples/.windsurfrules +14 -0
  179. package/docs/examples/AGENTS.md +97 -0
  180. package/docs/examples/CLAUDE.md +88 -0
  181. package/docs/examples/GEMINI.md +61 -0
  182. package/docs/examples/copilot-instructions.md +24 -0
  183. package/docs/github-action.yml +89 -0
  184. package/package.json +63 -0
  185. package/scripts/demo.sh +138 -0
  186. package/skill/SKILL.md +158 -0
package/dist/server.js ADDED
@@ -0,0 +1,245 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { z } from "zod";
4
+ import { toMcpError } from "./lib/errors.js";
5
+ import { runInit } from "./tools/init.js";
6
+ import { runSync } from "./tools/sync.js";
7
+ import { runDrift } from "./tools/drift.js";
8
+ import { runExport } from "./tools/export.js";
9
+ import { runValidate } from "./tools/validate.js";
10
+ import { runStatus } from "./tools/status.js";
11
+ import { runLint } from "./tools/lint.js";
12
+ import { runScanReport } from "./tools/scan-report.js";
13
+ const VERSION = "1.4.0";
14
+ const server = new McpServer({
15
+ name: "agents-sync",
16
+ version: VERSION,
17
+ });
18
+ // ─── agents_sync_init ────────────────────────────────────────────────────────
19
+ server.tool("agents_sync_init", "Analyze a codebase and generate AGENTS.md + all tool-specific context files (CLAUDE.md, .cursorrules, copilot-instructions.md, GEMINI.md, .windsurfrules, .clinerules). Run this once per project.", {
20
+ projectPath: z.string().describe("Absolute path to the project root directory"),
21
+ tools: z
22
+ .array(z.enum(["claude", "cursor", "copilot", "gemini", "windsurf", "cline", "roo", "aider"]))
23
+ .optional()
24
+ .describe("Which tool files to generate. Default: all six."),
25
+ dryRun: z
26
+ .boolean()
27
+ .optional()
28
+ .describe("Preview what would be generated without writing any files."),
29
+ }, async ({ projectPath, tools, dryRun }) => {
30
+ try {
31
+ const result = await runInit({ projectPath, tools, dryRun });
32
+ const lines = [];
33
+ if (result.dryRun) {
34
+ lines.push("DRY RUN — no files written\n");
35
+ lines.push(`→ Would write: ${result.agentsMdPath}`);
36
+ for (const f of result.filesWritten) {
37
+ lines.push(`→ Would write: ${f.path}`);
38
+ }
39
+ }
40
+ else {
41
+ lines.push(`✓ AGENTS.md → ${result.agentsMdPath}`);
42
+ for (const f of result.filesWritten) {
43
+ lines.push(`✓ ${f.tool} → ${f.path}`);
44
+ }
45
+ }
46
+ if (result.customSectionsPreserved > 0) {
47
+ lines.push(`\n ${result.customSectionsPreserved} custom section(s) preserved from existing files`);
48
+ }
49
+ if (result.warnings.length > 0) {
50
+ lines.push("\nWarnings:");
51
+ for (const w of result.warnings)
52
+ lines.push(` ⚠ ${w}`);
53
+ }
54
+ if (!result.dryRun) {
55
+ lines.push("\n✓ Snapshot saved to .agents-sync/");
56
+ lines.push(" → Add AGENTS.md to git. Add .agents-sync/ to .gitignore.");
57
+ }
58
+ return { content: [{ type: "text", text: lines.join("\n") }] };
59
+ }
60
+ catch (e) {
61
+ return { content: [{ type: "text", text: `Error: ${toMcpError(e)}` }], isError: true };
62
+ }
63
+ });
64
+ // ─── agents_sync_sync ────────────────────────────────────────────────────────
65
+ server.tool("agents_sync_sync", "Re-analyze the codebase and update all tool context files from current state. Preserves manual custom sections.", {
66
+ projectPath: z.string().describe("Absolute path to the project root directory"),
67
+ tools: z
68
+ .array(z.enum(["claude", "cursor", "copilot", "gemini", "windsurf", "cline", "roo", "aider"]))
69
+ .optional()
70
+ .describe("Which tool files to update. Default: all."),
71
+ fast: z
72
+ .boolean()
73
+ .optional()
74
+ .describe("Skip re-extraction if only minor drift detected. No Claude API call."),
75
+ dryRun: z.boolean().optional().describe("Preview changes without writing."),
76
+ }, async ({ projectPath, tools, fast, dryRun }) => {
77
+ try {
78
+ const result = await runSync({ projectPath, tools, fast, dryRun });
79
+ const lines = [];
80
+ if (result.dryRun)
81
+ lines.push("DRY RUN — no files written\n");
82
+ if (result.skippedExtraction)
83
+ lines.push("⚡ Fast mode: skipped re-extraction\n");
84
+ for (const f of result.filesUpdated) {
85
+ lines.push(result.dryRun ? `→ Would write: ${f.path}` : `✓ ${f.tool} → ${f.path}`);
86
+ }
87
+ if (result.customSectionsPreserved > 0) {
88
+ lines.push(`\n ${result.customSectionsPreserved} custom section(s) preserved`);
89
+ }
90
+ if (result.warnings.length > 0) {
91
+ lines.push("\nWarnings:");
92
+ for (const w of result.warnings)
93
+ lines.push(` ⚠ ${w}`);
94
+ }
95
+ return { content: [{ type: "text", text: lines.join("\n") }] };
96
+ }
97
+ catch (e) {
98
+ return { content: [{ type: "text", text: `Error: ${toMcpError(e)}` }], isError: true };
99
+ }
100
+ });
101
+ // ─── agents_sync_drift ───────────────────────────────────────────────────────
102
+ server.tool("agents_sync_drift", "Check what has changed in the codebase since the last sync. Read-only — makes no changes.", {
103
+ projectPath: z.string().describe("Absolute path to the project root directory"),
104
+ }, async ({ projectPath }) => {
105
+ try {
106
+ const result = await runDrift({ projectPath });
107
+ if (!result.hasSnapshot) {
108
+ return {
109
+ content: [{
110
+ type: "text",
111
+ text: "No snapshot found. Run /agents-sync init first to start tracking drift.",
112
+ }],
113
+ };
114
+ }
115
+ return { content: [{ type: "text", text: result.report ?? "No report available." }] };
116
+ }
117
+ catch (e) {
118
+ return { content: [{ type: "text", text: `Error: ${toMcpError(e)}` }], isError: true };
119
+ }
120
+ });
121
+ // ─── agents_sync_export ──────────────────────────────────────────────────────
122
+ server.tool("agents_sync_export", "Regenerate a single tool file from the existing AGENTS.md without re-running analysis.", {
123
+ projectPath: z.string().describe("Absolute path to the project root directory"),
124
+ tool: z
125
+ .enum(["claude", "cursor", "copilot", "gemini", "windsurf", "cline", "roo", "aider"])
126
+ .describe("Which tool file to regenerate"),
127
+ }, async ({ projectPath, tool }) => {
128
+ try {
129
+ const result = await runExport({ projectPath, tool });
130
+ if (result.error) {
131
+ return { content: [{ type: "text", text: `Error: ${result.error}` }], isError: true };
132
+ }
133
+ return {
134
+ content: [{
135
+ type: "text",
136
+ text: `✓ ${result.tool} → ${result.path}`,
137
+ }],
138
+ };
139
+ }
140
+ catch (e) {
141
+ return { content: [{ type: "text", text: `Error: ${toMcpError(e)}` }], isError: true };
142
+ }
143
+ });
144
+ // ─── agents_sync_validate ────────────────────────────────────────────────────
145
+ server.tool("agents_sync_validate", "Check whether all tool files are in sync with the canonical AGENTS.md.", {
146
+ projectPath: z.string().describe("Absolute path to the project root directory"),
147
+ }, async ({ projectPath }) => {
148
+ try {
149
+ const result = await runValidate({ projectPath });
150
+ const lines = [];
151
+ const canonicalStatus = result.canonical.exists ? "✓" : "✗ MISSING";
152
+ lines.push(`AGENTS.md (canonical) ${canonicalStatus}`);
153
+ lines.push("");
154
+ for (const f of result.toolFiles) {
155
+ const icon = f.status === "in-sync" ? "✓" : f.status === "missing" ? "✗" : "⚠";
156
+ const label = f.status === "in-sync" ? "in sync" : f.status === "missing" ? "MISSING" : "DRIFTED";
157
+ lines.push(`${icon} ${f.tool.padEnd(10)} ${label} ${f.path}`);
158
+ if (f.details)
159
+ lines.push(` ${f.details}`);
160
+ }
161
+ lines.push("");
162
+ if (result.allInSync) {
163
+ lines.push("✓ All files are in sync.");
164
+ }
165
+ else {
166
+ lines.push("Some files are out of sync. Run /agents-sync sync to fix.");
167
+ }
168
+ if (!result.hasSnapshot) {
169
+ lines.push("\nNote: No snapshot found — run /agents-sync init for full tracking.");
170
+ }
171
+ return { content: [{ type: "text", text: lines.join("\n") }] };
172
+ }
173
+ catch (e) {
174
+ return { content: [{ type: "text", text: `Error: ${toMcpError(e)}` }], isError: true };
175
+ }
176
+ });
177
+ // ─── agents_sync_status ──────────────────────────────────────────────────────
178
+ server.tool("agents_sync_status", "Show sync status: last sync time, managed files, drift score.", {
179
+ projectPath: z.string().describe("Absolute path to the project root directory"),
180
+ }, async ({ projectPath }) => {
181
+ try {
182
+ const result = await runStatus({ projectPath });
183
+ const lines = ["agents-sync status\n"];
184
+ if (!result.hasSnapshot) {
185
+ lines.push("Not initialized.");
186
+ lines.push(`\n→ ${result.recommendation}`);
187
+ }
188
+ else {
189
+ lines.push(`Last synced: ${result.lastSyncedAt ?? "unknown"} (${result.daysSinceSync} day${result.daysSinceSync === 1 ? "" : "s"} ago)`);
190
+ lines.push(`Language: ${result.language ?? "unknown"}${result.framework ? ` / ${result.framework}` : ""}`);
191
+ lines.push(`Drift score: ${result.driftScore}`);
192
+ lines.push(`\nManaged files (${result.filesManaged.length}):`);
193
+ for (const f of result.filesManaged) {
194
+ lines.push(` ${f.tool.padEnd(12)} ${f.path}`);
195
+ }
196
+ lines.push(`\n→ ${result.recommendation}`);
197
+ }
198
+ return { content: [{ type: "text", text: lines.join("\n") }] };
199
+ }
200
+ catch (e) {
201
+ return { content: [{ type: "text", text: `Error: ${toMcpError(e)}` }], isError: true };
202
+ }
203
+ });
204
+ // ─── agents_sync_lint ────────────────────────────────────────────────────────
205
+ server.tool("agents_sync_lint", "Verify the codebase against mechanically-checkable 'Never' rules in AGENTS.md. Returns a list of violations.", {
206
+ projectPath: z.string().describe("Absolute path to the project root directory"),
207
+ strict: z
208
+ .boolean()
209
+ .optional()
210
+ .describe("Return isError=true when any violations are found (CI mode)."),
211
+ }, async ({ projectPath, strict }) => {
212
+ try {
213
+ const result = await runLint({ projectPath, strict });
214
+ return {
215
+ content: [{ type: "text", text: result.report }],
216
+ isError: strict && !result.passed ? true : undefined,
217
+ };
218
+ }
219
+ catch (e) {
220
+ return { content: [{ type: "text", text: `Error: ${toMcpError(e)}` }], isError: true };
221
+ }
222
+ });
223
+ // ─── agents_sync_scan ────────────────────────────────────────────────────────
224
+ server.tool("agents_sync_scan", "Scan a codebase and show what agents-sync detected — language, framework, dependencies, MCP servers, local skills, gotchas. Read-only, no API key needed. Run before init to verify scanner accuracy.", {
225
+ projectPath: z.string().describe("Absolute path to the project root directory"),
226
+ }, async ({ projectPath }) => {
227
+ try {
228
+ const result = await runScanReport({ projectPath });
229
+ return { content: [{ type: "text", text: result.report }] };
230
+ }
231
+ catch (e) {
232
+ return { content: [{ type: "text", text: `Error: ${toMcpError(e)}` }], isError: true };
233
+ }
234
+ });
235
+ // ─── Start ───────────────────────────────────────────────────────────────────
236
+ async function main() {
237
+ const transport = new StdioServerTransport();
238
+ await server.connect(transport);
239
+ process.stderr.write(`agents-sync MCP server v${VERSION} ready\n`);
240
+ }
241
+ main().catch((e) => {
242
+ process.stderr.write(`Fatal: ${e}\n`);
243
+ process.exit(1);
244
+ });
245
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { Snapshot } from "./schema.js";
2
+ import type { RawCorpus } from "../scanner/index.js";
3
+ export type DriftSeverity = "HIGH" | "MEDIUM" | "LOW";
4
+ export interface DriftSignal {
5
+ severity: DriftSeverity;
6
+ message: string;
7
+ detail?: string;
8
+ }
9
+ export interface DriftReport {
10
+ hasSnapshot: true;
11
+ signals: DriftSignal[];
12
+ daysSinceSync: number;
13
+ recommendation: string;
14
+ maxSeverity: DriftSeverity | "NONE";
15
+ }
16
+ export interface NoDrift {
17
+ hasSnapshot: false;
18
+ }
19
+ export type DriftResult = DriftReport | NoDrift;
20
+ export declare function detectDrift(snapshot: Snapshot, corpus: RawCorpus): DriftReport;
21
+ /**
22
+ * Detect contradictions between what AGENTS.md *claims* about the stack and what
23
+ * the current manifest/filesystem actually contains. Returns DriftSignals that can
24
+ * be merged into a structural drift report.
25
+ */
26
+ export declare function detectSemanticDrift(agentsMdContent: string, corpus: RawCorpus): DriftSignal[];
27
+ export declare function formatDriftReport(report: DriftReport): string;
28
+ //# sourceMappingURL=drift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../src/snapshot/drift.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,IAAI,CAAC;IAClB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,aAAa,GAAG,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,KAAK,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;AAEhD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAG,WAAW,CAiF9E;AASD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,WAAW,EAAE,CA+F7F;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA6B7D"}
@@ -0,0 +1,205 @@
1
+ import { sha256 } from "./writer.js";
2
+ export function detectDrift(snapshot, corpus) {
3
+ const signals = [];
4
+ // Manifest hash change
5
+ const manifestContent = corpus.manifest.dependencies.join("\n") +
6
+ corpus.manifest.devDependencies.join("\n");
7
+ const currentManifestHash = sha256(manifestContent);
8
+ if (currentManifestHash !== snapshot.manifestHash) {
9
+ const prevCount = snapshot.meta.dependencyCount;
10
+ const currCount = corpus.manifest.dependencies.length;
11
+ const diff = currCount - prevCount;
12
+ if (Math.abs(diff) >= 3) {
13
+ signals.push({
14
+ severity: "HIGH",
15
+ message: `Dependency count changed significantly (${prevCount} → ${currCount})`,
16
+ detail: diff > 0
17
+ ? `${diff} new dependencies added`
18
+ : `${Math.abs(diff)} dependencies removed`,
19
+ });
20
+ }
21
+ else if (currentManifestHash !== snapshot.manifestHash) {
22
+ signals.push({
23
+ severity: "MEDIUM",
24
+ message: "Manifest changed (dependencies or scripts updated)",
25
+ });
26
+ }
27
+ }
28
+ // New top-level dirs
29
+ const prevDirs = new Set(snapshot.meta.topLevelDirs);
30
+ const newDirs = corpus.structure.topLevelDirs.filter((d) => !prevDirs.has(d));
31
+ for (const dir of newDirs) {
32
+ signals.push({
33
+ severity: "HIGH",
34
+ message: `New top-level directory: ${dir}`,
35
+ });
36
+ }
37
+ // Significant file count change
38
+ const fileDiff = corpus.structure.totalFileCount - snapshot.meta.totalFiles;
39
+ if (fileDiff > 50) {
40
+ signals.push({
41
+ severity: "MEDIUM",
42
+ message: `${fileDiff} new files added since last sync`,
43
+ });
44
+ }
45
+ // New gotchas found
46
+ if (corpus.gotchas.length > 3) {
47
+ signals.push({
48
+ severity: "LOW",
49
+ message: `${corpus.gotchas.length} FIXME/HACK/WARNING comments found in codebase`,
50
+ detail: "Some may be new gotchas worth capturing",
51
+ });
52
+ }
53
+ const daysSinceSync = Math.floor((Date.now() - new Date(snapshot.syncedAt).getTime()) / (1000 * 60 * 60 * 24));
54
+ if (daysSinceSync > 14) {
55
+ signals.push({
56
+ severity: "LOW",
57
+ message: `Last synced ${daysSinceSync} days ago`,
58
+ detail: "Regular re-sync keeps AI tools accurate",
59
+ });
60
+ }
61
+ const maxSeverity = computeMaxSeverity(signals);
62
+ const recommendation = maxSeverity === "HIGH"
63
+ ? "Re-sync strongly recommended. Run: /agents-sync sync"
64
+ : maxSeverity === "MEDIUM"
65
+ ? "Re-sync recommended. Run: /agents-sync sync"
66
+ : maxSeverity === "LOW"
67
+ ? "Minor drift detected. Re-sync when convenient."
68
+ : `Up to date. Last synced ${daysSinceSync} day${daysSinceSync === 1 ? "" : "s"} ago.`;
69
+ return { hasSnapshot: true, signals, daysSinceSync, recommendation, maxSeverity };
70
+ }
71
+ function computeMaxSeverity(signals) {
72
+ if (signals.some((s) => s.severity === "HIGH"))
73
+ return "HIGH";
74
+ if (signals.some((s) => s.severity === "MEDIUM"))
75
+ return "MEDIUM";
76
+ if (signals.some((s) => s.severity === "LOW"))
77
+ return "LOW";
78
+ return "NONE";
79
+ }
80
+ /**
81
+ * Detect contradictions between what AGENTS.md *claims* about the stack and what
82
+ * the current manifest/filesystem actually contains. Returns DriftSignals that can
83
+ * be merged into a structural drift report.
84
+ */
85
+ export function detectSemanticDrift(agentsMdContent, corpus) {
86
+ const signals = [];
87
+ const md = agentsMdContent.toLowerCase();
88
+ const allDeps = new Set([
89
+ ...corpus.manifest.dependencies.map((d) => d.toLowerCase()),
90
+ ...corpus.manifest.devDependencies.map((d) => d.toLowerCase()),
91
+ ]);
92
+ const tree = corpus.structure.tree.toLowerCase();
93
+ // ── Database layer conflicts ────────────────────────────────────────────────
94
+ const dbConflicts = [
95
+ ["prisma", ["drizzle-orm", "mongoose", "sequelize", "typeorm", "mikro-orm"]],
96
+ ["drizzle", ["@prisma/client", "mongoose", "sequelize", "typeorm"]],
97
+ ["mongoose", ["@prisma/client", "drizzle-orm", "sequelize", "typeorm"]],
98
+ ["sequelize", ["@prisma/client", "drizzle-orm", "mongoose"]],
99
+ ["typeorm", ["@prisma/client", "drizzle-orm", "mongoose", "sequelize"]],
100
+ ["sqlalchemy", ["django.db", "peewee"]],
101
+ ];
102
+ for (const [stated, rivals] of dbConflicts) {
103
+ if (!md.includes(stated))
104
+ continue;
105
+ const found = rivals.filter((r) => allDeps.has(r));
106
+ if (found.length) {
107
+ signals.push({
108
+ severity: "HIGH",
109
+ message: `Stack contradiction: AGENTS.md states "${stated}" but manifest now has ${found.join(", ")}`,
110
+ detail: "Database layer may have migrated — re-sync to update AI context",
111
+ });
112
+ }
113
+ }
114
+ // ── Test framework conflicts ────────────────────────────────────────────────
115
+ const testConflicts = [
116
+ ["vitest", ["jest", "@jest/core", "jasmine2", "mocha"]],
117
+ ["jest", ["vitest", "jasmine", "mocha"]],
118
+ ["pytest", ["nose2", "unittest2"]],
119
+ ["mocha", ["jest", "vitest", "jasmine"]],
120
+ ];
121
+ for (const [stated, rivals] of testConflicts) {
122
+ if (!md.includes(stated))
123
+ continue;
124
+ const found = rivals.filter((r) => allDeps.has(r));
125
+ if (found.length) {
126
+ signals.push({
127
+ severity: "HIGH",
128
+ message: `Stack contradiction: AGENTS.md states "${stated}" for testing but manifest has ${found.join(", ")}`,
129
+ detail: "Test framework may have changed — re-sync to update AI context",
130
+ });
131
+ }
132
+ }
133
+ // ── Primary framework conflicts ─────────────────────────────────────────────
134
+ const frameworkConflicts = [
135
+ ["next.js", ["remix", "sveltekit", "@nuxtjs", "astro", "@hono"]],
136
+ ["remix", ["next", "sveltekit", "@nuxtjs"]],
137
+ ["sveltekit", ["next", "remix", "@nuxtjs"]],
138
+ ["express", ["fastify", "@hono/node-server", "elysia"]],
139
+ ["fastify", ["express", "@hono/node-server"]],
140
+ ["django", ["fastapi", "flask", "starlette"]],
141
+ ["fastapi", ["django", "flask"]],
142
+ ["flask", ["django", "fastapi"]],
143
+ ["axum", ["actix-web", "warp", "rocket"]],
144
+ ["actix-web", ["axum", "warp", "rocket"]],
145
+ ];
146
+ for (const [stated, rivals] of frameworkConflicts) {
147
+ if (!md.includes(stated))
148
+ continue;
149
+ const found = rivals.filter((r) => allDeps.has(r));
150
+ if (found.length) {
151
+ signals.push({
152
+ severity: "HIGH",
153
+ message: `Stack contradiction: AGENTS.md states "${stated}" but manifest now has ${found.join(", ")}`,
154
+ detail: "Primary framework may have changed — re-sync strongly recommended",
155
+ });
156
+ }
157
+ }
158
+ // ── Deployment target vs config files ──────────────────────────────────────
159
+ const deployConflicts = [
160
+ ["vercel", ["fly.toml", "railway.json", ".railway", "dockerfile", "heroku.yml", "render.yaml"]],
161
+ ["fly.io", ["vercel.json", ".vercel", "railway.json", "heroku.yml", "render.yaml"]],
162
+ ["heroku", ["fly.toml", "vercel.json", "railway.json", "render.yaml"]],
163
+ ["railway", ["fly.toml", "vercel.json", "heroku.yml", "render.yaml"]],
164
+ ["render", ["fly.toml", "vercel.json", "heroku.yml", "railway.json"]],
165
+ ];
166
+ for (const [stated, conflictFiles] of deployConflicts) {
167
+ if (!md.includes(stated))
168
+ continue;
169
+ const found = conflictFiles.filter((f) => tree.includes(f));
170
+ if (found.length) {
171
+ signals.push({
172
+ severity: "MEDIUM",
173
+ message: `Stack contradiction: AGENTS.md states "${stated}" deployment but ${found[0]} found in project`,
174
+ detail: "Deployment target may have changed — re-sync to update AI context",
175
+ });
176
+ }
177
+ }
178
+ return signals;
179
+ }
180
+ export function formatDriftReport(report) {
181
+ const NO_COLOR = process.env.NO_COLOR === "1";
182
+ const color = (code, text) => NO_COLOR ? text : `\x1b[${code}m${text}\x1b[0m`;
183
+ const lines = [];
184
+ lines.push(color("1", `agents-sync drift report (${new Date().toISOString().slice(0, 10)})`));
185
+ lines.push(color("2", `Last sync: ${report.daysSinceSync} day${report.daysSinceSync === 1 ? "" : "s"} ago\n`));
186
+ if (report.signals.length === 0) {
187
+ lines.push(color("32", "✓ No drift detected — everything is in sync."));
188
+ }
189
+ else {
190
+ for (const s of report.signals) {
191
+ const badge = s.severity === "HIGH"
192
+ ? color("31;1", "HIGH ")
193
+ : s.severity === "MEDIUM"
194
+ ? color("33;1", "MED ")
195
+ : color("34;1", "LOW ");
196
+ lines.push(`${badge} ${s.message}`);
197
+ if (s.detail)
198
+ lines.push(` ${color("2", s.detail)}`);
199
+ }
200
+ }
201
+ lines.push("");
202
+ lines.push(color("1", report.recommendation));
203
+ return lines.join("\n");
204
+ }
205
+ //# sourceMappingURL=drift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift.js","sourceRoot":"","sources":["../../src/snapshot/drift.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { z } from "zod";
2
+ export declare const ManagedFileSchema: z.ZodObject<{
3
+ path: z.ZodString;
4
+ sha256: z.ZodString;
5
+ tool: z.ZodEnum<["agents-md", "claude", "cursor", "copilot", "gemini", "windsurf", "cline", "roo", "aider"]>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ path: string;
8
+ sha256: string;
9
+ tool: "claude" | "cursor" | "copilot" | "gemini" | "windsurf" | "cline" | "roo" | "aider" | "agents-md";
10
+ }, {
11
+ path: string;
12
+ sha256: string;
13
+ tool: "claude" | "cursor" | "copilot" | "gemini" | "windsurf" | "cline" | "roo" | "aider" | "agents-md";
14
+ }>;
15
+ export declare const SnapshotSchema: z.ZodObject<{
16
+ version: z.ZodLiteral<"1.0">;
17
+ syncedAt: z.ZodString;
18
+ projectPath: z.ZodString;
19
+ codebaseHash: z.ZodString;
20
+ manifestHash: z.ZodString;
21
+ filesManaged: z.ZodArray<z.ZodObject<{
22
+ path: z.ZodString;
23
+ sha256: z.ZodString;
24
+ tool: z.ZodEnum<["agents-md", "claude", "cursor", "copilot", "gemini", "windsurf", "cline", "roo", "aider"]>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ path: string;
27
+ sha256: string;
28
+ tool: "claude" | "cursor" | "copilot" | "gemini" | "windsurf" | "cline" | "roo" | "aider" | "agents-md";
29
+ }, {
30
+ path: string;
31
+ sha256: string;
32
+ tool: "claude" | "cursor" | "copilot" | "gemini" | "windsurf" | "cline" | "roo" | "aider" | "agents-md";
33
+ }>, "many">;
34
+ meta: z.ZodObject<{
35
+ dependencyCount: z.ZodNumber;
36
+ topLevelDirs: z.ZodArray<z.ZodString, "many">;
37
+ language: z.ZodString;
38
+ framework: z.ZodNullable<z.ZodString>;
39
+ totalFiles: z.ZodNumber;
40
+ }, "strip", z.ZodTypeAny, {
41
+ language: string;
42
+ framework: string | null;
43
+ topLevelDirs: string[];
44
+ dependencyCount: number;
45
+ totalFiles: number;
46
+ }, {
47
+ language: string;
48
+ framework: string | null;
49
+ topLevelDirs: string[];
50
+ dependencyCount: number;
51
+ totalFiles: number;
52
+ }>;
53
+ }, "strip", z.ZodTypeAny, {
54
+ version: "1.0";
55
+ projectPath: string;
56
+ syncedAt: string;
57
+ codebaseHash: string;
58
+ manifestHash: string;
59
+ filesManaged: {
60
+ path: string;
61
+ sha256: string;
62
+ tool: "claude" | "cursor" | "copilot" | "gemini" | "windsurf" | "cline" | "roo" | "aider" | "agents-md";
63
+ }[];
64
+ meta: {
65
+ language: string;
66
+ framework: string | null;
67
+ topLevelDirs: string[];
68
+ dependencyCount: number;
69
+ totalFiles: number;
70
+ };
71
+ }, {
72
+ version: "1.0";
73
+ projectPath: string;
74
+ syncedAt: string;
75
+ codebaseHash: string;
76
+ manifestHash: string;
77
+ filesManaged: {
78
+ path: string;
79
+ sha256: string;
80
+ tool: "claude" | "cursor" | "copilot" | "gemini" | "windsurf" | "cline" | "roo" | "aider" | "agents-md";
81
+ }[];
82
+ meta: {
83
+ language: string;
84
+ framework: string | null;
85
+ topLevelDirs: string[];
86
+ dependencyCount: number;
87
+ totalFiles: number;
88
+ };
89
+ }>;
90
+ export type Snapshot = z.infer<typeof SnapshotSchema>;
91
+ export type ManagedFile = z.infer<typeof ManagedFileSchema>;
92
+ export declare const SNAPSHOT_DIR = ".agents-sync";
93
+ export declare const SNAPSHOT_FILE = "snapshot.json";
94
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/snapshot/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAI5B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAczB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAC3C,eAAO,MAAM,aAAa,kBAAkB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ export const ManagedFileSchema = z.object({
3
+ path: z.string(),
4
+ sha256: z.string(),
5
+ tool: z.enum(["agents-md", "claude", "cursor", "copilot", "gemini", "windsurf", "cline", "roo", "aider"]),
6
+ });
7
+ export const SnapshotSchema = z.object({
8
+ version: z.literal("1.0"),
9
+ syncedAt: z.string().describe("ISO 8601 timestamp"),
10
+ projectPath: z.string(),
11
+ codebaseHash: z.string().describe("SHA-256 of manifest content + structure"),
12
+ manifestHash: z.string().describe("SHA-256 of primary manifest file"),
13
+ filesManaged: z.array(ManagedFileSchema),
14
+ meta: z.object({
15
+ dependencyCount: z.number(),
16
+ topLevelDirs: z.array(z.string()),
17
+ language: z.string(),
18
+ framework: z.string().nullable(),
19
+ totalFiles: z.number(),
20
+ }),
21
+ });
22
+ export const SNAPSHOT_DIR = ".agents-sync";
23
+ export const SNAPSHOT_FILE = "snapshot.json";
24
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/snapshot/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;CAC1G,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACnD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC5E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACrE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;QAC3B,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;KACvB,CAAC;CACH,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAC3C,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC"}