@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.
- package/LICENSE +21 -0
- package/README.md +507 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +267 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/loader.d.ts +9 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +55 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +69 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +33 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/derivers/aider.d.ts +19 -0
- package/dist/derivers/aider.d.ts.map +1 -0
- package/dist/derivers/aider.js +117 -0
- package/dist/derivers/aider.js.map +1 -0
- package/dist/derivers/claude.d.ts +19 -0
- package/dist/derivers/claude.d.ts.map +1 -0
- package/dist/derivers/claude.js +93 -0
- package/dist/derivers/claude.js.map +1 -0
- package/dist/derivers/cline.d.ts +17 -0
- package/dist/derivers/cline.d.ts.map +1 -0
- package/dist/derivers/cline.js +92 -0
- package/dist/derivers/cline.js.map +1 -0
- package/dist/derivers/copilot.d.ts +16 -0
- package/dist/derivers/copilot.d.ts.map +1 -0
- package/dist/derivers/copilot.js +162 -0
- package/dist/derivers/copilot.js.map +1 -0
- package/dist/derivers/cursor.d.ts +16 -0
- package/dist/derivers/cursor.d.ts.map +1 -0
- package/dist/derivers/cursor.js +121 -0
- package/dist/derivers/cursor.js.map +1 -0
- package/dist/derivers/gemini.d.ts +19 -0
- package/dist/derivers/gemini.d.ts.map +1 -0
- package/dist/derivers/gemini.js +33 -0
- package/dist/derivers/gemini.js.map +1 -0
- package/dist/derivers/index.d.ts +33 -0
- package/dist/derivers/index.d.ts.map +1 -0
- package/dist/derivers/index.js +134 -0
- package/dist/derivers/index.js.map +1 -0
- package/dist/derivers/merger.d.ts +36 -0
- package/dist/derivers/merger.d.ts.map +1 -0
- package/dist/derivers/merger.js +83 -0
- package/dist/derivers/merger.js.map +1 -0
- package/dist/derivers/roo.d.ts +18 -0
- package/dist/derivers/roo.d.ts.map +1 -0
- package/dist/derivers/roo.js +92 -0
- package/dist/derivers/roo.js.map +1 -0
- package/dist/derivers/windsurf.d.ts +16 -0
- package/dist/derivers/windsurf.d.ts.map +1 -0
- package/dist/derivers/windsurf.js +91 -0
- package/dist/derivers/windsurf.js.map +1 -0
- package/dist/extractor/extractor.d.ts +4 -0
- package/dist/extractor/extractor.d.ts.map +1 -0
- package/dist/extractor/extractor.js +125 -0
- package/dist/extractor/extractor.js.map +1 -0
- package/dist/extractor/schema.d.ts +187 -0
- package/dist/extractor/schema.d.ts.map +1 -0
- package/dist/extractor/schema.js +44 -0
- package/dist/extractor/schema.js.map +1 -0
- package/dist/generator/agents-md.d.ts +6 -0
- package/dist/generator/agents-md.d.ts.map +1 -0
- package/dist/generator/agents-md.js +135 -0
- package/dist/generator/agents-md.js.map +1 -0
- package/dist/generator/validator.d.ts +7 -0
- package/dist/generator/validator.d.ts.map +1 -0
- package/dist/generator/validator.js +67 -0
- package/dist/generator/validator.js.map +1 -0
- package/dist/lib/claude-client.d.ts +11 -0
- package/dist/lib/claude-client.d.ts.map +1 -0
- package/dist/lib/claude-client.js +74 -0
- package/dist/lib/claude-client.js.map +1 -0
- package/dist/lib/errors.d.ts +10 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +27 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/file-utils.d.ts +7 -0
- package/dist/lib/file-utils.d.ts.map +1 -0
- package/dist/lib/file-utils.js +56 -0
- package/dist/lib/file-utils.js.map +1 -0
- package/dist/lib/token-estimate.d.ts +7 -0
- package/dist/lib/token-estimate.d.ts.map +1 -0
- package/dist/lib/token-estimate.js +15 -0
- package/dist/lib/token-estimate.js.map +1 -0
- package/dist/scanner/codegraph.d.ts +13 -0
- package/dist/scanner/codegraph.d.ts.map +1 -0
- package/dist/scanner/codegraph.js +65 -0
- package/dist/scanner/codegraph.js.map +1 -0
- package/dist/scanner/docs.d.ts +13 -0
- package/dist/scanner/docs.d.ts.map +1 -0
- package/dist/scanner/docs.js +63 -0
- package/dist/scanner/docs.js.map +1 -0
- package/dist/scanner/gotchas.d.ts +8 -0
- package/dist/scanner/gotchas.d.ts.map +1 -0
- package/dist/scanner/gotchas.js +107 -0
- package/dist/scanner/gotchas.js.map +1 -0
- package/dist/scanner/index.d.ts +26 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +95 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/manifest.d.ts +13 -0
- package/dist/scanner/manifest.d.ts.map +1 -0
- package/dist/scanner/manifest.js +285 -0
- package/dist/scanner/manifest.js.map +1 -0
- package/dist/scanner/mcp.d.ts +12 -0
- package/dist/scanner/mcp.d.ts.map +1 -0
- package/dist/scanner/mcp.js +96 -0
- package/dist/scanner/mcp.js.map +1 -0
- package/dist/scanner/repomix.d.ts +11 -0
- package/dist/scanner/repomix.d.ts.map +1 -0
- package/dist/scanner/repomix.js +87 -0
- package/dist/scanner/repomix.js.map +1 -0
- package/dist/scanner/skills.d.ts +18 -0
- package/dist/scanner/skills.d.ts.map +1 -0
- package/dist/scanner/skills.js +100 -0
- package/dist/scanner/skills.js.map +1 -0
- package/dist/scanner/source.d.ts +13 -0
- package/dist/scanner/source.d.ts.map +1 -0
- package/dist/scanner/source.js +157 -0
- package/dist/scanner/source.js.map +1 -0
- package/dist/scanner/structure.d.ts +10 -0
- package/dist/scanner/structure.d.ts.map +1 -0
- package/dist/scanner/structure.js +168 -0
- package/dist/scanner/structure.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +245 -0
- package/dist/server.js.map +1 -0
- package/dist/snapshot/drift.d.ts +28 -0
- package/dist/snapshot/drift.d.ts.map +1 -0
- package/dist/snapshot/drift.js +205 -0
- package/dist/snapshot/drift.js.map +1 -0
- package/dist/snapshot/schema.d.ts +94 -0
- package/dist/snapshot/schema.d.ts.map +1 -0
- package/dist/snapshot/schema.js +24 -0
- package/dist/snapshot/schema.js.map +1 -0
- package/dist/snapshot/writer.d.ts +17 -0
- package/dist/snapshot/writer.d.ts.map +1 -0
- package/dist/snapshot/writer.js +44 -0
- package/dist/snapshot/writer.js.map +1 -0
- package/dist/tools/drift.d.ts +15 -0
- package/dist/tools/drift.d.ts.map +1 -0
- package/dist/tools/drift.js +51 -0
- package/dist/tools/drift.js.map +1 -0
- package/dist/tools/export.d.ts +14 -0
- package/dist/tools/export.d.ts.map +1 -0
- package/dist/tools/export.js +53 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/init.d.ts +28 -0
- package/dist/tools/init.d.ts.map +1 -0
- package/dist/tools/init.js +103 -0
- package/dist/tools/init.js.map +1 -0
- package/dist/tools/lint.d.ts +24 -0
- package/dist/tools/lint.d.ts.map +1 -0
- package/dist/tools/lint.js +213 -0
- package/dist/tools/lint.js.map +1 -0
- package/dist/tools/scan-report.d.ts +14 -0
- package/dist/tools/scan-report.d.ts.map +1 -0
- package/dist/tools/scan-report.js +136 -0
- package/dist/tools/scan-report.js.map +1 -0
- package/dist/tools/status.d.ts +18 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/status.js +38 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/tools/sync.d.ts +22 -0
- package/dist/tools/sync.d.ts.map +1 -0
- package/dist/tools/sync.js +123 -0
- package/dist/tools/sync.js.map +1 -0
- package/dist/tools/validate.d.ts +22 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +97 -0
- package/dist/tools/validate.js.map +1 -0
- package/docs/agents-md-spec.md +233 -0
- package/docs/examples/.clinerules +29 -0
- package/docs/examples/.cursorrules +19 -0
- package/docs/examples/.windsurfrules +14 -0
- package/docs/examples/AGENTS.md +97 -0
- package/docs/examples/CLAUDE.md +88 -0
- package/docs/examples/GEMINI.md +61 -0
- package/docs/examples/copilot-instructions.md +24 -0
- package/docs/github-action.yml +89 -0
- package/package.json +63 -0
- package/scripts/demo.sh +138 -0
- 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"}
|