@ikarmic/forge-core 4.4.0 → 4.5.0
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/README.md +1 -1
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +64 -31
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/architect.d.ts +3 -0
- package/dist/agent/architect.d.ts.map +1 -1
- package/dist/agent/architect.js +1 -0
- package/dist/agent/architect.js.map +1 -1
- package/dist/agent/cost-router.d.ts.map +1 -1
- package/dist/agent/cost-router.js +2 -0
- package/dist/agent/cost-router.js.map +1 -1
- package/dist/attachments.d.ts +47 -0
- package/dist/attachments.d.ts.map +1 -0
- package/dist/attachments.js +179 -0
- package/dist/attachments.js.map +1 -0
- package/dist/code-index/builder.d.ts.map +1 -1
- package/dist/code-index/builder.js +4 -0
- package/dist/code-index/builder.js.map +1 -1
- package/dist/commands/custom-commands.d.ts +25 -0
- package/dist/commands/custom-commands.d.ts.map +1 -0
- package/dist/commands/custom-commands.js +99 -0
- package/dist/commands/custom-commands.js.map +1 -0
- package/dist/context/compaction.d.ts.map +1 -1
- package/dist/context/compaction.js +11 -1
- package/dist/context/compaction.js.map +1 -1
- package/dist/context/mask.d.ts.map +1 -1
- package/dist/context/mask.js +1 -1
- package/dist/context/mask.js.map +1 -1
- package/dist/diff/unified-diff.js +42 -15
- package/dist/diff/unified-diff.js.map +1 -1
- package/dist/git/auto-commit.d.ts.map +1 -1
- package/dist/git/auto-commit.js +14 -2
- package/dist/git/auto-commit.js.map +1 -1
- package/dist/github/github-tools.d.ts +84 -0
- package/dist/github/github-tools.d.ts.map +1 -0
- package/dist/github/github-tools.js +176 -0
- package/dist/github/github-tools.js.map +1 -0
- package/dist/index.d.ts +18 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -4
- package/dist/index.js.map +1 -1
- package/dist/memory/memory-store.d.ts +57 -10
- package/dist/memory/memory-store.d.ts.map +1 -1
- package/dist/memory/memory-store.js +236 -69
- package/dist/memory/memory-store.js.map +1 -1
- package/dist/memory/rank.d.ts +21 -0
- package/dist/memory/rank.d.ts.map +1 -0
- package/dist/memory/rank.js +65 -0
- package/dist/memory/rank.js.map +1 -0
- package/dist/memory/stale.d.ts +19 -0
- package/dist/memory/stale.d.ts.map +1 -0
- package/dist/memory/stale.js +46 -0
- package/dist/memory/stale.js.map +1 -0
- package/dist/orchestrator/specialists.js +5 -5
- package/dist/orchestrator/specialists.js.map +1 -1
- package/dist/semantic/semantic-index.d.ts.map +1 -1
- package/dist/semantic/semantic-index.js +4 -0
- package/dist/semantic/semantic-index.js.map +1 -1
- package/dist/sessions/index.d.ts +1 -0
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +1 -0
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/search.d.ts +23 -0
- package/dist/sessions/search.d.ts.map +1 -0
- package/dist/sessions/search.js +67 -0
- package/dist/sessions/search.js.map +1 -0
- package/dist/specs/index.d.ts +2 -0
- package/dist/specs/index.d.ts.map +1 -1
- package/dist/specs/index.js +1 -0
- package/dist/specs/index.js.map +1 -1
- package/dist/specs/store.d.ts +7 -0
- package/dist/specs/store.d.ts.map +1 -1
- package/dist/specs/store.js +33 -0
- package/dist/specs/store.js.map +1 -1
- package/dist/specs/sync.d.ts +30 -0
- package/dist/specs/sync.d.ts.map +1 -0
- package/dist/specs/sync.js +156 -0
- package/dist/specs/sync.js.map +1 -0
- package/dist/specs/types.d.ts +2 -0
- package/dist/specs/types.d.ts.map +1 -1
- package/dist/tools/ignore-rules.d.ts +16 -0
- package/dist/tools/ignore-rules.d.ts.map +1 -0
- package/dist/tools/ignore-rules.js +85 -0
- package/dist/tools/ignore-rules.js.map +1 -0
- package/dist/tools/index.d.ts +3 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +5 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list-files.d.ts +3 -0
- package/dist/tools/list-files.d.ts.map +1 -1
- package/dist/tools/list-files.js +8 -0
- package/dist/tools/list-files.js.map +1 -1
- package/dist/tools/memory.d.ts +34 -1
- package/dist/tools/memory.d.ts.map +1 -1
- package/dist/tools/memory.js +118 -25
- package/dist/tools/memory.js.map +1 -1
- package/dist/tools/notebook.d.ts +70 -0
- package/dist/tools/notebook.d.ts.map +1 -0
- package/dist/tools/notebook.js +164 -0
- package/dist/tools/notebook.js.map +1 -0
- package/dist/tools/read-file.d.ts +8 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +19 -1
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/search-files.d.ts +5 -2
- package/dist/tools/search-files.d.ts.map +1 -1
- package/dist/tools/search-files.js +8 -0
- package/dist/tools/search-files.js.map +1 -1
- package/dist/tools/web-search.d.ts +56 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +132 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/types.d.ts +31 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,16 +37,34 @@ export interface LoadedMemory {
|
|
|
37
37
|
/** Total raw bytes from disk before truncation. */
|
|
38
38
|
totalBytes: number;
|
|
39
39
|
}
|
|
40
|
+
/** What kind of fact a section holds. Sections without metadata are `convention`. */
|
|
41
|
+
export type MemoryType = 'convention' | 'decision' | 'correction' | 'reference';
|
|
40
42
|
export interface MemorySection {
|
|
41
43
|
/** Section heading, exactly as written (e.g. "Build commands"). */
|
|
42
44
|
heading: string;
|
|
43
|
-
/** Markdown body under the heading (excluding the heading line). */
|
|
45
|
+
/** Markdown body under the heading (excluding the heading line and metadata comment). */
|
|
44
46
|
body: string;
|
|
45
47
|
/** Source identifier (`global` | `project` | absolute path). */
|
|
46
48
|
source: string;
|
|
47
|
-
/** Last-modified epoch ms
|
|
49
|
+
/** Last-modified epoch ms: the section's `updated=` date, else the file's mtime. */
|
|
48
50
|
updatedAt: number;
|
|
51
|
+
/** Kind of fact; `convention` when the section has no metadata. */
|
|
52
|
+
type: MemoryType;
|
|
53
|
+
/** Paths (or `path#symbol`) the section depends on; used by the staleness check. */
|
|
54
|
+
refs: string[];
|
|
55
|
+
/** Always injected into the system prompt when true. */
|
|
56
|
+
pinned: boolean;
|
|
49
57
|
}
|
|
58
|
+
/** Metadata stamped on a section by `composeSectionUpdate`. */
|
|
59
|
+
export interface SectionMeta {
|
|
60
|
+
type?: MemoryType;
|
|
61
|
+
refs?: string[];
|
|
62
|
+
pinned?: boolean;
|
|
63
|
+
/** Clock override for tests; defaults to the current time. */
|
|
64
|
+
now?: Date;
|
|
65
|
+
}
|
|
66
|
+
/** Lowercase, NFKC-normalize and whitespace-collapse a heading so near-duplicates compare equal. */
|
|
67
|
+
export declare function normalizeHeading(h: string): string;
|
|
50
68
|
export interface MemorySource {
|
|
51
69
|
/** Absolute path to the file this section came from. */
|
|
52
70
|
path: string;
|
|
@@ -92,17 +110,28 @@ export declare function parseMemory(text: string, source: string, updatedAt: num
|
|
|
92
110
|
* sections appear last (closest to the prompt).
|
|
93
111
|
*/
|
|
94
112
|
export declare function loadMemory(cwd: string): Promise<LoadedMemory>;
|
|
113
|
+
export interface InjectOptions {
|
|
114
|
+
/** The run's first user message; sections are ranked against it. */
|
|
115
|
+
task?: string;
|
|
116
|
+
/** Dead-ref reasons keyed by `staleKey`; matching sections get a visible marker. */
|
|
117
|
+
stale?: Map<string, string[]>;
|
|
118
|
+
}
|
|
95
119
|
/**
|
|
96
|
-
* Compose a memory injection for the system prompt.
|
|
97
|
-
*
|
|
98
|
-
* the
|
|
120
|
+
* Compose a memory injection for the system prompt.
|
|
121
|
+
*
|
|
122
|
+
* When every section fits the budget, all are injected in file order. When
|
|
123
|
+
* not: pinned sections first (capped), a one-line-per-section index so the
|
|
124
|
+
* model knows what else exists (`memory_read` fetches it), then the sections
|
|
125
|
+
* most relevant to `opts.task` that still fit, best last (closest to the
|
|
126
|
+
* prompt). Everything left out lands in `dropped`. Output never exceeds
|
|
127
|
+
* `budgetBytes`.
|
|
99
128
|
*/
|
|
100
|
-
export declare function injectMemory(loaded: LoadedMemory, budgetBytes?: number): MemoryInjection;
|
|
129
|
+
export declare function injectMemory(loaded: LoadedMemory, budgetBytes?: number, opts?: InjectOptions): MemoryInjection;
|
|
101
130
|
/**
|
|
102
131
|
* Compose the system-prompt block for memory injection. Returns the empty
|
|
103
132
|
* string when no memory is found (so the caller can skip the block).
|
|
104
133
|
*/
|
|
105
|
-
export declare function buildMemoryBlock(cwd: string, budgetBytes?: number): Promise<string>;
|
|
134
|
+
export declare function buildMemoryBlock(cwd: string, budgetBytes?: number, opts?: InjectOptions): Promise<string>;
|
|
106
135
|
/**
|
|
107
136
|
* Read a single memory file from disk (raw markdown, not parsed).
|
|
108
137
|
*/
|
|
@@ -116,11 +145,29 @@ export declare function writeMemoryFile(absPath: string, content: string): Promi
|
|
|
116
145
|
* Append a new section (or replace an existing section with the same
|
|
117
146
|
* heading) inside a memory file. Returns the new file contents.
|
|
118
147
|
*/
|
|
119
|
-
export declare function composeSectionUpdate(current: string, heading: string, body: string): string;
|
|
148
|
+
export declare function composeSectionUpdate(current: string, heading: string, body: string, meta?: SectionMeta): string;
|
|
149
|
+
/**
|
|
150
|
+
* Remove the section whose heading matches `heading` (case and spacing
|
|
151
|
+
* ignored). Returns the file unchanged with `removed: false` when absent.
|
|
152
|
+
*/
|
|
153
|
+
export declare function removeSection(current: string, heading: string): {
|
|
154
|
+
content: string;
|
|
155
|
+
removed: boolean;
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Bring a memory file under `maxBytes` by dropping whole sections, lowest
|
|
159
|
+
* ranked first: lowest type weight, then oldest `updated`, then earliest in
|
|
160
|
+
* the file. Pinned sections and `keepHeading` are never dropped. If only
|
|
161
|
+
* those remain, the file is returned over the cap rather than losing them.
|
|
162
|
+
*/
|
|
163
|
+
export declare function capMemory(content: string, maxBytes: number, keepHeading: string): {
|
|
164
|
+
content: string;
|
|
165
|
+
dropped: string[];
|
|
166
|
+
};
|
|
120
167
|
/**
|
|
121
168
|
* Truncate a memory file to fit under `maxBytes` by dropping the oldest
|
|
122
|
-
* sections
|
|
123
|
-
*
|
|
169
|
+
* sections (file order). Sections are kept verbatim, metadata comment
|
|
170
|
+
* included. Returns the new content.
|
|
124
171
|
*/
|
|
125
172
|
export declare function trimToBytes(content: string, maxBytes: number): string;
|
|
126
173
|
export { PROJECT_MEMORY_DIR as _PROJECT_MEMORY_DIR, PROJECT_MEMORY_FILE as _PROJECT_MEMORY_FILE };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/memory/memory-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/memory/memory-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
import { mkdir, readFile, stat, writeFile } from 'node:fs/promises';
|
|
23
23
|
import { homedir } from 'node:os';
|
|
24
24
|
import path from 'node:path';
|
|
25
|
+
import { TYPE_WEIGHT, scoreSections } from './rank.js';
|
|
26
|
+
import { checkStale, staleKey } from './stale.js';
|
|
25
27
|
/** Default location for project memory, relative to cwd. */
|
|
26
28
|
export const PROJECT_MEMORY_DIR = '.forge';
|
|
27
29
|
export const PROJECT_MEMORY_FILE = 'MEMORY.md';
|
|
@@ -31,6 +33,11 @@ export const GLOBAL_MEMORY_FILE = 'MEMORY.md';
|
|
|
31
33
|
export const DEFAULT_MAX_BYTES = 50_000;
|
|
32
34
|
/** Soft cap on bytes injected into the system prompt. */
|
|
33
35
|
export const DEFAULT_INJECTION_BUDGET = 8_000;
|
|
36
|
+
const MEMORY_TYPES = ['convention', 'decision', 'correction', 'reference'];
|
|
37
|
+
/** Lowercase, NFKC-normalize and whitespace-collapse a heading so near-duplicates compare equal. */
|
|
38
|
+
export function normalizeHeading(h) {
|
|
39
|
+
return h.normalize('NFKC').toLowerCase().replace(/\s+/g, ' ').trim();
|
|
40
|
+
}
|
|
34
41
|
/**
|
|
35
42
|
* Walk up from `cwd` looking for a directory containing `.forge/`. Stops at
|
|
36
43
|
* the first match; returns null past the filesystem root or past the home
|
|
@@ -80,12 +87,7 @@ export function parseMemory(text, source, updatedAt) {
|
|
|
80
87
|
const h2 = /^##\s+(.+?)\s*$/.exec(line);
|
|
81
88
|
if (h2) {
|
|
82
89
|
if (currentHeading !== null) {
|
|
83
|
-
out.push(
|
|
84
|
-
heading: currentHeading,
|
|
85
|
-
body: currentBody.join('\n').trim(),
|
|
86
|
-
source,
|
|
87
|
-
updatedAt,
|
|
88
|
-
});
|
|
90
|
+
out.push(buildSection(currentHeading, currentBody, source, updatedAt));
|
|
89
91
|
}
|
|
90
92
|
currentHeading = h2[1];
|
|
91
93
|
currentBody = [];
|
|
@@ -96,15 +98,69 @@ export function parseMemory(text, source, updatedAt) {
|
|
|
96
98
|
// Lines before the first H2 are dropped (title / preamble).
|
|
97
99
|
}
|
|
98
100
|
if (currentHeading !== null) {
|
|
99
|
-
out.push(
|
|
100
|
-
heading: currentHeading,
|
|
101
|
-
body: currentBody.join('\n').trim(),
|
|
102
|
-
source,
|
|
103
|
-
updatedAt,
|
|
104
|
-
});
|
|
101
|
+
out.push(buildSection(currentHeading, currentBody, source, updatedAt));
|
|
105
102
|
}
|
|
106
103
|
return out;
|
|
107
104
|
}
|
|
105
|
+
/** Build a section from its heading and raw body lines, peeling off a leading metadata comment. */
|
|
106
|
+
function buildSection(heading, bodyLines, source, fileUpdatedAt) {
|
|
107
|
+
const firstIdx = bodyLines.findIndex((l) => l.trim() !== '');
|
|
108
|
+
const meta = firstIdx === -1 ? null : parseMetaLine(bodyLines[firstIdx]);
|
|
109
|
+
const rest = meta ? bodyLines.slice(firstIdx + 1) : bodyLines;
|
|
110
|
+
return {
|
|
111
|
+
heading,
|
|
112
|
+
body: rest.join('\n').trim(),
|
|
113
|
+
source,
|
|
114
|
+
updatedAt: meta?.updatedAt ?? fileUpdatedAt,
|
|
115
|
+
type: meta?.type ?? 'convention',
|
|
116
|
+
refs: meta?.refs ?? [],
|
|
117
|
+
pinned: meta?.pinned ?? false,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Parse `<!-- forge: key=value, ... -->`. Returns null when the line is not a
|
|
122
|
+
* forge comment. Unknown keys and invalid values are ignored field by field, so a
|
|
123
|
+
* damaged comment degrades to defaults instead of failing the load.
|
|
124
|
+
*/
|
|
125
|
+
function parseMetaLine(line) {
|
|
126
|
+
const m = /^<!--\s*forge:(.*?)-->$/.exec(line.trim());
|
|
127
|
+
if (!m)
|
|
128
|
+
return null;
|
|
129
|
+
const meta = {};
|
|
130
|
+
for (const pair of m[1].split(',')) {
|
|
131
|
+
const eq = pair.indexOf('=');
|
|
132
|
+
if (eq === -1)
|
|
133
|
+
continue;
|
|
134
|
+
const key = pair.slice(0, eq).trim();
|
|
135
|
+
const value = pair.slice(eq + 1).trim();
|
|
136
|
+
if (key === 'type' && MEMORY_TYPES.includes(value)) {
|
|
137
|
+
meta.type = value;
|
|
138
|
+
}
|
|
139
|
+
else if (key === 'updated' && /^\d{4}-\d{2}-\d{2}$/.test(value)) {
|
|
140
|
+
const ms = Date.parse(`${value}T00:00:00Z`);
|
|
141
|
+
if (!Number.isNaN(ms))
|
|
142
|
+
meta.updatedAt = ms;
|
|
143
|
+
}
|
|
144
|
+
else if (key === 'refs') {
|
|
145
|
+
const refs = value.split(';').map((r) => r.trim()).filter(Boolean);
|
|
146
|
+
if (refs.length > 0)
|
|
147
|
+
meta.refs = refs;
|
|
148
|
+
}
|
|
149
|
+
else if (key === 'pin' && value === 'true') {
|
|
150
|
+
meta.pinned = true;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return meta;
|
|
154
|
+
}
|
|
155
|
+
function formatMetaLine(meta) {
|
|
156
|
+
const date = (meta.now ?? new Date()).toISOString().slice(0, 10);
|
|
157
|
+
const parts = [`type=${meta.type ?? 'convention'}`, `updated=${date}`];
|
|
158
|
+
if (meta.refs && meta.refs.length > 0)
|
|
159
|
+
parts.push(`refs=${meta.refs.join(';')}`);
|
|
160
|
+
if (meta.pinned)
|
|
161
|
+
parts.push('pin=true');
|
|
162
|
+
return `<!-- forge: ${parts.join(', ')} -->`;
|
|
163
|
+
}
|
|
108
164
|
/**
|
|
109
165
|
* Load both global and project memory. Project sections override global
|
|
110
166
|
* sections with the same heading. Order: global first (oldest first),
|
|
@@ -164,70 +220,117 @@ export async function loadMemory(cwd) {
|
|
|
164
220
|
const totalBytes = sources.reduce((sum, s) => sum + s.bytes, 0);
|
|
165
221
|
return { sections: allSections, sources, totalBytes };
|
|
166
222
|
}
|
|
223
|
+
/** Cap on bytes spent on pinned sections when the file does not fit the budget. */
|
|
224
|
+
const PIN_BUDGET_BYTES = 2_000;
|
|
225
|
+
/** Cap on bytes spent on the section index. */
|
|
226
|
+
const INDEX_BUDGET_BYTES = 1_000;
|
|
227
|
+
/** Below this many bytes an index is not worth its header; skip it. */
|
|
228
|
+
const MIN_INDEX_BYTES = 60;
|
|
167
229
|
/**
|
|
168
|
-
* Compose a memory injection for the system prompt.
|
|
169
|
-
*
|
|
170
|
-
* the
|
|
230
|
+
* Compose a memory injection for the system prompt.
|
|
231
|
+
*
|
|
232
|
+
* When every section fits the budget, all are injected in file order. When
|
|
233
|
+
* not: pinned sections first (capped), a one-line-per-section index so the
|
|
234
|
+
* model knows what else exists (`memory_read` fetches it), then the sections
|
|
235
|
+
* most relevant to `opts.task` that still fit, best last (closest to the
|
|
236
|
+
* prompt). Everything left out lands in `dropped`. Output never exceeds
|
|
237
|
+
* `budgetBytes`.
|
|
171
238
|
*/
|
|
172
|
-
export function injectMemory(loaded, budgetBytes = DEFAULT_INJECTION_BUDGET) {
|
|
173
|
-
|
|
239
|
+
export function injectMemory(loaded, budgetBytes = DEFAULT_INJECTION_BUDGET, opts = {}) {
|
|
240
|
+
const all = loaded.sections;
|
|
241
|
+
if (all.length === 0) {
|
|
174
242
|
return { markdown: '', sections: [], dropped: [], found: false };
|
|
175
243
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
for (
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
if (
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
else if (kept.length > 0) {
|
|
190
|
-
// Already over budget by the same accounting as the check above:
|
|
191
|
-
// nothing more will fit (older sections only get evaluated with the
|
|
192
|
-
// same growing `kept` set), so stop here.
|
|
193
|
-
break;
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
// Nothing kept yet and this section alone is too big: skip it.
|
|
197
|
-
dropped.push(next);
|
|
244
|
+
const stale = opts.stale;
|
|
245
|
+
if (memoryBytes(all, stale) <= budgetBytes) {
|
|
246
|
+
return { markdown: formatSections(all, stale), sections: [...all], dropped: [], found: true };
|
|
247
|
+
}
|
|
248
|
+
const ranked = scoreSections(all, opts.task ?? '').map((r) => r.section);
|
|
249
|
+
const pins = [];
|
|
250
|
+
let used = 0;
|
|
251
|
+
for (const s of ranked.filter((r) => r.pinned)) {
|
|
252
|
+
const size = sectionBytes(s, stale) + 2;
|
|
253
|
+
// A pin bigger than the whole pin cap can never be guaranteed; it competes as a ranked match below.
|
|
254
|
+
if (size <= PIN_BUDGET_BYTES && used + size <= PIN_BUDGET_BYTES && used + size <= budgetBytes) {
|
|
255
|
+
pins.push(s);
|
|
256
|
+
used += size;
|
|
198
257
|
}
|
|
199
258
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
259
|
+
const indexCap = Math.min(INDEX_BUDGET_BYTES, Math.floor(budgetBytes * 0.125), budgetBytes - used);
|
|
260
|
+
const index = buildIndex(all, indexCap);
|
|
261
|
+
if (index)
|
|
262
|
+
used += Buffer.byteLength(index, 'utf8') + 2;
|
|
263
|
+
const matches = [];
|
|
264
|
+
for (const s of ranked.filter((r) => !pins.includes(r) && (!r.pinned || sectionBytes(r, stale) + 2 > PIN_BUDGET_BYTES))) {
|
|
265
|
+
const size = sectionBytes(s, stale) + 2;
|
|
266
|
+
if (used + size <= budgetBytes) {
|
|
267
|
+
matches.push(s);
|
|
268
|
+
used += size;
|
|
269
|
+
}
|
|
203
270
|
}
|
|
204
|
-
|
|
271
|
+
// Best match last, closest to the user's prompt.
|
|
272
|
+
const kept = [...pins, ...matches.reverse()];
|
|
273
|
+
const dropped = all.filter((s) => !kept.includes(s));
|
|
274
|
+
const markdown = [index, ...kept.map((s) => formatSection(s, stale))].filter((p) => p.length > 0).join('\n\n');
|
|
205
275
|
return { markdown, sections: kept, dropped, found: true };
|
|
206
276
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
277
|
+
/** `## Memory index` with one `- heading (type)` line per section, within `capBytes`; '' if it cannot fit. */
|
|
278
|
+
function buildIndex(sections, capBytes) {
|
|
279
|
+
if (capBytes < MIN_INDEX_BYTES)
|
|
280
|
+
return '';
|
|
281
|
+
const header = '## Memory index\n\n';
|
|
282
|
+
const lines = sections.map((s) => `- ${s.heading} (${s.type})`);
|
|
283
|
+
const render = (shown, hidden) => header + [...shown, ...(hidden > 0 ? [`- …and ${hidden} more`] : [])].join('\n');
|
|
284
|
+
const fits = (text) => Buffer.byteLength(text, 'utf8') + 2 <= capBytes;
|
|
285
|
+
if (fits(render(lines, 0)))
|
|
286
|
+
return render(lines, 0);
|
|
287
|
+
const shown = [];
|
|
288
|
+
for (const line of lines) {
|
|
289
|
+
if (!fits(render([...shown, line], lines.length - shown.length - 1)))
|
|
290
|
+
break;
|
|
291
|
+
shown.push(line);
|
|
292
|
+
}
|
|
293
|
+
const text = render(shown, lines.length - shown.length);
|
|
294
|
+
return fits(text) ? text : '';
|
|
295
|
+
}
|
|
296
|
+
function sectionBytes(s, stale) {
|
|
297
|
+
// Approximate byte length: heading (plus stale marker) + 2 newlines + body.
|
|
298
|
+
return Buffer.byteLength(formatSection(s, stale), 'utf8');
|
|
299
|
+
}
|
|
300
|
+
function memoryBytes(sections, stale) {
|
|
301
|
+
return sections.reduce((sum, s) => sum + sectionBytes(s, stale) + 2, 0); // +2 for separating blank line
|
|
210
302
|
}
|
|
211
|
-
function
|
|
212
|
-
|
|
303
|
+
function formatSection(s, stale) {
|
|
304
|
+
const reasons = stale?.get(staleKey(s));
|
|
305
|
+
const marker = reasons ? ` (possibly stale: ${reasons.join('; ')})` : '';
|
|
306
|
+
return `## ${s.heading}${marker}\n\n${s.body}`;
|
|
213
307
|
}
|
|
214
|
-
function formatSections(sections) {
|
|
215
|
-
return sections
|
|
216
|
-
.map((s) => `## ${s.heading}\n\n${s.body}`)
|
|
217
|
-
.join('\n\n');
|
|
308
|
+
function formatSections(sections, stale) {
|
|
309
|
+
return sections.map((s) => formatSection(s, stale)).join('\n\n');
|
|
218
310
|
}
|
|
219
311
|
/**
|
|
220
312
|
* Compose the system-prompt block for memory injection. Returns the empty
|
|
221
313
|
* string when no memory is found (so the caller can skip the block).
|
|
222
314
|
*/
|
|
223
|
-
export async function buildMemoryBlock(cwd, budgetBytes) {
|
|
315
|
+
export async function buildMemoryBlock(cwd, budgetBytes, opts = {}) {
|
|
224
316
|
const loaded = await loadMemory(cwd);
|
|
225
317
|
if (loaded.sections.length === 0)
|
|
226
318
|
return '';
|
|
227
|
-
|
|
319
|
+
let stale = new Map();
|
|
320
|
+
try {
|
|
321
|
+
stale = await checkStale(loaded.sections, (await findProjectMemoryRoot(cwd)) ?? cwd);
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
// A failed staleness check must never block memory injection.
|
|
325
|
+
}
|
|
326
|
+
const injection = injectMemory(loaded, budgetBytes, { ...opts, stale });
|
|
228
327
|
if (!injection.found)
|
|
229
328
|
return '';
|
|
230
|
-
|
|
329
|
+
const hasMarked = injection.sections.some((s) => stale.has(staleKey(s)));
|
|
330
|
+
const preamble = hasMarked
|
|
331
|
+
? 'Entries marked (possibly stale) name things that may no longer exist; verify before relying on them.\n\n'
|
|
332
|
+
: '';
|
|
333
|
+
return `<project-memory source="${cwd}">\n${preamble}${injection.markdown}\n</project-memory>`;
|
|
231
334
|
}
|
|
232
335
|
// Mutation helpers: used by the memory_write tool and the test suite.
|
|
233
336
|
/**
|
|
@@ -259,17 +362,20 @@ export async function writeMemoryFile(absPath, content) {
|
|
|
259
362
|
* Append a new section (or replace an existing section with the same
|
|
260
363
|
* heading) inside a memory file. Returns the new file contents.
|
|
261
364
|
*/
|
|
262
|
-
export function composeSectionUpdate(current, heading, body) {
|
|
263
|
-
const
|
|
365
|
+
export function composeSectionUpdate(current, heading, body, meta) {
|
|
366
|
+
const title = heading.trim();
|
|
367
|
+
const header = `## ${title}`;
|
|
368
|
+
const content = meta ? `${formatMetaLine(meta)}\n${body.trim()}` : body.trim();
|
|
264
369
|
if (!current.trim()) {
|
|
265
|
-
return `${header}\n\n${
|
|
370
|
+
return `${header}\n\n${content}\n`;
|
|
266
371
|
}
|
|
267
372
|
const lines = current.split(/\r?\n/);
|
|
268
|
-
const
|
|
373
|
+
const wanted = normalizeHeading(title);
|
|
374
|
+
const idx = lines.findIndex((l) => /^##\s+/.test(l) && normalizeHeading(l.slice(3)) === wanted);
|
|
269
375
|
if (idx === -1) {
|
|
270
376
|
// Append.
|
|
271
377
|
const trimmed = current.replace(/\s+$/, '');
|
|
272
|
-
return `${trimmed}\n\n${header}\n\n${
|
|
378
|
+
return `${trimmed}\n\n${header}\n\n${content}\n`;
|
|
273
379
|
}
|
|
274
380
|
// Replace existing section: drop from `idx` to next `##` or EOF.
|
|
275
381
|
let end = lines.length;
|
|
@@ -281,27 +387,88 @@ export function composeSectionUpdate(current, heading, body) {
|
|
|
281
387
|
}
|
|
282
388
|
const before = lines.slice(0, idx).join('\n').replace(/\s+$/, '');
|
|
283
389
|
const after = lines.slice(end).join('\n').replace(/^\s+/, '');
|
|
284
|
-
const middle = `${header}\n\n${
|
|
390
|
+
const middle = `${header}\n\n${content}\n`;
|
|
285
391
|
return [before, middle, after].filter((s) => s.length > 0).join('\n\n') + '\n';
|
|
286
392
|
}
|
|
393
|
+
/** Split file text into its preamble and raw `## ` chunks, keeping each chunk verbatim. */
|
|
394
|
+
function splitChunks(content) {
|
|
395
|
+
const preamble = [];
|
|
396
|
+
const chunks = [];
|
|
397
|
+
for (const line of content.split(/\r?\n/)) {
|
|
398
|
+
const h2 = /^##\s+(.+?)\s*$/.exec(line);
|
|
399
|
+
if (h2)
|
|
400
|
+
chunks.push({ heading: h2[1], lines: [line] });
|
|
401
|
+
else if (chunks.length > 0)
|
|
402
|
+
chunks[chunks.length - 1].lines.push(line);
|
|
403
|
+
else
|
|
404
|
+
preamble.push(line);
|
|
405
|
+
}
|
|
406
|
+
return {
|
|
407
|
+
preamble: preamble.join('\n').trim(),
|
|
408
|
+
chunks: chunks.map((c) => ({ heading: c.heading, raw: c.lines.join('\n').trim() })),
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
function joinChunks(preamble, chunks) {
|
|
412
|
+
const parts = [preamble, ...chunks.map((c) => c.raw)].filter((p) => p.length > 0);
|
|
413
|
+
return parts.length > 0 ? `${parts.join('\n\n')}\n` : '';
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Remove the section whose heading matches `heading` (case and spacing
|
|
417
|
+
* ignored). Returns the file unchanged with `removed: false` when absent.
|
|
418
|
+
*/
|
|
419
|
+
export function removeSection(current, heading) {
|
|
420
|
+
const { preamble, chunks } = splitChunks(current);
|
|
421
|
+
const wanted = normalizeHeading(heading);
|
|
422
|
+
const kept = chunks.filter((c) => normalizeHeading(c.heading) !== wanted);
|
|
423
|
+
if (kept.length === chunks.length)
|
|
424
|
+
return { content: current, removed: false };
|
|
425
|
+
return { content: joinChunks(preamble, kept), removed: true };
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Bring a memory file under `maxBytes` by dropping whole sections, lowest
|
|
429
|
+
* ranked first: lowest type weight, then oldest `updated`, then earliest in
|
|
430
|
+
* the file. Pinned sections and `keepHeading` are never dropped. If only
|
|
431
|
+
* those remain, the file is returned over the cap rather than losing them.
|
|
432
|
+
*/
|
|
433
|
+
export function capMemory(content, maxBytes, keepHeading) {
|
|
434
|
+
if (Buffer.byteLength(content, 'utf8') <= maxBytes)
|
|
435
|
+
return { content, dropped: [] };
|
|
436
|
+
const { preamble, chunks } = splitChunks(content);
|
|
437
|
+
const keep = normalizeHeading(keepHeading);
|
|
438
|
+
const candidates = chunks
|
|
439
|
+
.map((chunk, index) => ({ chunk, index, section: parseMemory(chunk.raw, '<cap>', 0)[0] }))
|
|
440
|
+
.filter((c) => !c.section.pinned && normalizeHeading(c.chunk.heading) !== keep)
|
|
441
|
+
.sort((a, b) => TYPE_WEIGHT[a.section.type] - TYPE_WEIGHT[b.section.type] ||
|
|
442
|
+
a.section.updatedAt - b.section.updatedAt ||
|
|
443
|
+
a.index - b.index);
|
|
444
|
+
const removed = new Set();
|
|
445
|
+
const dropped = [];
|
|
446
|
+
const render = () => joinChunks(preamble, chunks.filter((_, i) => !removed.has(i)));
|
|
447
|
+
let out = render();
|
|
448
|
+
for (const c of candidates) {
|
|
449
|
+
if (Buffer.byteLength(out, 'utf8') <= maxBytes)
|
|
450
|
+
break;
|
|
451
|
+
removed.add(c.index);
|
|
452
|
+
dropped.push(c.chunk.heading);
|
|
453
|
+
out = render();
|
|
454
|
+
}
|
|
455
|
+
return { content: out, dropped };
|
|
456
|
+
}
|
|
287
457
|
/**
|
|
288
458
|
* Truncate a memory file to fit under `maxBytes` by dropping the oldest
|
|
289
|
-
* sections
|
|
290
|
-
*
|
|
459
|
+
* sections (file order). Sections are kept verbatim, metadata comment
|
|
460
|
+
* included. Returns the new content.
|
|
291
461
|
*/
|
|
292
462
|
export function trimToBytes(content, maxBytes) {
|
|
293
463
|
const totalBytes = Buffer.byteLength(content, 'utf8');
|
|
294
464
|
if (totalBytes <= maxBytes)
|
|
295
465
|
return content;
|
|
296
|
-
|
|
297
|
-
if (sections.length === 0)
|
|
298
|
-
return '';
|
|
466
|
+
let kept = splitChunks(content).chunks;
|
|
299
467
|
// Drop oldest first.
|
|
300
|
-
|
|
301
|
-
while (kept.length > 0 && Buffer.byteLength(formatSections(kept), 'utf8') > maxBytes) {
|
|
468
|
+
while (kept.length > 0 && Buffer.byteLength(joinChunks('', kept), 'utf8') > maxBytes) {
|
|
302
469
|
kept = kept.slice(1);
|
|
303
470
|
}
|
|
304
|
-
return
|
|
471
|
+
return joinChunks('', kept);
|
|
305
472
|
}
|
|
306
473
|
// Re-export for tests / downstream consumers.
|
|
307
474
|
export { PROJECT_MEMORY_DIR as _PROJECT_MEMORY_DIR, PROJECT_MEMORY_FILE as _PROJECT_MEMORY_FILE };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/memory/memory-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/memory/memory-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Relevance scoring for memory sections. Keyword-only (BM25-style term
|
|
3
|
+
* overlap), no embeddings: at the 8 KB injection scale it is enough, and it
|
|
4
|
+
* keeps Forge provider-agnostic with no extra service.
|
|
5
|
+
*/
|
|
6
|
+
import type { MemorySection, MemoryType } from './memory-store.js';
|
|
7
|
+
/** Higher = more costly to ignore. A user correction outranks a plain convention. */
|
|
8
|
+
export declare const TYPE_WEIGHT: Record<MemoryType, number>;
|
|
9
|
+
/** Lowercase alphanumeric tokens of length >= 3, minus stopwords. Duplicates are kept. */
|
|
10
|
+
export declare function tokenize(text: string): string[];
|
|
11
|
+
export interface ScoredSection {
|
|
12
|
+
section: MemorySection;
|
|
13
|
+
score: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Score every section against `task`, best first. Ties break on type weight,
|
|
17
|
+
* then newer `updatedAt`, then later position in the input (so with no task
|
|
18
|
+
* the order degrades to v1's "later sections win").
|
|
19
|
+
*/
|
|
20
|
+
export declare function scoreSections(sections: MemorySection[], task: string): ScoredSection[];
|
|
21
|
+
//# sourceMappingURL=rank.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rank.d.ts","sourceRoot":"","sources":["../../src/memory/rank.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQnE,qFAAqF;AACrF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAKlD,CAAC;AAMF,0FAA0F;AAC1F,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/C;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAkCtF"}
|