1111import { execFileSync } from "child_process" ;
1212import path from "node:path" ;
1313import fs from "node:fs" ;
14+ import { delegateCompactionToRuntime } from "openclaw/plugin-sdk/core" ;
1415import { KeepMcpTransport } from "./mcp-transport.js" ;
1516
1617// ---------------------------------------------------------------------------
@@ -170,13 +171,14 @@ function registerBootstrapContextEngine(api: any, mode: "install" | "configure")
170171 info : {
171172 id : "keep" ,
172173 name : "keep (setup required)" ,
173- version : "0.111.1 " ,
174+ version : "0.111.2 " ,
174175 ownsCompaction : false ,
175176 } ,
176177 async assemble ( params : { messages : any [ ] ; tokenBudget ?: number } ) {
177178 return {
178179 messages : params . messages ,
179180 systemPromptAddition : message ,
181+ estimatedTokens : 0 ,
180182 } ;
181183 } ,
182184 } ;
@@ -492,10 +494,7 @@ export default function register(api: any) {
492494 const startLine = parseInt ( tags . _focus_start_line , 10 ) || 1 ;
493495 const endLine = parseInt ( tags . _focus_end_line , 10 ) || startLine ;
494496
495- // Source: memory for memory/ files
496- const source = relPath . startsWith ( "memory/" ) || relPath === "MEMORY.md"
497- ? "memory"
498- : "memory" ;
497+ const source = "memory" ;
499498
500499 return {
501500 path : relPath ,
@@ -626,7 +625,7 @@ export default function register(api: any) {
626625 info : {
627626 id : "keep" ,
628627 name : "keep reflective memory" ,
629- version : "0.108.0 " ,
628+ version : "0.111.2 " ,
630629 ownsCompaction : false ,
631630 } ,
632631
@@ -771,6 +770,8 @@ export default function register(api: any) {
771770 sessionKey ?: string ;
772771 messages : any [ ] ;
773772 tokenBudget ?: number ;
773+ model ?: string ;
774+ prompt ?: string ;
774775 } ) {
775776 const conversationTokens = params . messages . reduce ( ( sum : number , m : any ) => {
776777 return sum + estimateTokens ( extractText ( m . content ) ) ;
@@ -788,12 +789,11 @@ export default function register(api: any) {
788789 try {
789790 const cfg = getConfig ( ) ;
790791
791- const lastUser = [ ...params . messages ]
792- . reverse ( )
793- . find ( ( m : any ) => m . role === "user" ) ;
794- const prompt = lastUser
795- ? truncate ( extractText ( lastUser . content ) , 500 )
796- : "" ;
792+ const prompt = params . prompt
793+ ?? ( ( ) => {
794+ const lastUser = [ ...params . messages ] . reverse ( ) . find ( ( m : any ) => m . role === "user" ) ;
795+ return lastUser ? truncate ( extractText ( lastUser . content ) , 500 ) : "" ;
796+ } ) ( ) ;
797797
798798 const totalBudget = params . tokenBudget || 8000 ;
799799 const keepBudget = Math . floor ( totalBudget * cfg . contextBudgetRatio ) ;
@@ -930,7 +930,7 @@ export default function register(api: any) {
930930 } ,
931931
932932 // -------------------------------------------------------------------
933- // compact: advisory (ownsCompaction=false)
933+ // compact: delegate to runtime (ownsCompaction=false)
934934 // -------------------------------------------------------------------
935935 async compact ( params : {
936936 sessionId : string ;
@@ -943,15 +943,13 @@ export default function register(api: any) {
943943 customInstructions ?: string ;
944944 runtimeContext ?: Record < string , unknown > ;
945945 } ) {
946- if ( params . currentTokenCount ) {
947- api . logger ?. debug (
948- `[keep] compact advisory: ${ params . currentTokenCount } tokens, ` +
949- `target=${ params . compactionTarget || "budget" } , ` +
950- `budget=${ params . tokenBudget } ` ,
951- ) ;
952- }
946+ api . logger ?. debug (
947+ `[keep] compact: delegating to runtime (tokens=${ params . currentTokenCount } , ` +
948+ `target=${ params . compactionTarget || "budget" } , ` +
949+ `budget=${ params . tokenBudget } )` ,
950+ ) ;
953951
954- return { ok : true , compacted : false , reason : "advisory" } ;
952+ return delegateCompactionToRuntime ( params ) ;
955953 } ,
956954
957955 // -------------------------------------------------------------------
@@ -1015,7 +1013,7 @@ export default function register(api: any) {
10151013 // -------------------------------------------------------------------
10161014 async onSubagentEnded ( params : {
10171015 childSessionKey : string ;
1018- reason : string ;
1016+ reason : "deleted" | "completed" | "swept" | "released" ;
10191017 } ) {
10201018 sessionFirstAssemble . delete ( params . childSessionKey ) ;
10211019 api . logger ?. debug (
0 commit comments