stellar-memory 0.8.2 → 0.8.4

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * sun.ts Sun state management
2
+ * sun.ts ??Sun state management
3
3
  *
4
4
  * The "sun" is the gravitational centre of the memory system: it holds the
5
5
  * current working context (what the AI is doing right now). Every memory
@@ -14,8 +14,10 @@
14
14
  import { getSunState, upsertSunState, getRecentMemories, } from '../storage/queries.js';
15
15
  import { estimateTokens } from '../utils/tokenizer.js';
16
16
  import { getConfig } from '../utils/config.js';
17
+ import { filterActiveMemories } from './validity.js';
17
18
  import { createMemory } from './planet.js';
18
19
  import { corona } from './corona.js';
20
+ import { getSessionCommitDraft } from './session-policy.js';
19
21
  // ---------------------------------------------------------------------------
20
22
  // Public API
21
23
  // ---------------------------------------------------------------------------
@@ -29,8 +31,8 @@ export function getSunContent(project) {
29
31
  return `[STELLAR MEMORY - project: ${project}]\n\nNo memories committed yet. Use stellar_commit to record your current work.`;
30
32
  }
31
33
  // Read from the corona in-memory cache instead of hitting the DB.
32
- const coreMemories = corona.getCoreMemories();
33
- const nearMemories = corona.getNearMemories();
34
+ const coreMemories = filterActiveMemories(corona.getCoreMemories());
35
+ const nearMemories = filterActiveMemories(corona.getNearMemories());
34
36
  return formatSunContent(sun, coreMemories, nearMemories);
35
37
  }
36
38
  /**
@@ -76,7 +78,7 @@ export function commitToSun(project, data) {
76
78
  const nearMemories = corona.getNearMemories();
77
79
  const formatted = formatSunContent(updated, coreMemories, nearMemories);
78
80
  updated.token_count = estimateTokens(formatted);
79
- // Warn in dev if we exceed the budget the consumer (getSunContent) is
81
+ // Warn in dev if we exceed the budget ??the consumer (getSunContent) is
80
82
  // responsible for truncation, but we record the real count here.
81
83
  if (updated.token_count > config.sunTokenBudget) {
82
84
  process.stderr.write(`[sun] token count ${updated.token_count} exceeds budget ${config.sunTokenBudget} for project "${project}"\n`);
@@ -95,22 +97,24 @@ export function commitToSun(project, data) {
95
97
  *
96
98
  * New priority order (Corona-aware):
97
99
  * 1. Header
98
- * 2. CORE IDENTITY core zone memories (instant recall, ~40% budget)
100
+ * 2. CORE IDENTITY ??core zone memories (instant recall, ~40% budget)
99
101
  * 3. WORKING ON (current_work, ~10%)
100
- * 4. ACTIVE CONTEXT near zone memories (~25%)
102
+ * 4. ACTIVE CONTEXT ??near zone memories (~25%)
101
103
  * 5. RECENT DECISIONS / NEXT STEPS / ACTIVE ISSUES (~25%)
102
104
  */
103
105
  export function formatSunContent(sun, coreMemories, nearMemories) {
104
106
  const config = getConfig();
105
107
  const budget = config.sunTokenBudget;
108
+ const activeCoreMemories = filterActiveMemories(coreMemories);
109
+ const activeNearMemories = filterActiveMemories(nearMemories);
106
110
  const MAX_CORE_DISPLAY = 5;
107
111
  const MAX_NEAR_DISPLAY = 5;
108
112
  const SUMMARY_LIMIT = 80;
109
113
  /** Truncate summary to SUMMARY_LIMIT characters. */
110
- const truncSummary = (s) => s.length > SUMMARY_LIMIT ? s.slice(0, SUMMARY_LIMIT).trimEnd() + '' : s;
114
+ const truncSummary = (s) => s.length > SUMMARY_LIMIT ? s.slice(0, SUMMARY_LIMIT).trimEnd() + '...' : s;
111
115
  // Build candidate sections in priority order.
112
116
  const sections = [];
113
- // 1. Header always included. Add [STALE] warning if last commit > 24h ago.
117
+ // 1. Header ??always included. Add [STALE] warning if last commit > 24h ago.
114
118
  let header = `[STELLAR MEMORY - project: ${sun.project}]`;
115
119
  if (sun.last_commit_at) {
116
120
  const lastCommitMs = new Date(/[Zz]$|[+-]\d{2}:\d{2}$/.test(sun.last_commit_at)
@@ -118,36 +122,36 @@ export function formatSunContent(sun, coreMemories, nearMemories) {
118
122
  : sun.last_commit_at + 'Z').getTime();
119
123
  const hoursSince = (Date.now() - lastCommitMs) / (1000 * 60 * 60);
120
124
  if (hoursSince > 24) {
121
- header += ` [STALE last commit ${Math.floor(hoursSince)}h ago. Run commit to refresh.]`;
125
+ header += ` [STALE ??last commit ${Math.floor(hoursSince)}h ago. Run commit to refresh.]`;
122
126
  }
123
127
  }
124
128
  sections.push(header);
125
- // 2. CORE IDENTITY core zone memories (distance < 1.0 AU).
126
- // Compressed format: [TYPE] summary (no AU distance saves tokens)
127
- if (coreMemories.length > 0) {
128
- const displayed = coreMemories.slice(0, MAX_CORE_DISPLAY);
129
+ // 2. CORE IDENTITY ??core zone memories (distance < 1.0 AU).
130
+ // Compressed format: [TYPE] summary (no AU distance ??saves tokens)
131
+ if (activeCoreMemories.length > 0) {
132
+ const displayed = activeCoreMemories.slice(0, MAX_CORE_DISPLAY);
129
133
  const lines = displayed
130
134
  .map(m => ` [${m.type.toUpperCase()}] ${truncSummary(m.summary)}`)
131
135
  .join('\n');
132
- const overflow = coreMemories.length > MAX_CORE_DISPLAY
133
- ? `\n (+${coreMemories.length - MAX_CORE_DISPLAY} more)`
136
+ const overflow = activeCoreMemories.length > MAX_CORE_DISPLAY
137
+ ? `\n (+${activeCoreMemories.length - MAX_CORE_DISPLAY} more)`
134
138
  : '';
135
- sections.push(`\nCORE (${coreMemories.length}):\n${lines}${overflow}`);
139
+ sections.push(`\nCORE (${activeCoreMemories.length}):\n${lines}${overflow}`);
136
140
  }
137
141
  // 3. Current work.
138
142
  if (sun.current_work && sun.current_work.trim().length > 0) {
139
143
  sections.push(`\nWORKING ON:\n${sun.current_work.trim()}`);
140
144
  }
141
- // 4. ACTIVE CONTEXT near zone memories (1.0-5.0 AU).
142
- if (nearMemories.length > 0) {
143
- const displayed = nearMemories.slice(0, MAX_NEAR_DISPLAY);
145
+ // 4. ACTIVE CONTEXT ??near zone memories (1.0-5.0 AU).
146
+ if (activeNearMemories.length > 0) {
147
+ const displayed = activeNearMemories.slice(0, MAX_NEAR_DISPLAY);
144
148
  const lines = displayed
145
149
  .map(m => ` [${m.type.toUpperCase()}] ${truncSummary(m.summary)}`)
146
150
  .join('\n');
147
- const overflow = nearMemories.length > MAX_NEAR_DISPLAY
148
- ? `\n (+${nearMemories.length - MAX_NEAR_DISPLAY} more)`
151
+ const overflow = activeNearMemories.length > MAX_NEAR_DISPLAY
152
+ ? `\n (+${activeNearMemories.length - MAX_NEAR_DISPLAY} more)`
149
153
  : '';
150
- sections.push(`\nNEAR (${nearMemories.length}):\n${lines}${overflow}`);
154
+ sections.push(`\nNEAR (${activeNearMemories.length}):\n${lines}${overflow}`);
151
155
  }
152
156
  // 5. Recent decisions (max 3).
153
157
  const decisions = sun.recent_decisions.slice(0, 3);
@@ -172,7 +176,7 @@ export function formatSunContent(sun, coreMemories, nearMemories) {
172
176
  for (const section of sections) {
173
177
  const candidate = result + (result.length > 0 ? '\n' : '') + section;
174
178
  if (estimateTokens(candidate) > budget) {
175
- // This section would push us over stop here.
179
+ // This section would push us over ??stop here.
176
180
  break;
177
181
  }
178
182
  result = candidate;
@@ -194,16 +198,17 @@ export function formatSunContent(sun, coreMemories, nearMemories) {
194
198
  * This prevents session context from being lost when Claude's process
195
199
  * ends (e.g., SIGTERM from Claude Desktop, pipe close from Claude Code).
196
200
  *
197
- * Uses synchronous DB calls only async is unsafe in exit handlers.
201
+ * Uses synchronous DB calls only ??async is unsafe in exit handlers.
198
202
  */
199
203
  /**
200
204
  * Auto-commit modes:
201
- * - 'shutdown': final commit on process exit always writes
202
- * - 'periodic': background timer skips if a manual commit happened recently
205
+ * - 'shutdown': final commit on process exit ??always writes
206
+ * - 'periodic': background timer ??skips if a manual commit happened recently
203
207
  */
204
208
  export function autoCommitOnClose(project, mode = 'shutdown') {
205
209
  try {
206
210
  const existing = getSunState(project);
211
+ const sessionDraft = getSessionCommitDraft(project, existing);
207
212
  // Protect recent manual commits from being overwritten by auto-generated content.
208
213
  // Shutdown: skip if commit < 30 min ago. Periodic: skip if commit < 10 min ago.
209
214
  if (existing?.last_commit_at) {
@@ -216,7 +221,7 @@ export function autoCommitOnClose(project, mode = 'shutdown') {
216
221
  return;
217
222
  }
218
223
  const recent = getRecentMemories(project, 3);
219
- if (recent.length === 0)
224
+ if (recent.length === 0 && !sessionDraft)
220
225
  return;
221
226
  // Group by type
222
227
  const byType = new Map();
@@ -225,22 +230,26 @@ export function autoCommitOnClose(project, mode = 'shutdown') {
225
230
  list.push(m.summary);
226
231
  byType.set(m.type, list);
227
232
  }
228
- // Always merge with existing sun state never overwrite.
233
+ // Always merge with existing sun state ??never overwrite.
229
234
  // Keep existing current_work/decisions and supplement with new memories.
230
235
  const current_work = existing?.current_work
231
- ? existing.current_work
232
- : byType.get('context')?.slice(0, 3).join('; ')
233
- ?? byType.get('task')?.slice(0, 3).join('; ')
234
- ?? `${recent.length} memories from last session`;
236
+ || sessionDraft?.current_work
237
+ || byType.get('context')?.slice(0, 3).join('; ')
238
+ || byType.get('task')?.slice(0, 3).join('; ')
239
+ || `${recent.length} memories from last session`;
235
240
  const newDecisions = byType.get('decision')?.slice(0, 5) ?? [];
241
+ const sessionDecisions = sessionDraft?.decisions ?? [];
236
242
  const decisions = existing?.recent_decisions?.length
237
- ? [...existing.recent_decisions, ...newDecisions.filter(d => !existing.recent_decisions.includes(d))].slice(0, 10)
238
- : newDecisions;
243
+ ? [...existing.recent_decisions, ...sessionDecisions.filter(d => !existing.recent_decisions.includes(d)), ...newDecisions.filter(d => !existing.recent_decisions.includes(d) && !sessionDecisions.includes(d))].slice(0, 10)
244
+ : [...sessionDecisions, ...newDecisions.filter(d => !sessionDecisions.includes(d))].slice(0, 10);
239
245
  const newSteps = byType.get('task')?.slice(0, 5) ?? [];
246
+ const sessionSteps = sessionDraft?.next_steps ?? [];
240
247
  const next_steps = existing?.next_steps?.length
241
- ? [...existing.next_steps, ...newSteps.filter(s => !existing.next_steps.includes(s))].slice(0, 10)
242
- : newSteps;
243
- const errors = byType.get('error')?.slice(0, 3) ?? [];
248
+ ? [...existing.next_steps, ...sessionSteps.filter(s => !existing.next_steps.includes(s)), ...newSteps.filter(s => !existing.next_steps.includes(s) && !sessionSteps.includes(s))].slice(0, 10)
249
+ : [...sessionSteps, ...newSteps.filter(s => !sessionSteps.includes(s))].slice(0, 10);
250
+ const recentErrors = byType.get('error')?.slice(0, 3) ?? [];
251
+ const sessionErrors = sessionDraft?.errors ?? [];
252
+ const errors = [...sessionErrors, ...recentErrors.filter(e => !sessionErrors.includes(e))].slice(0, 5);
244
253
  const now = new Date().toISOString();
245
254
  const updated = {
246
255
  project,
@@ -249,7 +258,7 @@ export function autoCommitOnClose(project, mode = 'shutdown') {
249
258
  recent_decisions: decisions,
250
259
  next_steps,
251
260
  active_errors: errors.length > 0 ? errors : (existing?.active_errors ?? []),
252
- project_context: existing?.project_context ?? '',
261
+ project_context: existing?.project_context || sessionDraft?.context || '',
253
262
  token_count: 0,
254
263
  last_commit_at: now,
255
264
  updated_at: now,
@@ -258,7 +267,7 @@ export function autoCommitOnClose(project, mode = 'shutdown') {
258
267
  process.stderr.write(`[stellar-memory] Auto-committed sun state (${mode}, ${recent.length} recent memories)\n`);
259
268
  }
260
269
  catch (err) {
261
- // Exit handler must never throw silently log and continue
270
+ // Exit handler must never throw ??silently log and continue
262
271
  process.stderr.write(`[stellar-memory] Auto-commit failed: ${err instanceof Error ? err.message : String(err)}\n`);
263
272
  }
264
273
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sun.js","sourceRoot":"","sources":["../../src/engine/sun.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sun.js","sourceRoot":"","sources":["../../src/engine/sun.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,7 @@ export declare const DEFAULT_WEIGHTS: {
39
39
  readonly impact: 0.3;
40
40
  readonly relevance: 0.2;
41
41
  };
42
+ export type MemoryValidityState = 'active' | 'future' | 'expired' | 'superseded';
42
43
  export interface Memory {
43
44
  id: string;
44
45
  project: string;
@@ -0,0 +1,5 @@
1
+ import type { Memory, MemoryValidityState } from './types.js';
2
+ export declare function getMemoryValidityState(memory: Pick<Memory, 'valid_from' | 'valid_until' | 'superseded_by'>, now?: string | number | Date): MemoryValidityState;
3
+ export declare function isMemoryCurrentlyActive(memory: Pick<Memory, 'valid_from' | 'valid_until' | 'superseded_by'>, now?: string | number | Date): boolean;
4
+ export declare function filterActiveMemories<T extends Pick<Memory, 'valid_from' | 'valid_until' | 'superseded_by'>>(memories: T[], now?: string | number | Date): T[];
5
+ //# sourceMappingURL=validity.d.ts.map
@@ -0,0 +1,32 @@
1
+ function toTimestamp(value) {
2
+ if (!value)
3
+ return null;
4
+ const normalized = /[Zz]$|[+-]\d{2}:\d{2}$/.test(value) ? value : `${value}Z`;
5
+ const timestamp = new Date(normalized).getTime();
6
+ return Number.isNaN(timestamp) ? null : timestamp;
7
+ }
8
+ export function getMemoryValidityState(memory, now = new Date()) {
9
+ const nowMs = typeof now === 'string'
10
+ ? (toTimestamp(now) ?? Date.now())
11
+ : now instanceof Date
12
+ ? now.getTime()
13
+ : now;
14
+ if (memory.superseded_by)
15
+ return 'superseded';
16
+ const validFromMs = toTimestamp(memory.valid_from);
17
+ if (validFromMs !== null && validFromMs > nowMs) {
18
+ return 'future';
19
+ }
20
+ const validUntilMs = toTimestamp(memory.valid_until);
21
+ if (validUntilMs !== null && validUntilMs <= nowMs) {
22
+ return 'expired';
23
+ }
24
+ return 'active';
25
+ }
26
+ export function isMemoryCurrentlyActive(memory, now = new Date()) {
27
+ return getMemoryValidityState(memory, now) === 'active';
28
+ }
29
+ export function filterActiveMemories(memories, now = new Date()) {
30
+ return memories.filter((memory) => isMemoryCurrentlyActive(memory, now));
31
+ }
32
+ //# sourceMappingURL=validity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validity.js","sourceRoot":"","sources":["../../src/engine/validity.ts"],"names":[],"mappings":"AAEA,SAAS,WAAW,CAAC,KAAgC;IACnD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;IAC9E,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;IACjD,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAoE,EACpE,MAA8B,IAAI,IAAI,EAAE;IAExC,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ;QACnC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAClC,CAAC,CAAC,GAAG,YAAY,IAAI;YACnB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE;YACf,CAAC,CAAC,GAAG,CAAC;IAEV,IAAI,MAAM,CAAC,aAAa;QAAE,OAAO,YAAY,CAAC;IAE9C,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,GAAG,KAAK,EAAE,CAAC;QAChD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAAoE,EACpE,MAA8B,IAAI,IAAI,EAAE;IAExC,OAAO,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,QAAQ,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,QAAa,EACb,MAA8B,IAAI,IAAI,EAAE;IAExC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3E,CAAC"}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { createStellarServer } from './mcp/server.js';
3
3
  import { initDatabase } from './storage/database.js';
4
4
  import { getConfig } from './utils/config.js';
5
5
  import { autoCommitOnClose } from './engine/sun.js';
6
- import { switchProject } from './engine/multiproject.js';
6
+ import { switchProject, getCurrentProject } from './engine/multiproject.js';
7
7
  /**
8
8
  * Validate that the runtime environment meets Stellar Memory's requirements.
9
9
  * Exits with a human-readable error message if anything is missing.
@@ -47,7 +47,7 @@ async function main() {
47
47
  if (shutdownDone)
48
48
  return;
49
49
  shutdownDone = true;
50
- autoCommitOnClose(config.defaultProject);
50
+ autoCommitOnClose(getCurrentProject());
51
51
  };
52
52
  process.on('exit', onShutdown);
53
53
  process.on('SIGTERM', () => { onShutdown(); process.exit(0); });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@ import { processConversation } from '../../engine/observation.js';
34
34
  import { findConsolidationCandidates, runConsolidation } from '../../engine/consolidation.js';
35
35
  import { getProceduralMemories, formatProceduralSection, } from '../../engine/procedural.js';
36
36
  import { corona } from '../../engine/corona.js';
37
+ import { noteRecall, noteRemember, noteObserve, clearSessionActivity, formatSessionDraftNote, } from '../../engine/session-policy.js';
37
38
  // ---------------------------------------------------------------------------
38
39
  // Corona lazy initialization
39
40
  // ---------------------------------------------------------------------------
@@ -201,6 +202,7 @@ export async function handleCommit(args) {
201
202
  context: args.context ?? '',
202
203
  });
203
204
  const changes = recalculateOrbits(proj, config);
205
+ clearSessionActivity(proj);
204
206
  const lines = [
205
207
  `✓ Committed | decisions: ${(args.decisions ?? []).length} | steps: ${(args.next_steps ?? []).length} | errors: ${(args.errors ?? []).length} | orbit changes: ${changes.length}`,
206
208
  ];
@@ -238,6 +240,7 @@ export async function handleRecall(args) {
238
240
  const proj = resolveProject();
239
241
  const limit = args.limit ?? 10;
240
242
  ensureCorona();
243
+ noteRecall(proj, args.query);
241
244
  const memoryType = args.type === 'all' || args.type === undefined ? undefined : args.type;
242
245
  // If `at` is provided, use temporal point-in-time query instead of normal recall
243
246
  let results;
@@ -263,8 +266,9 @@ export async function handleRecall(args) {
263
266
  universals = getUniversalContext(proj, Math.ceil(limit / 2));
264
267
  }
265
268
  if (results.length === 0 && universals.length === 0) {
269
+ const draftNote = formatSessionDraftNote(proj);
266
270
  return {
267
- content: [{ type: 'text', text: `No memories found matching "${args.query}".` }],
271
+ content: [{ type: 'text', text: draftNote ? `No memories found matching "${args.query}".\n\n${draftNote}` : `No memories found matching "${args.query}".` }],
268
272
  };
269
273
  }
270
274
  const temporalNote = args.at ? ` (at ${args.at})` : ' (pulled closer to Sun)';
@@ -295,6 +299,9 @@ export async function handleRecall(args) {
295
299
  lines.push('');
296
300
  }
297
301
  }
302
+ const draftNote = formatSessionDraftNote(proj);
303
+ if (draftNote)
304
+ lines.push(draftNote);
298
305
  return { content: [{ type: 'text', text: lines.join('\n') }] };
299
306
  }
300
307
  catch (err) {
@@ -317,6 +324,7 @@ export async function handleRemember(args) {
317
324
  impact: args.impact,
318
325
  tags: args.tags,
319
326
  });
327
+ noteRemember(proj, memory);
320
328
  // Background: auto-extract relationships with existing memories.
321
329
  // Fire-and-forget — does not block the response.
322
330
  extractRelationships(memory, proj).catch(() => {
@@ -348,6 +356,9 @@ export async function handleRemember(args) {
348
356
  lines.push(`\nQuality tip: ${qualityFeedback}`);
349
357
  if (conflictWarnings)
350
358
  lines.push(`\n${conflictWarnings}`);
359
+ const draftNote = formatSessionDraftNote(proj);
360
+ if (draftNote)
361
+ lines.push(`\n${draftNote}`);
351
362
  return {
352
363
  content: [{
353
364
  type: 'text',
@@ -865,12 +876,18 @@ export async function handleObserve(args) {
865
876
  try {
866
877
  const proj = args.project ?? resolveProject();
867
878
  const stats = await processConversation(args.conversation, proj);
868
- const text = [
879
+ noteObserve(proj, `${stats.memoriesCreated} memories from observed conversation`);
880
+ const lines = [
869
881
  `Observation complete for project "${proj}":`,
870
882
  ` Memories created: ${stats.memoriesCreated}`,
871
883
  ` Memories reinforced: ${stats.memoriesReinforced}`,
872
884
  ` Conflicts detected: ${stats.conflictsDetected}`,
873
- ].join('\n');
885
+ ];
886
+ const draftNote = formatSessionDraftNote(proj);
887
+ if (draftNote) {
888
+ lines.push('', draftNote);
889
+ }
890
+ const text = lines.join('\n');
874
891
  return { content: [{ type: 'text', text }] };
875
892
  }
876
893
  catch (err) {