@monoes/monomindcli 2.3.4 → 2.5.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/.claude/helpers/handlers/route-handler.cjs +5 -2
- package/README.md +2 -0
- package/dist/src/commands/doc.d.ts.map +1 -1
- package/dist/src/commands/doc.js +36 -8
- package/dist/src/commands/doc.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts.map +1 -1
- package/dist/src/init/claudemd-generator.js +7 -4
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/knowledge/document-pipeline.d.ts +2 -0
- package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
- package/dist/src/knowledge/document-pipeline.js +0 -0
- package/dist/src/knowledge/document-pipeline.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +9 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +84 -56
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/orgrt/daemon.d.ts +8 -0
- package/dist/src/orgrt/daemon.d.ts.map +1 -1
- package/dist/src/orgrt/daemon.js +22 -0
- package/dist/src/orgrt/daemon.js.map +1 -1
- package/dist/src/orgrt/session.d.ts +2 -0
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +5 -0
- package/dist/src/orgrt/session.js.map +1 -1
- package/dist/src/ui/dashboard.html +11 -2
- package/dist/src/ui/server.mjs +48 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/orgrt/session.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAKjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/orgrt/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1917,6 +1917,11 @@ select.pb-cfg-inp { padding: 4px 7px; cursor: pointer; }
|
|
|
1917
1917
|
<div class="filter-bar" style="margin-bottom:6px">
|
|
1918
1918
|
<input class="filter-input" id="sb-search-input" type="text" placeholder="Ask your Second Brain — semantic search by meaning…"
|
|
1919
1919
|
onkeydown="if(event.key==='Enter')secondBrainSearch()">
|
|
1920
|
+
<select id="sb-search-scope" class="btn" title="Which brain to search" style="padding:3px 6px">
|
|
1921
|
+
<option value="all" selected>project + global</option>
|
|
1922
|
+
<option value="project">project only</option>
|
|
1923
|
+
<option value="global">global only</option>
|
|
1924
|
+
</select>
|
|
1920
1925
|
<button class="btn" onclick="secondBrainSearch()" title="Semantic search (warm local model)">⌕ Search</button>
|
|
1921
1926
|
</div>
|
|
1922
1927
|
<div id="sb-search-results" style="display:none;margin-bottom:12px"></div>
|
|
@@ -13609,10 +13614,11 @@ async function secondBrainSearch() {
|
|
|
13609
13614
|
box.style.display = 'block';
|
|
13610
13615
|
box.innerHTML = '<div class="loading-txt">Searching…</div>';
|
|
13611
13616
|
try {
|
|
13617
|
+
const scopeSel = document.getElementById('sb-search-scope');
|
|
13612
13618
|
const r = await fetch('/api/knowledge/search', {
|
|
13613
13619
|
method: 'POST',
|
|
13614
13620
|
headers: { 'Content-Type': 'application/json' },
|
|
13615
|
-
body: JSON.stringify({ query: q, limit: 5 }),
|
|
13621
|
+
body: JSON.stringify({ query: q, limit: 5, scope: scopeSel ? scopeSel.value : 'all' }),
|
|
13616
13622
|
});
|
|
13617
13623
|
if (!r.ok) throw new Error('HTTP ' + r.status);
|
|
13618
13624
|
const data = await r.json();
|
|
@@ -13625,8 +13631,11 @@ async function secondBrainSearch() {
|
|
|
13625
13631
|
'<div style="font-size:10px;letter-spacing:0.07em;text-transform:uppercase;color:var(--text-xs);margin-bottom:6px">' +
|
|
13626
13632
|
results.length + ' result(s) · ' + esc(data.method || '') + '</div>' +
|
|
13627
13633
|
results.map(function (res) {
|
|
13634
|
+
var srcTag = (res.tags || []).find(function (t) { return t.indexOf('src:') === 0; });
|
|
13635
|
+
var label = srcTag ? srcTag.slice(4).split('/').slice(-2).join('/') : (res.key || '');
|
|
13628
13636
|
return '<div style="border:1px solid var(--border);border-radius:8px;padding:8px 10px;margin-bottom:6px">' +
|
|
13629
|
-
'<div style="font-size:10px;color:var(--text-lo);margin-bottom:3px">' + esc(
|
|
13637
|
+
'<div style="font-size:10px;color:var(--text-lo);margin-bottom:3px">' + esc(label) +
|
|
13638
|
+
(res.global ? ' <span style="color:var(--accent-dim,#888);border:1px solid var(--border);border-radius:4px;padding:0 4px">global</span>' : '') +
|
|
13630
13639
|
' <span style="color:var(--accent)">' + (typeof res.score === 'number' ? res.score.toFixed(2) : '') + '</span></div>' +
|
|
13631
13640
|
'<div style="font-size:12px;white-space:pre-wrap;max-height:120px;overflow:hidden">' + esc(String(res.content || '').slice(0, 600)) + '</div>' +
|
|
13632
13641
|
'</div>';
|
package/dist/src/ui/server.mjs
CHANGED
|
@@ -1035,6 +1035,41 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1035
1035
|
.catch(() => { /* warm-up is best-effort */ });
|
|
1036
1036
|
}, 3000);
|
|
1037
1037
|
if (_warmTimer.unref) _warmTimer.unref();
|
|
1038
|
+
|
|
1039
|
+
// ── Second Brain live ingestion ──────────────────────────────────
|
|
1040
|
+
// This server is the one long-lived local process AND holds the warm
|
|
1041
|
+
// embedding model — so it watches for document changes and ingests
|
|
1042
|
+
// in-process within seconds, instead of waiting for the next session
|
|
1043
|
+
// start. Best-effort: recursive fs.watch is unsupported on some
|
|
1044
|
+
// platforms/volumes; the session-start reindex remains the backstop.
|
|
1045
|
+
try {
|
|
1046
|
+
const _sbDocExts = new Set(['.md', '.txt', '.pdf', '.docx']);
|
|
1047
|
+
const _sbSkip = /(^|\/)(node_modules|\.git|dist|\.monomind|\.claude|\.next|__pycache__|\.venv|vendor)(\/|$)/;
|
|
1048
|
+
const _sbPending = new Map(); // file -> debounce timer
|
|
1049
|
+
const _sbRoot = path.resolve(projectDir || process.cwd());
|
|
1050
|
+
const _sbWatcher = fs.watch(_sbRoot, { recursive: true }, (_evt, rel) => {
|
|
1051
|
+
try {
|
|
1052
|
+
if (!rel) return;
|
|
1053
|
+
const relStr = String(rel);
|
|
1054
|
+
if (_sbSkip.test(relStr) || relStr.startsWith('.')) return;
|
|
1055
|
+
if (!_sbDocExts.has(path.extname(relStr).toLowerCase())) return;
|
|
1056
|
+
const full = path.join(_sbRoot, relStr);
|
|
1057
|
+
clearTimeout(_sbPending.get(full));
|
|
1058
|
+
_sbPending.set(full, setTimeout(async () => {
|
|
1059
|
+
_sbPending.delete(full);
|
|
1060
|
+
try {
|
|
1061
|
+
if (!fs.existsSync(full)) return; // deleted — session-start reindex handles removal
|
|
1062
|
+
const pipeline = await import('../knowledge/document-pipeline.js');
|
|
1063
|
+
const r = await pipeline.ingestDocument(full, 'shared', _sbRoot);
|
|
1064
|
+
if (r.chunksIndexed > 0 && !r.skipped) {
|
|
1065
|
+
console.log(`[knowledge] live-ingested ${path.basename(full)} (${r.chunksIndexed} chunks)`);
|
|
1066
|
+
}
|
|
1067
|
+
} catch (_) { /* single-file ingest failure never matters here */ }
|
|
1068
|
+
}, 5000));
|
|
1069
|
+
} catch (_) { /* watcher callback must never throw */ }
|
|
1070
|
+
});
|
|
1071
|
+
activeWatchers.push(_sbWatcher);
|
|
1072
|
+
} catch (_) { /* recursive watch unavailable — session-start reindex covers it */ }
|
|
1038
1073
|
}
|
|
1039
1074
|
} catch (_) { /* non-fatal */ }
|
|
1040
1075
|
|
|
@@ -5950,11 +5985,21 @@ new Sigma(g,document.getElementById('g'),{renderEdgeLabels:false,labelColor:{col
|
|
|
5950
5985
|
res.end('{"error":"knowledge bridge unavailable"}');
|
|
5951
5986
|
return;
|
|
5952
5987
|
}
|
|
5953
|
-
|
|
5988
|
+
// scope: project | global | all (default all) — project results get a
|
|
5989
|
+
// small tie boost; global hits are flagged so callers can show origin.
|
|
5990
|
+
const scope = payload.scope === 'project' || payload.scope === 'global' ? payload.scope : 'all';
|
|
5991
|
+
const [proj, glob] = await Promise.all([
|
|
5992
|
+
scope !== 'global' ? bridge.bridgeSearchEntries({ query, namespace, limit }).catch(() => null) : null,
|
|
5993
|
+
scope !== 'project' ? bridge.bridgeSearchEntries({ query, namespace: 'knowledge:global', limit, dbPath: '@global' }).catch(() => null) : null,
|
|
5994
|
+
]);
|
|
5995
|
+
const merged = [
|
|
5996
|
+
...(proj?.results || []).map(r => ({ key: r.key, content: String(r.content || '').slice(0, 2000), score: r.score + 0.05, global: false, tags: r.tags })),
|
|
5997
|
+
...(glob?.results || []).map(r => ({ key: r.key, content: String(r.content || '').slice(0, 2000), score: r.score, global: true, tags: r.tags })),
|
|
5998
|
+
].sort((a, b) => b.score - a.score).slice(0, limit);
|
|
5954
5999
|
res.writeHead(200, { 'Content-Type': 'application/json', ...(corsOrigin ? { 'Access-Control-Allow-Origin': corsOrigin } : {}) });
|
|
5955
6000
|
res.end(JSON.stringify({
|
|
5956
|
-
method:
|
|
5957
|
-
results:
|
|
6001
|
+
method: proj?.searchMethod || glob?.searchMethod || 'none',
|
|
6002
|
+
results: merged,
|
|
5958
6003
|
}));
|
|
5959
6004
|
} catch (err) {
|
|
5960
6005
|
res.writeHead(500, { 'Content-Type': 'application/json' });
|