hippo-memory 1.42.1 → 1.43.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/README.md +1 -1
- package/dist/card-detail.d.ts +14 -0
- package/dist/card-detail.d.ts.map +1 -0
- package/dist/card-detail.js +15 -0
- package/dist/card-detail.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +8 -16
- package/dist/cli.js.map +1 -1
- package/dist/dashboard.d.ts.map +1 -1
- package/dist/dashboard.js +31 -4
- package/dist/dashboard.js.map +1 -1
- package/dist/src/card-detail.js +15 -0
- package/dist/src/card-detail.js.map +1 -0
- package/dist/src/cli.js +8 -16
- package/dist/src/cli.js.map +1 -1
- package/dist/src/dashboard.js +31 -4
- package/dist/src/dashboard.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist-ui/assets/index-BgmA7Hwe.js +61 -0
- package/dist-ui/assets/{index-Bvp8ClXc.css → index-RoXXJ5dq.css} +1 -1
- package/dist-ui/index.html +2 -2
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/dist-ui/assets/index-DYCICKZk.js +0 -61
package/dist/dashboard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAmN7B,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,MAAa,GAAG,IAAI,CAAC,MAAM,CAyGlF"}
|
package/dist/dashboard.js
CHANGED
|
@@ -7,12 +7,13 @@
|
|
|
7
7
|
import * as http from 'http';
|
|
8
8
|
import * as path from 'path';
|
|
9
9
|
import * as fs from 'fs';
|
|
10
|
-
import { loadAllEntries, listMemoryConflicts, readEntry, writeEntry } from './store.js';
|
|
10
|
+
import { loadAllEntries, listCards, listMemoryConflicts, readEntry, writeEntry } from './store.js';
|
|
11
11
|
import { calculateStrength, confidenceFacets } from './memory.js';
|
|
12
12
|
import { loadConfig } from './config.js';
|
|
13
13
|
import { listPeers } from './shared.js';
|
|
14
14
|
import { loadEmbeddingIndex } from './embeddings.js';
|
|
15
15
|
import { resolveTenantId } from './tenant.js';
|
|
16
|
+
import { loadCardDetail } from './card-detail.js';
|
|
16
17
|
function buildDashboardData(hippoRoot) {
|
|
17
18
|
// A5: scope dashboard to active tenant. Without this, the UI surfaces every
|
|
18
19
|
// tenant's memories on a multi-tenant deployment.
|
|
@@ -121,6 +122,8 @@ const MIME_TYPES = {
|
|
|
121
122
|
'.ico': 'image/x-icon',
|
|
122
123
|
'.woff2': 'font/woff2',
|
|
123
124
|
};
|
|
125
|
+
// Binds 127.0.0.1 only; refusing other Hosts closes the DNS-rebinding route.
|
|
126
|
+
const LOOPBACK_HOST = /^(localhost|127\.0\.0\.1)(:\d+)?$/i;
|
|
124
127
|
function isStaticFileExtension(ext) {
|
|
125
128
|
return Object.hasOwn(MIME_TYPES, ext);
|
|
126
129
|
}
|
|
@@ -128,7 +131,6 @@ function jsonResponse(res, data, status = 200) {
|
|
|
128
131
|
const body = JSON.stringify(data);
|
|
129
132
|
res.writeHead(status, {
|
|
130
133
|
'Content-Type': 'application/json; charset=utf-8',
|
|
131
|
-
'Access-Control-Allow-Origin': '*',
|
|
132
134
|
});
|
|
133
135
|
res.end(body);
|
|
134
136
|
}
|
|
@@ -141,7 +143,6 @@ function serveStaticFile(res, filePath) {
|
|
|
141
143
|
const content = fs.readFileSync(filePath);
|
|
142
144
|
res.writeHead(200, {
|
|
143
145
|
'Content-Type': mime,
|
|
144
|
-
'Access-Control-Allow-Origin': '*',
|
|
145
146
|
});
|
|
146
147
|
res.end(content);
|
|
147
148
|
return true;
|
|
@@ -153,7 +154,13 @@ function serveStaticFile(res, filePath) {
|
|
|
153
154
|
export function serveDashboard(hippoRoot, port = 3333) {
|
|
154
155
|
const distUiDir = path.resolve(import.meta.dirname, '..', 'dist-ui');
|
|
155
156
|
const hasDistUi = fs.existsSync(path.join(distUiDir, 'index.html'));
|
|
156
|
-
const
|
|
157
|
+
const handleRequest = (req, res) => {
|
|
158
|
+
const host = req.headers.host;
|
|
159
|
+
if (host !== undefined && !LOOPBACK_HOST.test(host)) {
|
|
160
|
+
res.writeHead(403, { 'Content-Type': 'text/plain' });
|
|
161
|
+
res.end('Forbidden');
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
157
164
|
const url = new URL(req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`);
|
|
158
165
|
const pathname = url.pathname;
|
|
159
166
|
// --- API routes ---
|
|
@@ -169,6 +176,14 @@ export function serveDashboard(hippoRoot, port = 3333) {
|
|
|
169
176
|
writeEntry(hippoRoot, entry);
|
|
170
177
|
return jsonResponse(res, { id, starred: entry.starred });
|
|
171
178
|
}
|
|
179
|
+
if (pathname === '/api/cards' && req.method === 'GET') {
|
|
180
|
+
return jsonResponse(res, { cards: listCards(hippoRoot, resolveTenantId({})) });
|
|
181
|
+
}
|
|
182
|
+
const cardMatch = pathname.match(/^\/api\/cards\/([A-Za-z0-9_-]+)$/);
|
|
183
|
+
if (cardMatch && req.method === 'GET') {
|
|
184
|
+
const detail = loadCardDetail(hippoRoot, resolveTenantId({}), cardMatch[1]);
|
|
185
|
+
return detail ? jsonResponse(res, detail) : jsonResponse(res, { error: 'Not found' }, 404);
|
|
186
|
+
}
|
|
172
187
|
const data = buildDashboardData(hippoRoot);
|
|
173
188
|
if (pathname === '/api/memories')
|
|
174
189
|
return jsonResponse(res, data.memories);
|
|
@@ -219,6 +234,18 @@ export function serveDashboard(hippoRoot, port = 3333) {
|
|
|
219
234
|
<pre style="background:#faf7f2;padding:16px;border:1px solid #c4b9a8;border-radius:3px;font-family:Consolas,monospace">cd ui && npm install && npm run build</pre>
|
|
220
235
|
<p>Then refresh this page. The dashboard server will serve <code>dist-ui/index.html</code> automatically once present.</p>
|
|
221
236
|
</body></html>`);
|
|
237
|
+
};
|
|
238
|
+
const server = http.createServer((req, res) => {
|
|
239
|
+
try {
|
|
240
|
+
handleRequest(req, res);
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
console.error('Dashboard request failed:', err);
|
|
244
|
+
if (res.headersSent)
|
|
245
|
+
res.end();
|
|
246
|
+
else
|
|
247
|
+
jsonResponse(res, { error: 'Internal error' }, 500);
|
|
248
|
+
}
|
|
222
249
|
});
|
|
223
250
|
server.listen(port, '127.0.0.1', () => {
|
|
224
251
|
console.log(`Hippo Dashboard running at http://localhost:${port}`);
|
package/dist/dashboard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { loadCard, loadCardComments, loadCardDeps, loadCardRuns, loadLatestHandoffForCard } from './store.js';
|
|
2
|
+
/** Loads the detail behind `hippo card show` and `GET /api/cards/:id` (null when the tenant has no such card); five separate reads, so a write landing between them can show a mixed view, as `card show` always could. */
|
|
3
|
+
export function loadCardDetail(hippoRoot, tenantId, id) {
|
|
4
|
+
const card = loadCard(hippoRoot, tenantId, id);
|
|
5
|
+
if (!card)
|
|
6
|
+
return null;
|
|
7
|
+
return {
|
|
8
|
+
card,
|
|
9
|
+
deps: loadCardDeps(hippoRoot, tenantId, id),
|
|
10
|
+
runs: loadCardRuns(hippoRoot, tenantId, id),
|
|
11
|
+
comments: loadCardComments(hippoRoot, tenantId, id),
|
|
12
|
+
handoff: loadLatestHandoffForCard(hippoRoot, tenantId, id),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=card-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card-detail.js","sourceRoot":"","sources":["../../src/card-detail.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAW9G,2NAA2N;AAC3N,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,QAAgB,EAAE,EAAU;IAC5E,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC;QAC3C,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC;QAC3C,QAAQ,EAAE,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC;QACnD,OAAO,EAAE,wBAAwB,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC;KAC3D,CAAC;AACJ,CAAC"}
|
package/dist/src/cli.js
CHANGED
|
@@ -38,11 +38,12 @@ import { execFileSync, execSync, spawn } from 'child_process';
|
|
|
38
38
|
import { installJsonHooks, uninstallJsonHooks, resolveJsonHookPaths, detectInstalledTools, defaultSleepLogPath, ensureCodexWrapperInstalled, installCodexWrapper, isCodexWrapperInstalled, repairCodexWrapperIfInstalled, uninstallCodexWrapper, resolveCodexSessionTranscript, resolveCodexWrapperPaths, installOpencodePlugin, uninstallOpencodePlugin, resolveOpencodePluginPath, } from './hooks.js';
|
|
39
39
|
import { createMemory, calculateStrength, calculateRewardFactor, deriveHalfLife, resolveConfidence, confidenceFacets, confidenceLabel, computeSchemaFit, Layer, } from './memory.js';
|
|
40
40
|
import { detectSecret } from './secret-detect.js';
|
|
41
|
-
import { getHippoRoot, isInitialized, initStore, writeEntry, readEntry, deleteEntry, loadAllEntries, loadSearchEntries, loadRecallSearchEntries, loadIndex, saveIndex, loadStats, updateStats, saveActiveTaskSnapshot, loadActiveTaskSnapshot, closeTaskSnapshotsForSession, clearActiveTaskSnapshot, appendSessionEvent, listSessionEvents, listMemoryConflicts, resolveConflict, saveSessionHandoff, loadLatestHandoff, loadHandoffById, stampHandoffOutcome, writeSessionEndHandoff, createCard, loadCard, listCards,
|
|
41
|
+
import { getHippoRoot, isInitialized, initStore, writeEntry, readEntry, deleteEntry, loadAllEntries, loadSearchEntries, loadRecallSearchEntries, loadIndex, saveIndex, loadStats, updateStats, saveActiveTaskSnapshot, loadActiveTaskSnapshot, closeTaskSnapshotsForSession, clearActiveTaskSnapshot, appendSessionEvent, listSessionEvents, listMemoryConflicts, resolveConflict, saveSessionHandoff, loadLatestHandoff, loadHandoffById, stampHandoffOutcome, writeSessionEndHandoff, createCard, loadCard, listCards, loadCardRuns, claimCard, heartbeatCard, blockCard, reviewCard, completeCard, reclaimExpiredCards, addCardComment, } from './store.js';
|
|
42
42
|
import { rejectValue, unrejectValue, listRejectionsForTenant } from './reject-flow.js';
|
|
43
43
|
import { RejectedValueError } from './rejection.js';
|
|
44
44
|
import { isHandoffOutcome, formatHandoffEvidenceLine } from './handoff.js';
|
|
45
45
|
import { isCardStatus } from './card.js';
|
|
46
|
+
import { loadCardDetail } from './card-detail.js';
|
|
46
47
|
import { passesScopeFilterForRecall } from './recall-scope.js';
|
|
47
48
|
import { markRetrieved, hybridSearch, physicsSearch, explainMatch, textOverlap, tokenize as tokenizeQuery } from './search.js';
|
|
48
49
|
import { compareEntryIdentity } from './compare.js';
|
|
@@ -4029,7 +4030,8 @@ function cmdHandoff(hippoRoot, args, flags) {
|
|
|
4029
4030
|
}
|
|
4030
4031
|
// Mirrors ARCHIVE_REASON_REQUIRED so the block message can't drift from its usage line.
|
|
4031
4032
|
const CARD_BLOCK_REASON_REQUIRED = 'hippo card block <id> requires --reason "<why>" (recorded as a comment).';
|
|
4032
|
-
function printCard(
|
|
4033
|
+
function printCard(detail) {
|
|
4034
|
+
const { card, deps, runs, comments, handoff } = detail;
|
|
4033
4035
|
console.log(`## Card ${card.id}\n`);
|
|
4034
4036
|
console.log(`- Title: ${card.title}`);
|
|
4035
4037
|
console.log(`- Status: ${card.status}`);
|
|
@@ -4046,26 +4048,22 @@ function printCard(hippoRoot, tenantId, card) {
|
|
|
4046
4048
|
if (card.budget !== null)
|
|
4047
4049
|
console.log(`- Budget: ${card.budget}`);
|
|
4048
4050
|
console.log(`- Updated: ${card.updatedAt}`);
|
|
4049
|
-
const deps = loadCardDeps(hippoRoot, tenantId, card.id);
|
|
4050
4051
|
if (deps.parents.length > 0)
|
|
4051
4052
|
console.log(`- Parents: ${deps.parents.join(', ')}`);
|
|
4052
4053
|
if (deps.children.length > 0)
|
|
4053
4054
|
console.log(`- Children: ${deps.children.join(', ')}`);
|
|
4054
|
-
const runs = loadCardRuns(hippoRoot, tenantId, card.id);
|
|
4055
4055
|
if (runs.length > 0) {
|
|
4056
4056
|
console.log('\n### Runs');
|
|
4057
4057
|
for (const run of runs) {
|
|
4058
4058
|
console.log(`- run ${run.id}: ${run.runtime} started ${run.started}${run.ended ? ` ended ${run.ended} (${run.outcome})` : ' (open)'}`);
|
|
4059
4059
|
}
|
|
4060
4060
|
}
|
|
4061
|
-
const comments = loadCardComments(hippoRoot, tenantId, card.id);
|
|
4062
4061
|
if (comments.length > 0) {
|
|
4063
4062
|
console.log('\n### Comments');
|
|
4064
4063
|
for (const comment of comments) {
|
|
4065
4064
|
console.log(`- [${comment.createdAt}] ${comment.author}: ${comment.body}`);
|
|
4066
4065
|
}
|
|
4067
4066
|
}
|
|
4068
|
-
const handoff = loadLatestHandoffForCard(hippoRoot, tenantId, card.id);
|
|
4069
4067
|
if (handoff) {
|
|
4070
4068
|
console.log('\n### Latest handoff');
|
|
4071
4069
|
console.log(`- Session: ${handoff.sessionId}, updated ${handoff.updatedAt}`);
|
|
@@ -4172,22 +4170,16 @@ function cmdCard(hippoRoot, args, flags) {
|
|
|
4172
4170
|
console.error('Usage: hippo card show <id> [--json]');
|
|
4173
4171
|
process.exit(1);
|
|
4174
4172
|
}
|
|
4175
|
-
const
|
|
4176
|
-
if (!
|
|
4173
|
+
const detail = loadCardDetail(hippoRoot, tenantId, id);
|
|
4174
|
+
if (!detail) {
|
|
4177
4175
|
console.error(`No card found with id ${id}.`);
|
|
4178
4176
|
process.exit(1);
|
|
4179
4177
|
}
|
|
4180
4178
|
if (flags['json']) {
|
|
4181
|
-
console.log(JSON.stringify(
|
|
4182
|
-
card,
|
|
4183
|
-
deps: loadCardDeps(hippoRoot, tenantId, id),
|
|
4184
|
-
runs: loadCardRuns(hippoRoot, tenantId, id),
|
|
4185
|
-
comments: loadCardComments(hippoRoot, tenantId, id),
|
|
4186
|
-
handoff: loadLatestHandoffForCard(hippoRoot, tenantId, id),
|
|
4187
|
-
}, null, 2));
|
|
4179
|
+
console.log(JSON.stringify(detail, null, 2));
|
|
4188
4180
|
return;
|
|
4189
4181
|
}
|
|
4190
|
-
printCard(
|
|
4182
|
+
printCard(detail);
|
|
4191
4183
|
return;
|
|
4192
4184
|
}
|
|
4193
4185
|
if (subcommand === 'list') {
|