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.
- package/dist/engine/corona.d.ts +2 -2
- package/dist/engine/corona.js +9 -7
- package/dist/engine/corona.js.map +1 -1
- package/dist/engine/observation.d.ts +2 -1
- package/dist/engine/observation.js +19 -0
- package/dist/engine/observation.js.map +1 -1
- package/dist/engine/orbit.js +13 -3
- package/dist/engine/orbit.js.map +1 -1
- package/dist/engine/session-policy.d.ts +15 -0
- package/dist/engine/session-policy.js +103 -0
- package/dist/engine/session-policy.js.map +1 -0
- package/dist/engine/sun.d.ts +6 -6
- package/dist/engine/sun.js +48 -39
- package/dist/engine/sun.js.map +1 -1
- package/dist/engine/types.d.ts +1 -0
- package/dist/engine/validity.d.ts +5 -0
- package/dist/engine/validity.js +32 -0
- package/dist/engine/validity.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/tools/memory-tools.js +20 -3
- package/dist/mcp/tools/memory-tools.js.map +1 -1
- package/dist/storage/queries.d.ts +1 -1
- package/dist/storage/queries.js +40 -21
- package/dist/storage/queries.js.map +1 -1
- package/package.json +1 -1
package/dist/engine/sun.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* sun.ts
|
|
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
|
|
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
|
|
100
|
+
* 2. CORE IDENTITY ??core zone memories (instant recall, ~40% budget)
|
|
99
101
|
* 3. WORKING ON (current_work, ~10%)
|
|
100
|
-
* 4. ACTIVE CONTEXT
|
|
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() + '
|
|
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
|
|
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
|
|
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
|
|
126
|
-
// Compressed format: [TYPE] summary (no AU distance
|
|
127
|
-
if (
|
|
128
|
-
const displayed =
|
|
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 =
|
|
133
|
-
? `\n (+${
|
|
136
|
+
const overflow = activeCoreMemories.length > MAX_CORE_DISPLAY
|
|
137
|
+
? `\n (+${activeCoreMemories.length - MAX_CORE_DISPLAY} more)`
|
|
134
138
|
: '';
|
|
135
|
-
sections.push(`\nCORE (${
|
|
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
|
|
142
|
-
if (
|
|
143
|
-
const displayed =
|
|
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 =
|
|
148
|
-
? `\n (+${
|
|
151
|
+
const overflow = activeNearMemories.length > MAX_NEAR_DISPLAY
|
|
152
|
+
? `\n (+${activeNearMemories.length - MAX_NEAR_DISPLAY} more)`
|
|
149
153
|
: '';
|
|
150
|
-
sections.push(`\nNEAR (${
|
|
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
|
|
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
|
|
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
|
|
202
|
-
* - 'periodic': background timer
|
|
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
|
|
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
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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
|
|
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
|
|
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
|
}
|
package/dist/engine/sun.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sun.js","sourceRoot":"","sources":["../../src/engine/sun.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EACL,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"sun.js","sourceRoot":"","sources":["../../src/engine/sun.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EACL,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEjC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,8BAA8B,OAAO,iFAAiF,CAAC;IAChI,CAAC;IAED,kEAAkE;IAClE,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IACpE,OAAO,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,OAAe,EACf,IAMC;IAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,0EAA0E;IAC1E,oCAAoC;IACpC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,YAAY,CAAC;gBACX,OAAO;gBACP,OAAO,EAAE,QAAQ;gBACjB,IAAI,EAAK,UAAU;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAa;QACxB,OAAO;QACP,OAAO,EAAW,IAAI,CAAC,YAAY;QACnC,YAAY,EAAM,IAAI,CAAC,YAAY;QACnC,gBAAgB,EAAE,IAAI,CAAC,SAAS;QAChC,UAAU,EAAQ,IAAI,CAAC,UAAU;QACjC,aAAa,EAAK,IAAI,CAAC,MAAM;QAC7B,eAAe,EAAG,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,eAAe,IAAI,EAAE,CAAC;QACnE,WAAW,EAAO,CAAC,EAAU,iBAAiB;QAC9C,cAAc,EAAI,GAAG;QACrB,UAAU,EAAQ,GAAG;KACtB,CAAC;IAEF,0EAA0E;IAC1E,sCAAsC;IACtC,MAAM,YAAY,GAAI,MAAM,CAAC,eAAe,EAAE,CAAC;IAC/C,MAAM,YAAY,GAAI,MAAM,CAAC,eAAe,EAAE,CAAC;IAC/C,MAAM,SAAS,GAAO,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAC5E,OAAO,CAAC,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAEhD,wEAAwE;IACxE,iEAAiE;IACjE,IAAI,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBAAqB,OAAO,CAAC,WAAW,mBAAmB,MAAM,CAAC,cAAc,iBAAiB,OAAO,KAAK,CAC9G,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAa,EACb,YAAsB,EACtB,YAAsB;IAEtB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;IACrC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC9D,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAE9D,MAAM,gBAAgB,GAAG,CAAC,CAAC;IAC3B,MAAM,gBAAgB,GAAG,CAAC,CAAC;IAC3B,MAAM,aAAa,GAAG,EAAE,CAAC;IAEzB,oDAAoD;IACpD,MAAM,YAAY,GAAG,CAAC,CAAS,EAAU,EAAE,CACzC,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,8CAA8C;IAC9C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,6EAA6E;IAC7E,IAAI,MAAM,GAAG,8BAA8B,GAAG,CAAC,OAAO,GAAG,CAAC;IAC1D,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,IAAI,IAAI,CAC3B,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;YAC/C,CAAC,CAAC,GAAG,CAAC,cAAc;YACpB,CAAC,CAAC,GAAG,CAAC,cAAc,GAAG,GAAG,CAC7B,CAAC,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,yBAAyB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,gCAAgC,CAAC;QAC5F,CAAC;IACH,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEtB,6DAA6D;IAC7D,oEAAoE;IACpE,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,SAAS;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAClE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,GAAG,gBAAgB;YAC3D,CAAC,CAAC,SAAS,kBAAkB,CAAC,MAAM,GAAG,gBAAgB,QAAQ;YAC/D,CAAC,CAAC,EAAE,CAAC;QACP,QAAQ,CAAC,IAAI,CAAC,WAAW,kBAAkB,CAAC,MAAM,OAAO,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,mBAAmB;IACnB,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,QAAQ,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,uDAAuD;IACvD,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,SAAS;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAClE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,GAAG,gBAAgB;YAC3D,CAAC,CAAC,SAAS,kBAAkB,CAAC,MAAM,GAAG,gBAAgB,QAAQ;YAC/D,CAAC,CAAC,EAAE,CAAC;QACP,QAAQ,CAAC,IAAI,CAAC,WAAW,kBAAkB,CAAC,MAAM,OAAO,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,+BAA+B;IAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,QAAQ,CAAC,IAAI,CAAC,wBAAwB,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,yBAAyB;IACzB,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,4BAA4B;IAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,6EAA6E;IAC7E,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;QACrE,IAAI,cAAc,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,CAAC;YACvC,+CAA+C;YAC/C,MAAM;QACR,CAAC;QACD,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;IAED,wEAAwE;IACxE,sDAAsD;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,8BAA8B,GAAG,CAAC,OAAO,GAAG,CAAC;IACvE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E;;;;;;;;GAQG;AACH;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,OAAgC,UAAU;IAC3F,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE9D,kFAAkF;QAClF,gFAAgF;QAChF,IAAI,QAAQ,EAAE,cAAc,EAAE,CAAC;YAC7B,MAAM,YAAY,GAAG,IAAI,IAAI,CAC3B,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;gBACpD,CAAC,CAAC,QAAQ,CAAC,cAAc;gBACzB,CAAC,CAAC,QAAQ,CAAC,cAAc,GAAG,GAAG,CAClC,CAAC,OAAO,EAAE,CAAC;YACZ,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,IAAI,YAAY,GAAG,SAAS;gBAAE,OAAO;QACvC,CAAC;QAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAEjD,gBAAgB;QAChB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,0DAA0D;QAC1D,yEAAyE;QACzE,MAAM,YAAY,GAAG,QAAQ,EAAE,YAAY;eACtC,YAAY,EAAE,YAAY;eAC1B,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;eAC7C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;eAC1C,GAAG,MAAM,CAAC,MAAM,6BAA6B,CAAC;QAEnD,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,MAAM,gBAAgB,GAAG,YAAY,EAAE,SAAS,IAAI,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,QAAQ,EAAE,gBAAgB,EAAE,MAAM;YAClD,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,gBAAgB,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC5N,CAAC,CAAC,CAAC,GAAG,gBAAgB,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEnG,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,MAAM,YAAY,GAAG,YAAY,EAAE,UAAU,IAAI,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,QAAQ,EAAE,UAAU,EAAE,MAAM;YAC7C,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC9L,CAAC,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEvF,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,aAAa,GAAG,YAAY,EAAE,MAAM,IAAI,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvG,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,MAAM,OAAO,GAAa;YACxB,OAAO;YACP,OAAO,EAAW,YAAY;YAC9B,YAAY;YACZ,gBAAgB,EAAE,SAAS;YAC3B,UAAU;YACV,aAAa,EAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,IAAI,EAAE,CAAC;YAC9E,eAAe,EAAG,QAAQ,EAAE,eAAe,IAAI,YAAY,EAAE,OAAO,IAAI,EAAE;YAC1E,WAAW,EAAO,CAAC;YACnB,cAAc,EAAI,GAAG;YACrB,UAAU,EAAQ,GAAG;SACtB,CAAC;QAEF,cAAc,CAAC,OAAO,CAAC,CAAC;QAExB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8CAA8C,IAAI,KAAK,MAAM,CAAC,MAAM,qBAAqB,CAC1F,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,4DAA4D;QAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wCAAwC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAC7F,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/engine/types.d.ts
CHANGED
|
@@ -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(
|
|
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":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
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
|
-
|
|
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
|
-
]
|
|
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) {
|