@pcircle/memesh 4.9.4 → 4.10.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.
Files changed (129) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/AGENTS.md +35 -4
  5. package/README.de.md +3 -3
  6. package/README.md +3 -3
  7. package/README.zh-TW.md +3 -3
  8. package/dashboard/dist/index.html +8 -8
  9. package/dist/cli/view-live.d.ts.map +1 -1
  10. package/dist/cli/view-live.js +0 -427
  11. package/dist/cli/view-live.js.map +1 -1
  12. package/dist/core/briefing-index.d.ts +30 -0
  13. package/dist/core/briefing-index.d.ts.map +1 -0
  14. package/dist/core/briefing-index.js +140 -0
  15. package/dist/core/briefing-index.js.map +1 -0
  16. package/dist/core/briefing.d.ts +4 -0
  17. package/dist/core/briefing.d.ts.map +1 -1
  18. package/dist/core/briefing.js +42 -4
  19. package/dist/core/briefing.js.map +1 -1
  20. package/dist/core/capture-liveness.d.ts +136 -0
  21. package/dist/core/capture-liveness.d.ts.map +1 -0
  22. package/dist/core/capture-liveness.js +447 -0
  23. package/dist/core/capture-liveness.js.map +1 -0
  24. package/dist/core/config.d.ts +1 -0
  25. package/dist/core/config.d.ts.map +1 -1
  26. package/dist/core/config.js +3 -1
  27. package/dist/core/config.js.map +1 -1
  28. package/dist/core/delegation.d.ts +47 -0
  29. package/dist/core/delegation.d.ts.map +1 -0
  30. package/dist/core/delegation.js +174 -0
  31. package/dist/core/delegation.js.map +1 -0
  32. package/dist/core/doctor-fixes.d.ts +1 -0
  33. package/dist/core/doctor-fixes.d.ts.map +1 -1
  34. package/dist/core/doctor-fixes.js +21 -0
  35. package/dist/core/doctor-fixes.js.map +1 -1
  36. package/dist/core/doctor.d.ts +8 -0
  37. package/dist/core/doctor.d.ts.map +1 -1
  38. package/dist/core/doctor.js +148 -3
  39. package/dist/core/doctor.js.map +1 -1
  40. package/dist/core/note-derive.d.ts +14 -0
  41. package/dist/core/note-derive.d.ts.map +1 -0
  42. package/dist/core/note-derive.js +66 -0
  43. package/dist/core/note-derive.js.map +1 -0
  44. package/dist/core/note-ingest.d.ts +34 -0
  45. package/dist/core/note-ingest.d.ts.map +1 -0
  46. package/dist/core/note-ingest.js +445 -0
  47. package/dist/core/note-ingest.js.map +1 -0
  48. package/dist/core/operations.d.ts +10 -1
  49. package/dist/core/operations.d.ts.map +1 -1
  50. package/dist/core/operations.js +129 -14
  51. package/dist/core/operations.js.map +1 -1
  52. package/dist/core/paths.d.ts.map +1 -1
  53. package/dist/core/paths.js.map +1 -1
  54. package/dist/core/schema-export.d.ts.map +1 -1
  55. package/dist/core/schema-export.js +10 -4
  56. package/dist/core/schema-export.js.map +1 -1
  57. package/dist/core/serializer.d.ts.map +1 -1
  58. package/dist/core/serializer.js +3 -0
  59. package/dist/core/serializer.js.map +1 -1
  60. package/dist/core/session-insight.d.ts +44 -0
  61. package/dist/core/session-insight.d.ts.map +1 -0
  62. package/dist/core/session-insight.js +216 -0
  63. package/dist/core/session-insight.js.map +1 -0
  64. package/dist/core/task-state-store.d.ts +4 -0
  65. package/dist/core/task-state-store.d.ts.map +1 -1
  66. package/dist/core/task-state-store.js +18 -5
  67. package/dist/core/task-state-store.js.map +1 -1
  68. package/dist/core/turn-signal.d.ts +22 -0
  69. package/dist/core/turn-signal.d.ts.map +1 -0
  70. package/dist/core/turn-signal.js +89 -0
  71. package/dist/core/turn-signal.js.map +1 -0
  72. package/dist/core/types.d.ts +12 -3
  73. package/dist/core/types.d.ts.map +1 -1
  74. package/dist/core/update-entrypoint.d.ts +19 -0
  75. package/dist/core/update-entrypoint.d.ts.map +1 -0
  76. package/dist/core/update-entrypoint.js +222 -0
  77. package/dist/core/update-entrypoint.js.map +1 -0
  78. package/dist/core/update-notice.d.ts +69 -0
  79. package/dist/core/update-notice.d.ts.map +1 -0
  80. package/dist/core/update-notice.js +188 -0
  81. package/dist/core/update-notice.js.map +1 -0
  82. package/dist/host-runtime/codex-session.d.ts +10 -0
  83. package/dist/host-runtime/codex-session.d.ts.map +1 -1
  84. package/dist/host-runtime/codex-session.js +1 -1
  85. package/dist/host-runtime/codex-session.js.map +1 -1
  86. package/dist/knowledge-graph.d.ts.map +1 -1
  87. package/dist/knowledge-graph.js +24 -3
  88. package/dist/knowledge-graph.js.map +1 -1
  89. package/dist/mcp/THIRD_PARTY_NOTICES.txt +2 -2
  90. package/dist/mcp/server.js +1079 -90
  91. package/dist/mcp/server.js.map +3 -3
  92. package/dist/skills-manifest.json +46 -26
  93. package/dist/transports/cli/cli.d.ts.map +1 -1
  94. package/dist/transports/cli/cli.js +7702 -5764
  95. package/dist/transports/cli/cli.js.map +3 -3
  96. package/dist/transports/http/server.d.ts.map +1 -1
  97. package/dist/transports/http/server.js +38 -27
  98. package/dist/transports/http/server.js.map +1 -1
  99. package/dist/transports/mcp/handlers.d.ts +25 -5
  100. package/dist/transports/mcp/handlers.d.ts.map +1 -1
  101. package/dist/transports/mcp/handlers.js +43 -5
  102. package/dist/transports/mcp/handlers.js.map +1 -1
  103. package/dist/transports/schemas.d.ts +4 -2
  104. package/dist/transports/schemas.d.ts.map +1 -1
  105. package/dist/transports/schemas.js +29 -3
  106. package/dist/transports/schemas.js.map +1 -1
  107. package/docs/platforms/README.md +1 -0
  108. package/docs/platforms/agent-messaging.md +22 -5
  109. package/package.json +14 -4
  110. package/scripts/hooks/_generated/briefing-index.js +147 -0
  111. package/scripts/hooks/_generated/capture-liveness.js +454 -0
  112. package/scripts/hooks/_generated/update-notice.js +195 -0
  113. package/scripts/hooks/_shared.js +302 -14
  114. package/scripts/hooks/_stop-notes.js +504 -0
  115. package/scripts/hooks/auto-update-runner.mjs +22 -0
  116. package/scripts/hooks/decision-nudge.js +32 -5
  117. package/scripts/hooks/guard-check.js +30 -3
  118. package/scripts/hooks/post-commit.js +329 -133
  119. package/scripts/hooks/pre-compact.js +17 -2
  120. package/scripts/hooks/pre-edit-recall.js +32 -1
  121. package/scripts/hooks/session-start.js +361 -78
  122. package/scripts/hooks/session-summary.js +217 -41
  123. package/scripts/hooks/user-prompt-intent.js +89 -19
  124. package/skills/memesh/SKILL.md +20 -8
  125. package/dist/cli/assets/d3.v7.min.js +0 -2
  126. package/dist/core/graph.d.ts +0 -26
  127. package/dist/core/graph.d.ts.map +0 -1
  128. package/dist/core/graph.js +0 -74
  129. package/dist/core/graph.js.map +0 -1
@@ -26,6 +26,9 @@ import {
26
26
  matchingGuards,
27
27
  guardWarningLines,
28
28
  recordGuardFires,
29
+ hookErrorReason,
30
+ SKIP_REASONS,
31
+ recordHookOutcome,
29
32
  } from './_shared.js';
30
33
  import { MemeshDatabase } from './_generated/sqlite.js';
31
34
 
@@ -35,15 +38,23 @@ const THROTTLE_FILE = join(memeshDir, 'session-recalled-files.json');
35
38
  const MAX_RESULTS = 3;
36
39
 
37
40
  let input = '';
41
+ // See post-commit.js for why every exit path leaves a record (#327).
42
+ let payload = null;
43
+ function record(outcome, reason, entity) {
44
+ recordHookOutcome(process.env, { hook: 'pre-edit-recall', outcome, reason, entity, payload });
45
+ }
46
+
38
47
  process.stdin.setEncoding('utf8');
39
48
  process.stdin.on('data', (chunk) => { input += chunk; });
40
49
  process.stdin.on('end', () => {
41
50
  try {
42
51
  const data = JSON.parse(input);
52
+ payload = data;
43
53
  if (!data.tool_input) {
44
54
  // Schema-flip signal — Claude Code has renamed `tool_input` for
45
55
  // transcript blocks before. Trace so the rename surfaces day-1.
46
56
  try { process.stderr.write(`[memesh pre-edit-recall] tool_input absent (keys: ${Object.keys(data).join(',')}); skipping\n`); } catch {}
57
+ record('skipped', SKIP_REASONS.toolInputAbsent);
47
58
  return pass();
48
59
  }
49
60
  const toolInput = data.tool_input;
@@ -51,6 +62,7 @@ process.stdin.on('end', () => {
51
62
 
52
63
  // Only process if we have a file path
53
64
  if (!filePath || typeof filePath !== 'string') {
65
+ record('skipped', SKIP_REASONS.noFilePath);
54
66
  return pass();
55
67
  }
56
68
 
@@ -69,7 +81,10 @@ process.stdin.on('end', () => {
69
81
  }
70
82
  const throttled = seenFiles.includes(fileKey);
71
83
 
72
- if (!existsSync(dbPath)) return pass();
84
+ if (!existsSync(dbPath)) {
85
+ record('skipped', SKIP_REASONS.noDatabaseForRecall);
86
+ return pass();
87
+ }
73
88
 
74
89
  // Get project name from cwd for project-scoped RECALL filtering — this
75
90
  // spawns 1-2 git subprocesses, and the throttled path (every repeat
@@ -102,6 +117,7 @@ process.stdin.on('end', () => {
102
117
  db.prepare('SELECT 1').get();
103
118
  } catch {
104
119
  db.close();
120
+ record('error', 'the database stayed locked past the hook busy timeout');
105
121
  return pass();
106
122
  }
107
123
  let guardMatches = [];
@@ -236,6 +252,7 @@ process.stdin.on('end', () => {
236
252
  }
237
253
 
238
254
  if (guardMatches.length === 0 && recallLines.length === 0) {
255
+ record('skipped', SKIP_REASONS.nothingToRecall);
239
256
  return pass();
240
257
  }
241
258
 
@@ -257,6 +274,19 @@ process.stdin.on('end', () => {
257
274
  additionalContext: buildReferenceContext(lines),
258
275
  },
259
276
  }));
277
+ // A recall hook produces an INJECTION, so it records `notified`, not
278
+ // `wrote`: doctor's `writes` answers "is memory capture still alive",
279
+ // and recalling a memory is not storing one.
280
+ //
281
+ // Not "this hook writes nothing" — it does, and the distinction is the
282
+ // whole point of the outcome. `recordGuardFires` above issues an
283
+ // `UPDATE entities SET metadata = json_set(… '$.guard.fires' …)`
284
+ // (_shared.js), bumping a counter on a memory that already exists. That
285
+ // is a write to the database and NOT a write of a memory, which is what
286
+ // `writes` counts. guard-check.js does the same thing for the same
287
+ // reason. A run of skips here is normal; a long run of them on a machine
288
+ // that edits files daily is not (#327).
289
+ record('notified', undefined, `injected:${guardMatches.length}g+${recallLines.length}r`);
260
290
  } catch (err) {
261
291
  // Never crash Claude Code, but trace — peer hooks (post-commit,
262
292
  // pre-compact, session-summary) all stderr-trace their outer
@@ -264,6 +294,7 @@ process.stdin.on('end', () => {
264
294
  // would silently break continuous recall on every Edit/Write
265
295
  // tool call indefinitely.
266
296
  try { process.stderr.write(`[memesh pre-edit-recall] ${err?.message || err}\n`); } catch {}
297
+ record('error', hookErrorReason(err));
267
298
  pass();
268
299
  }
269
300
  });