@danielmarbach/mnemonic-mcp 0.12.0 → 0.12.2
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 +13 -0
- package/build/git.d.ts +17 -0
- package/build/git.d.ts.map +1 -1
- package/build/git.js +83 -6
- package/build/git.js.map +1 -1
- package/build/index.js +25 -3
- package/build/index.js.map +1 -1
- package/build/structured-content.d.ts +19 -0
- package/build/structured-content.d.ts.map +1 -1
- package/build/structured-content.js +6 -0
- package/build/structured-content.js.map +1 -1
- package/build/vault.d.ts.map +1 -1
- package/build/vault.js +8 -6
- package/build/vault.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,19 @@ All notable changes to `mnemonic` will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is loosely based on Keep a Changelog and uses semver-style version headings.
|
|
6
6
|
|
|
7
|
+
## [0.12.2] - 2026-03-19
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Project vault gitignore is now only created during intentional vault creation (`getOrCreateProjectVault`), not during read-only access via `getProjectVaultIfExists`.
|
|
12
|
+
|
|
13
|
+
## [0.12.1] - 2026-03-18
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- `sync` now surfaces git failures as structured per-phase errors (`fetch`, `pull`, `push`) instead of silently swallowing them — merge conflicts include conflicted file paths and an actionable resolution hint.
|
|
18
|
+
- `SyncResult` structured output gains a `gitError` field per vault so callers can distinguish a clean no-op from a failed sync.
|
|
19
|
+
|
|
7
20
|
## [0.12.0] - 2026-03-15
|
|
8
21
|
|
|
9
22
|
### Added
|
package/build/git.d.ts
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
export declare class GitOperationError extends Error {
|
|
2
2
|
constructor(operation: "add" | "commit" | "push", cause: unknown);
|
|
3
3
|
}
|
|
4
|
+
export interface SyncGitError {
|
|
5
|
+
/** Which git operation failed */
|
|
6
|
+
phase: "fetch" | "pull" | "push";
|
|
7
|
+
message: string;
|
|
8
|
+
/** True when the failure is a merge/rebase conflict requiring manual resolution */
|
|
9
|
+
isConflict: boolean;
|
|
10
|
+
/** Files with conflict markers, when detectable */
|
|
11
|
+
conflictFiles?: string[];
|
|
12
|
+
}
|
|
4
13
|
export interface SyncResult {
|
|
5
14
|
hasRemote: boolean;
|
|
6
15
|
/** Note ids that arrived or changed during pull (need re-embedding) */
|
|
@@ -9,6 +18,8 @@ export interface SyncResult {
|
|
|
9
18
|
deletedNoteIds: string[];
|
|
10
19
|
/** Number of local commits pushed to remote */
|
|
11
20
|
pushedCommits: number;
|
|
21
|
+
/** Set when any git operation in the sync sequence failed */
|
|
22
|
+
gitError?: SyncGitError;
|
|
12
23
|
}
|
|
13
24
|
export interface CommitResult {
|
|
14
25
|
status: "committed" | "skipped" | "failed";
|
|
@@ -65,6 +76,12 @@ export declare class GitOps {
|
|
|
65
76
|
* re-embedding for notes that arrived from the remote.
|
|
66
77
|
*/
|
|
67
78
|
sync(): Promise<SyncResult>;
|
|
79
|
+
private getConflictFiles;
|
|
80
|
+
/**
|
|
81
|
+
* Checks git's internal state files to detect an in-progress rebase or merge conflict.
|
|
82
|
+
* Language-independent: these paths are git internals, not localized error messages.
|
|
83
|
+
*/
|
|
84
|
+
private isConflictInProgress;
|
|
68
85
|
/** Push only — used after individual remember/update/forget commits */
|
|
69
86
|
push(): Promise<void>;
|
|
70
87
|
pushWithStatus(): Promise<PushResult>;
|
package/build/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAIA,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO;CAKjE;AAED,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,UAAU,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,2CAA2C;IAC3C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC3C,MAAM,CAAC,EAAE,cAAc,GAAG,YAAY,GAAG,OAAO,CAAC;IACjD,sDAAsD;IACtD,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,MAAM,CAAC,EAAE,cAAc,GAAG,WAAW,GAAG,oBAAoB,GAAG,eAAe,CAAC;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,EAAE,MAAM,EAAE,WAAW,GAAE,MAAgB;IAMpD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B;;;;;;;;;;;;;;;;;;OAkBG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQzE,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAmC9F;;;OAGG;YACW,YAAY;IA4B1B;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;YA6EnB,gBAAgB;IAS9B;;;OAGG;YACW,oBAAoB;IAkBlC,uEAAuE;IACjE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC;YAiB7B,WAAW;YASX,oBAAoB;IASlC;;;OAGG;YACW,cAAc;CAuC7B"}
|
package/build/git.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { access } from "fs/promises";
|
|
2
|
+
import path from "path";
|
|
1
3
|
import { simpleGit } from "simple-git";
|
|
2
4
|
export class GitOperationError extends Error {
|
|
3
5
|
constructor(operation, cause) {
|
|
@@ -135,21 +137,96 @@ export class GitOps {
|
|
|
135
137
|
const remotes = await this.git.getRemotes();
|
|
136
138
|
if (remotes.length === 0)
|
|
137
139
|
return empty;
|
|
140
|
+
const withRemote = {
|
|
141
|
+
hasRemote: true,
|
|
142
|
+
pulledNoteIds: [],
|
|
143
|
+
deletedNoteIds: [],
|
|
144
|
+
pushedCommits: 0,
|
|
145
|
+
};
|
|
146
|
+
// Phase 1: fetch
|
|
138
147
|
try {
|
|
139
148
|
await this.git.fetch();
|
|
140
|
-
|
|
141
|
-
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
152
|
+
console.error(`[git] Sync fetch failed: ${message}`);
|
|
153
|
+
return { ...withRemote, gitError: { phase: "fetch", message, isConflict: false } };
|
|
154
|
+
}
|
|
155
|
+
const unpushed = await this.countUnpushedCommits();
|
|
156
|
+
const localHead = await this.currentHead();
|
|
157
|
+
// Phase 2: pull (rebase)
|
|
158
|
+
try {
|
|
142
159
|
await this.git.pull(["--rebase"]);
|
|
143
160
|
console.error("[git] Pulled (rebase)");
|
|
144
|
-
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
164
|
+
console.error(`[git] Sync pull failed: ${message}`);
|
|
165
|
+
// Use language-independent checks: conflicted files from git status (porcelain codes,
|
|
166
|
+
// not localized) and git internal state files (.git/rebase-merge, .git/rebase-apply,
|
|
167
|
+
// .git/MERGE_HEAD) rather than error message keywords.
|
|
168
|
+
const conflictFiles = await this.getConflictFiles();
|
|
169
|
+
const isConflict = conflictFiles.length > 0 || await this.isConflictInProgress();
|
|
170
|
+
return {
|
|
171
|
+
...withRemote,
|
|
172
|
+
gitError: {
|
|
173
|
+
phase: "pull",
|
|
174
|
+
message,
|
|
175
|
+
isConflict,
|
|
176
|
+
conflictFiles: conflictFiles.length > 0 ? conflictFiles : undefined,
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
const { pulledNoteIds, deletedNoteIds } = await this.diffNotesSince(localHead);
|
|
181
|
+
// Phase 3: push
|
|
182
|
+
try {
|
|
145
183
|
await this.git.push();
|
|
146
184
|
console.error(`[git] Pushed ${unpushed} local commit(s)`);
|
|
147
|
-
return { hasRemote: true, pulledNoteIds, deletedNoteIds, pushedCommits: unpushed };
|
|
148
185
|
}
|
|
149
186
|
catch (err) {
|
|
150
|
-
|
|
151
|
-
|
|
187
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
188
|
+
console.error(`[git] Sync push failed: ${message}`);
|
|
189
|
+
// Pull succeeded — return partial success with the pulled notes and the push error
|
|
190
|
+
return {
|
|
191
|
+
hasRemote: true,
|
|
192
|
+
pulledNoteIds,
|
|
193
|
+
deletedNoteIds,
|
|
194
|
+
pushedCommits: 0,
|
|
195
|
+
gitError: { phase: "push", message, isConflict: false },
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
return { hasRemote: true, pulledNoteIds, deletedNoteIds, pushedCommits: unpushed };
|
|
199
|
+
}
|
|
200
|
+
async getConflictFiles() {
|
|
201
|
+
try {
|
|
202
|
+
const status = await this.git.status();
|
|
203
|
+
return status.conflicted;
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
return [];
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Checks git's internal state files to detect an in-progress rebase or merge conflict.
|
|
211
|
+
* Language-independent: these paths are git internals, not localized error messages.
|
|
212
|
+
*/
|
|
213
|
+
async isConflictInProgress() {
|
|
214
|
+
const gitDir = path.join(this.gitRoot, ".git");
|
|
215
|
+
const statePaths = [
|
|
216
|
+
path.join(gitDir, "rebase-merge"), // interactive / --merge rebase
|
|
217
|
+
path.join(gitDir, "rebase-apply"), // --apply strategy rebase
|
|
218
|
+
path.join(gitDir, "MERGE_HEAD"), // plain merge conflict
|
|
219
|
+
];
|
|
220
|
+
for (const p of statePaths) {
|
|
221
|
+
try {
|
|
222
|
+
await access(p);
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// not present — try next
|
|
227
|
+
}
|
|
152
228
|
}
|
|
229
|
+
return false;
|
|
153
230
|
}
|
|
154
231
|
/** Push only — used after individual remember/update/forget commits */
|
|
155
232
|
async push() {
|
package/build/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,YAAY,CAAC;AAElD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,SAAoC,EAAE,KAAc;QAC9D,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,KAAK,CAAC,OAAO,SAAS,YAAY,MAAM,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -580,10 +580,28 @@ async function removeStaleEmbeddings(storage, noteIds) {
|
|
|
580
580
|
catch { /* already gone */ }
|
|
581
581
|
}
|
|
582
582
|
}
|
|
583
|
-
function formatSyncResult(result, label) {
|
|
583
|
+
function formatSyncResult(result, label, vaultPath) {
|
|
584
584
|
if (!result.hasRemote)
|
|
585
585
|
return [`${label}: no remote configured — git sync skipped.`];
|
|
586
586
|
const lines = [];
|
|
587
|
+
if (result.gitError) {
|
|
588
|
+
const { phase, message, isConflict, conflictFiles } = result.gitError;
|
|
589
|
+
if (isConflict) {
|
|
590
|
+
lines.push(`${label}: ✗ merge conflict during ${phase}.`);
|
|
591
|
+
if (conflictFiles && conflictFiles.length > 0) {
|
|
592
|
+
lines.push(`${label}: conflicted files: ${conflictFiles.join(", ")}`);
|
|
593
|
+
}
|
|
594
|
+
const where = vaultPath ?? label;
|
|
595
|
+
lines.push(`${label}: resolve conflicts in ${where}, then run sync again.`);
|
|
596
|
+
}
|
|
597
|
+
else {
|
|
598
|
+
lines.push(`${label}: ✗ git ${phase} failed: ${message}`);
|
|
599
|
+
}
|
|
600
|
+
// Still report any partial pull results that came through before the failure
|
|
601
|
+
if (result.pulledNoteIds.length > 0)
|
|
602
|
+
lines.push(`${label}: ↓ ${result.pulledNoteIds.length} note(s) pulled before failure.`);
|
|
603
|
+
return lines;
|
|
604
|
+
}
|
|
587
605
|
lines.push(result.pushedCommits > 0
|
|
588
606
|
? `${label}: ↑ pushed ${result.pushedCommits} commit(s).`
|
|
589
607
|
: `${label}: ↑ nothing to push.`);
|
|
@@ -2543,8 +2561,9 @@ server.registerTool("sync", {
|
|
|
2543
2561
|
const lines = [];
|
|
2544
2562
|
const vaultResults = [];
|
|
2545
2563
|
// Always sync main vault
|
|
2564
|
+
const mainVaultPath = vaultManager.main.storage.vaultPath;
|
|
2546
2565
|
const mainResult = await vaultManager.main.git.sync();
|
|
2547
|
-
lines.push(...formatSyncResult(mainResult, "main vault"));
|
|
2566
|
+
lines.push(...formatSyncResult(mainResult, "main vault", mainVaultPath));
|
|
2548
2567
|
let mainEmbedded = 0;
|
|
2549
2568
|
let mainFailed = [];
|
|
2550
2569
|
const mainBackfill = await backfillEmbeddingsAfterSync(vaultManager.main.storage, "main vault", lines, force);
|
|
@@ -2561,13 +2580,15 @@ server.registerTool("sync", {
|
|
|
2561
2580
|
pushed: mainResult.pushedCommits,
|
|
2562
2581
|
embedded: mainEmbedded,
|
|
2563
2582
|
failed: mainFailed,
|
|
2583
|
+
gitError: mainResult.gitError,
|
|
2564
2584
|
});
|
|
2565
2585
|
// Optionally sync project vault
|
|
2566
2586
|
if (cwd) {
|
|
2567
2587
|
const projectVault = await vaultManager.getProjectVaultIfExists(cwd);
|
|
2568
2588
|
if (projectVault) {
|
|
2589
|
+
const projectVaultPath = projectVault.storage.vaultPath;
|
|
2569
2590
|
const projectResult = await projectVault.git.sync();
|
|
2570
|
-
lines.push(...formatSyncResult(projectResult, "project vault"));
|
|
2591
|
+
lines.push(...formatSyncResult(projectResult, "project vault", projectVaultPath));
|
|
2571
2592
|
let projEmbedded = 0;
|
|
2572
2593
|
let projFailed = [];
|
|
2573
2594
|
const projectBackfill = await backfillEmbeddingsAfterSync(projectVault.storage, "project vault", lines, force);
|
|
@@ -2584,6 +2605,7 @@ server.registerTool("sync", {
|
|
|
2584
2605
|
pushed: projectResult.pushedCommits,
|
|
2585
2606
|
embedded: projEmbedded,
|
|
2586
2607
|
failed: projFailed,
|
|
2608
|
+
gitError: projectResult.gitError,
|
|
2587
2609
|
});
|
|
2588
2610
|
}
|
|
2589
2611
|
else {
|