@reddb-io/red-skills 2.87.2 → 2.87.3
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/castle-mcp.bundle.min.mjs +330 -330
- package/dist/code-nav.bundle.min.mjs +1 -1
- package/dist/dev.bundle.min.mjs +540 -540
- package/dist/memory.bundle.min.mjs +1 -1
- package/dist/rsp.bundle.min.mjs +1 -1
- package/package.json +1 -1
|
@@ -6578,7 +6578,7 @@ Usage:
|
|
|
6578
6578
|
${n} archive --candidate <json> [--root <dir>] [--archive-dir <rel>]
|
|
6579
6579
|
${n} restore <name> [--root <dir>] [--archive-dir <rel>]`}function Ux(n){return mVn(typeof n.root=="string"?n.root:process.cwd())}function hut(n){return typeof n["archive-dir"]=="string"?n["archive-dir"]:void 0}async function eK(n){let a=await xs(n);return a?a.mode!=="graph"?{ok:!1,message:`curate: skill telemetry needs graph mode (this project is "${a.mode}") \u2014 run \`${VEe}\``}:ju(a)?{ok:!0}:{ok:!1,message:`curate: skill telemetry is not enabled here \u2014 run \`${VEe}\``}:{ok:!1,message:`curate: memory is not initialized here \u2014 run \`${VEe}\``}}function bVn(){let n=GVn(uVn(import.meta.url));return n.includes("dist/curate-skill")||n.endsWith("dist/curate-skill")?put(n,"..","cli.js"):put(n,"..","cli.ts")}async function pVn(n,a){let i=["curate","skills","--json"];a!==void 0&&i.push("--stale-days",String(a));let d=bVn(),h=d.endsWith(".ts")?but(process.execPath,["--import","tsx",d,...i,"--root",n],{encoding:"utf8"}):but(process.execPath,[d,...i,"--root",n],{encoding:"utf8"}),y=h.status??1;if(y!==0)throw new Error(`memory curate skills exited ${y}`);return Gut(h.stdout??"")}function ZVn(n){return typeof n.flags["stale-days"]=="string"?Number(n.flags["stale-days"]):void 0}async function Wut(n,a){return(a.loadCuratorReport??pVn)(Ux(n.flags),ZVn(n))}async function hVn(n){let a=Ux(n.flags),i=await eK(a);return i.ok?(console.log("curate: skill telemetry is enabled \u2014 ready to curate"),0):(console.error(i.message),2)}async function WVn(n,a){let i=Ux(n.flags),d=await eK(i);if(!d.ok)return console.error(d.message),2;let u;try{u=await Wut(n,a)}catch(J){return console.error(`curate: ${J.message}`),1}let{candidates:h,byCategory:y,filtered:f}=NEe(u);return console.log(JSON.stringify({candidates:h,byCategory:y,filtered:f,totals:{totalSkills:u.totalSkills,curatableSkills:u.curatableSkills,readOnlySkills:u.readOnlySkills}},null,2)),0}async function NVn(n,a){let i=Ux(n.flags),d=await eK(i);if(!d.ok)return console.error(d.message),2;let u;try{u=await Wut(n,a)}catch(J){return console.error(`curate: ${J.message}`),1}let{byCategory:h}=NEe(u);if(YEe(h)===0)return console.error("curate: no candidates \u2014 no issue filed"),0;let y=typeof n.flags.label=="string"?n.flags.label:void 0,f=await uut({byCategory:h,totals:{totalSkills:u.totalSkills,curatableSkills:u.curatableSkills,readOnlySkills:u.readOnlySkills},generatedAt:u.generatedAt},{cwd:i,label:y});return console.log(`curate: filed background issue \u2014 ${f.output||f.title}`),0}async function YVn(n){let a=Ux(n.flags),i=await eK(a);if(!i.ok)return console.error(i.message),2;let d=n.flags.candidate;if(typeof d!="string")return console.error("curate archive: --candidate <json> is required"),2;let u;try{u=JSON.parse(d)}catch(y){return console.error(`curate archive: invalid --candidate JSON: ${y.message}`),2}let h=await out(u,{rootDir:a,archiveDir:hut(n.flags)});return h.ok?(console.log(`curate: archived "${h.receipt.name}" \u2192 ${h.receipt.archiveRoot} (${h.receipt.files.length} file(s), manifest at ${h.receipt.manifestPath})`),0):(console.error(`curate archive: refused \u2014 ${h.rejection.reason}: ${h.rejection.detail}`),3)}async function VVn(n){let a=Ux(n.flags),i=await eK(a);if(!i.ok)return console.error(i.message),2;let d=n.positional[0];if(!d)return console.error("curate restore: skill name is required"),2;let u=await dut(d,{rootDir:a,archiveDir:hut(n.flags)});return console.log(`curate: restored "${u.name}" \u2192 ${u.restoredRoot} (${u.files.length} file(s) hash-verified)`),0}async function gEe(n,a={}){switch(n.command){case"check":return hVn(n);case"list":return WVn(n,a);case"background":return NVn(n,a);case"archive":return YVn(n);case"restore":return VVn(n);case void 0:case"--help":case"-h":return console.log(Zut(a.usageCommand)),0;default:return console.error(`unknown curate subcommand: ${n.command}
|
|
6580
6580
|
|
|
6581
|
-
${Zut(a.usageCommand)}`),2}}function yEe(n){let a={app:n,version:gVn(Bx("__RED_BUILD_VERSION__",()=>"2.87.
|
|
6581
|
+
${Zut(a.usageCommand)}`),2}}function yEe(n){let a={app:n,version:gVn(Bx("__RED_BUILD_VERSION__",()=>"2.87.3")??"0.0.0-dev"),gitSha:Bx("__RED_BUILD_GIT_SHA__",()=>"44ed3703f6b7a82dc68301d46ffeb8e8b8d61cb3")??"unknown",buildTime:Bx("__RED_BUILD_TIME__",()=>"2026-07-23T20:04:04-03:00")??"unknown",bundleAsset:Bx("__RED_BUNDLE_ASSET__",()=>"memory.bundle.min.mjs")??"unknown"},i=Bx("__REDDB_SDK_VERSION__",()=>"1.23.1"),d=Bx("__REDDB_BINARY_TAG__",()=>"v1.23.1");return i&&(a.reddbSdkVersion=i),d&&(a.reddbBinaryTag=d),a}function gVn(n){return n.startsWith("v")?n.slice(1):n}function REe(n){return`${n.app} ${n.version} ${n.gitSha}`}function Bx(n,a){try{let i=a();return typeof i=="string"&&i.length>0?i:void 0}catch{return process.env[n.replace(/^__|__$/g,"")]}}async function Rut(n){let{store:a}=await ga(n);try{let i=await a.stats();console.log(`memory: ${i.nodes} node(s), ${i.edges} edge(s)`)}finally{await a.close()}}async function vut(n){let a=n.positional[0];if(a!=="status"&&a!=="status-viewer"&&a!=="maintain"&&a!=="search")throw new Error("vector needs an action \u2014 supported: memory vector status|status-viewer|maintain|search");let i=process.env.RED_MEMORY_VECTOR_PROVIDER;n.flags.local===!0&&(process.env.RED_MEMORY_VECTOR_PROVIDER="local");let{store:d}=await ga(n);try{if(a==="search"){let h=n.positional.slice(1).join(" ").trim();if(!h)throw new Error("nothing to search \u2014 pass a query: memory vector search <query>");let y=await G5(d,h,{limit:Ir(n.flags,"limit")});if(n.flags.json===!0){console.log(JSON.stringify(y,null,2));return}if(y.status==="unavailable"){let f=y.error?` \u2014 ${y.error}`:"";console.log(`memory: vector search unavailable${f}`);return}console.log(`memory: vector search ${y.hits.length}/${y.limit} hit(s) for "${h}"`);for(let f of y.hits){let J=f.source?` source=${f.source}`:"";console.log(` ${f.score.toFixed(3)} memory_nodes:${f.rid} (${f.node_type}) ${f.title}${J}`),f.excerpt&&console.log(` ${f.excerpt}`)}return}if(a==="status-viewer"){let h=Wa(n.flags),y=Vl(n.flags,"out")??Pr(h,".red/memory/vector-status-viewer.html"),f=BD(await d.vectorStatus());await hs(Ps(y),{recursive:!0}),await fi(y,f.html,"utf8"),console.log(`memory: vector status viewer written ${y}`),console.log(` status: ${f.report.overall}`),console.log(` contract: ${f.contract.consumes}`);return}let u=a==="maintain"?await d.maintainVectorProjection({strict:n.flags.strict===!0}):await d.vectorStatus();if(n.flags.json===!0){console.log(JSON.stringify(u,null,2));return}console.log(`memory: vector projection ${u.overall} \u2014 ${u.ready}/${u.total} ready`),u.stale>0&&console.log(` stale: ${u.stale}`),u.unavailable>0&&console.log(` unavailable: ${u.unavailable}`),u.failed>0&&console.log(` failed: ${u.failed}`);for(let h of u.nodes.filter(y=>y.status!=="ready")){let y=h.error?` \u2014 ${h.error}`:"";console.log(` ${h.rid} (${h.node_type}) ${h.label}: ${h.status}${y}`)}for(let h of u.docs.filter(y=>y.status!=="ready")){let y=h.error?` \u2014 ${h.error}`:"";console.log(` doc:${h.rid} ${h.path}: ${h.status}${y}`)}}finally{await d.close(),n.flags.local===!0&&(i==null?delete process.env.RED_MEMORY_VECTOR_PROVIDER:process.env.RED_MEMORY_VECTOR_PROVIDER=i)}}async function Fut(n){let{store:a}=await ga(n);try{let i=Ir(n.flags,"stale-days")??90,d=await Gy(a,{staleDays:i});if(d.stale.length===0){console.log(`memory: healthy \u2014 0 of ${d.totalNodes} node(s) stale (unaccessed ${i}+ days, never recalled)`);return}console.log(`memory: ${d.stale.length} of ${d.totalNodes} node(s) stale (unaccessed ${i}+ days, never recalled):`);for(let y of d.stale)console.log(` ${y.rid} (${y.node_type}) ${y.title} \u2014 ${y.ageDays}d idle`);if(n.flags.prune!==!0){console.log(`
|
|
6582
6582
|
Re-run with --prune to delete these (asks for confirmation first).`);return}let u=n.flags.yes===!0;if(!u){if(!process.stdin.isTTY){console.log(`
|
|
6583
6583
|
refusing to prune without confirmation \u2014 re-run with --yes in a non-interactive shell`);return}let y=Qie({input:process.stdin,output:process.stdout}),f=(await y.question(`
|
|
6584
6584
|
Delete ${d.stale.length} stale node(s)? Type "yes" to confirm: `)).trim();y.close(),u=f==="yes"}if(!u){console.log("memory: aborted \u2014 nothing deleted");return}let{pruned:h}=await UFe(a,d.stale);console.log(`memory: pruned ${h} stale node(s)`)}finally{await a.close()}}async function Xut(n){let a=Wa(n.flags),i=n.positional[0]??".red/memory/export",d=km(i)?i:xr(a,i),u=n.flags.communities===!0,h=n.flags.interop===!0,{store:y}=await ga(n);try{let f=await tQ(y,d,{communities:u,interop:h});console.log(`memory: exported ${f.nodes} node(s), ${f.edges} edge(s)`),u&&console.log(" communities: coloured via native Louvain"),console.log(` graph: ${f.htmlPath}`),console.log(` json: ${f.jsonPath}`),console.log(` audit: ${f.auditPath}`),f.interop&&(console.log(` nodes: ${f.interop.nodesJsonlPath}`),console.log(` edges: ${f.interop.edgesJsonlPath}`),console.log(` graphml:${f.interop.graphmlPath}`),console.log(` cypher: ${f.interop.cypherPath}`))}finally{await y.close()}}async function fut(n){let a=n.positional.join(" ").trim();if(!a)throw new Error("nothing to search \u2014 pass a query: memory global-search <query>");let i=typeof n.flags.limit=="string"?Number(n.flags.limit):void 0,{store:d,config:u}=await ga(n);try{let h=await jv("memory.global-search",{store:d,providerConfig:u.provider},{query:a,limit:i,cache:n.flags["no-cache"]===!0?"off":"read-only"});if(n.flags.json===!0){console.log(JSON.stringify(h,null,2));return}console.log(`memory: ${h.total_hits} global-search hit(s) for "${h.query}"`),console.log(` source: ${h.generated_from.operation_id}`),console.log(` graph hash: ${h.generated_from.graph_hash}`),console.log(` provider: ${h.generated_from.provider.status}${h.generated_from.provider.error?` (${h.generated_from.provider.error})`:""}`);for(let y of h.evidence)console.log(` ${y.community_id}: score ${y.score}, ${y.size} node(s)`),console.log(` matched: ${y.matched_terms.join(", ")}`),console.log(` top label: ${y.top_label}`),console.log(` top type: ${y.top_node_type}`),y.narrative_summary&&console.log(` summary: ${y.narrative_summary}`)}finally{await d.close()}}async function vVn(n,a){let i=Vl(n.flags,"from");if(i){let u=km(i)?i:xr(a,i),h=JSON.parse(await Sb(u,"utf8")),y=h.contract??h,f=EFe(y);if(!f.valid)throw new Error(`architecture-overview: ${u} is not a valid graph contract \u2014 ${f.errors.join("; ")}`);return y}let{store:d}=await ga(n);try{let[u,h,y]=await Promise.all([d.listNodes(),d.listEdges(),d.communities()]);return Ff({nodes:u,edges:h.map(zf),communities:y})}finally{await d.close()}}async function wut(n){let a=Wa(n.flags),i=await vVn(n,a),d=ufe(i);if(n.flags.json===!0){console.log(JSON.stringify(d,null,2));return}if(n.flags.stdout===!0){process.stdout.write(d.markdown);return}let u=Vl(n.flags,"out")??".red/memory/architecture-overview.md",h=km(u)?u:xr(a,u);await hs(Ps(h),{recursive:!0}),await fi(h,d.markdown,"utf8"),console.log(`memory: architecture overview written ${h}`),console.log(` contract: ${d.generated_from.contract_version}`),console.log(` ${d.totals.nodes} node(s), ${d.layers.length} layer(s), ${d.communities.length} community(ies)`)}async function h5(){if(process.stdin.isTTY)return"";let n=[];for await(let a of process.stdin)n.push(a);return Buffer.concat(n).toString("utf8")}var FVn=["SessionStart","PostToolUse","Stop","PreCompact"];async function Hut(n){let a=n.positional[0],i=n.flags.runner==="codex"?"codex":"claude";if(!a||!FVn.includes(a)){process.stdout.write("{}");return}try{let d=await h5(),u=d.trim()?JSON.parse(d):{},h=Wa(n.flags)!==process.cwd()?Wa(n.flags):typeof u.cwd=="string"?u.cwd:process.cwd(),y=await Wfe(i,a,u);try{a==="SessionStart"?await Ny(h,y.sessionId?{id:y.sessionId}:{}):await eN(h)||(y.sessionId?await Ny(h,{id:y.sessionId}):await Awe(h))}catch{}let f=await Owe(y,h);process.stdout.write(Nfe(i,a,f))}catch{process.stdout.write("{}")}}var XVn=["post-commit","post-checkout"];async function Qut(n){switch(n.positional[0]){case"refresh":return fVn(n);case"install-hooks":return HVn(n);case"uninstall-hooks":return QVn(n);default:throw new Error("vcs needs a subcommand \u2014 memory vcs refresh|install-hooks|uninstall-hooks")}}async function fVn(n){let a=Wa(n.flags),i=Vl(n.flags,"event"),d=n.flags.json===!0;if(!i||!XVn.includes(i)){d&&console.log(JSON.stringify({noop:!0,reason:"unknown vcs event"}));return}try{let u=await Mwe(a,{event:i,prevHead:Vl(n.flags,"prev"),newHead:Vl(n.flags,"new"),flag:Vl(n.flags,"flag"),export:n.flags["no-export"]!==!0});if(d){console.log(JSON.stringify(u,null,2));return}if(u.noop){console.log(`memory: ${i} \u2014 no-op (${u.reason})`);return}let h=u.refresh;console.log(`memory: ${i} refreshed ${h?.files??0} changed file(s) \u2014 ${h?.added??0} added, ${h?.updated??0} updated, ${h?.stale??0} stale`),u.exported&&console.log(` exported ${u.exported.nodes} node(s) \u2192 ${u.exported.jsonPath}`)}catch(u){let h=`error: ${u instanceof Error?u.message:String(u)}`;console.log(d?JSON.stringify({noop:!0,reason:h}):`memory: ${i} \u2014 no-op (${h})`)}}async function Eut(n){try{let{stdout:a}=await yy("git",["-C",n,"rev-parse","--git-path","hooks"],{encoding:"utf8"}),i=a.trim();return i?km(i)?i:xr(n,i):xr(n,".git/hooks")}catch{return xr(n,".git/hooks")}}function wVn(){let n=process.env.CLAUDE_PLUGIN_ROOT??process.env.CODEX_PLUGIN_ROOT,a=gut(new URL("../cli.ts",import.meta.url)),i=[n?Pr(n,"scripts","bootstrap.mjs"):void 0,Pr(Ps(Ps(a)),"scripts","bootstrap.mjs")];for(let d of i)if(d&&tK(d))return d}async function HVn(n){let a=Wa(n.flags),i=await xs(a);if(!i){console.log("memory: not initialized here \u2014 run `memory init --mode graph` before installing git hooks");return}if(i.mode!=="graph"){console.log(`memory: git hooks need graph mode \u2014 this project is "${i.mode}". Re-run \`memory init --mode graph\` first`);return}let d=await Eut(a),u=await Uwe({hooksDir:d,bootstrapPath:wVn(),force:n.flags.force===!0});if(n.flags.json===!0){console.log(JSON.stringify({hooksDir:d,...u},null,2));return}u.installed.length>0&&console.log(`memory: installed ${u.installed.join(", ")} into ${d}`);for(let h of u.backedUp)console.log(` backed up existing hook \u2192 ${h}`);for(let h of u.skipped)console.log(` skipped ${h.hook}: ${h.reason}`)}async function QVn(n){let a=Wa(n.flags),i=await Eut(a),d=await Bwe(i);if(n.flags.json===!0){console.log(JSON.stringify({hooksDir:i,...d},null,2));return}d.removed.length>0?console.log(`memory: removed ${d.removed.join(", ")} from ${i}`):console.log(`memory: no managed hooks found in ${i}`);for(let u of d.restored)console.log(` restored backed-up hook \u2192 ${u}`);for(let u of d.skipped)console.log(` ${u.reason}`)}async function _ut(n){let a=n.positional[0];if(a==="learn")return EVn(n);if(a!=="record")throw new Error("unknown attempt command \u2014 expected: memory attempt record|learn");let i=await h5();if(!i.trim())throw new Error("attempt record needs a JSON payload on stdin");let d=JSON.parse(i),{store:u}=await ga(n);try{let h=await uEe(u,d);console.log(`memory: recorded attempt ${d.repository}#${d.issueNumber}/${d.attemptNumber} (rid ${h.attemptRid})`)}finally{await u.close()}}async function EVn(n){let a=n.positional[1];if(a==="apply")return _Vn(n);if(a!=null)throw new Error("memory attempt learn supports: apply");let i=Wa(n.flags),d=n.flags.json===!0,u=n.flags["write-proposal"]===!0,{store:h}=await ga(n);try{let y=await bEe(h),f=u?await pEe(i,y):null,J=y.proposals.length===0?"no-candidates":u?"proposal-written":"proposal-ready";if(d){console.log(JSON.stringify({state:J,proposalFile:f,...y},null,2));return}console.log(`memory: attempt learning - ${J}`);for(let S of y.proposals)console.log(` [${S.kind}] ${S.title}`),console.log(` evidence: ${S.evidenceSummary}`);for(let S of y.rejected)console.log(` ${S.action}: ${S.kind} - ${S.reason}`);f&&console.log(` proposal: ${f}`),console.log(`
|
package/dist/rsp.bundle.min.mjs
CHANGED
|
@@ -168,7 +168,7 @@ const timer = setInterval(() => {
|
|
|
168
168
|
}, 500);
|
|
169
169
|
`,String(process.pid)],{detached:!0,stdio:"ignore"});return t.unref(),t}function _o(){for(let e of d0())try{process.kill(e,"SIGTERM")}catch{}}function d0(){if(process.platform==="win32")return[];let e="";try{e=Uv("ps",["-eo","pid=,ppid=,args="],{encoding:"utf8"})}catch{return[]}let t=[];for(let r of e.split(/\n/)){let n=/^\s*(\d+)\s+(\d+)\s+([\s\S]*)$/.exec(r);if(!n)continue;let s=Number(n[1]),o=Number(n[2]),i=n[3]??"";o===process.pid&&/(^|\s)\S*red(?:\.exe)?\s+rpc\s+--stdio(\s|$)/.test(i)&&t.push(s)}return t}async function m0(e){if(e.collection!==de)return e;let t=await _g(e.raw_text,kg(e.raw_bytes)),r=await _g(e.emitted_text,kg(e.emitted_bytes)),{raw_text:n,emitted_text:s,...o}=e;return{...o,tokens_raw:t.tokens,tokens_emitted:r.tokens,estimated:t.estimated||r.estimated}}async function _g(e,t){if(typeof e=="string"){let r=Buffer.byteLength(e,"utf8");if(r<=Qv)try{return await Tg((async()=>({tokens:(await p0())("cl100k_base").encode(e).length,estimated:!1}))(),Zv,"telemetry tokenization timed out")}catch{return{tokens:Math.ceil(r/4),estimated:!0}}return{tokens:Math.ceil(r/4),estimated:!0}}return t!=null?{tokens:Math.ceil(t/4),estimated:!0}:{tokens:0,estimated:!1}}async function p0(){return Rg??=import(Yv(f0()).href).then(e=>{let t=e.getEncoding;if(!t)throw new Error("js-tiktoken getEncoding export not found");return t}),await Rg}function f0(){let e=Lc(zv(import.meta.url)),r=[wo(e,"..","node_modules","js-tiktoken","dist","index.js"),wo(e,"..","apps","rsp","node_modules","js-tiktoken","dist","index.js")].find(n=>qv(n));if(!r)throw new Error("js-tiktoken dependency not found");return r}function kg(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function z(e){return typeof e=="string"&&e.trim()!==""?e:void 0}function Ac(e){return e.trim().split(/\s+/).filter(Boolean)[0]??"unknown"}async function Tg(e,t,r){let n;try{return await Promise.race([e,new Promise((s,o)=>{n=setTimeout(()=>o(new Error(r)),t),n.unref()})])}finally{n&&clearTimeout(n)}}function g0(e){try{return JSON.parse(e)}catch{return e}}function h0(e){return Sg(e)&&e.version===1&&Array.isArray(e.records)&&e.records.every(t=>Sg(t)&&(t.collection===se||t.collection===q||t.collection===de||t.collection===Me)&&typeof t.key=="string"&&typeof t.created_at=="string"&&typeof t.expires_at=="string"&&typeof t.bytes=="number")}function Sg(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function y0(e,t){let r="";e.setEncoding("utf8"),e.on("error",()=>{}),e.on("data",n=>{r+=n;let s=r.indexOf(`
|
|
170
170
|
`);if(s<0)return;let o=r.slice(0,s);e.pause(),(async()=>{let i;try{i=JSON.parse(o),await t(i)}catch(a){let u={id:i?.id??Pr(),ok:!1,error:a instanceof Error?a.message:String(a)};Og(e,u)}finally{e.end()}})()})}function Og(e,t){if(!(e.destroyed||!e.writable))try{e.write(`${JSON.stringify(t)}
|
|
171
|
-
`)}catch{}}async function b0(e,t,r,n){if(t.op==="handover")return{handover:!0,version:n,clientVersion:t.clientVersion};if(e.kind==="opening")throw new Error("rsp resident store is not ready");if(e.kind==="failed")throw new Error(`rsp resident store failed to open: ${e.error.message}`);let s=e.store;if(t.op==="ping")return{pong:!0,version:n};if(t.op==="stats")return await s.stats();if(t.op==="accounting-stats"){let o=s.redDb();if(!o)throw new Error("rsp accounting stats require the shared RedDB store");return await Ui(o,t.byteBudget)}if(t.op==="telemetry-stats"){let o=s.redDb();if(!o)throw new Error("rsp telemetry stats require the shared RedDB store");return await hs(o,t.sinceDays)}if(t.op==="telemetry-gains"){let o=s.redDb();if(!o)throw new Error("rsp telemetry gains require the shared RedDB store");return await Ji(o,t.sinceDays)}if(t.op==="mint")return{handle:await s.mint(Buffer.from(t.original,"base64"),t.meta)};if(t.op==="get")return _0(await s.get(t.handle));if(t.op==="memory")return await s.memory(t.action,t.payload);if(t.op==="brain")return await w0(s,r,t.action,t.payload);throw new Error(`unsupported resident op: ${t.op??"unknown"}`)}async function w0(e,t,r,n){let s=e.redDb();if(!s)throw new Error("resident brain operations require the shared RedDB store");return await mg(s,t).request(r,n)}function _0(e){return e?"status"in e?e:{...e,original:e.original.toString("base64"),original_encoding:"base64"}:null}var Qv,Zv,vg,e0,t0,r0,Ic,wg,Rg,Ag=y(()=>{"use strict";_e();Xn();Ne();Qe();yg();Ce();ve();Qv=256*1024,Zv=500,vg=2e3,e0=Math.max(1,Number(process.env.RSP_TEST_IDLE_SHUTDOWN_WATCHDOG_MS??"10000")),t0="rsp-status-summary.json",r0=[se,q,de,Me,rn],Ic=class{constructor(t,r){this.store=t;this.opts=r;this.pendingHeals=[...r.bootHeals??[]]}running;pending=!1;pendingHeals;async drainAndSweep(){if(this.running){this.pending=!0,await this.running;return}this.running=(async()=>{do this.pending=!1,await this.drainAndSweepOnce();while(this.pending)})().finally(()=>{this.running=void 0}),await this.running}async drainAndSweepOnce(){let t=this.store.redDb();if(!t)return;let r=await s0(t);r.unshift(...this.pendingHeals),this.pendingHeals=[];let n=await this.readIndex(t),s=n.records.length,o=[...n.records];for(let a of r)o.push(await this.writeDrainDegradation(t,{reason:"telemetry collection model mismatch",command:"rsp resident telemetry drain",source_collection:a.collection,error:`expected kv, got ${a.previousModel}`,bytes:0}));await Wi(this.opts.rootDir,async a=>{let c=cr(a);if(!c){let u=await this.writeDrainDegradation(t,{reason:"telemetry parse failed",command:"unknown",bytes:Buffer.byteLength(a,"utf8")});return o.push(u),!0}try{let u=await this.writeEvent(t,c);o.push(u);let l=await this.writeAccountingMirror(t,c);return l&&o.push(l),!0}catch(u){let l=await this.writeDrainDegradation(t,{reason:"telemetry event dropped",command:z(c.command)||"unknown",source_id:z(c.id),source_collection:z(c.collection),error:u instanceof Error?u.message:String(u),bytes:Buffer.byteLength(a,"utf8")});return o.push(l),!0}});let i=o.length>s;await this.prune(t,{version:1,records:o},i),await n0(t,this.opts.rootDir)}async writeEvent(t,r){let n=new Date,s=typeof r.created_at=="string"?r.created_at:n.toISOString(),o=new Date(Date.parse(s)+this.opts.ttlDays*24*60*60*1e3).toISOString(),i=typeof r.id=="string"&&r.id.trim()!==""?r.id:Pr(),a={...await m0(r),id:i,created_at:s,expires_at:o};return await t.kv(r.collection).put(i,a),{collection:r.collection,key:i,created_at:s,expires_at:o,bytes:r.collection===se?0:typeof r.bytes=="number"&&Number.isFinite(r.bytes)?Math.max(0,r.bytes):Buffer.byteLength(JSON.stringify(a),"utf8")}}async writeAccountingMirror(t,r){return r.collection===se||r.accounting_recorded===!0?null:r.collection===de?await this.writeEvent(t,{collection:se,id:`mirror:${z(r.id)||Pr()}`,created_at:z(r.created_at)||z(r.ts)||new Date().toISOString(),event_type:"invocation",command:z(r.command)||"unknown",command_class:Ac(z(r.command)||"unknown"),wrapper:r.wrapper,loss:r.loss,elided:r.elided,raw_bytes:r.raw_bytes,emitted_bytes:r.emitted_bytes,tokens_raw:r.tokens_raw,tokens_emitted:r.tokens_emitted,estimated:r.estimated,wrapper_ms:r.wrapper_ms,store_open_count:r.store_open_count,store_elapsed_ms:r.store_elapsed_ms}):r.collection===Me?await this.writeEvent(t,{collection:se,id:`mirror:${z(r.id)||Pr()}`,created_at:z(r.created_at)||z(r.ts)||new Date().toISOString(),event_type:"invocation",command:z(r.command)||"unknown",command_class:Ac(z(r.command)||"unknown"),loss:"lossless",raw_bytes:0,emitted_bytes:0,degradation_reason:z(r.reason)||"unknown",wrapper_family:z(r.wrapper_family),wrapper_exit_code:r.wrapper_exit_code,stderr_head:z(r.stderr_head)}):null}async writeDrainDegradation(t,r){let n=await this.writeEvent(t,{collection:Me,id:Pr(),created_at:new Date().toISOString(),reason:r.reason,command:r.command,bytes:r.bytes,source_id:r.source_id,source_collection:r.source_collection,error:r.error});return await this.writeEvent(t,{collection:se,id:`mirror:${Pr()}`,created_at:n.created_at,event_type:"invocation",command:r.command,command_class:Ac(r.command),loss:"lossless",raw_bytes:0,emitted_bytes:0,degradation_reason:r.reason,source_id:r.source_id,source_collection:r.source_collection,error:r.error}),n}async readIndex(t){let r=await t.kv(rn).get("index:v1"),n=typeof r=="string"?g0(r):r;return h0(n)?n:{version:1,records:[]}}async writeIndex(t,r){await t.kv(rn).put("index:v1",r)}async prune(t,r,n=!1){let s=Date.now(),o=[];for(let a of r.records)Date.parse(a.expires_at)<=s?await t.kv(a.collection).delete(a.key):o.push(a);let i=o.reduce((a,c)=>a+c.bytes,0);for(o.sort((a,c)=>a.created_at.localeCompare(c.created_at));i>this.opts.byteBudget&&o.length>0;){let a=o.shift();i-=a.bytes,await t.kv(a.collection).delete(a.key)}(n||o.length<r.records.length)&&await this.writeIndex(t,{version:1,records:o})}};wg=!1});De();function we(e,t){let r=e.indexOf(t);return r>=0?e[r+1]:void 0}function W(e,t){let r=we(e,t);if(r==null)return;let n=Number(r);return Number.isFinite(n)&&n>0?n:void 0}function su(e){return e[0]==="--help"||e[0]==="-h"||e.includes("--help")||e.includes("-h")}function ou(e){let t={level:"lossless",positional:[]},r=[];for(let n=0;n<e.length;n++){let s=e[n];if(s==="--store-uri")t.storeUri=e[++n];else if(s==="--brief")t.level="brief";else if(s==="--terse")t.level="terse";else if(s==="--query")t.query=e[++n];else if(s.startsWith("--query="))t.query=s.slice(8);else{if(r.length===0&&s.startsWith("--"))throw new Fo(s);r.push(s)}}return t.query&&r[0]!=="show"&&!r.some(n=>n==="--query"||n.startsWith("--query="))&&r.push("--query",t.query),t.command=r[0],t.handle=r[1],t.positional=r,t}var Fo=class extends Error{constructor(r){super(`unknown flag: ${r}`);this.flag=r}render(){return Bn("rsp",this.flag,["--store-uri","--brief","--terse","--query"],"rsp --help")}};function Yt(e){return typeof e=="object"&&e!==null&&"render"in e&&typeof e.render=="function"}function iu(e){let t=e[1];if(!t)return null;let r={};for(let n=2;n<e.length;n++){let s=e[n];if(s!=="-f"&&s!=="-F")continue;let o=e[++n]??"",i=o.indexOf("=");i<=0||(r[o.slice(0,i)]=o.slice(i+1))}return{path:t,params:r}}function Fn(e,t){let r=we(e,"--since")??e.find(o=>o.startsWith("--since="))?.slice(8);if(!r)return t;let n=/^(\d+)(d)?$/.exec(r);if(!n)return t;let s=Number(n[1]);return Number.isFinite(s)&&s>0?s:t}function au(e){return e.includes("--full")}Ne();import{existsSync as R0}from"node:fs";import{fileURLToPath as k0}from"node:url";function yu(e){let t={app:e,version:Sh(Xt("__RED_BUILD_VERSION__",()=>"2.87.
|
|
171
|
+
`)}catch{}}async function b0(e,t,r,n){if(t.op==="handover")return{handover:!0,version:n,clientVersion:t.clientVersion};if(e.kind==="opening")throw new Error("rsp resident store is not ready");if(e.kind==="failed")throw new Error(`rsp resident store failed to open: ${e.error.message}`);let s=e.store;if(t.op==="ping")return{pong:!0,version:n};if(t.op==="stats")return await s.stats();if(t.op==="accounting-stats"){let o=s.redDb();if(!o)throw new Error("rsp accounting stats require the shared RedDB store");return await Ui(o,t.byteBudget)}if(t.op==="telemetry-stats"){let o=s.redDb();if(!o)throw new Error("rsp telemetry stats require the shared RedDB store");return await hs(o,t.sinceDays)}if(t.op==="telemetry-gains"){let o=s.redDb();if(!o)throw new Error("rsp telemetry gains require the shared RedDB store");return await Ji(o,t.sinceDays)}if(t.op==="mint")return{handle:await s.mint(Buffer.from(t.original,"base64"),t.meta)};if(t.op==="get")return _0(await s.get(t.handle));if(t.op==="memory")return await s.memory(t.action,t.payload);if(t.op==="brain")return await w0(s,r,t.action,t.payload);throw new Error(`unsupported resident op: ${t.op??"unknown"}`)}async function w0(e,t,r,n){let s=e.redDb();if(!s)throw new Error("resident brain operations require the shared RedDB store");return await mg(s,t).request(r,n)}function _0(e){return e?"status"in e?e:{...e,original:e.original.toString("base64"),original_encoding:"base64"}:null}var Qv,Zv,vg,e0,t0,r0,Ic,wg,Rg,Ag=y(()=>{"use strict";_e();Xn();Ne();Qe();yg();Ce();ve();Qv=256*1024,Zv=500,vg=2e3,e0=Math.max(1,Number(process.env.RSP_TEST_IDLE_SHUTDOWN_WATCHDOG_MS??"10000")),t0="rsp-status-summary.json",r0=[se,q,de,Me,rn],Ic=class{constructor(t,r){this.store=t;this.opts=r;this.pendingHeals=[...r.bootHeals??[]]}running;pending=!1;pendingHeals;async drainAndSweep(){if(this.running){this.pending=!0,await this.running;return}this.running=(async()=>{do this.pending=!1,await this.drainAndSweepOnce();while(this.pending)})().finally(()=>{this.running=void 0}),await this.running}async drainAndSweepOnce(){let t=this.store.redDb();if(!t)return;let r=await s0(t);r.unshift(...this.pendingHeals),this.pendingHeals=[];let n=await this.readIndex(t),s=n.records.length,o=[...n.records];for(let a of r)o.push(await this.writeDrainDegradation(t,{reason:"telemetry collection model mismatch",command:"rsp resident telemetry drain",source_collection:a.collection,error:`expected kv, got ${a.previousModel}`,bytes:0}));await Wi(this.opts.rootDir,async a=>{let c=cr(a);if(!c){let u=await this.writeDrainDegradation(t,{reason:"telemetry parse failed",command:"unknown",bytes:Buffer.byteLength(a,"utf8")});return o.push(u),!0}try{let u=await this.writeEvent(t,c);o.push(u);let l=await this.writeAccountingMirror(t,c);return l&&o.push(l),!0}catch(u){let l=await this.writeDrainDegradation(t,{reason:"telemetry event dropped",command:z(c.command)||"unknown",source_id:z(c.id),source_collection:z(c.collection),error:u instanceof Error?u.message:String(u),bytes:Buffer.byteLength(a,"utf8")});return o.push(l),!0}});let i=o.length>s;await this.prune(t,{version:1,records:o},i),await n0(t,this.opts.rootDir)}async writeEvent(t,r){let n=new Date,s=typeof r.created_at=="string"?r.created_at:n.toISOString(),o=new Date(Date.parse(s)+this.opts.ttlDays*24*60*60*1e3).toISOString(),i=typeof r.id=="string"&&r.id.trim()!==""?r.id:Pr(),a={...await m0(r),id:i,created_at:s,expires_at:o};return await t.kv(r.collection).put(i,a),{collection:r.collection,key:i,created_at:s,expires_at:o,bytes:r.collection===se?0:typeof r.bytes=="number"&&Number.isFinite(r.bytes)?Math.max(0,r.bytes):Buffer.byteLength(JSON.stringify(a),"utf8")}}async writeAccountingMirror(t,r){return r.collection===se||r.accounting_recorded===!0?null:r.collection===de?await this.writeEvent(t,{collection:se,id:`mirror:${z(r.id)||Pr()}`,created_at:z(r.created_at)||z(r.ts)||new Date().toISOString(),event_type:"invocation",command:z(r.command)||"unknown",command_class:Ac(z(r.command)||"unknown"),wrapper:r.wrapper,loss:r.loss,elided:r.elided,raw_bytes:r.raw_bytes,emitted_bytes:r.emitted_bytes,tokens_raw:r.tokens_raw,tokens_emitted:r.tokens_emitted,estimated:r.estimated,wrapper_ms:r.wrapper_ms,store_open_count:r.store_open_count,store_elapsed_ms:r.store_elapsed_ms}):r.collection===Me?await this.writeEvent(t,{collection:se,id:`mirror:${z(r.id)||Pr()}`,created_at:z(r.created_at)||z(r.ts)||new Date().toISOString(),event_type:"invocation",command:z(r.command)||"unknown",command_class:Ac(z(r.command)||"unknown"),loss:"lossless",raw_bytes:0,emitted_bytes:0,degradation_reason:z(r.reason)||"unknown",wrapper_family:z(r.wrapper_family),wrapper_exit_code:r.wrapper_exit_code,stderr_head:z(r.stderr_head)}):null}async writeDrainDegradation(t,r){let n=await this.writeEvent(t,{collection:Me,id:Pr(),created_at:new Date().toISOString(),reason:r.reason,command:r.command,bytes:r.bytes,source_id:r.source_id,source_collection:r.source_collection,error:r.error});return await this.writeEvent(t,{collection:se,id:`mirror:${Pr()}`,created_at:n.created_at,event_type:"invocation",command:r.command,command_class:Ac(r.command),loss:"lossless",raw_bytes:0,emitted_bytes:0,degradation_reason:r.reason,source_id:r.source_id,source_collection:r.source_collection,error:r.error}),n}async readIndex(t){let r=await t.kv(rn).get("index:v1"),n=typeof r=="string"?g0(r):r;return h0(n)?n:{version:1,records:[]}}async writeIndex(t,r){await t.kv(rn).put("index:v1",r)}async prune(t,r,n=!1){let s=Date.now(),o=[];for(let a of r.records)Date.parse(a.expires_at)<=s?await t.kv(a.collection).delete(a.key):o.push(a);let i=o.reduce((a,c)=>a+c.bytes,0);for(o.sort((a,c)=>a.created_at.localeCompare(c.created_at));i>this.opts.byteBudget&&o.length>0;){let a=o.shift();i-=a.bytes,await t.kv(a.collection).delete(a.key)}(n||o.length<r.records.length)&&await this.writeIndex(t,{version:1,records:o})}};wg=!1});De();function we(e,t){let r=e.indexOf(t);return r>=0?e[r+1]:void 0}function W(e,t){let r=we(e,t);if(r==null)return;let n=Number(r);return Number.isFinite(n)&&n>0?n:void 0}function su(e){return e[0]==="--help"||e[0]==="-h"||e.includes("--help")||e.includes("-h")}function ou(e){let t={level:"lossless",positional:[]},r=[];for(let n=0;n<e.length;n++){let s=e[n];if(s==="--store-uri")t.storeUri=e[++n];else if(s==="--brief")t.level="brief";else if(s==="--terse")t.level="terse";else if(s==="--query")t.query=e[++n];else if(s.startsWith("--query="))t.query=s.slice(8);else{if(r.length===0&&s.startsWith("--"))throw new Fo(s);r.push(s)}}return t.query&&r[0]!=="show"&&!r.some(n=>n==="--query"||n.startsWith("--query="))&&r.push("--query",t.query),t.command=r[0],t.handle=r[1],t.positional=r,t}var Fo=class extends Error{constructor(r){super(`unknown flag: ${r}`);this.flag=r}render(){return Bn("rsp",this.flag,["--store-uri","--brief","--terse","--query"],"rsp --help")}};function Yt(e){return typeof e=="object"&&e!==null&&"render"in e&&typeof e.render=="function"}function iu(e){let t=e[1];if(!t)return null;let r={};for(let n=2;n<e.length;n++){let s=e[n];if(s!=="-f"&&s!=="-F")continue;let o=e[++n]??"",i=o.indexOf("=");i<=0||(r[o.slice(0,i)]=o.slice(i+1))}return{path:t,params:r}}function Fn(e,t){let r=we(e,"--since")??e.find(o=>o.startsWith("--since="))?.slice(8);if(!r)return t;let n=/^(\d+)(d)?$/.exec(r);if(!n)return t;let s=Number(n[1]);return Number.isFinite(s)&&s>0?s:t}function au(e){return e.includes("--full")}Ne();import{existsSync as R0}from"node:fs";import{fileURLToPath as k0}from"node:url";function yu(e){let t={app:e,version:Sh(Xt("__RED_BUILD_VERSION__",()=>"2.87.3")??"0.0.0-dev"),gitSha:Xt("__RED_BUILD_GIT_SHA__",()=>"44ed3703f6b7a82dc68301d46ffeb8e8b8d61cb3")??"unknown",buildTime:Xt("__RED_BUILD_TIME__",()=>"2026-07-23T20:04:04-03:00")??"unknown",bundleAsset:Xt("__RED_BUNDLE_ASSET__",()=>"rsp.bundle.min.mjs")??"unknown"},r=Xt("__REDDB_SDK_VERSION__",()=>"1.23.1"),n=Xt("__REDDB_BINARY_TAG__",()=>"v1.23.1");return r&&(t.reddbSdkVersion=r),n&&(t.reddbBinaryTag=n),t}function Sh(e){return e.startsWith("v")?e.slice(1):e}function Xt(e,t){try{let r=t();return typeof r=="string"&&r.length>0?r:void 0}catch{return process.env[e.replace(/^__|__$/g,"")]}}De();Ne();Fr();import{existsSync as GR}from"node:fs";import{fileURLToPath as WR}from"node:url";ci();Ne();di();import{existsSync as pw}from"node:fs";import{fileURLToPath as fw}from"node:url";async function mr(e,t){let r={stats:gw(e.telemetryByteBudget),telemetry:Ki(t)};if(!e.storeUri.startsWith("file://"))return r;let n=fw(e.storeUri);if(!pw(n))return r;if(!n.endsWith("red-skills.rdb")){let{RspElisionStore:c}=await Promise.resolve().then(()=>(Qe(),or)),u=await c.open({uri:e.storeUri,ttlDays:e.ttlDays,ephemeralTtlHours:e.ephemeralTtlHours,byteBudget:e.byteBudget});try{return{stats:await u.stats(),telemetry:Ki(t)}}finally{await u.close()}}let{ensureReddbBinaryFromWarmCache:s}=await Promise.resolve().then(()=>(Qe(),or));await s();let{readAccountingLaneStats:o,readTelemetryStats:i}=await Promise.resolve().then(()=>(Ce(),on)),a=await er(e.storeUri);try{return{stats:await o(a,e.telemetryByteBudget),telemetry:await i(a,t)}}finally{await a.close()}}function zi(e,t=Ki(30),r=!1){return`${H(Yi(e,t,r))}
|
|
172
172
|
`}function Yi(e,t,r){let n=t.savings.top_commands.slice(0,r?10:3),s=r?t.savings.daily_tokens_saved:t.savings.daily_tokens_saved.slice(-7),o=e.storage_classes??ys(),i=t.health.recent_failures.slice(0,r?20:5),a=t.decisions.top_pass_reasons.slice(0,r?10:3);return{records:e.records,bytes:e.bytes,oldest:e.oldest,budget:e.budget,storage_classes:o,savings:{window_days:t.window_days,empty:t.empty,...t.savings,tokens_saved_display:hw(t.savings),dollars_saved_estimate_usd_display:yw(t.savings),daily_tokens_saved:s,daily_tokens_saved_elided:r?0:Math.max(0,t.savings.daily_tokens_saved.length-s.length),top_commands:n,top_commands_elided:r?0:Math.max(0,t.savings.top_commands.length-n.length)},health:{...t.health,degradation_rate_display:Vi(t.health.degradation_rate),show_hit_rate_display:Vi(t.health.show_hit_rate),by_reason:t.health.by_reason,by_family:t.health.by_family,recent_failures:i,recent_failures_elided:r?0:Math.max(0,t.health.recent_failures.length-i.length),most_recent_degradation_at:t.health.most_recent?.timestamp??null,most_recent_degradation_reason:t.health.most_recent?.reason??null},decisions:{...t.decisions,contribution_rate_display:Vi(t.decisions.contribution_rate),top_pass_reasons:a,top_pass_reasons_elided:r?0:Math.max(0,t.decisions.top_pass_reasons.length-a.length)},latency:{...t.latency,wrapper_ms_p50_display:qi(t.latency.wrapper_ms_p50),wrapper_ms_p95_display:qi(t.latency.wrapper_ms_p95),store_elapsed_ms_avg_display:qi(t.latency.store_elapsed_ms_avg)}}}function Kl(e){return`${H(e)}
|
|
173
173
|
`}function Ki(e){return{window_days:e,empty:!0,savings:{invocations:0,elided:0,raw_bytes:0,emitted_bytes:0,bytes_saved:0,tokens_saved:0,tokens_saved_estimated:!1,token_estimate_range_pct:null,tokens_saved_low:null,tokens_saved_high:null,dollars_saved_estimate_usd:0,dollars_saved_low_usd:null,dollars_saved_high_usd:null,pricing_model_family:"gpt-5",pricing_input_usd_per_million_tokens:1.25,pricing_note:"estimate derived from byte-based token estimate when token counts are estimated",daily_tokens_saved:[],top_commands:[]},health:{degradations:0,degradation_rate:0,show_total:0,show_hits:0,show_misses:0,show_hit_rate:0,by_reason:[],by_family:[],recent_failures:[],most_recent:null},latency:{wrapper_ms_p50:null,wrapper_ms_p95:null,store_open_count_sum:0,store_elapsed_ms_sum:0,store_elapsed_ms_avg:null},decisions:{seen:0,contributed:0,passed:0,failed_open:0,quota_free_saved_units:0,contribution_rate:0,top_pass_reasons:[]}}}function gw(e){return{records:0,bytes:0,oldest:null,budget:e,storage_classes:ys()}}function ys(){return{derivable:{records:0,bytes:0,raw_bytes:0},"re-executable":{records:0,bytes:0,raw_bytes:0},ephemeral:{records:0,bytes:0,raw_bytes:0}}}function Xi(e){let t=e.legacyStoreMigrated?"migrated":e.storeCreated?"created":"existing";return[`config: ${e.configChanged?"updated":"unchanged"}`,`store: ${t}`,""].join(`
|
|
174
174
|
`)}function hw(e){return e.tokens_saved_estimated?`${e.tokens_saved_low}-${e.tokens_saved_high} (estimate_midpoint: ${e.tokens_saved}, range_pct: ${e.token_estimate_range_pct})`:String(e.tokens_saved)}function yw(e){return e.dollars_saved_low_usd==null||e.dollars_saved_high_usd==null?qr(e.dollars_saved_estimate_usd):`${qr(e.dollars_saved_low_usd)}-${qr(e.dollars_saved_high_usd)} (estimate_midpoint: ${qr(e.dollars_saved_estimate_usd)})`}function qi(e){return e==null?"none":String(e)}function Vi(e){return e.toFixed(4).replace(/0+$/,"").replace(/\.$/,".0")}async function Sm(e){let{stats:t,telemetry:r}=await mr(e,30),[n,s]=await Promise.all([UR(e),Promise.resolve().then(()=>(Ca(),va)).then(o=>o.listWaits(process.cwd()),()=>[])]);return{stats:t,telemetry:r,recoveryHandles:n,waits:s}}function Em(e){let t=Yi(e.stats,e.telemetry,!1),r=Wo({executable:{name:"rsp",command:"rsp"},recovery:{pending:e.recoveryHandles.length,handles:e.recoveryHandles},waits:{active:e.waits.length,entries:e.waits},store:{records:e.stats.records,bytes:e.stats.bytes,oldest:e.stats.oldest,budget:e.stats.budget,storage_classes:e.stats.storage_classes??ys()},savings:t.savings,health:t.health,decisions:t.decisions,latency:t.latency},JR(e));return`${H(r)}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reddb-io/red-skills",
|
|
3
|
-
"version": "2.87.
|
|
3
|
+
"version": "2.87.3",
|
|
4
4
|
"description": "RedSkills plugin runtime bundles (dev, code-nav, memory, brain) distributed over npm — the v2 client transport (ADR 0091). Carries the platform-independent JS bundles inside the tarball plus thin bin shims; no postinstall download.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|