memorix 0.7.0 → 0.7.1
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 +8 -0
- package/README.md +30 -15
- package/dist/cli/index.js +45 -28
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/static/app.js +2 -1
- package/dist/dashboard/static/style.css +6 -3
- package/dist/index.js +45 -28
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
|
@@ -1014,6 +1014,7 @@ function toggleObsSelect(id) {
|
|
|
1014
1014
|
selectedIds.add(id);
|
|
1015
1015
|
}
|
|
1016
1016
|
renderBatchToolbar();
|
|
1017
|
+
renderObsList();
|
|
1017
1018
|
}
|
|
1018
1019
|
|
|
1019
1020
|
// Make batch functions globally accessible
|
|
@@ -1140,7 +1141,7 @@ function renderObsList() {
|
|
|
1140
1141
|
return `
|
|
1141
1142
|
<div class="obs-card${isLow ? ' low-quality' : ''}" data-obs-id="${obs.id}">
|
|
1142
1143
|
<div class="obs-card-header" onclick="toggleObsDetail(${obs.id})">
|
|
1143
|
-
${batchMode ? `<input type="checkbox" class="obs-checkbox" ${isSelected ? 'checked' : ''} onclick="event.stopPropagation(); toggleObsSelect(${obs.id});
|
|
1144
|
+
${batchMode ? `<input type="checkbox" class="obs-checkbox" ${isSelected ? 'checked' : ''} onclick="event.stopPropagation(); toggleObsSelect(${obs.id});" />` : ''}
|
|
1144
1145
|
<span class="obs-card-id">#${obs.id}</span>
|
|
1145
1146
|
<span class="type-badge" data-type="${obs.type || 'unknown'}">
|
|
1146
1147
|
${typeIcons[obs.type] || '❓'} ${obs.type || 'unknown'}
|
|
@@ -1242,6 +1242,7 @@ body {
|
|
|
1242
1242
|
/* Batch select checkbox */
|
|
1243
1243
|
.obs-checkbox {
|
|
1244
1244
|
appearance: none;
|
|
1245
|
+
position: relative;
|
|
1245
1246
|
width: 16px;
|
|
1246
1247
|
height: 16px;
|
|
1247
1248
|
border: 1.5px solid var(--border-medium);
|
|
@@ -1259,12 +1260,14 @@ body {
|
|
|
1259
1260
|
|
|
1260
1261
|
.obs-checkbox:checked::after {
|
|
1261
1262
|
content: '✓';
|
|
1262
|
-
|
|
1263
|
-
|
|
1263
|
+
position: absolute;
|
|
1264
|
+
top: 50%;
|
|
1265
|
+
left: 50%;
|
|
1266
|
+
transform: translate(-50%, -50%);
|
|
1264
1267
|
font-size: 11px;
|
|
1265
1268
|
color: #000;
|
|
1266
|
-
line-height: 14px;
|
|
1267
1269
|
font-weight: bold;
|
|
1270
|
+
line-height: 1;
|
|
1268
1271
|
}
|
|
1269
1272
|
|
|
1270
1273
|
.obs-detail-section {
|
package/dist/index.js
CHANGED
|
@@ -443,24 +443,26 @@ __export(provider_exports, {
|
|
|
443
443
|
resetProvider: () => resetProvider
|
|
444
444
|
});
|
|
445
445
|
async function getEmbeddingProvider() {
|
|
446
|
-
if (
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
446
|
+
if (initPromise) return initPromise;
|
|
447
|
+
initPromise = (async () => {
|
|
448
|
+
try {
|
|
449
|
+
const { FastEmbedProvider: FastEmbedProvider2 } = await Promise.resolve().then(() => (init_fastembed_provider(), fastembed_provider_exports));
|
|
450
|
+
provider = await FastEmbedProvider2.create();
|
|
451
|
+
console.error(`[memorix] Embedding provider: ${provider.name} (${provider.dimensions}d)`);
|
|
452
|
+
return provider;
|
|
453
|
+
} catch {
|
|
454
|
+
}
|
|
455
|
+
try {
|
|
456
|
+
const { TransformersProvider: TransformersProvider2 } = await Promise.resolve().then(() => (init_transformers_provider(), transformers_provider_exports));
|
|
457
|
+
provider = await TransformersProvider2.create();
|
|
458
|
+
console.error(`[memorix] Embedding provider: ${provider.name} (${provider.dimensions}d)`);
|
|
459
|
+
return provider;
|
|
460
|
+
} catch {
|
|
461
|
+
}
|
|
462
|
+
console.error("[memorix] No embedding provider available \u2014 using fulltext search only");
|
|
463
|
+
return null;
|
|
464
|
+
})();
|
|
465
|
+
return initPromise;
|
|
464
466
|
}
|
|
465
467
|
async function isVectorSearchAvailable() {
|
|
466
468
|
const p = await getEmbeddingProvider();
|
|
@@ -468,15 +470,15 @@ async function isVectorSearchAvailable() {
|
|
|
468
470
|
}
|
|
469
471
|
function resetProvider() {
|
|
470
472
|
provider = null;
|
|
471
|
-
|
|
473
|
+
initPromise = null;
|
|
472
474
|
}
|
|
473
|
-
var provider,
|
|
475
|
+
var provider, initPromise;
|
|
474
476
|
var init_provider = __esm({
|
|
475
477
|
"src/embedding/provider.ts"() {
|
|
476
478
|
"use strict";
|
|
477
479
|
init_esm_shims();
|
|
478
480
|
provider = null;
|
|
479
|
-
|
|
481
|
+
initPromise = null;
|
|
480
482
|
}
|
|
481
483
|
});
|
|
482
484
|
|
|
@@ -1598,7 +1600,7 @@ async function handleApi(req, res, dataDir, projectId, projectName, baseDir) {
|
|
|
1598
1600
|
case "/projects": {
|
|
1599
1601
|
try {
|
|
1600
1602
|
const entries = await fs4.readdir(baseDir, { withFileTypes: true });
|
|
1601
|
-
const projects = entries.filter((e) => e.isDirectory() && e.name.includes("--")).map((e) => {
|
|
1603
|
+
const projects = entries.filter((e) => e.isDirectory() && e.name.includes("--") && !e.name.startsWith("local--")).map((e) => {
|
|
1602
1604
|
const dirName = e.name;
|
|
1603
1605
|
const id = dirName.replace(/--/g, "/");
|
|
1604
1606
|
return {
|
|
@@ -1642,13 +1644,12 @@ async function handleApi(req, res, dataDir, projectId, projectName, baseDir) {
|
|
|
1642
1644
|
const sorted = [...observations2].sort((a, b) => (b.id || 0) - (a.id || 0)).slice(0, 10);
|
|
1643
1645
|
let embeddingStatus = { enabled: false, provider: "", dimensions: 0 };
|
|
1644
1646
|
try {
|
|
1645
|
-
const { isEmbeddingEnabled: isEmbeddingEnabled2 } = await Promise.resolve().then(() => (init_orama_store(), orama_store_exports));
|
|
1646
1647
|
const { getEmbeddingProvider: getEmbeddingProvider2 } = await Promise.resolve().then(() => (init_provider(), provider_exports));
|
|
1647
|
-
const
|
|
1648
|
+
const embProvider = await getEmbeddingProvider2();
|
|
1648
1649
|
embeddingStatus = {
|
|
1649
|
-
enabled:
|
|
1650
|
-
provider:
|
|
1651
|
-
dimensions:
|
|
1650
|
+
enabled: embProvider !== null,
|
|
1651
|
+
provider: embProvider?.name || "",
|
|
1652
|
+
dimensions: embProvider?.dimensions || 0
|
|
1652
1653
|
};
|
|
1653
1654
|
} catch {
|
|
1654
1655
|
}
|
|
@@ -5051,7 +5052,23 @@ ${skill.content}` }]
|
|
|
5051
5052
|
console.error("[memorix] Dashboard error:", err);
|
|
5052
5053
|
dashboardRunning = false;
|
|
5053
5054
|
});
|
|
5054
|
-
|
|
5055
|
+
const { createConnection } = await import("net");
|
|
5056
|
+
await new Promise((resolve2) => {
|
|
5057
|
+
const deadline = Date.now() + 5e3;
|
|
5058
|
+
const tryConnect = () => {
|
|
5059
|
+
const sock = createConnection(portNum, "127.0.0.1");
|
|
5060
|
+
sock.once("connect", () => {
|
|
5061
|
+
sock.destroy();
|
|
5062
|
+
resolve2();
|
|
5063
|
+
});
|
|
5064
|
+
sock.once("error", () => {
|
|
5065
|
+
sock.destroy();
|
|
5066
|
+
if (Date.now() < deadline) setTimeout(tryConnect, 100);
|
|
5067
|
+
else resolve2();
|
|
5068
|
+
});
|
|
5069
|
+
};
|
|
5070
|
+
tryConnect();
|
|
5071
|
+
});
|
|
5055
5072
|
dashboardRunning = true;
|
|
5056
5073
|
const { exec: execCmd } = await import("child_process");
|
|
5057
5074
|
const openCmd = process.platform === "win32" ? `start "" "${url}"` : process.platform === "darwin" ? `open "${url}"` : `xdg-open "${url}"`;
|