emdash-emit 0.1.9 → 0.1.10

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 (129) hide show
  1. package/README.md +78 -9
  2. package/dist/bin/emit.d.ts.map +1 -1
  3. package/dist/bin/emit.js +6 -0
  4. package/dist/bin/emit.js.map +1 -1
  5. package/dist/cli/commands/conflicts.d.ts +4 -0
  6. package/dist/cli/commands/conflicts.d.ts.map +1 -0
  7. package/dist/cli/commands/conflicts.js +153 -0
  8. package/dist/cli/commands/conflicts.js.map +1 -0
  9. package/dist/cli/commands/delete.d.ts +4 -0
  10. package/dist/cli/commands/delete.d.ts.map +1 -0
  11. package/dist/cli/commands/delete.js +89 -0
  12. package/dist/cli/commands/delete.js.map +1 -0
  13. package/dist/cli/commands/doctor.d.ts +4 -0
  14. package/dist/cli/commands/doctor.d.ts.map +1 -0
  15. package/dist/cli/commands/doctor.js +82 -0
  16. package/dist/cli/commands/doctor.js.map +1 -0
  17. package/dist/cli/commands/new.d.ts.map +1 -1
  18. package/dist/cli/commands/new.js +52 -22
  19. package/dist/cli/commands/new.js.map +1 -1
  20. package/dist/cli/commands/pull.d.ts.map +1 -1
  21. package/dist/cli/commands/pull.js +23 -0
  22. package/dist/cli/commands/pull.js.map +1 -1
  23. package/dist/cli/commands/push.d.ts.map +1 -1
  24. package/dist/cli/commands/push.js +22 -0
  25. package/dist/cli/commands/push.js.map +1 -1
  26. package/dist/cli/commands/status.d.ts.map +1 -1
  27. package/dist/cli/commands/status.js +20 -4
  28. package/dist/cli/commands/status.js.map +1 -1
  29. package/dist/cli/context.d.ts +3 -1
  30. package/dist/cli/context.d.ts.map +1 -1
  31. package/dist/cli/context.js +17 -6
  32. package/dist/cli/context.js.map +1 -1
  33. package/dist/db/cache.d.ts +3 -0
  34. package/dist/db/cache.d.ts.map +1 -1
  35. package/dist/db/cache.js +39 -0
  36. package/dist/db/cache.js.map +1 -1
  37. package/dist/mcp/context.d.ts +7 -0
  38. package/dist/mcp/context.d.ts.map +1 -1
  39. package/dist/mcp/server.d.ts.map +1 -1
  40. package/dist/mcp/server.js +39 -2
  41. package/dist/mcp/server.js.map +1 -1
  42. package/dist/mcp/tool-errors.d.ts +7 -2
  43. package/dist/mcp/tool-errors.d.ts.map +1 -1
  44. package/dist/mcp/tool-errors.js +80 -5
  45. package/dist/mcp/tool-errors.js.map +1 -1
  46. package/dist/mcp/tools/profile.d.ts.map +1 -1
  47. package/dist/mcp/tools/profile.js +4 -0
  48. package/dist/mcp/tools/profile.js.map +1 -1
  49. package/dist/mcp/tools/sync-conflicts.d.ts +4 -0
  50. package/dist/mcp/tools/sync-conflicts.d.ts.map +1 -0
  51. package/dist/mcp/tools/sync-conflicts.js +100 -0
  52. package/dist/mcp/tools/sync-conflicts.js.map +1 -0
  53. package/dist/mcp/tools/sync-delete.d.ts +4 -0
  54. package/dist/mcp/tools/sync-delete.d.ts.map +1 -0
  55. package/dist/mcp/tools/sync-delete.js +77 -0
  56. package/dist/mcp/tools/sync-delete.js.map +1 -0
  57. package/dist/mcp/tools/sync-diff.d.ts.map +1 -1
  58. package/dist/mcp/tools/sync-diff.js +3 -2
  59. package/dist/mcp/tools/sync-diff.js.map +1 -1
  60. package/dist/mcp/tools/sync-doctor.d.ts +4 -0
  61. package/dist/mcp/tools/sync-doctor.d.ts.map +1 -0
  62. package/dist/mcp/tools/sync-doctor.js +57 -0
  63. package/dist/mcp/tools/sync-doctor.js.map +1 -0
  64. package/dist/mcp/tools/sync-new.d.ts.map +1 -1
  65. package/dist/mcp/tools/sync-new.js +16 -3
  66. package/dist/mcp/tools/sync-new.js.map +1 -1
  67. package/dist/mcp/tools/sync-pull.d.ts.map +1 -1
  68. package/dist/mcp/tools/sync-pull.js +41 -11
  69. package/dist/mcp/tools/sync-pull.js.map +1 -1
  70. package/dist/mcp/tools/sync-push.d.ts.map +1 -1
  71. package/dist/mcp/tools/sync-push.js +16 -2
  72. package/dist/mcp/tools/sync-push.js.map +1 -1
  73. package/dist/mcp/tools/sync-status.d.ts.map +1 -1
  74. package/dist/mcp/tools/sync-status.js +63 -22
  75. package/dist/mcp/tools/sync-status.js.map +1 -1
  76. package/dist/sync/conflicts.d.ts +89 -0
  77. package/dist/sync/conflicts.d.ts.map +1 -0
  78. package/dist/sync/conflicts.js +374 -0
  79. package/dist/sync/conflicts.js.map +1 -0
  80. package/dist/sync/delete.d.ts +58 -0
  81. package/dist/sync/delete.d.ts.map +1 -0
  82. package/dist/sync/delete.js +221 -0
  83. package/dist/sync/delete.js.map +1 -0
  84. package/dist/sync/diff.d.ts.map +1 -1
  85. package/dist/sync/diff.js +6 -3
  86. package/dist/sync/diff.js.map +1 -1
  87. package/dist/sync/doctor.d.ts +31 -0
  88. package/dist/sync/doctor.d.ts.map +1 -0
  89. package/dist/sync/doctor.js +224 -0
  90. package/dist/sync/doctor.js.map +1 -0
  91. package/dist/sync/media.d.ts +22 -0
  92. package/dist/sync/media.d.ts.map +1 -1
  93. package/dist/sync/media.js +342 -94
  94. package/dist/sync/media.js.map +1 -1
  95. package/dist/sync/new.d.ts +31 -0
  96. package/dist/sync/new.d.ts.map +1 -1
  97. package/dist/sync/new.js +139 -2
  98. package/dist/sync/new.js.map +1 -1
  99. package/dist/sync/orchestrator.d.ts.map +1 -1
  100. package/dist/sync/orchestrator.js +2 -0
  101. package/dist/sync/orchestrator.js.map +1 -1
  102. package/dist/sync/preflight.d.ts.map +1 -1
  103. package/dist/sync/preflight.js +29 -3
  104. package/dist/sync/preflight.js.map +1 -1
  105. package/dist/sync/pull.d.ts +4 -0
  106. package/dist/sync/pull.d.ts.map +1 -1
  107. package/dist/sync/pull.js +143 -52
  108. package/dist/sync/pull.js.map +1 -1
  109. package/dist/sync/push.d.ts +10 -0
  110. package/dist/sync/push.d.ts.map +1 -1
  111. package/dist/sync/push.js +49 -31
  112. package/dist/sync/push.js.map +1 -1
  113. package/dist/sync/status.d.ts +10 -0
  114. package/dist/sync/status.d.ts.map +1 -1
  115. package/dist/sync/status.js +26 -0
  116. package/dist/sync/status.js.map +1 -1
  117. package/dist/sync/taxonomies.d.ts +14 -5
  118. package/dist/sync/taxonomies.d.ts.map +1 -1
  119. package/dist/sync/taxonomies.js +104 -6
  120. package/dist/sync/taxonomies.js.map +1 -1
  121. package/dist/utils/config.d.ts +12 -0
  122. package/dist/utils/config.d.ts.map +1 -1
  123. package/dist/utils/config.js +27 -0
  124. package/dist/utils/config.js.map +1 -1
  125. package/dist/utils/frontmatter.d.ts +40 -3
  126. package/dist/utils/frontmatter.d.ts.map +1 -1
  127. package/dist/utils/frontmatter.js +188 -5
  128. package/dist/utils/frontmatter.js.map +1 -1
  129. package/package.json +1 -1
@@ -2,6 +2,12 @@ import type { CacheDatabase } from '../db/cache.js';
2
2
  import type { ResolvedAuth } from '../client/auth.js';
3
3
  import type { WorkspacePaths } from '../utils/workspace.js';
4
4
  import type { EmitConfig } from '../utils/config.js';
5
+ export interface McpMeta {
6
+ profile: string;
7
+ workspace: string;
8
+ origin: string;
9
+ resolvedBy: string;
10
+ }
5
11
  export interface ServerContext {
6
12
  root: string;
7
13
  paths: WorkspacePaths;
@@ -10,6 +16,7 @@ export interface ServerContext {
10
16
  auth: ResolvedAuth;
11
17
  origin: string;
12
18
  originWarning?: string;
19
+ meta: McpMeta;
13
20
  }
14
21
  export type ContextResolver = (targetProfile?: string) => ServerContext;
15
22
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/mcp/context.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,aAAa,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/mcp/context.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,aAAa,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAkB/C,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,qBAAqB,QA8B1B,CAAC;AAET,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,CA8G3E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlF"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAqB/C,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,qBAAqB,QAmC1B,CAAC;AAET,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAwI3E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlF"}
@@ -33,6 +33,9 @@ import { registerSyncPullTools } from './tools/sync-pull.js';
33
33
  import { registerSyncPushTool } from './tools/sync-push.js';
34
34
  import { registerSyncStatusTool } from './tools/sync-status.js';
35
35
  import { registerSyncDiffTool } from './tools/sync-diff.js';
36
+ import { registerSyncDeleteTool } from './tools/sync-delete.js';
37
+ import { registerSyncConflictsTool } from './tools/sync-conflicts.js';
38
+ import { registerSyncDoctorTool } from './tools/sync-doctor.js';
36
39
  import { getPackageVersion } from '../utils/version.js';
37
40
  export const EMIT_MCP_INSTRUCTIONS = `
38
41
  # Emit - AI-First Local Workspace & Sync Engine for EmDash
@@ -59,11 +62,16 @@ Emit manages articles, taxonomies, and media as plain files on your local filesy
59
62
  - For new local images, place the file in media/drafts/<filename> and reference it on a standalone line: ![alt](../../media/drafts/<filename>). sync_push will automatically upload it, rewrite the Markdown URL, and promote the file into media/.
60
63
 
61
64
  ## AI Workflow (The Golden Path)
62
- 1. [CHECK]: Use sync_status to list locally tracked articles and their file paths (returned newest-first, descending by date). If articles are already present locally, do NOT query remote CMS APIs (e.g. emdash MCP tools like content_list).
65
+ 1. [CHECK]: Use sync_status to inspect locally tracked articles. Returns a summary-first payload (actionRequired capped at 30 items, recentArticles 5 items). To locate specific articles across the full workspace, use search (title/slug/id/filePath) or slugFilter. If articles are already present locally, do NOT query remote CMS APIs (e.g. emdash MCP tools like content_list).
63
66
  2. [PULL]: Use sync_pull to sync articles AND taxonomies (categories/tags) from EmDash remote. Batch mode automatically pulls both and returns available taxonomy hints (also returned with postsOnly:true). Use postsOnly:true to skip taxonomies. Use includeMedia:true to also pull media assets.
64
67
  3. [READ & EDIT]: Read and edit the local Markdown files directly using your standard filesystem tools. Full article content and metadata (title, slug, status, bylines, taxonomies) are stored in the Markdown files.
65
68
  4. [PUSH]: Use sync_push with filePath to sync your changes to the remote EmDash CMS. If transitioning status from draft to published, pass allowPublish: true.
66
- 5. [NEW]: Use sync_new to scaffold a new draft file in posts/draft/ (it returns available categories/tags hints), edit it locally, and push when ready.
69
+ 5. [NEW]: Use sync_new to scaffold a new draft file in posts/draft/ (it returns available categories/tags hints). Rejects duplicates if slug already exists locally or in cache.
70
+ 6. [DELETE]: Use sync_delete to permanently delete an article from both local workspace and remote CMS. Strictly refuses deletion if unpushed local modifications exist. Requires allowDeletePublished: true for published articles. Automatically saves a rescue copy in posts/conflicts/<file>.deleted.md and preserves referenced media files in media/.
71
+ 7. [CONFLICTS]: Use sync_conflicts to inspect quarantined sync conflict copies (.conflict.md) and deletion rescue backups (.deleted.md) in posts/conflicts/ (action: 'list' | 'diff' | 'resolve', strategy: 'accept-local' | 'accept-canonical'). Overwriting canonical files with unpushed edits requires force: true (G13).
72
+ 8. [DOCTOR]: Use sync_doctor to diagnose workspace health (version compatibility, origin consistency, frontmatter integrity, conflicts/quarantine, and media references).
73
+ 9. [MEDIA]: Use sync_pull_media to download media assets and companion YAML metadata into media/. Pass article: <ULID> to pull only media referenced by that specific article without downloading the whole media library.
74
+ All tool responses include "_meta" context describing profile, workspace directory, origin, and resolution mechanism.
67
75
  `.trim();
68
76
  export function createMcpServer(options) {
69
77
  let activeProfileOverride;
@@ -123,6 +131,31 @@ export function createMcpServer(options) {
123
131
  autoProfileName: auth.profileName || cwdProf?.name,
124
132
  authOrigin: auth.origin,
125
133
  });
134
+ let resolvedBy = 'default';
135
+ if (auth.source === 'env') {
136
+ resolvedBy = 'env';
137
+ }
138
+ else if (profileToUse) {
139
+ resolvedBy = 'explicit-profile-argument';
140
+ }
141
+ else if (cwdProf) {
142
+ resolvedBy = 'workspace-directory-match';
143
+ }
144
+ else if (auth.workspace) {
145
+ resolvedBy = 'workspace-origin-match';
146
+ }
147
+ else if (auth.source === 'profile') {
148
+ resolvedBy = 'single-profile-fallback';
149
+ }
150
+ else {
151
+ resolvedBy = auth.source;
152
+ }
153
+ const meta = {
154
+ profile: auth.profileName || activeProfileOverride || 'default',
155
+ workspace: workspaceRoot,
156
+ origin: resolution.origin,
157
+ resolvedBy,
158
+ };
126
159
  return {
127
160
  root: workspaceRoot,
128
161
  paths,
@@ -131,6 +164,7 @@ export function createMcpServer(options) {
131
164
  auth,
132
165
  origin: resolution.origin,
133
166
  originWarning: resolution.warning || undefined,
167
+ meta,
134
168
  };
135
169
  };
136
170
  const server = new McpServer({
@@ -152,6 +186,9 @@ export function createMcpServer(options) {
152
186
  registerSyncPushTool(server, resolveContext);
153
187
  registerSyncStatusTool(server, resolveContext);
154
188
  registerSyncDiffTool(server, resolveContext);
189
+ registerSyncDeleteTool(server, resolveContext);
190
+ registerSyncConflictsTool(server, resolveContext);
191
+ registerSyncDoctorTool(server, resolveContext);
155
192
  return server;
156
193
  }
157
194
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,16 @@
1
1
  import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { McpMeta } from './context.js';
2
3
  /**
3
- * Formats a known Emit error into a structured MCP tool result.
4
+ * Formats a successful MCP response as formatted JSON with optional _meta context.
5
+ */
6
+ export declare function formatToolSuccess(data: Record<string, unknown>, meta?: McpMeta): CallToolResult;
7
+ /**
8
+ * Formats a known Emit error into a structured MCP tool result with optional _meta context.
4
9
  *
5
10
  * Without this, the MCP SDK converts a thrown error into `createToolError(String(error))`,
6
11
  * which keeps only `error.message` and silently drops the structured diagnostics
7
12
  * (`[CODE]`, HTTP status, endpoint, suggestion) that CLI users receive through
8
13
  * `ApiError.toActionableString()`. AI agents need the same actionable detail.
9
14
  */
10
- export declare function formatToolError(error: unknown): CallToolResult;
15
+ export declare function formatToolError(error: unknown, meta?: McpMeta): CallToolResult;
11
16
  //# sourceMappingURL=tool-errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-errors.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-errors.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAkBzE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAyB9D"}
1
+ {"version":3,"file":"tool-errors.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-errors.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAyB5C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,cAAc,CAU/F;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,cAAc,CAwH9E"}
@@ -23,6 +23,10 @@ import { ApiError } from '../client/error.js';
23
23
  import { SyncPruneConflictError } from '../sync/orchestrator.js';
24
24
  import { PushValidationError } from '../sync/push.js';
25
25
  import { AmbiguousProfileError } from '../utils/profile.js';
26
+ import { FrontmatterParseError } from '../utils/frontmatter.js';
27
+ import { DuplicateSlugError } from '../sync/new.js';
28
+ import { UnpushedModificationsError, PublishedArticleDeletionForbiddenError, } from '../sync/delete.js';
29
+ import { CanonicalHasUnpushedEditsError, QuarantinedPathRequiredError } from '../sync/conflicts.js';
26
30
  function toolError(text) {
27
31
  return {
28
32
  isError: true,
@@ -35,28 +39,99 @@ function toolError(text) {
35
39
  };
36
40
  }
37
41
  /**
38
- * Formats a known Emit error into a structured MCP tool result.
42
+ * Formats a successful MCP response as formatted JSON with optional _meta context.
43
+ */
44
+ export function formatToolSuccess(data, meta) {
45
+ const payload = meta ? { ...data, _meta: meta } : data;
46
+ return {
47
+ content: [
48
+ {
49
+ type: 'text',
50
+ text: JSON.stringify(payload, null, 2),
51
+ },
52
+ ],
53
+ };
54
+ }
55
+ /**
56
+ * Formats a known Emit error into a structured MCP tool result with optional _meta context.
39
57
  *
40
58
  * Without this, the MCP SDK converts a thrown error into `createToolError(String(error))`,
41
59
  * which keeps only `error.message` and silently drops the structured diagnostics
42
60
  * (`[CODE]`, HTTP status, endpoint, suggestion) that CLI users receive through
43
61
  * `ApiError.toActionableString()`. AI agents need the same actionable detail.
44
62
  */
45
- export function formatToolError(error) {
63
+ export function formatToolError(error, meta) {
64
+ const metaSuffix = meta ? `\n\n_meta: ${JSON.stringify(meta)}` : '';
46
65
  if (error instanceof ApiError) {
47
- return toolError(error.toActionableString());
66
+ return toolError(error.toActionableString() + metaSuffix);
48
67
  }
49
68
  if (error instanceof PushValidationError) {
50
69
  return toolError(JSON.stringify({
51
70
  error: 'PREFLIGHT_VALIDATION_FAILED',
52
71
  message: error.message,
53
72
  errors: error.errors,
73
+ ...(meta ? { _meta: meta } : {}),
74
+ }, null, 2));
75
+ }
76
+ if (error instanceof FrontmatterParseError) {
77
+ return toolError(JSON.stringify({
78
+ error: error.code,
79
+ message: error.message,
80
+ filePath: error.filePath,
81
+ line: error.line,
82
+ reason: error.reason,
83
+ suggestion: error.suggestion,
84
+ ...(meta ? { _meta: meta } : {}),
85
+ }, null, 2));
86
+ }
87
+ if (error instanceof DuplicateSlugError) {
88
+ return toolError(JSON.stringify({
89
+ error: error.code,
90
+ message: error.message,
91
+ slug: error.slug,
92
+ existingId: error.existingId,
93
+ existingFilePath: error.existingFilePath,
94
+ existingStatus: error.existingStatus,
95
+ suggestion: error.suggestion,
96
+ ...(meta ? { _meta: meta } : {}),
97
+ }, null, 2));
98
+ }
99
+ if (error instanceof UnpushedModificationsError ||
100
+ error instanceof PublishedArticleDeletionForbiddenError) {
101
+ return toolError(JSON.stringify({
102
+ error: error.code,
103
+ message: error.message,
104
+ filePath: error.filePath,
105
+ id: error.id,
106
+ suggestion: error.suggestion,
107
+ ...(meta ? { _meta: meta } : {}),
108
+ }, null, 2));
109
+ }
110
+ if (error instanceof CanonicalHasUnpushedEditsError) {
111
+ return toolError(JSON.stringify({
112
+ error: error.code,
113
+ message: error.message,
114
+ canonicalFilePath: error.canonicalFilePath,
115
+ conflictFilePath: error.conflictFilePath,
116
+ id: error.id,
117
+ suggestion: error.suggestion,
118
+ ...(meta ? { _meta: meta } : {}),
119
+ }, null, 2));
120
+ }
121
+ if (error instanceof QuarantinedPathRequiredError) {
122
+ return toolError(JSON.stringify({
123
+ error: error.code,
124
+ message: error.message,
125
+ filePath: error.filePath,
126
+ collection: error.collection,
127
+ suggestion: error.suggestion,
128
+ ...(meta ? { _meta: meta } : {}),
54
129
  }, null, 2));
55
130
  }
56
131
  if (error instanceof SyncPruneConflictError || error instanceof AmbiguousProfileError) {
57
- return toolError(`❌ ${error.message}`);
132
+ return toolError(`❌ ${error.message}${metaSuffix}`);
58
133
  }
59
134
  const message = error instanceof Error ? error.message : String(error);
60
- return toolError(`❌ ${message}`);
135
+ return toolError(`❌ ${message}${metaSuffix}`);
61
136
  }
62
137
  //# sourceMappingURL=tool-errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-errors.js","sourceRoot":"","sources":["../../src/mcp/tool-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI;aACL;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,OAAO,SAAS,CACd,IAAI,CAAC,SAAS,CACZ;YACE,KAAK,EAAE,6BAA6B;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,sBAAsB,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;QACtF,OAAO,SAAS,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"tool-errors.js","sourceRoot":"","sources":["../../src/mcp/tool-errors.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/profile.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC5C,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACtD;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAoFzF"}
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/profile.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC5C,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACtD;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAwFzF"}
@@ -41,6 +41,10 @@ export function registerProfileTools(server, options) {
41
41
  text: JSON.stringify({
42
42
  activeProfile: currentActive,
43
43
  profiles,
44
+ _meta: {
45
+ activeProfile: currentActive,
46
+ profilesPath: options.profilesPath || '~/.config/emit/profiles.yaml',
47
+ },
44
48
  }, null, 2),
45
49
  },
46
50
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/mcp/tools/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/mcp/tools/profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ContextResolver } from '../context.js';
3
+ export declare function registerSyncConflictsTool(server: McpServer, resolveContext: ContextResolver): void;
4
+ //# sourceMappingURL=sync-conflicts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-conflicts.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/sync-conflicts.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,eAAe,CAAC;AAIpE,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,eAAe,GAC9B,IAAI,CAwGN"}
@@ -0,0 +1,100 @@
1
+ /*
2
+ * Copyright (C) 2026 SPORT-SERVICE RS★R
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ * of this software and associated documentation files (the "Software"), to deal
6
+ * in the Software without restriction, including without limitation the rights
7
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ * copies of the Software, and to permit persons to whom the Software is
9
+ * furnished to do so, subject to the following conditions:
10
+ *
11
+ * The above copyright notice and this permission notice shall be included in all
12
+ * copies or substantial portions of the Software.
13
+ *
14
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ * SOFTWARE.
21
+ */
22
+ import { z } from 'zod';
23
+ import { listConflicts, diffConflict, resolveConflict } from '../../sync/conflicts.js';
24
+ import { formatToolError, formatToolSuccess } from '../tool-errors.js';
25
+ export function registerSyncConflictsTool(server, resolveContext) {
26
+ server.tool('sync_conflicts', 'Manage quarantined sync conflict copies (.conflict.md) and deletion rescue backups (.deleted.md) in posts/conflicts/. Actions: "list" (view quarantined files and types), "diff" (inspect line-by-line differences against canonical live article), and "resolve" (strategy "accept-local" to restore/replace canonical article, or "accept-canonical" to discard quarantined copy).', {
27
+ action: z
28
+ .enum(['list', 'diff', 'resolve'])
29
+ .describe('Operation to perform: "list", "diff", or "resolve"'),
30
+ filePath: z
31
+ .string()
32
+ .optional()
33
+ .describe('Target conflict file path or filename in posts/conflicts/ (required for diff and resolve)'),
34
+ strategy: z
35
+ .enum(['accept-local', 'accept-canonical'])
36
+ .optional()
37
+ .describe('Resolution strategy for action="resolve": "accept-local" (restore/apply quarantined copy) or "accept-canonical" (discard quarantined copy)'),
38
+ force: z
39
+ .boolean()
40
+ .optional()
41
+ .describe('Force overwrite canonical article even if it has unpushed local modifications'),
42
+ collection: z
43
+ .string()
44
+ .optional()
45
+ .describe('Collection containing conflicts (defaults to "posts")'),
46
+ profile: z.string().optional().describe('Target profile name for multi-site setups'),
47
+ }, async (args) => {
48
+ let ctx;
49
+ try {
50
+ ctx = resolveContext(args.profile);
51
+ }
52
+ catch (error) {
53
+ return formatToolError(error);
54
+ }
55
+ const collection = args.collection || ctx.config.defaultCollection || 'posts';
56
+ try {
57
+ if (args.action === 'list') {
58
+ const items = listConflicts(ctx.root, collection);
59
+ return formatToolSuccess({
60
+ conflicts: items,
61
+ count: items.length,
62
+ collection,
63
+ }, ctx.meta);
64
+ }
65
+ if (args.action === 'diff') {
66
+ if (!args.filePath) {
67
+ return formatToolError(new Error('action="diff" requires "filePath" parameter.'), ctx.meta);
68
+ }
69
+ const diffResult = diffConflict({
70
+ workspaceRoot: ctx.root,
71
+ filePath: args.filePath,
72
+ collection,
73
+ });
74
+ return formatToolSuccess(diffResult, ctx.meta);
75
+ }
76
+ if (args.action === 'resolve') {
77
+ if (!args.filePath) {
78
+ return formatToolError(new Error('action="resolve" requires "filePath" parameter.'), ctx.meta);
79
+ }
80
+ if (!args.strategy) {
81
+ return formatToolError(new Error('action="resolve" requires "strategy" parameter ("accept-local" or "accept-canonical").'), ctx.meta);
82
+ }
83
+ const res = resolveConflict({
84
+ workspaceRoot: ctx.root,
85
+ cache: ctx.cache,
86
+ filePath: args.filePath,
87
+ strategy: args.strategy,
88
+ force: args.force,
89
+ collection,
90
+ });
91
+ return formatToolSuccess(res, ctx.meta);
92
+ }
93
+ return formatToolError(new Error(`Unknown action "${args.action}". Must be "list", "diff", or "resolve".`), ctx.meta);
94
+ }
95
+ catch (err) {
96
+ return formatToolError(err, ctx.meta);
97
+ }
98
+ });
99
+ }
100
+ //# sourceMappingURL=sync-conflicts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-conflicts.js","sourceRoot":"","sources":["../../../src/mcp/tools/sync-conflicts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ContextResolver } from '../context.js';
3
+ export declare function registerSyncDeleteTool(server: McpServer, resolveContext: ContextResolver): void;
4
+ //# sourceMappingURL=sync-delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-delete.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/sync-delete.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,eAAe,CAAC;AAIpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,GAAG,IAAI,CA6D/F"}
@@ -0,0 +1,77 @@
1
+ /*
2
+ * Copyright (C) 2026 SPORT-SERVICE RS★R
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ * of this software and associated documentation files (the "Software"), to deal
6
+ * in the Software without restriction, including without limitation the rights
7
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ * copies of the Software, and to permit persons to whom the Software is
9
+ * furnished to do so, subject to the following conditions:
10
+ *
11
+ * The above copyright notice and this permission notice shall be included in all
12
+ * copies or substantial portions of the Software.
13
+ *
14
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ * SOFTWARE.
21
+ */
22
+ import { z } from 'zod';
23
+ import { deleteArticle } from '../../sync/delete.js';
24
+ import { formatToolError, formatToolSuccess } from '../tool-errors.js';
25
+ export function registerSyncDeleteTool(server, resolveContext) {
26
+ server.tool('sync_delete', 'Safely delete an article from both the local workspace and remote EmDash server. Enforces strict safety guards: rejects deletion if unpushed local modifications exist, requires "allowDeletePublished: true" to delete published articles, saves an automatic rescue backup to posts/conflicts/<file>.deleted.md, and preserves referenced media files in media/.', {
27
+ filePath: z
28
+ .string()
29
+ .optional()
30
+ .describe('Workspace-relative file path to delete (e.g. posts/draft/20261108_01M6...-my-slug.md)'),
31
+ id: z.string().optional().describe('Article ULID to delete'),
32
+ allowDeletePublished: z
33
+ .boolean()
34
+ .optional()
35
+ .describe('Explicit confirmation required to delete a published live article'),
36
+ dryRun: z
37
+ .boolean()
38
+ .optional()
39
+ .describe('Preview deletion metadata, line count, and referenced media without deleting'),
40
+ collection: z
41
+ .string()
42
+ .optional()
43
+ .describe('Collection name containing the article (defaults to "posts")'),
44
+ profile: z.string().optional().describe('Target profile name for multi-site setups'),
45
+ }, async (args) => {
46
+ let ctx;
47
+ try {
48
+ ctx = resolveContext(args.profile);
49
+ }
50
+ catch (error) {
51
+ return formatToolError(error);
52
+ }
53
+ if (!args.filePath && !args.id) {
54
+ return formatToolError(new Error('Please specify either "filePath" or "id" of the article to delete.'));
55
+ }
56
+ try {
57
+ const collection = args.collection || ctx.config.defaultCollection;
58
+ const result = await deleteArticle({
59
+ workspaceRoot: ctx.root,
60
+ cache: ctx.cache,
61
+ filePath: args.filePath,
62
+ id: args.id,
63
+ collection,
64
+ allowDeletePublished: args.allowDeletePublished,
65
+ dryRun: args.dryRun,
66
+ origin: ctx.origin,
67
+ token: ctx.auth?.token,
68
+ refreshToken: ctx.auth?.refreshToken,
69
+ });
70
+ return formatToolSuccess(result, ctx.meta);
71
+ }
72
+ catch (error) {
73
+ return formatToolError(error, ctx.meta);
74
+ }
75
+ });
76
+ }
77
+ //# sourceMappingURL=sync-delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-delete.js","sourceRoot":"","sources":["../../../src/mcp/tools/sync-delete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,cAA+B;IACvF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,oWAAoW,EACpW;QACE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,uFAAuF,CACxF;QACH,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC5D,oBAAoB,EAAE,CAAC;aACpB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,mEAAmE,CAAC;QAChF,MAAM,EAAE,CAAC;aACN,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,8EAA8E,CAAC;QAC3F,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,8DAA8D,CAAC;QAC3E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KACrF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,GAAkB,CAAC;QACvB,IAAI,CAAC;YACH,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YAC/B,OAAO,eAAe,CACpB,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAChF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC;YACnE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,aAAa,EAAE,GAAG,CAAC,IAAI;gBACvB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,UAAU;gBACV,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;gBAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK;gBACtB,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,YAAY;aACrC,CAAC,CAAC;YAEH,OAAO,iBAAiB,CAAC,MAA4C,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync-diff.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/sync-diff.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,eAAe,CAAC;AAIpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,GAAG,IAAI,CA2C7F"}
1
+ {"version":3,"file":"sync-diff.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/sync-diff.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,eAAe,CAAC;AAIpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,GAAG,IAAI,CA6C7F"}
@@ -48,13 +48,14 @@ export function registerSyncDiffTool(server, resolveContext) {
48
48
  });
49
49
  }
50
50
  catch (error) {
51
- return formatToolError(error);
51
+ return formatToolError(error, ctx.meta);
52
52
  }
53
+ const metaSuffix = `\n\n_meta: ${JSON.stringify(ctx.meta)}`;
53
54
  return {
54
55
  content: [
55
56
  {
56
57
  type: 'text',
57
- text: inspection.formattedOutput,
58
+ text: `${inspection.formattedOutput}${metaSuffix}`,
58
59
  },
59
60
  ],
60
61
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sync-diff.js","sourceRoot":"","sources":["../../../src/mcp/tools/sync-diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAA8B,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,cAA+B;IACrF,MAAM,CAAC,IAAI,CACT,WAAW,EACX,0LAA0L,EAC1L;QACE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,iGAAiG,CAClG;QACH,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAClE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KACrF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,GAAkB,CAAC;QACvB,IAAI,CAAC;YACH,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,UAAiC,CAAC;QACtC,IAAI,CAAC;YACH,UAAU,GAAG,kBAAkB,CAAC;gBAC9B,aAAa,EAAE,GAAG,CAAC,IAAI;gBACvB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,EAAE,EAAE,IAAI,CAAC,EAAE;aACZ,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,UAAU,CAAC,eAAe;iBACjC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"sync-diff.js","sourceRoot":"","sources":["../../../src/mcp/tools/sync-diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAA8B,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,cAA+B;IACrF,MAAM,CAAC,IAAI,CACT,WAAW,EACX,0LAA0L,EAC1L;QACE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,iGAAiG,CAClG;QACH,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAClE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KACrF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,GAAkB,CAAC;QACvB,IAAI,CAAC;YACH,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,UAAiC,CAAC;QACtC,IAAI,CAAC;YACH,UAAU,GAAG,kBAAkB,CAAC;gBAC9B,aAAa,EAAE,GAAG,CAAC,IAAI;gBACvB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,EAAE,EAAE,IAAI,CAAC,EAAE;aACZ,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,UAAU,GAAG,cAAc,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAE5D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,GAAG,UAAU,EAAE;iBACnD;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ContextResolver } from '../context.js';
3
+ export declare function registerSyncDoctorTool(server: McpServer, resolveContext: ContextResolver): void;
4
+ //# sourceMappingURL=sync-doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-doctor.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/sync-doctor.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,eAAe,CAAC;AAIpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,GAAG,IAAI,CAoC/F"}