Skip to content

Commit a45cbad

Browse files
committed
Project reporting
1 parent bb3ac69 commit a45cbad

2 files changed

Lines changed: 24 additions & 4 deletions

File tree

lib/projectReport.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,14 @@ function prepareMemoryForReport(memory) {
119119
return merged.join('\n\n').replace(/\n{3,}/g, '\n\n').trim();
120120
}
121121

122+
function excerptLatest(memory, maxLen = MEMORY_EXCERPT_LEN) {
123+
const text = String(memory || '').trim();
124+
if (!text) return '';
125+
if (text.length <= maxLen) return text;
126+
// Keep the most recent content instead of stale opening sections.
127+
return '…' + text.slice(-maxLen);
128+
}
129+
122130
function getTimezone() {
123131
try {
124132
const config = getConfig();
@@ -141,9 +149,10 @@ function getRawProjectData(projectIds) {
141149
for (const id of projectIds) {
142150
const project = projectStore.getProject(id);
143151
if (!project) continue;
144-
const memory = projectStore.readProjectMemory(id).trim();
152+
const memoryRaw = projectStore.readProjectMemory(id).trim();
153+
const memory = prepareMemoryForReport(memoryRaw);
145154
const excerpt = memory
146-
? (memory.length <= MEMORY_EXCERPT_LEN ? memory : memory.slice(0, MEMORY_EXCERPT_LEN) + '…')
155+
? excerptLatest(memory, MEMORY_EXCERPT_LEN)
147156
: '(No notes or imported content yet.)';
148157
let updatedAtStr = '—';
149158
if (project.updatedAt) {
@@ -430,5 +439,6 @@ module.exports = {
430439
newReportId,
431440
normalizeReport,
432441
persistReports,
433-
prepareMemoryForReport
442+
prepareMemoryForReport,
443+
excerptLatest
434444
};

tests/project-report-memory-prep.test.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const test = require('node:test');
22
const assert = require('node:assert/strict');
33

4-
const { prepareMemoryForReport } = require('../lib/projectReport.js');
4+
const { prepareMemoryForReport, excerptLatest } = require('../lib/projectReport.js');
55

66
test('prepareMemoryForReport keeps latest financial summary variant', () => {
77
const memory = [
@@ -36,3 +36,13 @@ test('prepareMemoryForReport keeps latest financial summary variant', () => {
3636
assert.match(out, /\$7,500/);
3737
assert.doesNotMatch(out, /\$1,500 \| \$16,250/);
3838
});
39+
40+
test('excerptLatest keeps newest text window for long memory', () => {
41+
const older = 'OLD-SECTION '.repeat(300);
42+
const latest = 'LATEST-BUDGET-VALUE $7,500 paid $10,250 remaining';
43+
const combined = `${older}\n\n${latest}`;
44+
const out = excerptLatest(combined, 120);
45+
assert.match(out, /LATEST-BUDGET-VALUE/);
46+
assert.ok(out.startsWith('…'));
47+
assert.ok(out.length <= 121);
48+
});

0 commit comments

Comments
 (0)