@noesis-brain/mcp-server 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +218 -0
- package/dist/api/NoesisClient.d.ts +501 -0
- package/dist/api/NoesisClient.d.ts.map +1 -0
- package/dist/api/NoesisClient.js +654 -0
- package/dist/api/NoesisClient.js.map +1 -0
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +148 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/database/PostgresAdapter.d.ts +385 -0
- package/dist/database/PostgresAdapter.d.ts.map +1 -0
- package/dist/database/PostgresAdapter.js +1043 -0
- package/dist/database/PostgresAdapter.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +126 -0
- package/dist/index.js.map +1 -0
- package/dist/services/embedding.d.ts +38 -0
- package/dist/services/embedding.d.ts.map +1 -0
- package/dist/services/embedding.js +126 -0
- package/dist/services/embedding.js.map +1 -0
- package/dist/tools/SyncStateManager.d.ts +65 -0
- package/dist/tools/SyncStateManager.d.ts.map +1 -0
- package/dist/tools/SyncStateManager.js +217 -0
- package/dist/tools/SyncStateManager.js.map +1 -0
- package/dist/tools/index.d.ts +14 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3345 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/navis.d.ts +11 -0
- package/dist/tools/navis.d.ts.map +1 -0
- package/dist/tools/navis.js +231 -0
- package/dist/tools/navis.js.map +1 -0
- package/dist/types/index.d.ts +104 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/suggestPath.d.ts +15 -0
- package/dist/utils/suggestPath.d.ts.map +1 -0
- package/dist/utils/suggestPath.js +52 -0
- package/dist/utils/suggestPath.js.map +1 -0
- package/package.json +71 -0
- package/scripts/noesis-sync.mjs +469 -0
- package/skill-templates/noesis-refine-note.md +92 -0
- package/skill-templates/noesis-sync.md +110 -0
- package/templates/claude-md-block.md +22 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SyncStateManager - Hash-based three-way sync comparison + baseline content store
|
|
3
|
+
*
|
|
4
|
+
* State JSON at {rootPath}/.noesis/.sync-state.json:
|
|
5
|
+
* v1 (legacy): { version: 1, hashes: { relPath: hash } }
|
|
6
|
+
* v2 (current): { version: 2, entries: { relPath: { hash, lastSyncedAt } } }
|
|
7
|
+
* Both are accepted on load; v1 is rewritten as v2 on next save.
|
|
8
|
+
*
|
|
9
|
+
* Baseline content: {rootPath}/.noesis/baseline/{relPath} mirrors the exact markdown
|
|
10
|
+
* last successfully synced. Required by the MCP three-tier conflict cascade
|
|
11
|
+
* (anchor reapply → node-diff3 → structured BASE/LOCAL/CLOUD report).
|
|
12
|
+
*/
|
|
13
|
+
import * as fs from 'fs';
|
|
14
|
+
import * as path from 'path';
|
|
15
|
+
/**
|
|
16
|
+
* Determine sync direction using three-way hash comparison.
|
|
17
|
+
*
|
|
18
|
+
* Extra defense: when `cloudEditedOnlineAt` is newer than `baselineLastSyncedAt`,
|
|
19
|
+
* cloud counts as changed-since-baseline even if the cloud hash happens to match
|
|
20
|
+
* baseline (defense against hash collisions and metadata-only re-hash drift).
|
|
21
|
+
*/
|
|
22
|
+
export function determineSyncDirection(localHash, cloudHash, baselineHash, localMtime, cloudMtime, cloudEditedOnlineAt, baselineLastSyncedAt) {
|
|
23
|
+
// Same content on both sides — nothing to do
|
|
24
|
+
if (localHash === cloudHash)
|
|
25
|
+
return 'skip';
|
|
26
|
+
// Baseline exists — three-way comparison
|
|
27
|
+
if (baselineHash !== undefined) {
|
|
28
|
+
const localChanged = localHash !== baselineHash;
|
|
29
|
+
let cloudChanged = cloudHash !== baselineHash;
|
|
30
|
+
// Defense: trust the explicit edited_online_at signal when it postdates baseline.
|
|
31
|
+
if (!cloudChanged &&
|
|
32
|
+
cloudEditedOnlineAt &&
|
|
33
|
+
(!baselineLastSyncedAt || new Date(cloudEditedOnlineAt) > new Date(baselineLastSyncedAt))) {
|
|
34
|
+
cloudChanged = true;
|
|
35
|
+
}
|
|
36
|
+
if (localChanged && !cloudChanged)
|
|
37
|
+
return 'push';
|
|
38
|
+
if (!localChanged && cloudChanged)
|
|
39
|
+
return 'pull';
|
|
40
|
+
if (localChanged && cloudChanged)
|
|
41
|
+
return 'conflict';
|
|
42
|
+
return 'skip';
|
|
43
|
+
}
|
|
44
|
+
// No baseline — fall back to timestamp comparison (existing behavior)
|
|
45
|
+
const TOLERANCE_MS = 1000;
|
|
46
|
+
const timeDiff = localMtime - cloudMtime;
|
|
47
|
+
if (Math.abs(timeDiff) < TOLERANCE_MS)
|
|
48
|
+
return 'conflict';
|
|
49
|
+
return timeDiff > 0 ? 'push' : 'pull';
|
|
50
|
+
}
|
|
51
|
+
export class SyncStateManager {
|
|
52
|
+
statePath;
|
|
53
|
+
baselineDir;
|
|
54
|
+
state = null;
|
|
55
|
+
dirty = false;
|
|
56
|
+
normalizeKey(relativePath) {
|
|
57
|
+
let normalized = relativePath.replace(/\\/g, '/');
|
|
58
|
+
if (normalized.length >= 2 && normalized[1] === ':') {
|
|
59
|
+
normalized = normalized[0].toLowerCase() + normalized.slice(1);
|
|
60
|
+
}
|
|
61
|
+
return normalized;
|
|
62
|
+
}
|
|
63
|
+
constructor(rootPath) {
|
|
64
|
+
this.statePath = path.join(rootPath, '.noesis', '.sync-state.json');
|
|
65
|
+
this.baselineDir = path.join(rootPath, '.noesis', 'baseline');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Load state from disk. Accepts both v1 and v2; upgrades v1 to v2 in memory
|
|
69
|
+
* (re-written to disk on next save).
|
|
70
|
+
*/
|
|
71
|
+
load() {
|
|
72
|
+
try {
|
|
73
|
+
if (fs.existsSync(this.statePath)) {
|
|
74
|
+
const raw = fs.readFileSync(this.statePath, 'utf-8');
|
|
75
|
+
const parsed = JSON.parse(raw);
|
|
76
|
+
if (parsed && parsed.version === 2 && typeof parsed.entries === 'object') {
|
|
77
|
+
this.state = parsed;
|
|
78
|
+
this.dirty = false;
|
|
79
|
+
}
|
|
80
|
+
else if (parsed && parsed.version === 1 && typeof parsed.hashes === 'object') {
|
|
81
|
+
// v1 → v2 upgrade: lastSyncedAt unknown; baseline files absent until next successful sync.
|
|
82
|
+
const v1 = parsed;
|
|
83
|
+
const entries = {};
|
|
84
|
+
for (const [k, hash] of Object.entries(v1.hashes)) {
|
|
85
|
+
entries[k] = { hash, lastSyncedAt: undefined };
|
|
86
|
+
}
|
|
87
|
+
this.state = { version: 2, entries };
|
|
88
|
+
this.dirty = true; // re-save as v2 next chance
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
this.state = null;
|
|
92
|
+
this.dirty = false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
this.state = null;
|
|
97
|
+
this.dirty = false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Corrupted file — start fresh
|
|
102
|
+
this.state = null;
|
|
103
|
+
this.dirty = false;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** Get the baseline hash for a file from the last successful sync. */
|
|
107
|
+
getBaseline(relativePath) {
|
|
108
|
+
return this.state?.entries[this.normalizeKey(relativePath)]?.hash;
|
|
109
|
+
}
|
|
110
|
+
/** Get the full baseline metadata (hash + lastSyncedAt). */
|
|
111
|
+
getBaselineMeta(relativePath) {
|
|
112
|
+
return this.state?.entries[this.normalizeKey(relativePath)];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Set the baseline hash + lastSyncedAt after a successful sync operation.
|
|
116
|
+
* Optionally provide content to mirror under .noesis/baseline/<relPath>.
|
|
117
|
+
*
|
|
118
|
+
* Backward-compat: callers may pass just `(relativePath, hash)` (string) — old shape.
|
|
119
|
+
*/
|
|
120
|
+
setBaseline(relativePath, hashOrMeta, content) {
|
|
121
|
+
const meta = typeof hashOrMeta === 'string'
|
|
122
|
+
? { hash: hashOrMeta, lastSyncedAt: undefined }
|
|
123
|
+
: hashOrMeta;
|
|
124
|
+
if (!this.state) {
|
|
125
|
+
this.state = { version: 2, entries: {} };
|
|
126
|
+
}
|
|
127
|
+
const key = this.normalizeKey(relativePath);
|
|
128
|
+
const existing = this.state.entries[key];
|
|
129
|
+
if (!existing || existing.hash !== meta.hash || existing.lastSyncedAt !== meta.lastSyncedAt) {
|
|
130
|
+
this.state.entries[key] = { hash: meta.hash, lastSyncedAt: meta.lastSyncedAt };
|
|
131
|
+
this.dirty = true;
|
|
132
|
+
}
|
|
133
|
+
if (content !== undefined) {
|
|
134
|
+
this.writeBaselineContent(relativePath, content);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/** Remove baseline (state entry + on-disk content file) for a deleted/renamed file. */
|
|
138
|
+
removeBaseline(relativePath) {
|
|
139
|
+
const key = this.normalizeKey(relativePath);
|
|
140
|
+
if (this.state && key in this.state.entries) {
|
|
141
|
+
delete this.state.entries[key];
|
|
142
|
+
this.dirty = true;
|
|
143
|
+
}
|
|
144
|
+
this.removeBaselineContent(relativePath);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Remove baselines for paths not in the active set (cleanup deleted/renamed files).
|
|
148
|
+
* Also deletes corresponding baseline content files.
|
|
149
|
+
*/
|
|
150
|
+
pruneStale(activePaths) {
|
|
151
|
+
if (!this.state)
|
|
152
|
+
return;
|
|
153
|
+
const normalizedActive = new Set();
|
|
154
|
+
for (const p of activePaths)
|
|
155
|
+
normalizedActive.add(this.normalizeKey(p));
|
|
156
|
+
for (const key of Object.keys(this.state.entries)) {
|
|
157
|
+
if (!normalizedActive.has(key)) {
|
|
158
|
+
delete this.state.entries[key];
|
|
159
|
+
this.dirty = true;
|
|
160
|
+
this.removeBaselineContent(key);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/** Read baseline content from disk. Returns undefined for v1-upgraded entries (no file). */
|
|
165
|
+
getBaselineContent(relativePath) {
|
|
166
|
+
const key = this.normalizeKey(relativePath);
|
|
167
|
+
const filePath = path.join(this.baselineDir, key);
|
|
168
|
+
try {
|
|
169
|
+
if (fs.existsSync(filePath))
|
|
170
|
+
return fs.readFileSync(filePath, 'utf-8');
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// Baseline content is best-effort; tier C will fall back to two-way merge.
|
|
174
|
+
}
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
/** Write baseline content to disk under .noesis/baseline/<relPath>. */
|
|
178
|
+
setBaselineContent(relativePath, content) {
|
|
179
|
+
this.writeBaselineContent(relativePath, content);
|
|
180
|
+
}
|
|
181
|
+
writeBaselineContent(relativePath, content) {
|
|
182
|
+
const key = this.normalizeKey(relativePath);
|
|
183
|
+
const filePath = path.join(this.baselineDir, key);
|
|
184
|
+
try {
|
|
185
|
+
const dir = path.dirname(filePath);
|
|
186
|
+
if (!fs.existsSync(dir))
|
|
187
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
188
|
+
fs.writeFileSync(filePath, content, 'utf-8');
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
// Don't fail the sync if baseline write fails; tier A/B simply won't have a baseline next time.
|
|
192
|
+
console.warn(`Failed to write baseline content for ${relativePath}:`, err);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
removeBaselineContent(relativePath) {
|
|
196
|
+
const key = this.normalizeKey(relativePath);
|
|
197
|
+
const filePath = path.join(this.baselineDir, key);
|
|
198
|
+
try {
|
|
199
|
+
if (fs.existsSync(filePath))
|
|
200
|
+
fs.unlinkSync(filePath);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
// Best-effort cleanup
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/** Write state to disk only if dirty. Creates .noesis dir if needed. */
|
|
207
|
+
save() {
|
|
208
|
+
if (!this.dirty || !this.state)
|
|
209
|
+
return;
|
|
210
|
+
const dir = path.dirname(this.statePath);
|
|
211
|
+
if (!fs.existsSync(dir))
|
|
212
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
213
|
+
fs.writeFileSync(this.statePath, JSON.stringify(this.state, null, 2), 'utf-8');
|
|
214
|
+
this.dirty = false;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=SyncStateManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncStateManager.js","sourceRoot":"","sources":["../../src/tools/SyncStateManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool registry for md-manager MCP server
|
|
3
|
+
*/
|
|
4
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
5
|
+
import { NoesisClient } from '../api/NoesisClient.js';
|
|
6
|
+
export interface ToolServices {
|
|
7
|
+
client: NoesisClient;
|
|
8
|
+
geminiApiKey?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Register all MCP tools with the server
|
|
12
|
+
*/
|
|
13
|
+
export declare function registerTools(server: McpServer, services: ToolServices): void;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAkG,MAAM,wBAAwB,CAAC;AAqJtJ,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAwpF7E"}
|