@herjarsa/omo-meta-governor 0.9.2 → 0.9.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/index.js +11 -11
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{createRequire as
|
|
2
|
-
`)X++;continue}if($==="/"&&X+1<K.length&&K[X+1]==="*"){X+=2;while(X<K.length){if(K[X]==="*"&&X+1<K.length&&K[X+1]==="/"){X+=2;break}X++}continue}Q.push($),X++}let Z=Q.join("");for(let $=0;$<10;$++){let J=Z;if(Z=Z.replace(/,(\s*[\]}])/g,"$1"),Z===J)break}return Z}function
|
|
1
|
+
import{createRequire as rK}from"node:module";var dK=Object.defineProperty;var uK=(K)=>K;function lK(K,Q){this[K]=uK.bind(null,Q)}var aK=(K,Q)=>{for(var X in Q)dK(K,X,{get:Q[X],enumerable:!0,configurable:!0,set:lK.bind(Q,X)})};var cK=(K,Q)=>()=>(K&&(Q=K(K=0)),Q);var GK=rK(import.meta.url);var DK={};aK(DK,{stripJsoncComments:()=>QK,parseJsonc:()=>XK,loadMetaGovernorConfig:()=>IK,loadJsoncFile:()=>f,getUserConfigPath:()=>ZK,getProjectConfigPath:()=>$K,deepMerge:()=>b});import{readFile as TQ,access as bQ}from"node:fs/promises";import{resolve as yK}from"node:path";import{homedir as jQ}from"node:os";function QK(K){let Q=[],X=0;while(X<K.length){let $=K[X];if($==='"'||$==="'"){let J=$;Q.push(J),X++;while(X<K.length){let q=K[X];if(Q.push(q),q==="\\"){if(X++,X<K.length)Q.push(K[X])}else if(q===J){X++;break}X++}continue}if($==="/"&&X+1<K.length&&K[X+1]==="/"){X+=2;while(X<K.length&&K[X]!==`
|
|
2
|
+
`)X++;continue}if($==="/"&&X+1<K.length&&K[X+1]==="*"){X+=2;while(X<K.length){if(K[X]==="*"&&X+1<K.length&&K[X+1]==="/"){X+=2;break}X++}continue}Q.push($),X++}let Z=Q.join("");for(let $=0;$<10;$++){let J=Z;if(Z=Z.replace(/,(\s*[\]}])/g,"$1"),Z===J)break}return Z}function XK(K){try{let Q=QK(K);return JSON.parse(Q)}catch{return}}function ZK(){return yK(jQ(),".config","opencode",xK)}function $K(K){let Q=K??process.cwd();return yK(Q,".opencode",xK)}async function CQ(K){try{return await bQ(K),!0}catch{return!1}}async function f(K){if(!await CQ(K))return;try{let Q=await TQ(K,"utf-8");return XK(Q)}catch{return}}function b(K,Q){let X={...K};for(let Z of Object.keys(Q)){let $=Q[Z],J=X[Z];if($===void 0)continue;if(CK($)&&CK(J))X[Z]=b(J,$);else X[Z]=$}return X}function CK(K){return typeof K==="object"&&K!==null&&!Array.isArray(K)}async function IK(K={}){let Q=[],X="defaults",Z={},$=ZK(),J=await f($);if(J)Z=b(Z,J),Q.push(`user:${$}`),X="user";let q=$K(K.projectDir),B=await f(q);if(B)Z=b(Z,B),Q.push(`project:${q}`),X="project";if(K.cliOptions&&Object.keys(K.cliOptions).length>0)Z=b(Z,K.cliOptions),Q.push("cli:inline"),X="cli";return{config:Z,sources:Q,effectiveSource:X}}var xK="omo-meta-governor.jsonc";var JK=()=>{};import{execSync as M,spawn as FK}from"node:child_process";import{access as nK,stat as sK}from"node:fs/promises";import{resolve as D}from"node:path";import{constants as iK}from"node:fs";async function tK(K,Q=60000){try{return M("npm i -D @colbymchenry/codegraph",{cwd:K,stdio:"ignore",timeout:Q}),"codegraph-installed"}catch{return"codegraph-install-failed"}}async function oK(K=60000){try{return M("pip install graphifyy --break-system-packages --quiet",{stdio:"ignore",timeout:K}),"graphify-installed"}catch{try{return M("uv tool install graphifyy --quiet",{stdio:"ignore",timeout:K}),"graphify-installed"}catch{return"graphify-install-failed"}}}var d=new Set;function eK(){d.clear()}var _K=new Map;function PK(K){let X=(_K.get(K)??0)+1;return _K.set(K,X),X}async function wK(K){let Q=!1,X=!1,Z=await LK(D(K,".codegraph")),$=await LK(D(K,"graphify-out"));try{M("npx --yes codegraph --version",{stdio:"ignore",timeout:1e4}),Q=!0}catch{try{M("node node_modules/.bin/codegraph --version",{cwd:K,stdio:"ignore",timeout:5000}),Q=!0}catch{}}try{M("python3 -c 'import graphify; print(graphify.__version__)'",{stdio:"ignore",timeout:5000}),X=!0}catch{try{M("python3 -c 'import graphifyy; print(graphifyy.__version__)'",{stdio:"ignore",timeout:5000}),X=!0}catch{}}return{codegraph:Q,graphify:X,codegraphIndexExists:Z,graphifyIndexExists:$}}async function KQ(K){let Q=D(K,".codegraph");await MK(Q);try{M("npx --yes codegraph init",{cwd:K,stdio:"ignore",timeout:60000})}catch{}}async function QQ(K){let Q=D(K,"graphify-out");await MK(Q);try{M("python3 -m graphify . --no-viz",{cwd:K,stdio:"ignore",timeout:120000})}catch{try{M("graphifyy . --no-viz",{cwd:K,stdio:"ignore",timeout:120000})}catch{}}}var y=new Map;function AK(K,Q){let X=`${K}:${Q}`;if(y.has(X))return;try{let Z;if(Q==="codegraph")Z=FK("node",["-e",`
|
|
3
3
|
const {execSync} = require("child_process");
|
|
4
4
|
const run = () => {
|
|
5
5
|
try { execSync("npx codegraph update 2>/dev/null", {cwd: ${JSON.stringify(K)}, stdio: "ignore"}); }
|
|
@@ -7,17 +7,17 @@ import{createRequire as uK}from"node:module";var fK=Object.defineProperty;var mK
|
|
|
7
7
|
};
|
|
8
8
|
run();
|
|
9
9
|
setInterval(run, 30_000);
|
|
10
|
-
`],{stdio:"ignore",detached:!0});else Z=HK("python3",["-m","graphify",".","--no-viz","--watch"],{cwd:K,stdio:"ignore",detached:!0});Z.unref(),j.set(X,{process:Z,tool:Q}),Z.on("exit",()=>{j.delete(X)})}catch{}}function oK(K){for(let[Q,X]of j)if(!K||Q.startsWith(K)){try{X.process.kill("SIGTERM")}catch{}setTimeout(()=>{try{X.process.kill("SIGKILL")}catch{}},2000).unref(),j.delete(Q)}}async function g(K={enabled:!0,watch:!1,autoInstall:!0,installTimeoutMs:60000}){let Q=[],X=K.projectDir??process.cwd();if(!K.enabled)return{attempted:!1,codes:["disabled"],availability:{codegraph:!1,graphify:!1,codegraphIndexExists:!1,graphifyIndexExists:!1},alreadyInitialized:!1};if(m.has(X)){let $=await GK(X);return{attempted:!1,codes:$.codegraphIndexExists?["codegraph-already-exists"]:[],availability:$,alreadyInitialized:!0}}m.add(X);let Z;try{Z=await GK(X)}catch{return{attempted:!1,codes:["error"],availability:{codegraph:!1,graphify:!1,codegraphIndexExists:!1,graphifyIndexExists:!1},alreadyInitialized:!1}}if(K.autoInstall!==!1){if(!Z.codegraph){let $=await rK(X,K.installTimeoutMs??60000);if(Q.push($),$==="codegraph-installed")Z.codegraph=!0}if(!Z.graphify){let $=await nK(K.installTimeoutMs??60000);if(Q.push($),$==="graphify-installed")Z.graphify=!0}}else{if(!Z.codegraph)Q.push("codegraph-install-skipped");if(!Z.graphify)Q.push("graphify-install-skipped")}if(Z.codegraph)if(!Z.codegraphIndexExists)try{await iK(X),Q.push("codegraph-initialized")}catch{Q.push("error")}else Q.push("codegraph-already-exists");else Q.push("codegraph-unavailable");if(Z.graphify)if(!Z.graphifyIndexExists)try{await tK(X),Q.push("graphify-initialized")}catch{Q.push("error")}else Q.push("graphify-already-exists");else Q.push("graphify-unavailable");if(K.watch){if(Z.codegraph)FK(X,"codegraph"),Q.push("watch-started-codegraph");if(Z.graphify)FK(X,"graphify"),Q.push("watch-started-graphify")}return{attempted:!0,codes:Q,availability:Z,alreadyInitialized:!1}}async function _K(K){try{return(await aK(K)).isDirectory()}catch{return!1}}async function AK(K){try{await lK(K,cK.F_OK)}catch{let{mkdir:Q}=await import("node:fs/promises");await Q(K,{recursive:!0})}}var LK={limits:{maxLessons:10,maxSlots:20,maxTasks:10},timeouts:{agentmemoryMs:2000,magicContextMs:1000,boulderStateMs:1000}};async function l(K,Q){let X=performance.now(),Z={...LK.limits,...K.limits},$={...LK.timeouts,...K.timeouts},[J,z,q]=await Promise.allSettled([eK(K,Q.agentmemory,Z,$.agentmemoryMs),KQ(K,Q.magicContext,Z,$.magicContextMs),QQ(K,Q.boulderState,Z,$.boulderStateMs)]),B=[],W={},H=J.status==="fulfilled"?J.value:(d(B,W,"agentmemory",p(J.reason)),u.agentmemory),U=z.status==="fulfilled"?z.value:(d(B,W,"magicContext",p(z.reason)),u.magicContext),G=q.status==="fulfilled"?q.value:(d(B,W,"boulderState",p(q.reason)),u.boulderState);return{query:K.query,timestampISO:new Date().toISOString(),agentmemory:H,magicContext:U,boulderState:G,degradedSources:B,durationMs:performance.now()-X,errorMessages:W}}async function eK(K,Q,X,Z){let $=await a(Q.smartSearch({query:K.query,limit:X.maxLessons}),Z,"agentmemory");return{available:!0,lessons:XQ($.lessons).slice(0,X.maxLessons).map((z)=>({id:z.id,title:z.title,advice:"info",confidence:z.confidence,concepts:z.concepts}))}}async function KQ(K,Q,X,Z){return{available:!0,slots:(await a(Q.slotList({directory:K.directory}),Z,"magicContext")).filter((J)=>J.label.startsWith("meta_governor:")||ZQ(J,K.query)).sort((J,z)=>J.label.localeCompare(z.label)).slice(0,X.maxSlots).map((J)=>({label:J.label,content:J.content}))}}async function QQ(K,Q,X,Z){let $=await a(Q.boulderRead({directory:K.directory,sessionID:K.sessionID,query:K.query}),Z,"boulderState");return{available:!0,tasks:$.sort((z,q)=>z.priority-q.priority||q.updatedAtMs-z.updatedAtMs).slice(0,X.maxTasks).map((z)=>({id:z.id,status:z.status,title:z.title})),planProgress:$Q($)}}function XQ(K){return[...K].sort((Q,X)=>X.confidence-Q.confidence)}function ZQ(K,Q){let X=Q.toLowerCase();return K.label.toLowerCase().includes(X)||K.content.toLowerCase().includes(X)}function $Q(K){if(K.length===0)return 0;return K.filter((X)=>X.status==="done").length/K.length}function p(K){if(K instanceof Error)return K.message;if(typeof K==="string")return K;return"unknown error"}function d(K,Q,X,Z){K.push(X),Q[X]=Z}var u={agentmemory:{available:!1,lessons:[]},magicContext:{available:!1,slots:[]},boulderState:{available:!1,tasks:[],planProgress:0}};async function a(K,Q,X){return new Promise((Z,$)=>{let J=setTimeout(()=>$(Error(`${X} timeout after ${Q}ms`)),Q);K.then((z)=>{clearTimeout(J),Z(z)},(z)=>{clearTimeout(J),$(z)})})}function JQ(){return{compactBurnRateThreshold:500,compactUsageThreshold:0.85,switchModelUsageThreshold:0.95,delegateConsecutiveHighBurn:5,windowSize:10}}function PK(K){if(K.length===0)return 0;return K.reduce((X,Z)=>X+Z,0)/K.length}function qQ(K,Q){let X=0;for(let Z=K.length-1;Z>=0;Z--)if(K[Z]>=Q)X++;else break;return X}function zQ(K,Q,X,Z){let $=Q-K;if($<=0)return Z;if(X<=0)return null;let J=Math.floor($/X);if(J<=0)return Z;let z=J*2;return new Date(new Date(Z).getTime()+z*1000).toISOString()}function c(K){let{currentUsage:Q,modelLimit:X,recentTurnTokens:Z,timestampISO:$,config:J}=K,z=Z.slice(-J.windowSize),q=PK(z),B=X-Q,W=X>0?Q/X:1,H=Math.min(0.95,0.3+z.length/J.windowSize*0.65),U="no-action",G="within normal parameters";if(W>=J.switchModelUsageThreshold)U="switch-model",G=`context usage ${(W*100).toFixed(1)}% exceeds switch threshold ${(J.switchModelUsageThreshold*100).toFixed(1)}%`;if(W>=J.compactUsageThreshold||q>=J.compactBurnRateThreshold){if(U==="no-action")U="compact-now",G=W>=J.compactUsageThreshold?`context usage ${(W*100).toFixed(1)}% exceeds compact threshold ${(J.compactUsageThreshold*100).toFixed(1)}%`:`burn rate ${q.toFixed(0)} tokens/turn exceeds threshold ${J.compactBurnRateThreshold}`}let w=qQ(z,J.compactBurnRateThreshold);if(w>=J.delegateConsecutiveHighBurn&&U==="no-action")U="delegate-to-subagent",G=`${w} consecutive high-burn turns (threshold: ${J.delegateConsecutiveHighBurn})`;let F=zQ(Q,X,q,$);return{currentUsage:Q,burnRate:q,budgetLeft:B,willOverflowAt:F,recommendation:U,confidence:H,modelLimit:X,windowRemaining:Math.max(0,Math.floor(B/Math.max(q,1))),input:{...K},computedAtISO:$,turnsAnalyzed:z.length}}var M={"oracle-verified":0.25,"no-progress-detector":0.2,"deviation-detector":0.2,"iteration-budget":0.15,"lesson-recall":0.1,"token-predictor":0.1},I=()=>({continueThreshold:0.3,warnThreshold:0.3,escalateThreshold:0.6,stopThreshold:0.8,paralysisThreshold:3,defaultEscalationTarget:"oracle"});function BQ(K){let Q=[];Q.push({source:"oracle-verified",rawScore:K.oracleVerified?0.6:0,weight:M["oracle-verified"],weightedScore:K.oracleVerified?0.6*M["oracle-verified"]:0,description:K.oracleVerified?"Oracle verification passed":"No Oracle verification"}),Q.push({source:"no-progress-detector",rawScore:K.noProgress?-0.8:0,weight:M["no-progress-detector"],weightedScore:K.noProgress?-0.8*M["no-progress-detector"]:0,description:K.noProgress?"No progress detected in last turn":"Progress detected"});let X=YQ(K.deviations);Q.push({source:"deviation-detector",rawScore:X,weight:M["deviation-detector"],weightedScore:X*M["deviation-detector"],description:K.deviations.length>0?`${K.deviations.length} deviation(s) detected (worst: ${K.deviations[0].severity})`:"No deviations detected"});let Z=VQ(K.iterationRatio);Q.push({source:"iteration-budget",rawScore:Z,weight:M["iteration-budget"],weightedScore:Z*M["iteration-budget"],description:`Iteration ratio: ${K.iterationRatio.toFixed(2)} (${K.ambient.iteration}/${K.ambient.maxIterations})`});let $=WQ(K.lessonsRelevant);return Q.push({source:"lesson-recall",rawScore:$,weight:M["lesson-recall"],weightedScore:$*M["lesson-recall"],description:K.lessonsRelevant.length>0?`${K.lessonsRelevant.length} relevant lesson(s) (avg confidence: ${HQ(K.lessonsRelevant).toFixed(2)})`:"No relevant lessons"}),Q}function YQ(K){if(K.length===0)return 0;let Q={grave:-0.9,media:-0.5,leve:-0.2},X=0;for(let $ of K){let J=Q[$.severity]??-0.3;if(J<X)X=J}let Z=Math.min(K.length*0.05,0.2);return Math.max(X-Z,-1)}function VQ(K){if(K<=0.5)return-K*0.6;return-0.3-(K-0.5)*1}function WQ(K){if(K.length===0)return 0;let Q=0;for(let X of K)Q+=({continue:0.3,info:0,warn:-0.3,stop:-0.7}[X.advice]??0)*X.confidence;return Math.max(Math.min(Q/K.length,1),-1)}function HQ(K){if(K.length===0)return 0;return K.reduce((Q,X)=>Q+X.confidence,0)/K.length}function UQ(K,Q){if(K>=Q.continueThreshold)return"continue";if(K<=-Q.stopThreshold)return"stop";if(K<=-Q.escalateThreshold)return"escalate";if(K<=-Q.warnThreshold)return"warn";return"continue"}function GQ(K,Q){if(!K.oracleVerified)return"oracle";if(K.deviations.some((X)=>X.severity==="grave"))return"user";return Q.defaultEscalationTarget}function MK(K,Q,X,Z){if(Z)return`Paralysis detected: forced continue despite score ${K.toFixed(3)} (too many consecutive stops)`;let $=[...X].sort((W,H)=>W.weightedScore-H.weightedScore),J=$[0],z=$[$.length-1],q=[];if(J.weightedScore<0)q.push(`primary concern: ${J.description}`);if(z.weightedScore>0)q.push(`positive signal: ${z.description}`);return`${{continue:"Continue",warn:"Warn",escalate:"Escalate",stop:"Stop"}[Q]} (score: ${K.toFixed(3)}): ${q.join("; ")||"balanced signals"}`}function r(K,Q){let X={...I(),...Q},Z=BQ(K),$=Z.reduce((U,G)=>U+G.weightedScore,0),J=Math.max(Math.min($,1),-1),z=K.slotMemory.consecutiveStops>=X.paralysisThreshold&&J<=-X.warnThreshold,q=z?"continue":UQ(J,X),B=[];if(q!=="continue"||Math.abs(J)<X.continueThreshold){for(let U of Z)if(Math.abs(U.weightedScore)>0.01)B.push({source:U.source,value:U.description,confidence:Math.abs(U.rawScore),weight:U.weight});if(B.length===0&&q!=="continue")B.push({source:"ambient",value:MK(J,q,Z,z),confidence:0.5,weight:0.1})}let W=q==="escalate"?GQ(K,X):null;return{decision:{action:q,score:J,reasoning:MK(J,q,Z,z),evidence:B,shouldEscalateTo:W},contributions:Z,rawScore:J,paralysisOverride:z,computedAtISO:new Date().toISOString()}}var S=()=>({enabled:!0,maxHistoryPerSession:50,forceContinueAfterStops:3,warnMessageTemplate:"[MetaGovernor] Score {score}: {reasoning}. Evidence: {evidenceCount} signal(s).",escalateMessageTemplate:"[MetaGovernor] Escalating to {target}: {reasoning}",stopMessageTemplate:"[MetaGovernor] STOP — {reasoning}. Evidence: {evidenceCount} signal(s)."});function D(K,Q){let X=K;for(let[Z,$]of Object.entries(Q))X=X.replaceAll(`{${Z}}`,$);return X}function FQ(K){return K.length}function n(K,Q){let X={...S(),...Q};if(!X.enabled)return{action:"continue",message:null,historyEntry:{decision:K.scoringResult.decision,action:"continue",timestampISO:new Date().toISOString(),sessionID:K.sessionID,reasoning:"Decision handler disabled — pass-through continue"}};let Z=K.scoringResult.decision,$=Z.score,J=Z.reasoning,z=FQ(Z.evidence),q=Z.shouldEscalateTo??X.defaultEscalationTarget??"oracle";if(K.scoringResult.paralysisOverride)return{action:"continue",message:D(X.warnMessageTemplate,{score:$.toFixed(3),reasoning:`Paralysis detected — forced continue. ${J}`,evidenceCount:String(z)}),historyEntry:{decision:Z,action:"continue",timestampISO:new Date().toISOString(),sessionID:K.sessionID,reasoning:`Paralysis override: ${J}`}};switch(Z.action){case"continue":return{action:"continue",message:null,historyEntry:{decision:Z,action:"continue",timestampISO:new Date().toISOString(),sessionID:K.sessionID,reasoning:J}};case"warn":return{action:"warn",message:D(X.warnMessageTemplate,{score:$.toFixed(3),reasoning:J,evidenceCount:String(z)}),historyEntry:{decision:Z,action:"warn",timestampISO:new Date().toISOString(),sessionID:K.sessionID,reasoning:J}};case"escalate":return{action:"escalate",message:D(X.escalateMessageTemplate,{target:q,reasoning:J}),historyEntry:{decision:Z,action:"escalate",timestampISO:new Date().toISOString(),sessionID:K.sessionID,reasoning:`Escalate to ${q}: ${J}`}};case"stop":return{action:"stop",message:D(X.stopMessageTemplate,{reasoning:J,evidenceCount:String(z)}),historyEntry:{decision:Z,action:"stop",timestampISO:new Date().toISOString(),sessionID:K.sessionID,reasoning:J}}}}function _Q(K,Q){if(K.length<=Q)return{trimmed:[...K],dropped:0};let X=K.length-Q;return{trimmed:K.slice(-Q),dropped:X}}function wQ(K){let Q=0;for(let X=K.length-1;X>=0;X--)if(K[X].action==="stop")Q++;else break;return Q}var OK={leve:0,media:1,grave:2};function AQ(K,Q,X){let Z=`${K}-${Q}-${X}`.split("").reduce(($,J)=>($<<5)-$+J.charCodeAt(0)|0,0);return`D-${Math.abs(Z).toString(36)}`}function RK(K,Q){let X=OK[Q]??0;return K.some((Z)=>(OK[Z.severity]??0)>=X)}function LQ(K){let Q=new Set;for(let X of K)Q.add(X.category),Q.add(X.severity);return[...Q]}function PQ(K,Q){let X=Q.map((Z)=>`[${Z.severity}] ${Z.category}: ${Z.detail}`).join("; ");return`Action "${K.action}" (score ${K.score.toFixed(2)}) after deviations: ${X}. Reasoning: ${K.reasoning}`}async function s(K,Q){let{decision:X,config:Z,sessionID:$,directory:J,filesChanged:z}=K,q=new Date().toISOString();if(!Z.enabled)return{lessonSaved:null,decisionSaved:null,reason:"closed-loop learning disabled"};if(X.evidence.length===0&&X.action==="continue")return{lessonSaved:null,decisionSaved:null,reason:"no deviations to learn from"};let B=null,W=null;if(Z.saveDecisions){let G={id:AQ($,X.action,q),timestampISO:q,action:X.action,score:X.score,reasoning:X.reasoning,sessionID:$,directory:J,deviations:X.evidence.filter((w)=>w.source==="deviation-detector").map((w)=>({severity:"media",category:w.source,detail:w.value}))};try{await Q.saveMemory({content:`Decision: ${X.action} (score ${X.score.toFixed(2)}). ${X.reasoning}`,concepts:["meta-governor","decision",X.action],type:"fact",files:[...z]}),W=G}catch{}}let H=X.evidence.filter((G)=>G.source==="deviation-detector").map((G)=>({severity:"media",category:G.source,detail:G.value}));if(RK(H,Z.minSeverityToLearn)){let G=LQ(H),w=PQ(X,H);try{B={id:(await Q.saveLesson({content:w,context:`session:${$} dir:${J}`,confidence:Math.max(0.3,Math.min(0.8,Math.abs(X.score))),tags:G})).id,title:`${X.action} after ${H[0]?.category??"deviation"}`,content:w,type:"pattern",concepts:G,confidence:Math.max(0.3,Math.min(0.8,Math.abs(X.score))),files:[...z],sessionID:$}}catch{}}let U=[];if(W)U.push("decision saved");if(B)U.push("lesson saved");if(!W&&!B)if(!RK(H,Z.minSeverityToLearn))U.push("severity below threshold");else U.push("no saveable content");return{lessonSaved:B,decisionSaved:W,reason:U.join("; ")||"no action taken"}}function k(){return{enabled:!0,minSeverityToLearn:"media",maxLessonsPerSession:20,saveDecisions:!0}}var NK=()=>({enabled:!0,memory:{enabled:!0,query:"",timeoutMs:3000},tokenPredictor:{},scoring:{},decision:{},closedLoop:{},intervention:{mode:"silent",includeDecisionHistory:!0,maxHistoryMessages:5,minActionForMessage:"warn"},protocolEnforcement:{enabled:!1,path:void 0,injectIntoSystem:!1,auditToolCalls:!1}}),i={query:"",timestampISO:new Date().toISOString(),agentmemory:{available:!1,lessons:[]},magicContext:{available:!1,slots:[]},boulderState:{available:!1,tasks:[],planProgress:0},degradedSources:["agentmemory","magicContext","boulderState"]},MQ={consecutiveStops:0,consecutiveContinues:0,lastUpdatedISO:new Date().toISOString()},OQ={action:"continue",message:null,historyEntry:{decision:{action:"continue",score:0,reasoning:"no decision made",evidence:[],shouldEscalateTo:null},action:"continue",timestampISO:new Date().toISOString(),sessionID:"",reasoning:"no decision made"}};function EK(K,Q=i){let X=K.maxIterations>0?K.iteration/K.maxIterations:0,Z={...MQ,consecutiveStops:K.consecutiveStops??0};return{oracleVerified:K.oracleVerified,noProgress:K.noProgress,deviations:K.deviations,iterationRatio:X,lessonsRelevant:Q.agentmemory.lessons,slotMemory:Z,ambient:{sessionID:K.sessionID,directory:".",mode:"simple",agentName:K.agentName??"unknown",iteration:K.iteration,maxIterations:K.maxIterations}}}async function t(K,Q={}){let X={...NK(),...Q};if(!X.enabled)return{memoryRead:i,tokenPrediction:kK(K),scoringResult:{decision:{action:"continue",score:0,reasoning:"MetaGovernor disabled",evidence:[],shouldEscalateTo:null},contributions:[],rawScore:0,paralysisOverride:!1,computedAtISO:new Date().toISOString()},decision:OQ,lessonSaved:null,decisionHistory:[],skipped:!0,skipReason:"disabled"};let Z=i;if(X.memory.enabled)try{let W={agentmemory:K.backends.agentmemory,magicContext:K.backends.magicContext,boulderState:K.backends.boulderState};Z=await l({directory:".",sessionID:K.sessionID,query:X.memory.query||K.toolName},W)}catch{}let $;try{$=c({currentUsage:K.recentTurnTokens.reduce((W,H)=>W+H,0),modelLimit:K.modelLimit??Q.modelOverride?.modelLimit??200000,recentTurnTokens:K.recentTurnTokens,timestampISO:new Date().toISOString(),providerID:K.providerID??"",modelID:K.modelID??"",config:X.tokenPredictor})}catch{$=kK(K)}let J=r(EK(K,Z),X.scoring),z={sessionID:K.sessionID,scoringResult:J},q=n(z,X.decision),B=null;try{if(X.closedLoop.enabled!==!1)B=await s({decision:q.historyEntry.decision,memoryRead:Z,config:{...k(),...X.closedLoop},sessionID:K.sessionID,directory:".",filesChanged:[]},K.writeBackend)}catch{}return{memoryRead:Z,tokenPrediction:$,scoringResult:J,decision:q,lessonSaved:B,decisionHistory:[q.historyEntry],skipped:!1}}function kK(K){let Q=K.recentTurnTokens.reduce((X,Z)=>X+Z,0);return{burnRate:0,budgetLeft:200000,currentUsage:Q,modelLimit:200000,willOverflowAt:null,recommendation:"no-action",confidence:1,windowRemaining:200000,input:{currentUsage:Q,modelLimit:200000,recentTurnTokens:K.recentTurnTokens,timestampISO:new Date().toISOString(),providerID:K.providerID??"",modelID:K.modelID??"",config:{compactBurnRateThreshold:500,compactUsageThreshold:0.85,switchModelUsageThreshold:0.95,delegateConsecutiveHighBurn:5,windowSize:10}},computedAtISO:new Date().toISOString(),turnsAnalyzed:K.recentTurnTokens.length}}function v(K){let Q={enabled:!1,...K},X=I(),Z=S(),$=k();return{enabled:Q.enabled===!0,memory:{enabled:!0,query:Q.memory?.query??"meta_governor_context",timeoutMs:Q.memory?.agentmemoryTimeoutMs??2000},tokenPredictor:{compactBurnRateThreshold:Q.tokenPredictor?.compactBurnRateThreshold??500,compactUsageThreshold:Q.tokenPredictor?.compactUsageThreshold??0.85,switchModelUsageThreshold:Q.tokenPredictor?.switchModelUsageThreshold??0.95,delegateConsecutiveHighBurn:Q.tokenPredictor?.delegateConsecutiveHighBurn??5},scoring:{...X,...Q.scoring?.continueThreshold!==void 0?{continueThreshold:Q.scoring.continueThreshold}:{},...Q.scoring?.warnThreshold!==void 0?{warnThreshold:Q.scoring.warnThreshold}:{},...Q.scoring?.escalateThreshold!==void 0?{escalateThreshold:Q.scoring.escalateThreshold}:{},...Q.scoring?.stopThreshold!==void 0?{stopThreshold:Q.scoring.stopThreshold}:{}},closedLoop:{...$,...Q.closedLoop?.saveDecisions!==void 0?{saveDecisions:Q.closedLoop.saveDecisions}:{}},decision:{...Z,...Q.decision?.maxHistoryPerSession!==void 0?{maxHistoryPerSession:Q.decision.maxHistoryPerSession}:{},...Q.decision?.forceContinueAfterStops!==void 0?{forceContinueAfterStops:Q.decision.forceContinueAfterStops}:{}},modelOverride:Q.modelOverride?{providerID:Q.modelOverride.providerID,modelID:Q.modelOverride.modelID,modelLimit:Q.modelOverride.modelLimit,temperature:Q.modelOverride.temperature??0.2,topP:Q.modelOverride.topP??1,maxTokens:Q.modelOverride.maxTokens??2048,reasoning:Q.modelOverride.reasoning??!1,verbosity:Q.modelOverride.verbosity??"minimal"}:void 0,intervention:{mode:Q.intervention?.mode??"silent",includeDecisionHistory:Q.intervention?.includeDecisionHistory??!0,maxHistoryMessages:Q.intervention?.maxHistoryMessages??5,minActionForMessage:Q.intervention?.minActionForMessage??"warn"},protocolEnforcement:{enabled:Q.protocolEnforcement?.enabled??!1,path:Q.protocolEnforcement?.path,injectIntoSystem:Q.protocolEnforcement?.injectIntoSystem??!1,auditToolCalls:Q.protocolEnforcement?.auditToolCalls??!1}}}function TQ(K){return K?.enabled===!0}async function bQ(K={}){let{loadMetaGovernorConfig:Q}=await Promise.resolve().then(() => (XK(),CK)),X=await Q(K);return v(X.config)}var N=new Map;function ZK(K,Q){N.set(K,Q)}function $K(K){let Q=N.get(K);if(Q!==void 0)N.delete(K);return Q}function jQ(K){return N.has(K)}function JK(){for(let[K,Q]of N)return N.delete(K),Q;return}function yQ(){N.clear()}import{appendFileSync as CQ,mkdirSync as xQ}from"node:fs";import{resolve as IQ,dirname as DQ}from"node:path";import{homedir as SQ}from"node:os";var xK=IQ(SQ(),".config","opencode","meta-governor.log");function hQ(){try{xQ(DQ(xK),{recursive:!0})}catch{}}function b(K,Q,X){hQ();let Z=new Date().toISOString(),$=X!==void 0?` | ${JSON.stringify(X)}`:"",J=`[${Z}] [${K.toUpperCase()}] ${Q}${$}
|
|
11
|
-
`;try{
|
|
12
|
-
`)}function
|
|
10
|
+
`],{stdio:"ignore",detached:!0});else Z=FK("python3",["-m","graphify",".","--no-viz","--watch"],{cwd:K,stdio:"ignore",detached:!0});Z.unref(),y.set(X,{process:Z,tool:Q}),Z.on("exit",()=>{y.delete(X)})}catch{}}function XQ(K){for(let[Q,X]of y)if(!K||Q.startsWith(K)){try{X.process.kill("SIGTERM")}catch{}setTimeout(()=>{try{X.process.kill("SIGKILL")}catch{}},2000).unref(),y.delete(Q)}}async function u(K={enabled:!0,watch:!1,autoInstall:!0,installTimeoutMs:60000}){let Q=[],X=K.projectDir??process.cwd();if(!K.enabled)return{attempted:!1,codes:["disabled"],availability:{codegraph:!1,graphify:!1,codegraphIndexExists:!1,graphifyIndexExists:!1},alreadyInitialized:!1};if(d.has(X)){let $=await wK(X);return{attempted:!1,codes:$.codegraphIndexExists?["codegraph-already-exists"]:[],availability:$,alreadyInitialized:!0}}d.add(X);let Z;try{Z=await wK(X)}catch{return{attempted:!1,codes:["error"],availability:{codegraph:!1,graphify:!1,codegraphIndexExists:!1,graphifyIndexExists:!1},alreadyInitialized:!1}}if(K.autoInstall!==!1){if(!Z.codegraph){let $=await tK(X,K.installTimeoutMs??60000);if(Q.push($),$==="codegraph-installed")Z.codegraph=!0}if(!Z.graphify){let $=await oK(K.installTimeoutMs??60000);if(Q.push($),$==="graphify-installed")Z.graphify=!0}}else{if(!Z.codegraph)Q.push("codegraph-install-skipped");if(!Z.graphify)Q.push("graphify-install-skipped")}if(Z.codegraph)if(!Z.codegraphIndexExists)try{await KQ(X),Q.push("codegraph-initialized")}catch{Q.push("error")}else Q.push("codegraph-already-exists");else Q.push("codegraph-unavailable");if(Z.graphify)if(!Z.graphifyIndexExists)try{await QQ(X),Q.push("graphify-initialized")}catch{Q.push("error")}else Q.push("graphify-already-exists");else Q.push("graphify-unavailable");if(K.watch){if(Z.codegraph)AK(X,"codegraph"),Q.push("watch-started-codegraph");if(Z.graphify)AK(X,"graphify"),Q.push("watch-started-graphify")}return{attempted:!0,codes:Q,availability:Z,alreadyInitialized:!1}}async function LK(K){try{return(await sK(K)).isDirectory()}catch{return!1}}async function MK(K){try{await nK(K,iK.F_OK)}catch{let{mkdir:Q}=await import("node:fs/promises");await Q(K,{recursive:!0})}}var OK={limits:{maxLessons:10,maxSlots:20,maxTasks:10},timeouts:{agentmemoryMs:2000,magicContextMs:1000,boulderStateMs:1000}};async function r(K,Q){let X=performance.now(),Z={...OK.limits,...K.limits},$={...OK.timeouts,...K.timeouts},[J,q,B]=await Promise.allSettled([ZQ(K,Q.agentmemory,Z,$.agentmemoryMs),$Q(K,Q.magicContext,Z,$.magicContextMs),JQ(K,Q.boulderState,Z,$.boulderStateMs)]),V=[],W={},z=J.status==="fulfilled"?J.value:(a(V,W,"agentmemory",l(J.reason)),c.agentmemory),U=q.status==="fulfilled"?q.value:(a(V,W,"magicContext",l(q.reason)),c.magicContext),H=B.status==="fulfilled"?B.value:(a(V,W,"boulderState",l(B.reason)),c.boulderState);return{query:K.query,timestampISO:new Date().toISOString(),agentmemory:z,magicContext:U,boulderState:H,degradedSources:V,durationMs:performance.now()-X,errorMessages:W}}async function ZQ(K,Q,X,Z){let $=await n(Q.smartSearch({query:K.query,limit:X.maxLessons}),Z,"agentmemory");return{available:!0,lessons:qQ($.lessons).slice(0,X.maxLessons).map((q)=>({id:q.id,title:q.title,advice:"info",confidence:q.confidence,concepts:q.concepts}))}}async function $Q(K,Q,X,Z){return{available:!0,slots:(await n(Q.slotList({directory:K.directory}),Z,"magicContext")).filter((J)=>J.label.startsWith("meta_governor:")||zQ(J,K.query)).sort((J,q)=>J.label.localeCompare(q.label)).slice(0,X.maxSlots).map((J)=>({label:J.label,content:J.content}))}}async function JQ(K,Q,X,Z){let $=await n(Q.boulderRead({directory:K.directory,sessionID:K.sessionID,query:K.query}),Z,"boulderState");return{available:!0,tasks:$.sort((q,B)=>q.priority-B.priority||B.updatedAtMs-q.updatedAtMs).slice(0,X.maxTasks).map((q)=>({id:q.id,status:q.status,title:q.title})),planProgress:BQ($)}}function qQ(K){return[...K].sort((Q,X)=>X.confidence-Q.confidence)}function zQ(K,Q){let X=Q.toLowerCase();return K.label.toLowerCase().includes(X)||K.content.toLowerCase().includes(X)}function BQ(K){if(K.length===0)return 0;return K.filter((X)=>X.status==="done").length/K.length}function l(K){if(K instanceof Error)return K.message;if(typeof K==="string")return K;return"unknown error"}function a(K,Q,X,Z){K.push(X),Q[X]=Z}var c={agentmemory:{available:!1,lessons:[]},magicContext:{available:!1,slots:[]},boulderState:{available:!1,tasks:[],planProgress:0}};async function n(K,Q,X){return new Promise((Z,$)=>{let J=setTimeout(()=>$(Error(`${X} timeout after ${Q}ms`)),Q);K.then((q)=>{clearTimeout(J),Z(q)},(q)=>{clearTimeout(J),$(q)})})}function YQ(){return{compactBurnRateThreshold:500,compactUsageThreshold:0.85,switchModelUsageThreshold:0.95,delegateConsecutiveHighBurn:5,windowSize:10}}function RK(K){if(K.length===0)return 0;return K.reduce((X,Z)=>X+Z,0)/K.length}function VQ(K,Q){let X=0;for(let Z=K.length-1;Z>=0;Z--)if(K[Z]>=Q)X++;else break;return X}function WQ(K,Q,X,Z){let $=Q-K;if($<=0)return Z;if(X<=0)return null;let J=Math.floor($/X);if(J<=0)return Z;let q=J*2;return new Date(new Date(Z).getTime()+q*1000).toISOString()}function s(K){let{currentUsage:Q,modelLimit:X,recentTurnTokens:Z,timestampISO:$,config:J}=K,q=Z.slice(-J.windowSize),B=RK(q),V=X-Q,W=X>0?Q/X:1,z=Math.min(0.95,0.3+q.length/J.windowSize*0.65),U="no-action",H="within normal parameters";if(W>=J.switchModelUsageThreshold)U="switch-model",H=`context usage ${(W*100).toFixed(1)}% exceeds switch threshold ${(J.switchModelUsageThreshold*100).toFixed(1)}%`;if(W>=J.compactUsageThreshold||B>=J.compactBurnRateThreshold){if(U==="no-action")U="compact-now",H=W>=J.compactUsageThreshold?`context usage ${(W*100).toFixed(1)}% exceeds compact threshold ${(J.compactUsageThreshold*100).toFixed(1)}%`:`burn rate ${B.toFixed(0)} tokens/turn exceeds threshold ${J.compactBurnRateThreshold}`}let w=VQ(q,J.compactBurnRateThreshold);if(w>=J.delegateConsecutiveHighBurn&&U==="no-action")U="delegate-to-subagent",H=`${w} consecutive high-burn turns (threshold: ${J.delegateConsecutiveHighBurn})`;let _=WQ(Q,X,B,$);return{currentUsage:Q,burnRate:B,budgetLeft:V,willOverflowAt:_,recommendation:U,confidence:z,modelLimit:X,windowRemaining:Math.max(0,Math.floor(V/Math.max(B,1))),input:{...K},computedAtISO:$,turnsAnalyzed:q.length}}var O={"oracle-verified":0.25,"no-progress-detector":0.2,"deviation-detector":0.2,"iteration-budget":0.15,"lesson-recall":0.1,"token-predictor":0.1},S=()=>({continueThreshold:0.3,warnThreshold:0.3,escalateThreshold:0.6,stopThreshold:0.8,paralysisThreshold:3,defaultEscalationTarget:"oracle"});function UQ(K){let Q=[];Q.push({source:"oracle-verified",rawScore:K.oracleVerified?0.6:0,weight:O["oracle-verified"],weightedScore:K.oracleVerified?0.6*O["oracle-verified"]:0,description:K.oracleVerified?"Oracle verification passed":"No Oracle verification"}),Q.push({source:"no-progress-detector",rawScore:K.noProgress?-0.8:0,weight:O["no-progress-detector"],weightedScore:K.noProgress?-0.8*O["no-progress-detector"]:0,description:K.noProgress?"No progress detected in last turn":"Progress detected"});let X=HQ(K.deviations);Q.push({source:"deviation-detector",rawScore:X,weight:O["deviation-detector"],weightedScore:X*O["deviation-detector"],description:K.deviations.length>0?`${K.deviations.length} deviation(s) detected (worst: ${K.deviations[0].severity})`:"No deviations detected"});let Z=GQ(K.iterationRatio);Q.push({source:"iteration-budget",rawScore:Z,weight:O["iteration-budget"],weightedScore:Z*O["iteration-budget"],description:`Iteration ratio: ${K.iterationRatio.toFixed(2)} (${K.ambient.iteration}/${K.ambient.maxIterations})`});let $=FQ(K.lessonsRelevant);return Q.push({source:"lesson-recall",rawScore:$,weight:O["lesson-recall"],weightedScore:$*O["lesson-recall"],description:K.lessonsRelevant.length>0?`${K.lessonsRelevant.length} relevant lesson(s) (avg confidence: ${_Q(K.lessonsRelevant).toFixed(2)})`:"No relevant lessons"}),Q}function HQ(K){if(K.length===0)return 0;let Q={grave:-0.9,media:-0.5,leve:-0.2},X=0;for(let $ of K){let J=Q[$.severity]??-0.3;if(J<X)X=J}let Z=Math.min(K.length*0.05,0.2);return Math.max(X-Z,-1)}function GQ(K){if(K<=0.5)return-K*0.6;return-0.3-(K-0.5)*1}function FQ(K){if(K.length===0)return 0;let Q=0;for(let X of K)Q+=({continue:0.3,info:0,warn:-0.3,stop:-0.7}[X.advice]??0)*X.confidence;return Math.max(Math.min(Q/K.length,1),-1)}function _Q(K){if(K.length===0)return 0;return K.reduce((Q,X)=>Q+X.confidence,0)/K.length}function wQ(K,Q){if(K>=Q.continueThreshold)return"continue";if(K<=-Q.stopThreshold)return"stop";if(K<=-Q.escalateThreshold)return"escalate";if(K<=-Q.warnThreshold)return"warn";return"continue"}function AQ(K,Q){if(!K.oracleVerified)return"oracle";if(K.deviations.some((X)=>X.severity==="grave"))return"user";return Q.defaultEscalationTarget}function kK(K,Q,X,Z){if(Z)return`Paralysis detected: forced continue despite score ${K.toFixed(3)} (too many consecutive stops)`;let $=[...X].sort((W,z)=>W.weightedScore-z.weightedScore),J=$[0],q=$[$.length-1],B=[];if(J.weightedScore<0)B.push(`primary concern: ${J.description}`);if(q.weightedScore>0)B.push(`positive signal: ${q.description}`);return`${{continue:"Continue",warn:"Warn",escalate:"Escalate",stop:"Stop"}[Q]} (score: ${K.toFixed(3)}): ${B.join("; ")||"balanced signals"}`}function i(K,Q){let X={...S(),...Q},Z=UQ(K),$=Z.reduce((U,H)=>U+H.weightedScore,0),J=Math.max(Math.min($,1),-1),q=K.slotMemory.consecutiveStops>=X.paralysisThreshold&&J<=-X.warnThreshold,B=q?"continue":wQ(J,X),V=[];if(B!=="continue"||Math.abs(J)<X.continueThreshold){for(let U of Z)if(Math.abs(U.weightedScore)>0.01)V.push({source:U.source,value:U.description,confidence:Math.abs(U.rawScore),weight:U.weight});if(V.length===0&&B!=="continue")V.push({source:"ambient",value:kK(J,B,Z,q),confidence:0.5,weight:0.1})}let W=B==="escalate"?AQ(K,X):null;return{decision:{action:B,score:J,reasoning:kK(J,B,Z,q),evidence:V,shouldEscalateTo:W},contributions:Z,rawScore:J,paralysisOverride:q,computedAtISO:new Date().toISOString()}}var v=()=>({enabled:!0,maxHistoryPerSession:50,forceContinueAfterStops:3,warnMessageTemplate:"[MetaGovernor] Score {score}: {reasoning}. Evidence: {evidenceCount} signal(s).",escalateMessageTemplate:"[MetaGovernor] Escalating to {target}: {reasoning}",stopMessageTemplate:"[MetaGovernor] STOP — {reasoning}. Evidence: {evidenceCount} signal(s)."});function h(K,Q){let X=K;for(let[Z,$]of Object.entries(Q))X=X.replaceAll(`{${Z}}`,$);return X}function LQ(K){return K.length}function t(K,Q){let X={...v(),...Q};if(!X.enabled)return{action:"continue",message:null,historyEntry:{decision:K.scoringResult.decision,action:"continue",timestampISO:new Date().toISOString(),sessionID:K.sessionID,reasoning:"Decision handler disabled — pass-through continue"}};let Z=K.scoringResult.decision,$=Z.score,J=Z.reasoning,q=LQ(Z.evidence),B=Z.shouldEscalateTo??X.defaultEscalationTarget??"oracle";if(K.scoringResult.paralysisOverride)return{action:"continue",message:h(X.warnMessageTemplate,{score:$.toFixed(3),reasoning:`Paralysis detected — forced continue. ${J}`,evidenceCount:String(q)}),historyEntry:{decision:Z,action:"continue",timestampISO:new Date().toISOString(),sessionID:K.sessionID,reasoning:`Paralysis override: ${J}`}};switch(Z.action){case"continue":return{action:"continue",message:null,historyEntry:{decision:Z,action:"continue",timestampISO:new Date().toISOString(),sessionID:K.sessionID,reasoning:J}};case"warn":return{action:"warn",message:h(X.warnMessageTemplate,{score:$.toFixed(3),reasoning:J,evidenceCount:String(q)}),historyEntry:{decision:Z,action:"warn",timestampISO:new Date().toISOString(),sessionID:K.sessionID,reasoning:J}};case"escalate":return{action:"escalate",message:h(X.escalateMessageTemplate,{target:B,reasoning:J}),historyEntry:{decision:Z,action:"escalate",timestampISO:new Date().toISOString(),sessionID:K.sessionID,reasoning:`Escalate to ${B}: ${J}`}};case"stop":return{action:"stop",message:h(X.stopMessageTemplate,{reasoning:J,evidenceCount:String(q)}),historyEntry:{decision:Z,action:"stop",timestampISO:new Date().toISOString(),sessionID:K.sessionID,reasoning:J}}}}function PQ(K,Q){if(K.length<=Q)return{trimmed:[...K],dropped:0};let X=K.length-Q;return{trimmed:K.slice(-Q),dropped:X}}function MQ(K){let Q=0;for(let X=K.length-1;X>=0;X--)if(K[X].action==="stop")Q++;else break;return Q}var NK={leve:0,media:1,grave:2};function OQ(K,Q,X){let Z=`${K}-${Q}-${X}`.split("").reduce(($,J)=>($<<5)-$+J.charCodeAt(0)|0,0);return`D-${Math.abs(Z).toString(36)}`}function EK(K,Q){let X=NK[Q]??0;return K.some((Z)=>(NK[Z.severity]??0)>=X)}function RQ(K){let Q=new Set;for(let X of K)Q.add(X.category),Q.add(X.severity);return[...Q]}function kQ(K,Q){let X=Q.map((Z)=>`[${Z.severity}] ${Z.category}: ${Z.detail}`).join("; ");return`Action "${K.action}" (score ${K.score.toFixed(2)}) after deviations: ${X}. Reasoning: ${K.reasoning}`}async function o(K,Q){let{decision:X,config:Z,sessionID:$,directory:J,filesChanged:q}=K,B=new Date().toISOString();if(!Z.enabled)return{lessonSaved:null,decisionSaved:null,reason:"closed-loop learning disabled"};if(X.evidence.length===0&&X.action==="continue")return{lessonSaved:null,decisionSaved:null,reason:"no deviations to learn from"};let V=null,W=null;if(Z.saveDecisions){let H={id:OQ($,X.action,B),timestampISO:B,action:X.action,score:X.score,reasoning:X.reasoning,sessionID:$,directory:J,deviations:X.evidence.filter((w)=>w.source==="deviation-detector").map((w)=>({severity:"media",category:w.source,detail:w.value}))};try{await Q.saveMemory({content:`Decision: ${X.action} (score ${X.score.toFixed(2)}). ${X.reasoning}`,concepts:["meta-governor","decision",X.action],type:"fact",files:[...q]}),W=H}catch{}}let z=X.evidence.filter((H)=>H.source==="deviation-detector").map((H)=>({severity:"media",category:H.source,detail:H.value}));if(EK(z,Z.minSeverityToLearn)){let H=RQ(z),w=kQ(X,z);try{V={id:(await Q.saveLesson({content:w,context:`session:${$} dir:${J}`,confidence:Math.max(0.3,Math.min(0.8,Math.abs(X.score))),tags:H})).id,title:`${X.action} after ${z[0]?.category??"deviation"}`,content:w,type:"pattern",concepts:H,confidence:Math.max(0.3,Math.min(0.8,Math.abs(X.score))),files:[...q],sessionID:$}}catch{}}let U=[];if(W)U.push("decision saved");if(V)U.push("lesson saved");if(!W&&!V)if(!EK(z,Z.minSeverityToLearn))U.push("severity below threshold");else U.push("no saveable content");return{lessonSaved:V,decisionSaved:W,reason:U.join("; ")||"no action taken"}}function N(){return{enabled:!0,minSeverityToLearn:"media",maxLessonsPerSession:20,saveDecisions:!0}}var bK=()=>({enabled:!0,memory:{enabled:!0,query:"",timeoutMs:3000},tokenPredictor:{},scoring:{},decision:{},closedLoop:{},intervention:{mode:"silent",includeDecisionHistory:!0,maxHistoryMessages:5,minActionForMessage:"warn"},protocolEnforcement:{enabled:!1,path:void 0,injectIntoSystem:!1,auditToolCalls:!1}}),e={query:"",timestampISO:new Date().toISOString(),agentmemory:{available:!1,lessons:[]},magicContext:{available:!1,slots:[]},boulderState:{available:!1,tasks:[],planProgress:0},degradedSources:["agentmemory","magicContext","boulderState"]},NQ={consecutiveStops:0,consecutiveContinues:0,lastUpdatedISO:new Date().toISOString()},EQ={action:"continue",message:null,historyEntry:{decision:{action:"continue",score:0,reasoning:"no decision made",evidence:[],shouldEscalateTo:null},action:"continue",timestampISO:new Date().toISOString(),sessionID:"",reasoning:"no decision made"}};function jK(K,Q=e){let X=K.maxIterations>0?K.iteration/K.maxIterations:0,Z={...NQ,consecutiveStops:K.consecutiveStops??0};return{oracleVerified:K.oracleVerified,noProgress:K.noProgress,deviations:K.deviations,iterationRatio:X,lessonsRelevant:Q.agentmemory.lessons,slotMemory:Z,ambient:{sessionID:K.sessionID,directory:".",mode:"simple",agentName:K.agentName??"unknown",iteration:K.iteration,maxIterations:K.maxIterations}}}async function KK(K,Q={}){let X={...bK(),...Q};if(!X.enabled)return{memoryRead:e,tokenPrediction:TK(K),scoringResult:{decision:{action:"continue",score:0,reasoning:"MetaGovernor disabled",evidence:[],shouldEscalateTo:null},contributions:[],rawScore:0,paralysisOverride:!1,computedAtISO:new Date().toISOString()},decision:EQ,lessonSaved:null,decisionHistory:[],skipped:!0,skipReason:"disabled"};let Z=e;if(X.memory.enabled)try{let W={agentmemory:K.backends.agentmemory,magicContext:K.backends.magicContext,boulderState:K.backends.boulderState};Z=await r({directory:".",sessionID:K.sessionID,query:X.memory.query||K.toolName},W)}catch{}let $;try{$=s({currentUsage:K.recentTurnTokens.reduce((W,z)=>W+z,0),modelLimit:K.modelLimit??Q.modelOverride?.modelLimit??200000,recentTurnTokens:K.recentTurnTokens,timestampISO:new Date().toISOString(),providerID:K.providerID??"",modelID:K.modelID??"",config:X.tokenPredictor})}catch{$=TK(K)}let J=i(jK(K,Z),X.scoring),q={sessionID:K.sessionID,scoringResult:J},B=t(q,X.decision),V=null;try{if(X.closedLoop.enabled!==!1)V=await o({decision:B.historyEntry.decision,memoryRead:Z,config:{...N(),...X.closedLoop},sessionID:K.sessionID,directory:".",filesChanged:[]},K.writeBackend)}catch{}return{memoryRead:Z,tokenPrediction:$,scoringResult:J,decision:B,lessonSaved:V,decisionHistory:[B.historyEntry],skipped:!1}}function TK(K){let Q=K.recentTurnTokens.reduce((X,Z)=>X+Z,0);return{burnRate:0,budgetLeft:200000,currentUsage:Q,modelLimit:200000,willOverflowAt:null,recommendation:"no-action",confidence:1,windowRemaining:200000,input:{currentUsage:Q,modelLimit:200000,recentTurnTokens:K.recentTurnTokens,timestampISO:new Date().toISOString(),providerID:K.providerID??"",modelID:K.modelID??"",config:{compactBurnRateThreshold:500,compactUsageThreshold:0.85,switchModelUsageThreshold:0.95,delegateConsecutiveHighBurn:5,windowSize:10}},computedAtISO:new Date().toISOString(),turnsAnalyzed:K.recentTurnTokens.length}}function m(K){let Q={enabled:!1,...K},X=S(),Z=v(),$=N();return{enabled:Q.enabled===!0,memory:{enabled:!0,query:Q.memory?.query??"meta_governor_context",timeoutMs:Q.memory?.agentmemoryTimeoutMs??2000},tokenPredictor:{compactBurnRateThreshold:Q.tokenPredictor?.compactBurnRateThreshold??500,compactUsageThreshold:Q.tokenPredictor?.compactUsageThreshold??0.85,switchModelUsageThreshold:Q.tokenPredictor?.switchModelUsageThreshold??0.95,delegateConsecutiveHighBurn:Q.tokenPredictor?.delegateConsecutiveHighBurn??5},scoring:{...X,...Q.scoring?.continueThreshold!==void 0?{continueThreshold:Q.scoring.continueThreshold}:{},...Q.scoring?.warnThreshold!==void 0?{warnThreshold:Q.scoring.warnThreshold}:{},...Q.scoring?.escalateThreshold!==void 0?{escalateThreshold:Q.scoring.escalateThreshold}:{},...Q.scoring?.stopThreshold!==void 0?{stopThreshold:Q.scoring.stopThreshold}:{}},closedLoop:{...$,...Q.closedLoop?.saveDecisions!==void 0?{saveDecisions:Q.closedLoop.saveDecisions}:{}},decision:{...Z,...Q.decision?.maxHistoryPerSession!==void 0?{maxHistoryPerSession:Q.decision.maxHistoryPerSession}:{},...Q.decision?.forceContinueAfterStops!==void 0?{forceContinueAfterStops:Q.decision.forceContinueAfterStops}:{}},modelOverride:Q.modelOverride?{providerID:Q.modelOverride.providerID,modelID:Q.modelOverride.modelID,modelLimit:Q.modelOverride.modelLimit,temperature:Q.modelOverride.temperature??0.2,topP:Q.modelOverride.topP??1,maxTokens:Q.modelOverride.maxTokens??2048,reasoning:Q.modelOverride.reasoning??!1,verbosity:Q.modelOverride.verbosity??"minimal"}:void 0,intervention:{mode:Q.intervention?.mode??"silent",includeDecisionHistory:Q.intervention?.includeDecisionHistory??!0,maxHistoryMessages:Q.intervention?.maxHistoryMessages??5,minActionForMessage:Q.intervention?.minActionForMessage??"warn"},protocolEnforcement:{enabled:Q.protocolEnforcement?.enabled??!1,path:Q.protocolEnforcement?.path,injectIntoSystem:Q.protocolEnforcement?.injectIntoSystem??!1,auditToolCalls:Q.protocolEnforcement?.auditToolCalls??!1}}}function yQ(K){return K?.enabled===!0}async function xQ(K={}){let{loadMetaGovernorConfig:Q}=await Promise.resolve().then(() => (JK(),DK)),X=await Q(K);return m(X.config)}var E=new Map;function qK(K,Q){E.set(K,Q)}function zK(K){let Q=E.get(K);if(Q!==void 0)E.delete(K);return Q}function IQ(K){return E.has(K)}function BK(){for(let[K,Q]of E)return E.delete(K),Q;return}function DQ(){E.clear()}import{appendFileSync as SQ,mkdirSync as hQ}from"node:fs";import{resolve as vQ,dirname as fQ}from"node:path";import{homedir as mQ}from"node:os";var SK=vQ(mQ(),".config","opencode","meta-governor.log");function gQ(){try{hQ(fQ(SK),{recursive:!0})}catch{}}function j(K,Q,X){gQ();let Z=new Date().toISOString(),$=X!==void 0?` | ${JSON.stringify(X)}`:"",J=`[${Z}] [${K.toUpperCase()}] ${Q}${$}
|
|
11
|
+
`;try{SQ(SK,J)}catch{}if(K==="error")console.error(`[meta-governor] ${Q}`);else if(K==="warn")console.warn(`[meta-governor] ${Q}`);else console.log(`[meta-governor] ${Q}`)}import{statSync as hK}from"node:fs";import{readFile as pQ}from"node:fs/promises";import{resolve as dQ}from"node:path";import{homedir as uQ}from"node:os";var g=dQ(uQ(),".config","opencode","sisyphus-mandatory","sisyphus-mandatory.md");async function YK(K){return await pQ(K??g,"utf-8")}function VK(K){let Q=["","## Sisyphus Protocol Enforcement","","You MUST follow these Sisyphus protocol rules:","","1. **Pre-response Memory Check**: Before any action, read `<project-memory>` and `<session-history-since>` blocks in context. Cite `<memory id>` for any fact used from memory. Do not ask questions whose answers are in those blocks.","","2. **Codebase Graph First**: Before using grep/glob/read for architecture or symbol queries, check whether `.codegraph/` or `graphify-out/` exists. If so, use codegraph/graphify tools first. Fall back to AFT (aft_zoom, aft_outline), then grep/read only as last resort.","","3. **Tool Routing Table**: Match common intents to the correct tool:",' - "we did this before" / "you should know" → `agentmemory_memory_recall`',' - "the usual" / "as configured" → `ctx_memory(action="list")`'," - Starting a task that resembles a previous one → `agentmemory_memory_smart_search`",' - "what changed" / "history" → `ctx_search`'," - Before asking the user a clarifying question → `agentmemory_memory_recall` first"," - Working note for THIS session only → `ctx_note`"," - Save durable insight/decision/rule → `ctx_memory`",""];if(/\boracle\b/i.test(K))Q.push("4. **Post-task Oracle Verification**: If files touched >= 3 OR any INVOKE trigger matches, invoke Oracle with the exact format:",' `task(subagent_type="oracle", run_in_background=false, prompt="Verify: ...")`'," - INVOKE triggers: created 1+ new file, modified abstraction, touched security/auth paths, modified DB/persistence, modified CI/CD, added/removed dependency, modified perf-critical path, todo had 2+ completed items."," - SKIP only when: files touched <= 2, no new file, no dependency change, single-step task, change is typo/comment/rename only."," - Verdict: PASS → done. FAIL/CONDITIONAL → fix and re-invoke. Max 3 invocations."," - Cost: Max 3 oracle invocations per task. Skip rate: Must NOT skip Oracle on 2+ file change.","");return Q.push("5. **Parallel Query Rule**: Fire independent tool queries in the same turn. Do NOT serialize independent memory/context queries.","","6. **Empty-Result Escalation**: On empty `agentmemory_memory_recall`, fire `agentmemory_memory_smart_search` + `ctx_search` + `agentmemory_memory_export` before asking the user.","","7. **Hard Rules (No Exceptions)**:"," - Do NOT ask 'where is X?' if memory or session record already contains it."," - Do NOT claim 'I don't know' before firing at least 2 different recall tools."," - Do NOT re-issue clarifying questions whose answer is in `<project-memory>` or `<session-history-since>`."," - Do NOT use grep/find when aft_outline would answer the structure question."," - Do NOT duplicate a memory in both `agentmemory_memory_save` and `ctx_memory` — pick ONE."," - Do NOT suppress type errors with `as any`, `@ts-ignore`, or `@ts-expect-error`."," - Do NOT leave empty catch blocks `catch(e) {}`.",' - Do NOT start a fresh agent via `task()` when `task(task_id="ses_...")` (continuation) exists — use continuation IDs.'," - Do NOT batch-complete todos — mark each one `completed` immediately after finishing."," - Do NOT skip creating todos for multi-step tasks.","","8. **Self-Check Before Responding**:"," - Verify you read `<project-memory>` and `<session-history-since>` blocks."," - Verify you cited `<memory id>` for any fact used from memory."," - Verify you did not ask a question whose answer is in those blocks."," - For multi-file changes, verify Oracle was invoked."," - For codebase exploration, verify codegraph/graphify was tried before grep/read."," - After discovering something non-obvious, save it with `ctx_memory` so future sessions benefit.",""),Q.join(`
|
|
12
|
+
`)}function WK(K,Q,X){let Z=[],$=X.recentToolCalls??[],J=X.aftAvailable??!1,q=X.aftUsed??!1,B=X.recentWriteContents??[],V=X.memorySaved??!1,W=X.batchCompletions??0;if((K==="grep"||K==="glob")&&(X.hasCodegraphDir||X.hasGraphifyDir)){let _=X.hasCodegraphDir?".codegraph":"graphify-out";Z.push({rule:"codebase-graph-first",tool:K,severity:"media",detail:`Used ${K} when ${_} exists — should use codegraph/graphify first for architecture and symbol queries.`})}if((K==="read"||K==="grep")&&J&&!q)Z.push({rule:"aft-first",tool:K,severity:"media",detail:`AFT tools (aft_outline, aft_zoom) are available but were not tried before using ${K}. Use aft_outline for structure discovery, aft_zoom for symbol source, before falling back to grep/read.`});if(K==="grep"&&J&&!q&&!X.hasCodegraphDir&&!X.hasGraphifyDir)Z.push({rule:"grep-without-aft",tool:K,severity:"leve",detail:"Used grep before checking if aft_outline would answer the structure question. grep is a last resort after graph tools and AFT."});if(K==="task"&&Q&&typeof Q==="object"){let _=Q;if(!_.task_id&&typeof _.prompt==="string"&&$.length>3)Z.push({rule:"continuation-discipline",tool:K,severity:"leve",detail:`Started a new task() without task(task_id="ses_...") continuation ID. Use task_id to preserve the subagent's full context and save tokens.`})}let z=["write","edit","edit_block","desktop-commander_edit_block","desktop-commander_write_file"];if(z.includes(K)){let _=typeof Q==="object"&&Q!==null?JSON.stringify(Q):String(Q??""),L=/@ts-ignore|@ts-expect-error/.test(_),P=/\bas any\b/.test(_);if(L&&P)Z.push({rule:"no-type-suppression",tool:K,severity:"grave",detail:"File write contains both @ts-ignore/@ts-expect-error AND 'as any' — double type suppression. "+"Both are forbidden by the Sisyphus protocol."});else if(L)Z.push({rule:"no-type-suppression",tool:K,severity:"media",detail:"File write contains @ts-ignore or @ts-expect-error — both are forbidden. "+"Fix the underlying type error instead."});else if(P)Z.push({rule:"no-type-suppression",tool:K,severity:"media",detail:"File write contains 'as any' — type suppression forbidden. "+"Use proper type narrowing instead."})}if(z.includes(K)){let _=typeof Q==="object"&&Q!==null?JSON.stringify(Q):String(Q??"");if(/catch\s*\(\s*\w+\s*\)\s*\{\s*\}/.test(_))Z.push({rule:"no-empty-catch",tool:K,severity:"media",detail:"Empty catch block detected — `catch(e) {}` is forbidden. "+"Log the error or handle it gracefully."})}if(["grep","glob","read","aft_zoom","aft_outline","codegraph_explore","graphify query"].includes(K)&&$.length>=2){if(!$.slice(0,5).some((L)=>L.startsWith("ctx_memory"))&&!V)Z.push({rule:"save-discovery-to-memory",tool:K,severity:"leve",detail:`Used ${K} to discover code but ctx_memory was not used afterwards. Save non-obvious findings with ctx_memory so future sessions benefit.`})}if(W>0&&K!=="todowrite")Z.push({rule:"no-batch-todo-completion",tool:K,severity:"leve",detail:"Batch todo completion detected. Each todo must be marked `completed` immediately "+"after finishing — do not batch-complete multiple items."});if(K==="ctx_reduce"&&Q&&typeof Q==="object"){let _=Q.drop;if(typeof _==="string"&&/^\d+-\d+$/i.test(_.trim())){let[L,P]=_.trim().split("-").map(Number);if(!isNaN(L)&&!isNaN(P)&&P-L>10)Z.push({rule:"ctx-reduce-discipline",tool:K,severity:"leve",detail:`Dropped a large range (${_}) with ctx_reduce. The protocol requires reviewing each tag before dropping. Use smaller targeted drops instead of blanket ranges.`})}}if(X.emptyRecall&&!X.escalationAttempted){if(K.startsWith("question")||K==="ask")Z.push({rule:"empty-result-escalation",tool:K,severity:"grave",detail:"Memory recall returned empty but agent did not fire smart_search + ctx_search + export before asking the user. Steps 1-3 of empty-result escalation protocol are mandatory."})}let H=["agentmemory_memory_recall","agentmemory_memory_smart_search","agentmemory_memory_save","ctx_memory","ctx_search","ctx_note"];if(!X.memoryToolsUsed.some((_)=>H.some((L)=>_.startsWith(L)))&&(K.startsWith("question")||K==="ask"))Z.push({rule:"memory-first",tool:K,severity:"grave",detail:"Asked a question without first querying memory (agentmemory or ctx_memory). Must fire agentmemory_memory_recall or ctx_memory before asking the user."});if(X.filesChanged>=3&&!X.oracleInvoked){if(K!=="task"||!Q||typeof Q!=="object"||!("subagent_type"in Q))Z.push({rule:"oracle-verification",tool:K,severity:"media",detail:`Files changed (${X.filesChanged}) >= 3 but Oracle was not invoked. The POST-TASK ORACLE VERIFICATION protocol requires Oracle invocation on multi-file changes.`})}return Z}var vK={continue:0,warn:1,escalate:2,stop:3};function UK(K,Q){return vK[K]>=vK[Q]}function HK(K={},Q={}){let X=process.cwd(),Z=(()=>{try{return hK(`${X}/.codegraph`).isDirectory()}catch{return!1}})(),$=(()=>{try{return hK(`${X}/graphify-out`).isDirectory()}catch{return!1}})();if(K.graphSync?.enabled!==!1)u({enabled:!0,watch:K.graphSync?.watch??!1,autoInstall:K.graphSync?.autoInstall??!0,installTimeoutMs:K.graphSync?.installTimeoutMs??60000,projectDir:X}).catch(()=>{}),PK(X);return j("info","MetaGovernor plugin loaded",{version:"0.9.3",cwd:X,projectHasCodegraph:Z,projectHasGraphify:$}),async(B,V)=>{let W={...K,...V?.meta_governor??{}},z=m(W);if(!z.enabled)return{};let U=()=>z.modelOverride?.providerID??Q.providerID?.(),H=()=>z.modelOverride?.modelID??Q.modelID?.(),w=()=>z.modelOverride?.modelLimit??200000,_=U()??"unknown",L=H()??"unknown",P;if(z.protocolEnforcement.enabled||z.protocolEnforcement.injectIntoSystem){let G=z.protocolEnforcement.path??g;YK(G).then((Y)=>{P=VK(Y)}).catch((Y)=>{if(typeof console<"u"&&z.modelOverride?.verbosity!=="silent")console.warn("[meta-governor] could not load protocol:",Y instanceof Error?Y.message:Y)})}let p=new Map,C=new Map;return{"tool.execute.before":async(G)=>{if(!z.enabled)return;if(!z.protocolEnforcement.auditToolCalls)return;if(!G.sessionID)return;let Y=p.get(G.sessionID);if(!Y)Y={memoryToolsUsed:[],hasCodegraphDir:Z,hasGraphifyDir:$,oracleInvoked:!1,filesChanged:0,emptyRecall:!1,escalationAttempted:!1,aftAvailable:!1,aftUsed:!1,recentToolCalls:[],recentWriteContents:[],memorySaved:!1,batchCompletions:0},p.set(G.sessionID,Y);if(P)console.log("[meta-governor] protocol loaded, system injection ready");let F=WK(G.tool,{},{memoryToolsUsed:Y.memoryToolsUsed,hasCodegraphDir:Y.hasCodegraphDir,hasGraphifyDir:Y.hasGraphifyDir,oracleInvoked:Y.oracleInvoked,filesChanged:Y.filesChanged,emptyRecall:Y.emptyRecall,escalationAttempted:Y.escalationAttempted,aftAvailable:Y.aftAvailable,aftUsed:Y.aftUsed,recentToolCalls:Y.recentToolCalls,recentWriteContents:Y.recentWriteContents,memorySaved:Y.memorySaved,batchCompletions:Y.batchCompletions});if(F.length>0){j("warn",`protocol violations on tool ${G.tool}`,F);let R=C.get(G.sessionID)??[];for(let A of F)R.push(`[${A.severity.toUpperCase()}] ${A.rule}: ${A.detail}`);C.set(G.sessionID,R)}else j("info",`audit OK on tool ${G.tool}`)},"tool.execute.after":async(G,Y)=>{if(!z.enabled)return;let F=p.get(G.sessionID);if(F){if(F.recentToolCalls=[G.tool].concat(F.recentToolCalls).slice(0,20),["write","edit","edit_block","desktop-commander_write_file","desktop-commander_edit_block"].includes(G.tool)){F.filesChanged++;let k=(Y.output??"").slice(0,500);F.recentWriteContents=[k].concat(F.recentWriteContents).slice(0,3)}if(["agentmemory_memory_recall","agentmemory_memory_smart_search","agentmemory_memory_save","ctx_memory","ctx_search","ctx_note"].some((k)=>G.tool.startsWith(k))&&!F.memoryToolsUsed.includes(G.tool))F.memoryToolsUsed.push(G.tool);if(G.tool.startsWith("ctx_memory")){let k=Y.output??"";if(k.includes("saved")||k.includes("written"))F.memorySaved=!0}if(G.tool.startsWith("aft_zoom")||G.tool.startsWith("aft_outline"))F.aftUsed=!0;if(G.tool==="task"&&(Y.output??"").includes("subagent_type=oracle"))F.oracleInvoked=!0;let I=(Y.output??"").toLowerCase();if(G.tool.includes("recall")&&(I.includes("returned empty")||I.includes("no results")))F.emptyRecall=!0;if(G.tool==="todowrite"&&(Y.output??"").includes("completed")){if(((Y.output??"").match(/"status":"completed"/g)??[]).length>=3)F.batchCompletions++}}let R={sessionID:G.sessionID,toolName:G.tool,toolOutput:Y.output,iteration:0,maxIterations:10,oracleVerified:!1,noProgress:!1,filesChanged:0,recentTurnTokens:[],deviations:[],backends:Q.backends??{agentmemory:{smartSearch:async()=>({lessons:[],crystals:[]})},magicContext:{slotList:async()=>[]},boulderState:{boulderRead:async()=>[]}},writeBackend:Q.writeBackend??{saveMemory:async()=>({id:""}),saveLesson:async()=>({id:""})},config:z,...U()?{providerID:U()}:{},...H()?{modelID:H()}:{},modelLimit:w()};try{let A=await KK(R);if(z.intervention.mode!=="silent"){let T=A.decision;if(T.action!=="continue"&&UK(T.action,z.intervention.minActionForMessage))qK(G.sessionID,T)}}catch{}},"experimental.chat.messages.transform":async(G,Y)=>{if(!z.enabled)return;if(z.intervention.mode!=="message")return;let R=Y.messages[Y.messages.length-1]?.info?.sessionID;if(R&&C.has(R)){let x=C.get(R);if(x.length>0){let I=`[META-GOVERNOR PROTOCOL VIOLATIONS - YOU MUST COMPLY]
|
|
13
13
|
|
|
14
|
-
${
|
|
14
|
+
${x.map((k,pK)=>`${pK+1}. ${k}`).join(`
|
|
15
15
|
`)}
|
|
16
16
|
|
|
17
|
-
Remember: use codegraph/graphify for architecture queries, do not grep without trying AFT/codegraph first, no @ts-ignore/as-any, no empty catch, check memory before asking.`;Y.messages.push({info:{role:"user",agent:"meta-governor",synthetic:!0},parts:[{type:"text",text:
|
|
18
|
-
### Sisyphus Protocol Enforcement`,
|
|
19
|
-
[MetaGovernor Intervention]`,
|
|
20
|
-
`,"utf-8")}var
|
|
17
|
+
Remember: use codegraph/graphify for architecture queries, do not grep without trying AFT/codegraph first, no @ts-ignore/as-any, no empty catch, check memory before asking.`;Y.messages.push({info:{role:"user",agent:"meta-governor",synthetic:!0},parts:[{type:"text",text:I,synthetic:!0}]}),C.delete(R),j("info",`injected ${x.length} violation(s) to model`)}}let A=BK();if(!A)return;if(A.action==="continue")return;if(!A.message)return;if(!UK(A.action,z.intervention.minActionForMessage))return;let T={type:"text",text:`[MetaGovernor] ${A.message}`,synthetic:!0};Y.messages.push({info:{role:"user",agent:"meta-governor"},parts:[T]})},"experimental.chat.system.transform":async(G,Y)=>{if(!z.enabled)return;if(z.protocolEnforcement.injectIntoSystem&&P)Y.system.push(`
|
|
18
|
+
### Sisyphus Protocol Enforcement`,P,"---");if(z.intervention.mode==="system"&&G.sessionID){let F=zK(G.sessionID);if(F&&F.action!=="continue"&&F.message){if(UK(F.action,z.intervention.minActionForMessage))Y.system.push(`
|
|
19
|
+
[MetaGovernor Intervention]`,F.message,"---")}}}}}}function lQ(K){let Q={severity:K.success?"leve":"grave",category:`recovery:${K.fixStrategy}`,detail:`${K.errorCode}: ${K.context??"no context"}`};return{action:K.success?"continue":"warn",score:K.success?0.5:-0.5,reasoning:`Recovery ${K.success?"succeeded":"failed"}: ${K.fixStrategy} for ${K.errorCode}`,evidence:[{source:"deviation-detector",value:Q.detail,confidence:1,weight:K.success?0.3:0.8}],shouldEscalateTo:K.success?null:"oracle"}}var fK={leve:0,media:1,grave:2};function mK(K,Q){let X=fK[Q]??0;return K.some((Z)=>(fK[Z.severity]??0)>=X)}async function aQ(K,Q,X){if(!Q)return null;let Z=X?.config??N(),$=lQ(K);if(!Z.enabled)return{lessonSaved:null,decisionSaved:null,reason:"closed-loop learning disabled"};let J=[{severity:K.success?"leve":"grave",category:`recovery:${K.fixStrategy}`,detail:`${K.errorCode}: ${K.context??"no context"}`}],q=null,B=null;if(Z.saveDecisions){let W={id:`D-${Math.abs(`${K.sessionID}-${$.action}-${Date.now()}`.split("").reduce((z,U)=>(z<<5)-z+U.charCodeAt(0)|0,0)).toString(36)}`,timestampISO:new Date().toISOString(),action:$.action,score:$.score,reasoning:$.reasoning,sessionID:K.sessionID,directory:K.directory,deviations:J.map((z)=>({severity:z.severity,category:z.category,detail:z.detail}))};try{await Q.saveMemory({content:`Decision: ${$.action} (score ${$.score.toFixed(2)}). ${$.reasoning}`,concepts:["meta-governor","decision",$.action,...J.map((z)=>z.category)],type:"fact",files:[...K.filesChanged??[]]}),B=W}catch{}}if(mK(J,Z.minSeverityToLearn)){let W=[...new Set(J.flatMap((H)=>[H.category,H.severity]))],z=J.map((H)=>`[${H.severity}] ${H.category}: ${H.detail}`).join("; "),U=`Action "${$.action}" (score ${$.score.toFixed(2)}) after deviations: ${z}. Reasoning: ${$.reasoning}`;try{q={id:(await Q.saveLesson({content:U,context:`session:${K.sessionID} dir:${K.directory}`,confidence:Math.max(0.3,Math.min(0.8,Math.abs($.score))),tags:W})).id,title:`${$.action} after ${J[0]?.category??"recovery"}`,content:U,type:"pattern",concepts:W,confidence:Math.max(0.3,Math.min(0.8,Math.abs($.score))),files:[...K.filesChanged??[]],sessionID:K.sessionID}}catch{}}let V=[];if(B)V.push("decision saved");if(q)V.push("lesson saved");else if(!mK(J,Z.minSeverityToLearn))V.push("severity below threshold");if(!B&&!q&&!V.length)V.push("no saveable content");return{lessonSaved:q,decisionSaved:B,reason:V.join("; ")||"no action taken"}}JK();function gK(){return{$schema:"http://json-schema.org/draft-07/schema#",$id:"https://raw.githubusercontent.com/herjarsa/omo-meta-governor/main/assets/omo-meta-governor.schema.json",title:"omo-meta-governor",description:"Configuration schema for @herjarsa/omo-meta-governor — Self-judging agent orchestration layer for OpenCode.",type:"object",additionalProperties:!1,properties:{$schema:{type:"string",description:"JSON Schema reference for IDE autocompletion."},enabled:{type:"boolean",description:"Master feature flag — must be true to run the orchestrator.",default:!1},decision:{type:"object",description:"Decision handler configuration.",additionalProperties:!1,properties:{maxHistoryPerSession:{type:"integer",description:"Maximum history entries per session before oldest are trimmed.",default:50,minimum:1},forceContinueAfterStops:{type:"integer",description:"How many consecutive stops before forcing continue.",default:3,minimum:1}}},memory:{type:"object",description:"Memory aggregator configuration.",additionalProperties:!1,properties:{agentmemoryTimeoutMs:{type:"integer",description:"Timeout for agentmemory queries in milliseconds.",default:2000,minimum:100},magicContextTimeoutMs:{type:"integer",description:"Timeout for magic-context queries in milliseconds.",default:1000,minimum:100},boulderStateTimeoutMs:{type:"integer",description:"Timeout for boulder-state queries in milliseconds.",default:1000,minimum:100},query:{type:"string",description:"Natural-language query for memory recall.",default:"meta_governor_context"}}},tokenPredictor:{type:"object",description:"Token predictor configuration.",additionalProperties:!1,properties:{compactBurnRateThreshold:{type:"integer",description:"Burn rate threshold (tokens/turn) above which to recommend compact-now.",default:500,minimum:0},compactUsageThreshold:{type:"number",description:"Context usage ratio (0..1) above which to recommend compact-now.",default:0.85,minimum:0,maximum:1},switchModelUsageThreshold:{type:"number",description:"Context usage ratio above which to recommend switch-model.",default:0.95,minimum:0,maximum:1},delegateConsecutiveHighBurn:{type:"integer",description:"Max consecutive high-burn turns before recommending delegate.",default:5,minimum:1}}},scoring:{type:"object",description:"Scoring engine configuration.",additionalProperties:!1,properties:{continueThreshold:{type:"number",description:"Score >= this -> continue silently.",default:0.3,minimum:0,maximum:1},warnThreshold:{type:"number",description:"Score <= -warnThreshold -> warn.",default:0.3,minimum:0,maximum:1},escalateThreshold:{type:"number",description:"Score <= -escalateThreshold -> escalate.",default:0.6,minimum:0,maximum:1},stopThreshold:{type:"number",description:"Score <= -stopThreshold -> stop.",default:0.8,minimum:0,maximum:1}}},closedLoop:{type:"object",description:"Closed-loop learning configuration.",additionalProperties:!1,properties:{saveDecisions:{type:"boolean",description:"Whether to save decision records.",default:!0},saveLessons:{type:"boolean",description:"Whether to save lessons.",default:!0}}},modelOverride:{type:"object",description:"Model override for MetaGovernor internal LLM usage.",additionalProperties:!1,properties:{providerID:{type:"string",description:"Provider ID (e.g. 'openai', 'anthropic')."},modelID:{type:"string",description:"Model ID (e.g. 'gpt-4o-mini', 'claude-sonnet-4-20250514')."},modelLimit:{type:"integer",description:"Context window size for token predictor.",minimum:1000},temperature:{type:"number",description:"Sampling temperature. Default: 0.2.",default:0.2,minimum:0,maximum:2},topP:{type:"number",description:"Top-p nucleus sampling. Default: 1.",default:1,minimum:0,maximum:1},maxTokens:{type:"integer",description:"Max output tokens for internal reasoning.",default:2048,minimum:1},reasoning:{type:"boolean",description:"Enable extended reasoning / thinking mode.",default:!1},verbosity:{type:"string",description:"Verbosity level for internal logging.",enum:["silent","minimal","verbose"],default:"minimal"}}},intervention:{type:"object",description:"Intervention config for visible decision injection.",additionalProperties:!1,properties:{mode:{type:"string",description:"How to inject: 'silent', 'message', or 'system'.",enum:["silent","message","system"],default:"silent"},includeDecisionHistory:{type:"boolean",description:"Whether to include recent decision history.",default:!0},maxHistoryMessages:{type:"integer",description:"Max history entries when includeDecisionHistory is true.",default:5,minimum:1},minActionForMessage:{type:"string",description:"Minimum action: 'warn' (all non-continue), 'escalate', or 'stop'.",enum:["warn","escalate","stop"],default:"warn"}}},protocolEnforcement:{type:"object",description:"Sisyphus protocol enforcement config.",additionalProperties:!1,properties:{enabled:{type:"boolean",description:"Master switch for protocol enforcement.",default:!1},path:{type:"string",description:"Path to protocol markdown file."},injectIntoSystem:{type:"boolean",description:"Whether to inject protocol rules into the system prompt.",default:!1},auditToolCalls:{type:"boolean",description:"Whether to audit tool calls for protocol violations.",default:!1}}},graphSync:{type:"object",description:"Graph synchronization (auto-init codegraph/graphify).",additionalProperties:!1,properties:{enabled:{type:"boolean",description:"Enable auto-initialization of codegraph and graphify.",default:!0},watch:{type:"boolean",description:"Enable watch mode (re-index on file changes).",default:!1}}}},definitions:{verbosity:{type:"string",enum:["silent","minimal","verbose"],description:"Verbosity level."},interventionMode:{type:"string",enum:["silent","message","system"],description:"Intervention injection mode."},minAction:{type:"string",enum:["warn","escalate","stop"],description:"Minimum action threshold."}}}}async function cQ(K){let Q=gK(),{writeFile:X}=await import("node:fs/promises");await X(K,JSON.stringify(Q,null,2)+`
|
|
20
|
+
`,"utf-8")}var rQ={id:"omo-meta-governor",server:HK()},uX=rQ;export{cQ as writeSchemaFile,PQ as trimHistory,zK as takeDecision,BK as takeAnyDecision,QK as stripJsoncComments,qK as storeDecision,XQ as stopWatches,i as score,KK as runMetaGovernor,u as runGraphSync,eK as resetInitializedProjects,aQ as recordRecovery,s as predict,XK as parseJsonc,o as observeAndLearn,j as logToFile,YK as loadProtocol,xQ as loadOrchestratorConfigFromSources,m as loadOrchestratorConfig,IK as loadMetaGovernorConfig,f as loadJsoncFile,yQ as isMetaGovernorEnabled,IQ as hasDecision,t as handleDecision,ZK as getUserConfigPath,$K as getProjectConfigPath,gK as generateSchema,YQ as defaultTokenPredictorConfig,S as defaultScoringConfig,bK as defaultOrchestratorConfig,v as defaultDecisionHandlerConfig,N as defaultClosedLoopConfig,uX as default,b as deepMerge,HK as createMetaGovernorPlugin,MQ as countConsecutiveStops,DQ as clearAll,RK as calculateBurnRate,VK as buildSystemInjection,jK as buildDecisionContext,WK as auditToolCall,r as aggregateRead,g as DEFAULT_PROTOCOL_PATH};
|
|
21
21
|
|
|
22
|
-
//# debugId=
|
|
22
|
+
//# debugId=1032D4A61794B53D64756E2164756E21
|
|
23
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/config-file.ts", "../src/graph-sync.ts", "../src/memory-aggregator.ts", "../src/token-predictor.ts", "../src/scoring-engine.ts", "../src/decision-handler.ts", "../src/closed-loop-learning.ts", "../src/orchestrator.ts", "../src/config.ts", "../src/decision-store.ts", "../src/file-logger.ts", "../src/
|
|
3
|
+
"sources": ["../src/config-file.ts", "../src/graph-sync.ts", "../src/memory-aggregator.ts", "../src/token-predictor.ts", "../src/scoring-engine.ts", "../src/decision-handler.ts", "../src/closed-loop-learning.ts", "../src/orchestrator.ts", "../src/config.ts", "../src/decision-store.ts", "../src/file-logger.ts", "../src/plugin.ts", "../src/protocol-enforcer.ts", "../src/post-repair-recorder.ts", "../src/index.ts", "../src/generate-schema.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * JSONC config file loader for omo-meta-governor.\n *\n * Loads `omo-meta-governor.jsonc` from three layers (closer wins):\n * 1. CLI inline options (opts object) — highest priority\n * 2. Project config: `.opencode/omo-meta-governor.jsonc`\n * 3. User config: `~/.config/opencode/omo-meta-governor.jsonc`\n * 4. Defaults — lowest priority\n *\n * JSONC support: comments (//, /* * /) and trailing commas are stripped\n * before parsing. The raw JSON object is then projected into\n * `MetaGovernorPluginConfig` via `loadOrchestratorConfig()`.\n */\n\nimport { readFile, access } from \"node:fs/promises\"\nimport { resolve, join } from \"node:path\"\nimport { homedir } from \"node:os\"\nimport type { MetaGovernorPluginConfig } from \"./config\"\n\n// ─── File name ─────────────────────────────────────────────────────\n\nconst CONFIG_FILE_NAME = \"omo-meta-governor.jsonc\"\n\n// ─── JSONC parsing ─────────────────────────────────────────────────\n\n/**\n * Strip JSONC comments (single-line // style and multi-line bracket style)\n * and trailing commas from a JSONC string so it can be parsed by JSON.parse.\n *\n * Handles:\n * - // single-line comments\n * - /asterisk ... asterisk/ multi-line comments\n * - Trailing commas before ] or }\n * - Strings containing comments (preserved)\n */\nexport function stripJsoncComments(jsonc: string): string {\n const result: string[] = []\n let i = 0\n\n while (i < jsonc.length) {\n const ch = jsonc[i]!\n\n // Detect string literal\n if (ch === '\"' || ch === \"'\") {\n const quote = ch\n result.push(quote)\n i++\n while (i < jsonc.length) {\n const c = jsonc[i]!\n result.push(c)\n if (c === '\\\\') {\n i++\n if (i < jsonc.length) {\n result.push(jsonc[i]!)\n }\n } else if (c === quote) {\n i++\n break\n }\n i++\n }\n continue\n }\n\n // Single-line comment\n if (ch === '/' && i + 1 < jsonc.length && jsonc[i + 1] === '/') {\n i += 2\n while (i < jsonc.length && jsonc[i] !== '\\n') {\n i++\n }\n continue\n }\n\n // Multi-line comment\n if (ch === '/' && i + 1 < jsonc.length && jsonc[i + 1] === '*') {\n i += 2\n while (i < jsonc.length) {\n if (jsonc[i] === '*' && i + 1 < jsonc.length && jsonc[i + 1] === '/') {\n i += 2\n break\n }\n i++\n }\n continue\n }\n\n result.push(ch)\n i++\n }\n\n // Strip trailing commas before ] or }\n let cleaned = result.join(\"\")\n // Handle multiple passes for nested structures\n for (let pass = 0; pass < 10; pass++) {\n const before = cleaned\n cleaned = cleaned.replace(/,(\\s*[\\]}])/g, \"$1\")\n if (cleaned === before) break\n }\n\n return cleaned\n}\n\n/**\n * Parse a JSONC string into a JavaScript object.\n * Returns undefined on parse failure.\n */\nexport function parseJsonc<T = Record<string, unknown>>(jsonc: string): T | undefined {\n try {\n const cleaned = stripJsoncComments(jsonc)\n return JSON.parse(cleaned) as T\n } catch {\n return undefined\n }\n}\n\n// ─── Config paths ──────────────────────────────────────────────────\n\n/**\n * Get the user-level config file path.\n */\nexport function getUserConfigPath(): string {\n return resolve(homedir(), \".config\", \"opencode\", CONFIG_FILE_NAME)\n}\n\n/**\n * Get the project-level config file path for a given project directory.\n */\nexport function getProjectConfigPath(projectDir?: string): string {\n const base = projectDir ?? process.cwd()\n return resolve(base, \".opencode\", CONFIG_FILE_NAME)\n}\n\n// ─── File existence check ──────────────────────────────────────────\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await access(filePath)\n return true\n } catch {\n return false\n }\n}\n\n// ─── Load single config file ───────────────────────────────────────\n\n/**\n * Read and parse a single JSONC config file.\n * Returns undefined if the file does not exist or is unparseable.\n */\nexport async function loadJsoncFile<T = Record<string, unknown>>(\n filePath: string,\n): Promise<T | undefined> {\n if (!(await fileExists(filePath))) return undefined\n try {\n const content = await readFile(filePath, \"utf-8\")\n return parseJsonc<T>(content)\n } catch {\n return undefined\n }\n}\n\n// ─── Merge two configs (deep merge, second wins) ───────────────────\n\n/**\n * Deep-merge two config objects. Arrays are replaced (not concatenated).\n * The `source` values win when both exist.\n * Mutually recursive with mergeArrays=false for sub-objects.\n */\nexport function deepMerge<T extends Record<string, unknown>>(\n target: T,\n source: Partial<T>,\n): T {\n const result = { ...target } as Record<string, unknown>\n\n for (const key of Object.keys(source)) {\n const srcVal = source[key as keyof typeof source]\n const tgtVal = result[key]\n\n if (srcVal === undefined) continue\n\n if (\n isPlainObject(srcVal) &&\n isPlainObject(tgtVal)\n ) {\n result[key] = deepMerge(tgtVal as Record<string, unknown>, srcVal as Record<string, unknown>)\n } else {\n result[key] = srcVal\n }\n }\n\n return result as T\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\n// ─── Full config loading pipeline ──────────────────────────────────\n\nexport interface ConfigFileSources {\n /** CLI inline options (highest priority) */\n cliOptions?: Partial<MetaGovernorPluginConfig>\n /** Project directory for project-level config lookup */\n projectDir?: string\n}\n\nexport interface ConfigFileResult {\n /** The merged MetaGovernorPluginConfig */\n config: Partial<MetaGovernorPluginConfig>\n /** Which source files were loaded */\n sources: string[]\n /** Which source was the effective highest-priority non-empty source */\n effectiveSource: \"cli\" | \"project\" | \"user\" | \"defaults\"\n}\n\n/**\n * Load the MetaGovernor config from all available sources with priority:\n * CLI inline > project `.opencode/omo-meta-governor.jsonc` >\n * user `~/.config/opencode/omo-meta-governor.jsonc` > defaults\n *\n * Higher-priority sources override lower-priority ones.\n */\nexport async function loadMetaGovernorConfig(\n sources: ConfigFileSources = {},\n): Promise<ConfigFileResult> {\n const loadedSources: string[] = []\n let effectiveSource: ConfigFileResult[\"effectiveSource\"] = \"defaults\"\n\n // Start with empty config (defaults applied later by loadOrchestratorConfig)\n let merged: Partial<MetaGovernorPluginConfig> = {}\n\n // 1. User config (lowest file priority)\n const userPath = getUserConfigPath()\n const userConfig = await loadJsoncFile<Partial<MetaGovernorPluginConfig>>(userPath)\n if (userConfig) {\n merged = deepMerge(merged, userConfig)\n loadedSources.push(`user:${userPath}`)\n effectiveSource = \"user\"\n }\n\n // 2. Project config (medium file priority)\n const projectPath = getProjectConfigPath(sources.projectDir)\n const projectConfig = await loadJsoncFile<Partial<MetaGovernorPluginConfig>>(projectPath)\n if (projectConfig) {\n merged = deepMerge(merged, projectConfig)\n loadedSources.push(`project:${projectPath}`)\n effectiveSource = \"project\"\n }\n\n // 3. CLI inline options (highest priority)\n if (sources.cliOptions && Object.keys(sources.cliOptions).length > 0) {\n merged = deepMerge(merged, sources.cliOptions)\n loadedSources.push(\"cli:inline\")\n effectiveSource = \"cli\"\n }\n\n return {\n config: merged,\n sources: loadedSources,\n effectiveSource,\n }\n}\n",
|
|
6
6
|
"/**\n * graphSync — Auto-initialize codegraph and graphify for a project.\n *\n * On first session in a project, checks whether:\n * - `npx codegraph` is available on PATH (or node_modules)\n * - `graphify` / `graphifyy` is available as a Python package\n *\n * If a tool is available but the project has no index yet, runs the\n * initialization automatically. With `--watch` mode, spawns a background\n * process that re-indexes on file changes.\n *\n * Architecture invariants:\n * - Never blocks the session — init runs async, best-effort\n * - Never throws — all errors are silently caught and logged\n * - Tracks session init once per project via an in-memory Set\n */\n\nimport { execSync, spawn } from \"node:child_process\"\nimport { access, stat } from \"node:fs/promises\"\nimport { resolve } from \"node:path\"\nimport { constants } from \"node:fs\"\n\n// ─── GraphSync config ──────────────────────────────────────────────\n\nexport interface GraphSyncConfig {\n /** Enable auto-initialization. Default: true */\n enabled: boolean\n /** Enable watch mode (re-index on file changes). Default: false */\n watch: boolean\n /** Project directory to initialize in. Default: cwd */\n projectDir?: string\n /**\n * Auto-install missing backends. Default: true.\n * - codegraph: installed via `npm i -D @colbymchenry/codegraph` in the project\n * - graphify: installed via `pip install graphifyy --break-system-packages` (or `uv tool install graphifyy`)\n */\n autoInstall: boolean\n /** Max ms to wait for each install. Default: 60_000 */\n installTimeoutMs: number\n}\n\n// ─── Install codes ────────────────────────────────────────────────\n\nexport type InstallCode =\n | \"codegraph-installed\"\n | \"codegraph-install-failed\"\n | \"codegraph-install-skipped\"\n | \"graphify-installed\"\n | \"graphify-install-failed\"\n | \"graphify-install-skipped\"\n\n/**\n * Install codegraph via `npm i -D @colbymchenry/codegraph`.\n * Best-effort, never throws.\n */\nexport async function installCodegraph(\n projectDir: string,\n timeoutMs: number = 60_000,\n): Promise<InstallCode> {\n try {\n execSync(\"npm i -D @colbymchenry/codegraph\", {\n cwd: projectDir,\n stdio: \"ignore\",\n timeout: timeoutMs,\n })\n return \"codegraph-installed\"\n } catch {\n return \"codegraph-install-failed\"\n }\n}\n\n/**\n * Install graphify via `pip install graphifyy --break-system-packages`.\n * Falls back to `uv tool install graphifyy`.\n * Best-effort, never throws.\n */\nexport async function installGraphify(\n timeoutMs: number = 60_000,\n): Promise<InstallCode> {\n try {\n execSync(\"pip install graphifyy --break-system-packages --quiet\", {\n stdio: \"ignore\",\n timeout: timeoutMs,\n })\n return \"graphify-installed\"\n } catch {\n try {\n execSync(\"uv tool install graphifyy --quiet\", {\n stdio: \"ignore\",\n timeout: timeoutMs,\n })\n return \"graphify-installed\"\n } catch {\n return \"graphify-install-failed\"\n }\n }\n}\n\n// ─── Graph sync state ──────────────────────────────────────────────\n\nconst initializedProjects = new Set<string>()\n\nexport function resetInitializedProjects(): void {\n initializedProjects.clear()\n}\n\n// ─── Session tracking (for watch lifecycle) ────────────────────────\n\nconst sessionCounts = new Map<string, number>()\n\n/**\n * Track a new session for a project. Increments reference count.\n * Returns the new count.\n */\nexport function trackSession(projectDir: string): number {\n const current = sessionCounts.get(projectDir) ?? 0\n const next = current + 1\n sessionCounts.set(projectDir, next)\n return next\n}\n\n/**\n * Untrack a session for a project. Decrements reference count.\n * When count drops to 0, all watch processes for that project\n * are automatically stopped.\n * Returns the remaining count.\n */\nexport function untrackSession(projectDir: string): number {\n const current = sessionCounts.get(projectDir) ?? 0\n const next = Math.max(0, current - 1)\n if (next === 0) {\n sessionCounts.delete(projectDir)\n // Auto-cleanup watches when last session exits\n stopWatches(projectDir)\n } else {\n sessionCounts.set(projectDir, next)\n }\n return next\n}\n\n/** Get active session count for a project. */\nexport function getSessionCount(projectDir: string): number {\n return sessionCounts.get(projectDir) ?? 0\n}\n\n// ─── Tool detection ────────────────────────────────────────────────\n\nexport interface ToolAvailability {\n /** Whether codegraph is available (via npx or node_modules) */\n codegraph: boolean\n /** Whether graphify/graphifyy is available (via pip) */\n graphify: boolean\n /** Whether .codegraph/ directory already exists in the project */\n codegraphIndexExists: boolean\n /** Whether graphify-out/ directory already exists in the project */\n graphifyIndexExists: boolean\n}\n\n/**\n * Check which graph tools are available and whether indexes already exist.\n */\nasync function checkToolAvailability(projectDir: string): Promise<ToolAvailability> {\n let codegraph = false\n let graphify = false\n const codegraphIndexExists = await dirExists(resolve(projectDir, \".codegraph\"))\n const graphifyIndexExists = await dirExists(resolve(projectDir, \"graphify-out\"))\n\n try {\n execSync(\"npx --yes codegraph --version\", {\n stdio: \"ignore\",\n timeout: 10_000,\n })\n codegraph = true\n } catch {\n try {\n execSync(\"node node_modules/.bin/codegraph --version\", {\n cwd: projectDir,\n stdio: \"ignore\",\n timeout: 5_000,\n })\n codegraph = true\n } catch {\n // Not available\n }\n }\n\n try {\n execSync(\"python3 -c 'import graphify; print(graphify.__version__)'\", {\n stdio: \"ignore\",\n timeout: 5_000,\n })\n graphify = true\n } catch {\n try {\n execSync(\"python3 -c 'import graphifyy; print(graphifyy.__version__)'\", {\n stdio: \"ignore\",\n timeout: 5_000,\n })\n graphify = true\n } catch {\n // Not available\n }\n }\n\n return { codegraph, graphify, codegraphIndexExists, graphifyIndexExists }\n}\n\n// ─── Initialization ────────────────────────────────────────────────\n\nasync function initCodegraph(projectDir: string): Promise<void> {\n const codegraphDir = resolve(projectDir, \".codegraph\")\n await ensureDir(codegraphDir)\n\n try {\n execSync(\"npx --yes codegraph init\", {\n cwd: projectDir,\n stdio: \"ignore\",\n timeout: 60_000,\n })\n } catch {\n // Best-effort\n }\n}\n\nasync function initGraphify(projectDir: string): Promise<void> {\n const graphifyOut = resolve(projectDir, \"graphify-out\")\n await ensureDir(graphifyOut)\n\n try {\n execSync(\"python3 -m graphify . --no-viz\", {\n cwd: projectDir,\n stdio: \"ignore\",\n timeout: 120_000,\n })\n } catch {\n try {\n execSync(\"graphifyy . --no-viz\", {\n cwd: projectDir,\n stdio: \"ignore\",\n timeout: 120_000,\n })\n } catch {\n // Best-effort\n }\n }\n}\n\n// ─── Watch mode ────────────────────────────────────────────────────\n\ninterface WatchProcess {\n process: ReturnType<typeof spawn>\n tool: \"codegraph\" | \"graphify\"\n}\n\nconst activeWatchProcesses = new Map<string, WatchProcess>()\n\nfunction startWatch(projectDir: string, tool: \"codegraph\" | \"graphify\"): void {\n const key = `${projectDir}:${tool}`\n if (activeWatchProcesses.has(key)) return\n\n try {\n let child: ReturnType<typeof spawn>\n\n if (tool === \"codegraph\") {\n // codegraph has no built-in watch; use periodic update loop\n child = spawn(\n \"node\",\n [\n \"-e\",\n `\n const {execSync} = require(\"child_process\");\n const run = () => {\n try { execSync(\"npx codegraph update 2>/dev/null\", {cwd: ${JSON.stringify(projectDir)}, stdio: \"ignore\"}); }\n catch(e) { /* best effort */ }\n };\n run();\n setInterval(run, 30_000);\n `,\n ],\n {\n stdio: \"ignore\",\n detached: true,\n },\n )\n } else {\n child = spawn(\"python3\", [\"-m\", \"graphify\", \".\", \"--no-viz\", \"--watch\"], {\n cwd: projectDir,\n stdio: \"ignore\",\n detached: true,\n })\n }\n\n child.unref()\n activeWatchProcesses.set(key, { process: child, tool })\n\n child.on(\"exit\", () => {\n activeWatchProcesses.delete(key)\n })\n } catch {\n // Best-effort\n }\n}\n\n/**\n * Stop all active watch processes for a project.\n */\nexport function stopWatches(projectDir?: string): void {\n for (const [key, wp] of activeWatchProcesses) {\n if (!projectDir || key.startsWith(projectDir)) {\n try {\n wp.process.kill(\"SIGTERM\")\n } catch {\n // Already dead\n }\n setTimeout(() => {\n try { wp.process.kill(\"SIGKILL\") } catch { /* OK */ }\n }, 2_000).unref()\n activeWatchProcesses.delete(key)\n }\n }\n}\n\n/** Check if watches are active for a project. */\nexport function hasActiveWatcher(projectDir: string, tool?: \"codegraph\" | \"graphify\"): boolean {\n for (const key of activeWatchProcesses.keys()) {\n if (key.startsWith(projectDir)) {\n if (!tool || key.endsWith(tool)) return true\n }\n }\n return false\n}\n\n// ─── Main API ──────────────────────────────────────────────────────\n\nexport interface GraphSyncResult {\n /** Whether synchronization was attempted */\n attempted: boolean\n /** Codes that describe the outcome */\n codes: GraphSyncCode[]\n /** Tool availability before init */\n availability: ToolAvailability\n /** Whether this project was already initialized this session */\n alreadyInitialized: boolean\n}\n\nexport type GraphSyncCode =\n | \"codegraph-initialized\"\n | \"codegraph-already-exists\"\n | \"codegraph-unavailable\"\n | \"codegraph-install-failed\"\n | \"codegraph-install-skipped\"\n | \"graphify-initialized\"\n | \"graphify-already-exists\"\n | \"graphify-unavailable\"\n | \"graphify-install-failed\"\n | \"graphify-install-skipped\"\n | \"watch-started-codegraph\"\n | \"watch-started-graphify\"\n | \"disabled\"\n | \"error\"\n\n/**\n * Run the graphSync pipeline. Best-effort, never throws.\n */\nexport async function runGraphSync(\n config: GraphSyncConfig = { enabled: true, watch: false, autoInstall: true, installTimeoutMs: 60_000 },\n): Promise<GraphSyncResult> {\n const codes: GraphSyncCode[] = []\n const projectDir = config.projectDir ?? process.cwd()\n\n if (!config.enabled) {\n return {\n attempted: false,\n codes: [\"disabled\"],\n availability: { codegraph: false, graphify: false, codegraphIndexExists: false, graphifyIndexExists: false },\n alreadyInitialized: false,\n }\n }\n\n // Skip if already initialized this session\n if (initializedProjects.has(projectDir)) {\n const avail = await checkToolAvailability(projectDir)\n return {\n attempted: false,\n codes: avail.codegraphIndexExists ? [\"codegraph-already-exists\"] : [],\n availability: avail,\n alreadyInitialized: true,\n }\n }\n\n initializedProjects.add(projectDir)\n\n let availability: ToolAvailability\n try {\n availability = await checkToolAvailability(projectDir)\n } catch {\n return {\n attempted: false,\n codes: [\"error\"],\n availability: { codegraph: false, graphify: false, codegraphIndexExists: false, graphifyIndexExists: false },\n alreadyInitialized: false,\n }\n }\n\n // Auto-install missing backends\n if (config.autoInstall !== false) {\n if (!availability.codegraph) {\n const result = await installCodegraph(projectDir, config.installTimeoutMs ?? 60_000)\n codes.push(result as GraphSyncCode)\n if (result === \"codegraph-installed\") {\n availability.codegraph = true\n }\n }\n if (!availability.graphify) {\n const result = await installGraphify(config.installTimeoutMs ?? 60_000)\n codes.push(result as GraphSyncCode)\n if (result === \"graphify-installed\") {\n availability.graphify = true\n }\n }\n } else {\n if (!availability.codegraph) codes.push(\"codegraph-install-skipped\")\n if (!availability.graphify) codes.push(\"graphify-install-skipped\")\n }\n\n // Codegraph init\n if (availability.codegraph) {\n if (!availability.codegraphIndexExists) {\n try {\n await initCodegraph(projectDir)\n codes.push(\"codegraph-initialized\")\n } catch {\n codes.push(\"error\")\n }\n } else {\n codes.push(\"codegraph-already-exists\")\n }\n } else {\n codes.push(\"codegraph-unavailable\")\n }\n\n // Graphify init\n if (availability.graphify) {\n if (!availability.graphifyIndexExists) {\n try {\n await initGraphify(projectDir)\n codes.push(\"graphify-initialized\")\n } catch {\n codes.push(\"error\")\n }\n } else {\n codes.push(\"graphify-already-exists\")\n }\n } else {\n codes.push(\"graphify-unavailable\")\n }\n\n // Watch mode\n if (config.watch) {\n if (availability.codegraph) {\n startWatch(projectDir, \"codegraph\")\n codes.push(\"watch-started-codegraph\")\n }\n if (availability.graphify) {\n startWatch(projectDir, \"graphify\")\n codes.push(\"watch-started-graphify\")\n }\n }\n\n return {\n attempted: true,\n codes,\n availability,\n alreadyInitialized: false,\n }\n}\n\n// ─── Helpers ───────────────────────────────────────────────────────\n\nasync function dirExists(dirPath: string): Promise<boolean> {\n try {\n const st = await stat(dirPath)\n return st.isDirectory()\n } catch {\n return false\n }\n}\n\nasync function ensureDir(dirPath: string): Promise<void> {\n try {\n await access(dirPath, constants.F_OK)\n } catch {\n const { mkdir } = await import(\"node:fs/promises\")\n await mkdir(dirPath, { recursive: true })\n }\n}\n",
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
"import type { InterventionConfig, ModelOverrideConfig, OrchestratorConfig, ProtocolEnforcementConfig } from \"./types\"\nimport { defaultScoringConfig } from \"./scoring-engine\"\nimport { defaultDecisionHandlerConfig } from \"./decision-handler\"\nimport { defaultClosedLoopConfig } from \"./closed-loop-learning\"\nimport type { ConfigFileSources, ConfigFileResult } from \"./config-file\"\n\n/**\n * MetaGovernor config schema exposed to users.\n * This is a Zod-free config interface since Zod parsing is optional\n * in the standalone plugin — the user provides JSON, we coerce with defaults.\n */\nexport interface MetaGovernorPluginConfig {\n /** Master feature flag — must be true to run the orchestrator. */\n enabled?: boolean\n\n /** Decision handler (PR 6) */\n decision?: {\n maxHistoryPerSession?: number\n forceContinueAfterStops?: number\n }\n\n /** Memory aggregator (PR 2) */\n memory?: {\n agentmemoryTimeoutMs?: number\n magicContextTimeoutMs?: number\n boulderStateTimeoutMs?: number\n query?: string\n }\n\n /** Token predictor (PR 4) */\n tokenPredictor?: {\n compactBurnRateThreshold?: number\n compactUsageThreshold?: number\n switchModelUsageThreshold?: number\n delegateConsecutiveHighBurn?: number\n }\n\n /** Scoring engine (PR 5) */\n scoring?: {\n continueThreshold?: number\n warnThreshold?: number\n escalateThreshold?: number\n stopThreshold?: number\n }\n\n /** Closed-loop learning (PR 3) */\n closedLoop?: {\n saveDecisions?: boolean\n saveLessons?: boolean\n }\n\n /** Model override for MetaGovernor internal LLM usage. */\n modelOverride?: ModelOverrideConfig\n\n /** Intervention config for visible decision injection. */\n intervention?: {\n mode?: \"silent\" | \"message\" | \"system\"\n includeDecisionHistory?: boolean\n maxHistoryMessages?: number\n minActionForMessage?: \"warn\" | \"escalate\" | \"stop\"\n }\n\n /** Sisyphus protocol enforcement config. */\n protocolEnforcement?: {\n enabled?: boolean\n path?: string\n injectIntoSystem?: boolean\n auditToolCalls?: boolean\n }\n\n /** Graph sync config for auto-initializing codegraph/graphify. */\ngraphSync?: {\nenabled?: boolean\n watch?: boolean\n autoInstall?: boolean\n installTimeoutMs?: number\n}\n}\n\n/**\n * Project the full MetaGovernorPluginConfig into OrchestratorConfig.\n * Missing sub-configs fall back to module defaults.\n */\nexport function loadOrchestratorConfig(\n pluginConfig: Partial<MetaGovernorPluginConfig> | undefined,\n): OrchestratorConfig {\n const full: MetaGovernorPluginConfig = {\n enabled: false,\n ...pluginConfig,\n }\n\n const baseScoring = defaultScoringConfig()\n const baseDecision = defaultDecisionHandlerConfig()\n const baseClosedLoop = defaultClosedLoopConfig()\n\n return {\n enabled: full.enabled === true,\n memory: {\n enabled: true,\n query: full.memory?.query ?? \"meta_governor_context\",\n timeoutMs: full.memory?.agentmemoryTimeoutMs ?? 2000,\n },\n tokenPredictor: {\n compactBurnRateThreshold:\n full.tokenPredictor?.compactBurnRateThreshold ?? 500,\n compactUsageThreshold:\n full.tokenPredictor?.compactUsageThreshold ?? 0.85,\n switchModelUsageThreshold:\n full.tokenPredictor?.switchModelUsageThreshold ?? 0.95,\n delegateConsecutiveHighBurn:\n full.tokenPredictor?.delegateConsecutiveHighBurn ?? 5,\n },\n scoring: {\n ...baseScoring,\n ...(full.scoring?.continueThreshold !== undefined\n ? { continueThreshold: full.scoring.continueThreshold }\n : {}),\n ...(full.scoring?.warnThreshold !== undefined\n ? { warnThreshold: full.scoring.warnThreshold }\n : {}),\n ...(full.scoring?.escalateThreshold !== undefined\n ? { escalateThreshold: full.scoring.escalateThreshold }\n : {}),\n ...(full.scoring?.stopThreshold !== undefined\n ? { stopThreshold: full.scoring.stopThreshold }\n : {}),\n },\n closedLoop: {\n ...baseClosedLoop,\n ...(full.closedLoop?.saveDecisions !== undefined\n ? { saveDecisions: full.closedLoop.saveDecisions }\n : {}),\n },\n decision: {\n ...baseDecision,\n ...(full.decision?.maxHistoryPerSession !== undefined\n ? { maxHistoryPerSession: full.decision.maxHistoryPerSession }\n : {}),\n ...(full.decision?.forceContinueAfterStops !== undefined\n ? { forceContinueAfterStops: full.decision.forceContinueAfterStops }\n : {}),\n },\n modelOverride: full.modelOverride\n ? {\n providerID: full.modelOverride.providerID,\n modelID: full.modelOverride.modelID,\n modelLimit: full.modelOverride.modelLimit,\n temperature: full.modelOverride.temperature ?? 0.2,\n topP: full.modelOverride.topP ?? 1,\n maxTokens: full.modelOverride.maxTokens ?? 2048,\n reasoning: full.modelOverride.reasoning ?? false,\n verbosity: full.modelOverride.verbosity ?? \"minimal\",\n }\n : undefined,\n intervention: {\n mode: full.intervention?.mode ?? \"silent\",\n includeDecisionHistory: full.intervention?.includeDecisionHistory ?? true,\n maxHistoryMessages: full.intervention?.maxHistoryMessages ?? 5,\n minActionForMessage: full.intervention?.minActionForMessage ?? \"warn\",\n } as InterventionConfig,\n protocolEnforcement: {\n enabled: full.protocolEnforcement?.enabled ?? false,\n path: full.protocolEnforcement?.path,\n injectIntoSystem: full.protocolEnforcement?.injectIntoSystem ?? false,\n auditToolCalls: full.protocolEnforcement?.auditToolCalls ?? false,\n } as ProtocolEnforcementConfig,\n }\n}\n\n/**\n * Check whether the MetaGovernor is enabled. Returns false if config is undefined.\n */\nexport function isMetaGovernorEnabled(\n config: MetaGovernorPluginConfig | undefined,\n): boolean {\n return config?.enabled === true\n}\n\n/**\n * Load orchestrator config from all available sources: config file (JSONC)\n * with priority: CLI inline > project config > user config > defaults.\n */\nexport async function loadOrchestratorConfigFromSources(\n sources: ConfigFileSources = {},\n): Promise<OrchestratorConfig> {\n const { loadMetaGovernorConfig } = await import(\"./config-file\")\n const result: ConfigFileResult = await loadMetaGovernorConfig(sources)\n return loadOrchestratorConfig(result.config)\n}\n",
|
|
14
14
|
"/**\n * MetaGovernor decision store — in-memory Map for intervention feature.\n *\n * Stores decisions produced by tool.execute.after so they can be\n * consumed by experimental.chat.messages.transform and\n * experimental.chat.system.transform hooks.\n *\n * The store is keyed by sessionID. For hooks that receive a sessionID\n * (system.transform), use takeDecision(sessionID). For hooks that\n * receive no sessionID (messages.transform), use takeAnyDecision().\n */\nimport type { DecisionHandlerOutput } from \"./types\"\n\nconst store = new Map<string, DecisionHandlerOutput>()\n\n/**\n * Store a decision for a session.\n * Overwrites any previous pending decision for the same session.\n */\nexport function storeDecision(sessionID: string, decision: DecisionHandlerOutput): void {\n store.set(sessionID, decision)\n}\n\n/**\n * Take (retrieve and remove) the pending decision for a session.\n * Returns undefined if no decision is pending.\n */\nexport function takeDecision(sessionID: string): DecisionHandlerOutput | undefined {\n const decision = store.get(sessionID)\n if (decision !== undefined) {\n store.delete(sessionID)\n }\n return decision\n}\n\n/**\n * Check whether a session has a pending decision without consuming it.\n */\nexport function hasDecision(sessionID: string): boolean {\n return store.has(sessionID)\n}\n\n/**\n * Take any pending decision across all sessions.\n * Useful for hooks that do not receive a sessionID.\n * Returns the first pending decision found, or undefined if none.\n */\nexport function takeAnyDecision(): DecisionHandlerOutput | undefined {\n for (const [sessionID, decision] of store) {\n store.delete(sessionID)\n return decision\n }\n return undefined\n}\n\n/**\n * Clear all stored decisions. Useful in tests or when a session ends.\n */\nexport function clearAll(): void {\n store.clear()\n}\n",
|
|
15
15
|
"import { appendFileSync, mkdirSync } from \"node:fs\"\nimport { resolve, dirname } from \"node:path\"\nimport { homedir } from \"node:os\"\n\n/**\n * Persistent file-based logger so the user can tail the plugin's activity.\n * Logs to ~/.config/opencode/meta-governor.log with rotation hints.\n */\nconst LOG_PATH = resolve(homedir(), \".config\", \"opencode\", \"meta-governor.log\")\n\nfunction ensureLogDir(): void {\n try {\n mkdirSync(dirname(LOG_PATH), { recursive: true })\n } catch {\n // ignore\n }\n}\n\nexport function logToFile(level: \"info\" | \"warn\" | \"error\", message: string, data?: unknown): void {\n ensureLogDir()\n const ts = new Date().toISOString()\n const dataStr = data !== undefined ? ` | ${JSON.stringify(data)}` : \"\"\n const line = `[${ts}] [${level.toUpperCase()}] ${message}${dataStr}\\n`\n try {\n appendFileSync(LOG_PATH, line)\n } catch {\n // ignore\n }\n // Also emit to console so journald captures it\n if (level === \"error\") {\n console.error(`[meta-governor] ${message}`)\n } else if (level === \"warn\") {\n console.warn(`[meta-governor] ${message}`)\n } else {\n console.log(`[meta-governor] ${message}`)\n }\n}\n",
|
|
16
|
+
"import type { Hooks, Plugin, PluginInput, PluginOptions } from \"@opencode-ai/plugin\"\nimport type {\n AgentmemoryWriteBackend,\n DecisionHandlerOutput,\n MemoryBackends,\n MetaGovernorInput,\n} from \"./types\"\nimport { runGraphSync, trackSession, untrackSession } from \"./graph-sync\"\nimport { runMetaGovernor } from \"./orchestrator\"\nimport { loadOrchestratorConfig, type MetaGovernorPluginConfig } from \"./config\"\nimport { storeDecision, takeAnyDecision, takeDecision } from \"./decision-store\"\nimport { logToFile } from \"./file-logger\"\nimport { statSync } from \"node:fs\"\nimport {\n loadProtocol,\n buildSystemInjection,\n auditToolCall,\n DEFAULT_PROTOCOL_PATH,\n} from \"./protocol-enforcer\"\n\n/**\n * Dependencies required by the MetaGovernor plugin.\n * All are optional - features degrade gracefully when backends are unavailable.\n */\nexport interface MetaGovernorPluginDeps {\n backends?: MemoryBackends\n writeBackend?: AgentmemoryWriteBackend\n providerID?: () => string | undefined\n modelID?: () => string | undefined\n}\n\n// - Helpers\n\nconst ACTION_SEVERITY: Record<string, number> = {\n continue: 0,\n warn: 1,\n escalate: 2,\n stop: 3,\n}\n\nfunction meetsMinAction(\n action: DecisionHandlerOutput[\"action\"],\n minAction: \"warn\" | \"escalate\" | \"stop\",\n): boolean {\n return ACTION_SEVERITY[action] >= ACTION_SEVERITY[minAction]\n}\n\nlet idCounter = 0\nfunction generateID(): string {\n idCounter++\n return `mg-${Date.now()}-${idCounter}`\n}\n\n// - Plugin factory\n\nexport function createMetaGovernorPlugin(\n config: MetaGovernorPluginConfig = {},\n deps: MetaGovernorPluginDeps = {},\n): Plugin {\n // Detect project graph directories at load time\n const cwd = process.cwd()\n const projectHasCodegraph = (() => {\n try { return statSync(`${cwd}/.codegraph`).isDirectory() } catch { return false }\n })()\n const projectHasGraphify = (() => {\n try { return statSync(`${cwd}/graphify-out`).isDirectory() } catch { return false }\n })()\n\n // Initialise graphSync when the module loads\n const graphSyncEnabled = config.graphSync?.enabled !== false\n if (graphSyncEnabled) {\n runGraphSync({\n enabled: true,\n watch: config.graphSync?.watch ?? false,\n autoInstall: config.graphSync?.autoInstall ?? true,\n installTimeoutMs: config.graphSync?.installTimeoutMs ?? 60_000,\n projectDir: cwd,\n }).catch(() => {})\n trackSession(cwd)\n }\n\n // Log startup so the user can see the plugin is loaded\n logToFile(\"info\", \"MetaGovernor plugin loaded\", {\n version: \"0.9.3\",\n cwd,\n projectHasCodegraph,\n projectHasGraphify,\n })\n\n const plugin: Plugin = async (\n _input: PluginInput,\n options?: PluginOptions,\n ): Promise<Hooks> => {\n // 1. Load config from plugin options\n const rawConfig = {\n ...config,\n ...((options?.meta_governor as MetaGovernorPluginConfig) ?? {}),\n }\n const mergedConfig = loadOrchestratorConfig(rawConfig)\n\n // 2. If disabled, return empty hooks\n if (!mergedConfig.enabled) {\n return {}\n }\n\n // 3. Resolve model settings from override or session\n const getProviderID = (): string | undefined =>\n mergedConfig.modelOverride?.providerID ?? deps.providerID?.()\n const getModelID = (): string | undefined =>\n mergedConfig.modelOverride?.modelID ?? deps.modelID?.()\n const getModelLimit = (): number =>\n mergedConfig.modelOverride?.modelLimit ?? 200_000\n\n const providerID = getProviderID() ?? \"unknown\"\n const modelID = getModelID() ?? \"unknown\"\n\n // 4. Load protocol text (best-effort, cached once)\n let systemInjection: string | undefined\n if (mergedConfig.protocolEnforcement.enabled || mergedConfig.protocolEnforcement.injectIntoSystem) {\n const protocolPath = mergedConfig.protocolEnforcement.path ?? DEFAULT_PROTOCOL_PATH\n loadProtocol(protocolPath).then((text: string) => {\n systemInjection = buildSystemInjection(text)\n }).catch((err: unknown) => {\n if (typeof console !== \"undefined\" && mergedConfig.modelOverride?.verbosity !== \"silent\") {\n console.warn(\"[meta-governor] could not load protocol:\", err instanceof Error ? err.message : err)\n }\n })\n }\n\n // 5. Per-session audit state\n type AuditState = {\n memoryToolsUsed: string[]\n hasCodegraphDir: boolean\n hasGraphifyDir: boolean\n oracleInvoked: boolean\n filesChanged: number\n emptyRecall: boolean\n escalationAttempted: boolean\n aftAvailable: boolean\n aftUsed: boolean\n recentToolCalls: string[]\n recentWriteContents: string[]\n memorySaved: boolean\n batchCompletions: number\n }\n const auditSessions = new Map<string, AuditState>()\n\n // Pending protocol violations queue\n const pendingViolations = new Map<string, string[]>()\n\n return {\n // - Tool execute before (protocol audit)\n \"tool.execute.before\": async (\n toolInput: { tool: string; sessionID: string; callID: string },\n ): Promise<void> => {\n if (!mergedConfig.enabled) return\n if (!mergedConfig.protocolEnforcement.auditToolCalls) return\n if (!toolInput.sessionID) return\n\n let state = auditSessions.get(toolInput.sessionID)\n if (!state) {\n state = {\n memoryToolsUsed: [],\n hasCodegraphDir: projectHasCodegraph,\n hasGraphifyDir: projectHasGraphify,\n oracleInvoked: false,\n filesChanged: 0,\n emptyRecall: false,\n escalationAttempted: false,\n aftAvailable: false,\n aftUsed: false,\n recentToolCalls: [],\n recentWriteContents: [],\n memorySaved: false,\n batchCompletions: 0,\n }\n auditSessions.set(toolInput.sessionID, state)\n }\n\n if (systemInjection) {\n console.log(\"[meta-governor] protocol loaded, system injection ready\")\n }\n\n const violations = auditToolCall(toolInput.tool, {}, {\n memoryToolsUsed: state.memoryToolsUsed,\n hasCodegraphDir: state.hasCodegraphDir,\n hasGraphifyDir: state.hasGraphifyDir,\n oracleInvoked: state.oracleInvoked,\n filesChanged: state.filesChanged,\n emptyRecall: state.emptyRecall,\n escalationAttempted: state.escalationAttempted,\n aftAvailable: state.aftAvailable,\n aftUsed: state.aftUsed,\n recentToolCalls: state.recentToolCalls,\n recentWriteContents: state.recentWriteContents,\n memorySaved: state.memorySaved,\n batchCompletions: state.batchCompletions,\n })\n\n if (violations.length > 0) {\n logToFile(\"warn\", `protocol violations on tool ${toolInput.tool}`, violations)\n const existing = pendingViolations.get(toolInput.sessionID) ?? []\n for (const v of violations) {\n existing.push(`[${v.severity.toUpperCase()}] ${v.rule}: ${v.detail}`)\n }\n pendingViolations.set(toolInput.sessionID, existing)\n } else {\n logToFile(\"info\", `audit OK on tool ${toolInput.tool}`)\n }\n },\n\n // - Tool execute after (orchestrator + audit state update)\n \"tool.execute.after\": async (\n toolInput: { tool: string; sessionID: string; callID: string; args: unknown },\n toolOutput: { title: string; output: string; metadata: unknown },\n ): Promise<void> => {\n if (!mergedConfig.enabled) return\n\n const sessionState = auditSessions.get(toolInput.sessionID)\n if (sessionState) {\n sessionState.recentToolCalls = [toolInput.tool].concat(\n sessionState.recentToolCalls,\n ).slice(0, 20)\n\n const writeTools = [\n \"write\", \"edit\", \"edit_block\",\n \"desktop-commander_write_file\", \"desktop-commander_edit_block\",\n ]\n if (writeTools.includes(toolInput.tool)) {\n sessionState.filesChanged++\n const content = (toolOutput.output ?? \"\").slice(0, 500)\n sessionState.recentWriteContents = [content].concat(\n sessionState.recentWriteContents,\n ).slice(0, 3)\n }\n\n const memoryTools = [\n \"agentmemory_memory_recall\", \"agentmemory_memory_smart_search\",\n \"agentmemory_memory_save\", \"ctx_memory\", \"ctx_search\", \"ctx_note\",\n ]\n const isMemoryTool = memoryTools.some((m: string) => toolInput.tool.startsWith(m))\n if (isMemoryTool && !sessionState.memoryToolsUsed.includes(toolInput.tool)) {\n sessionState.memoryToolsUsed.push(toolInput.tool)\n }\n\n if (toolInput.tool.startsWith(\"ctx_memory\")) {\n const out = toolOutput.output ?? \"\"\n if (out.includes(\"saved\") || out.includes(\"written\")) {\n sessionState.memorySaved = true\n }\n }\n\n if (toolInput.tool.startsWith(\"aft_zoom\") || toolInput.tool.startsWith(\"aft_outline\")) {\n sessionState.aftUsed = true\n }\n\n if (toolInput.tool === \"task\" && (toolOutput.output ?? \"\").includes(\"subagent_type=oracle\")) {\n sessionState.oracleInvoked = true\n }\n\n const outLower = (toolOutput.output ?? \"\").toLowerCase()\n if (toolInput.tool.includes(\"recall\") && (outLower.includes(\"returned empty\") || outLower.includes(\"no results\"))) {\n sessionState.emptyRecall = true\n }\n\n if (toolInput.tool === \"todowrite\" && (toolOutput.output ?? \"\").includes(\"completed\")) {\n const matches = (toolOutput.output ?? \"\").match(/\"status\":\"completed\"/g) ?? []\n if (matches.length >= 3) {\n sessionState.batchCompletions++\n }\n }\n }\n\n const orchestratorInput: MetaGovernorInput = {\n sessionID: toolInput.sessionID,\n toolName: toolInput.tool,\n toolOutput: toolOutput.output,\n iteration: 0,\n maxIterations: 10,\n oracleVerified: false,\n noProgress: false,\n filesChanged: 0,\n recentTurnTokens: [],\n deviations: [],\n backends: deps.backends ?? {\n agentmemory: { smartSearch: async () => ({ lessons: [], crystals: [] }) },\n magicContext: { slotList: async () => [] },\n boulderState: { boulderRead: async () => [] },\n },\n writeBackend: deps.writeBackend ?? {\n saveMemory: async () => ({ id: \"\" }),\n saveLesson: async () => ({ id: \"\" }),\n },\n config: mergedConfig,\n ...(getProviderID() ? { providerID: getProviderID() } : {}),\n ...(getModelID() ? { modelID: getModelID() } : {}),\n modelLimit: getModelLimit(),\n }\n\n try {\n const output = await runMetaGovernor(orchestratorInput)\n\n if (mergedConfig.intervention.mode !== \"silent\") {\n const decision = output.decision\n if (\n decision.action !== \"continue\" &&\n meetsMinAction(decision.action, mergedConfig.intervention.minActionForMessage)\n ) {\n storeDecision(toolInput.sessionID, decision)\n }\n }\n } catch {\n // MetaGovernor must NEVER break a tool call\n }\n },\n\n // - Messages transform (injects decisions + protocol violations as synthetic user messages)\n \"experimental.chat.messages.transform\": async (\n _input: {},\n output: { messages: Array<{ info: unknown; parts: unknown[] }> },\n ): Promise<void> => {\n if (!mergedConfig.enabled) return\n if (mergedConfig.intervention.mode !== \"message\") return\n\n // 1. Inject pending protocol violations so the model sees them\n const lastMsg = output.messages[output.messages.length - 1] as { info?: { sessionID?: string } } | undefined\n const violationSessionID = lastMsg?.info?.sessionID\n if (violationSessionID && pendingViolations.has(violationSessionID)) {\n const violations = pendingViolations.get(violationSessionID)!\n if (violations.length > 0) {\n const violationText = `[META-GOVERNOR PROTOCOL VIOLATIONS - YOU MUST COMPLY]\\n\\n${violations.map((v, i) => `${i + 1}. ${v}`).join(\"\\n\")}\\n\\nRemember: use codegraph/graphify for architecture queries, do not grep without trying AFT/codegraph first, no @ts-ignore/as-any, no empty catch, check memory before asking.`\n output.messages.push({\n info: { role: \"user\", agent: \"meta-governor\", synthetic: true },\n parts: [{ type: \"text\", text: violationText, synthetic: true }],\n })\n pendingViolations.delete(violationSessionID)\n logToFile(\"info\", `injected ${violations.length} violation(s) to model`)\n }\n }\n\n // 2. Inject MetaGovernor decision\n const decision = takeAnyDecision()\n if (!decision) return\n if (decision.action === \"continue\") return\n if (!decision.message) return\n if (!meetsMinAction(decision.action, mergedConfig.intervention.minActionForMessage)) return\n\n const textPart = {\n type: \"text\",\n text: `[MetaGovernor] ${decision.message}`,\n synthetic: true,\n }\n\n output.messages.push({\n info: { role: \"user\", agent: \"meta-governor\" },\n parts: [textPart],\n })\n },\n\n // - System transform (protocol injection + system intervention mode)\n \"experimental.chat.system.transform\": async (\n transformInput: { sessionID?: string; model: unknown },\n output: { system: string[] },\n ): Promise<void> => {\n if (!mergedConfig.enabled) return\n\n if (mergedConfig.protocolEnforcement.injectIntoSystem && systemInjection) {\n output.system.push(\n \"\\n### Sisyphus Protocol Enforcement\",\n systemInjection,\n \"---\",\n )\n }\n\n if (mergedConfig.intervention.mode === \"system\" && transformInput.sessionID) {\n const decision = takeDecision(transformInput.sessionID)\n if (decision && decision.action !== \"continue\" && decision.message) {\n if (meetsMinAction(decision.action, mergedConfig.intervention.minActionForMessage)) {\n output.system.push(\n \"\\n[MetaGovernor Intervention]\",\n decision.message,\n \"---\",\n )\n }\n }\n }\n },\n }\n }\n\n return plugin\n}\n",
|
|
16
17
|
"/**\n * Sisyphus Protocol Enforcer — standalone module for the MetaGovernor plugin.\n *\n * Reads the Sisyphus-mandatory protocol from disk, injects a condensed\n * version into the system prompt, and audits tool calls for protocol\n * violations using heuristic detection (no NLP).\n *\n * Public surface:\n * - loadProtocol(path?): Promise<string>\n * - buildSystemInjection(protocolText): string\n * - auditToolCall(toolName, args, context): ProtocolViolation[]\n */\nimport { readFile } from \"node:fs/promises\"\nimport { resolve } from \"node:path\"\nimport { homedir } from \"node:os\"\nimport type { ProtocolViolation } from \"./types\"\n\n// ─── Default protocol path ───────────────────────────────────────\n\nexport const DEFAULT_PROTOCOL_PATH = resolve(\n homedir(),\n \".config\",\n \"opencode\",\n \"sisyphus-mandatory\",\n \"sisyphus-mandatory.md\",\n)\n\n// ─── loadProtocol ────────────────────────────────────────────────\n\nexport async function loadProtocol(path?: string): Promise<string> {\n const resolvedPath = path ?? DEFAULT_PROTOCOL_PATH\n return await readFile(resolvedPath, \"utf-8\")\n}\n\n// ─── buildSystemInjection ────────────────────────────────────────\n\nexport function buildSystemInjection(_protocolText: string): string {\n const lines: string[] = [\n \"\",\n \"## Sisyphus Protocol Enforcement\",\n \"\",\n \"You MUST follow these Sisyphus protocol rules:\",\n \"\",\n \"1. **Pre-response Memory Check**: Before any action, read `<project-memory>` and `<session-history-since>` blocks in context. Cite `<memory id>` for any fact used from memory. Do not ask questions whose answers are in those blocks.\",\n \"\",\n \"2. **Codebase Graph First**: Before using grep/glob/read for architecture or symbol queries, check whether `.codegraph/` or `graphify-out/` exists. If so, use codegraph/graphify tools first. Fall back to AFT (aft_zoom, aft_outline), then grep/read only as last resort.\",\n \"\",\n \"3. **Tool Routing Table**: Match common intents to the correct tool:\",\n ' - \"we did this before\" / \"you should know\" → `agentmemory_memory_recall`',\n ' - \"the usual\" / \"as configured\" → `ctx_memory(action=\"list\")`',\n \" - Starting a task that resembles a previous one → `agentmemory_memory_smart_search`\",\n ' - \"what changed\" / \"history\" → `ctx_search`',\n \" - Before asking the user a clarifying question → `agentmemory_memory_recall` first\",\n \" - Working note for THIS session only → `ctx_note`\",\n \" - Save durable insight/decision/rule → `ctx_memory`\",\n \"\",\n ]\n\n // Detect sections in the protocol text to decide which rules to emit\n if (/\\boracle\\b/i.test(_protocolText)) {\n lines.push(\n \"4. **Post-task Oracle Verification**: If files touched >= 3 OR any INVOKE trigger matches, invoke Oracle with the exact format:\",\n ' `task(subagent_type=\"oracle\", run_in_background=false, prompt=\"Verify: ...\")`',\n \" - INVOKE triggers: created 1+ new file, modified abstraction, touched security/auth paths, modified DB/persistence, modified CI/CD, added/removed dependency, modified perf-critical path, todo had 2+ completed items.\",\n \" - SKIP only when: files touched <= 2, no new file, no dependency change, single-step task, change is typo/comment/rename only.\",\n \" - Verdict: PASS → done. FAIL/CONDITIONAL → fix and re-invoke. Max 3 invocations.\",\n \" - Cost: Max 3 oracle invocations per task. Skip rate: Must NOT skip Oracle on 2+ file change.\",\n \"\",\n )\n }\n\n lines.push(\n \"5. **Parallel Query Rule**: Fire independent tool queries in the same turn. Do NOT serialize independent memory/context queries.\",\n \"\",\n \"6. **Empty-Result Escalation**: On empty `agentmemory_memory_recall`, fire `agentmemory_memory_smart_search` + `ctx_search` + `agentmemory_memory_export` before asking the user.\",\n \"\",\n \"7. **Hard Rules (No Exceptions)**:\",\n \" - Do NOT ask 'where is X?' if memory or session record already contains it.\",\n \" - Do NOT claim 'I don't know' before firing at least 2 different recall tools.\",\n \" - Do NOT re-issue clarifying questions whose answer is in `<project-memory>` or `<session-history-since>`.\",\n \" - Do NOT use grep/find when aft_outline would answer the structure question.\",\n \" - Do NOT duplicate a memory in both `agentmemory_memory_save` and `ctx_memory` — pick ONE.\",\n \" - Do NOT suppress type errors with `as any`, `@ts-ignore`, or `@ts-expect-error`.\",\n \" - Do NOT leave empty catch blocks `catch(e) {}`.\",\n \" - Do NOT start a fresh agent via `task()` when `task(task_id=\\\"ses_...\\\")` (continuation) exists — use continuation IDs.\",\n \" - Do NOT batch-complete todos — mark each one `completed` immediately after finishing.\",\n \" - Do NOT skip creating todos for multi-step tasks.\",\n \"\",\n \"8. **Self-Check Before Responding**:\",\n \" - Verify you read `<project-memory>` and `<session-history-since>` blocks.\",\n \" - Verify you cited `<memory id>` for any fact used from memory.\",\n \" - Verify you did not ask a question whose answer is in those blocks.\",\n \" - For multi-file changes, verify Oracle was invoked.\",\n \" - For codebase exploration, verify codegraph/graphify was tried before grep/read.\",\n \" - After discovering something non-obvious, save it with `ctx_memory` so future sessions benefit.\",\n \"\",\n )\n\n return lines.join(\"\\n\")\n}\n\n// ─── Audit context ────────────────────────────────────────────────\n\nexport interface AuditContext {\n /** Whether any memory tools have been used in this session */\n memoryToolsUsed: readonly string[]\n /** Whether .codegraph/ directory exists in the project */\n hasCodegraphDir: boolean\n /** Whether graphify-out/ directory exists in the project */\n hasGraphifyDir: boolean\n /** Whether Oracle has been invoked in this session */\n oracleInvoked: boolean\n /** Number of files changed so far in this session */\n filesChanged: number\n /** Whether any memory recall tool returned empty results */\n emptyRecall: boolean\n /** Whether any ctx_search or smart_search was attempted after empty recall */\n escalationAttempted: boolean\n/** Whether AFT tools (aft_zoom, aft_outline) are available */\n aftAvailable?: boolean\n/** Whether AFT tools have been used in this session */\n aftUsed?: boolean\n/** Tool names called in this session so far (latest first) */\n recentToolCalls?: readonly string[]\n/** File write/edit contents (last 3 for pattern detection) */\n recentWriteContents?: readonly string[]\n/** Whether ctx_memory save has been used to persist discoveries */\n memorySaved?: boolean\n/** Number of times todo was batch-completed in this session */\n batchCompletions?: number\n}\n\n// ─── auditToolCall ────────────────────────────────────────────────\n\nexport function auditToolCall(\n toolName: string,\n args: unknown,\n context: AuditContext,\n): ProtocolViolation[] {\n const violations: ProtocolViolation[] = []\n const recentToolCalls = context.recentToolCalls ?? []\n const aftAvailable = context.aftAvailable ?? false\n const aftUsed = context.aftUsed ?? false\n const recentWriteContents = context.recentWriteContents ?? []\n const memorySaved = context.memorySaved ?? false\n const batchCompletions = context.batchCompletions ?? 0\n // ── Rule 0.5: Codebase Graph First ──────────────────────────────\n // grep/glob/read for architecture/symbol queries should use codegraph/graphify/AFT first\n if (\n (toolName === \"grep\" || toolName === \"glob\") &&\n (context.hasCodegraphDir || context.hasGraphifyDir)\n ) {\n const graphType = context.hasCodegraphDir ? \".codegraph\" : \"graphify-out\"\n violations.push({\n rule: \"codebase-graph-first\",\n tool: toolName,\n severity: \"media\",\n detail: `Used ${toolName} when ${graphType} exists — should use codegraph/graphify first for architecture and symbol queries.`,\n })\n }\n\n // ── Rule: AFT First (before grep/read for structure queries) ──\n if (\n (toolName === \"read\" || toolName === \"grep\") &&\n aftAvailable &&\n !aftUsed\n ) {\n violations.push({\n rule: \"aft-first\",\n tool: toolName,\n severity: \"media\",\n detail:\n `AFT tools (aft_outline, aft_zoom) are available but were not tried before using ${toolName}. ` +\n \"Use aft_outline for structure discovery, aft_zoom for symbol source, before falling back to grep/read.\",\n })\n }\n\n // ── Rule: grep used when aft_outline would answer structure ─────\n if (toolName === \"grep\" && aftAvailable && !aftUsed && !context.hasCodegraphDir && !context.hasGraphifyDir) {\n violations.push({\n rule: \"grep-without-aft\",\n tool: toolName,\n severity: \"leve\",\n detail:\n \"Used grep before checking if aft_outline would answer the structure question. grep is a last resort after graph tools and AFT.\",\n })\n }\n\n // ── Rule: Continuation ID discipline ────────────────────────────\n // Starting fresh with task() instead of continuing via task(task_id=\"ses_...\")\n if (toolName === \"task\" && args && typeof args === \"object\") {\n const taskArgs = args as Record<string, unknown>\n // If task() has no task_id but has a prompt that resembles a follow-up\n if (!taskArgs.task_id && typeof taskArgs.prompt === \"string\" && recentToolCalls.length > 3) {\n // Heuristic: if we have more than 3 tool calls in this session and the agent\n // is starting a new task without continuation ID, flag it\n violations.push({\n rule: \"continuation-discipline\",\n tool: toolName,\n severity: \"leve\",\n detail:\n \"Started a new task() without task(task_id=\\\"ses_...\\\") continuation ID. \" +\n \"Use task_id to preserve the subagent's full context and save tokens.\",\n })\n }\n }\n\n // ── Rule: No type suppression patterns ─────────────────────────\n const writeTools = [\"write\", \"edit\", \"edit_block\", \"desktop-commander_edit_block\", \"desktop-commander_write_file\"]\n if (writeTools.includes(toolName)) {\n const content = typeof args === \"object\" && args !== null\n ? JSON.stringify(args)\n : String(args ?? \"\")\n\n const tsIgnore = /@ts-ignore|@ts-expect-error/.test(content)\n const anyCast = /\\bas any\\b/.test(content)\n\n if (tsIgnore && anyCast) {\n violations.push({\n rule: \"no-type-suppression\",\n tool: toolName,\n severity: \"grave\",\n detail:\n `File write contains both @ts-ignore/@ts-expect-error AND 'as any' — double type suppression. ` +\n `Both are forbidden by the Sisyphus protocol.`,\n })\n } else if (tsIgnore) {\n violations.push({\n rule: \"no-type-suppression\",\n tool: toolName,\n severity: \"media\",\n detail:\n `File write contains @ts-ignore or @ts-expect-error — both are forbidden. ` +\n `Fix the underlying type error instead.`,\n })\n } else if (anyCast) {\n violations.push({\n rule: \"no-type-suppression\",\n tool: toolName,\n severity: \"media\",\n detail:\n `File write contains 'as any' — type suppression forbidden. ` +\n `Use proper type narrowing instead.`,\n })\n }\n }\n\n // ── Rule: No empty catch blocks ────────────────────────────────\n if (writeTools.includes(toolName)) {\n const content = typeof args === \"object\" && args !== null\n ? JSON.stringify(args)\n : String(args ?? \"\")\n\n if (/catch\\s*\\(\\s*\\w+\\s*\\)\\s*\\{\\s*\\}/.test(content)) {\n violations.push({\n rule: \"no-empty-catch\",\n tool: toolName,\n severity: \"media\",\n detail:\n \"Empty catch block detected — `catch(e) {}` is forbidden. \" +\n \"Log the error or handle it gracefully.\",\n })\n }\n }\n\n // ── Rule: Memory discovery not saved ────────────────────────────\n // After reading/searching files, if ctx_memory wasn't used to save discoveries\n const discoveryTools = [\"grep\", \"glob\", \"read\", \"aft_zoom\", \"aft_outline\", \"codegraph_explore\", \"graphify query\"]\n if (discoveryTools.includes(toolName) && recentToolCalls.length >= 2) {\n // Check the last few tools for ctx_memory usage\n const lastFew = recentToolCalls.slice(0, 5)\n if (!lastFew.some((t) => t.startsWith(\"ctx_memory\")) && !memorySaved) {\n violations.push({\n rule: \"save-discovery-to-memory\",\n tool: toolName,\n severity: \"leve\",\n detail:\n `Used ${toolName} to discover code but ctx_memory was not used afterwards. ` +\n \"Save non-obvious findings with ctx_memory so future sessions benefit.\",\n })\n }\n }\n\n // ── Rule: Batch todo completion ─────────────────────────────────\n // Detected by caller passing batchCompletions info\n // The orchestrator/provider sets batchCompletions based on its own monitoring\n if (batchCompletions > 0 && toolName !== \"todowrite\") {\n violations.push({\n rule: \"no-batch-todo-completion\",\n tool: toolName,\n severity: \"leve\",\n detail:\n \"Batch todo completion detected. Each todo must be marked `completed` immediately \" +\n \"after finishing — do not batch-complete multiple items.\",\n })\n }\n\n // ── Rule: Session continuity (ctx_reduce discipline) ────────────\n if (toolName === \"ctx_reduce\" && args && typeof args === \"object\") {\n const dropArg = (args as Record<string, unknown>).drop\n if (typeof dropArg === \"string\" && /^\\d+-\\d+$/i.test(dropArg.trim())) {\n const [startStr, endStr] = dropArg.trim().split(\"-\").map(Number)\n if (!isNaN(startStr) && !isNaN(endStr) && (endStr - startStr) > 10) {\n violations.push({\n rule: \"ctx-reduce-discipline\",\n tool: toolName,\n severity: \"leve\",\n detail:\n `Dropped a large range (${dropArg}) with ctx_reduce. The protocol requires reviewing each tag before dropping. ` +\n `Use smaller targeted drops instead of blanket ranges.`,\n })\n }\n }\n }\n\n // ── Rule: Step 3: Empty-result escalation ───────────────────────\n if (context.emptyRecall && !context.escalationAttempted) {\n if (toolName.startsWith(\"question\") || toolName === \"ask\") {\n violations.push({\n rule: \"empty-result-escalation\",\n tool: toolName,\n severity: \"grave\",\n detail:\n \"Memory recall returned empty but agent did not fire smart_search + ctx_search + export \" +\n \"before asking the user. Steps 1-3 of empty-result escalation protocol are mandatory.\",\n })\n }\n }\n\n // ── Rule: Memory first before asking questions ──────────────────\n const memoryToolPatterns = [\n \"agentmemory_memory_recall\", \"agentmemory_memory_smart_search\",\n \"agentmemory_memory_save\", \"ctx_memory\", \"ctx_search\", \"ctx_note\",\n ]\n const hasUsedMemory = context.memoryToolsUsed.some((t) =>\n memoryToolPatterns.some((p) => t.startsWith(p)),\n )\n\n if (!hasUsedMemory && (toolName.startsWith(\"question\") || toolName === \"ask\")) {\n violations.push({\n rule: \"memory-first\",\n tool: toolName,\n severity: \"grave\",\n detail:\n \"Asked a question without first querying memory (agentmemory or ctx_memory). \" +\n \"Must fire agentmemory_memory_recall or ctx_memory before asking the user.\",\n })\n }\n\n // ── Oracle rule: after multi-file changes ───────────────────────\n if (context.filesChanged >= 3 && !context.oracleInvoked) {\n if (\n toolName !== \"task\" ||\n !args || typeof args !== \"object\" ||\n !(\"subagent_type\" in (args as Record<string, unknown>))\n ) {\n violations.push({\n rule: \"oracle-verification\",\n tool: toolName,\n severity: \"media\",\n detail:\n `Files changed (${context.filesChanged}) >= 3 but Oracle was not invoked. ` +\n \"The POST-TASK ORACLE VERIFICATION protocol requires Oracle invocation on multi-file changes.\",\n })\n }\n }\n\n return violations\n}\n",
|
|
17
|
-
"import type { Hooks, Plugin, PluginInput, PluginOptions } from \"@opencode-ai/plugin\"\nimport type {\n AgentmemoryWriteBackend,\n DecisionHandlerOutput,\n MemoryBackends,\n MetaGovernorInput,\n} from \"./types\"\nimport { runGraphSync, trackSession, untrackSession } from \"./graph-sync\"\nimport { runMetaGovernor } from \"./orchestrator\"\nimport { loadOrchestratorConfig, type MetaGovernorPluginConfig } from \"./config\"\nimport { storeDecision, takeAnyDecision, takeDecision } from \"./decision-store\"\nimport { logToFile } from \"./file-logger\"\nimport {\n loadProtocol,\n buildSystemInjection,\n auditToolCall,\n DEFAULT_PROTOCOL_PATH,\n} from \"./protocol-enforcer\"\n\n/**\n * Dependencies required by the MetaGovernor plugin.\n * All are optional - features degrade gracefully when backends are unavailable.\n */\nexport interface MetaGovernorPluginDeps {\n backends?: MemoryBackends\n writeBackend?: AgentmemoryWriteBackend\n providerID?: () => string | undefined\n modelID?: () => string | undefined\n}\n\n// - Helpers\n\nconst ACTION_SEVERITY: Record<string, number> = {\n continue: 0,\n warn: 1,\n escalate: 2,\n stop: 3,\n}\n\nfunction meetsMinAction(\n action: DecisionHandlerOutput[\"action\"],\n minAction: \"warn\" | \"escalate\" | \"stop\",\n): boolean {\n return ACTION_SEVERITY[action] >= ACTION_SEVERITY[minAction]\n}\n\nlet idCounter = 0\nfunction generateID(): string {\n idCounter++\n return `mg-${Date.now()}-${idCounter}`\n}\n\n// - Plugin factory\n\nexport function createMetaGovernorPlugin(\n config: MetaGovernorPluginConfig = {},\n deps: MetaGovernorPluginDeps = {},\n): Plugin {\n // Initialise graphSync when the module loads (before any session)\n const graphSyncEnabled = config.graphSync?.enabled !== false\n if (graphSyncEnabled) {\n const cwd = process.cwd()\n runGraphSync({\n enabled: true,\n watch: config.graphSync?.watch ?? false,\n autoInstall: config.graphSync?.autoInstall ?? true,\n installTimeoutMs: config.graphSync?.installTimeoutMs ?? 60_000,\n projectDir: cwd,\n }).catch(() => {})\n trackSession(cwd)\n }\n\n // Log startup so the user can see the plugin is loaded\n logToFile(\"info\", \"MetaGovernor plugin loaded\", {\n version: \"0.9.0\",\n graphSync: config.graphSync,\n intervention: config.intervention,\n protocolEnforcement: config.protocolEnforcement,\n })\n\n const plugin: Plugin = async (\n _input: PluginInput,\n options?: PluginOptions,\n ): Promise<Hooks> => {\n // 1. Load config from plugin options\n // 1. Load config from plugin options\n const rawConfig = {\n ...config,\n ...((options?.meta_governor as MetaGovernorPluginConfig) ?? {}),\n }\n const mergedConfig = loadOrchestratorConfig(rawConfig)\n\n // 2. If disabled, return empty hooks\n if (!mergedConfig.enabled) {\n return {}\n }\n\n // 3. Resolve model settings from override or session\n const getProviderID = (): string | undefined =>\n mergedConfig.modelOverride?.providerID ?? deps.providerID?.()\n const getModelID = (): string | undefined =>\n mergedConfig.modelOverride?.modelID ?? deps.modelID?.()\n const getModelLimit = (): number =>\n mergedConfig.modelOverride?.modelLimit ?? 200_000\n\n const providerID = getProviderID() ?? \"unknown\"\n const modelID = getModelID() ?? \"unknown\"\n\n // 4. Load protocol text (best-effort, cached once)\n let systemInjection: string | undefined\n if (mergedConfig.protocolEnforcement.enabled || mergedConfig.protocolEnforcement.injectIntoSystem) {\n const protocolPath = mergedConfig.protocolEnforcement.path ?? DEFAULT_PROTOCOL_PATH\n loadProtocol(protocolPath).then((text) => {\n systemInjection = buildSystemInjection(text)\n }).catch((err) => {\n if (typeof console !== \"undefined\" && mergedConfig.modelOverride?.verbosity !== \"silent\") {\n console.warn(\"[meta-governor] could not load protocol:\", err instanceof Error ? err.message : err)\n }\n })\n }\n\n // 5. Per-session audit state\n type AuditState = {\n memoryToolsUsed: string[]\n hasCodegraphDir: boolean\n hasGraphifyDir: boolean\n oracleInvoked: boolean\n filesChanged: number\n emptyRecall: boolean\n escalationAttempted: boolean\n aftAvailable: boolean\n aftUsed: boolean\n recentToolCalls: string[]\n recentWriteContents: string[]\n memorySaved: boolean\n batchCompletions: number\n }\n const auditSessions = new Map<string, AuditState>()\n\n // Pending protocol violations queue: key=sessionID, value=violations to surface to the model\n const pendingViolations = new Map<string, string[]>()\n return {\n // - Tool execute before (protocol audit)\n \"tool.execute.before\": async (\n toolInput: { tool: string; sessionID: string; callID: string },\n ): Promise<void> => {\n if (!mergedConfig.enabled) return\n if (!mergedConfig.protocolEnforcement.auditToolCalls) return\n if (!toolInput.sessionID) return\n\n let state = auditSessions.get(toolInput.sessionID)\n if (!state) {\n state = {\n memoryToolsUsed: [],\n hasCodegraphDir: false,\n hasGraphifyDir: false,\n oracleInvoked: false,\n filesChanged: 0,\n emptyRecall: false,\n escalationAttempted: false,\n aftAvailable: false,\n aftUsed: false,\n recentToolCalls: [],\n recentWriteContents: [],\n memorySaved: false,\n batchCompletions: 0,\n }\n auditSessions.set(toolInput.sessionID, state)\n }\n\n if (systemInjection) {\n console.log(\"[meta-governor] protocol loaded, system injection ready\")\n }\n\n const violations = auditToolCall(toolInput.tool, {}, {\n memoryToolsUsed: state.memoryToolsUsed,\n hasCodegraphDir: state.hasCodegraphDir,\n hasGraphifyDir: state.hasGraphifyDir,\n oracleInvoked: state.oracleInvoked,\n filesChanged: state.filesChanged,\n emptyRecall: state.emptyRecall,\n escalationAttempted: state.escalationAttempted,\n aftAvailable: state.aftAvailable,\n aftUsed: state.aftUsed,\n recentToolCalls: state.recentToolCalls,\n recentWriteContents: state.recentWriteContents,\n memorySaved: state.memorySaved,\n batchCompletions: state.batchCompletions,\n })\n\n if (violations.length > 0) {\n // Log to file + console for visibility\n logToFile(\"warn\", `protocol violations on tool ${toolInput.tool}`, violations)\n // Queue violations so the next messages.transform surfaces them to the model\n const existing = pendingViolations.get(toolInput.sessionID) ?? []\n for (const v of violations) {\n existing.push(`[${v.severity.toUpperCase()}] ${v.rule}: ${v.detail}`)\n }\n pendingViolations.set(toolInput.sessionID, existing)\n } else {\n logToFile(\"info\", `audit OK on tool ${toolInput.tool}`)\n }\n },\n // - Tool execute after (orchestrator + audit state update)\n // - Tool execute after (orchestrator + audit state update)\n \"tool.execute.after\": async (\n toolInput: { tool: string; sessionID: string; callID: string; args: unknown },\n toolOutput: { title: string; output: string; metadata: unknown },\n ): Promise<void> => {\n if (!mergedConfig.enabled) return\n\n const sessionState = auditSessions.get(toolInput.sessionID)\n if (sessionState) {\n sessionState.recentToolCalls = [toolInput.tool].concat(\n sessionState.recentToolCalls,\n ).slice(0, 20)\n\n const writeTools = [\n \"write\", \"edit\", \"edit_block\",\n \"desktop-commander_write_file\", \"desktop-commander_edit_block\",\n ]\n if (writeTools.includes(toolInput.tool)) {\n sessionState.filesChanged++\n const content = (toolOutput.output ?? \"\").slice(0, 500)\n sessionState.recentWriteContents = [content].concat(\n sessionState.recentWriteContents,\n ).slice(0, 3)\n }\n\n const memoryTools = [\n \"agentmemory_memory_recall\", \"agentmemory_memory_smart_search\",\n \"agentmemory_memory_save\", \"ctx_memory\", \"ctx_search\", \"ctx_note\",\n ]\n const isMemoryTool = memoryTools.some((m) => toolInput.tool.startsWith(m))\n if (isMemoryTool && !sessionState.memoryToolsUsed.includes(toolInput.tool)) {\n sessionState.memoryToolsUsed.push(toolInput.tool)\n }\n\n if (toolInput.tool.startsWith(\"ctx_memory\")) {\n const out = toolOutput.output ?? \"\"\n if (out.includes(\"saved\") || out.includes(\"written\")) {\n sessionState.memorySaved = true\n }\n }\n\n if (toolInput.tool.startsWith(\"aft_zoom\") || toolInput.tool.startsWith(\"aft_outline\")) {\n sessionState.aftUsed = true\n }\n\n if (toolInput.tool === \"task\" && (toolOutput.output ?? \"\").includes(\"subagent_type=oracle\")) {\n sessionState.oracleInvoked = true\n }\n\n const outLower = (toolOutput.output ?? \"\").toLowerCase()\n if (toolInput.tool.includes(\"recall\") && (outLower.includes(\"returned empty\") || outLower.includes(\"no results\"))) {\n sessionState.emptyRecall = true\n }\n\n if (toolInput.tool === \"todowrite\" && (toolOutput.output ?? \"\").includes(\"completed\")) {\n const matches = (toolOutput.output ?? \"\").match(/\"status\":\"completed\"/g) ?? []\n if (matches.length >= 3) {\n sessionState.batchCompletions++\n }\n }\n }\n\n const orchestratorInput: MetaGovernorInput = {\n sessionID: toolInput.sessionID,\n toolName: toolInput.tool,\n toolOutput: toolOutput.output,\n iteration: 0,\n maxIterations: 10,\n oracleVerified: false,\n noProgress: false,\n filesChanged: 0,\n recentTurnTokens: [],\n deviations: [],\n backends: deps.backends ?? {\n agentmemory: { smartSearch: async () => ({ lessons: [], crystals: [] }) },\n magicContext: { slotList: async () => [] },\n boulderState: { boulderRead: async () => [] },\n },\n writeBackend: deps.writeBackend ?? {\n saveMemory: async () => ({ id: \"\" }),\n saveLesson: async () => ({ id: \"\" }),\n },\n config: mergedConfig,\n ...(getProviderID() ? { providerID: getProviderID() } : {}),\n ...(getModelID() ? { modelID: getModelID() } : {}),\n modelLimit: getModelLimit(),\n }\n\n try {\n const output = await runMetaGovernor(orchestratorInput)\n\n if (mergedConfig.intervention.mode !== \"silent\") {\n const decision = output.decision\n if (\n decision.action !== \"continue\" &&\n meetsMinAction(decision.action, mergedConfig.intervention.minActionForMessage)\n ) {\n storeDecision(toolInput.sessionID, decision)\n }\n }\n } catch {\n // MetaGovernor must NEVER break a tool call\n }\n },\n\n // - Messages transform (injects decisions + protocol violations as synthetic user messages)\n \"experimental.chat.messages.transform\": async (\n _input: {},\n output: { messages: Array<{ info: unknown; parts: unknown[] }> },\n ): Promise<void> => {\n if (!mergedConfig.enabled) return\n if (mergedConfig.intervention.mode !== \"message\") return\n\n // 1. Inject pending protocol violations so the model sees them\n const lastMsg = output.messages[output.messages.length - 1] as { info?: { sessionID?: string } } | undefined\n const violationSessionID = lastMsg?.info?.sessionID\n if (violationSessionID && pendingViolations.has(violationSessionID)) {\n const violations = pendingViolations.get(violationSessionID)!\n if (violations.length > 0) {\n const violationText = `[META-GOVERNOR PROTOCOL VIOLATIONS - YOU MUST COMPLY]\\n\\n${violations.map((v, i) => `${i + 1}. ${v}`).join(\"\\n\")}\\n\\nRemember: use codegraph/graphify for architecture queries, do not grep without trying AFT/codegraph first, no @ts-ignore/as-any, no empty catch, check memory before asking.`\n output.messages.push({\n info: { role: \"user\", agent: \"meta-governor\", synthetic: true },\n parts: [{ type: \"text\", text: violationText, synthetic: true }],\n })\n pendingViolations.delete(violationSessionID)\n logToFile(\"info\", `injected ${violations.length} violation(s) to model`)\n }\n }\n\n // 2. Inject MetaGovernor decision\n const decision = takeAnyDecision()\n if (!decision) return\n if (decision.action === \"continue\") return\n if (!decision.message) return\n if (!meetsMinAction(decision.action, mergedConfig.intervention.minActionForMessage)) return\n\n const textPart = {\n type: \"text\",\n text: `[MetaGovernor] ${decision.message}`,\n synthetic: true,\n }\n\n output.messages.push({\n info: { role: \"user\", agent: \"meta-governor\" },\n parts: [textPart],\n })\n },\n \"experimental.chat.system.transform\": async (\n transformInput: { sessionID?: string; model: unknown },\n output: { system: string[] },\n ): Promise<void> => {\n if (!mergedConfig.enabled) return\n\n if (mergedConfig.protocolEnforcement.injectIntoSystem && systemInjection) {\n output.system.push(\n \"\\n### Sisyphus Protocol Enforcement\",\n systemInjection,\n \"---\",\n )\n }\n\n if (mergedConfig.intervention.mode === \"system\" && transformInput.sessionID) {\n const decision = takeDecision(transformInput.sessionID)\n if (decision && decision.action !== \"continue\" && decision.message) {\n if (meetsMinAction(decision.action, mergedConfig.intervention.minActionForMessage)) {\n output.system.push(\n \"\\n[MetaGovernor Intervention]\",\n decision.message,\n \"---\",\n )\n }\n }\n }\n },\n }\n }\n\n return plugin\n}\n",
|
|
18
18
|
"/**\n * Post-Repair Recorder for MetaGovernor — PR 9 of 9.\n *\n * After each recovery hook repairs an error, this module records the\n * outcome into agentmemory. This ensures the MetaGovernor learns from\n * recovery attempts across sessions.\n *\n * Architecture invariants:\n * - DI: AgentmemoryWriteBackend injected via function parameter.\n * - No-op when backend is null (graceful degradation).\n * - Bypasses observeAndLearn() to preserve custom severity/category.\n * - Success → leve deviation (low severity, lesson saved for pattern).\n * - Failure → grave deviation (high severity, lesson saved as bug).\n */\n\nimport type {\n AgentmemoryWriteBackend,\n ClosedLoopConfig,\n Decision,\n Deviation,\n LearnFromOutcomeOutput,\n LessonLearned,\n MemoryDecision,\n} from \"./types\"\nimport { defaultClosedLoopConfig } from \"./closed-loop-learning\"\n\n/**\n * Outcome of a recovery hook repair attempt.\n */\nexport interface RecoveryOutcome {\n /** Error code or category (e.g. \"TOOL_TIMEOUT\", \"JSON_PARSE_ERROR\"). */\n readonly errorCode: string\n /** Recovery strategy used (e.g. \"retry\", \"fallback\", \"compact\"). */\n readonly fixStrategy: string\n /** Whether the repair succeeded. */\n readonly success: boolean\n /** Session ID where the repair happened. */\n readonly sessionID: string\n /** Directory context. */\n readonly directory: string\n /** Files changed during the repair, if any. */\n readonly filesChanged?: readonly string[]\n /** Additional context about the error. */\n readonly context?: string\n}\n\n/**\n * Build a Decision from a recovery outcome.\n *\n * Success → positive score, \"continue\" action.\n * Failure → negative score, \"warn\" action with escalation to oracle.\n */\nfunction buildDecisionFromRecovery(outcome: RecoveryOutcome): Decision {\n const deviation: Deviation = {\n severity: outcome.success ? \"leve\" : \"grave\",\n category: `recovery:${outcome.fixStrategy}`,\n detail: `${outcome.errorCode}: ${outcome.context ?? \"no context\"}`,\n }\n\n return {\n action: outcome.success ? \"continue\" : \"warn\",\n score: outcome.success ? 0.5 : -0.5,\n reasoning: `Recovery ${outcome.success ? \"succeeded\" : \"failed\"}: ${outcome.fixStrategy} for ${outcome.errorCode}`,\n evidence: [\n {\n source: \"deviation-detector\",\n value: deviation.detail,\n confidence: 1,\n weight: outcome.success ? 0.3 : 0.8,\n },\n ],\n shouldEscalateTo: outcome.success ? null : \"oracle\",\n }\n}\n\n/** Severity ordering for threshold comparison. */\nconst SEVERITY_ORDER: Record<string, number> = {\n leve: 0,\n media: 1,\n grave: 2,\n}\n\n/**\n * Check if any deviation meets the severity threshold.\n */\nfunction severityMeetsThreshold(\n deviations: readonly Deviation[],\n threshold: ClosedLoopConfig[\"minSeverityToLearn\"],\n): boolean {\n const minOrder = SEVERITY_ORDER[threshold] ?? 0\n return deviations.some((d) => (SEVERITY_ORDER[d.severity] ?? 0) >= minOrder)\n}\n\n/**\n * Record a recovery outcome to agentmemory.\n *\n * This bypasses observeAndLearn() to preserve custom severity and category\n * from the recovery outcome (observeAndLearn hardcodes severity: \"media\").\n *\n * When `writeBackend` is null, this is a silent no-op.\n */\nexport async function recordRecovery(\n outcome: RecoveryOutcome,\n writeBackend: AgentmemoryWriteBackend | null,\n options?: {\n config?: ClosedLoopConfig\n },\n): Promise<LearnFromOutcomeOutput | null> {\n if (!writeBackend) {\n return null\n }\n\n const config = options?.config ?? defaultClosedLoopConfig()\n const decision = buildDecisionFromRecovery(outcome)\n\n // Config disabled → no-op\n if (!config.enabled) {\n return { lessonSaved: null, decisionSaved: null, reason: \"closed-loop learning disabled\" }\n }\n\n // Build deviations with custom severity/category (bypass observeAndLearn)\n const deviations: Deviation[] = [{\n severity: outcome.success ? \"leve\" : \"grave\",\n category: `recovery:${outcome.fixStrategy}`,\n detail: `${outcome.errorCode}: ${outcome.context ?? \"no context\"}`,\n }]\n\n let lessonSaved: LessonLearned | null = null\n let decisionSaved: MemoryDecision | null = null\n\n // Save decision record if enabled\n if (config.saveDecisions) {\n const decisionRecord: MemoryDecision = {\n id: `D-${Math.abs(`${outcome.sessionID}-${decision.action}-${Date.now()}`.split(\"\").reduce((a, c) => ((a << 5) - a + c.charCodeAt(0)) | 0, 0)).toString(36)}`,\n timestampISO: new Date().toISOString(),\n action: decision.action,\n score: decision.score,\n reasoning: decision.reasoning,\n sessionID: outcome.sessionID,\n directory: outcome.directory,\n deviations: deviations.map((d) => ({\n severity: d.severity,\n category: d.category,\n detail: d.detail,\n })),\n }\n\n try {\n await writeBackend.saveMemory({\n content: `Decision: ${decision.action} (score ${decision.score.toFixed(2)}). ${decision.reasoning}`,\n concepts: [\"meta-governor\", \"decision\", decision.action, ...deviations.map((d) => d.category)],\n type: \"fact\",\n files: [...(outcome.filesChanged ?? [])],\n })\n decisionSaved = decisionRecord\n } catch {\n // Backend failure is non-fatal — degrade silently\n }\n }\n\n // Save lesson if deviations meet severity threshold\n if (severityMeetsThreshold(deviations, config.minSeverityToLearn)) {\n const concepts = [...new Set(deviations.flatMap((d) => [d.category, d.severity]))]\n const deviationSummary = deviations\n .map((d) => `[${d.severity}] ${d.category}: ${d.detail}`)\n .join(\"; \")\n const content = `Action \"${decision.action}\" (score ${decision.score.toFixed(2)}) after deviations: ${deviationSummary}. Reasoning: ${decision.reasoning}`\n\n try {\n const result = await writeBackend.saveLesson({\n content,\n context: `session:${outcome.sessionID} dir:${outcome.directory}`,\n confidence: Math.max(0.3, Math.min(0.8, Math.abs(decision.score))),\n tags: concepts,\n })\n\n lessonSaved = {\n id: result.id,\n title: `${decision.action} after ${deviations[0]?.category ?? \"recovery\"}`,\n content,\n type: \"pattern\",\n concepts,\n confidence: Math.max(0.3, Math.min(0.8, Math.abs(decision.score))),\n files: [...(outcome.filesChanged ?? [])],\n sessionID: outcome.sessionID,\n }\n } catch {\n // Backend failure is non-fatal — degrade silently\n }\n }\n\n // Determine reason\n const reasons: string[] = []\n if (decisionSaved) reasons.push(\"decision saved\")\n if (lessonSaved) {\n reasons.push(\"lesson saved\")\n } else if (!severityMeetsThreshold(deviations, config.minSeverityToLearn)) {\n reasons.push(\"severity below threshold\")\n }\n if (!decisionSaved && !lessonSaved && !reasons.length) {\n reasons.push(\"no saveable content\")\n }\n\n return {\n lessonSaved,\n decisionSaved,\n reason: reasons.join(\"; \") || \"no action taken\",\n }\n}\n\nexport { defaultClosedLoopConfig }\n",
|
|
19
19
|
"import type { PluginModule } from \"@opencode-ai/plugin\"\nimport { createMetaGovernorPlugin } from \"./plugin\"\n\n/**\n * @sisyphuslabs/omo-meta-governor — Self-judging agent orchestration layer.\n *\n * Default export is an OpenCode PluginModule that registers a\n * `tool.execute.after` hook. The MetaGovernor reads session signals,\n * scores them against weighted evidence, and dispatches decisions.\n *\n * Install:\n * npm install @sisyphuslabs/omo-meta-governor\n *\n * Configure:\n * ```jsonc\n * {\n * \"meta_governor\": {\n * \"enabled\": true\n * }\n * }\n * ```\n */\nconst pluginModule: PluginModule = {\n id: \"omo-meta-governor\",\n server: createMetaGovernorPlugin(),\n}\n\nexport default pluginModule\n\nexport { createMetaGovernorPlugin, type MetaGovernorPluginDeps } from \"./plugin\"\nexport { logToFile } from \"./file-logger\"\nexport {\n runMetaGovernor,\n buildDecisionContext,\n defaultOrchestratorConfig,\n} from \"./orchestrator\"\nexport {\n loadOrchestratorConfig,\n isMetaGovernorEnabled,\n type MetaGovernorPluginConfig,\n} from \"./config\"\n\n// Core module re-exports\nexport { score, defaultScoringConfig } from \"./scoring-engine\"\nexport { predict, defaultTokenPredictorConfig, calculateBurnRate } from \"./token-predictor\"\nexport { handleDecision, defaultDecisionHandlerConfig, trimHistory, countConsecutiveStops } from \"./decision-handler\"\nexport { observeAndLearn, defaultClosedLoopConfig } from \"./closed-loop-learning\"\nexport { aggregateRead } from \"./memory-aggregator\"\nexport { recordRecovery, type RecoveryOutcome } from \"./post-repair-recorder\"\nexport {\n storeDecision,\n takeDecision,\n hasDecision,\n takeAnyDecision,\n clearAll,\n} from \"./decision-store\"\n\n// Types\nexport type {\n Decision,\n DecisionContext,\n DecisionHandlerConfig,\n DecisionHandlerInput,\n DecisionHandlerOutput,\n Deviation,\n Evidence,\n EvidenceContribution,\n InterventionConfig,\n InterventionMode,\n LearnFromOutcomeInput,\n LearnFromOutcomeOutput,\n MemoryRead,\n MemoryBackends,\n AgentmemoryWriteBackend,\n MetaGovernorInput,\n MetaGovernorOutput,\n OrchestratorConfig,\n ScoringConfig,\n ScoringResult,\n SlotMemory,\n TokenPredictorConfig,\n TokenPredictorInput,\n TokenPredictorOutput,\n ClosedLoopConfig,\n} from \"./types\"\n// Protocol enforcer\nexport {\n loadProtocol,\n buildSystemInjection,\n auditToolCall,\n DEFAULT_PROTOCOL_PATH,\n} from \"./protocol-enforcer\"\n\n// Config-file loader + graphSync + schema generator\nexport {\n stripJsoncComments,\n parseJsonc,\n loadJsoncFile,\n deepMerge,\n loadMetaGovernorConfig,\n getUserConfigPath,\n getProjectConfigPath,\n type ConfigFileSources,\n type ConfigFileResult,\n} from \"./config-file\"\nexport {\n runGraphSync,\n stopWatches,\n resetInitializedProjects,\n type GraphSyncConfig,\n type GraphSyncResult,\n type GraphSyncCode,\n type ToolAvailability,\n} from \"./graph-sync\"\nexport { generateSchema, writeSchemaFile, type JsonSchema, type JsonSchemaProperty } from \"./generate-schema\"\nexport { loadOrchestratorConfigFromSources } from \"./config\"\n\nexport type { ProtocolViolation, ProtocolEnforcementSessionState } from \"./types\"\n",
|
|
20
20
|
"/**\n * JSON Schema generator for omo-meta-governor.jsonc.\n *\n * Generates a JSON Schema (draft-07) from the MetaGovernorPluginConfig\n * interface definition. The schema is used for IDE autocompletion and\n * validation when editing the .jsonc config file.\n *\n * Usage:\n * import { generateSchema } from \"./generate-schema\"\n * const schema = generateSchema()\n * await Bun.write(\"assets/omo-meta-governor.schema.json\", JSON.stringify(schema, null, 2))\n */\n\nexport interface JsonSchema {\n $schema: string\n $id: string\n title: string\n description: string\n type: \"object\"\n properties: Record<string, JsonSchemaProperty>\n additionalProperties: boolean\n definitions?: Record<string, JsonSchemaProperty>\n}\n\nexport interface JsonSchemaProperty {\n type?: string | string[]\n description?: string\n default?: unknown\n properties?: Record<string, JsonSchemaProperty>\n items?: JsonSchemaProperty\n additionalProperties?: boolean\n required?: string[]\n enum?: string[]\n oneOf?: JsonSchemaProperty[]\n anyOf?: JsonSchemaProperty[]\n $ref?: string\n minimum?: number\n maximum?: number\n}\n\nconst ID_BASE = \"https://raw.githubusercontent.com/herjarsa/omo-meta-governor/main\"\n\n/**\n * Generate the full JSON Schema for the omo-meta-governor.jsonc config file.\n */\nexport function generateSchema(): JsonSchema {\n return {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n $id: `${ID_BASE}/assets/omo-meta-governor.schema.json`,\n title: \"omo-meta-governor\",\n description: \"Configuration schema for @herjarsa/omo-meta-governor — Self-judging agent orchestration layer for OpenCode.\",\n type: \"object\",\n additionalProperties: false,\n properties: {\n $schema: {\n type: \"string\",\n description: \"JSON Schema reference for IDE autocompletion.\",\n },\n enabled: {\n type: \"boolean\",\n description: \"Master feature flag — must be true to run the orchestrator.\",\n default: false,\n },\n decision: {\n type: \"object\",\n description: \"Decision handler configuration.\",\n additionalProperties: false,\n properties: {\n maxHistoryPerSession: {\n type: \"integer\",\n description: \"Maximum history entries per session before oldest are trimmed.\",\n default: 50,\n minimum: 1,\n },\n forceContinueAfterStops: {\n type: \"integer\",\n description: \"How many consecutive stops before forcing continue.\",\n default: 3,\n minimum: 1,\n },\n },\n },\n memory: {\n type: \"object\",\n description: \"Memory aggregator configuration.\",\n additionalProperties: false,\n properties: {\n agentmemoryTimeoutMs: {\n type: \"integer\",\n description: \"Timeout for agentmemory queries in milliseconds.\",\n default: 2000,\n minimum: 100,\n },\n magicContextTimeoutMs: {\n type: \"integer\",\n description: \"Timeout for magic-context queries in milliseconds.\",\n default: 1000,\n minimum: 100,\n },\n boulderStateTimeoutMs: {\n type: \"integer\",\n description: \"Timeout for boulder-state queries in milliseconds.\",\n default: 1000,\n minimum: 100,\n },\n query: {\n type: \"string\",\n description: \"Natural-language query for memory recall.\",\n default: \"meta_governor_context\",\n },\n },\n },\n tokenPredictor: {\n type: \"object\",\n description: \"Token predictor configuration.\",\n additionalProperties: false,\n properties: {\n compactBurnRateThreshold: {\n type: \"integer\",\n description: \"Burn rate threshold (tokens/turn) above which to recommend compact-now.\",\n default: 500,\n minimum: 0,\n },\n compactUsageThreshold: {\n type: \"number\",\n description: \"Context usage ratio (0..1) above which to recommend compact-now.\",\n default: 0.85,\n minimum: 0,\n maximum: 1,\n },\n switchModelUsageThreshold: {\n type: \"number\",\n description: \"Context usage ratio above which to recommend switch-model.\",\n default: 0.95,\n minimum: 0,\n maximum: 1,\n },\n delegateConsecutiveHighBurn: {\n type: \"integer\",\n description: \"Max consecutive high-burn turns before recommending delegate.\",\n default: 5,\n minimum: 1,\n },\n },\n },\n scoring: {\n type: \"object\",\n description: \"Scoring engine configuration.\",\n additionalProperties: false,\n properties: {\n continueThreshold: {\n type: \"number\",\n description: \"Score >= this -> continue silently.\",\n default: 0.3,\n minimum: 0,\n maximum: 1,\n },\n warnThreshold: {\n type: \"number\",\n description: \"Score <= -warnThreshold -> warn.\",\n default: 0.3,\n minimum: 0,\n maximum: 1,\n },\n escalateThreshold: {\n type: \"number\",\n description: \"Score <= -escalateThreshold -> escalate.\",\n default: 0.6,\n minimum: 0,\n maximum: 1,\n },\n stopThreshold: {\n type: \"number\",\n description: \"Score <= -stopThreshold -> stop.\",\n default: 0.8,\n minimum: 0,\n maximum: 1,\n },\n },\n },\n closedLoop: {\n type: \"object\",\n description: \"Closed-loop learning configuration.\",\n additionalProperties: false,\n properties: {\n saveDecisions: {\n type: \"boolean\",\n description: \"Whether to save decision records.\",\n default: true,\n },\n saveLessons: {\n type: \"boolean\",\n description: \"Whether to save lessons.\",\n default: true,\n },\n },\n },\n modelOverride: {\n type: \"object\",\n description: \"Model override for MetaGovernor internal LLM usage.\",\n additionalProperties: false,\n properties: {\n providerID: {\n type: \"string\",\n description: \"Provider ID (e.g. 'openai', 'anthropic').\",\n },\n modelID: {\n type: \"string\",\n description: \"Model ID (e.g. 'gpt-4o-mini', 'claude-sonnet-4-20250514').\",\n },\n modelLimit: {\n type: \"integer\",\n description: \"Context window size for token predictor.\",\n minimum: 1000,\n },\n temperature: {\n type: \"number\",\n description: \"Sampling temperature. Default: 0.2.\",\n default: 0.2,\n minimum: 0,\n maximum: 2,\n },\n topP: {\n type: \"number\",\n description: \"Top-p nucleus sampling. Default: 1.\",\n default: 1,\n minimum: 0,\n maximum: 1,\n },\n maxTokens: {\n type: \"integer\",\n description: \"Max output tokens for internal reasoning.\",\n default: 2048,\n minimum: 1,\n },\n reasoning: {\n type: \"boolean\",\n description: \"Enable extended reasoning / thinking mode.\",\n default: false,\n },\n verbosity: {\n type: \"string\",\n description: \"Verbosity level for internal logging.\",\n enum: [\"silent\", \"minimal\", \"verbose\"],\n default: \"minimal\",\n },\n },\n },\n intervention: {\n type: \"object\",\n description: \"Intervention config for visible decision injection.\",\n additionalProperties: false,\n properties: {\n mode: {\n type: \"string\",\n description: \"How to inject: 'silent', 'message', or 'system'.\",\n enum: [\"silent\", \"message\", \"system\"],\n default: \"silent\",\n },\n includeDecisionHistory: {\n type: \"boolean\",\n description: \"Whether to include recent decision history.\",\n default: true,\n },\n maxHistoryMessages: {\n type: \"integer\",\n description: \"Max history entries when includeDecisionHistory is true.\",\n default: 5,\n minimum: 1,\n },\n minActionForMessage: {\n type: \"string\",\n description: \"Minimum action: 'warn' (all non-continue), 'escalate', or 'stop'.\",\n enum: [\"warn\", \"escalate\", \"stop\"],\n default: \"warn\",\n },\n },\n },\n protocolEnforcement: {\n type: \"object\",\n description: \"Sisyphus protocol enforcement config.\",\n additionalProperties: false,\n properties: {\n enabled: {\n type: \"boolean\",\n description: \"Master switch for protocol enforcement.\",\n default: false,\n },\n path: {\n type: \"string\",\n description: \"Path to protocol markdown file.\",\n },\n injectIntoSystem: {\n type: \"boolean\",\n description: \"Whether to inject protocol rules into the system prompt.\",\n default: false,\n },\n auditToolCalls: {\n type: \"boolean\",\n description: \"Whether to audit tool calls for protocol violations.\",\n default: false,\n },\n },\n },\n graphSync: {\n type: \"object\",\n description: \"Graph synchronization (auto-init codegraph/graphify).\",\n additionalProperties: false,\n properties: {\n enabled: {\n type: \"boolean\",\n description: \"Enable auto-initialization of codegraph and graphify.\",\n default: true,\n },\n watch: {\n type: \"boolean\",\n description: \"Enable watch mode (re-index on file changes).\",\n default: false,\n },\n },\n },\n },\n definitions: {\n verbosity: {\n type: \"string\",\n enum: [\"silent\", \"minimal\", \"verbose\"],\n description: \"Verbosity level.\",\n },\n interventionMode: {\n type: \"string\",\n enum: [\"silent\", \"message\", \"system\"],\n description: \"Intervention injection mode.\",\n },\n minAction: {\n type: \"string\",\n enum: [\"warn\", \"escalate\", \"stop\"],\n description: \"Minimum action threshold.\",\n },\n },\n }\n}\n\n/**\n * Write the schema to a file.\n */\nexport async function writeSchemaFile(outputPath: string): Promise<void> {\n const schema = generateSchema()\n const { writeFile } = await import(\"node:fs/promises\")\n await writeFile(outputPath, JSON.stringify(schema, null, 2) + \"\\n\", \"utf-8\")\n}\n"
|
|
21
21
|
],
|
|
22
|
-
"mappings": "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AAS,GACX,EACA,sBAAuB,CACrB,KAAM,UACN,YAAa,qDACb,QAAS,KACT,QAAS,GACX,EACA,MAAO,CACL,KAAM,SACN,YAAa,4CACb,QAAS,uBACX,CACF,CACF,EACA,eAAgB,CACd,KAAM,SACN,YAAa,iCACb,qBAAsB,GACtB,WAAY,CACV,yBAA0B,CACxB,KAAM,UACN,YAAa,0EACb,QAAS,IACT,QAAS,CACX,EACA,sBAAuB,CACrB,KAAM,SACN,YAAa,mEACb,QAAS,KACT,QAAS,EACT,QAAS,CACX,EACA,0BAA2B,CACzB,KAAM,SACN,YAAa,6DACb,QAAS,KACT,QAAS,EACT,QAAS,CACX,EACA,4BAA6B,CAC3B,KAAM,UACN,YAAa,gEACb,QAAS,EACT,QAAS,CACX,CACF,CACF,EACA,QAAS,CACP,KAAM,SACN,YAAa,gCACb,qBAAsB,GACtB,WAAY,CACV,kBAAmB,CACjB,KAAM,SACN,YAAa,sCACb,QAAS,IACT,QAAS,EACT,QAAS,CACX,EACA,cAAe,CACb,KAAM,SACN,YAAa,mCACb,QAAS,IACT,QAAS,EACT,QAAS,CACX,EACA,kBAAmB,CACjB,KAAM,SACN,YAAa,2CACb,QAAS,IACT,QAAS,EACT,QAAS,CACX,EACA,cAAe,CACb,KAAM,SACN,YAAa,mCACb,QAAS,IACT,QAAS,EACT,QAAS,CACX,CACF,CACF,EACA,WAAY,CACV,KAAM,SACN,YAAa,sCACb,qBAAsB,GACtB,WAAY,CACV,cAAe,CACb,KAAM,UACN,YAAa,oCACb,QAAS,EACX,EACA,YAAa,CACX,KAAM,UACN,YAAa,2BACb,QAAS,EACX,CACF,CACF,EACA,cAAe,CACb,KAAM,SACN,YAAa,sDACb,qBAAsB,GACtB,WAAY,CACV,WAAY,CACV,KAAM,SACN,YAAa,2CACf,EACA,QAAS,CACP,KAAM,SACN,YAAa,4DACf,EACA,WAAY,CACV,KAAM,UACN,YAAa,2CACb,QAAS,IACX,EACA,YAAa,CACX,KAAM,SACN,YAAa,sCACb,QAAS,IACT,QAAS,EACT,QAAS,CACX,EACA,KAAM,CACJ,KAAM,SACN,YAAa,sCACb,QAAS,EACT,QAAS,EACT,QAAS,CACX,EACA,UAAW,CACT,KAAM,UACN,YAAa,4CACb,QAAS,KACT,QAAS,CACX,EACA,UAAW,CACT,KAAM,UACN,YAAa,6CACb,QAAS,EACX,EACA,UAAW,CACT,KAAM,SACN,YAAa,wCACb,KAAM,CAAC,SAAU,UAAW,SAAS,EACrC,QAAS,SACX,CACF,CACF,EACA,aAAc,CACZ,KAAM,SACN,YAAa,sDACb,qBAAsB,GACtB,WAAY,CACV,KAAM,CACJ,KAAM,SACN,YAAa,mDACb,KAAM,CAAC,SAAU,UAAW,QAAQ,EACpC,QAAS,QACX,EACA,uBAAwB,CACtB,KAAM,UACN,YAAa,8CACb,QAAS,EACX,EACA,mBAAoB,CAClB,KAAM,UACN,YAAa,2DACb,QAAS,EACT,QAAS,CACX,EACA,oBAAqB,CACnB,KAAM,SACN,YAAa,oEACb,KAAM,CAAC,OAAQ,WAAY,MAAM,EACjC,QAAS,MACX,CACF,CACF,EACA,oBAAqB,CACnB,KAAM,SACN,YAAa,wCACb,qBAAsB,GACtB,WAAY,CACV,QAAS,CACP,KAAM,UACN,YAAa,0CACb,QAAS,EACX,EACA,KAAM,CACJ,KAAM,SACN,YAAa,iCACf,EACA,iBAAkB,CAChB,KAAM,UACN,YAAa,2DACb,QAAS,EACX,EACA,eAAgB,CACd,KAAM,UACN,YAAa,uDACb,QAAS,EACX,CACF,CACF,EACA,UAAW,CACT,KAAM,SACN,YAAa,wDACb,qBAAsB,GACtB,WAAY,CACV,QAAS,CACP,KAAM,UACN,YAAa,wDACb,QAAS,EACX,EACA,MAAO,CACL,KAAM,UACN,YAAa,gDACb,QAAS,EACX,CACF,CACF,CACF,EACA,YAAa,CACX,UAAW,CACT,KAAM,SACN,KAAM,CAAC,SAAU,UAAW,SAAS,EACrC,YAAa,kBACf,EACA,iBAAkB,CAChB,KAAM,SACN,KAAM,CAAC,SAAU,UAAW,QAAQ,EACpC,YAAa,8BACf,EACA,UAAW,CACT,KAAM,SACN,KAAM,CAAC,OAAQ,WAAY,MAAM,EACjC,YAAa,2BACf,CACF,CACF,EAMF,eAAsB,EAAe,CAAC,EAAmC,CACvE,IAAM,EAAS,GAAe,GACtB,aAAc,KAAa,4BACnC,MAAM,EAAU,EAAY,KAAK,UAAU,EAAQ,KAAM,CAAC,EAAI;AAAA,EAAM,OAAO,EDtU7E,IAAM,GAA6B,CACjC,GAAI,oBACJ,OAAQ,GAAyB,CACnC,EAEe",
|
|
23
|
-
"debugId": "
|
|
22
|
+
"mappings": "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CACN,KAAM,SACN,YAAa,mCACb,qBAAsB,GACtB,WAAY,CACV,qBAAsB,CACpB,KAAM,UACN,YAAa,mDACb,QAAS,KACT,QAAS,GACX,EACA,sBAAuB,CACrB,KAAM,UACN,YAAa,qDACb,QAAS,KACT,QAAS,GACX,EACA,sBAAuB,CACrB,KAAM,UACN,YAAa,qDACb,QAAS,KACT,QAAS,GACX,EACA,MAAO,CACL,KAAM,SACN,YAAa,4CACb,QAAS,uBACX,CACF,CACF,EACA,eAAgB,CACd,KAAM,SACN,YAAa,iCACb,qBAAsB,GACtB,WAAY,CACV,yBAA0B,CACxB,KAAM,UACN,YAAa,0EACb,QAAS,IACT,QAAS,CACX,EACA,sBAAuB,CACrB,KAAM,SACN,YAAa,mEACb,QAAS,KACT,QAAS,EACT,QAAS,CACX,EACA,0BAA2B,CACzB,KAAM,SACN,YAAa,6DACb,QAAS,KACT,QAAS,EACT,QAAS,CACX,EACA,4BAA6B,CAC3B,KAAM,UACN,YAAa,gEACb,QAAS,EACT,QAAS,CACX,CACF,CACF,EACA,QAAS,CACP,KAAM,SACN,YAAa,gCACb,qBAAsB,GACtB,WAAY,CACV,kBAAmB,CACjB,KAAM,SACN,YAAa,sCACb,QAAS,IACT,QAAS,EACT,QAAS,CACX,EACA,cAAe,CACb,KAAM,SACN,YAAa,mCACb,QAAS,IACT,QAAS,EACT,QAAS,CACX,EACA,kBAAmB,CACjB,KAAM,SACN,YAAa,2CACb,QAAS,IACT,QAAS,EACT,QAAS,CACX,EACA,cAAe,CACb,KAAM,SACN,YAAa,mCACb,QAAS,IACT,QAAS,EACT,QAAS,CACX,CACF,CACF,EACA,WAAY,CACV,KAAM,SACN,YAAa,sCACb,qBAAsB,GACtB,WAAY,CACV,cAAe,CACb,KAAM,UACN,YAAa,oCACb,QAAS,EACX,EACA,YAAa,CACX,KAAM,UACN,YAAa,2BACb,QAAS,EACX,CACF,CACF,EACA,cAAe,CACb,KAAM,SACN,YAAa,sDACb,qBAAsB,GACtB,WAAY,CACV,WAAY,CACV,KAAM,SACN,YAAa,2CACf,EACA,QAAS,CACP,KAAM,SACN,YAAa,4DACf,EACA,WAAY,CACV,KAAM,UACN,YAAa,2CACb,QAAS,IACX,EACA,YAAa,CACX,KAAM,SACN,YAAa,sCACb,QAAS,IACT,QAAS,EACT,QAAS,CACX,EACA,KAAM,CACJ,KAAM,SACN,YAAa,sCACb,QAAS,EACT,QAAS,EACT,QAAS,CACX,EACA,UAAW,CACT,KAAM,UACN,YAAa,4CACb,QAAS,KACT,QAAS,CACX,EACA,UAAW,CACT,KAAM,UACN,YAAa,6CACb,QAAS,EACX,EACA,UAAW,CACT,KAAM,SACN,YAAa,wCACb,KAAM,CAAC,SAAU,UAAW,SAAS,EACrC,QAAS,SACX,CACF,CACF,EACA,aAAc,CACZ,KAAM,SACN,YAAa,sDACb,qBAAsB,GACtB,WAAY,CACV,KAAM,CACJ,KAAM,SACN,YAAa,mDACb,KAAM,CAAC,SAAU,UAAW,QAAQ,EACpC,QAAS,QACX,EACA,uBAAwB,CACtB,KAAM,UACN,YAAa,8CACb,QAAS,EACX,EACA,mBAAoB,CAClB,KAAM,UACN,YAAa,2DACb,QAAS,EACT,QAAS,CACX,EACA,oBAAqB,CACnB,KAAM,SACN,YAAa,oEACb,KAAM,CAAC,OAAQ,WAAY,MAAM,EACjC,QAAS,MACX,CACF,CACF,EACA,oBAAqB,CACnB,KAAM,SACN,YAAa,wCACb,qBAAsB,GACtB,WAAY,CACV,QAAS,CACP,KAAM,UACN,YAAa,0CACb,QAAS,EACX,EACA,KAAM,CACJ,KAAM,SACN,YAAa,iCACf,EACA,iBAAkB,CAChB,KAAM,UACN,YAAa,2DACb,QAAS,EACX,EACA,eAAgB,CACd,KAAM,UACN,YAAa,uDACb,QAAS,EACX,CACF,CACF,EACA,UAAW,CACT,KAAM,SACN,YAAa,wDACb,qBAAsB,GACtB,WAAY,CACV,QAAS,CACP,KAAM,UACN,YAAa,wDACb,QAAS,EACX,EACA,MAAO,CACL,KAAM,UACN,YAAa,gDACb,QAAS,EACX,CACF,CACF,CACF,EACA,YAAa,CACX,UAAW,CACT,KAAM,SACN,KAAM,CAAC,SAAU,UAAW,SAAS,EACrC,YAAa,kBACf,EACA,iBAAkB,CAChB,KAAM,SACN,KAAM,CAAC,SAAU,UAAW,QAAQ,EACpC,YAAa,8BACf,EACA,UAAW,CACT,KAAM,SACN,KAAM,CAAC,OAAQ,WAAY,MAAM,EACjC,YAAa,2BACf,CACF,CACF,EAMF,eAAsB,EAAe,CAAC,EAAmC,CACvE,IAAM,EAAS,GAAe,GACtB,aAAc,KAAa,4BACnC,MAAM,EAAU,EAAY,KAAK,UAAU,EAAQ,KAAM,CAAC,EAAI;AAAA,EAAM,OAAO,EDtU7E,IAAM,GAA6B,CACjC,GAAI,oBACJ,OAAQ,GAAyB,CACnC,EAEe",
|
|
23
|
+
"debugId": "1032D4A61794B53D64756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|
package/package.json
CHANGED