@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
@@ -0,0 +1,140 @@
1
+ import { redactSecrets, redactUserPaths } from './paths.js';
2
+ import { EVIDENCE_LAYER_TYPES, isAutoInjectable, topologyLine } from './work-topology.js';
3
+ export const INDEX_MAX_LINES = 40;
4
+ export const INDEX_MAX_BYTES = 3072;
5
+ export const INDEX_STALE_DAYS = 180;
6
+ export const INDEX_LINE_MAX_CHARS = 120;
7
+ export const INDEX_SNIPPET_FETCH_CHARS = 4000;
8
+ export const INDEX_CANDIDATE_CAP = 2000;
9
+ export const INDEX_EXCLUDED_TYPES = [...EVIDENCE_LAYER_TYPES, 'task-state'];
10
+ export function isIndexableType(type) {
11
+ return !INDEX_EXCLUDED_TYPES.includes(type || 'memory');
12
+ }
13
+ const DAY_MS = 24 * 60 * 60 * 1000;
14
+ function byteLength(text) {
15
+ return new TextEncoder().encode(text).length;
16
+ }
17
+ function sectionBytes(lines) {
18
+ return lines.reduce((sum, line) => sum + byteLength(line) + 1, 0);
19
+ }
20
+ function parseActivity(value) {
21
+ if (!value)
22
+ return Number.NaN;
23
+ const iso = /[zZ]|[+-]\d\d:?\d\d$/.test(value) ? value : `${value.replace(' ', 'T')}Z`;
24
+ return Date.parse(iso);
25
+ }
26
+ function compareIndexCandidates(a, b) {
27
+ const at = parseActivity(a.lastActivity);
28
+ const bt = parseActivity(b.lastActivity);
29
+ const av = Number.isNaN(at) ? -Infinity : at;
30
+ const bv = Number.isNaN(bt) ? -Infinity : bt;
31
+ if (av !== bv)
32
+ return bv - av;
33
+ return b.id - a.id;
34
+ }
35
+ function candidateIsAutoInjectable(metadata) {
36
+ if (metadata == null)
37
+ return true;
38
+ if (typeof metadata === 'string') {
39
+ let parsed;
40
+ try {
41
+ parsed = JSON.parse(metadata);
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ return parsed !== null && typeof parsed === 'object' && isAutoInjectable(parsed);
47
+ }
48
+ return isAutoInjectable(metadata);
49
+ }
50
+ function redact(text) {
51
+ if (!text)
52
+ return '';
53
+ return redactUserPaths(redactSecrets(String(text))).replace(/\s+/g, ' ').trim();
54
+ }
55
+ function indexLine(candidate) {
56
+ const title = redact(candidate.title);
57
+ const snippet = redact(candidate.snippet);
58
+ const repeats = title && snippet && snippet.toLowerCase().startsWith(title.replace(/…$/, '').toLowerCase());
59
+ const text = title && snippet && !repeats ? `${title} — ${snippet}` : (title || snippet);
60
+ return topologyLine({ name: String(candidate.id), id: candidate.id, type: candidate.type || 'memory', title: text || null }, INDEX_LINE_MAX_CHARS);
61
+ }
62
+ function indexHeading(projectName) {
63
+ return `Index of durable memories for "${projectName}" (newest first):`;
64
+ }
65
+ function indexEmptyLine(projectName) {
66
+ return `- No durable memories (decisions, lessons, patterns, references) for "${projectName}" yet.`;
67
+ }
68
+ function moreLine(n, truncated) {
69
+ return `- ${n}${truncated ? '+' : ''} more — memesh recall --tag "project:…"`;
70
+ }
71
+ function olderLine(n, truncated) {
72
+ return `- ${n}${truncated ? '+' : ''} older memor${n === 1 ? 'y' : 'ies'} (no change in ${INDEX_STALE_DAYS} days) — recall to see`;
73
+ }
74
+ function footerLine(shown, bytes, tokens) {
75
+ return `(index cost: ${shown} line${shown === 1 ? '' : 's'}, ${bytes} bytes ≈ ${tokens} tokens; cap ${INDEX_MAX_LINES} lines / ${INDEX_MAX_BYTES} bytes)`;
76
+ }
77
+ function closeWithFooter(lines, shown) {
78
+ const above = sectionBytes(lines);
79
+ let footer = footerLine(shown, above, Math.ceil(above / 4));
80
+ for (let step = 0; step < 8; step++) {
81
+ const bytes = above + byteLength(footer) + 1;
82
+ const tokens = Math.ceil(bytes / 4);
83
+ const next = footerLine(shown, bytes, tokens);
84
+ if (next === footer)
85
+ return { lines: [...lines, footer], bytes, tokens };
86
+ footer = next;
87
+ }
88
+ throw new Error('briefing index: the footer cost did not converge');
89
+ }
90
+ export function buildBriefingIndex(candidates, projectName, now, options = {}) {
91
+ const truncated = options.truncated === true;
92
+ const cutoff = now - INDEX_STALE_DAYS * DAY_MS;
93
+ const eligible = candidates
94
+ .filter((c) => isIndexableType(c.type) && candidateIsAutoInjectable(c.metadata))
95
+ .slice()
96
+ .sort(compareIndexCandidates);
97
+ const current = [];
98
+ let older = 0;
99
+ for (const c of eligible) {
100
+ const at = parseActivity(c.lastActivity);
101
+ if (!Number.isNaN(at) && at < cutoff)
102
+ older++;
103
+ else
104
+ current.push(c);
105
+ }
106
+ const heading = indexHeading(projectName);
107
+ if (current.length === 0 && older === 0) {
108
+ const closed = closeWithFooter([heading, indexEmptyLine(projectName)], 0);
109
+ return { ...closed, shown: 0, more: 0, older: 0, truncated, ids: [] };
110
+ }
111
+ const reserve = sectionBytes([
112
+ moreLine(current.length, truncated),
113
+ olderLine(older, truncated),
114
+ footerLine(INDEX_MAX_LINES, INDEX_MAX_BYTES, INDEX_MAX_BYTES),
115
+ ]);
116
+ const budget = INDEX_MAX_BYTES - reserve - sectionBytes([heading]);
117
+ const rendered = [];
118
+ const ids = [];
119
+ let used = 0;
120
+ for (const c of current) {
121
+ if (rendered.length >= INDEX_MAX_LINES)
122
+ break;
123
+ const line = indexLine(c);
124
+ const cost = byteLength(line) + 1;
125
+ if (used + cost > budget)
126
+ break;
127
+ rendered.push(line);
128
+ ids.push(c.id);
129
+ used += cost;
130
+ }
131
+ const more = current.length - rendered.length;
132
+ const above = [heading, ...rendered];
133
+ if (more > 0)
134
+ above.push(moreLine(more, truncated));
135
+ if (older > 0)
136
+ above.push(olderLine(older, truncated));
137
+ const closed = closeWithFooter(above, rendered.length);
138
+ return { ...closed, shown: rendered.length, more, older, truncated, ids };
139
+ }
140
+ //# sourceMappingURL=briefing-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"briefing-index.js","sourceRoot":"","sources":["../../src/core/briefing-index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,12 @@
1
+ import { type BriefingIndex } from './briefing-index.js';
2
+ import type { MemeshDatabase } from '../storage/sqlite.js';
1
3
  export interface BriefingResult {
2
4
  project: string;
3
5
  text: string;
4
6
  entityCount: number;
5
7
  hasTaskState: boolean;
8
+ index: BriefingIndex;
6
9
  }
10
+ export declare function readBriefingIndex(db: MemeshDatabase, projectName: string, now?: number): BriefingIndex;
7
11
  export declare function assembleBriefing(project?: string, recipient?: string): BriefingResult;
8
12
  //# sourceMappingURL=briefing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"briefing.d.ts","sourceRoot":"","sources":["../../src/core/briefing.ts"],"names":[],"mappings":"AAgDA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,OAAO,CAAC;CACvB;AAuFD,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAgJrF"}
1
+ {"version":3,"file":"briefing.d.ts","sourceRoot":"","sources":["../../src/core/briefing.ts"],"names":[],"mappings":"AAmCA,OAAO,EAKL,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAc3D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,OAAO,CAAC;IAItB,KAAK,EAAE,aAAa,CAAC;CACtB;AA8FD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,aAAa,CAiClH;AAOD,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAoKrF"}
@@ -2,10 +2,11 @@ import { getDatabase } from '../db.js';
2
2
  import { getProjectName } from './paths.js';
3
3
  import { readRepoState, repoStateLines } from './repo-state.js';
4
4
  import { rankEntities } from './scoring.js';
5
- import { getTaskState } from './task-state-store.js';
5
+ import { getTaskState, TaskStateUnreadableError } from './task-state-store.js';
6
6
  import { recipientEverSeen, unreadDeliveryCount, unreadInboxLines } from './agent-message-inbox.js';
7
7
  import { canonicalAgentScopeId } from './agent-scope-id.js';
8
8
  import { taskStateLines } from './task-state.js';
9
+ import { INDEX_CANDIDATE_CAP, INDEX_EXCLUDED_TYPES, INDEX_SNIPPET_FETCH_CHARS, buildBriefingIndex, } from './briefing-index.js';
9
10
  import { GLOBAL_TOPOLOGY_LIMIT, SNIPPET_FETCH_CHARS, TOPOLOGY_CANDIDATE_CAP, assembleTopologyBlock, buildReferenceContext, isAutoInjectable, } from './work-topology.js';
10
11
  const PROJECT_LIMIT = 30;
11
12
  const RECENT_LIMIT = 5;
@@ -49,20 +50,54 @@ function toTopologyEntity(row, snippet) {
49
50
  signalScore: typeof signal === 'number' ? signal : null,
50
51
  };
51
52
  }
53
+ export function readBriefingIndex(db, projectName, now = Date.now()) {
54
+ const hasNamespace = db.prepare('PRAGMA table_info(entities)').all()
55
+ .some((column) => column.name === 'namespace');
56
+ const nonGlobal = hasNamespace ? " AND (e.namespace IS NULL OR e.namespace <> 'global')" : '';
57
+ const excluded = INDEX_EXCLUDED_TYPES.map(() => '?').join(',');
58
+ const rows = db.prepare(`SELECT e.id, e.type, e.title, e.metadata,
59
+ (SELECT substr(o.content, 1, ${INDEX_SNIPPET_FETCH_CHARS}) FROM observations o
60
+ WHERE o.entity_id = e.id ORDER BY o.id ASC LIMIT 1) AS snippet,
61
+ max(e.created_at, COALESCE((SELECT MAX(o2.created_at) FROM observations o2
62
+ WHERE o2.entity_id = e.id), e.created_at)) AS last_activity
63
+ FROM entities e
64
+ WHERE e.id IN (SELECT entity_id FROM tags WHERE tag = ?)
65
+ AND e.status = 'active'${nonGlobal}
66
+ AND e.type NOT IN (${excluded})
67
+ ORDER BY last_activity DESC, e.id DESC
68
+ LIMIT ?`).all(`project:${projectName}`, ...INDEX_EXCLUDED_TYPES, INDEX_CANDIDATE_CAP);
69
+ const candidates = rows.map((row) => ({
70
+ id: row.id,
71
+ type: row.type,
72
+ title: row.title,
73
+ snippet: row.snippet,
74
+ lastActivity: row.last_activity,
75
+ metadata: row.metadata,
76
+ }));
77
+ return buildBriefingIndex(candidates, projectName, now, { truncated: rows.length >= INDEX_CANDIDATE_CAP });
78
+ }
52
79
  export function assembleBriefing(project, recipient) {
53
80
  const projectName = project ?? getProjectName();
54
81
  const db = getDatabase();
55
82
  const repoLines = (project === undefined || project === getProjectName())
56
83
  ? repoStateLines(readRepoState())
57
84
  : [];
58
- const { state } = getTaskState(projectName);
85
+ let taskLines;
86
+ try {
87
+ taskLines = taskStateLines(getTaskState(projectName).state, projectName);
88
+ }
89
+ catch (err) {
90
+ if (!(err instanceof TaskStateUnreadableError))
91
+ throw err;
92
+ taskLines = [`task state for ${projectName}: ${err.message}`];
93
+ }
59
94
  const inboxRecipient = recipient === undefined ? undefined : canonicalAgentScopeId(recipient);
60
95
  const unreadCount = unreadDeliveryCount(db, canonicalAgentScopeId(projectName), inboxRecipient);
61
96
  const everSeen = inboxRecipient !== undefined && unreadCount === 0
62
97
  ? recipientEverSeen(db, canonicalAgentScopeId(projectName), inboxRecipient)
63
98
  : undefined;
64
99
  const stateLines = [
65
- ...taskStateLines(state, projectName),
100
+ ...taskLines,
66
101
  ...unreadInboxLines(unreadCount, canonicalAgentScopeId(projectName), inboxRecipient, everSeen),
67
102
  ];
68
103
  const hasNamespace = db.prepare('PRAGMA table_info(entities)').all()
@@ -112,11 +147,14 @@ export function assembleBriefing(project, recipient) {
112
147
  const withRepo = lines.length > 0 && repoLines.length > 0
113
148
  ? [...repoLines, '', ...lines]
114
149
  : lines;
150
+ const index = readBriefingIndex(db, projectName);
151
+ const block = withRepo.length > 0 ? [...withRepo, '', ...index.lines] : index.lines;
115
152
  return {
116
153
  project: projectName,
117
- text: lines.length > 0 ? buildReferenceContext(withRepo) : '',
154
+ text: buildReferenceContext(block),
118
155
  entityCount: lines.filter((l) => l.startsWith('- [')).length,
119
156
  hasTaskState: stateLines.length > 0,
157
+ index,
120
158
  };
121
159
  }
122
160
  //# sourceMappingURL=briefing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"briefing.js","sourceRoot":"","sources":["../../src/core/briefing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"briefing.js","sourceRoot":"","sources":["../../src/core/briefing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ export type HookOutcome = 'wrote' | 'skipped' | 'notified' | 'error';
2
+ export type HookHost = 'claude-code' | 'codex' | 'unknown';
3
+ export interface HookOutcomeRecord {
4
+ hook: string;
5
+ at: string;
6
+ host: HookHost;
7
+ outcome: HookOutcome;
8
+ reason?: string;
9
+ entity?: string;
10
+ }
11
+ export interface HookOutcomeFile {
12
+ hooks: Record<string, HookOutcomeRecord[]>;
13
+ }
14
+ export declare const HOOK_OUTCOMES_FILENAME = "hook-outcomes.jsonl";
15
+ export declare const HOOK_OUTCOMES_PER_HOOK = 20;
16
+ export declare const HOOK_OUTCOMES_NOT_TRIGGERED_PER_HOOK = 5;
17
+ export declare function isTriggeredRecord(record: Pick<HookOutcomeRecord, 'hook' | 'outcome' | 'reason'>): boolean;
18
+ export declare const HOOK_OUTCOMES_ROTATE_BYTES: number;
19
+ export declare function serializeHookOutcome(record: HookOutcomeRecord): string;
20
+ export declare function trimHookOutcomeLines(raw: string, max?: number, maxBytes?: number): string;
21
+ export declare const SILENT_HOOK_MIN_RUNS = 5;
22
+ export declare const CAPTURE_HOOKS: readonly ["post-commit", "session-summary", "pre-compact", "pre-edit-recall", "user-prompt-intent", "decision-nudge", "guard-check", "session-start", "note-ingest", "remember-nudge"];
23
+ export declare const FAIL_ELIGIBLE_HOOKS: readonly ["session-summary"];
24
+ export declare const SILENT_ELIGIBLE_HOOKS: readonly ["post-commit", "session-summary", "pre-compact"];
25
+ export declare const SKIP_REASONS: {
26
+ readonly notBash: "not a Bash tool call";
27
+ readonly notGitCommit: "not a git commit command";
28
+ readonly commitLineMissing: "a git commit ran but printed no commit line";
29
+ readonly commitHeadBaseline: "recorded the repository HEAD baseline; no history was backfilled";
30
+ readonly commitHeadUnchanged: "a commit-like command completed but repository HEAD did not change";
31
+ readonly commitHeadUnresolvable: "a commit-like command ran but repository HEAD could not be resolved";
32
+ readonly alreadyCaptured: "this session was already captured";
33
+ readonly payloadTooLarge: "payload exceeded the stdin byte cap";
34
+ readonly toolNameAbsent: "tool_name absent in payload";
35
+ readonly notDecisionTool: "not a decision-shaped tool call";
36
+ readonly noSessionId: "no usable session_id in the payload";
37
+ readonly alreadyNudged: "already nudged for this tool in this session";
38
+ readonly noBashCommand: "no Bash command in the payload";
39
+ readonly noDatabaseForGuards: "no database yet — nothing to guard against";
40
+ readonly noGuardMatched: "no active guard matched this command";
41
+ readonly autoCaptureOff: "auto-capture is turned off";
42
+ readonly commitCwdAbsent: "data.cwd absent — cannot resolve project or repo";
43
+ readonly hashNotACommit: "the hash is not a commit in this repository";
44
+ readonly noSessionOrTranscript: "neither session_id nor transcript_path in the payload";
45
+ readonly emptyStdin: "empty stdin";
46
+ readonly cwdAbsent: "cwd absent in payload — cannot resolve project";
47
+ readonly notAgenticLoop: "not an agentic loop";
48
+ readonly transcriptPathAbsent: "transcript_path absent";
49
+ readonly transcriptGone: "the transcript file named by the payload is gone";
50
+ readonly tooLittleActivity: "too little activity in the session to be worth saving";
51
+ readonly noRuleMatched: "no rule matched (no edited file and fewer than 20 tool calls)";
52
+ readonly allMatchedEntitiesArchived: "every rule that matched targeted an entity the user forget-archived";
53
+ readonly toolInputAbsent: "tool_input absent in payload";
54
+ readonly noFilePath: "no file_path in the tool input";
55
+ readonly noDatabaseForRecall: "no database yet — nothing to recall";
56
+ readonly nothingToRecall: "no guard matched and nothing to recall for this file";
57
+ readonly noPromptIntent: "the prompt carried no remember intent and no update decision";
58
+ readonly noMemoryDir: "no Claude Code memory directory for this project";
59
+ readonly noNoteChanged: "no note file changed since the last ingestion";
60
+ readonly noteIngesterNotBuilt: "the note ingester is not built (dist/core/note-ingest.js is missing)";
61
+ readonly noteNothingNew: "note files were read and nothing new needed storing";
62
+ readonly noteFilesRefused: "note files were refused and nothing was stored";
63
+ readonly noTranscript: "no transcript to read";
64
+ readonly trivialTurn: "trivial turn — too few tool calls since the last Stop";
65
+ readonly noDecisionMove: "no decision-shaped move since the last Stop";
66
+ readonly memoryWritten: "a memory was written since the last Stop";
67
+ readonly noteFileChanged: "a note file changed since the last Stop";
68
+ };
69
+ export declare const UNRECOGNISED_REASON = "unrecognised reason";
70
+ export declare function renderableSkipReason(reason: string | undefined): string;
71
+ export declare function isGitCommitCommand(command: string): boolean;
72
+ export declare const NOT_TRIGGERED_SKIP_REASONS: Readonly<Record<string, readonly string[]>>;
73
+ export declare const UNCLASSIFIED_SKIP_HOOKS: readonly ["pre-compact", "pre-edit-recall", "user-prompt-intent", "decision-nudge", "guard-check", "session-start"];
74
+ export declare const NEVER_RAN_GRACE_HOURS = 72;
75
+ export declare function parseHookOutcomes(raw: string | null | undefined, limit?: number): HookOutcomeFile;
76
+ export declare function parseHookOutcomeLine(line: string): HookOutcomeRecord | null;
77
+ export declare const RECORD_TEXT_MAX = 200;
78
+ export declare function sanitizeRecordText(text: string): string;
79
+ export interface HookLivenessSummary {
80
+ hook: string;
81
+ runs: number;
82
+ triggeredRuns: number;
83
+ writes: number;
84
+ skips: number;
85
+ errors: number;
86
+ lastRunAt: string | null;
87
+ firstTriggeredAt: string | null;
88
+ lastWriteAt: string | null;
89
+ lastEntity: string | null;
90
+ notifies: number;
91
+ lastNotifiedAt: string | null;
92
+ lastSkipReason: string | null;
93
+ dominantSkipReason: string | null;
94
+ dominantSkipCount: number;
95
+ hosts: HookHost[];
96
+ silent: boolean;
97
+ }
98
+ export declare function summarizeHookOutcomes(file: HookOutcomeFile): HookLivenessSummary[];
99
+ export interface TypeTrend {
100
+ type: string;
101
+ last7: number;
102
+ prev7: number;
103
+ stopped: boolean;
104
+ }
105
+ export declare function summarizeTypeTrends(rows: Array<{
106
+ type: string;
107
+ last7: number;
108
+ prev7: number;
109
+ }>): TypeTrend[];
110
+ export type CaptureLivenessStatus = 'PASS' | 'PASS_WITH_CONCERNS' | 'FAIL';
111
+ export interface CaptureLivenessInput {
112
+ hooks: HookLivenessSummary[];
113
+ types: TypeTrend[];
114
+ neverRanHooks?: string[];
115
+ measuringHours?: number | null;
116
+ }
117
+ export interface CaptureLivenessVerdict {
118
+ status: CaptureLivenessStatus;
119
+ silentHook: HookLivenessSummary | null;
120
+ stoppedTypes: TypeTrend[];
121
+ deadHooks: string[];
122
+ }
123
+ export declare function captureLivenessVerdict(input: CaptureLivenessInput): CaptureLivenessVerdict;
124
+ export declare function captureLivenessNotice(verdict: CaptureLivenessVerdict): string | null;
125
+ export declare const GRACE_SESSIONS = 3;
126
+ export declare const GRACE_HOURS = 24;
127
+ export interface CaptureGraceState {
128
+ version: string;
129
+ firstSeenAt: string;
130
+ sessions: number;
131
+ }
132
+ export declare function parseGraceState(raw: string | null | undefined): CaptureGraceState | null;
133
+ export declare function advanceGraceState(previous: CaptureGraceState | null, version: string, nowMs: number): CaptureGraceState;
134
+ export declare function graceInEffect(state: CaptureGraceState, nowMs: number): boolean;
135
+ export declare function detectHookHost(payload: Record<string, unknown> | null | undefined, env?: Record<string, string | undefined>): HookHost;
136
+ //# sourceMappingURL=capture-liveness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-liveness.d.ts","sourceRoot":"","sources":["../../src/core/capture-liveness.ts"],"names":[],"mappings":"AAuCA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAGrE,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;CAC5C;AAmBD,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAa5D,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAazC,eAAO,MAAM,oCAAoC,IAAI,CAAC;AAiCtD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC,GAAG,OAAO,CAGzG;AAsCD,eAAO,MAAM,0BAA0B,QAAY,CAAC;AAGpD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEtE;AASD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAA+B,EACpC,QAAQ,GAAE,MAAmC,GAC5C,MAAM,CA8BR;AAoBD,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAMtC,eAAO,MAAM,aAAa,wLAgBhB,CAAC;AAaX,eAAO,MAAM,mBAAmB,8BAA+B,CAAC;AAehE,eAAO,MAAM,qBAAqB,4DAA6D,CAAC;AAShG,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Ef,CAAC;AAKX,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AASzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGvE;AA0BD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAgB3D;AAmFD,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAoBlF,CAAC;AAkBF,eAAO,MAAM,uBAAuB,qHAO1B,CAAC;AASX,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAgBxC,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9B,KAAK,GAAE,MAA+B,GACrC,eAAe,CAUjB;AAGD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAkC3E;AAGD,eAAO,MAAM,eAAe,MAAM,CAAC;AAQnC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IAOb,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAM1B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAKlB,MAAM,EAAE,OAAO,CAAC;CACjB;AAGD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,GAAG,mBAAmB,EAAE,CASlF;AA0FD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IAEd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1D,SAAS,EAAE,CAIb;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,oBAAoB,GAAG,MAAM,CAAC;AAE3E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,KAAK,EAAE,SAAS,EAAE,CAAC;IAEnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,qBAAqB,CAAC;IAE9B,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAEvC,YAAY,EAAE,SAAS,EAAE,CAAC;IAE1B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAOD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,oBAAoB,GAAG,sBAAsB,CAuB1F;AASD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI,CAgBpF;AAYD,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B,MAAM,WAAW,iBAAiB;IAEhC,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW,EAAE,MAAM,CAAC;IAEpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,GAAG,IAAI,CAaxF;AAGD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,iBAAiB,GAAG,IAAI,EAClC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,iBAAiB,CAKnB;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAO9E;AAWD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EACnD,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAM,GAC3C,QAAQ,CAYV"}