@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.
@@ -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.getAllEntries(),
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(1);
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.21",
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",