@pencil-agent/nano-pencil 1.11.21 → 1.11.23
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/builtin-extensions.js +9 -0
- package/dist/core/messages.d.ts +1 -0
- package/dist/core/messages.js +4 -0
- package/dist/packages/mem-core/cli.js +84 -0
- package/dist/packages/mem-core/config.d.ts +1 -0
- package/dist/packages/mem-core/config.js +1 -0
- package/dist/packages/mem-core/engine.d.ts +131 -1
- package/dist/packages/mem-core/engine.js +883 -39
- package/dist/packages/mem-core/extension.js +2 -2
- package/dist/packages/mem-core/reconsolidate-v2.js +8 -1
- package/dist/packages/mem-core/types-v2.d.ts +3 -0
- package/dist/packages/mem-core/types.d.ts +6 -0
- package/package.json +2 -2
|
@@ -173,7 +173,7 @@ async function buildMemoryRecallInjection(engine, project, userPrompt) {
|
|
|
173
173
|
if (!isMemoryRecallPrompt(userPrompt))
|
|
174
174
|
return undefined;
|
|
175
175
|
const [allEntries, allWork, allEpisodes] = await Promise.all([
|
|
176
|
-
engine.
|
|
176
|
+
engine.getRuntimeIdentityEntries(),
|
|
177
177
|
engine.getAllWork(),
|
|
178
178
|
engine.getAllEpisodes(),
|
|
179
179
|
]);
|
|
@@ -306,7 +306,7 @@ export default function nanomemExtension(pi) {
|
|
|
306
306
|
});
|
|
307
307
|
}
|
|
308
308
|
try {
|
|
309
|
-
const maintenance = await engine.runStartupMaintenance(
|
|
309
|
+
const maintenance = await engine.runStartupMaintenance(3);
|
|
310
310
|
if (maintenance.ran && ctx.hasUI) {
|
|
311
311
|
const notes = [];
|
|
312
312
|
if (maintenance.backupPath) {
|
|
@@ -61,6 +61,7 @@ export function reconsolidateV2Memories(episodes, facets, procedural, recalledEp
|
|
|
61
61
|
}
|
|
62
62
|
const sortedProcedural = [...procedural].sort((a, b) => (b.accessCount ?? 0) - (a.accessCount ?? 0));
|
|
63
63
|
const keptProcedural = [];
|
|
64
|
+
const supersededProcedural = [];
|
|
64
65
|
for (const procedure of sortedProcedural) {
|
|
65
66
|
if (recalledProcedureSet.has(procedure.id) && procedure.status === "draft" && procedure.accessCount >= 2) {
|
|
66
67
|
procedure.status = "active";
|
|
@@ -91,12 +92,18 @@ export function reconsolidateV2Memories(episodes, facets, procedural, recalledEp
|
|
|
91
92
|
if (keeper.status === "draft" && procedure.status === "active") {
|
|
92
93
|
keeper.status = "active";
|
|
93
94
|
}
|
|
95
|
+
supersededProcedural.push({
|
|
96
|
+
...procedure,
|
|
97
|
+
status: "superseded",
|
|
98
|
+
supersededById: keeper.id,
|
|
99
|
+
updatedAt: now,
|
|
100
|
+
});
|
|
94
101
|
mergedProcedures++;
|
|
95
102
|
}
|
|
96
103
|
return {
|
|
97
104
|
episodes,
|
|
98
105
|
facets,
|
|
99
|
-
procedural: keptProcedural,
|
|
106
|
+
procedural: [...keptProcedural, ...supersededProcedural],
|
|
100
107
|
changes: {
|
|
101
108
|
promotedProcedures,
|
|
102
109
|
mergedProcedures,
|
|
@@ -63,6 +63,9 @@ export interface BaseMemoryV2 {
|
|
|
63
63
|
confidence: number;
|
|
64
64
|
retention: MemoryRetentionV2;
|
|
65
65
|
stability: MemoryStabilityV2;
|
|
66
|
+
archivedAt?: string;
|
|
67
|
+
archiveReason?: string;
|
|
68
|
+
revivedAt?: string;
|
|
66
69
|
validFrom?: string;
|
|
67
70
|
validTo?: string;
|
|
68
71
|
ttlDays?: number;
|
|
@@ -68,6 +68,9 @@ export interface MemoryEntry {
|
|
|
68
68
|
retention?: MemoryRetention;
|
|
69
69
|
salience?: number;
|
|
70
70
|
stability?: MemoryStability;
|
|
71
|
+
archivedAt?: string;
|
|
72
|
+
archiveReason?: string;
|
|
73
|
+
revivedAt?: string;
|
|
71
74
|
stateData?: StateData;
|
|
72
75
|
relations?: MemoryRelation[];
|
|
73
76
|
/** Structured data for pattern/struggle types (Facets) */
|
|
@@ -108,6 +111,9 @@ export interface WorkEntry {
|
|
|
108
111
|
accessCount: number;
|
|
109
112
|
relatedIds?: string[];
|
|
110
113
|
ttl?: number;
|
|
114
|
+
archivedAt?: string;
|
|
115
|
+
archiveReason?: string;
|
|
116
|
+
revivedAt?: string;
|
|
111
117
|
scope?: MemoryScope;
|
|
112
118
|
}
|
|
113
119
|
export interface Meta {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pencil-agent/nano-pencil",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.23",
|
|
4
4
|
"description": "CLI writing agent with read, bash, edit, write tools and session management. Based on pi; supports DashScope Coding Plan. Soul enabled by default for AI personality evolution.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"build": "npm run build:deps && tsc && npm run copy:theme:json && npm run copy:extensions && npm run bundle:packages",
|
|
26
26
|
"build:deps": "npm run build --prefix packages/agent-core && npm run build --prefix packages/ai && npm run build --prefix packages/tui",
|
|
27
27
|
"copy:theme:json": "node -e \"const fs=require('fs');const p=require('path');const d='dist/modes/interactive/theme';if(!fs.existsSync(d))fs.mkdirSync(d,{recursive:true});fs.readdirSync('modes/interactive/theme').forEach(f=>{if(f.endsWith('.json'))fs.copyFileSync(p.join('modes/interactive/theme',f),p.join(d,f))})\"",
|
|
28
|
-
"copy:extensions": "node -e \"\nconst fs=require('fs');\nconst p=require('path');\nfunction c(s,d){\n if(fs.existsSync(d))fs.rmSync(d,{recursive:true,force:true});\n if(!fs.existsSync(d))fs.mkdirSync(d,{recursive:true});\n fs.readdirSync(s).forEach(f=>{\n const sp=p.join(s,f),dp=p.join(d,f);\n fs.statSync(sp).isDirectory()?c(sp,dp):fs.copyFileSync(sp,dp)\n })\n}\n// Copy defaults extensions\n\nc('extensions/defaults/security-audit','dist/extensions/defaults/security-audit');\nc('extensions/defaults/soul','dist/extensions/defaults/soul');\nc('extensions/defaults/interview','dist/extensions/defaults/interview');\nc('extensions/defaults/loop','dist/extensions/defaults/loop');\nc('extensions/defaults/team','dist/extensions/defaults/team');\nc('extensions/defaults/mcp','dist/extensions/defaults/mcp');\n// Copy optional extensions\nc('extensions/optional/simplify','dist/extensions/optional/simplify');\nc('extensions/optional/export-html','dist/extensions/optional/export-html');\nconsole.log('Extensions copied to dist/');\n\"",
|
|
28
|
+
"copy:extensions": "node -e \"\nconst fs=require('fs');\nconst p=require('path');\nfunction c(s,d){\n if(fs.existsSync(d))fs.rmSync(d,{recursive:true,force:true});\n if(!fs.existsSync(d))fs.mkdirSync(d,{recursive:true});\n fs.readdirSync(s).forEach(f=>{\n const sp=p.join(s,f),dp=p.join(d,f);\n fs.statSync(sp).isDirectory()?c(sp,dp):fs.copyFileSync(sp,dp)\n })\n}\n// Copy defaults extensions\n\nc('extensions/defaults/security-audit','dist/extensions/defaults/security-audit');\nc('extensions/defaults/soul','dist/extensions/defaults/soul');\nc('extensions/defaults/presence','dist/extensions/defaults/presence');\nc('extensions/defaults/interview','dist/extensions/defaults/interview');\nc('extensions/defaults/loop','dist/extensions/defaults/loop');\nc('extensions/defaults/team','dist/extensions/defaults/team');\nc('extensions/defaults/mcp','dist/extensions/defaults/mcp');\n// Copy optional extensions\nc('extensions/optional/simplify','dist/extensions/optional/simplify');\nc('extensions/optional/export-html','dist/extensions/optional/export-html');\nconsole.log('Extensions copied to dist/');\n\"",
|
|
29
29
|
"bundle:packages": "node scripts/bundle-deps.js",
|
|
30
30
|
"watch": "tsc --watch",
|
|
31
31
|
"start": "npx cross-env NODE_ENV=production node --no-deprecation dist/cli.js",
|