emdash-emit 0.1.25 → 0.1.31
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/CHANGELOG.md +154 -4
- package/dist/cli/commands/conflicts.d.ts.map +1 -1
- package/dist/cli/commands/conflicts.js +2 -22
- package/dist/cli/commands/conflicts.js.map +1 -1
- package/dist/cli/commands/delete.d.ts.map +1 -1
- package/dist/cli/commands/delete.js +1 -13
- package/dist/cli/commands/delete.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +1 -13
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/media.d.ts.map +1 -1
- package/dist/cli/commands/media.js +1 -13
- package/dist/cli/commands/media.js.map +1 -1
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +1 -13
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/pull.d.ts +3 -3
- package/dist/cli/commands/pull.d.ts.map +1 -1
- package/dist/cli/commands/pull.js +142 -88
- package/dist/cli/commands/pull.js.map +1 -1
- package/dist/cli/commands/push.d.ts +1 -1
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +32 -90
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/context.d.ts +12 -0
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js +27 -1
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/report-failure.d.ts +6 -0
- package/dist/cli/report-failure.d.ts.map +1 -0
- package/dist/cli/report-failure.js +71 -0
- package/dist/cli/report-failure.js.map +1 -0
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +1 -1
- package/dist/client/api.js.map +1 -1
- package/dist/client/lock.js.map +1 -1
- package/dist/client/mapper.js.map +1 -1
- package/dist/client/media.d.ts.map +1 -1
- package/dist/client/media.js.map +1 -1
- package/dist/db/baseline.d.ts +16 -1
- package/dist/db/baseline.d.ts.map +1 -1
- package/dist/db/baseline.js +25 -0
- package/dist/db/baseline.js.map +1 -1
- package/dist/db/cache.d.ts +2 -3
- package/dist/db/cache.d.ts.map +1 -1
- package/dist/db/cache.js +3 -295
- package/dist/db/cache.js.map +1 -1
- package/dist/db/migrations.d.ts +7 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +320 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/mcp/heartbeat.d.ts +1 -34
- package/dist/mcp/heartbeat.d.ts.map +1 -1
- package/dist/mcp/heartbeat.js +1 -113
- package/dist/mcp/heartbeat.js.map +1 -1
- package/dist/mcp/tool-errors.d.ts +12 -1
- package/dist/mcp/tool-errors.d.ts.map +1 -1
- package/dist/mcp/tool-errors.js +29 -0
- package/dist/mcp/tool-errors.js.map +1 -1
- package/dist/mcp/tools/sync-conflicts.d.ts.map +1 -1
- package/dist/mcp/tools/sync-conflicts.js +46 -58
- package/dist/mcp/tools/sync-conflicts.js.map +1 -1
- package/dist/mcp/tools/sync-delete.d.ts.map +1 -1
- package/dist/mcp/tools/sync-delete.js +18 -30
- package/dist/mcp/tools/sync-delete.js.map +1 -1
- package/dist/mcp/tools/sync-diff.d.ts.map +1 -1
- package/dist/mcp/tools/sync-diff.js +10 -31
- package/dist/mcp/tools/sync-diff.js.map +1 -1
- package/dist/mcp/tools/sync-doctor.d.ts.map +1 -1
- package/dist/mcp/tools/sync-doctor.js +18 -30
- package/dist/mcp/tools/sync-doctor.js.map +1 -1
- package/dist/mcp/tools/sync-media-search.d.ts.map +1 -1
- package/dist/mcp/tools/sync-media-search.js +40 -52
- package/dist/mcp/tools/sync-media-search.js.map +1 -1
- package/dist/mcp/tools/sync-new.d.ts.map +1 -1
- package/dist/mcp/tools/sync-new.js +34 -55
- package/dist/mcp/tools/sync-new.js.map +1 -1
- package/dist/mcp/tools/sync-pull.d.ts.map +1 -1
- package/dist/mcp/tools/sync-pull.js +202 -222
- package/dist/mcp/tools/sync-pull.js.map +1 -1
- package/dist/mcp/tools/sync-push.d.ts.map +1 -1
- package/dist/mcp/tools/sync-push.js +64 -84
- package/dist/mcp/tools/sync-push.js.map +1 -1
- package/dist/mcp/tools/sync-status.d.ts.map +1 -1
- package/dist/mcp/tools/sync-status.js +3 -13
- package/dist/mcp/tools/sync-status.js.map +1 -1
- package/dist/presentation/article_report.d.ts +5 -0
- package/dist/presentation/article_report.d.ts.map +1 -1
- package/dist/presentation/article_report.js +17 -0
- package/dist/presentation/article_report.js.map +1 -1
- package/dist/sync/baseline-reconstruction.d.ts +43 -0
- package/dist/sync/baseline-reconstruction.d.ts.map +1 -0
- package/dist/sync/baseline-reconstruction.js +103 -0
- package/dist/sync/baseline-reconstruction.js.map +1 -0
- package/dist/sync/bylines.d.ts +5 -0
- package/dist/sync/bylines.d.ts.map +1 -1
- package/dist/sync/bylines.js +29 -0
- package/dist/sync/bylines.js.map +1 -1
- package/dist/sync/conflicts.d.ts.map +1 -1
- package/dist/sync/conflicts.js +21 -4
- package/dist/sync/conflicts.js.map +1 -1
- package/dist/sync/delete.d.ts.map +1 -1
- package/dist/sync/delete.js +12 -1
- package/dist/sync/delete.js.map +1 -1
- package/dist/sync/diff.d.ts.map +1 -1
- package/dist/sync/diff.js +58 -27
- package/dist/sync/diff.js.map +1 -1
- package/dist/sync/doctor.d.ts.map +1 -1
- package/dist/sync/doctor.js +13 -3
- package/dist/sync/doctor.js.map +1 -1
- package/dist/sync/guards.d.ts +1 -1
- package/dist/sync/guards.d.ts.map +1 -1
- package/dist/sync/guards.js +2 -1
- package/dist/sync/guards.js.map +1 -1
- package/dist/sync/media/companions.d.ts.map +1 -1
- package/dist/sync/media/companions.js.map +1 -1
- package/dist/sync/media/naming_mirror.d.ts.map +1 -1
- package/dist/sync/media/naming_mirror.js +11 -2
- package/dist/sync/media/naming_mirror.js.map +1 -1
- package/dist/sync/media/pull_article.d.ts +2 -0
- package/dist/sync/media/pull_article.d.ts.map +1 -1
- package/dist/sync/media/pull_article.js +74 -25
- package/dist/sync/media/pull_article.js.map +1 -1
- package/dist/sync/media/pull_library.d.ts.map +1 -1
- package/dist/sync/media/pull_library.js +34 -61
- package/dist/sync/media/pull_library.js.map +1 -1
- package/dist/sync/media/remote_index.d.ts +16 -1
- package/dist/sync/media/remote_index.d.ts.map +1 -1
- package/dist/sync/media/remote_index.js +2 -2
- package/dist/sync/media/remote_index.js.map +1 -1
- package/dist/sync/merge.d.ts.map +1 -1
- package/dist/sync/merge.js +5 -5
- package/dist/sync/merge.js.map +1 -1
- package/dist/sync/new.d.ts.map +1 -1
- package/dist/sync/new.js +5 -4
- package/dist/sync/new.js.map +1 -1
- package/dist/sync/orchestrator.d.ts +39 -0
- package/dist/sync/orchestrator.d.ts.map +1 -1
- package/dist/sync/orchestrator.js +93 -80
- package/dist/sync/orchestrator.js.map +1 -1
- package/dist/sync/preflight/image_probe.d.ts +28 -0
- package/dist/sync/preflight/image_probe.d.ts.map +1 -0
- package/dist/sync/preflight/image_probe.js +70 -0
- package/dist/sync/preflight/image_probe.js.map +1 -0
- package/dist/sync/preflight.d.ts.map +1 -1
- package/dist/sync/preflight.js +48 -45
- package/dist/sync/preflight.js.map +1 -1
- package/dist/sync/pull/fast_path.d.ts +9 -0
- package/dist/sync/pull/fast_path.d.ts.map +1 -0
- package/dist/sync/pull/fast_path.js +383 -0
- package/dist/sync/pull/fast_path.js.map +1 -0
- package/dist/sync/pull/index.d.ts +15 -0
- package/dist/sync/pull/index.d.ts.map +1 -0
- package/dist/sync/pull/index.js +372 -0
- package/dist/sync/pull/index.js.map +1 -0
- package/dist/sync/pull/list.d.ts +22 -0
- package/dist/sync/pull/list.d.ts.map +1 -0
- package/dist/sync/pull/list.js +175 -0
- package/dist/sync/pull/list.js.map +1 -0
- package/dist/sync/pull/media_stage.d.ts +67 -0
- package/dist/sync/pull/media_stage.d.ts.map +1 -0
- package/dist/sync/pull/media_stage.js +599 -0
- package/dist/sync/pull/media_stage.js.map +1 -0
- package/dist/sync/pull/quarantine.d.ts +22 -0
- package/dist/sync/pull/quarantine.d.ts.map +1 -0
- package/dist/sync/pull/quarantine.js +174 -0
- package/dist/sync/pull/quarantine.js.map +1 -0
- package/dist/sync/pull/types.d.ts +135 -0
- package/dist/sync/pull/types.d.ts.map +1 -0
- package/dist/sync/pull/types.js +23 -0
- package/dist/sync/pull/types.js.map +1 -0
- package/dist/sync/pull.d.ts +1 -114
- package/dist/sync/pull.d.ts.map +1 -1
- package/dist/sync/pull.js +1 -861
- package/dist/sync/pull.js.map +1 -1
- package/dist/sync/push/commit.d.ts.map +1 -1
- package/dist/sync/push/commit.js +1 -2
- package/dist/sync/push/commit.js.map +1 -1
- package/dist/sync/push/index.d.ts.map +1 -1
- package/dist/sync/push/index.js +4 -3
- package/dist/sync/push/index.js.map +1 -1
- package/dist/sync/push/merge_stage.js +1 -1
- package/dist/sync/push/merge_stage.js.map +1 -1
- package/dist/sync/push/taxonomy_plan.d.ts +4 -0
- package/dist/sync/push/taxonomy_plan.d.ts.map +1 -1
- package/dist/sync/push/taxonomy_plan.js +22 -10
- package/dist/sync/push/taxonomy_plan.js.map +1 -1
- package/dist/sync/push/transport.d.ts +1 -1
- package/dist/sync/push/transport.d.ts.map +1 -1
- package/dist/sync/push/transport.js +1 -1
- package/dist/sync/push/transport.js.map +1 -1
- package/dist/sync/status.d.ts.map +1 -1
- package/dist/sync/status.js +11 -57
- package/dist/sync/status.js.map +1 -1
- package/dist/sync/taxonomies.d.ts +45 -0
- package/dist/sync/taxonomies.d.ts.map +1 -1
- package/dist/sync/taxonomies.js +258 -119
- package/dist/sync/taxonomies.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/mcp-heartbeat.d.ts +36 -0
- package/dist/utils/mcp-heartbeat.d.ts.map +1 -0
- package/dist/utils/mcp-heartbeat.js +126 -0
- package/dist/utils/mcp-heartbeat.js.map +1 -0
- package/dist/utils/media-body-refs.d.ts.map +1 -1
- package/dist/utils/media-body-refs.js +2 -2
- package/dist/utils/media-body-refs.js.map +1 -1
- package/dist/utils/taxonomy-key.d.ts +44 -0
- package/dist/utils/taxonomy-key.d.ts.map +1 -0
- package/dist/utils/taxonomy-key.js +63 -0
- package/dist/utils/taxonomy-key.js.map +1 -0
- package/package.json +1 -1
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { z } from 'zod';
|
|
23
23
|
import { pushArticle } from '../../sync/push.js';
|
|
24
|
-
import {
|
|
24
|
+
import { formatToolTextWithMeta, withResolvedContext } from '../tool-errors.js';
|
|
25
25
|
export function registerSyncPushTool(server, resolveContext) {
|
|
26
26
|
server.tool('sync_push', 'Push local Markdown article modifications or new articles to remote EmDash CMS. Automatically uploads standalone draft images in media/drafts/<file>, rewrites body URLs to /_emdash/api/media/file/<storageKey>, and promotes files to media/. Performs 3-way merge to protect remote edits. Requires allowPublish=true when transitioning status from draft to published. If conflict markers are inserted, resolve them locally before re-pushing. Paths under posts/conflicts/ are preserved rescue copies and are refused with QUARANTINED_COPY_NOT_PUSHABLE: merge their content into the canonical article first.', {
|
|
27
27
|
filePath: z
|
|
@@ -60,100 +60,80 @@ export function registerSyncPushTool(server, resolveContext) {
|
|
|
60
60
|
.optional()
|
|
61
61
|
.describe('Keep mirrored body images as article-relative "../../media/<storageKey>" references on disk while pushing the canonical URL. Defaults to the workspace setting in .emit/config.json.'),
|
|
62
62
|
profile: z.string().optional().describe('Target profile name for multi-site setups'),
|
|
63
|
-
}, async (args) => {
|
|
64
|
-
let ctx;
|
|
65
|
-
try {
|
|
66
|
-
ctx = resolveContext(args.profile);
|
|
67
|
-
}
|
|
68
|
-
catch (err) {
|
|
69
|
-
return formatToolError(err);
|
|
70
|
-
}
|
|
63
|
+
}, async (args) => withResolvedContext(resolveContext, args, async (ctx) => {
|
|
71
64
|
const origin = ctx.origin;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
conflictDetails.push(`- ${w}`);
|
|
104
|
-
}
|
|
65
|
+
const res = await pushArticle(args.filePath, {
|
|
66
|
+
workspaceRoot: ctx.root,
|
|
67
|
+
cache: ctx.cache,
|
|
68
|
+
origin,
|
|
69
|
+
token: ctx.auth.token,
|
|
70
|
+
refreshToken: ctx.auth.refreshToken,
|
|
71
|
+
allowPublish: args.allowPublish,
|
|
72
|
+
resolveTaxonomy: args.resolveTaxonomy,
|
|
73
|
+
allowWipeTaxonomies: args.allowWipeTaxonomies,
|
|
74
|
+
allowUnappliedTaxonomies: args.allowUnappliedTaxonomies,
|
|
75
|
+
noTaxonomyAudit: args.noTaxonomyAudit,
|
|
76
|
+
revive: args.revive,
|
|
77
|
+
force: args.force,
|
|
78
|
+
localMediaRefs: args.localMediaRefs === undefined ? ctx.config.localMediaRefs : args.localMediaRefs,
|
|
79
|
+
});
|
|
80
|
+
if (res.conflict) {
|
|
81
|
+
const conflictDetails = res.taxonomyConflict
|
|
82
|
+
? [
|
|
83
|
+
'⚠️ Taxonomy conflict detected: local and remote categories/tags diverged.',
|
|
84
|
+
'Article body was cleanly merged without conflict markers.',
|
|
85
|
+
'To resolve, call sync_push again with resolveTaxonomy="union" (recommended), "local", or "remote".',
|
|
86
|
+
]
|
|
87
|
+
: [
|
|
88
|
+
'⚠️ Conflict detected and could not be resolved automatically.',
|
|
89
|
+
`Conflict markers (<<<<<<< LOCAL ... ======= ... >>>>>>> REMOTE) have been inserted into "${res.filePath}".`,
|
|
90
|
+
'Please resolve the conflicting lines in the file and retry sync_push.',
|
|
91
|
+
];
|
|
92
|
+
if (res.warnings && res.warnings.length > 0) {
|
|
93
|
+
conflictDetails.push('', 'Warnings:');
|
|
94
|
+
for (const w of res.warnings) {
|
|
95
|
+
conflictDetails.push(`- ${w}`);
|
|
105
96
|
}
|
|
106
|
-
return {
|
|
107
|
-
content: [
|
|
108
|
-
{
|
|
109
|
-
type: 'text',
|
|
110
|
-
text: conflictDetails.join('\n'),
|
|
111
|
-
},
|
|
112
|
-
],
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
const transitionLines = [];
|
|
116
|
-
if (res.previousId) {
|
|
117
|
-
transitionLines.push(`🆔 Server assigned canonical ULID: '${res.previousId}' -> '${res.id}'.`);
|
|
118
97
|
}
|
|
119
|
-
if (res.previousFilePath) {
|
|
120
|
-
transitionLines.push(`📄 Local file renamed: "${res.previousFilePath}" -> "${res.filePath}" (use the new path for subsequent edits/pushes).`);
|
|
121
|
-
}
|
|
122
|
-
const taxonomyLines = [];
|
|
123
|
-
if (res.resolvedTaxonomies) {
|
|
124
|
-
for (const [tax, items] of Object.entries(res.resolvedTaxonomies)) {
|
|
125
|
-
if (Array.isArray(items)) {
|
|
126
|
-
for (const item of items) {
|
|
127
|
-
if (item.input !== item.resolved) {
|
|
128
|
-
taxonomyLines.push(`🏷️ Canonicalized ${tax}: '${item.input}' -> '${item.resolved}'.`);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
const allWarnings = [
|
|
135
|
-
...(ctx.originWarning ? [ctx.originWarning] : []),
|
|
136
|
-
...(res.warnings || []),
|
|
137
|
-
];
|
|
138
|
-
const warningLines = allWarnings.length > 0 ? ['', '⚠️ Warnings:', ...allWarnings.map((w) => ` - ${w}`)] : [];
|
|
139
|
-
const metaSuffix = `\n\n_meta: ${JSON.stringify(ctx.meta)}`;
|
|
140
98
|
return {
|
|
141
99
|
content: [
|
|
142
100
|
{
|
|
143
101
|
type: 'text',
|
|
144
|
-
text:
|
|
145
|
-
`✅ Successfully pushed '${res.id}' to remote (${res.filePath}, rev: ${res.rev}).`,
|
|
146
|
-
...transitionLines,
|
|
147
|
-
...taxonomyLines,
|
|
148
|
-
...warningLines,
|
|
149
|
-
].join('\n') + metaSuffix,
|
|
102
|
+
text: conflictDetails.join('\n'),
|
|
150
103
|
},
|
|
151
104
|
],
|
|
152
105
|
};
|
|
153
106
|
}
|
|
154
|
-
|
|
155
|
-
|
|
107
|
+
const transitionLines = [];
|
|
108
|
+
if (res.previousId) {
|
|
109
|
+
transitionLines.push(`🆔 Server assigned canonical ULID: '${res.previousId}' -> '${res.id}'.`);
|
|
110
|
+
}
|
|
111
|
+
if (res.previousFilePath) {
|
|
112
|
+
transitionLines.push(`📄 Local file renamed: "${res.previousFilePath}" -> "${res.filePath}" (use the new path for subsequent edits/pushes).`);
|
|
113
|
+
}
|
|
114
|
+
const taxonomyLines = [];
|
|
115
|
+
if (res.resolvedTaxonomies) {
|
|
116
|
+
for (const [tax, items] of Object.entries(res.resolvedTaxonomies)) {
|
|
117
|
+
if (Array.isArray(items)) {
|
|
118
|
+
for (const item of items) {
|
|
119
|
+
if (item.input !== item.resolved) {
|
|
120
|
+
taxonomyLines.push(`🏷️ Canonicalized ${tax}: '${item.input}' -> '${item.resolved}'.`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
156
125
|
}
|
|
157
|
-
|
|
126
|
+
const allWarnings = [
|
|
127
|
+
...(ctx.originWarning ? [ctx.originWarning] : []),
|
|
128
|
+
...(res.warnings || []),
|
|
129
|
+
];
|
|
130
|
+
const warningLines = allWarnings.length > 0 ? ['', '⚠️ Warnings:', ...allWarnings.map((w) => ` - ${w}`)] : [];
|
|
131
|
+
return formatToolTextWithMeta([
|
|
132
|
+
`✅ Successfully pushed '${res.id}' to remote (${res.filePath}, rev: ${res.rev}).`,
|
|
133
|
+
...transitionLines,
|
|
134
|
+
...taxonomyLines,
|
|
135
|
+
...warningLines,
|
|
136
|
+
].join('\n'), ctx.meta);
|
|
137
|
+
}));
|
|
158
138
|
}
|
|
159
139
|
//# sourceMappingURL=sync-push.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-push.js","sourceRoot":"","sources":["../../../src/mcp/tools/sync-push.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sync-push.js","sourceRoot":"","sources":["../../../src/mcp/tools/sync-push.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-status.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/sync-status.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"sync-status.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/sync-status.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAWrD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,GAAG,IAAI,CAkI/F"}
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { z } from 'zod';
|
|
23
23
|
import { getWorkspaceStatus, filterStatusItems, } from '../../sync/status.js';
|
|
24
|
-
import { formatToolError, formatToolSuccess } from '../tool-errors.js';
|
|
24
|
+
import { formatToolError, formatToolSuccess, withResolvedContext } from '../tool-errors.js';
|
|
25
25
|
const MAX_ACTION_REQUIRED = 30;
|
|
26
26
|
const MAX_RECENT_SYNCED = 5;
|
|
27
27
|
export function registerSyncStatusTool(server, resolveContext) {
|
|
@@ -44,17 +44,7 @@ export function registerSyncStatusTool(server, resolveContext) {
|
|
|
44
44
|
.optional()
|
|
45
45
|
.describe('Filter by synchronization state'),
|
|
46
46
|
profile: z.string().optional().describe('Target profile name for multi-site setups'),
|
|
47
|
-
}, async (args) => {
|
|
48
|
-
// Resolve context inside the guard too: workspace/profile resolution can throw
|
|
49
|
-
// AmbiguousProfileError or "Not inside an Emit workspace", and agents need those
|
|
50
|
-
// formatted the same way as every other tool failure.
|
|
51
|
-
let ctx;
|
|
52
|
-
try {
|
|
53
|
-
ctx = resolveContext(args.profile);
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
return formatToolError(error);
|
|
57
|
-
}
|
|
47
|
+
}, async (args) => withResolvedContext(resolveContext, args, (ctx) => {
|
|
58
48
|
const collection = args.collection || ctx.config.defaultCollection;
|
|
59
49
|
let status;
|
|
60
50
|
try {
|
|
@@ -143,6 +133,6 @@ export function registerSyncStatusTool(server, resolveContext) {
|
|
|
143
133
|
: {}),
|
|
144
134
|
};
|
|
145
135
|
return formatToolSuccess(responsePayload, ctx.meta);
|
|
146
|
-
});
|
|
136
|
+
}));
|
|
147
137
|
}
|
|
148
138
|
//# sourceMappingURL=sync-status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-status.js","sourceRoot":"","sources":["../../../src/mcp/tools/sync-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-status.js","sourceRoot":"","sources":["../../../src/mcp/tools/sync-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { PrunedTaxonomiesDetail } from '../utils/taxonomy-key.js';
|
|
1
2
|
/**
|
|
2
3
|
* Presentation layer: unified report formatting helpers for CLI and MCP consumers.
|
|
3
4
|
*
|
|
@@ -37,4 +38,8 @@ export interface ArticleDiffReportOptions {
|
|
|
37
38
|
* Matches the canonical diff format established in diff.ts.
|
|
38
39
|
*/
|
|
39
40
|
export declare function formatArticleDiffReport(options: ArticleDiffReportOptions): string;
|
|
41
|
+
/**
|
|
42
|
+
* Renders a notice informing the user that deleted taxonomy terms were pruned from frontmatter.
|
|
43
|
+
*/
|
|
44
|
+
export declare function formatPrunedTaxonomiesNotice(pruned: PrunedTaxonomiesDetail | undefined): string | null;
|
|
40
45
|
//# sourceMappingURL=article_report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article_report.d.ts","sourceRoot":"","sources":["../../src/presentation/article_report.ts"],"names":[],"mappings":"AAsBA;;;;;;GAMG;AAEH;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAaxF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,+BAA+B,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5C,GAAG,MAAM,CAeT;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,CAajF"}
|
|
1
|
+
{"version":3,"file":"article_report.d.ts","sourceRoot":"","sources":["../../src/presentation/article_report.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE;;;;;;GAMG;AAEH;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAaxF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,+BAA+B,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5C,GAAG,MAAM,CAeT;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,CAajF;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,sBAAsB,GAAG,SAAS,GACzC,MAAM,GAAG,IAAI,CAWf"}
|
|
@@ -77,4 +77,21 @@ export function formatArticleDiffReport(options) {
|
|
|
77
77
|
'----------------------------------------',
|
|
78
78
|
].join('\n');
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Renders a notice informing the user that deleted taxonomy terms were pruned from frontmatter.
|
|
82
|
+
*/
|
|
83
|
+
export function formatPrunedTaxonomiesNotice(pruned) {
|
|
84
|
+
if (!pruned)
|
|
85
|
+
return null;
|
|
86
|
+
const parts = [];
|
|
87
|
+
if (pruned.categories && pruned.categories.length > 0) {
|
|
88
|
+
parts.push(`categories: ${JSON.stringify(pruned.categories)}`);
|
|
89
|
+
}
|
|
90
|
+
if (pruned.tags && pruned.tags.length > 0) {
|
|
91
|
+
parts.push(`tags: ${JSON.stringify(pruned.tags)}`);
|
|
92
|
+
}
|
|
93
|
+
if (parts.length === 0)
|
|
94
|
+
return null;
|
|
95
|
+
return `🏷️ Pruned deleted taxonomy term(s) from frontmatter (${parts.join(', ')}). Push the file to apply changes on remote.`;
|
|
96
|
+
}
|
|
80
97
|
//# sourceMappingURL=article_report.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article_report.js","sourceRoot":"","sources":["../../src/presentation/article_report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"article_report.js","sourceRoot":"","sources":["../../src/presentation/article_report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import type { BaseSnapshot, CacheDatabase, SyncState } from '../db/cache.js';
|
|
3
|
+
import type { TaxonomyCandidates } from '../utils/frontmatter.js';
|
|
4
|
+
import { type DiskSpelling } from '../utils/disk-spelling.js';
|
|
5
|
+
export interface ReconstructedBaseline {
|
|
6
|
+
canonicalMarkdown: string;
|
|
7
|
+
diskSpellingMarkdown: string;
|
|
8
|
+
spelling: DiskSpelling;
|
|
9
|
+
matchesDisk: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Reconstructs the canonical baseline document and its disk-spelling representation
|
|
13
|
+
* (`localMediaRefs`, legacy percent-encoded taxonomy terms, and `# draft revision` comment).
|
|
14
|
+
*/
|
|
15
|
+
export declare function reconstructBaseline(params: {
|
|
16
|
+
workspaceRoot: string;
|
|
17
|
+
snapshot: BaseSnapshot;
|
|
18
|
+
localContent: string;
|
|
19
|
+
currentHash?: string;
|
|
20
|
+
syncState?: SyncState | null;
|
|
21
|
+
relPath: string;
|
|
22
|
+
candidates?: TaxonomyCandidates;
|
|
23
|
+
fs?: typeof fs;
|
|
24
|
+
}): ReconstructedBaseline;
|
|
25
|
+
/**
|
|
26
|
+
* Checks whether a tracked file on disk is unmodified against its cached `sync_state` or
|
|
27
|
+
* reconstructed baseline. When raw `localHash` mismatches purely due to reference spelling
|
|
28
|
+
* (and `matchesDisk` is true), automatically re-tracks `sync_state.local_hash` via
|
|
29
|
+
* `retrackLocalHashOnly()` so subsequent status/diff/doctor/delete checks fast-path cleanly.
|
|
30
|
+
*/
|
|
31
|
+
export declare function isLocalFileUnmodified(params: {
|
|
32
|
+
workspaceRoot: string;
|
|
33
|
+
cache: CacheDatabase;
|
|
34
|
+
id: string;
|
|
35
|
+
relPath: string;
|
|
36
|
+
localContent: string;
|
|
37
|
+
currentHash?: string;
|
|
38
|
+
syncState?: SyncState | null;
|
|
39
|
+
healOnSpellingMatch?: boolean;
|
|
40
|
+
candidates?: TaxonomyCandidates;
|
|
41
|
+
fs?: typeof fs;
|
|
42
|
+
}): boolean;
|
|
43
|
+
//# sourceMappingURL=baseline-reconstruction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseline-reconstruction.d.ts","sourceRoot":"","sources":["../../src/sync/baseline-reconstruction.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIlG,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;CAChB,GAAG,qBAAqB,CA6BxB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;CAChB,GAAG,OAAO,CAsCV"}
|
|
@@ -0,0 +1,103 @@
|
|
|
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 fs from 'node:fs';
|
|
23
|
+
import { baselineMarkdown, retrackLocalHashOnly } from '../db/baseline.js';
|
|
24
|
+
import { resolveDiskSpelling, renderForDisk } from '../utils/disk-spelling.js';
|
|
25
|
+
import { loadLocalTaxonomyCandidates } from './taxonomies.js';
|
|
26
|
+
import { calculateHash } from './workspace/index.js';
|
|
27
|
+
/**
|
|
28
|
+
* Reconstructs the canonical baseline document and its disk-spelling representation
|
|
29
|
+
* (`localMediaRefs`, legacy percent-encoded taxonomy terms, and `# draft revision` comment).
|
|
30
|
+
*/
|
|
31
|
+
export function reconstructBaseline(params) {
|
|
32
|
+
const customFs = params.fs ?? fs;
|
|
33
|
+
const currentHash = params.currentHash ?? calculateHash(params.localContent);
|
|
34
|
+
const candidates = params.candidates ?? loadLocalTaxonomyCandidates(params.workspaceRoot);
|
|
35
|
+
const spelling = resolveDiskSpelling(params.localContent, params.syncState);
|
|
36
|
+
const canonicalMarkdown = baselineMarkdown(params.snapshot, candidates, {
|
|
37
|
+
preferEncodedTaxonomy: spelling.preferEncodedTaxonomy,
|
|
38
|
+
hasDraftRevision: spelling.hasDraftRevision,
|
|
39
|
+
});
|
|
40
|
+
const diskSpellingMarkdown = renderForDisk(canonicalMarkdown, spelling, {
|
|
41
|
+
workspaceRoot: params.workspaceRoot,
|
|
42
|
+
articleRelPath: params.relPath,
|
|
43
|
+
fs: customFs,
|
|
44
|
+
});
|
|
45
|
+
const canonicalHash = calculateHash(canonicalMarkdown);
|
|
46
|
+
const hasSpellingTransform = diskSpellingMarkdown !== canonicalMarkdown || canonicalHash !== params.snapshot.hash;
|
|
47
|
+
const matchesDisk = calculateHash(diskSpellingMarkdown) === currentHash &&
|
|
48
|
+
(!params.syncState ||
|
|
49
|
+
params.syncState.localHash === currentHash ||
|
|
50
|
+
params.syncState.localHash === params.snapshot.hash ||
|
|
51
|
+
hasSpellingTransform);
|
|
52
|
+
return {
|
|
53
|
+
canonicalMarkdown,
|
|
54
|
+
diskSpellingMarkdown,
|
|
55
|
+
spelling,
|
|
56
|
+
matchesDisk,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Checks whether a tracked file on disk is unmodified against its cached `sync_state` or
|
|
61
|
+
* reconstructed baseline. When raw `localHash` mismatches purely due to reference spelling
|
|
62
|
+
* (and `matchesDisk` is true), automatically re-tracks `sync_state.local_hash` via
|
|
63
|
+
* `retrackLocalHashOnly()` so subsequent status/diff/doctor/delete checks fast-path cleanly.
|
|
64
|
+
*/
|
|
65
|
+
export function isLocalFileUnmodified(params) {
|
|
66
|
+
const syncState = params.syncState !== undefined ? params.syncState : params.cache.getSyncState(params.id);
|
|
67
|
+
if (!syncState)
|
|
68
|
+
return false;
|
|
69
|
+
const currentHash = params.currentHash ?? calculateHash(params.localContent);
|
|
70
|
+
if (syncState.localHash === currentHash) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
const snapshot = params.cache.getBaseSnapshot(params.id);
|
|
74
|
+
if (!snapshot)
|
|
75
|
+
return false;
|
|
76
|
+
try {
|
|
77
|
+
const reconstructed = reconstructBaseline({
|
|
78
|
+
workspaceRoot: params.workspaceRoot,
|
|
79
|
+
snapshot,
|
|
80
|
+
localContent: params.localContent,
|
|
81
|
+
currentHash,
|
|
82
|
+
syncState,
|
|
83
|
+
relPath: params.relPath,
|
|
84
|
+
candidates: params.candidates,
|
|
85
|
+
fs: params.fs,
|
|
86
|
+
});
|
|
87
|
+
if (reconstructed.matchesDisk) {
|
|
88
|
+
if (params.healOnSpellingMatch !== false) {
|
|
89
|
+
retrackLocalHashOnly(params.cache, {
|
|
90
|
+
id: params.id,
|
|
91
|
+
localHash: currentHash,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// An unreadable or malformed baseline cannot certify the file as untouched.
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=baseline-reconstruction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseline-reconstruction.js","sourceRoot":"","sources":["../../src/sync/baseline-reconstruction.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/bylines.d.ts
CHANGED
|
@@ -20,4 +20,9 @@ export declare function syncRemoteBylines(options: SyncBylinesOptions): Promise<
|
|
|
20
20
|
* Returns cached slugToId and idToSlug maps directly from local DB.
|
|
21
21
|
*/
|
|
22
22
|
export declare function loadLocalBylineMaps(cache: CacheDatabase): BylineMaps;
|
|
23
|
+
/**
|
|
24
|
+
* Extracts raw byline identifiers (IDs or slugs) referenced by a remote article JSON item.
|
|
25
|
+
* Used to detect unknown byline IDs on single-article pull and trigger on-demand sync.
|
|
26
|
+
*/
|
|
27
|
+
export declare function extractRemoteBylineIds(rawItem: Record<string, unknown>): string[];
|
|
23
28
|
//# sourceMappingURL=bylines.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bylines.d.ts","sourceRoot":"","sources":["../../src/sync/bylines.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,gBAAgB,CAAC;AAIvE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AA4CD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAsDxF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,CAEpE"}
|
|
1
|
+
{"version":3,"file":"bylines.d.ts","sourceRoot":"","sources":["../../src/sync/bylines.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,gBAAgB,CAAC;AAIvE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AA4CD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAsDxF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,CAEpE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CA0BjF"}
|
package/dist/sync/bylines.js
CHANGED
|
@@ -110,4 +110,33 @@ export async function syncRemoteBylines(options) {
|
|
|
110
110
|
export function loadLocalBylineMaps(cache) {
|
|
111
111
|
return cache.getBylineMaps();
|
|
112
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Extracts raw byline identifiers (IDs or slugs) referenced by a remote article JSON item.
|
|
115
|
+
* Used to detect unknown byline IDs on single-article pull and trigger on-demand sync.
|
|
116
|
+
*/
|
|
117
|
+
export function extractRemoteBylineIds(rawItem) {
|
|
118
|
+
const ids = new Set();
|
|
119
|
+
const rawBylines = (rawItem.bylines || []);
|
|
120
|
+
if (Array.isArray(rawBylines)) {
|
|
121
|
+
for (const b of rawBylines) {
|
|
122
|
+
if (b.bylineId)
|
|
123
|
+
ids.add(b.bylineId);
|
|
124
|
+
if (b.byline?.id)
|
|
125
|
+
ids.add(b.byline.id);
|
|
126
|
+
if (b.byline?.slug)
|
|
127
|
+
ids.add(b.byline.slug);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (rawItem.byline && typeof rawItem.byline === 'object') {
|
|
131
|
+
const single = rawItem.byline;
|
|
132
|
+
if (single.id)
|
|
133
|
+
ids.add(single.id);
|
|
134
|
+
if (single.slug)
|
|
135
|
+
ids.add(single.slug);
|
|
136
|
+
}
|
|
137
|
+
if (typeof rawItem.primaryBylineId === 'string' && rawItem.primaryBylineId) {
|
|
138
|
+
ids.add(rawItem.primaryBylineId);
|
|
139
|
+
}
|
|
140
|
+
return Array.from(ids);
|
|
141
|
+
}
|
|
113
142
|
//# sourceMappingURL=bylines.js.map
|
package/dist/sync/bylines.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bylines.js","sourceRoot":"","sources":["../../src/sync/bylines.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bylines.js","sourceRoot":"","sources":["../../src/sync/bylines.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../../src/sync/conflicts.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../../src/sync/conflicts.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/conflicts.js
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
import fs from 'node:fs';
|
|
23
23
|
import path from 'node:path';
|
|
24
24
|
import { parseMarkdown, lenientRepairMarkdownFrontmatter } from '../utils/frontmatter.js';
|
|
25
|
+
import { isLocalFileUnmodified } from './baseline-reconstruction.js';
|
|
25
26
|
import { computeContextDiff } from './diff.js';
|
|
26
27
|
import { calculateHash } from './workspace/index.js';
|
|
27
28
|
export class CanonicalHasUnpushedEditsError extends Error {
|
|
@@ -357,7 +358,6 @@ export function resolveConflict(options) {
|
|
|
357
358
|
// Major 1 Guard: Check if canonical file has unpushed modifications
|
|
358
359
|
if (!options.force && fs.existsSync(canonicalFull)) {
|
|
359
360
|
const canonicalContent = fs.readFileSync(canonicalFull, 'utf8');
|
|
360
|
-
const canonicalHash = calculateHash(canonicalContent);
|
|
361
361
|
let canonicalId = id;
|
|
362
362
|
try {
|
|
363
363
|
const parsedCan = parseMarkdown(canonicalContent);
|
|
@@ -367,7 +367,16 @@ export function resolveConflict(options) {
|
|
|
367
367
|
// fallback
|
|
368
368
|
}
|
|
369
369
|
const syncState = options.cache.getSyncState(canonicalId);
|
|
370
|
-
if (syncState &&
|
|
370
|
+
if (syncState &&
|
|
371
|
+
!isLocalFileUnmodified({
|
|
372
|
+
workspaceRoot: options.workspaceRoot,
|
|
373
|
+
cache: options.cache,
|
|
374
|
+
id: canonicalId,
|
|
375
|
+
relPath: canonicalRel,
|
|
376
|
+
localContent: canonicalContent,
|
|
377
|
+
syncState,
|
|
378
|
+
healOnSpellingMatch: false,
|
|
379
|
+
})) {
|
|
371
380
|
throw new CanonicalHasUnpushedEditsError({
|
|
372
381
|
canonicalFilePath: canonicalRel,
|
|
373
382
|
conflictFilePath: relPath,
|
|
@@ -479,7 +488,6 @@ export function pruneConflicts(options) {
|
|
|
479
488
|
const canonicalFull = path.join(options.workspaceRoot, canonicalRel);
|
|
480
489
|
if (fs.existsSync(canonicalFull)) {
|
|
481
490
|
const canonicalContent = fs.readFileSync(canonicalFull, 'utf8');
|
|
482
|
-
const canonicalHash = calculateHash(canonicalContent);
|
|
483
491
|
let resolvedId = item.id;
|
|
484
492
|
if (!resolvedId) {
|
|
485
493
|
try {
|
|
@@ -493,7 +501,16 @@ export function pruneConflicts(options) {
|
|
|
493
501
|
const syncState = resolvedId
|
|
494
502
|
? options.cache.getSyncState(resolvedId)
|
|
495
503
|
: options.cache.getSyncStateByPath(canonicalRel);
|
|
496
|
-
if (syncState &&
|
|
504
|
+
if (syncState &&
|
|
505
|
+
!isLocalFileUnmodified({
|
|
506
|
+
workspaceRoot: options.workspaceRoot,
|
|
507
|
+
cache: options.cache,
|
|
508
|
+
id: syncState.id,
|
|
509
|
+
relPath: canonicalRel,
|
|
510
|
+
localContent: canonicalContent,
|
|
511
|
+
syncState,
|
|
512
|
+
healOnSpellingMatch: true,
|
|
513
|
+
})) {
|
|
497
514
|
skipped.push({
|
|
498
515
|
filePath: item.filePath,
|
|
499
516
|
reason: `Canonical article ${canonicalRel} has unpushed modifications; rescue copy preserved`,
|