@kanadego/dsh-heartbeat 1.6.1 → 1.6.2

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/dist/index.js CHANGED
@@ -22,7 +22,7 @@ import {
22
22
  scanPending,
23
23
  sendNewMessageHint,
24
24
  userPresetRoot
25
- } from "./chunk-5TNGUHIR.js";
25
+ } from "./chunk-QAJ2D445.js";
26
26
  import {
27
27
  getRuntime,
28
28
  setRuntime
@@ -1500,14 +1500,22 @@ var RULES = [
1500
1500
  '\u53EA\u8F93\u51FA\u4E00\u4E2A JSON \u6570\u7EC4\uFF0C\u5143\u7D20\u5F62\u5982 {"op":"ADD"|"UPDATE"|"INVALIDATE"|"NOOP"|...,..}\u3002'
1501
1501
  ].join("\n");
1502
1502
  var CHAT_SEED_RULE = '\u804A\u5929\u79CD\u5B50\uFF08spec \u2467\uFF09\uFF1A\u4ECE\u89C2\u5BDF\u91CC\u6311"\u503C\u5F97\u4E3B\u52A8\u804A\u7684\u8BDD\u9898"\u2014\u2014\u53EA\u6311\u4ED6\u771F\u6B63\u8868\u73B0\u51FA\u5174\u8DA3\u7684\u3001\u65B0\u51FA\u73B0\u7684\u4E8B\u7269\u6216\u4ED6\u60F3\u6DF1\u5165\u7684\u8BDD\u9898\uFF1B\u666E\u901A\u5BD2\u6684\u3001\u5BA2\u5957\u3001\u5DF2\u5B8C\u7ED3\u7684\u5C0F\u4E8B\u4E0D\u8BB0\u3002\u6BCF\u6761\u8F93\u51FA\u4E3A {"op":"CHAT_SEED","text":"\u4E00\u53E5\u8BDD\u7D20\u6750(<=60\u5B57)"}\uFF08topic \u53EF\u9009\uFF09\u3002\u6CA1\u6709\u5408\u9002\u7684\u5C31\u4E0D\u6311\u3002';
1503
- function buildConsolidationPrompt(entriesView, observations) {
1503
+ function buildConsolidationPrompt(entriesView, observations, schema) {
1504
1504
  const notes = observations.map((o) => `- [${o.kind} ${o.at}] ${o.note} (ref=${o.kind}#${o.ref})`).join("\n");
1505
+ const whitelist = schema ? renderSchemaWhitelist(schema) : "";
1505
1506
  return [
1506
1507
  "\u4F60\u662F\u7528\u6237\u753B\u50CF\u7684\u5408\u5E76\u88C1\u51B3\u5668\u3002\u4E0B\u9762\u662F\u5F53\u524D\u753B\u50CF\u6761\u76EE\u4E0E\u65B0\u89C2\u5BDF\u3002\u8BF7\u4EA7\u51FA\u7ED3\u6784\u5316\u64CD\u4F5C\u3002",
1507
1508
  "\u88C1\u51B3\u89C4\u5219\uFF1A",
1508
1509
  RULES,
1509
1510
  CHAT_SEED_RULE,
1510
1511
  "",
1512
+ "## \u5206\u533A\u767D\u540D\u5355\uFF08\u5FC5\u987B\u4E25\u683C\u9075\u5B88\uFF09",
1513
+ "partition/topic/subTopic \u53EA\u80FD\u4ECE\u4E0B\u9762\u8FD9\u4EFD\u6E05\u5355\u91CC\u9009\uFF0C\u9010\u5B57\u5339\u914D\uFF0C\u7981\u6B62\u81EA\u521B\u3001\u7981\u6B62\u6539\u5199\u6210\u522B\u7684\u540D\u5B57\uFF1A",
1514
+ whitelist || "(\u65E0 schema \u767D\u540D\u5355\u2014\u2014\u4F46\u5206\u533A\u5FC5\u987B\u5C5E\u4E8E interest/projects/comm/psy \u56DB\u8005\u4E4B\u4E00)",
1515
+ "",
1516
+ "## temporal \u53D6\u503C",
1517
+ "temporal \u53EA\u80FD\u586B stable \u6216 volatile\uFF08\u6BCF\u4E2A sub_topic \u6709\u81EA\u5DF1\u7684\u5141\u8BB8\u96C6\uFF0C\u89C1\u4E0A\u9762\u62EC\u53F7\u6807\u6CE8\uFF1B\u6CA1\u6807\u6CE8\u7684\u9ED8\u8BA4 stable\uFF09\u3002",
1518
+ "",
1511
1519
  "## \u5F53\u524D\u6761\u76EE\uFF08\u4EC5\u975E psy \u5206\u533A\uFF1B\u5B57\u6BB5\uFF1Aid/partition/topic/subTopic/content/confidence\uFF09",
1512
1520
  entriesView || "(\u7A7A)",
1513
1521
  "",
@@ -1515,9 +1523,24 @@ function buildConsolidationPrompt(entriesView, observations) {
1515
1523
  notes || "(\u7A7A)",
1516
1524
  "",
1517
1525
  "\u8F93\u51FA\uFF1A\u4E00\u4E2A JSON \u6570\u7EC4\u7684 ops\u3002ADD \u9700\u542B partition/topic/subTopic/content/temporal/evidence[{kind,at,ref}]\uFF1B",
1518
- "UPDATE \u9700\u542B id/changes\uFF1BINVALIDATE \u9700\u542B id/why\u3002\u4E0D\u8981\u8F93\u51FA\u6570\u7EC4\u4EE5\u5916\u7684\u4EFB\u4F55\u5185\u5BB9\u3002"
1526
+ "UPDATE \u9700\u542B id/changes\uFF1BINVALIDATE \u9700\u542B id/why\u3002",
1527
+ 'evidence[].ref \u5FC5\u987B\u662F\u80FD\u89E3\u6790\u7684\u6570\u636E\u6587\u4EF6\u5B9A\u4F4D\u7B26\uFF0C\u683C\u5F0F\u4E3A "<data\u4E0B\u7684\u6587\u4EF6>#<\u5B9A\u4F4D>"\uFF0C\u4F8B\u5982 "cursors.json#2026-09-06T08:32:51.185Z"\u3002',
1528
+ '\u4E0D\u8981\u5728 ref \u524D\u9762\u52A0 "chat#" \u7B49\u591A\u4F59\u524D\u7F00\u2014\u2014\u90A3\u4F1A\u5BFC\u81F4\u8BC1\u636E\u65E0\u6CD5\u89E3\u6790\u800C\u88AB\u62D2\u3002',
1529
+ "\u4E0D\u8981\u8F93\u51FA\u6570\u7EC4\u4EE5\u5916\u7684\u4EFB\u4F55\u5185\u5BB9\u3002"
1519
1530
  ].join("\n");
1520
1531
  }
1532
+ function renderSchemaWhitelist(schema) {
1533
+ const rows = [];
1534
+ for (const [partition, p] of Object.entries(schema.partitions ?? {})) {
1535
+ for (const [topic, t] of Object.entries(p?.topics ?? {})) {
1536
+ for (const [subTopic, st] of Object.entries(t?.subtopics ?? {})) {
1537
+ const allowed = (st?.allowed && st.allowed.length ? st.allowed : ["stable"]).join("|");
1538
+ rows.push(`- ${partition}/${topic}/${subTopic} (temporal: ${allowed})`);
1539
+ }
1540
+ }
1541
+ }
1542
+ return rows.join("\n");
1543
+ }
1521
1544
  var MAX_CHAT_SEEDS_PER_RUN = 3;
1522
1545
  function splitChatSeedOps(raw) {
1523
1546
  const chatSeeds = [];
@@ -1547,7 +1570,7 @@ async function runConsolidation(guard, paths, policy, llm, now = Date.now()) {
1547
1570
  const doc = loadProfile(guard, paths.dataDir + "/profile.json");
1548
1571
  const all = dedupeItems(inboxDrain(guard, inboxFilePath(paths.dataDir)));
1549
1572
  const entriesView = ["interest", "projects", "comm"].flatMap((p) => doc.partitions[p].entries.filter((e) => e.validTo === null).map((e) => `${e.id} [${e.partition}/${e.topic}/${e.subTopic}] conf=${e.confidence} (${e.temporal}): ${e.content}`)).filter(Boolean).join("\n");
1550
- const prompt = buildConsolidationPrompt(entriesView, all);
1573
+ const prompt = buildConsolidationPrompt(entriesView, all, schema);
1551
1574
  let ops = null;
1552
1575
  let lastError = "";
1553
1576
  for (let attempt = 0; attempt < 2 && ops === null; attempt++) {