create-principles-disciple 1.146.2 → 1.146.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/_release/product-identity.json +2 -2
- package/console/dist/server/routes/health.js +17 -0
- package/console/dist/server/routes/update-transaction.js +63 -3
- package/console/dist/ui/i18n/en.json +2 -0
- package/console/dist/ui/i18n/zh-CN.json +2 -0
- package/console/dist/ui/pages/settings/UpdatePage.js +1 -1
- package/console/dist/ui/utils/validators.d.ts +10 -0
- package/console/dist/ui/utils/validators.js +11 -1
- package/console/dist/web/assets/app.js +16 -16
- package/core/dist/runtime-v2/internalization/bash-risk.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/bash-risk.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/bash-risk.js +78 -0
- package/core/dist/runtime-v2/internalization/bash-risk.js.map +1 -1
- package/core/package.json +1 -1
- package/dist/installer.d.ts +81 -0
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +480 -117
- package/dist/installer.js.map +1 -1
- package/dist/update/console-surface.d.ts +1 -1
- package/dist/update/console-surface.d.ts.map +1 -1
- package/dist/update/console-surface.js +1 -1
- package/dist/update/console-surface.js.map +1 -1
- package/dist/update/transaction-journal.d.ts +47 -0
- package/dist/update/transaction-journal.d.ts.map +1 -1
- package/dist/update/transaction-journal.js +87 -2
- package/dist/update/transaction-journal.js.map +1 -1
- package/host-runtime/package.json +1 -1
- package/package.json +2 -2
- package/plugin/dist/bundle.js +385 -385
- package/plugin/dist/rulehost-evidence.js +16 -16
- package/plugin/openclaw.plugin.json +1 -1
- package/plugin/package.json +1 -1
- package/release-manager/dist/installer.d.ts +81 -0
- package/release-manager/dist/installer.d.ts.map +1 -1
- package/release-manager/dist/installer.js +480 -117
- package/release-manager/dist/installer.js.map +1 -1
- package/release-manager/dist/update/console-surface.d.ts +1 -1
- package/release-manager/dist/update/console-surface.d.ts.map +1 -1
- package/release-manager/dist/update/console-surface.js +1 -1
- package/release-manager/dist/update/console-surface.js.map +1 -1
- package/release-manager/dist/update/transaction-journal.d.ts +47 -0
- package/release-manager/dist/update/transaction-journal.d.ts.map +1 -1
- package/release-manager/dist/update/transaction-journal.js +87 -2
- package/release-manager/dist/update/transaction-journal.js.map +1 -1
- package/release-manager/package.json +2 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
var
|
|
2
|
+
var De=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var ne=Object.freeze([Object.freeze({capabilityId:"pd_status",channel:"cli",cliCommand:"pd activation list --json"}),Object.freeze({capabilityId:"rulecode_deactivate",channel:"cli",cliCommand:"pd activation deactivate --activation-id recovery-probe"}),Object.freeze({capabilityId:"rulecode_global_pause",channel:"console",consoleRoute:"/api/v1/activations/emergency-pause"}),Object.freeze({capabilityId:"owner_review_access",channel:"console",consoleRoute:"/api/v1/activations/{activationId}/owner-review"})]);var se="",Me="|;&<>()";function L(n){return Me.includes(n)?`${se}${n}`:n}function re(n){if(n.includes(se))return null;let e=[],t="",r=!1,s=0,o=n.length,i="plain";for(;s<o;){let c=n[s];if(c===void 0)break;if(i==="single"){c==="'"?i="plain":t+=L(c),s+=1;continue}if(i==="double"){if(c==='"')i="plain";else if(c==="\\"&&s+1<o&&'"\\$`'.includes(n[s+1]??"")){t+=L(n[s+1]??""),s+=2;continue}else t+=L(c);s+=1;continue}if(c==="'"){i="single",r=!0,s+=1;continue}if(c==='"'){i="double",r=!0,s+=1;continue}if(c==="\\"&&s+1<o){t+=L(n[s+1]??""),r=!0,s+=2;continue}if(c==="\r"||c===`
|
|
3
3
|
`){(r||t)&&(e.push(t),t="",r=!1),c==="\r"&&n[s+1]===`
|
|
4
4
|
`&&(s+=1),e.push(`
|
|
5
|
-
`),s+=1;continue}if(" ".includes(c)){(r||t)&&(e.push(t),t="",r=!1),s+=1;continue}if("|;&<>()".includes(c)){(r||t)&&(e.push(t),t="",r=!1);let a=c,d=n[s+1];c==="<"&&d===">"?a="<>":(c==="|"||c==="&"||c===">"||c==="<")&&d===c&&(a+=d),(c===">"||c==="<")&&d==="("&&(a+=d),e.push(a),s+=a.length;continue}t+=c,r=!0,s+=1}return i!=="plain"?null:((r||t)&&e.push(t),e)}function se(n){if(/[\\$`|;&<>()*?~{}]/.test(n)||[...n].some(s=>s.charCodeAt(0)<32))return;let e=ne(n);if(!e)return;let t=[...e],r=t.findIndex(s=>s==="-w"||s==="--workspace");if(r!==-1){let s=t[r+1];if(r!==t.length-2||!s||s.startsWith("-"))return;t.splice(r,2)}for(let s of te){if(s.channel!=="cli"||!s.cliCommand||s.capabilityId!=="pd_status"&&s.capabilityId!=="rulecode_deactivate")continue;let o=ne(s.cliCommand);if(!o||o.length!==t.length)continue;if(o.every((c,a)=>s.capabilityId==="rulecode_deactivate"&&o[a-1]==="--activation-id"?/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/.test(t[a]??""):c===t[a]))return s.capabilityId}}function L(n,e=!1){let t=[];for(let r of n.split("/").filter(s=>s.length>0))r!=="."&&(r===".."?t.length>0&&t[t.length-1]!==".."?t.pop():e&&t.push(".."):t.push(r));return t}function W(n){let e=/^([a-zA-Z]):(?:\/|$)/.exec(n);if(e)return{kind:"drive",root:`drive:${(e[1]??"").toUpperCase()}`,segments:L(n.slice(2))};if(/^[a-zA-Z]:/.test(n))return{kind:"drive-relative",root:n.slice(0,2).toUpperCase(),segments:[]};if(/^\/\/[^/]+(?:\/|$)/.test(n)){let t=n.slice(2).split("/").filter(o=>o.length>0),r=t[0]??"",s=t[1]??"";return{kind:"unc",root:`unc:${r}/${s}`,segments:L(t.slice(2).join("/"))}}return n.startsWith("/")?{kind:"posix",root:"posix:/",segments:L(n)}:{kind:"relative",root:"",segments:L(n,!0)}}function oe(n,e,t){return n.length<e.length?!1:e.every((r,s)=>{let o=n[s]??"";return t?o.toLowerCase()===r.toLowerCase():o===r})}function Me(n,e,t){let r=0;for(;r<n.length&&r<e.length;){let o=n[r]??"",i=e[r]??"";if(!(t?o.toLowerCase()===i.toLowerCase():o===i))break;r++}return[...Array.from({length:n.length-r},()=>".."),...e.slice(r)].join("/")||"."}function ie(n){let[e,t]=n.root.slice(4).split("/"),r=n.segments.join("/");return`//${e??""}/${t??""}${r?`/${r}`:""}`}function ae(n,e,t){if(n.kind==="drive-relative"||n.kind==="unc"&&n.root.endsWith("/"))return t;if(n.kind!=="relative")return!(n.kind===e.kind&&(n.kind==="unc"?n.root.toLowerCase()===e.root.toLowerCase():n.root===e.root))||!oe(n.segments,e.segments,n.kind==="drive"||n.kind==="unc")?n.kind==="unc"?ie(n):t:n.segments.slice(e.segments.length).join("/")||".";let r=[...e.segments];for(let o of t.split("/").filter(i=>i.length>0))o!=="."&&(o===".."?r.length>0&&r[r.length-1]!==".."?r.pop():e.kind==="relative"&&r.push(".."):r.push(o));let s=e.kind==="drive"||e.kind==="unc";return oe(r,e.segments,s)?r.slice(e.segments.length).join("/")||".":Me(e.segments,r,s)}function Pe(n,e){if(!n||typeof n!="string")return"";let t=n.replace(/\\/g,"/"),r=e.replace(/\\/g,"/");if(t.startsWith("<tool:")&&t.endsWith(">"))return t;let s=W(t),o=W(r);if(s.kind==="drive"&&o.kind!=="drive"&&o.kind!=="unc"){let c=`/mnt/${s.root.slice(-1).toLowerCase()}/${s.segments.join("/")}`;return s=W(c),ae(s,o,c)}return ae(s,o,t)}function je(n,e){let t=n.file_path||n.path||n.file||n.target;if(typeof t=="string"&&t.length>0)return{value:t,isPath:!0};if(e.isBashTool){let r=String(n.command||n.args||"");if(r){let s=/(?:>|>>|sed\s+-i|rm|mv|mkdir|touch|cp)\s+(?:-[a-zA-Z]+\s+)*([^\s;&|<>]+)/.exec(r);return s&&s[1]?{value:s[1],isPath:!0}:{value:r,isPath:!1}}}return e.isWriteTool&&e.toolName?{value:`<tool:${e.toolName}>`,isPath:!0}:{value:null,isPath:!0}}function Ue(n){return{isBashTool:n==="execute",isWriteTool:n==="write"}}function Be(n){if(n.canonicalKind===void 0)return n;let e=Ue(n.canonicalKind);return{...n,isBashTool:n.isBashTool??e.isBashTool,isWriteTool:n.isWriteTool??e.isWriteTool}}function C(n,e,t,r={}){let s=Be(r),o=je(e,{...s,toolName:n}),i=o.isPath?Pe(o.value,t):o.value,c=e.command??e.args,a=s.isBashTool&&typeof c=="string"?se(c):void 0;return{toolName:n,normalizedPath:i,...a?{recoveryControl:a}:{},paramsSummary:{...e},...s.canonicalKind!==void 0?{canonicalKind:s.canonicalKind}:{}}}var X=new Set(["read","search","write","execute","agent","other"]);function ce(n){return typeof n=="string"&&X.has(n)}var D=Object.freeze({read:"read",read_file:"read",read_many_files:"read",grep:"search",grep_search:"search",search_file_content:"search",glob:"search",write:"write",write_file:"write",edit:"write",edit_file:"write",replace:"write",apply_patch:"write",bash:"execute",exec:"execute",execute:"execute",run_shell_command:"execute",execute_command:"execute",run_script:"execute",code_interpreter:"execute",sessions_spawn:"agent"});function le(n,e,t){if(n.status==="unavailable")return{priorReadOfTarget:"unknown",readCount:null,writeCount:null,uniqueWritePathCount:null,sameActionBlockCount:null};let r=0,s=0,o=new Set,i=e===null?"unknown":"no",{calls:c}=n;for(let a of c){let d=a.canonicalKind;d==="read"||d==="search"?(r++,e!==null&&a.normalizedPath===e&&(i="yes")):d==="write"&&(s++,typeof a.normalizedPath=="string"&&o.add(a.normalizedPath))}return{priorReadOfTarget:i,readCount:r,writeCount:s,uniqueWritePathCount:o.size,sameActionBlockCount:t}}var ue={priorReadOfTarget:"unknown",readCount:null,writeCount:null,uniqueWritePathCount:null,sameActionBlockCount:null};Object.freeze(ue);var $={status:"unavailable",unavailableReason:"host did not provide a history window",truncated:!1,calls:[]};Object.freeze($.calls);Object.freeze($);var Fe={version:2,history:$,facts:ue};Object.freeze(Fe);var We=new Set(["__proto__","constructor","prototype"]),de=3,Xe=5,$e=new Set(["allow","block","propose_correction"]),He={valid:!0,errors:[]};function H(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function _e(n){for(let e of Object.keys(n))if(We.has(e))return!1;return!0}function Ye(n){return n.length===0?He:{valid:!1,errors:n}}function Y(n){return typeof n=="string"&&n.trim().length>0}function pe(n,e,t){let r=[];return H(n)?_e(n)?((!Object.hasOwn(n,"caseId")||!Y(n.caseId))&&r.push(`${e}.caseId must be a non-empty string`),(!Object.hasOwn(n,"kind")||n.kind!==t)&&r.push(`${e}.kind must be '${t}'`),(!Object.hasOwn(n,"toolName")||!Y(n.toolName))&&r.push(`${e}.toolName must be a non-empty string`),(!Object.hasOwn(n,"params")||!H(n.params))&&r.push(`${e}.params must be a plain object`),!Object.hasOwn(n,"expectedDecision")||typeof n.expectedDecision!="string"||!$e.has(n.expectedDecision)?r.push(`${e}.expectedDecision must be one of allow|block|propose_correction`):t==="positive"&&n.expectedDecision!=="allow"&&r.push(`${e}: positive cases must expect allow`),r):(r.push(`${e} must not carry prototype-pollution keys`),r):(r.push(`${e} must be a plain object`),r)}function fe(n,e){let{fieldName:t,maxLength:r,requireNonEmpty:s}=e,o=[];if(!Array.isArray(n))return o.push(`${t} must be an array`),o;s&&n.length===0&&o.push(`${t} must contain at least 1 item`),r!==void 0&&n.length>r&&o.push(`${t} must contain at most ${r} items, got ${n.length}`);for(let i=0;i<n.length;i++)typeof n[i]!="string"&&o.push(`${t}[${i}] must be a string`);return o}function M(n){return Array.isArray(n)?`[${n.map(e=>M(e)).join(",")}]`:typeof n=="object"&&n!==null?`{${Object.keys(n).filter(t=>t!=="__proto__"&&t!=="constructor"&&t!=="prototype").sort().map(t=>`${JSON.stringify(t)}:${M(n[t])}`).join(",")}}`:JSON.stringify(n)??"null"}function K(n){if(!H(n))return{valid:!1,errors:["BehaviorExamplePack must be a plain object"]};if(!_e(n))return{valid:!1,errors:["BehaviorExamplePack must not carry prototype-pollution keys"]};let e=[];if(Object.hasOwn(n,"sourceNegativeCase")?e.push(...pe(n.sourceNegativeCase,"sourceNegativeCase","negative")):e.push("sourceNegativeCase is required"),(!Object.hasOwn(n,"ownerDesiredOutcome")||!Y(n.ownerDesiredOutcome))&&e.push("ownerDesiredOutcome must be a non-empty string"),!Object.hasOwn(n,"positiveCounterexamples"))e.push("positiveCounterexamples is required");else if(!Array.isArray(n.positiveCounterexamples))e.push("positiveCounterexamples must be an array");else{let t=n.positiveCounterexamples;t.length===0&&e.push("positiveCounterexamples must contain at least 1 item"),t.length>de&&e.push(`positiveCounterexamples must contain at most ${de} items, got ${t.length}`);for(let r=0;r<t.length;r++)e.push(...pe(t[r],`positiveCounterexamples[${r}]`,"positive"))}if(Object.hasOwn(n,"evidenceRefs")?e.push(...fe(n.evidenceRefs,{fieldName:"evidenceRefs",maxLength:Xe,requireNonEmpty:!0})):e.push("evidenceRefs is required"),Object.hasOwn(n,"redactionNotes")?e.push(...fe(n.redactionNotes,{fieldName:"redactionNotes"})):e.push("redactionNotes is required"),e.length===0){let t=n.sourceNegativeCase,r=n.positiveCounterexamples,s=M({toolName:t.toolName,params:t.params,ruleContext:t.ruleContext});for(let o=0;o<r.length;o++){let i=r[o];i!==void 0&&M({toolName:i.toolName,params:i.params,ruleContext:i.ruleContext})===s&&e.push(`positiveCounterexamples[${o}] conflicting_label: identical effective input (toolName + params + ruleContext) as sourceNegativeCase but opposite expectedDecision \u2014 same input cannot carry both labels`)}}return Ye(e)}var Ke="OwnerEvidenceScopeError";function N(n,e){let t=new Error(e);return t.name=Ke,Object.assign(t,{ownerEvidenceScopeKind:n}),t}var Ge=new Set(["success","failure","blocked"]);function qe(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function ze(n){return typeof n=="string"&&Ge.has(n)}function A(n){return{status:"unavailable",unavailableReason:n,truncated:!1,calls:[]}}function me(n,e,t){let{projectDir:r,toolSemantics:s}=t,o=[];for(let i of n){let{toolName:c}=i;if(typeof c!="string"||c.length===0)return A(`row id=${i.id}: tool_name must be a non-empty string`);let{outcome:a}=i;if(!ze(a))return A(`row id=${i.id}: outcome "${i.outcome}" is not a valid RuleToolOutcome`);let d=i.paramsJson;if(typeof d!="string")return A(`row id=${i.id}: params_json must be a string`);let h;try{h=JSON.parse(d)}catch{return A(`row id=${i.id}: params_json is not valid JSON`)}if(!qe(h))return A(`row id=${i.id}: params_json must parse to a non-array object`);let m=s.resolve(c),{normalizedPath:g}=C(c,h,r,{canonicalKind:m});o.push({sequenceId:i.id,toolName:c,canonicalKind:m,normalizedPath:g===""?null:g,paramsSummary:h,outcome:a})}return{status:"available",truncated:e,calls:o}}var Ve=3,Je=5,Ze=100,Te=new Set(["__proto__","constructor","prototype"]);function P(n,e){try{return e()}catch(t){let r=t instanceof Error?t.message:String(t);throw N("evidence_source_error",`[BehaviorExamplePackAssembler] trajectory store ${n} failed (evidence source error, SPEC-PD-IAER-001 \xA76.2): ${r}`)}}function Qe(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function et(n){for(let e of Object.keys(n))if(Te.has(e))return!1;return!0}function tt(n){if(!Number.isSafeInteger(n.sourceNegativeToolCallId)||n.sourceNegativeToolCallId<=0)throw new Error("[BehaviorExamplePackAssembler] sourceNegativeToolCallId must be a positive integer");if(!Array.isArray(n.positiveToolCallIds)||n.positiveToolCallIds.length===0||n.positiveToolCallIds.length>Ve)throw new Error("[BehaviorExamplePackAssembler] positiveToolCallIds must contain 1 to at most 3 IDs");let e=[n.sourceNegativeToolCallId,...n.positiveToolCallIds];if(e.some(t=>!Number.isSafeInteger(t)||t<=0)||new Set(e).size!==e.length)throw new Error("[BehaviorExamplePackAssembler] selected tool call IDs must be unique positive integers")}function Ee(n,e){if(!n)throw N("tool_call_not_found",`[BehaviorExamplePackAssembler] selected tool call id=${e} not found`);return n}function nt(n,e,t){if(typeof n.toolName!="string"||n.toolName.length===0)throw new Error(`[BehaviorExamplePackAssembler] row id=${n.id}: toolName must be a non-empty string (rc-9 fail loud)`);if(typeof n.paramsJson!="string")throw new Error(`[BehaviorExamplePackAssembler] row id=${n.id}: paramsJson must be a string (rc-9 fail loud)`);let r;try{r=JSON.parse(n.paramsJson)}catch{throw new Error(`[BehaviorExamplePackAssembler] row id=${n.id}: paramsJson is not valid JSON (rc-9 fail loud)`)}if(!Qe(r))throw new Error(`[BehaviorExamplePackAssembler] row id=${n.id}: paramsJson must parse to a non-array object (rc-9 fail loud)`);if(!et(r))throw new Error(`[BehaviorExamplePackAssembler] row id=${n.id}: paramsJson must not carry prototype-pollution keys (ERR-076, rc-9 fail loud)`);return{caseId:`case-${e}-${n.id}`,kind:e,toolName:n.toolName,params:r,expectedDecision:t}}function rt(n){return n.startsWith("/")||/^[A-Za-z]:[\\/]/.test(n)}var st=[/AKIA[0-9A-Z]{16}/,/[A-Za-z0-9+/]{40,}/];function ot(n){if(n.length<20)return!1;for(let e of st)if(e.test(n))return!0;return!1}function it(n,e){let t=[],r={};for(let s of Object.keys(n)){if(Te.has(s))continue;let o=n[s];if(typeof o!="string"){r[s]=o;continue}if(rt(o)&&!o.startsWith(e)){r[s]="<redacted:absolute-path>",t.push(`redacted absolute path in field "${s}" (outside project tree)`);continue}if(ot(o)){r[s]="<redacted:secret>",t.push(`redacted possible secret in field "${s}"`);continue}r[s]=o}return{redacted:r,notes:t}}var j=class{db;toolSemantics;constructor(e){this.db=e.source,this.toolSemantics=e.toolSemantics}assemble(e){let t=P(`pain lineage read for canonical_pain_id="${e.sourcePainId}"`,()=>this.db.getPainEventByCanonicalId(e.sourcePainId));if(!t)throw N("pain_not_found",`[BehaviorExamplePackAssembler] pain event not found for canonical_pain_id="${e.sourcePainId}" (ERR-069 fail loud)`);tt(e);let r=Ee(P(`evidence row read for id=${e.sourceNegativeToolCallId}`,()=>this.db.getRuleHostEvidenceRow(e.sourceNegativeToolCallId)),e.sourceNegativeToolCallId),s=e.positiveToolCallIds.map(m=>Ee(P(`evidence row read for id=${m}`,()=>this.db.getRuleHostEvidenceRow(m)),m));for(let m of[r,...s])if(m.sessionId!==t.sessionId)throw N("session_mismatch",`[BehaviorExamplePackAssembler] selected tool call ${m.id} session mismatch; all examples must belong to pain session ${t.sessionId}`);let o=[],i={projectDir:e.projectDir,redactionNotes:o},c=this.buildSelectedCase(r,"negative",i),a=s.map(m=>this.buildSelectedCase(m,"positive",i)),d={sourceNegativeCase:c,ownerDesiredOutcome:e.ownerDesiredOutcome,positiveCounterexamples:a,evidenceRefs:[`pain:${t.id}`,`tool_call:${r.id}`,...s.map(m=>`tool_call:${m.id}`)].slice(0,Je),redactionNotes:o},h=K(d);if(!h.valid)throw new Error(`[BehaviorExamplePackAssembler] assembled pack failed validateBehaviorExamplePack: ${h.errors.join("; ")} (ERR-069 fail loud)`);return d}buildSelectedCase(e,t,r){let{projectDir:s,redactionNotes:o}=r,i=nt(e,t,t==="negative"?"block":"allow"),c=it(i.params,s);o.push(...c.notes);let a=P(`context history read for session=${e.sessionId} before id=${e.id}`,()=>this.db.getRuleHostContextRowsBefore(e.sessionId,e.id,Ze)),d=me(a.rows,a.truncated,{projectDir:s,toolSemantics:this.toolSemantics}),h=C(e.toolName,c.redacted,s,{canonicalKind:this.toolSemantics.resolve(e.toolName)}),m={version:2,history:d,facts:le(d,h.normalizedPath||null,null)};return{...i,params:c.redacted,ruleContext:m}}};import At from"better-sqlite3";import f from"fs";import T from"path";import J from"crypto";import*as p from"fs";import*as ge from"path";var G=class extends Error{filePath;lockPath;constructor(e,t,r){super(e),this.name="LockAcquisitionError",this.filePath=t,this.lockPath=r}},at={maxRetries:50,baseRetryDelayMs:10,maxRetryDelayMs:500,lockStaleMs:1e4,lockSuffix:".lock"};function Se(n){try{return process.kill(n,0),!0}catch{return!1}}function he(n,e){try{let t=ge.dirname(n);p.existsSync(t)||p.mkdirSync(t,{recursive:!0});let r=p.constants.O_WRONLY|p.constants.O_CREAT|p.constants.O_EXCL,s=p.openSync(n,r);return p.writeSync(s,String(e)),p.fsyncSync(s),p.closeSync(s),!0}catch(t){if(t.code==="EEXIST")return!1;throw t}}function I(n){try{let e=p.readFileSync(n,"utf8"),t=parseInt(e.trim(),10);return Number.isNaN(t)?null:t}catch{return null}}function ct(n,e){try{I(n)===e&&p.unlinkSync(n)}catch{}}function lt(n,e){try{let t=p.statSync(n),r=I(n),s=Date.now()-t.mtimeMs>e,o=r===null||!Se(r);if(s||o)try{return p.unlinkSync(n),!0}catch{return!1}return!1}catch{return!1}}function ut(n,e,t){let r=Math.min(e*Math.pow(2,n),t),s=r*.2*Math.random();return Math.floor(r+s)}function dt(n){let e=Date.now()+n;for(;Date.now()<e;);}function pt(n,e){let t=I(e),r=t!==null?Se(t)?`alive (PID ${t})`:`dead (PID ${t})`:"unknown";return new G(`Failed to acquire lock for ${n}. Lock holder: ${r}.`,n,e)}function ft(n,e,t){let r=n+e.lockSuffix;return he(r,t)&&I(r)===t?{lockPath:r,pid:t,acquiredAt:Date.now()}:(lt(r,e.lockStaleMs),he(r,t)&&I(r)===t?{lockPath:r,pid:t,acquiredAt:Date.now()}:null)}function _t(n,e={}){let t={...at,...e},{pid:r}=process;for(let s=0;s<t.maxRetries;s++){let o=ft(n,t,r);if(o)return o;if(s<t.maxRetries-1){let i=ut(s,t.baseRetryDelayMs,t.maxRetryDelayMs);dt(i)}}throw pt(n,n+t.lockSuffix)}function mt(n){ct(n.lockPath,n.pid)}function ye(n,e,t={}){let r=_t(n,t);try{return e()}finally{mt(r)}}import*as b from"fs";var be=3,Et=50;function U(n,e){let t=n+".tmp";b.writeFileSync(t,e,"utf8");let r;for(let s=0;s<be;s++)try{b.renameSync(t,n);return}catch(o){r=o;let i=o.code;if(i==="EPERM"||i==="EBUSY"||i==="EACCES"){if(s<be-1){let c=Et*Math.pow(2,s),a=Date.now()+c,d=!1;for(;Date.now()<a;)if(!d&&Date.now()>=a-10){try{Ce("fs").accessSync?.(t)}catch{}d=!0}}continue}break}try{b.unlinkSync(t)}catch{}throw r}import*as S from"path";var l=(...n)=>S.posix.join(...n);function Tt(n){return/^[A-Za-z]:[\\/]/.test(n)||n.startsWith("\\\\")}function ht(n,e){return Tt(n)?S.win32.join(n,e):n.startsWith("/")?S.posix.join(n,e):S.join(n,e)}var u={IDENTITY:".principles",MODELS:l(".principles","models"),STATE:".state",MEMORY:"memory",OKR:l("memory","okr"),LOGS:l("memory","logs"),SESSIONS:l(".state","sessions"),PAIN_SAMPLES:l("memory","pain"),LOCKS:l("memory",".locks"),IMPL_CODE_DIR:l(".state","principles","implementations")},gt={PROFILE:l(u.IDENTITY,"PROFILE.json"),PRINCIPLES:l(u.IDENTITY,"PRINCIPLES.md"),THINKING_OS:l(u.IDENTITY,"THINKING_OS.md"),DECISION_POLICY:l(u.IDENTITY,"DECISION_POLICY.json"),MODELS_DIR:u.MODELS,STATE_DIR:u.STATE,WORKBOARD:l(u.STATE,"WORKBOARD.json"),AGENT_SCORECARD:l(u.STATE,"AGENT_SCORECARD.json"),PAIN_FLAG:l(u.STATE,".pain_flag"),SYSTEM_CAPABILITIES:l(u.STATE,"SYSTEM_CAPABILITIES.json"),PAIN_SETTINGS:l(u.STATE,"pain_settings.json"),PAIN_CANDIDATES:l(u.STATE,"pain_candidates.json"),TRAJECTORY_DB:l(u.STATE,"trajectory.db"),TRAJECTORY_BLOBS_DIR:l(u.STATE,"blobs"),EXPORTS_DIR:l(u.STATE,"exports"),SESSION_DIR:u.SESSIONS,DICTIONARY:l(u.STATE,"pain_dictionary.json"),PRINCIPLE_BLACKLIST:l(u.STATE,"principle_blacklist.json"),WORKFLOWS_YAML:l(u.STATE,"workflows.yaml"),IMPL_CODE_DIR:u.IMPL_CODE_DIR,MEMORY_MD:"MEMORY.md",HEARTBEAT:"HEARTBEAT.md",SYSTEM_LOG:l(u.LOGS,"SYSTEM.log"),REFLECTION_LOG:l(u.MEMORY,"reflection-log.md"),USER_CONTEXT:l(u.MEMORY,"USER_CONTEXT.md"),OKR_DIR:u.OKR,CURRENT_FOCUS:l(u.OKR,"CURRENT_FOCUS.md"),WEEK_STATE:l(u.OKR,"WEEK_STATE.json"),EVOLUTION_STREAM:l(u.MEMORY,"evolution.jsonl"),EVOLUTION_LOCK:l(u.LOCKS,"evolution")};function y(n,e){return ht(n,gt[e])}var St={LOCK_UNAVAILABLE:"lease_conflict",PATH_RESOLUTION_ERROR:"workspace_invalid",WORKSPACE_NOT_FOUND:"workspace_invalid",SAMPLE_NOT_FOUND:"storage_unavailable",CONFIGURATION_ERROR:"input_invalid",DEPENDENCY_ERROR:"runtime_unavailable",EVOLUTION_PROCESSING_ERROR:"execution_failed",TRAJECTORY_ERROR:"storage_unavailable"},q=class extends Error{constructor(t,r,s){super(t,s);this.code=r;this.name="PdError",this.category=St[r]??"execution_failed"}code;category};var x=class extends q{constructor(e,t){super(`[PD:Sample] Correction sample not found: ${e}`,"SAMPLE_NOT_FOUND",t),this.name="SampleNotFoundError"}};var yt=["schema_version","ingest_checkpoint","sessions","assistant_turns","user_turns","tool_calls","pain_events","gate_blocks","trust_changes","principle_events","task_outcomes","correction_samples","sample_reviews","signal_confirmations","exports_audit"];function E(n){let e=n instanceof Error?n.message:String(n);return e.includes("duplicate column name")||e.includes("no column named")}function bt(n,e){return n.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(e)!==void 0}function Re(n,e={}){let t=[],r=[...yt];n.exec("CREATE TABLE IF NOT EXISTS schema_version (version INTEGER NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS ingest_checkpoint (source_key TEXT PRIMARY KEY, imported_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS sessions (session_id TEXT PRIMARY KEY, started_at TEXT NOT NULL, updated_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS assistant_turns (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, run_id TEXT NOT NULL, provider TEXT NOT NULL, model TEXT NOT NULL, raw_text TEXT, sanitized_text TEXT NOT NULL, usage_json TEXT NOT NULL, empathy_signal_json TEXT NOT NULL, blob_ref TEXT, raw_excerpt TEXT, stop_reason TEXT, thinking_blocks_count INTEGER, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS user_turns (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, turn_index INTEGER NOT NULL, raw_text TEXT, blob_ref TEXT, raw_excerpt TEXT, correction_detected INTEGER NOT NULL DEFAULT 0, correction_cue TEXT, references_assistant_turn_id INTEGER, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS tool_calls (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, tool_name TEXT NOT NULL, outcome TEXT NOT NULL, duration_ms INTEGER, exit_code INTEGER, error_type TEXT, error_message TEXT, gfi_before REAL, gfi_after REAL, params_json TEXT NOT NULL, result_preview TEXT, created_at TEXT NOT NULL, project_dir TEXT, host_kind TEXT)"),n.exec("CREATE TABLE IF NOT EXISTS pain_events (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, source TEXT NOT NULL, score REAL NOT NULL, reason TEXT, severity TEXT, origin TEXT, confidence REAL, text TEXT, canonical_pain_id TEXT, runtime_task_id TEXT, host_kind TEXT, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS gate_blocks (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT, tool_name TEXT NOT NULL, file_path TEXT, reason TEXT NOT NULL, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS trust_changes (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT, previous_score REAL NOT NULL, new_score REAL NOT NULL, delta REAL NOT NULL, reason TEXT NOT NULL, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS principle_events (id INTEGER PRIMARY KEY AUTOINCREMENT, principle_id TEXT, event_type TEXT NOT NULL, payload_json TEXT NOT NULL, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS task_outcomes (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, task_id TEXT, outcome TEXT NOT NULL, summary TEXT, principle_ids_json TEXT NOT NULL, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS correction_samples (sample_id TEXT PRIMARY KEY, session_id TEXT NOT NULL, bad_assistant_turn_id INTEGER NOT NULL, user_correction_turn_id INTEGER NOT NULL, recovery_tool_span_json TEXT NOT NULL, diff_excerpt TEXT NOT NULL, principle_ids_json TEXT NOT NULL, quality_score REAL NOT NULL, review_status TEXT NOT NULL, export_mode TEXT NOT NULL, created_at TEXT NOT NULL, updated_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS sample_reviews (id INTEGER PRIMARY KEY AUTOINCREMENT, sample_id TEXT NOT NULL, review_status TEXT NOT NULL, note TEXT, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS signal_confirmations (id TEXT PRIMARY KEY, session_id TEXT NOT NULL, user_turn_rowid INTEGER NOT NULL UNIQUE, occurrence_id TEXT NOT NULL, excerpt TEXT NOT NULL, terms_json TEXT NOT NULL, suggested_type TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending','confirmed','rejected','abandoned')), attempts INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL, resolved_at TEXT, resolution TEXT)"),n.exec("CREATE TABLE IF NOT EXISTS exports_audit (id INTEGER PRIMARY KEY AUTOINCREMENT, export_kind TEXT NOT NULL, mode TEXT NOT NULL, approved_only INTEGER NOT NULL, file_path TEXT NOT NULL, row_count INTEGER NOT NULL, created_at TEXT NOT NULL)");try{n.exec("ALTER TABLE pain_events ADD COLUMN text TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE pain_events ADD COLUMN canonical_pain_id TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE pain_events ADD COLUMN runtime_task_id TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE pain_events ADD COLUMN host_kind TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE assistant_turns ADD COLUMN stop_reason TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE assistant_turns ADD COLUMN thinking_blocks_count INTEGER")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE tool_calls ADD COLUMN result_preview TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE tool_calls ADD COLUMN tool_use_id TEXT")}catch(s){if(!E(s))throw s}n.exec("CREATE INDEX IF NOT EXISTS idx_tool_calls_session_tool_use_id ON tool_calls(session_id, tool_use_id)");try{n.exec("ALTER TABLE tool_calls ADD COLUMN project_dir TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE tool_calls ADD COLUMN host_kind TEXT")}catch(s){if(!E(s))throw s}if(n.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_pain_events_canonical_pain_id ON pain_events(canonical_pain_id) WHERE canonical_pain_id IS NOT NULL"),bt(n,"evolution_tasks")){try{n.exec("ALTER TABLE evolution_tasks ADD COLUMN task_kind TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE evolution_tasks ADD COLUMN priority TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE evolution_tasks ADD COLUMN retry_count INTEGER")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE evolution_tasks ADD COLUMN max_retries INTEGER")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE evolution_tasks ADD COLUMN last_error TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE evolution_tasks ADD COLUMN result_ref TEXT")}catch(s){if(!E(s))throw s}}return n.exec("CREATE INDEX IF NOT EXISTS idx_assistant_turns_session_id ON assistant_turns(session_id)"),n.exec("CREATE INDEX IF NOT EXISTS idx_assistant_turns_created_at ON assistant_turns(created_at)"),n.exec("CREATE INDEX IF NOT EXISTS idx_assistant_turns_provider_model ON assistant_turns(provider, model)"),n.exec("CREATE INDEX IF NOT EXISTS idx_user_turns_session_id ON user_turns(session_id)"),n.exec("CREATE INDEX IF NOT EXISTS idx_tool_calls_session_id ON tool_calls(session_id)"),n.exec("CREATE INDEX IF NOT EXISTS idx_tool_calls_created_at ON tool_calls(created_at)"),n.exec("CREATE INDEX IF NOT EXISTS idx_pain_events_session_id ON pain_events(session_id)"),n.exec("CREATE INDEX IF NOT EXISTS idx_correction_samples_review_status ON correction_samples(review_status)"),n.exec("CREATE INDEX IF NOT EXISTS idx_signal_confirmations_status ON signal_confirmations(status, attempts)"),e.views===!0&&(n.exec("CREATE VIEW IF NOT EXISTS v_error_clusters AS SELECT tool_name, COALESCE(error_type, 'unknown') AS error_type, COUNT(*) AS occurrences FROM tool_calls WHERE outcome = 'failure' GROUP BY tool_name, COALESCE(error_type, 'unknown') ORDER BY occurrences DESC"),n.exec("CREATE VIEW IF NOT EXISTS v_principle_effectiveness AS SELECT event_type, COUNT(*) AS total FROM principle_events GROUP BY event_type ORDER BY total DESC"),n.exec("CREATE VIEW IF NOT EXISTS v_sample_queue AS SELECT review_status, COUNT(*) AS total FROM correction_samples GROUP BY review_status")),{tables:r,warnings:t}}import*as z from"path";import*as Oe from"os";var Rt=[/(^|[/\\])fake[/\\]/i,/(^|[/\\])mock[/\\]/i,/(^|[/\\])tmp[/\\]fake-/i],Ot=z.join(Oe.tmpdir(),".pd-test-quarantine");function Nt(n){if(!n)return!1;let e=n.replace(/\\/g,"/");return Rt.some(t=>t.test(e))}function Ne(n){if(!n||!(process.env.NODE_ENV==="test"||!!process.env.VITEST)||!Nt(n))return n;let t=n.replace(/[:*?"<>|]/g,"_").replace(/[/\\]/g,"_");for(;t.startsWith("_");)t=t.slice(1);for(;t.endsWith("_");)t=t.slice(0,-1);return z.join(Ot,t)}var It=16*1024,xt=5e3,vt=7;function xe(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function wt(n){return!xe(n)||typeof n.id!="number"||typeof n.session_id!="string"?!1:Object.hasOwn(n,"source")&&Object.hasOwn(n,"score")&&Object.hasOwn(n,"reason")&&Object.hasOwn(n,"severity")&&Object.hasOwn(n,"origin")&&Object.hasOwn(n,"confidence")&&Object.hasOwn(n,"text")&&Object.hasOwn(n,"canonical_pain_id")&&Object.hasOwn(n,"runtime_task_id")&&Object.hasOwn(n,"created_at")}function kt(n){let e=Re(n,{views:!0});return{tables:e.tables,warnings:e.warnings}}function _(){return new Date().toISOString()}function R(n){return JSON.stringify(n??{})}function Ae(n){try{return f.existsSync(n)?f.statSync(n).size:0}catch{return 0}}function Lt(n){return n.length>240?`${n.slice(0,237)}...`:n}function Ie(n){return n.replace(/[A-Za-z]:\\[^\s"'`]+/g,"<WINDOWS_PATH>").replace(/\/[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)+/g,"<PATH>").replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi,"<EMAIL>").replace(/\b(sk|rk|pk)_[A-Za-z0-9]+\b/g,"<TOKEN>")}function Ct(n){let e=[],t=!1;try{let r=JSON.parse(String(n.terms_json??"[]"));if(Array.isArray(r))e=r.filter(s=>typeof s=="string");else if(r!==null&&typeof r=="object"){let s=r;if(Object.hasOwn(s,"correction")){let o=s.correction;Array.isArray(o)&&(e=o.filter(i=>typeof i=="string"),t=!0)}}}catch{e=[],t=!1}return{id:String(n.id),sessionId:String(n.session_id),userTurnRowid:Number(n.user_turn_rowid),occurrenceId:String(n.occurrence_id),excerpt:String(n.excerpt),terms:e,termsVerified:t,suggestedType:String(n.suggested_type),status:String(n.status),attempts:Number(n.attempts??0),createdAt:String(n.created_at),resolvedAt:n.resolved_at===null||n.resolved_at===void 0?null:String(n.resolved_at),resolution:n.resolution===null||n.resolution===void 0?null:String(n.resolution)}}var B=class{workspaceDir;stateDir;dbPath;blobDir;exportDir;blobInlineThresholdBytes;orphanBlobGraceMs;db;constructor(e){this.workspaceDir=Ne(T.resolve(e.workspaceDir)),this.stateDir=y(this.workspaceDir,"STATE_DIR"),this.dbPath=y(this.workspaceDir,"TRAJECTORY_DB"),this.blobDir=y(this.workspaceDir,"TRAJECTORY_BLOBS_DIR"),this.exportDir=y(this.workspaceDir,"EXPORTS_DIR"),this.blobInlineThresholdBytes=e.blobInlineThresholdBytes??It,this.orphanBlobGraceMs=Math.max(0,(e.orphanBlobGraceDays??vt)*24*60*60*1e3),f.mkdirSync(this.stateDir,{recursive:!0}),f.mkdirSync(this.blobDir,{recursive:!0}),f.mkdirSync(this.exportDir,{recursive:!0}),this.db=new At(this.dbPath),this.db.pragma("journal_mode = WAL"),this.db.pragma("foreign_keys = ON"),this.db.pragma("synchronous = NORMAL"),this.db.pragma(`busy_timeout = ${Math.max(0,e.busyTimeoutMs??xt)}`),this.initSchema(),this.importLegacyArtifacts(),this.pruneUnreferencedBlobs()}dispose(){this.db.close()}get isOpen(){return this.db.open}recordSession(e){let t=e.startedAt??_();this.withWrite(()=>{this.upsertSessionUnlocked(e.sessionId,t)})}upsertSessionUnlocked(e,t){this.db.prepare(`
|
|
5
|
+
`),s+=1;continue}if(" ".includes(c)){(r||t)&&(e.push(t),t="",r=!1),s+=1;continue}if("|;&<>()".includes(c)){(r||t)&&(e.push(t),t="",r=!1);let a=c,d=n[s+1];c==="<"&&d===">"?a="<>":(c==="|"||c==="&"||c===">"||c==="<")&&d===c&&(a+=d),(c===">"||c==="<")&&d==="("&&(a+=d),e.push(a),s+=a.length;continue}t+=c,r=!0,s+=1}return i!=="plain"?null:((r||t)&&e.push(t),e)}function oe(n){if(/[\\$`|;&<>()*?~{}]/.test(n)||[...n].some(s=>s.charCodeAt(0)<32))return;let e=re(n);if(!e)return;let t=[...e],r=t.findIndex(s=>s==="-w"||s==="--workspace");if(r!==-1){let s=t[r+1];if(r!==t.length-2||!s||s.startsWith("-"))return;t.splice(r,2)}for(let s of ne){if(s.channel!=="cli"||!s.cliCommand||s.capabilityId!=="pd_status"&&s.capabilityId!=="rulecode_deactivate")continue;let o=re(s.cliCommand);if(!o||o.length!==t.length)continue;if(o.every((c,a)=>s.capabilityId==="rulecode_deactivate"&&o[a-1]==="--activation-id"?/^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/.test(t[a]??""):c===t[a]))return s.capabilityId}}var Pe=["verbose","debug"],je=["erroraction","warningaction","informationaction","progressaction","errorvariable","warningvariable","informationvariable","outvariable","outbuffer","pipelinevariable"];function S(n,e){return{switches:new Set([...Pe,...n]),valued:new Set([...je,...e])}}var qt=Object.freeze({"get-content":S(["raw","force","wait","asbytestream"],["path","literalpath","totalcount","first","tail","last","encoding","delimiter","readcount","stream","credential"]),"get-childitem":S(["recurse","force","name","file","directory","hidden","readonly","system","followsymlink"],["path","literalpath","filter","include","exclude","depth","attributes","credential"]),"get-item":S(["force","followsymlink"],["path","literalpath","filter","include","exclude","stream","credential"]),"get-itemproperty":S(["force"],["path","literalpath","name","filter","include","exclude","credential"]),"select-string":S(["simplematch","casesensitive","notmatch","allmatches","quiet","list","raw"],["pattern","path","literalpath","inputobject","encoding","context","include","exclude","credential"]),"test-path":S(["isvalid"],["path","literalpath","pathtype","filter","credential"]),"resolve-path":S(["relative"],["path","literalpath","relativebasepath","credential"]),"get-location":S(["stack"],["psprovider","psdrive"])});function C(n,e=!1){let t=[];for(let r of n.split("/").filter(s=>s.length>0))r!=="."&&(r===".."?t.length>0&&t[t.length-1]!==".."?t.pop():e&&t.push(".."):t.push(r));return t}function X(n){let e=/^([a-zA-Z]):(?:\/|$)/.exec(n);if(e)return{kind:"drive",root:`drive:${(e[1]??"").toUpperCase()}`,segments:C(n.slice(2))};if(/^[a-zA-Z]:/.test(n))return{kind:"drive-relative",root:n.slice(0,2).toUpperCase(),segments:[]};if(/^\/\/[^/]+(?:\/|$)/.test(n)){let t=n.slice(2).split("/").filter(o=>o.length>0),r=t[0]??"",s=t[1]??"";return{kind:"unc",root:`unc:${r}/${s}`,segments:C(t.slice(2).join("/"))}}return n.startsWith("/")?{kind:"posix",root:"posix:/",segments:C(n)}:{kind:"relative",root:"",segments:C(n,!0)}}function ie(n,e,t){return n.length<e.length?!1:e.every((r,s)=>{let o=n[s]??"";return t?o.toLowerCase()===r.toLowerCase():o===r})}function Ue(n,e,t){let r=0;for(;r<n.length&&r<e.length;){let o=n[r]??"",i=e[r]??"";if(!(t?o.toLowerCase()===i.toLowerCase():o===i))break;r++}return[...Array.from({length:n.length-r},()=>".."),...e.slice(r)].join("/")||"."}function ae(n){let[e,t]=n.root.slice(4).split("/"),r=n.segments.join("/");return`//${e??""}/${t??""}${r?`/${r}`:""}`}function ce(n,e,t){if(n.kind==="drive-relative"||n.kind==="unc"&&n.root.endsWith("/"))return t;if(n.kind!=="relative")return!(n.kind===e.kind&&(n.kind==="unc"?n.root.toLowerCase()===e.root.toLowerCase():n.root===e.root))||!ie(n.segments,e.segments,n.kind==="drive"||n.kind==="unc")?n.kind==="unc"?ae(n):t:n.segments.slice(e.segments.length).join("/")||".";let r=[...e.segments];for(let o of t.split("/").filter(i=>i.length>0))o!=="."&&(o===".."?r.length>0&&r[r.length-1]!==".."?r.pop():e.kind==="relative"&&r.push(".."):r.push(o));let s=e.kind==="drive"||e.kind==="unc";return ie(r,e.segments,s)?r.slice(e.segments.length).join("/")||".":Ue(e.segments,r,s)}function Be(n,e){if(!n||typeof n!="string")return"";let t=n.replace(/\\/g,"/"),r=e.replace(/\\/g,"/");if(t.startsWith("<tool:")&&t.endsWith(">"))return t;let s=X(t),o=X(r);if(s.kind==="drive"&&o.kind!=="drive"&&o.kind!=="unc"){let c=`/mnt/${s.root.slice(-1).toLowerCase()}/${s.segments.join("/")}`;return s=X(c),ce(s,o,c)}return ce(s,o,t)}function Fe(n,e){let t=n.file_path||n.path||n.file||n.target;if(typeof t=="string"&&t.length>0)return{value:t,isPath:!0};if(e.isBashTool){let r=String(n.command||n.args||"");if(r){let s=/(?:>|>>|sed\s+-i|rm|mv|mkdir|touch|cp)\s+(?:-[a-zA-Z]+\s+)*([^\s;&|<>]+)/.exec(r);return s&&s[1]?{value:s[1],isPath:!0}:{value:r,isPath:!1}}}return e.isWriteTool&&e.toolName?{value:`<tool:${e.toolName}>`,isPath:!0}:{value:null,isPath:!0}}function We(n){return{isBashTool:n==="execute",isWriteTool:n==="write"}}function Xe(n){if(n.canonicalKind===void 0)return n;let e=We(n.canonicalKind);return{...n,isBashTool:n.isBashTool??e.isBashTool,isWriteTool:n.isWriteTool??e.isWriteTool}}function D(n,e,t,r={}){let s=Xe(r),o=Fe(e,{...s,toolName:n}),i=o.isPath?Be(o.value,t):o.value,c=e.command??e.args,a=s.isBashTool&&typeof c=="string"?oe(c):void 0;return{toolName:n,normalizedPath:i,...a?{recoveryControl:a}:{},paramsSummary:{...e},...s.canonicalKind!==void 0?{canonicalKind:s.canonicalKind}:{}}}var $=new Set(["read","search","write","execute","agent","other"]);function le(n){return typeof n=="string"&&$.has(n)}var M=Object.freeze({read:"read",read_file:"read",read_many_files:"read",grep:"search",grep_search:"search",search_file_content:"search",glob:"search",write:"write",write_file:"write",edit:"write",edit_file:"write",replace:"write",apply_patch:"write",bash:"execute",exec:"execute",execute:"execute",run_shell_command:"execute",execute_command:"execute",run_script:"execute",code_interpreter:"execute",sessions_spawn:"agent"});function ue(n,e,t){if(n.status==="unavailable")return{priorReadOfTarget:"unknown",readCount:null,writeCount:null,uniqueWritePathCount:null,sameActionBlockCount:null};let r=0,s=0,o=new Set,i=e===null?"unknown":"no",{calls:c}=n;for(let a of c){let d=a.canonicalKind;d==="read"||d==="search"?(r++,e!==null&&a.normalizedPath===e&&(i="yes")):d==="write"&&(s++,typeof a.normalizedPath=="string"&&o.add(a.normalizedPath))}return{priorReadOfTarget:i,readCount:r,writeCount:s,uniqueWritePathCount:o.size,sameActionBlockCount:t}}var de={priorReadOfTarget:"unknown",readCount:null,writeCount:null,uniqueWritePathCount:null,sameActionBlockCount:null};Object.freeze(de);var H={status:"unavailable",unavailableReason:"host did not provide a history window",truncated:!1,calls:[]};Object.freeze(H.calls);Object.freeze(H);var $e={version:2,history:H,facts:de};Object.freeze($e);var He=new Set(["__proto__","constructor","prototype"]),pe=3,Ye=5,Ke=new Set(["allow","block","propose_correction"]),Ge={valid:!0,errors:[]};function Y(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function me(n){for(let e of Object.keys(n))if(He.has(e))return!1;return!0}function qe(n){return n.length===0?Ge:{valid:!1,errors:n}}function K(n){return typeof n=="string"&&n.trim().length>0}function fe(n,e,t){let r=[];return Y(n)?me(n)?((!Object.hasOwn(n,"caseId")||!K(n.caseId))&&r.push(`${e}.caseId must be a non-empty string`),(!Object.hasOwn(n,"kind")||n.kind!==t)&&r.push(`${e}.kind must be '${t}'`),(!Object.hasOwn(n,"toolName")||!K(n.toolName))&&r.push(`${e}.toolName must be a non-empty string`),(!Object.hasOwn(n,"params")||!Y(n.params))&&r.push(`${e}.params must be a plain object`),!Object.hasOwn(n,"expectedDecision")||typeof n.expectedDecision!="string"||!Ke.has(n.expectedDecision)?r.push(`${e}.expectedDecision must be one of allow|block|propose_correction`):t==="positive"&&n.expectedDecision!=="allow"&&r.push(`${e}: positive cases must expect allow`),r):(r.push(`${e} must not carry prototype-pollution keys`),r):(r.push(`${e} must be a plain object`),r)}function _e(n,e){let{fieldName:t,maxLength:r,requireNonEmpty:s}=e,o=[];if(!Array.isArray(n))return o.push(`${t} must be an array`),o;s&&n.length===0&&o.push(`${t} must contain at least 1 item`),r!==void 0&&n.length>r&&o.push(`${t} must contain at most ${r} items, got ${n.length}`);for(let i=0;i<n.length;i++)typeof n[i]!="string"&&o.push(`${t}[${i}] must be a string`);return o}function P(n){return Array.isArray(n)?`[${n.map(e=>P(e)).join(",")}]`:typeof n=="object"&&n!==null?`{${Object.keys(n).filter(t=>t!=="__proto__"&&t!=="constructor"&&t!=="prototype").sort().map(t=>`${JSON.stringify(t)}:${P(n[t])}`).join(",")}}`:JSON.stringify(n)??"null"}function G(n){if(!Y(n))return{valid:!1,errors:["BehaviorExamplePack must be a plain object"]};if(!me(n))return{valid:!1,errors:["BehaviorExamplePack must not carry prototype-pollution keys"]};let e=[];if(Object.hasOwn(n,"sourceNegativeCase")?e.push(...fe(n.sourceNegativeCase,"sourceNegativeCase","negative")):e.push("sourceNegativeCase is required"),(!Object.hasOwn(n,"ownerDesiredOutcome")||!K(n.ownerDesiredOutcome))&&e.push("ownerDesiredOutcome must be a non-empty string"),!Object.hasOwn(n,"positiveCounterexamples"))e.push("positiveCounterexamples is required");else if(!Array.isArray(n.positiveCounterexamples))e.push("positiveCounterexamples must be an array");else{let t=n.positiveCounterexamples;t.length===0&&e.push("positiveCounterexamples must contain at least 1 item"),t.length>pe&&e.push(`positiveCounterexamples must contain at most ${pe} items, got ${t.length}`);for(let r=0;r<t.length;r++)e.push(...fe(t[r],`positiveCounterexamples[${r}]`,"positive"))}if(Object.hasOwn(n,"evidenceRefs")?e.push(..._e(n.evidenceRefs,{fieldName:"evidenceRefs",maxLength:Ye,requireNonEmpty:!0})):e.push("evidenceRefs is required"),Object.hasOwn(n,"redactionNotes")?e.push(..._e(n.redactionNotes,{fieldName:"redactionNotes"})):e.push("redactionNotes is required"),e.length===0){let t=n.sourceNegativeCase,r=n.positiveCounterexamples,s=P({toolName:t.toolName,params:t.params,ruleContext:t.ruleContext});for(let o=0;o<r.length;o++){let i=r[o];i!==void 0&&P({toolName:i.toolName,params:i.params,ruleContext:i.ruleContext})===s&&e.push(`positiveCounterexamples[${o}] conflicting_label: identical effective input (toolName + params + ruleContext) as sourceNegativeCase but opposite expectedDecision \u2014 same input cannot carry both labels`)}}return qe(e)}var ze="OwnerEvidenceScopeError";function A(n,e){let t=new Error(e);return t.name=ze,Object.assign(t,{ownerEvidenceScopeKind:n}),t}var Ve=new Set(["success","failure","blocked"]);function Je(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Ze(n){return typeof n=="string"&&Ve.has(n)}function I(n){return{status:"unavailable",unavailableReason:n,truncated:!1,calls:[]}}function Ee(n,e,t){let{projectDir:r,toolSemantics:s}=t,o=[];for(let i of n){let{toolName:c}=i;if(typeof c!="string"||c.length===0)return I(`row id=${i.id}: tool_name must be a non-empty string`);let{outcome:a}=i;if(!Ze(a))return I(`row id=${i.id}: outcome "${i.outcome}" is not a valid RuleToolOutcome`);let d=i.paramsJson;if(typeof d!="string")return I(`row id=${i.id}: params_json must be a string`);let T;try{T=JSON.parse(d)}catch{return I(`row id=${i.id}: params_json is not valid JSON`)}if(!Je(T))return I(`row id=${i.id}: params_json must parse to a non-array object`);let m=s.resolve(c),{normalizedPath:g}=D(c,T,r,{canonicalKind:m});o.push({sequenceId:i.id,toolName:c,canonicalKind:m,normalizedPath:g===""?null:g,paramsSummary:T,outcome:a})}return{status:"available",truncated:e,calls:o}}var Qe=3,et=5,tt=100,Te=new Set(["__proto__","constructor","prototype"]);function j(n,e){try{return e()}catch(t){let r=t instanceof Error?t.message:String(t);throw A("evidence_source_error",`[BehaviorExamplePackAssembler] trajectory store ${n} failed (evidence source error, SPEC-PD-IAER-001 \xA76.2): ${r}`)}}function nt(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function rt(n){for(let e of Object.keys(n))if(Te.has(e))return!1;return!0}function st(n){if(!Number.isSafeInteger(n.sourceNegativeToolCallId)||n.sourceNegativeToolCallId<=0)throw new Error("[BehaviorExamplePackAssembler] sourceNegativeToolCallId must be a positive integer");if(!Array.isArray(n.positiveToolCallIds)||n.positiveToolCallIds.length===0||n.positiveToolCallIds.length>Qe)throw new Error("[BehaviorExamplePackAssembler] positiveToolCallIds must contain 1 to at most 3 IDs");let e=[n.sourceNegativeToolCallId,...n.positiveToolCallIds];if(e.some(t=>!Number.isSafeInteger(t)||t<=0)||new Set(e).size!==e.length)throw new Error("[BehaviorExamplePackAssembler] selected tool call IDs must be unique positive integers")}function he(n,e){if(!n)throw A("tool_call_not_found",`[BehaviorExamplePackAssembler] selected tool call id=${e} not found`);return n}function ot(n,e,t){if(typeof n.toolName!="string"||n.toolName.length===0)throw new Error(`[BehaviorExamplePackAssembler] row id=${n.id}: toolName must be a non-empty string (rc-9 fail loud)`);if(typeof n.paramsJson!="string")throw new Error(`[BehaviorExamplePackAssembler] row id=${n.id}: paramsJson must be a string (rc-9 fail loud)`);let r;try{r=JSON.parse(n.paramsJson)}catch{throw new Error(`[BehaviorExamplePackAssembler] row id=${n.id}: paramsJson is not valid JSON (rc-9 fail loud)`)}if(!nt(r))throw new Error(`[BehaviorExamplePackAssembler] row id=${n.id}: paramsJson must parse to a non-array object (rc-9 fail loud)`);if(!rt(r))throw new Error(`[BehaviorExamplePackAssembler] row id=${n.id}: paramsJson must not carry prototype-pollution keys (ERR-076, rc-9 fail loud)`);return{caseId:`case-${e}-${n.id}`,kind:e,toolName:n.toolName,params:r,expectedDecision:t}}function it(n){return n.startsWith("/")||/^[A-Za-z]:[\\/]/.test(n)}var at=[/AKIA[0-9A-Z]{16}/,/[A-Za-z0-9+/]{40,}/];function ct(n){if(n.length<20)return!1;for(let e of at)if(e.test(n))return!0;return!1}function lt(n,e){let t=[],r={};for(let s of Object.keys(n)){if(Te.has(s))continue;let o=n[s];if(typeof o!="string"){r[s]=o;continue}if(it(o)&&!o.startsWith(e)){r[s]="<redacted:absolute-path>",t.push(`redacted absolute path in field "${s}" (outside project tree)`);continue}if(ct(o)){r[s]="<redacted:secret>",t.push(`redacted possible secret in field "${s}"`);continue}r[s]=o}return{redacted:r,notes:t}}var U=class{db;toolSemantics;constructor(e){this.db=e.source,this.toolSemantics=e.toolSemantics}assemble(e){let t=j(`pain lineage read for canonical_pain_id="${e.sourcePainId}"`,()=>this.db.getPainEventByCanonicalId(e.sourcePainId));if(!t)throw A("pain_not_found",`[BehaviorExamplePackAssembler] pain event not found for canonical_pain_id="${e.sourcePainId}" (ERR-069 fail loud)`);st(e);let r=he(j(`evidence row read for id=${e.sourceNegativeToolCallId}`,()=>this.db.getRuleHostEvidenceRow(e.sourceNegativeToolCallId)),e.sourceNegativeToolCallId),s=e.positiveToolCallIds.map(m=>he(j(`evidence row read for id=${m}`,()=>this.db.getRuleHostEvidenceRow(m)),m));for(let m of[r,...s])if(m.sessionId!==t.sessionId)throw A("session_mismatch",`[BehaviorExamplePackAssembler] selected tool call ${m.id} session mismatch; all examples must belong to pain session ${t.sessionId}`);let o=[],i={projectDir:e.projectDir,redactionNotes:o},c=this.buildSelectedCase(r,"negative",i),a=s.map(m=>this.buildSelectedCase(m,"positive",i)),d={sourceNegativeCase:c,ownerDesiredOutcome:e.ownerDesiredOutcome,positiveCounterexamples:a,evidenceRefs:[`pain:${t.id}`,`tool_call:${r.id}`,...s.map(m=>`tool_call:${m.id}`)].slice(0,et),redactionNotes:o},T=G(d);if(!T.valid)throw new Error(`[BehaviorExamplePackAssembler] assembled pack failed validateBehaviorExamplePack: ${T.errors.join("; ")} (ERR-069 fail loud)`);return d}buildSelectedCase(e,t,r){let{projectDir:s,redactionNotes:o}=r,i=ot(e,t,t==="negative"?"block":"allow"),c=lt(i.params,s);o.push(...c.notes);let a=j(`context history read for session=${e.sessionId} before id=${e.id}`,()=>this.db.getRuleHostContextRowsBefore(e.sessionId,e.id,tt)),d=Ee(a.rows,a.truncated,{projectDir:s,toolSemantics:this.toolSemantics}),T=D(e.toolName,c.redacted,s,{canonicalKind:this.toolSemantics.resolve(e.toolName)}),m={version:2,history:d,facts:ue(d,T.normalizedPath||null,null)};return{...i,params:c.redacted,ruleContext:m}}};import vt from"better-sqlite3";import f from"fs";import h from"path";import Z from"crypto";import*as p from"fs";import*as Se from"path";var q=class extends Error{filePath;lockPath;constructor(e,t,r){super(e),this.name="LockAcquisitionError",this.filePath=t,this.lockPath=r}},ut={maxRetries:50,baseRetryDelayMs:10,maxRetryDelayMs:500,lockStaleMs:1e4,lockSuffix:".lock"};function ye(n){try{return process.kill(n,0),!0}catch{return!1}}function ge(n,e){try{let t=Se.dirname(n);p.existsSync(t)||p.mkdirSync(t,{recursive:!0});let r=p.constants.O_WRONLY|p.constants.O_CREAT|p.constants.O_EXCL,s=p.openSync(n,r);return p.writeSync(s,String(e)),p.fsyncSync(s),p.closeSync(s),!0}catch(t){if(t.code==="EEXIST")return!1;throw t}}function w(n){try{let e=p.readFileSync(n,"utf8"),t=parseInt(e.trim(),10);return Number.isNaN(t)?null:t}catch{return null}}function dt(n,e){try{w(n)===e&&p.unlinkSync(n)}catch{}}function pt(n,e){try{let t=p.statSync(n),r=w(n),s=Date.now()-t.mtimeMs>e,o=r===null||!ye(r);if(s||o)try{return p.unlinkSync(n),!0}catch{return!1}return!1}catch{return!1}}function ft(n,e,t){let r=Math.min(e*Math.pow(2,n),t),s=r*.2*Math.random();return Math.floor(r+s)}function _t(n){let e=Date.now()+n;for(;Date.now()<e;);}function mt(n,e){let t=w(e),r=t!==null?ye(t)?`alive (PID ${t})`:`dead (PID ${t})`:"unknown";return new q(`Failed to acquire lock for ${n}. Lock holder: ${r}.`,n,e)}function Et(n,e,t){let r=n+e.lockSuffix;return ge(r,t)&&w(r)===t?{lockPath:r,pid:t,acquiredAt:Date.now()}:(pt(r,e.lockStaleMs),ge(r,t)&&w(r)===t?{lockPath:r,pid:t,acquiredAt:Date.now()}:null)}function ht(n,e={}){let t={...ut,...e},{pid:r}=process;for(let s=0;s<t.maxRetries;s++){let o=Et(n,t,r);if(o)return o;if(s<t.maxRetries-1){let i=ft(s,t.baseRetryDelayMs,t.maxRetryDelayMs);_t(i)}}throw mt(n,n+t.lockSuffix)}function Tt(n){dt(n.lockPath,n.pid)}function be(n,e,t={}){let r=ht(n,t);try{return e()}finally{Tt(r)}}import*as O from"fs";var Oe=3,gt=50;function B(n,e){let t=n+".tmp";O.writeFileSync(t,e,"utf8");let r;for(let s=0;s<Oe;s++)try{O.renameSync(t,n);return}catch(o){r=o;let i=o.code;if(i==="EPERM"||i==="EBUSY"||i==="EACCES"){if(s<Oe-1){let c=gt*Math.pow(2,s),a=Date.now()+c,d=!1;for(;Date.now()<a;)if(!d&&Date.now()>=a-10){try{De("fs").accessSync?.(t)}catch{}d=!0}}continue}break}try{O.unlinkSync(t)}catch{}throw r}import*as y from"path";var l=(...n)=>y.posix.join(...n);function St(n){return/^[A-Za-z]:[\\/]/.test(n)||n.startsWith("\\\\")}function yt(n,e){return St(n)?y.win32.join(n,e):n.startsWith("/")?y.posix.join(n,e):y.join(n,e)}var u={IDENTITY:".principles",MODELS:l(".principles","models"),STATE:".state",MEMORY:"memory",OKR:l("memory","okr"),LOGS:l("memory","logs"),SESSIONS:l(".state","sessions"),PAIN_SAMPLES:l("memory","pain"),LOCKS:l("memory",".locks"),IMPL_CODE_DIR:l(".state","principles","implementations")},bt={PROFILE:l(u.IDENTITY,"PROFILE.json"),PRINCIPLES:l(u.IDENTITY,"PRINCIPLES.md"),THINKING_OS:l(u.IDENTITY,"THINKING_OS.md"),DECISION_POLICY:l(u.IDENTITY,"DECISION_POLICY.json"),MODELS_DIR:u.MODELS,STATE_DIR:u.STATE,WORKBOARD:l(u.STATE,"WORKBOARD.json"),AGENT_SCORECARD:l(u.STATE,"AGENT_SCORECARD.json"),PAIN_FLAG:l(u.STATE,".pain_flag"),SYSTEM_CAPABILITIES:l(u.STATE,"SYSTEM_CAPABILITIES.json"),PAIN_SETTINGS:l(u.STATE,"pain_settings.json"),PAIN_CANDIDATES:l(u.STATE,"pain_candidates.json"),TRAJECTORY_DB:l(u.STATE,"trajectory.db"),TRAJECTORY_BLOBS_DIR:l(u.STATE,"blobs"),EXPORTS_DIR:l(u.STATE,"exports"),SESSION_DIR:u.SESSIONS,DICTIONARY:l(u.STATE,"pain_dictionary.json"),PRINCIPLE_BLACKLIST:l(u.STATE,"principle_blacklist.json"),WORKFLOWS_YAML:l(u.STATE,"workflows.yaml"),IMPL_CODE_DIR:u.IMPL_CODE_DIR,MEMORY_MD:"MEMORY.md",HEARTBEAT:"HEARTBEAT.md",SYSTEM_LOG:l(u.LOGS,"SYSTEM.log"),REFLECTION_LOG:l(u.MEMORY,"reflection-log.md"),USER_CONTEXT:l(u.MEMORY,"USER_CONTEXT.md"),OKR_DIR:u.OKR,CURRENT_FOCUS:l(u.OKR,"CURRENT_FOCUS.md"),WEEK_STATE:l(u.OKR,"WEEK_STATE.json"),EVOLUTION_STREAM:l(u.MEMORY,"evolution.jsonl"),EVOLUTION_LOCK:l(u.LOCKS,"evolution")};function b(n,e){return yt(n,bt[e])}var Ot={LOCK_UNAVAILABLE:"lease_conflict",PATH_RESOLUTION_ERROR:"workspace_invalid",WORKSPACE_NOT_FOUND:"workspace_invalid",SAMPLE_NOT_FOUND:"storage_unavailable",CONFIGURATION_ERROR:"input_invalid",DEPENDENCY_ERROR:"runtime_unavailable",EVOLUTION_PROCESSING_ERROR:"execution_failed",TRAJECTORY_ERROR:"storage_unavailable"},z=class extends Error{constructor(t,r,s){super(t,s);this.code=r;this.name="PdError",this.category=Ot[r]??"execution_failed"}code;category};var v=class extends z{constructor(e,t){super(`[PD:Sample] Correction sample not found: ${e}`,"SAMPLE_NOT_FOUND",t),this.name="SampleNotFoundError"}};var Rt=["schema_version","ingest_checkpoint","sessions","assistant_turns","user_turns","tool_calls","pain_events","gate_blocks","trust_changes","principle_events","task_outcomes","correction_samples","sample_reviews","signal_confirmations","exports_audit"];function E(n){let e=n instanceof Error?n.message:String(n);return e.includes("duplicate column name")||e.includes("no column named")}function Nt(n,e){return n.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(e)!==void 0}function Re(n,e={}){let t=[],r=[...Rt];n.exec("CREATE TABLE IF NOT EXISTS schema_version (version INTEGER NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS ingest_checkpoint (source_key TEXT PRIMARY KEY, imported_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS sessions (session_id TEXT PRIMARY KEY, started_at TEXT NOT NULL, updated_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS assistant_turns (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, run_id TEXT NOT NULL, provider TEXT NOT NULL, model TEXT NOT NULL, raw_text TEXT, sanitized_text TEXT NOT NULL, usage_json TEXT NOT NULL, empathy_signal_json TEXT NOT NULL, blob_ref TEXT, raw_excerpt TEXT, stop_reason TEXT, thinking_blocks_count INTEGER, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS user_turns (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, turn_index INTEGER NOT NULL, raw_text TEXT, blob_ref TEXT, raw_excerpt TEXT, correction_detected INTEGER NOT NULL DEFAULT 0, correction_cue TEXT, references_assistant_turn_id INTEGER, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS tool_calls (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, tool_name TEXT NOT NULL, outcome TEXT NOT NULL, duration_ms INTEGER, exit_code INTEGER, error_type TEXT, error_message TEXT, gfi_before REAL, gfi_after REAL, params_json TEXT NOT NULL, result_preview TEXT, created_at TEXT NOT NULL, project_dir TEXT, host_kind TEXT)"),n.exec("CREATE TABLE IF NOT EXISTS pain_events (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, source TEXT NOT NULL, score REAL NOT NULL, reason TEXT, severity TEXT, origin TEXT, confidence REAL, text TEXT, canonical_pain_id TEXT, runtime_task_id TEXT, host_kind TEXT, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS gate_blocks (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT, tool_name TEXT NOT NULL, file_path TEXT, reason TEXT NOT NULL, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS trust_changes (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT, previous_score REAL NOT NULL, new_score REAL NOT NULL, delta REAL NOT NULL, reason TEXT NOT NULL, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS principle_events (id INTEGER PRIMARY KEY AUTOINCREMENT, principle_id TEXT, event_type TEXT NOT NULL, payload_json TEXT NOT NULL, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS task_outcomes (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, task_id TEXT, outcome TEXT NOT NULL, summary TEXT, principle_ids_json TEXT NOT NULL, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS correction_samples (sample_id TEXT PRIMARY KEY, session_id TEXT NOT NULL, bad_assistant_turn_id INTEGER NOT NULL, user_correction_turn_id INTEGER NOT NULL, recovery_tool_span_json TEXT NOT NULL, diff_excerpt TEXT NOT NULL, principle_ids_json TEXT NOT NULL, quality_score REAL NOT NULL, review_status TEXT NOT NULL, export_mode TEXT NOT NULL, created_at TEXT NOT NULL, updated_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS sample_reviews (id INTEGER PRIMARY KEY AUTOINCREMENT, sample_id TEXT NOT NULL, review_status TEXT NOT NULL, note TEXT, created_at TEXT NOT NULL)"),n.exec("CREATE TABLE IF NOT EXISTS signal_confirmations (id TEXT PRIMARY KEY, session_id TEXT NOT NULL, user_turn_rowid INTEGER NOT NULL UNIQUE, occurrence_id TEXT NOT NULL, excerpt TEXT NOT NULL, terms_json TEXT NOT NULL, suggested_type TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending','confirmed','rejected','abandoned')), attempts INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL, resolved_at TEXT, resolution TEXT)"),n.exec("CREATE TABLE IF NOT EXISTS exports_audit (id INTEGER PRIMARY KEY AUTOINCREMENT, export_kind TEXT NOT NULL, mode TEXT NOT NULL, approved_only INTEGER NOT NULL, file_path TEXT NOT NULL, row_count INTEGER NOT NULL, created_at TEXT NOT NULL)");try{n.exec("ALTER TABLE pain_events ADD COLUMN text TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE pain_events ADD COLUMN canonical_pain_id TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE pain_events ADD COLUMN runtime_task_id TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE pain_events ADD COLUMN host_kind TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE assistant_turns ADD COLUMN stop_reason TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE assistant_turns ADD COLUMN thinking_blocks_count INTEGER")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE tool_calls ADD COLUMN result_preview TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE tool_calls ADD COLUMN tool_use_id TEXT")}catch(s){if(!E(s))throw s}n.exec("CREATE INDEX IF NOT EXISTS idx_tool_calls_session_tool_use_id ON tool_calls(session_id, tool_use_id)");try{n.exec("ALTER TABLE tool_calls ADD COLUMN project_dir TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE tool_calls ADD COLUMN host_kind TEXT")}catch(s){if(!E(s))throw s}if(n.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_pain_events_canonical_pain_id ON pain_events(canonical_pain_id) WHERE canonical_pain_id IS NOT NULL"),Nt(n,"evolution_tasks")){try{n.exec("ALTER TABLE evolution_tasks ADD COLUMN task_kind TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE evolution_tasks ADD COLUMN priority TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE evolution_tasks ADD COLUMN retry_count INTEGER")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE evolution_tasks ADD COLUMN max_retries INTEGER")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE evolution_tasks ADD COLUMN last_error TEXT")}catch(s){if(!E(s))throw s}try{n.exec("ALTER TABLE evolution_tasks ADD COLUMN result_ref TEXT")}catch(s){if(!E(s))throw s}}return n.exec("CREATE INDEX IF NOT EXISTS idx_assistant_turns_session_id ON assistant_turns(session_id)"),n.exec("CREATE INDEX IF NOT EXISTS idx_assistant_turns_created_at ON assistant_turns(created_at)"),n.exec("CREATE INDEX IF NOT EXISTS idx_assistant_turns_provider_model ON assistant_turns(provider, model)"),n.exec("CREATE INDEX IF NOT EXISTS idx_user_turns_session_id ON user_turns(session_id)"),n.exec("CREATE INDEX IF NOT EXISTS idx_tool_calls_session_id ON tool_calls(session_id)"),n.exec("CREATE INDEX IF NOT EXISTS idx_tool_calls_created_at ON tool_calls(created_at)"),n.exec("CREATE INDEX IF NOT EXISTS idx_pain_events_session_id ON pain_events(session_id)"),n.exec("CREATE INDEX IF NOT EXISTS idx_correction_samples_review_status ON correction_samples(review_status)"),n.exec("CREATE INDEX IF NOT EXISTS idx_signal_confirmations_status ON signal_confirmations(status, attempts)"),e.views===!0&&(n.exec("CREATE VIEW IF NOT EXISTS v_error_clusters AS SELECT tool_name, COALESCE(error_type, 'unknown') AS error_type, COUNT(*) AS occurrences FROM tool_calls WHERE outcome = 'failure' GROUP BY tool_name, COALESCE(error_type, 'unknown') ORDER BY occurrences DESC"),n.exec("CREATE VIEW IF NOT EXISTS v_principle_effectiveness AS SELECT event_type, COUNT(*) AS total FROM principle_events GROUP BY event_type ORDER BY total DESC"),n.exec("CREATE VIEW IF NOT EXISTS v_sample_queue AS SELECT review_status, COUNT(*) AS total FROM correction_samples GROUP BY review_status")),{tables:r,warnings:t}}import*as V from"path";import*as Ne from"os";var At=[/(^|[/\\])fake[/\\]/i,/(^|[/\\])mock[/\\]/i,/(^|[/\\])tmp[/\\]fake-/i],It=V.join(Ne.tmpdir(),".pd-test-quarantine");function wt(n){if(!n)return!1;let e=n.replace(/\\/g,"/");return At.some(t=>t.test(e))}function Ae(n){if(!n||!(process.env.NODE_ENV==="test"||!!process.env.VITEST)||!wt(n))return n;let t=n.replace(/[:*?"<>|]/g,"_").replace(/[/\\]/g,"_");for(;t.startsWith("_");)t=t.slice(1);for(;t.endsWith("_");)t=t.slice(0,-1);return V.join(It,t)}var xt=16*1024,kt=5e3,Lt=7;function ve(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Ct(n){return!ve(n)||typeof n.id!="number"||typeof n.session_id!="string"?!1:Object.hasOwn(n,"source")&&Object.hasOwn(n,"score")&&Object.hasOwn(n,"reason")&&Object.hasOwn(n,"severity")&&Object.hasOwn(n,"origin")&&Object.hasOwn(n,"confidence")&&Object.hasOwn(n,"text")&&Object.hasOwn(n,"canonical_pain_id")&&Object.hasOwn(n,"runtime_task_id")&&Object.hasOwn(n,"created_at")}function Dt(n){let e=Re(n,{views:!0});return{tables:e.tables,warnings:e.warnings}}function _(){return new Date().toISOString()}function R(n){return JSON.stringify(n??{})}function Ie(n){try{return f.existsSync(n)?f.statSync(n).size:0}catch{return 0}}function Mt(n){return n.length>240?`${n.slice(0,237)}...`:n}function we(n){return n.replace(/[A-Za-z]:\\[^\s"'`]+/g,"<WINDOWS_PATH>").replace(/\/[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)+/g,"<PATH>").replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi,"<EMAIL>").replace(/\b(sk|rk|pk)_[A-Za-z0-9]+\b/g,"<TOKEN>")}function Pt(n){let e=[],t=!1;try{let r=JSON.parse(String(n.terms_json??"[]"));if(Array.isArray(r))e=r.filter(s=>typeof s=="string");else if(r!==null&&typeof r=="object"){let s=r;if(Object.hasOwn(s,"correction")){let o=s.correction;Array.isArray(o)&&(e=o.filter(i=>typeof i=="string"),t=!0)}}}catch{e=[],t=!1}return{id:String(n.id),sessionId:String(n.session_id),userTurnRowid:Number(n.user_turn_rowid),occurrenceId:String(n.occurrence_id),excerpt:String(n.excerpt),terms:e,termsVerified:t,suggestedType:String(n.suggested_type),status:String(n.status),attempts:Number(n.attempts??0),createdAt:String(n.created_at),resolvedAt:n.resolved_at===null||n.resolved_at===void 0?null:String(n.resolved_at),resolution:n.resolution===null||n.resolution===void 0?null:String(n.resolution)}}var F=class{workspaceDir;stateDir;dbPath;blobDir;exportDir;blobInlineThresholdBytes;orphanBlobGraceMs;db;constructor(e){this.workspaceDir=Ae(h.resolve(e.workspaceDir)),this.stateDir=b(this.workspaceDir,"STATE_DIR"),this.dbPath=b(this.workspaceDir,"TRAJECTORY_DB"),this.blobDir=b(this.workspaceDir,"TRAJECTORY_BLOBS_DIR"),this.exportDir=b(this.workspaceDir,"EXPORTS_DIR"),this.blobInlineThresholdBytes=e.blobInlineThresholdBytes??xt,this.orphanBlobGraceMs=Math.max(0,(e.orphanBlobGraceDays??Lt)*24*60*60*1e3),f.mkdirSync(this.stateDir,{recursive:!0}),f.mkdirSync(this.blobDir,{recursive:!0}),f.mkdirSync(this.exportDir,{recursive:!0}),this.db=new vt(this.dbPath),this.db.pragma("journal_mode = WAL"),this.db.pragma("foreign_keys = ON"),this.db.pragma("synchronous = NORMAL"),this.db.pragma(`busy_timeout = ${Math.max(0,e.busyTimeoutMs??kt)}`),this.initSchema(),this.importLegacyArtifacts(),this.pruneUnreferencedBlobs()}dispose(){this.db.close()}get isOpen(){return this.db.open}recordSession(e){let t=e.startedAt??_();this.withWrite(()=>{this.upsertSessionUnlocked(e.sessionId,t)})}upsertSessionUnlocked(e,t){this.db.prepare(`
|
|
6
6
|
INSERT INTO sessions (session_id, started_at, updated_at)
|
|
7
7
|
VALUES (?, ?, ?)
|
|
8
8
|
ON CONFLICT(session_id) DO UPDATE SET updated_at = excluded.updated_at
|
|
@@ -104,7 +104,7 @@ var Ce=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(
|
|
|
104
104
|
FROM tool_calls
|
|
105
105
|
WHERE id = ?
|
|
106
106
|
LIMIT 1
|
|
107
|
-
`).get(e);return!
|
|
107
|
+
`).get(e);return!ve(t)||typeof t.id!="number"||typeof t.session_id!="string"||typeof t.tool_name!="string"||typeof t.outcome!="string"||typeof t.params_json!="string"?null:{id:t.id,sessionId:t.session_id,toolName:t.tool_name,outcome:t.outcome,paramsJson:t.params_json}}getRuleHostContextRowsBefore(e,t,r=20){let s=Math.max(1,Math.floor(r)),o=this.db.prepare(`
|
|
108
108
|
SELECT id, tool_name, outcome, params_json
|
|
109
109
|
FROM tool_calls
|
|
110
110
|
WHERE session_id = ? AND id < ?
|
|
@@ -121,7 +121,7 @@ var Ce=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(
|
|
|
121
121
|
FROM pain_events
|
|
122
122
|
WHERE canonical_pain_id = ?
|
|
123
123
|
LIMIT 1
|
|
124
|
-
`).get(e);return
|
|
124
|
+
`).get(e);return Ct(t)?{id:t.id,sessionId:t.session_id,source:String(t.source),score:Number(t.score),reason:t.reason?String(t.reason):null,severity:t.severity?String(t.severity):null,origin:t.origin?String(t.origin):null,confidence:t.confidence!=null?Number(t.confidence):null,text:t.text?String(t.text):null,canonicalPainId:String(t.canonical_pain_id),runtimeTaskId:t.runtime_task_id?String(t.runtime_task_id):null,createdAt:String(t.created_at)}:null}listUserTurnsForSession(e){return this.db.prepare(`
|
|
125
125
|
SELECT id, turn_index, raw_excerpt, correction_detected, correction_cue, created_at
|
|
126
126
|
FROM user_turns
|
|
127
127
|
WHERE session_id = ?
|
|
@@ -156,13 +156,13 @@ var Ce=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(
|
|
|
156
156
|
`).run(t,s,e).changes===0?!1:(this.db.prepare(`
|
|
157
157
|
INSERT INTO sample_reviews (sample_id, review_status, note, created_at)
|
|
158
158
|
VALUES (?, ?, ?, ?)
|
|
159
|
-
`).run(e,t,r??null,s),!0)))throw new
|
|
159
|
+
`).run(e,t,r??null,s),!0)))throw new v(e);let i=this.db.prepare(`
|
|
160
160
|
SELECT sample_id, session_id, bad_assistant_turn_id, user_correction_turn_id,
|
|
161
161
|
recovery_tool_span_json, diff_excerpt, principle_ids_json, quality_score,
|
|
162
162
|
review_status, export_mode, created_at, updated_at
|
|
163
163
|
FROM correction_samples
|
|
164
164
|
WHERE sample_id = ?
|
|
165
|
-
`).get(e);if(!i)throw new
|
|
165
|
+
`).get(e);if(!i)throw new v(`${e} (after update)`);return t==="rejected"&&this.recordCorrectionRejectedPain({session_id:i.session_id,quality_score:i.quality_score,diff_excerpt:i.diff_excerpt,principle_ids_json:i.principle_ids_json,created_at:i.created_at}),{sampleId:String(i.sample_id),sessionId:String(i.session_id),badAssistantTurnId:Number(i.bad_assistant_turn_id),userCorrectionTurnId:Number(i.user_correction_turn_id),recoveryToolSpanJson:String(i.recovery_tool_span_json),diffExcerpt:String(i.diff_excerpt??""),principleIdsJson:String(i.principle_ids_json??"[]"),qualityScore:Number(i.quality_score),reviewStatus:i.review_status,exportMode:i.export_mode,createdAt:String(i.created_at),updatedAt:String(i.updated_at)}}recordCorrectionRejectedPain(e){let t=String(e.session_id),r=Number(e.quality_score),s=String(e.diff_excerpt??""),o=String(e.principle_ids_json??"[]"),i=Math.max(0,Math.min(100,Math.round(Number(r)||0))),c=`Correction rejected (quality ${r.toFixed(2)}). Principles: ${o}${s?` \u2014 ${s.slice(0,120)}`:""}`;try{this.recordPainEvent({sessionId:t,source:"correction_rejected",score:i,reason:c,severity:i>=70?"severe":i>=40?"moderate":"mild",origin:"system_infer",text:s||void 0,createdAt:String(e.created_at),hostKind:"openclaw"})}catch(a){console.warn(`[Trajectory] Failed to record correction_rejected pain event: ${String(a)}`)}}enqueueSignalConfirmation(e){let t=`sq_${Z.createHash("sha256").update(`${e.sessionId}:${e.userTurnRowid}`).digest("hex").slice(0,12)}`;this.withWrite(()=>{this.db.prepare(`
|
|
166
166
|
INSERT OR IGNORE INTO signal_confirmations (
|
|
167
167
|
id, session_id, user_turn_rowid, occurrence_id, excerpt,
|
|
168
168
|
terms_json, suggested_type, status, attempts, created_at
|
|
@@ -172,7 +172,7 @@ var Ce=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(
|
|
|
172
172
|
WHERE status = 'pending'
|
|
173
173
|
ORDER BY attempts ASC, created_at ASC
|
|
174
174
|
LIMIT ?
|
|
175
|
-
`).all(e).map(
|
|
175
|
+
`).all(e).map(Pt)}bumpSignalConfirmationAttempt(e){return this.withWrite(()=>{this.db.prepare(`
|
|
176
176
|
UPDATE signal_confirmations SET attempts = attempts + 1
|
|
177
177
|
WHERE id = ? AND status = 'pending'
|
|
178
178
|
`).run(e)}),this.db.prepare("SELECT attempts FROM signal_confirmations WHERE id = ?").get(e)?.attempts??0}markSignalConfirmationResult(e,t,r){let s=this.withWrite(()=>this.db.prepare(`
|
|
@@ -188,16 +188,16 @@ var Ce=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(
|
|
|
188
188
|
JOIN user_turns ut ON ut.id = cs.user_correction_turn_id
|
|
189
189
|
WHERE (? = 0 OR cs.review_status = 'approved')
|
|
190
190
|
ORDER BY cs.created_at ASC
|
|
191
|
-
`).all(e.approvedOnly?1:0),r=
|
|
191
|
+
`).all(e.approvedOnly?1:0),r=h.join(this.exportDir,`corrections-${Date.now()}-${e.mode}.jsonl`),s=t.map(o=>{let i=this.restoreRawText(o.assistant_raw_text,o.assistant_blob_ref),c=this.restoreRawText(o.user_raw_text,o.user_blob_ref),a=e.mode==="redacted"?we(i):i,d=e.mode==="redacted"?we(c):c;return JSON.stringify({sample_id:o.sample_id,session_id:o.session_id,instruction:d,input_context:a,bad_attempt_summary:String(o.diff_excerpt??""),preferred_response:d,labels:{correction_cue:o.correction_cue,quality_score:o.quality_score},metadata:{mode:e.mode,recovery_tool_span_json:o.recovery_tool_span_json}})});return B(r,`${s.join(`
|
|
192
192
|
`)}${s.length>0?`
|
|
193
|
-
`:""}`),this.recordExportAudit("corrections",e.mode,e.approvedOnly,r,t.length),{filePath:r,count:t.length,mode:e.mode}}exportAnalytics(){let e={generatedAt:_(),stats:this.getDataStats(),dailyMetrics:this.dailyMetrics(),errorClusters:this.db.prepare("SELECT * FROM v_error_clusters").all(),principleEffectiveness:this.db.prepare("SELECT * FROM v_principle_effectiveness").all(),sampleQueue:this.db.prepare("SELECT * FROM v_sample_queue").all()},t=
|
|
193
|
+
`:""}`),this.recordExportAudit("corrections",e.mode,e.approvedOnly,r,t.length),{filePath:r,count:t.length,mode:e.mode}}exportAnalytics(){let e={generatedAt:_(),stats:this.getDataStats(),dailyMetrics:this.dailyMetrics(),errorClusters:this.db.prepare("SELECT * FROM v_error_clusters").all(),principleEffectiveness:this.db.prepare("SELECT * FROM v_principle_effectiveness").all(),sampleQueue:this.db.prepare("SELECT * FROM v_sample_queue").all()},t=h.join(this.exportDir,`analytics-${Date.now()}.json`);return B(t,JSON.stringify(e,null,2)),this.recordExportAudit("analytics","raw",!0,t,Array.isArray(e.dailyMetrics)?e.dailyMetrics.length:0),{filePath:t,count:Array.isArray(e.dailyMetrics)?e.dailyMetrics.length:0}}getDataStats(){let e=(r,s)=>{let o=s?`SELECT COUNT(*) as count FROM ${r} WHERE ${s}`:`SELECT COUNT(*) as count FROM ${r}`;return Number(this.db.prepare(o).get().count)},t=this.db.prepare(`
|
|
194
194
|
SELECT MAX(ts) AS ts FROM (
|
|
195
195
|
SELECT MAX(created_at) AS ts FROM assistant_turns
|
|
196
196
|
UNION ALL SELECT MAX(created_at) AS ts FROM user_turns
|
|
197
197
|
UNION ALL SELECT MAX(created_at) AS ts FROM tool_calls
|
|
198
198
|
UNION ALL SELECT MAX(created_at) AS ts FROM pain_events
|
|
199
199
|
)
|
|
200
|
-
`).get();return{dbPath:this.dbPath,dbSizeBytes:
|
|
200
|
+
`).get();return{dbPath:this.dbPath,dbSizeBytes:Ie(this.dbPath),assistantTurns:e("assistant_turns"),userTurns:e("user_turns"),toolCalls:e("tool_calls"),painEvents:e("pain_events"),pendingSamples:e("correction_samples","review_status = 'pending'"),approvedSamples:e("correction_samples","review_status = 'approved'"),blobBytes:this.computeBlobBytes(),lastIngestAt:t.ts??null}}cleanupBlobStorage(){return this.pruneUnreferencedBlobs()}initSchema(){let e=Dt(this.db);for(let r of e.warnings)console.info(`[PD:TrajectoryDatabase] schema init warning: ${r}`);let t=this.db.prepare("SELECT version FROM schema_version LIMIT 1").get();this.migrateSchema(t?.version),t?t.version!==1&&this.db.prepare("UPDATE schema_version SET version = ?").run(1):this.db.prepare("INSERT INTO schema_version (version) VALUES (?)").run(1)}importLegacyArtifacts(){this.importLegacySessions(),this.importLegacyEvents(),this.importLegacyEvolution()}migrateSchema(e){this.db.exec(`
|
|
201
201
|
DROP VIEW IF EXISTS v_daily_metrics;
|
|
202
202
|
CREATE VIEW IF NOT EXISTS v_daily_metrics AS
|
|
203
203
|
WITH tool_daily AS (
|
|
@@ -222,8 +222,8 @@ var Ce=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(
|
|
|
222
222
|
COALESCE(correction_daily.user_corrections, 0) AS user_corrections
|
|
223
223
|
FROM tool_daily
|
|
224
224
|
LEFT JOIN correction_daily ON correction_daily.day = tool_daily.day;
|
|
225
|
-
`)}dailyMetrics(){return this.db.prepare("SELECT * FROM v_daily_metrics ORDER BY day ASC").all()}importLegacySessions(){let e="legacy:sessions";if(this.isImported(e))return;let t=
|
|
226
|
-
`))try{let o=JSON.parse(s);o.type==="pain_signal"&&o.sessionId&&this.recordPainEvent({sessionId:o.sessionId,source:String(o.data?.source??"legacy"),score:Number(o.data?.score??0),reason:typeof o.data?.reason=="string"?o.data.reason:null,severity:typeof o.data?.severity=="string"?o.data.severity:null,origin:typeof o.data?.origin=="string"?o.data.origin:null,confidence:typeof o.data?.confidence=="number"?o.data.confidence:null,createdAt:o.ts}),o.type==="trust_change"&&this.recordTrustChange({sessionId:o.sessionId,previousScore:Number(o.data?.previousScore??0),newScore:Number(o.data?.newScore??0),delta:Number(o.data?.delta??0),reason:String(o.data?.reason??"legacy"),createdAt:o.ts}),o.type==="gate_block"&&this.recordGateBlock({sessionId:o.sessionId,toolName:String(o.data?.toolName??"unknown"),filePath:typeof o.data?.filePath=="string"?o.data.filePath:null,reason:String(o.data?.reason??"legacy"),createdAt:o.ts})}catch{}this.markImported(e)}importLegacyEvolution(){let e="legacy:evolution";if(this.isImported(e))return;let t=
|
|
225
|
+
`)}dailyMetrics(){return this.db.prepare("SELECT * FROM v_daily_metrics ORDER BY day ASC").all()}importLegacySessions(){let e="legacy:sessions";if(this.isImported(e))return;let t=b(this.workspaceDir,"SESSION_DIR");if(f.existsSync(t)){for(let r of f.readdirSync(t).filter(s=>s.endsWith(".json")))try{let s=JSON.parse(f.readFileSync(h.join(t,r),"utf8"));if(s.sessionId){let o=typeof s.lastActivityAt=="number"?new Date(s.lastActivityAt).toISOString():_();this.recordSession({sessionId:s.sessionId,startedAt:o})}}catch{}this.markImported(e)}}importLegacyEvents(){let e="legacy:events";if(this.isImported(e))return;let t=h.join(this.stateDir,"logs","events.jsonl");if(!f.existsSync(t))return;let r=f.readFileSync(t,"utf8").trim();if(!r){this.markImported(e);return}for(let s of r.split(`
|
|
226
|
+
`))try{let o=JSON.parse(s);o.type==="pain_signal"&&o.sessionId&&this.recordPainEvent({sessionId:o.sessionId,source:String(o.data?.source??"legacy"),score:Number(o.data?.score??0),reason:typeof o.data?.reason=="string"?o.data.reason:null,severity:typeof o.data?.severity=="string"?o.data.severity:null,origin:typeof o.data?.origin=="string"?o.data.origin:null,confidence:typeof o.data?.confidence=="number"?o.data.confidence:null,createdAt:o.ts}),o.type==="trust_change"&&this.recordTrustChange({sessionId:o.sessionId,previousScore:Number(o.data?.previousScore??0),newScore:Number(o.data?.newScore??0),delta:Number(o.data?.delta??0),reason:String(o.data?.reason??"legacy"),createdAt:o.ts}),o.type==="gate_block"&&this.recordGateBlock({sessionId:o.sessionId,toolName:String(o.data?.toolName??"unknown"),filePath:typeof o.data?.filePath=="string"?o.data.filePath:null,reason:String(o.data?.reason??"legacy"),createdAt:o.ts})}catch{}this.markImported(e)}importLegacyEvolution(){let e="legacy:evolution";if(this.isImported(e))return;let t=b(this.workspaceDir,"EVOLUTION_STREAM");if(!f.existsSync(t))return;let r=f.readFileSync(t,"utf8").trim();if(!r){this.markImported(e);return}for(let s of r.split(`
|
|
227
227
|
`))try{let o=JSON.parse(s);this.recordPrincipleEvent({principleId:typeof o.data?.principleId=="string"?o.data.principleId:null,eventType:String(o.type??"legacy"),payload:o.data??{},createdAt:o.ts})}catch{}this.markImported(e)}markImported(e){this.withWrite(()=>{this.db.prepare(`
|
|
228
228
|
INSERT INTO ingest_checkpoint (source_key, imported_at)
|
|
229
229
|
VALUES (?, ?)
|
|
@@ -251,17 +251,17 @@ var Ce=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(
|
|
|
251
251
|
WHERE session_id = ?
|
|
252
252
|
ORDER BY id DESC
|
|
253
253
|
LIMIT 5
|
|
254
|
-
`).all(e).filter(g=>g.outcome==="success"),c=i[0]?.id??r.id,a=`sample_${
|
|
254
|
+
`).all(e).filter(g=>g.outcome==="success"),c=i[0]?.id??r.id,a=`sample_${Z.createHash("sha256").update(`${e}:${r.id}:${c}`).digest("hex").slice(0,12)}`,d=this.restoreRawText(r.raw_text,r.blob_ref),T=[r.references_assistant_turn_id?35:0,r.correction_cue?20:0,s?20:0,Math.min(i.length,3)*5].reduce((g,Ce)=>g+Ce,0),m=d||(s?String(s.error_message??s.error_type??s.tool_name):"")||String(r.correction_cue??"user correction");this.withWrite(()=>{this.db.prepare(`
|
|
255
255
|
INSERT OR IGNORE INTO correction_samples (
|
|
256
256
|
sample_id, session_id, bad_assistant_turn_id, user_correction_turn_id,
|
|
257
257
|
recovery_tool_span_json, diff_excerpt, principle_ids_json, quality_score,
|
|
258
258
|
review_status, export_mode, created_at, updated_at
|
|
259
259
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'pending', 'raw', ?, ?)
|
|
260
|
-
`).run(a,e,Number(r.references_assistant_turn_id),Number(r.id),R(i.map(g=>({id:g.id,toolName:g.tool_name,outcome:g.outcome}))),
|
|
260
|
+
`).run(a,e,Number(r.references_assistant_turn_id),Number(r.id),R(i.map(g=>({id:g.id,toolName:g.tool_name,outcome:g.outcome}))),Mt(m),"[]",T,_(),_())})}recordExportAudit(e,t,r,s,o){this.withWrite(()=>{this.db.prepare(`
|
|
261
261
|
INSERT INTO exports_audit (export_kind, mode, approved_only, file_path, row_count, created_at)
|
|
262
262
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
263
|
-
`).run(e,t,r?1:0,s,o,_())})}storeRawText(e,t){let r=t.length>200?`${t.slice(0,197)}...`:t;if(Buffer.byteLength(t,"utf8")<=this.blobInlineThresholdBytes)return{inlineText:t,blobRef:null,excerpt:r};let o=
|
|
263
|
+
`).run(e,t,r?1:0,s,o,_())})}storeRawText(e,t){let r=t.length>200?`${t.slice(0,197)}...`:t;if(Buffer.byteLength(t,"utf8")<=this.blobInlineThresholdBytes)return{inlineText:t,blobRef:null,excerpt:r};let o=Z.createHash("sha256").update(t).digest("hex"),i=`${e}-${o}.txt`,c=h.join(this.blobDir,i);return f.existsSync(c)||B(c,t),{inlineText:null,blobRef:i,excerpt:r}}restoreRawText(e,t){if(e)return e;if(!t)return"";let r=h.join(this.blobDir,t);return f.existsSync(r)?f.readFileSync(r,"utf8"):""}computeBlobBytes(){return f.existsSync(this.blobDir)?f.readdirSync(this.blobDir).reduce((e,t)=>e+Ie(h.join(this.blobDir,t)),0):0}pruneUnreferencedBlobs(){if(!f.existsSync(this.blobDir))return{removedFiles:0,reclaimedBytes:0};let e=new Set,t=this.db.prepare(`
|
|
264
264
|
SELECT blob_ref FROM assistant_turns WHERE blob_ref IS NOT NULL
|
|
265
265
|
UNION
|
|
266
266
|
SELECT blob_ref FROM user_turns WHERE blob_ref IS NOT NULL
|
|
267
|
-
`).all();for(let i of t)i.blob_ref&&e.add(String(i.blob_ref));let r=Date.now(),s=0,o=0;for(let i of f.readdirSync(this.blobDir)){if(e.has(i))continue;let c=
|
|
267
|
+
`).all();for(let i of t)i.blob_ref&&e.add(String(i.blob_ref));let r=Date.now(),s=0,o=0;for(let i of f.readdirSync(this.blobDir)){if(e.has(i))continue;let c=h.join(this.blobDir,i),a;try{a=f.statSync(c)}catch{continue}a.isFile()&&(this.orphanBlobGraceMs>0&&r-a.mtimeMs<this.orphanBlobGraceMs||(o+=a.size,s+=1,f.rmSync(c,{force:!0})))}return{removedFiles:s,reclaimedBytes:o}}withWrite(e){return be(this.dbPath,e,{lockSuffix:".trajectory.lock",lockStaleMs:3e4})}},x=class{static instances=new Map;static get(e,t={}){let r=h.resolve(e),s=this.instances.get(r);if(s)return s;let o=new F({workspaceDir:r,...t});return this.instances.set(r,o),o}static dispose(e){let t=h.resolve(e),r=this.instances.get(t);r&&(r.dispose(),this.instances.delete(t))}static clear(){for(let e of this.instances.values())e.dispose();this.instances.clear()}static use(e,t,r={}){let s=h.resolve(e),o=this.instances.get(s);if(o)return t(o);let i=new F({workspaceDir:s,...r});try{return t(i)}finally{i.dispose()}}};var jt=new Set(["__proto__","constructor","prototype"]);function Ut(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Bt(n){if(!Array.isArray(n))return{valid:!1,errors:["toolSemanticMappings must be an array"]};let e=[],t=new Map;return n.forEach((r,s)=>{if(!Ut(r)){e.push(`toolSemanticMappings[${s}] must be a plain object`);return}if(!Object.hasOwn(r,"rawToolName")||typeof r.rawToolName!="string"||r.rawToolName.trim()===""){e.push(`toolSemanticMappings[${s}].rawToolName must be a non-empty string`);return}if(jt.has(r.rawToolName)){e.push(`toolSemanticMappings[${s}].rawToolName must not be a prototype-pollution key`);return}let o=r.canonicalKind;if(!le(o)){e.push(`toolSemanticMappings[${s}].canonicalKind must be one of ${[...$].join("|")}, got ${String(o)}`);return}let i=t.get(r.rawToolName);if(i!==void 0&&i!==o){e.push(`toolSemanticMappings[${s}]: rawToolName '${r.rawToolName}' declared twice with conflicting kinds (${i} vs ${o})`);return}t.set(r.rawToolName,o)}),{valid:e.length===0,errors:e}}function xe(n){let e,t=new Set,r=[];if(n===void 0)e=M;else{let s=Bt(n);if(!s.valid)return{ok:!1,errors:s.errors};let o={...M};for(let i of n)o[i.rawToolName]=i.canonicalKind,t.add(i.rawToolName);r=Object.freeze(n.map(i=>Object.freeze({rawToolName:i.rawToolName,canonicalKind:i.canonicalKind}))),e=Object.freeze(o)}return{ok:!0,registry:{version:1,hasHostLayer:t.size>0,hasHostTool(s){return typeof s!="string"?!1:t.has(s)},hostMappings(){return r},lookup(s){return typeof s!="string"||!Object.hasOwn(e,s)?null:e[s]??null},resolve(s){return this.lookup(s)??"other"}}}}var ke=["read","read_file","read_many_files","image_read","search_file_content","grep","grep_search","list_directory","ls","glob","lsp_hover","lsp_goto_definition","lsp_find_references","web_fetch","web_search","ref_search_documentation","ref_read_url","resolve-library-id","get-library-docs","memory_recall","save_memory","todo_read","todo_write","ask_user","ask_user_question","pd-status","report"],N=["write","edit","apply_patch"],k=["exec"],Ft=[...k],W=["sessions_spawn"],Wt=[...N],Xt=[...N,...k,...W],$t=[...ke],Bn=new Set(ke),Fn=new Set(N),Wn=new Set(Ft),Xn=new Set(k),$n=new Set(W),Hn=new Set(Wt),Yn=new Set(Xt),Kn=new Set($t),Gn=new Set([...N]);function Q(n,e){return n.map(t=>({rawToolName:t,canonicalKind:e}))}var Ht=Object.freeze([...Q(k,"execute"),...Q(N,"write"),...Q(W,"agent")]),ee=xe(Ht);if(!ee.ok)throw new Error(`[PD] OpenClaw tool semantic declaration is invalid: ${ee.errors.join("; ")}`);var Le=ee.registry;var te=class extends U{constructor(e){super({source:x.get(e.workspaceDir),toolSemantics:Le})}};export{te as BehaviorExamplePackAssembler,x as RuleHostEvidenceRegistry};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "principles-disciple",
|
|
3
3
|
"name": "Principles Disciple",
|
|
4
4
|
"description": "Principles Disciple is an AI Agent Governance System. Stop correcting the same AI behavior across sessions. Turn repeated Agent corrections into Owner-approved, observable, reversible behavior principles.",
|
|
5
|
-
"version": "2.2.
|
|
5
|
+
"version": "2.2.12",
|
|
6
6
|
"activation": {
|
|
7
7
|
"onStartup": true,
|
|
8
8
|
"onCapabilities": [
|
package/plugin/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "principles-disciple",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.12",
|
|
4
4
|
"description": "Principles Disciple is an AI Agent Governance System. Stop correcting the same AI behavior across sessions. Turn repeated Agent corrections into Owner-approved, observable, reversible behavior principles.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ChildProcess } from 'child_process';
|
|
1
2
|
import type { InstallOptions } from './prompts.js';
|
|
2
3
|
import { type ComponentStatus, type VerificationResult } from './mvp-config.js';
|
|
3
4
|
import { type HostTarget } from './installers/index.js';
|
|
@@ -204,10 +205,42 @@ interface BackupResult {
|
|
|
204
205
|
* Exported for real-filesystem tests (tests/backup-location.test.ts).
|
|
205
206
|
*/
|
|
206
207
|
export declare function migrateLegacyPdBackups(): void;
|
|
208
|
+
/**
|
|
209
|
+
* P0-3 (SPEC v1.2 §17 / PRI-1070 comment §2): backup step failed midway and
|
|
210
|
+
* the compensation (undo of the already-moved extension tree) ALSO failed —
|
|
211
|
+
* the installer is holding the moved backup paths so the failure handler can
|
|
212
|
+
* still restore them. Never silently dropped.
|
|
213
|
+
*/
|
|
214
|
+
export declare class BackupIntegrityError extends Error {
|
|
215
|
+
readonly extensionBackupDir: string | null;
|
|
216
|
+
readonly runtimeBackupDir: string | null;
|
|
217
|
+
constructor(message: string, extensionBackupDir: string | null, runtimeBackupDir: string | null);
|
|
218
|
+
}
|
|
207
219
|
/**
|
|
208
220
|
* Exported for real-filesystem tests (tests/backup-location.test.ts).
|
|
209
221
|
*/
|
|
210
222
|
export declare function backupExistingInstall(host?: HostTarget): BackupResult;
|
|
223
|
+
/** P0-3 (SPEC v1.2 §17): per-tree restore outcome — never one fuzzy boolean. */
|
|
224
|
+
export interface TreeRestoreResult {
|
|
225
|
+
readonly tree: 'extension' | 'runtime';
|
|
226
|
+
readonly status: 'restored' | 'no_backup' | 'failed';
|
|
227
|
+
readonly detail?: string;
|
|
228
|
+
/** Directories that MUST be preserved for a later manual/automatic retry. */
|
|
229
|
+
readonly preservedDirs: readonly string[];
|
|
230
|
+
}
|
|
231
|
+
export interface RestoreBackupResult {
|
|
232
|
+
readonly restored: boolean;
|
|
233
|
+
readonly partial: boolean;
|
|
234
|
+
readonly extension?: TreeRestoreResult;
|
|
235
|
+
readonly runtime?: TreeRestoreResult;
|
|
236
|
+
readonly error?: string;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* P0-3/P0-4: restore both trees with per-tree outcomes. `restored: true` only
|
|
240
|
+
* when every tree is genuinely back (or had no backup to apply). A partial
|
|
241
|
+
* restore is reported as such — never as success, never as rolled_back.
|
|
242
|
+
*/
|
|
243
|
+
export declare function restoreBackup(backupDir: string | null, runtimeBackupDir: string | null): RestoreBackupResult;
|
|
211
244
|
/**
|
|
212
245
|
* Legacy rule contract preflight (2026-08-19).
|
|
213
246
|
*
|
|
@@ -384,6 +417,54 @@ export interface CoreJunctionReconciliation {
|
|
|
384
417
|
}[];
|
|
385
418
|
}
|
|
386
419
|
export declare function reconcilePluginCoreCanonicalJunction(): CoreJunctionReconciliation;
|
|
420
|
+
export interface ChildJoinResult {
|
|
421
|
+
readonly exited: boolean;
|
|
422
|
+
readonly exitCode: number | null;
|
|
423
|
+
readonly signal: string | null;
|
|
424
|
+
readonly timedOut: boolean;
|
|
425
|
+
readonly escalation: 'already_exited' | 'sigterm' | 'sigkill';
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* P0-2 (SPEC v1.2 §5 step 6 / invariant I-4): terminate a child and WAIT for
|
|
429
|
+
* its real exit event before anyone touches the directories it may hold.
|
|
430
|
+
*
|
|
431
|
+
* Discipline proven by the R8 Windows experiment (2026-11-02, real
|
|
432
|
+
* better-sqlite3 .node): subscribing to 'exit' AFTER the kill signal loses
|
|
433
|
+
* the event — the listener must be attached BEFORE the signal is sent.
|
|
434
|
+
* Graceful SIGTERM first, bounded wait, then SIGKILL, then a second bounded
|
|
435
|
+
* wait. If even that does not confirm exit, `exited: false` is returned and
|
|
436
|
+
* the caller MUST NOT perform destructive directory operations (defer to a
|
|
437
|
+
* recovery state instead).
|
|
438
|
+
*/
|
|
439
|
+
export declare function terminateAndJoinChild(child: ChildProcess, options?: {
|
|
440
|
+
gracefulTimeoutMs?: number;
|
|
441
|
+
killTimeoutMs?: number;
|
|
442
|
+
}): Promise<ChildJoinResult>;
|
|
443
|
+
/** One probe attempt's diagnostics (SPEC v1.2 §14: attempt-level records;
|
|
444
|
+
* the nonce VALUE itself is never recorded — only the match outcome). */
|
|
445
|
+
export interface ConsoleVerifyAttempt {
|
|
446
|
+
readonly port: number;
|
|
447
|
+
readonly pid: number | null;
|
|
448
|
+
readonly outcome: 'verified' | 'identity_mismatch' | 'http_error_status' | 'bad_body' | 'request_error' | 'child_exited_early' | 'join_failed';
|
|
449
|
+
readonly httpStatus?: number;
|
|
450
|
+
readonly exitCode?: number | null;
|
|
451
|
+
readonly signal?: string | null;
|
|
452
|
+
readonly stderrTail?: string;
|
|
453
|
+
readonly detail?: string;
|
|
454
|
+
}
|
|
455
|
+
export declare class ConsoleVerifyError extends Error {
|
|
456
|
+
readonly attempts: readonly ConsoleVerifyAttempt[];
|
|
457
|
+
readonly hadJoinFailure: boolean;
|
|
458
|
+
constructor(message: string, attempts: readonly ConsoleVerifyAttempt[]);
|
|
459
|
+
}
|
|
460
|
+
/** Exported for real-subprocess tests (tests/console-verify-identity.test.ts). */
|
|
461
|
+
export declare function verifyConsole(workspaceDir: string): Promise<{
|
|
462
|
+
ok: boolean;
|
|
463
|
+
url: string;
|
|
464
|
+
process: ChildProcess | null;
|
|
465
|
+
attempts: readonly ConsoleVerifyAttempt[];
|
|
466
|
+
unconfirmedChildren: readonly ChildProcess[];
|
|
467
|
+
}>;
|
|
387
468
|
/**
|
|
388
469
|
* Task 8: Auto-launch the PD Console at the end of a successful install by
|
|
389
470
|
* reusing `pd console open` (handleConsoleOpen). Spawns it detached so the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
|