hippo-memory 1.17.0 → 1.19.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/bin/hippo.js +2 -2
- package/dist/api.d.ts +43 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +109 -7
- package/dist/api.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +109 -11
- package/dist/cli.js.map +1 -1
- package/dist/connectors/github/backfill.js +4 -4
- package/dist/connectors/github/cli-impl.js +6 -6
- package/dist/connectors/github/dlq.js +14 -14
- package/dist/connectors/slack/backfill.js +1 -1
- package/dist/connectors/slack/dlq.js +10 -10
- package/dist/connectors/slack/workspaces.js +4 -4
- package/dist/customer-notes.d.ts.map +1 -1
- package/dist/customer-notes.js +5 -1
- package/dist/customer-notes.js.map +1 -1
- package/dist/dag.js +6 -6
- package/dist/dashboard.js +7 -7
- package/dist/decisions.d.ts.map +1 -1
- package/dist/decisions.js +9 -1
- package/dist/decisions.js.map +1 -1
- package/dist/goals.d.ts +11 -0
- package/dist/goals.d.ts.map +1 -1
- package/dist/goals.js +61 -49
- package/dist/goals.js.map +1 -1
- package/dist/graph-extract.d.ts.map +1 -1
- package/dist/graph-extract.js +32 -12
- package/dist/graph-extract.js.map +1 -1
- package/dist/graph.d.ts +46 -3
- package/dist/graph.d.ts.map +1 -1
- package/dist/graph.js +116 -8
- package/dist/graph.js.map +1 -1
- package/dist/hooks.js +24 -24
- package/dist/physics-state.js +27 -27
- package/dist/policies.d.ts.map +1 -1
- package/dist/policies.js +5 -1
- package/dist/policies.js.map +1 -1
- package/dist/predictions.js +67 -67
- package/dist/project-briefs.d.ts.map +1 -1
- package/dist/project-briefs.js +6 -1
- package/dist/project-briefs.js.map +1 -1
- package/dist/refine-llm.js +13 -13
- package/dist/search.d.ts +33 -0
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +7 -0
- package/dist/server.js.map +1 -1
- package/dist/sleep-redact.d.ts +1 -0
- package/dist/sleep-redact.d.ts.map +1 -1
- package/dist/sleep-redact.js +6 -0
- package/dist/sleep-redact.js.map +1 -1
- package/dist/src/api.js +109 -7
- package/dist/src/api.js.map +1 -1
- package/dist/src/cli.js +109 -11
- package/dist/src/cli.js.map +1 -1
- package/dist/src/connectors/github/backfill.js +4 -4
- package/dist/src/connectors/github/cli-impl.js +6 -6
- package/dist/src/connectors/github/dlq.js +14 -14
- package/dist/src/connectors/slack/backfill.js +1 -1
- package/dist/src/connectors/slack/dlq.js +10 -10
- package/dist/src/connectors/slack/workspaces.js +4 -4
- package/dist/src/customer-notes.js +5 -1
- package/dist/src/customer-notes.js.map +1 -1
- package/dist/src/dag.js +6 -6
- package/dist/src/dashboard.js +7 -7
- package/dist/src/decisions.js +9 -1
- package/dist/src/decisions.js.map +1 -1
- package/dist/src/goals.js +61 -49
- package/dist/src/goals.js.map +1 -1
- package/dist/src/graph-extract.js +32 -12
- package/dist/src/graph-extract.js.map +1 -1
- package/dist/src/graph.js +116 -8
- package/dist/src/graph.js.map +1 -1
- package/dist/src/hooks.js +24 -24
- package/dist/src/physics-state.js +27 -27
- package/dist/src/policies.js +5 -1
- package/dist/src/policies.js.map +1 -1
- package/dist/src/predictions.js +67 -67
- package/dist/src/project-briefs.js +6 -1
- package/dist/src/project-briefs.js.map +1 -1
- package/dist/src/refine-llm.js +13 -13
- package/dist/src/search.js.map +1 -1
- package/dist/src/server.js +7 -0
- package/dist/src/server.js.map +1 -1
- package/dist/src/sleep-redact.js +6 -0
- package/dist/src/sleep-redact.js.map +1 -1
- package/dist/src/store.js +261 -260
- package/dist/src/store.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/working-memory.js +19 -19
- package/dist/store.d.ts +6 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +261 -260
- package/dist/store.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/working-memory.js +19 -19
- package/dist-ui/index.html +12 -12
- package/extensions/openclaw-plugin/index.ts +650 -650
- 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/benchmarks/e1.3/scenarios.json +0 -2587
package/dist/cli.js
CHANGED
|
@@ -916,7 +916,17 @@ async function cmdRecall(hippoRoot, query, flags) {
|
|
|
916
916
|
results = results.map((r) => {
|
|
917
917
|
const peers = r.entry.conflicts_with || [];
|
|
918
918
|
const hasPeerInResults = peers.some((peerId) => presentIds.has(peerId));
|
|
919
|
-
|
|
919
|
+
if (!hasPeerInResults)
|
|
920
|
+
return r;
|
|
921
|
+
const next = { ...r, score: r.score * 0.3 };
|
|
922
|
+
// A7 recall-trace: interference (vlPFC) down-rank. Only when --why.
|
|
923
|
+
if (showWhy) {
|
|
924
|
+
next.rerankTrace = [
|
|
925
|
+
...(r.rerankTrace ?? []),
|
|
926
|
+
{ stage: 'interference', multiplier: 0.3, scoreBefore: r.score, scoreAfter: next.score },
|
|
927
|
+
];
|
|
928
|
+
}
|
|
929
|
+
return next;
|
|
920
930
|
});
|
|
921
931
|
results.sort((a, b) => b.score - a.score);
|
|
922
932
|
}
|
|
@@ -936,7 +946,15 @@ async function cmdRecall(hippoRoot, query, flags) {
|
|
|
936
946
|
return r;
|
|
937
947
|
const raw = 1 + 0.3 * Math.tanh(pos - neg);
|
|
938
948
|
const valueMult = Math.max(0.7, Math.min(1.3, raw));
|
|
939
|
-
|
|
949
|
+
const next = { ...r, score: r.score * valueMult };
|
|
950
|
+
// A7 recall-trace: vmPFC continuous value attribution. Only when --why.
|
|
951
|
+
if (showWhy) {
|
|
952
|
+
next.rerankTrace = [
|
|
953
|
+
...(r.rerankTrace ?? []),
|
|
954
|
+
{ stage: 'value', multiplier: valueMult, scoreBefore: r.score, scoreAfter: next.score },
|
|
955
|
+
];
|
|
956
|
+
}
|
|
957
|
+
return next;
|
|
940
958
|
});
|
|
941
959
|
results.sort((a, b) => b.score - a.score);
|
|
942
960
|
}
|
|
@@ -960,8 +978,17 @@ async function cmdRecall(hippoRoot, query, flags) {
|
|
|
960
978
|
.map((r) => {
|
|
961
979
|
const strength = typeof r.entry.strength === 'number' ? r.entry.strength : 1.0;
|
|
962
980
|
const costFactor = Math.min(0.3, (r.tokens || 0) / 10000);
|
|
963
|
-
const
|
|
964
|
-
|
|
981
|
+
const utilityMult = (0.5 + 0.5 * strength) * (1 - costFactor);
|
|
982
|
+
const utility = r.score * utilityMult;
|
|
983
|
+
const next = { ...r, score: utility };
|
|
984
|
+
// A7 recall-trace: OFC option-value re-rank. Only when --why.
|
|
985
|
+
if (showWhy) {
|
|
986
|
+
next.rerankTrace = [
|
|
987
|
+
...(r.rerankTrace ?? []),
|
|
988
|
+
{ stage: 'utility', multiplier: utilityMult, scoreBefore: r.score, scoreAfter: utility },
|
|
989
|
+
];
|
|
990
|
+
}
|
|
991
|
+
return next;
|
|
965
992
|
})
|
|
966
993
|
.sort((a, b) => b.score - a.score);
|
|
967
994
|
}
|
|
@@ -990,11 +1017,22 @@ async function cmdRecall(hippoRoot, query, flags) {
|
|
|
990
1017
|
// salience) that sort by `r.score` honor the reranker's order rather
|
|
991
1018
|
// than unwinding it. Original score is preserved on rerankScore's
|
|
992
1019
|
// input, but downstream sorters key on `score`.
|
|
993
|
-
const withPostRank = reranked.map((r, i) =>
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
1020
|
+
const withPostRank = reranked.map((r, i) => {
|
|
1021
|
+
const next = {
|
|
1022
|
+
...r,
|
|
1023
|
+
score: r.rerankScore,
|
|
1024
|
+
postRerankRank: i + 1,
|
|
1025
|
+
};
|
|
1026
|
+
// A7 recall-trace: F6 reranker pass (reorder + rescale; not a scalar
|
|
1027
|
+
// multiply, so no multiplier field). Only when --why.
|
|
1028
|
+
if (showWhy) {
|
|
1029
|
+
next.rerankTrace = [
|
|
1030
|
+
...(r.rerankTrace ?? []),
|
|
1031
|
+
{ stage: 'reranker', scoreBefore: r.score, scoreAfter: r.rerankScore },
|
|
1032
|
+
];
|
|
1033
|
+
}
|
|
1034
|
+
return next;
|
|
1035
|
+
});
|
|
998
1036
|
results = [...withPostRank, ...tail];
|
|
999
1037
|
}
|
|
1000
1038
|
}
|
|
@@ -1008,7 +1046,23 @@ async function cmdRecall(hippoRoot, query, flags) {
|
|
|
1008
1046
|
const goalTag = flags['goal'] !== undefined ? String(flags['goal']).trim() : '';
|
|
1009
1047
|
if (goalTag) {
|
|
1010
1048
|
results = results
|
|
1011
|
-
.map((r) =>
|
|
1049
|
+
.map((r) => {
|
|
1050
|
+
if (!r.entry.tags?.includes(goalTag))
|
|
1051
|
+
return r;
|
|
1052
|
+
const boosted = { ...r, score: r.score * 1.5 };
|
|
1053
|
+
// A7 recall-trace: the explicit `--goal <tag>` boost is a public CLI
|
|
1054
|
+
// re-ranker (score *= 1.5) and is mutually exclusive with the session
|
|
1055
|
+
// goal-stack boost below, so it must record its OWN step or `--why
|
|
1056
|
+
// --goal` produces no ranking line (codex review). Stage `goal`
|
|
1057
|
+
// (explicit flag) is distinct from `goal-boost` (session stack).
|
|
1058
|
+
if (showWhy) {
|
|
1059
|
+
boosted.rerankTrace = [
|
|
1060
|
+
...(r.rerankTrace ?? []),
|
|
1061
|
+
{ stage: 'goal', multiplier: 1.5, scoreBefore: r.score, scoreAfter: r.score * 1.5, note: `--goal ${goalTag}` },
|
|
1062
|
+
];
|
|
1063
|
+
}
|
|
1064
|
+
return boosted;
|
|
1065
|
+
})
|
|
1012
1066
|
.sort((a, b) => b.score - a.score);
|
|
1013
1067
|
}
|
|
1014
1068
|
// dlPFC depth (B3, v0.38; lifted v1.7.4 into applyGoalStackBoost). When
|
|
@@ -1022,16 +1076,31 @@ async function cmdRecall(hippoRoot, query, flags) {
|
|
|
1022
1076
|
: process.env.HIPPO_SESSION_ID ?? '').trim();
|
|
1023
1077
|
if (sessionId && goalTag === '') {
|
|
1024
1078
|
const dbForGoals = openHippoDb(hippoRoot);
|
|
1079
|
+
// A7 recall-trace: goal-boost is the shared helper, not an inline map. It
|
|
1080
|
+
// writes its steps into this SEPARATE accumulator (keyed by entry id), NOT
|
|
1081
|
+
// onto the row (the helper strips internal markers on re-spread). Only
|
|
1082
|
+
// allocated under --why.
|
|
1083
|
+
const goalBoostTrace = showWhy ? new Map() : undefined;
|
|
1025
1084
|
try {
|
|
1026
1085
|
results = applyGoalStackBoost(dbForGoals, results, {
|
|
1027
1086
|
sessionId,
|
|
1028
1087
|
tenantId,
|
|
1029
1088
|
limit,
|
|
1089
|
+
...(goalBoostTrace ? { trace: goalBoostTrace } : {}),
|
|
1030
1090
|
});
|
|
1031
1091
|
}
|
|
1032
1092
|
finally {
|
|
1033
1093
|
closeHippoDb(dbForGoals);
|
|
1034
1094
|
}
|
|
1095
|
+
// Merge the accumulated goal-boost steps onto the matching SearchResult.
|
|
1096
|
+
if (goalBoostTrace && goalBoostTrace.size > 0) {
|
|
1097
|
+
results = results.map((r) => {
|
|
1098
|
+
const step = goalBoostTrace.get(r.entry.id);
|
|
1099
|
+
if (!step)
|
|
1100
|
+
return r;
|
|
1101
|
+
return { ...r, rerankTrace: [...(r.rerankTrace ?? []), step] };
|
|
1102
|
+
});
|
|
1103
|
+
}
|
|
1035
1104
|
}
|
|
1036
1105
|
// Pineal salience MVP (RESEARCH.md §"AI Pineal Gland — Intuition and Awareness
|
|
1037
1106
|
// Module"). When --salience-threshold T is set (T > 0), memories whose
|
|
@@ -1061,7 +1130,17 @@ async function cmdRecall(hippoRoot, query, flags) {
|
|
|
1061
1130
|
if (count >= T)
|
|
1062
1131
|
return r;
|
|
1063
1132
|
const mult = Math.max(0.5, count / T);
|
|
1064
|
-
|
|
1133
|
+
const next = { ...r, score: r.score * mult };
|
|
1134
|
+
// A7 recall-trace: pineal salience (retrieval_count) down-weight. The
|
|
1135
|
+
// stage names the ACTUAL transform (retrieval_count, not goal-stack).
|
|
1136
|
+
// Only when --why.
|
|
1137
|
+
if (showWhy) {
|
|
1138
|
+
next.rerankTrace = [
|
|
1139
|
+
...(r.rerankTrace ?? []),
|
|
1140
|
+
{ stage: 'retrieval-count-downweight', multiplier: mult, scoreBefore: r.score, scoreAfter: next.score },
|
|
1141
|
+
];
|
|
1142
|
+
}
|
|
1143
|
+
return next;
|
|
1065
1144
|
})
|
|
1066
1145
|
.sort((a, b) => b.score - a.score);
|
|
1067
1146
|
}
|
|
@@ -1389,6 +1468,10 @@ async function cmdRecall(hippoRoot, query, flags) {
|
|
|
1389
1468
|
if (explanation.envelope) {
|
|
1390
1469
|
base.envelope = explanation.envelope;
|
|
1391
1470
|
}
|
|
1471
|
+
// A7 recall-trace: emit the ordered lifecycle re-ranking steps.
|
|
1472
|
+
if (r.rerankTrace && r.rerankTrace.length > 0) {
|
|
1473
|
+
base.rerankTrace = r.rerankTrace;
|
|
1474
|
+
}
|
|
1392
1475
|
}
|
|
1393
1476
|
return base;
|
|
1394
1477
|
});
|
|
@@ -1513,6 +1596,17 @@ async function cmdRecall(hippoRoot, query, flags) {
|
|
|
1513
1596
|
console.log(` session_id: ${env.session_id}`);
|
|
1514
1597
|
console.log(` confidence: ${env.confidence}`);
|
|
1515
1598
|
}
|
|
1599
|
+
// A7 recall-trace: render the ordered lifecycle re-ranking chain, e.g.
|
|
1600
|
+
// "ranking: base 0.420 -> interference x0.3 -> 0.126 -> goal-boost x1.5 -> 0.189".
|
|
1601
|
+
if (r.rerankTrace && r.rerankTrace.length > 0) {
|
|
1602
|
+
const parts = [`base ${fmt(r.rerankTrace[0].scoreBefore, 3)}`];
|
|
1603
|
+
for (const step of r.rerankTrace) {
|
|
1604
|
+
const mult = step.multiplier !== undefined ? ` x${fmt(step.multiplier, 2)}` : '';
|
|
1605
|
+
parts.push(`${step.stage}${mult}`);
|
|
1606
|
+
parts.push(fmt(step.scoreAfter, 3));
|
|
1607
|
+
}
|
|
1608
|
+
console.log(` ranking: ${parts.join(' -> ')}`);
|
|
1609
|
+
}
|
|
1516
1610
|
}
|
|
1517
1611
|
console.log();
|
|
1518
1612
|
console.log(e.content);
|
|
@@ -2262,6 +2356,10 @@ export function renderSleepResult(result) {
|
|
|
2262
2356
|
if (result.ambient) {
|
|
2263
2357
|
console.log(`\n${renderAmbientSummary(result.ambient)}`);
|
|
2264
2358
|
}
|
|
2359
|
+
if (result.graph && result.graph.tenants > 0) {
|
|
2360
|
+
const { tenants, entities, relations } = result.graph;
|
|
2361
|
+
console.log(`\nGraph: rebuilt ${tenants} tenant${tenants === 1 ? '' : 's'} (${entities} entities, ${relations} relations).`);
|
|
2362
|
+
}
|
|
2265
2363
|
}
|
|
2266
2364
|
async function cmdSleepCore(hippoRoot, flags) {
|
|
2267
2365
|
requireInit(hippoRoot);
|