@amaster.ai/pi-memory 0.1.2-beta.35 → 0.1.2-beta.37
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 +55 -1
- package/dist/cli/dream.d.ts +3 -0
- package/dist/cli/dream.d.ts.map +1 -0
- package/dist/cli/dream.js +115 -0
- package/dist/cli/dream.js.map +1 -0
- package/dist/consolidation.d.ts +31 -0
- package/dist/consolidation.d.ts.map +1 -0
- package/dist/consolidation.js +125 -0
- package/dist/consolidation.js.map +1 -0
- package/dist/dreaming-state.d.ts +7 -0
- package/dist/dreaming-state.d.ts.map +1 -0
- package/dist/dreaming-state.js +25 -0
- package/dist/dreaming-state.js.map +1 -0
- package/dist/extension.d.ts +8 -0
- package/dist/extension.d.ts.map +1 -1
- package/dist/extension.js +36 -1
- package/dist/extension.js.map +1 -1
- package/package.json +15 -2
package/README.md
CHANGED
|
@@ -126,6 +126,60 @@ The drift guard exists to prevent silent data loss — never bypass it by deleti
|
|
|
126
126
|
|
|
127
127
|
| Hook | Behavior |
|
|
128
128
|
|-----------------------|---------------------------------------------------------------------------|
|
|
129
|
-
| `session_start` | Resolve `dataDir`, build `MemoryStore`, `loadFromDisk()`, register 4 tools, set status `memory: loaded`/`memory: empty`. |
|
|
129
|
+
| `session_start` | Resolve `dataDir`, build `MemoryStore`, `loadFromDisk()`, register 4 tools, set status `memory: loaded`/`memory: empty`. Auto-register dreaming cron job if not already installed. |
|
|
130
130
|
| `before_agent_start` | Reload memory from disk, rebuild the prompt snapshot, and append it to assembled `systemPrompt` (guidance only when empty). |
|
|
131
131
|
| `session_shutdown` | Drop store references. |
|
|
132
|
+
|
|
133
|
+
## Dreaming (Periodic Memory Consolidation)
|
|
134
|
+
|
|
135
|
+
On first session start, pi-memory automatically registers a system-level scheduled task that periodically reviews recent conversations and consolidates durable facts into memory. No manual cron configuration needed.
|
|
136
|
+
|
|
137
|
+
### How it works
|
|
138
|
+
|
|
139
|
+
1. **System cron registration** — On first load, the extension registers a platform-native scheduled job:
|
|
140
|
+
- macOS: `launchd` LaunchAgent
|
|
141
|
+
- Linux: user `crontab` entry
|
|
142
|
+
- Windows: Task Scheduler
|
|
143
|
+
|
|
144
|
+
2. **Gate check** — Each run checks whether enough time and sessions have elapsed since the last consolidation before proceeding.
|
|
145
|
+
|
|
146
|
+
3. **Phase 1 — Consolidation** — An agentic loop (using pi-agent-core) reviews recent conversation transcripts and updates `MEMORY.md`/`USER.md` via the memory tools. Follows a 4-phase prompt: Orient → Gather → Consolidate → Prune.
|
|
147
|
+
|
|
148
|
+
4. **Phase 2 — Dedup** — If `pi-memory-mem0` is configured, exact-duplicate entries in the vector store are identified and deleted.
|
|
149
|
+
|
|
150
|
+
### Configuration
|
|
151
|
+
|
|
152
|
+
Add to `settings.json` under the `pi-memory` key:
|
|
153
|
+
|
|
154
|
+
```json
|
|
155
|
+
{
|
|
156
|
+
"pi-memory": {
|
|
157
|
+
"dreaming": {
|
|
158
|
+
"enabled": true,
|
|
159
|
+
"intervalHours": 4,
|
|
160
|
+
"minHoursSinceLastRun": 24,
|
|
161
|
+
"minTurnsSinceLastRun": 5,
|
|
162
|
+
"model": {
|
|
163
|
+
"provider": "openai",
|
|
164
|
+
"model": "gpt-4.1-mini"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
All fields are optional with sensible defaults. The `model` field accepts any provider/model pair configured in your `~/.pi/agent/models.json` (built-in or custom). `minSessionsSinceLastRun` is accepted as a deprecated alias for `minTurnsSinceLastRun`.
|
|
172
|
+
|
|
173
|
+
Set `"enabled": false` to disable dreaming and remove the scheduled task.
|
|
174
|
+
|
|
175
|
+
### CLI
|
|
176
|
+
|
|
177
|
+
The dreaming logic is also available as a standalone CLI:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# Run once (called by the system scheduler)
|
|
181
|
+
npx pi-memory-dream
|
|
182
|
+
|
|
183
|
+
# Or via the installed bin
|
|
184
|
+
pi-memory-dream
|
|
185
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dream.d.ts","sourceRoot":"","sources":["../../src/cli/dream.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* pi-memory-dream CLI — one-shot dreaming execution.
|
|
4
|
+
*
|
|
5
|
+
* Designed to be called by system cron (launchd/crontab/schtasks).
|
|
6
|
+
* Performs gate check, consolidation, and dedup, then exits.
|
|
7
|
+
*/
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { dedupMemories } from '@amaster.ai/pi-memory-mem0/dedup';
|
|
10
|
+
import { loadPiSettings, resolveHome } from '@amaster.ai/pi-shared/settings';
|
|
11
|
+
import { JsonFileTranscriptStore } from '@amaster.ai/pi-storage/json';
|
|
12
|
+
import { AuthStorage, ModelRegistry } from '@earendil-works/pi-coding-agent';
|
|
13
|
+
import { runConsolidation } from '../consolidation.js';
|
|
14
|
+
import { readDreamingState, writeDreamingState } from '../dreaming-state.js';
|
|
15
|
+
const DEFAULT_MIN_HOURS = 24;
|
|
16
|
+
const DEFAULT_MIN_TURNS = 5;
|
|
17
|
+
const DEFAULT_MODEL = { provider: 'openai', model: 'gpt-4.1-mini' };
|
|
18
|
+
function log(msg) {
|
|
19
|
+
process.stderr.write(`[pi-memory-dream ${new Date().toISOString()}] ${msg}\n`);
|
|
20
|
+
}
|
|
21
|
+
async function main() {
|
|
22
|
+
const settings = loadPiSettings('pi-memory');
|
|
23
|
+
const config = settings.dreaming ?? {};
|
|
24
|
+
if (config.enabled === false) {
|
|
25
|
+
process.exit(0);
|
|
26
|
+
}
|
|
27
|
+
const home = resolveHome();
|
|
28
|
+
const state = await readDreamingState();
|
|
29
|
+
const now = Date.now();
|
|
30
|
+
const minHours = config.minHoursSinceLastRun ?? DEFAULT_MIN_HOURS;
|
|
31
|
+
const minTurns = config.minTurnsSinceLastRun ?? config.minSessionsSinceLastRun ?? DEFAULT_MIN_TURNS;
|
|
32
|
+
// Gate check: enough time since last run?
|
|
33
|
+
if (state.lastConsolidatedAt) {
|
|
34
|
+
const elapsed = now - new Date(state.lastConsolidatedAt).getTime();
|
|
35
|
+
if (elapsed < minHours * 60 * 60 * 1000) {
|
|
36
|
+
process.exit(0);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Gate check: enough turns since last run?
|
|
40
|
+
const transcriptsPath = join(home, 'transcripts.json');
|
|
41
|
+
const transcripts = new JsonFileTranscriptStore(transcriptsPath);
|
|
42
|
+
const turns = await transcripts.listTurns({ tenantId: 'default' });
|
|
43
|
+
const recentTurns = state.lastConsolidatedAt
|
|
44
|
+
? turns.filter((t) => t.createdAt &&
|
|
45
|
+
new Date(t.createdAt).getTime() > new Date(state.lastConsolidatedAt).getTime())
|
|
46
|
+
: turns;
|
|
47
|
+
if (recentTurns.length < minTurns) {
|
|
48
|
+
process.exit(0);
|
|
49
|
+
}
|
|
50
|
+
log(`starting: ${recentTurns.length} turns since last run`);
|
|
51
|
+
const abortController = new AbortController();
|
|
52
|
+
process.on('SIGTERM', () => abortController.abort());
|
|
53
|
+
process.on('SIGINT', () => abortController.abort());
|
|
54
|
+
// Phase 1: Consolidation
|
|
55
|
+
const modelConfig = config.model ?? DEFAULT_MODEL;
|
|
56
|
+
const authStorage = AuthStorage.create();
|
|
57
|
+
const modelRegistry = ModelRegistry.create(authStorage);
|
|
58
|
+
let consolidationSucceeded = false;
|
|
59
|
+
try {
|
|
60
|
+
consolidationSucceeded = await runConsolidation({
|
|
61
|
+
memoryDir: join(home, 'memories'),
|
|
62
|
+
turns: recentTurns,
|
|
63
|
+
modelConfig,
|
|
64
|
+
modelRegistry: {
|
|
65
|
+
find: (p, m) => modelRegistry.find(p, m),
|
|
66
|
+
getApiKeyAndHeaders: (model) => modelRegistry.getApiKeyAndHeaders(model),
|
|
67
|
+
},
|
|
68
|
+
signal: abortController.signal,
|
|
69
|
+
});
|
|
70
|
+
if (consolidationSucceeded)
|
|
71
|
+
log('consolidation done');
|
|
72
|
+
else
|
|
73
|
+
log('consolidation skipped (model/auth unavailable)');
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
log(`consolidation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
77
|
+
}
|
|
78
|
+
if (abortController.signal.aborted)
|
|
79
|
+
process.exit(0);
|
|
80
|
+
// Phase 2: Dedup (only if pi-memory-mem0 is configured)
|
|
81
|
+
const mem0Settings = loadPiSettings('pi-memory-mem0');
|
|
82
|
+
if (mem0Settings && Object.keys(mem0Settings).length > 0) {
|
|
83
|
+
const mode = mem0Settings.mode ?? 'platform';
|
|
84
|
+
const userId = config.mem0UserId ?? mem0Settings.userId;
|
|
85
|
+
if (!userId) {
|
|
86
|
+
log('dedup skipped: no explicit userId configured (set pi-memory.dreaming.mem0UserId or pi-memory-mem0.userId)');
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
try {
|
|
90
|
+
const result = await dedupMemories({
|
|
91
|
+
userId,
|
|
92
|
+
config: { ...mem0Settings, mode },
|
|
93
|
+
signal: abortController.signal,
|
|
94
|
+
});
|
|
95
|
+
log(`dedup done: ${result.duplicatesRemoved} removed from ${result.total}`);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
log(`dedup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Only update state if consolidation ran successfully
|
|
103
|
+
if (consolidationSucceeded) {
|
|
104
|
+
await writeDreamingState({
|
|
105
|
+
lastConsolidatedAt: new Date(now).toISOString(),
|
|
106
|
+
lastSessionCount: recentTurns.length,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
log('done');
|
|
110
|
+
}
|
|
111
|
+
main().catch((err) => {
|
|
112
|
+
log(`fatal: ${err instanceof Error ? err.message : String(err)}`);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=dream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dream.js","sourceRoot":"","sources":["../../src/cli/dream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory consolidation logic — agentic review of recent conversations.
|
|
3
|
+
*
|
|
4
|
+
* Spawns a pi-agent-core Agent with memory tools to review transcripts and
|
|
5
|
+
* update entries. Follows a 4-phase prompt: Orient → Gather → Consolidate → Prune.
|
|
6
|
+
*/
|
|
7
|
+
import type { ConversationTurn } from '@amaster.ai/pi-shared';
|
|
8
|
+
export interface ConsolidationModelRegistry {
|
|
9
|
+
find(provider: string, model: string): unknown;
|
|
10
|
+
getApiKeyAndHeaders(model: unknown): Promise<{
|
|
11
|
+
ok: boolean;
|
|
12
|
+
apiKey?: string;
|
|
13
|
+
headers?: Record<string, string>;
|
|
14
|
+
error?: string;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
export interface ConsolidationOptions {
|
|
18
|
+
memoryDir: string;
|
|
19
|
+
turns: ConversationTurn[];
|
|
20
|
+
modelConfig: {
|
|
21
|
+
provider: string;
|
|
22
|
+
model: string;
|
|
23
|
+
};
|
|
24
|
+
modelRegistry: ConsolidationModelRegistry;
|
|
25
|
+
signal?: AbortSignal;
|
|
26
|
+
maxTurns?: number;
|
|
27
|
+
}
|
|
28
|
+
export declare const CONSOLIDATION_SYSTEM_PROMPT = "You are a memory consolidation assistant performing a \"dream\" \u2014 a reflective pass over recent conversations to synthesize durable knowledge into long-term memory.\n\nYou have access to memory tools:\n- memory_read: Read current memory entries (targets: \"memory\" for agent notes, \"user\" for user profile)\n- memory_add: Add a new entry to a target\n- memory_replace: Update an existing entry by substring match\n- memory_remove: Remove an outdated or redundant entry\n\n## Phase 1 \u2014 Orient\n\n- Call memory_read for both \"memory\" and \"user\" targets to see what is currently stored.\n- Understand the existing structure so you can merge into it rather than duplicating.\n- Note entries that look stale, overly verbose, or contradicted by recent context.\n\n## Phase 2 \u2014 Gather recent signal\n\nReview the conversation transcripts provided. Look for:\n1. New durable facts worth remembering (user preferences, project decisions, recurring patterns)\n2. Information that contradicts or updates existing memory entries\n3. Context that existing memories reference but got wrong\n\nDon't try to capture everything. Focus on what a future session would benefit from knowing.\n\n## Phase 3 \u2014 Consolidate\n\nMake targeted updates using the memory tools:\n- Use memory_replace to update stale entries with current information\n- Use memory_add only for genuinely new facts not already captured\n- Use memory_remove for entries that are clearly wrong, redundant, or superseded\n- When multiple entries cover related facts, merge them into one via memory_replace\n\nImportant:\n- Convert relative dates (\"yesterday\", \"last week\") to absolute dates\n- Merge related entries rather than keeping fragments \u2014 one complete entry is better than three partial ones\n- Keep entries terse and third-person\n\n## Phase 4 \u2014 Prune\n\nAfter consolidating, check capacity:\n- The \"memory\" target has a ~2200 character limit\n- The \"user\" target has a ~1375 character limit\n- If approaching limits, compress verbose entries (remove filler words, combine related points)\n- Remove entries that are subsumed by more complete ones\n\n## Constraints\n\n- ZERO information loss: every distinct, correct fact must survive unless clearly superseded\n- Don't add trivial or ephemeral information (greetings, debugging steps, temporary state)\n- Don't duplicate what is already stored \u2014 always check first via memory_read\n- Focus on: user identity, preferences, project decisions, recurring patterns, important context\n- If nothing meaningful has changed, say so \u2014 don't make changes for the sake of it\n";
|
|
29
|
+
export declare function buildConsolidationUserPrompt(turns: ConversationTurn[]): string;
|
|
30
|
+
export declare function runConsolidation(opts: ConsolidationOptions): Promise<boolean>;
|
|
31
|
+
//# sourceMappingURL=consolidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidation.d.ts","sourceRoot":"","sources":["../src/consolidation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/C,mBAAmB,CACjB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChG;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,WAAW,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,aAAa,EAAE,0BAA0B,CAAC;IAC1C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,2BAA2B,0kFAmDvC,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAuB9E;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CA8CnF"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory consolidation logic — agentic review of recent conversations.
|
|
3
|
+
*
|
|
4
|
+
* Spawns a pi-agent-core Agent with memory tools to review transcripts and
|
|
5
|
+
* update entries. Follows a 4-phase prompt: Orient → Gather → Consolidate → Prune.
|
|
6
|
+
*/
|
|
7
|
+
import { Agent } from '@earendil-works/pi-agent-core';
|
|
8
|
+
import { streamSimple } from '@earendil-works/pi-ai';
|
|
9
|
+
import { MemoryStore } from './store.js';
|
|
10
|
+
import { createMemoryTools } from './tools.js';
|
|
11
|
+
const MAX_CONSOLIDATION_TURNS = 8;
|
|
12
|
+
export const CONSOLIDATION_SYSTEM_PROMPT = `You are a memory consolidation assistant performing a "dream" — a reflective pass over recent conversations to synthesize durable knowledge into long-term memory.
|
|
13
|
+
|
|
14
|
+
You have access to memory tools:
|
|
15
|
+
- memory_read: Read current memory entries (targets: "memory" for agent notes, "user" for user profile)
|
|
16
|
+
- memory_add: Add a new entry to a target
|
|
17
|
+
- memory_replace: Update an existing entry by substring match
|
|
18
|
+
- memory_remove: Remove an outdated or redundant entry
|
|
19
|
+
|
|
20
|
+
## Phase 1 — Orient
|
|
21
|
+
|
|
22
|
+
- Call memory_read for both "memory" and "user" targets to see what is currently stored.
|
|
23
|
+
- Understand the existing structure so you can merge into it rather than duplicating.
|
|
24
|
+
- Note entries that look stale, overly verbose, or contradicted by recent context.
|
|
25
|
+
|
|
26
|
+
## Phase 2 — Gather recent signal
|
|
27
|
+
|
|
28
|
+
Review the conversation transcripts provided. Look for:
|
|
29
|
+
1. New durable facts worth remembering (user preferences, project decisions, recurring patterns)
|
|
30
|
+
2. Information that contradicts or updates existing memory entries
|
|
31
|
+
3. Context that existing memories reference but got wrong
|
|
32
|
+
|
|
33
|
+
Don't try to capture everything. Focus on what a future session would benefit from knowing.
|
|
34
|
+
|
|
35
|
+
## Phase 3 — Consolidate
|
|
36
|
+
|
|
37
|
+
Make targeted updates using the memory tools:
|
|
38
|
+
- Use memory_replace to update stale entries with current information
|
|
39
|
+
- Use memory_add only for genuinely new facts not already captured
|
|
40
|
+
- Use memory_remove for entries that are clearly wrong, redundant, or superseded
|
|
41
|
+
- When multiple entries cover related facts, merge them into one via memory_replace
|
|
42
|
+
|
|
43
|
+
Important:
|
|
44
|
+
- Convert relative dates ("yesterday", "last week") to absolute dates
|
|
45
|
+
- Merge related entries rather than keeping fragments — one complete entry is better than three partial ones
|
|
46
|
+
- Keep entries terse and third-person
|
|
47
|
+
|
|
48
|
+
## Phase 4 — Prune
|
|
49
|
+
|
|
50
|
+
After consolidating, check capacity:
|
|
51
|
+
- The "memory" target has a ~2200 character limit
|
|
52
|
+
- The "user" target has a ~1375 character limit
|
|
53
|
+
- If approaching limits, compress verbose entries (remove filler words, combine related points)
|
|
54
|
+
- Remove entries that are subsumed by more complete ones
|
|
55
|
+
|
|
56
|
+
## Constraints
|
|
57
|
+
|
|
58
|
+
- ZERO information loss: every distinct, correct fact must survive unless clearly superseded
|
|
59
|
+
- Don't add trivial or ephemeral information (greetings, debugging steps, temporary state)
|
|
60
|
+
- Don't duplicate what is already stored — always check first via memory_read
|
|
61
|
+
- Focus on: user identity, preferences, project decisions, recurring patterns, important context
|
|
62
|
+
- If nothing meaningful has changed, say so — don't make changes for the sake of it
|
|
63
|
+
`;
|
|
64
|
+
export function buildConsolidationUserPrompt(turns) {
|
|
65
|
+
if (turns.length === 0) {
|
|
66
|
+
return 'No recent conversations to review. Call memory_read to check current state and verify everything is still accurate.';
|
|
67
|
+
}
|
|
68
|
+
const maxChars = 8000;
|
|
69
|
+
const header = '## Recent Conversations\n\nBelow are recent conversation turns (newest last). Review them for signal worth persisting.\n\n';
|
|
70
|
+
const footer = '\n---\nBegin by calling memory_read for both targets to orient yourself, then consolidate as needed.';
|
|
71
|
+
let totalChars = header.length + footer.length;
|
|
72
|
+
const selected = [];
|
|
73
|
+
for (let i = turns.length - 1; i >= 0; i--) {
|
|
74
|
+
const turn = turns[i];
|
|
75
|
+
const entry = `### Session ${turn.sessionId} (${turn.createdAt})\n**User:** ${turn.userMessage}\n**Assistant:** ${turn.assistantMessage}\n\n`;
|
|
76
|
+
if (totalChars + entry.length > maxChars)
|
|
77
|
+
break;
|
|
78
|
+
selected.unshift(entry);
|
|
79
|
+
totalChars += entry.length;
|
|
80
|
+
}
|
|
81
|
+
return header + selected.join('') + footer;
|
|
82
|
+
}
|
|
83
|
+
export async function runConsolidation(opts) {
|
|
84
|
+
const { memoryDir, turns, modelConfig, modelRegistry, signal, maxTurns } = opts;
|
|
85
|
+
const model = modelRegistry.find(modelConfig.provider, modelConfig.model);
|
|
86
|
+
if (!model)
|
|
87
|
+
return false;
|
|
88
|
+
const auth = await modelRegistry.getApiKeyAndHeaders(model);
|
|
89
|
+
if (!auth.ok)
|
|
90
|
+
return false;
|
|
91
|
+
const store = new MemoryStore({ dir: memoryDir });
|
|
92
|
+
await store.loadFromDisk();
|
|
93
|
+
const tools = createMemoryTools(store);
|
|
94
|
+
const userPrompt = buildConsolidationUserPrompt(turns);
|
|
95
|
+
const agent = new Agent({
|
|
96
|
+
initialState: {
|
|
97
|
+
systemPrompt: CONSOLIDATION_SYSTEM_PROMPT,
|
|
98
|
+
model: model,
|
|
99
|
+
tools: tools,
|
|
100
|
+
},
|
|
101
|
+
streamFn: (m, c, streamOpts) => {
|
|
102
|
+
const existingSignal = streamOpts?.signal;
|
|
103
|
+
return streamSimple(m, c, {
|
|
104
|
+
...streamOpts,
|
|
105
|
+
...(auth.apiKey ? { apiKey: auth.apiKey } : {}),
|
|
106
|
+
...(auth.headers ? { headers: auth.headers } : {}),
|
|
107
|
+
...(existingSignal ? { signal: existingSignal } : signal ? { signal } : {}),
|
|
108
|
+
});
|
|
109
|
+
},
|
|
110
|
+
convertToLlm: (msgs) => msgs,
|
|
111
|
+
});
|
|
112
|
+
const limit = maxTurns ?? MAX_CONSOLIDATION_TURNS;
|
|
113
|
+
let turnCount = 0;
|
|
114
|
+
agent.subscribe((event) => {
|
|
115
|
+
if (event.type === 'turn_end') {
|
|
116
|
+
turnCount++;
|
|
117
|
+
if (turnCount >= limit || signal?.aborted) {
|
|
118
|
+
void agent.abort();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
await agent.prompt(userPrompt);
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=consolidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidation.js","sourceRoot":"","sources":["../src/consolidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface DreamingState {
|
|
2
|
+
lastConsolidatedAt: string | null;
|
|
3
|
+
lastSessionCount: number;
|
|
4
|
+
}
|
|
5
|
+
export declare function readDreamingState(): Promise<DreamingState>;
|
|
6
|
+
export declare function writeDreamingState(state: DreamingState): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=dreaming-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dreaming-state.d.ts","sourceRoot":"","sources":["../src/dreaming-state.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAQD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,CAOhE;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dreaming state persistence — tracks when the last consolidation ran.
|
|
3
|
+
*/
|
|
4
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
5
|
+
import { dirname, join } from 'node:path';
|
|
6
|
+
import { resolveHome } from '@amaster.ai/pi-shared/settings';
|
|
7
|
+
const STATE_FILE = 'memories/dreaming-state.json';
|
|
8
|
+
function statePath() {
|
|
9
|
+
return join(resolveHome(), STATE_FILE);
|
|
10
|
+
}
|
|
11
|
+
export async function readDreamingState() {
|
|
12
|
+
try {
|
|
13
|
+
const raw = await readFile(statePath(), 'utf-8');
|
|
14
|
+
return JSON.parse(raw);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return { lastConsolidatedAt: null, lastSessionCount: 0 };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function writeDreamingState(state) {
|
|
21
|
+
const filePath = statePath();
|
|
22
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
23
|
+
await writeFile(filePath, JSON.stringify(state, null, 2), 'utf-8');
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=dreaming-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dreaming-state.js","sourceRoot":"","sources":["../src/dreaming-state.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAO7D,MAAM,UAAU,GAAG,8BAA8B,CAAC;AAElD,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAoB;IAC3D,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;IAC7B,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC"}
|
package/dist/extension.d.ts
CHANGED
|
@@ -14,6 +14,14 @@ export type PiMemoryExtensionConfig = {
|
|
|
14
14
|
extractionModel?: ExtractionModelConfig;
|
|
15
15
|
/** Turns between extraction runs. Default: 5. */
|
|
16
16
|
extractionInterval?: number;
|
|
17
|
+
/** Dreaming (periodic consolidation + dedup) config. */
|
|
18
|
+
dreaming?: DreamingConfig;
|
|
19
|
+
};
|
|
20
|
+
export type DreamingConfig = {
|
|
21
|
+
/** Set to false to disable dreaming entirely and unregister the cron job. Default: true. */
|
|
22
|
+
enabled?: boolean;
|
|
23
|
+
/** Interval in hours between dream runs. Default: 4. */
|
|
24
|
+
intervalHours?: number;
|
|
17
25
|
};
|
|
18
26
|
export default function memoryExtension(pi: ExtensionAPI, injectedConfig?: PiMemoryExtensionConfig): void;
|
|
19
27
|
//# sourceMappingURL=extension.d.ts.map
|
package/dist/extension.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAsBzC,MAAM,MAAM,uBAAuB,GAAG;IACpC,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,4FAA4F;IAC5F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAkEF,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,EAAE,EAAE,YAAY,EAChB,cAAc,CAAC,EAAE,uBAAuB,GACvC,IAAI,CAuMN"}
|
package/dist/extension.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
1
|
+
import path, { dirname } from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { install, status, uninstall } from '@amaster.ai/pi-shared/scheduler';
|
|
2
4
|
import { loadPiSettings, resolveHome } from '@amaster.ai/pi-shared/settings';
|
|
3
5
|
import { createExtractionRunner, } from './background-extraction.js';
|
|
4
6
|
import { MemoryStore } from './store.js';
|
|
5
7
|
import { createMemoryTools } from './tools.js';
|
|
8
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
9
|
const SETTINGS_KEY = 'pi-memory';
|
|
7
10
|
const STATUS_KEY = 'pi-memory';
|
|
8
11
|
const MEMORY_GUIDANCE = [
|
|
@@ -31,6 +34,8 @@ function resolveConfig(raw) {
|
|
|
31
34
|
resolved.store = raw.store;
|
|
32
35
|
if (raw?.extractionModel)
|
|
33
36
|
resolved.extractionModel = raw.extractionModel;
|
|
37
|
+
if (raw?.dreaming)
|
|
38
|
+
resolved.dreaming = raw.dreaming;
|
|
34
39
|
return resolved;
|
|
35
40
|
}
|
|
36
41
|
function loadSettings(cwd) {
|
|
@@ -44,6 +49,34 @@ function loadSettings(cwd) {
|
|
|
44
49
|
return undefined;
|
|
45
50
|
}
|
|
46
51
|
}
|
|
52
|
+
const DREAM_JOB_NAME = 'ai.pi.memory-dream';
|
|
53
|
+
const DEFAULT_DREAM_INTERVAL_HOURS = 4;
|
|
54
|
+
async function registerDreamingCron(dreaming) {
|
|
55
|
+
try {
|
|
56
|
+
if (dreaming?.enabled === false) {
|
|
57
|
+
const current = await status(DREAM_JOB_NAME);
|
|
58
|
+
if (current === 'installed') {
|
|
59
|
+
await uninstall(DREAM_JOB_NAME);
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const current = await status(DREAM_JOB_NAME);
|
|
64
|
+
if (current === 'installed')
|
|
65
|
+
return;
|
|
66
|
+
const dreamBin = path.resolve(__dirname, 'cli/dream.js');
|
|
67
|
+
const intervalHours = dreaming?.intervalHours ?? DEFAULT_DREAM_INTERVAL_HOURS;
|
|
68
|
+
await install({
|
|
69
|
+
name: DREAM_JOB_NAME,
|
|
70
|
+
command: process.execPath,
|
|
71
|
+
args: [dreamBin, '--once'],
|
|
72
|
+
intervalSeconds: intervalHours * 3600,
|
|
73
|
+
description: 'Pi memory consolidation and dedup',
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Non-fatal: cron registration failure should not block the extension
|
|
78
|
+
}
|
|
79
|
+
}
|
|
47
80
|
export default function memoryExtension(pi, injectedConfig) {
|
|
48
81
|
let store;
|
|
49
82
|
let extractionRunner;
|
|
@@ -77,6 +110,8 @@ export default function memoryExtension(pi, injectedConfig) {
|
|
|
77
110
|
onNotify: (msg, level) => ctx.ui.notify(msg, level),
|
|
78
111
|
});
|
|
79
112
|
}
|
|
113
|
+
// Auto-register dreaming cron job
|
|
114
|
+
await registerDreamingCron(config.dreaming);
|
|
80
115
|
}
|
|
81
116
|
catch (err) {
|
|
82
117
|
ctx.ui.setStatus(STATUS_KEY, 'memory: unavailable');
|
package/dist/extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/pi-memory",
|
|
3
|
-
"version": "0.1.2-beta.
|
|
3
|
+
"version": "0.1.2-beta.37",
|
|
4
4
|
"description": "Pi extension providing persistent curated memory (MEMORY.md + USER.md) injected into the system prompt as a frozen snapshot.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
"sideEffects": false,
|
|
15
15
|
"main": "./dist/index.js",
|
|
16
16
|
"types": "./dist/index.d.ts",
|
|
17
|
+
"bin": {
|
|
18
|
+
"pi-memory-dream": "./dist/cli/dream.js"
|
|
19
|
+
},
|
|
17
20
|
"exports": {
|
|
18
21
|
".": {
|
|
19
22
|
"types": "./dist/index.d.ts",
|
|
@@ -39,6 +42,14 @@
|
|
|
39
42
|
"types": "./dist/background-extraction.d.ts",
|
|
40
43
|
"default": "./dist/background-extraction.js"
|
|
41
44
|
},
|
|
45
|
+
"./consolidation": {
|
|
46
|
+
"types": "./dist/consolidation.d.ts",
|
|
47
|
+
"default": "./dist/consolidation.js"
|
|
48
|
+
},
|
|
49
|
+
"./dreaming-state": {
|
|
50
|
+
"types": "./dist/dreaming-state.d.ts",
|
|
51
|
+
"default": "./dist/dreaming-state.js"
|
|
52
|
+
},
|
|
42
53
|
"./package.json": {
|
|
43
54
|
"default": "./package.json"
|
|
44
55
|
}
|
|
@@ -64,7 +75,9 @@
|
|
|
64
75
|
},
|
|
65
76
|
"dependencies": {
|
|
66
77
|
"proper-lockfile": "^4.1.2",
|
|
67
|
-
"@amaster.ai/pi-shared": "0.1.2-beta.
|
|
78
|
+
"@amaster.ai/pi-shared": "0.1.2-beta.37",
|
|
79
|
+
"@amaster.ai/pi-storage": "0.1.2-beta.37",
|
|
80
|
+
"@amaster.ai/pi-memory-mem0": "0.1.2-beta.37"
|
|
68
81
|
},
|
|
69
82
|
"peerDependencies": {
|
|
70
83
|
"@earendil-works/pi-agent-core": ">=0.74.0",
|