humanish 0.110.3 → 0.111.0
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/CHANGELOG.md +29 -0
- package/CONTEXT.md +2 -2
- package/dist/actors/local-agent/claude-session.js +1 -1
- package/dist/actors/local-agent/cli.js +1 -1
- package/dist/actors/scripted-browser/actor.d.ts +2 -2
- package/dist/actors/scripted-browser/actor.js +17 -8
- package/dist/actors/scripted-browser/launch-env.d.ts +12 -0
- package/dist/actors/scripted-browser/launch-env.js +50 -0
- package/dist/analysis/automatic-completion.d.ts +2 -1
- package/dist/analysis/automatic-completion.js +7 -2
- package/dist/cli/commands/migrate.js +1 -1
- package/dist/cli/commands/runs.js +5 -2
- package/dist/cli/commands/study-route-computer-use.js +3 -2
- package/dist/cli/commands/study-route-preview.js +2 -1
- package/dist/cli/commands/study-route-shared-world.js +3 -3
- package/dist/cli/commands/study.js +2 -1
- package/dist/routes/computer-use/live-phase.js +8 -1
- package/dist/routes/computer-use/local-vm.js +2 -1
- package/dist/routes/computer-use/participant-model.js +1 -1
- package/dist/routes/computer-use/plan.js +9 -10
- package/dist/routes/computer-use/preflight.js +1 -1
- package/dist/routes/computer-use/result.js +1 -1
- package/dist/routes/computer-use/route.js +3 -2
- package/dist/routes/computer-use/setup.js +2 -1
- package/dist/routes/computer-use/types.d.ts +4 -4
- package/dist/routes/scripted/plan.js +5 -4
- package/dist/routes/scripted/route.js +6 -2
- package/dist/routes/scripted/scenario.d.ts +1 -1
- package/dist/routes/scripted/scenario.js +3 -3
- package/dist/routes/scripted/surface-sessions.d.ts +2 -0
- package/dist/routes/scripted/surface-sessions.js +2 -1
- package/dist/routes/scripted/types.d.ts +2 -2
- package/dist/routes/shared-world/handoff.js +1 -1
- package/dist/routes/shared-world/participant-specs.js +6 -2
- package/dist/routes/shared-world/plan.js +8 -8
- package/dist/routes/shared-world/route.js +3 -3
- package/dist/routes/shared-world/types.d.ts +1 -1
- package/dist/routes/terminal/bundle.d.ts +3 -3
- package/dist/routes/terminal/ledger.d.ts +2 -2
- package/dist/routes/terminal/lifetime.js +1 -1
- package/dist/routes/terminal/live-finish.js +1 -1
- package/dist/routes/terminal/plan.js +4 -3
- package/dist/routes/terminal/route.js +3 -2
- package/dist/routes/terminal/session.js +1 -0
- package/dist/routes/terminal/types.d.ts +1 -1
- package/dist/run/display.d.ts +10 -0
- package/dist/run/display.js +22 -0
- package/dist/run/reclaim.d.ts +4 -2
- package/dist/run/reclaim.js +61 -18
- package/dist/run/results.d.ts +1 -1
- package/dist/run/run.d.ts +11 -1
- package/dist/run/run.js +24 -5
- package/dist/run/status.d.ts +6 -0
- package/dist/run/status.js +1 -0
- package/dist/run/stored-runs.js +26 -11
- package/dist/run-study.d.ts +5 -3
- package/dist/run-study.js +7 -11
- package/dist/study/adapter-scorer-loader.d.ts +1 -1
- package/dist/study/adapter-scorer-loader.js +3 -3
- package/dist/study/composition-rules.js +49 -39
- package/dist/study/config.d.ts +31 -8
- package/dist/study/config.js +181 -155
- package/dist/study/discover.d.ts +1 -1
- package/dist/study/discover.js +1 -1
- package/dist/study/doctor.js +5 -4
- package/dist/study/keys.d.ts +250 -2
- package/dist/study/keys.js +32 -62
- package/dist/study/{convert.d.ts → migrate/convert.d.ts} +1 -1
- package/dist/study/{convert.js → migrate/convert.js} +28 -31
- package/dist/study/{migrate.d.ts → migrate/migrate.d.ts} +1 -1
- package/dist/study/{migrate.js → migrate/migrate.js} +2 -2
- package/dist/study/{owned-files.js → migrate/owned-files.js} +1 -1
- package/dist/study/migrate/v2.d.ts +78 -0
- package/dist/study/migrate/v2.js +607 -0
- package/dist/study/parse/actors.d.ts +34 -10
- package/dist/study/parse/actors.js +76 -174
- package/dist/study/parse/comms.js +6 -2
- package/dist/study/parse/execution.d.ts +9 -4
- package/dist/study/parse/execution.js +6 -41
- package/dist/study/parse/front.d.ts +36 -0
- package/dist/study/parse/{study-v3.js → front.js} +37 -88
- package/dist/study/parse/subject.d.ts +2 -0
- package/dist/study/parse/subject.js +15 -18
- package/dist/study/persona-resolve.d.ts +2 -4
- package/dist/study/persona-resolve.js +7 -8
- package/dist/study/plan-base.d.ts +1 -1
- package/dist/study/plan-base.js +6 -6
- package/dist/study/plan-participants.d.ts +2 -2
- package/dist/study/plan-participants.js +12 -11
- package/dist/study/plan-types.d.ts +5 -5
- package/dist/study/plan.js +5 -4
- package/dist/study/preflight-probes.js +4 -4
- package/dist/study/preflight.d.ts +1 -1
- package/dist/study/preflight.js +3 -3
- package/dist/study/routing.d.ts +5 -5
- package/dist/study/routing.js +17 -20
- package/dist/study/run-study-options.d.ts +1 -1
- package/dist/study/run-study-options.js +3 -3
- package/dist/study/study-deps.d.ts +1 -1
- package/dist/study/study-fields.d.ts +19 -0
- package/dist/study/study-fields.js +46 -0
- package/dist/study/summary.js +19 -18
- package/dist/study/types.d.ts +66 -104
- package/dist/study/types.js +0 -1
- package/dist/study/url-credentials.js +3 -3
- package/dist/study/validation.d.ts +4 -10
- package/dist/study/validation.js +54 -79
- package/dist/study/warnings.d.ts +3 -3
- package/dist/study/warnings.js +42 -110
- package/dist/substrates/local/runtime-config.js +14 -16
- package/dist/tui-app.js +3 -3
- package/docs/contracts/schemas.md +36 -8
- package/package.json +1 -1
- package/dist/study/parse/study-v3.d.ts +0 -21
- /package/dist/study/{owned-files.d.ts → migrate/owned-files.d.ts} +0 -0
package/dist/tui-app.js
CHANGED
|
@@ -283,11 +283,11 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr
|
|
|
283
283
|
`))}patchConsole(){this.options.debug||(this.restoreConsole=sv((i,u)=>{i==="stdout"&&this.writeToStdout(u),i==="stderr"&&(u.startsWith("The above error occurred")||this.writeToStderr(u))}))}registerInputControl(i,u){this.pauseInput=i,this.resumeInput=u}async suspendTerminal(i){if(this.beginSuspend(),i){try{await i()}finally{await this.endSuspend()}return}let u=o(async()=>{await this.endSuspend()},"resume");return{resume:u,[Symbol.asyncDispose]:u}}setAlternateScreen(i){this.alternateScreen=this.resolveAlternateScreenOption(i,this.interactive),this.alternateScreen&&(this.writeBestEffort(this.options.stdout,kn.enterAlternativeScreen),this.writeBestEffort(this.options.stdout,Nc))}resolveInteractiveOption(i){return i??(!uh&&!!this.options.stdout.isTTY)}resolveAlternateScreenOption(i,u){return!!i&&u&&!!this.options.stdout.isTTY}shouldSync(){return KR(this.options.stdout,this.interactive)}writeBestEffort(i,u){try{i.write(u)}catch{}}async awaitExit(){try{await this.exitPromise}catch{}}hasPendingConcurrentWork(){let i=this.container;return(i.pendingLanes??0)!==0&&i.callbackNode!==void 0&&i.callbackNode!==null}async awaitNextRender(){if(!this.nextRenderCommit){let i,u=new Promise(c=>{i=c});this.nextRenderCommit={promise:u,resolve:i}}return this.nextRenderCommit.promise}renderInteractiveFrame(i,u,c){let d=c!=="",m=this.options.stdout.isTTY,B=m?Ic(this.options.stdout).rows:24,Q=m&&u>=B?i:i+`
|
|
284
284
|
`;if(wU({isTty:m,viewportRows:B,previousOutputHeight:this.lastOutputHeight,nextOutputHeight:u,isUnmounting:this.isUnmounting})){let b=this.shouldSync();b&&this.options.stdout.write(bc),this.options.stdout.write(kn.clearTerminal+this.fullStaticOutput+Q),this.lastOutput=i,this.lastOutputToRender=Q,this.lastOutputHeight=u,this.log.sync(Q),b&&this.options.stdout.write(qr);return}if(d){let b=this.shouldSync();b&&this.options.stdout.write(bc),this.log.clear(),this.options.stdout.write(c),this.log(Q),b&&this.options.stdout.write(qr)}else(i!==this.lastOutput||this.log.isCursorDirty())&&this.throttledLog(Q);this.lastOutput=i,this.lastOutputToRender=Q,this.lastOutputHeight=u}initKittyKeyboard(){if(!this.options.kittyKeyboard)return;let i=this.options.kittyKeyboard,u=i.mode??"auto";if(u==="disabled")return;let c=i.flags??["disambiguateEscapeCodes"];if(u==="enabled"){this.options.stdin.isTTY&&this.options.stdout.isTTY&&this.enableKittyProtocol(c);return}!this.interactive||!this.options.stdin.isTTY||!this.options.stdout.isTTY||this.confirmKittySupport(c)}confirmKittySupport(i){let{stdin:u,stdout:c}=this.options,d=[],m=o(()=>{this.cancelKittyDetection=void 0,clearTimeout(y),u.removeListener("data",B);let Q=bU(d);d=[],Q.length>0&&u.unshift(Uint8Array.from(Q))},"cleanup"),B=o(Q=>{let N=typeof Q=="string"?yU.encode(Q):Q;for(let b of N)d.push(b);TU(d)&&(m(),this.isUnmounted||this.enableKittyProtocol(i))},"onData");u.on("data",B);let y=setTimeout(m,200);this.cancelKittyDetection=m,c.write("\x1B[?u")}enableKittyProtocol(i){this.options.stdout.write(`\x1B[>${OQ(i)}u`),this.kittyProtocolEnabled=!0,this.kittyFlags=i}beginSuspend(){if(this.isSuspended)throw new Error("The terminal is already suspended. Resume the current suspension before suspending again.");if(this.isSuspended=!0,!(!this.interactive||this.isUnmounted||this.isUnmounting))try{let i=this.options.stdout,{canWriteToStdout:u}=gB(i);Eg(this.throttledOnRender,u),Eg(this.throttledLog,u),u&&(this.log.clear(),this.log.done(),this.kittyProtocolEnabled&&this.writeBestEffort(this.options.stdout,"\x1B[<u"),this.alternateScreen&&this.writeBestEffort(this.options.stdout,kn.exitAlternativeScreen)),this.pauseInput?.()}catch(i){this.isSuspended=!1;try{this.resumeInput?.()}catch{}throw i}}async endSuspend(){if(!this.isSuspended||(this.isSuspended=!1,this.resumeInput?.(),!this.interactive||this.isUnmounted||this.isUnmounting))return;let i=this.options.stdout,{canWriteToStdout:u}=gB(i);u&&(this.alternateScreen&&this.writeBestEffort(this.options.stdout,kn.enterAlternativeScreen),this.kittyProtocolEnabled&&this.kittyFlags&&this.writeBestEffort(this.options.stdout,`\x1B[>${OQ(this.kittyFlags)}u`)),this.lastOutput="",this.lastOutputToRender="",this.lastOutputHeight=0,this.log.reset();try{this.calculateLayout(),this.onRender(),await this.waitUntilRenderFlush()}catch{}}};var UU=o((n,i)=>{let u={stdout:tp.stdout,stdin:tp.stdin,stderr:tp.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0,maxFps:30,incrementalRendering:!1,concurrent:!1,alternateScreen:!1,...OU(i)},c=HU(u.stdout,()=>new $m(u));return c.render(n),{rerender:c.render,unmount(){c.unmount()},waitUntilExit:c.waitUntilExit,waitUntilRenderFlush:c.waitUntilRenderFlush,cleanup(){c.unmount()},clear:c.clear}},"render"),LQ=UU,OU=o((n={})=>n instanceof MU?{stdout:n,stdin:tp.stdin}:n,"getOptions"),HU=o((n,i)=>{let u=Vm.get(n);if(u===void 0){let c=i();return Vm.set(n,c),c}return tp.stderr.write(`Warning: render() was called again for the same stdout before the previous Ink instance was unmounted. Reusing stdout across multiple render() calls is unsupported. Call unmount() first.
|
|
285
285
|
`),u},"getInstance");var GU=Ot(dh(),1);var mB=Ot(Le(),1);var x2=Ot(Le(),1);var LU=Ot(Le(),1);var zU=Ot(Le(),1);var ep=Ot(Le(),1);var T2=new TextDecoder,YU=/^(?:\x1b)([a-zA-Z0-9])$/,JU=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,_2={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[P":"f1","[Q":"f2","[R":"f3","[S":"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"},w2=[...Object.values(_2),"backspace"],KU=o(n=>["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(n),"isShiftKey"),FU=o(n=>["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(n),"isCtrlKey"),M2=/^\x1b\[(\d+)(?:;(\d+)(?::(\d+))?(?:;([\d:]+))?)?u$/,kU=/^\x1b\[(\d+);(\d+):(\d+)([A-Za-z~])$/,qU={A:"up",B:"down",C:"right",D:"left",E:"clear",F:"end",H:"home",P:"f1",Q:"f2",R:"f3",S:"f4"},jU={2:"insert",3:"delete",5:"pageup",6:"pagedown",7:"home",8:"end",11:"f1",12:"f2",13:"f3",14:"f4",15:"f5",17:"f6",18:"f7",19:"f8",20:"f9",21:"f10",23:"f11",24:"f12"},b2={27:"escape",9:"tab",127:"backspace",8:"backspace",57358:"capslock",57359:"scrolllock",57360:"numlock",57361:"printscreen",57362:"pause",57363:"menu",57376:"f13",57377:"f14",57378:"f15",57379:"f16",57380:"f17",57381:"f18",57382:"f19",57383:"f20",57384:"f21",57385:"f22",57386:"f23",57387:"f24",57388:"f25",57389:"f26",57390:"f27",57391:"f28",57392:"f29",57393:"f30",57394:"f31",57395:"f32",57396:"f33",57397:"f34",57398:"f35",57399:"kp0",57400:"kp1",57401:"kp2",57402:"kp3",57403:"kp4",57404:"kp5",57405:"kp6",57406:"kp7",57407:"kp8",57408:"kp9",57409:"kpdecimal",57410:"kpdivide",57411:"kpmultiply",57412:"kpsubtract",57413:"kpadd",57414:"kpenter",57415:"kpequal",57416:"kpseparator",57417:"kpleft",57418:"kpright",57419:"kpup",57420:"kpdown",57421:"kppageup",57422:"kppagedown",57423:"kphome",57424:"kpend",57425:"kpinsert",57426:"kpdelete",57427:"kpbegin",57428:"mediaplay",57429:"mediapause",57430:"mediaplaypause",57431:"mediareverse",57432:"mediastop",57433:"mediafastforward",57434:"mediarewind",57435:"mediatracknext",57436:"mediatrackprevious",57437:"mediarecord",57438:"lowervolume",57439:"raisevolume",57440:"mutevolume",57441:"leftshift",57442:"leftcontrol",57443:"leftalt",57444:"leftsuper",57445:"lefthyper",57446:"leftmeta",57447:"rightshift",57448:"rightcontrol",57449:"rightalt",57450:"rightsuper",57451:"righthyper",57452:"rightmeta",57453:"isoLevel3Shift",57454:"isoLevel5Shift"},U2=o(n=>n>=0&&n<=1114111&&!(n>=55296&&n<=57343),"isValidCodepoint"),zQ=o(n=>U2(n)?String.fromCodePoint(n):"?","safeFromCodePoint");function O2(n){return n===3?"release":n===2?"repeat":"press"}o(O2,"resolveEventType");function H2(n){return{ctrl:!!(n&Vo.ctrl),shift:!!(n&Vo.shift),meta:!!(n&(Vo.meta|Vo.alt)),super:!!(n&Vo.super),hyper:!!(n&Vo.hyper),capsLock:!!(n&Vo.capsLock),numLock:!!(n&Vo.numLock)}}o(H2,"parseKittyModifiers");var VU=o(n=>{let i=M2.exec(n);if(!i)return null;let u=parseInt(i[1],10),c=i[2]?Math.max(0,parseInt(i[2],10)-1):0,d=i[3]?parseInt(i[3],10):1,m=i[4];if(!U2(u))return null;let B;m&&(B=m.split(":").map(N=>zQ(parseInt(N,10))).join(""));let y,Q;return u===32?(y="space",Q=!0):u===13?(y="return",Q=!0):b2[u]?(y=b2[u],Q=!1):u>=1&&u<=26?(y=String.fromCodePoint(u+96),Q=!1):(y=zQ(u).toLowerCase(),Q=!0),Q&&!B&&(B=zQ(u)),{name:y,...H2(c),eventType:O2(d),sequence:n,raw:n,isKittyProtocol:!0,isPrintable:Q,text:B}},"parseKittyKeypress"),XU=o(n=>{let i=kU.exec(n);if(!i)return null;let u=parseInt(i[1],10),c=Math.max(0,parseInt(i[2],10)-1),d=parseInt(i[3],10),m=i[4],B=m==="~"?jU[u]:qU[m];return B?{name:B,...H2(c),eventType:O2(d),sequence:n,raw:n,isKittyProtocol:!0,isPrintable:!1}:null},"parseKittySpecialKey"),ZU=o((n="")=>{let i;n instanceof Uint8Array?n[0]>127&&n[1]===void 0?(n[0]-=128,n="\x1B"+T2.decode(n)):n=T2.decode(n):n!==void 0&&typeof n!="string"?n=String(n):n||(n="");let u=VU(n);if(u)return u;let c=XU(n);if(c)return c;if(M2.test(n))return{name:"",ctrl:!1,meta:!1,shift:!1,sequence:n,raw:n,isKittyProtocol:!0,isPrintable:!1};let d={name:"",ctrl:!1,meta:!1,shift:!1,sequence:n,raw:n};if(d.sequence=d.sequence||n||d.name,n==="\r"||n==="\x1B\r")d.raw=void 0,d.name="return",d.meta=n.length===2;else if(n===`
|
|
286
|
-
`)d.name="enter";else if(n===" ")d.name="tab";else if(n==="\b"||n==="\x1B\b")d.name="backspace",d.meta=n.charAt(0)==="\x1B";else if(n==="\x7F"||n==="\x1B\x7F")d.name="backspace",d.meta=n.charAt(0)==="\x1B";else if(n==="\x1B"||n==="\x1B\x1B")d.name="escape",d.meta=n.length===2;else if(n===" "||n==="\x1B ")d.name="space",d.meta=n.length===2;else if(n.length===1&&n<="")d.name=String.fromCharCode(n.charCodeAt(0)+97-1),d.ctrl=!0;else if(n.length===1&&n>="0"&&n<="9")d.name="number";else if(n.length===1&&n>="a"&&n<="z")d.name=n;else if(n.length===1&&n>="A"&&n<="Z")d.name=n.toLowerCase(),d.shift=!0;else if(i=YU.exec(n))d.name=i[1].toLowerCase(),d.meta=!0,d.shift=/^[A-Z]$/.test(i[1]);else if(i=JU.exec(n)){let m=[...n];m[0]==="\x1B"&&m[1]==="\x1B"&&(d.meta=!0);let B=[i[1],i[2],i[4],i[6]].filter(Boolean).join(""),y=(i[3]||i[5]||1)-1;d.ctrl=!!(y&4),d.meta=d.meta||!!(y&10),d.shift=!!(y&1),d.code=B,d.name=_2[B]??"",d.shift=KU(B)||d.shift,d.ctrl=FU(B)||d.ctrl}return d},"parseKeypress"),G2=ZU;var L2=Ot(Le(),1);var YQ=o(()=>(0,L2.useContext)(uB),"useStdinContext");var WU=o((n,i={})=>{let{setRawMode:u,internal_exitOnCtrlC:c,internal_eventEmitter:d}=YQ();(0,ep.useEffect)(()=>{if(i.isActive!==!1)return u(!0),()=>{u(!1)}},[i.isActive,u]);let m=(0,ep.useEffectEvent)(B=>{let y=G2(B),Q={upArrow:y.name==="up",downArrow:y.name==="down",leftArrow:y.name==="left",rightArrow:y.name==="right",pageDown:y.name==="pagedown",pageUp:y.name==="pageup",home:y.name==="home",end:y.name==="end",return:y.name==="return",escape:y.name==="escape",ctrl:y.ctrl,shift:y.shift,tab:y.name==="tab",backspace:y.name==="backspace",delete:y.name==="delete",meta:y.meta,super:y.super??!1,hyper:y.hyper??!1,capsLock:y.capsLock??!1,numLock:y.numLock??!1,eventType:y.eventType},N;y.isKittyProtocol?y.isPrintable?N=y.text??y.name:y.ctrl&&y.name.length===1?N=y.name:N="":y.ctrl?N=y.name??"":N=y.sequence,!y.isKittyProtocol&&w2.includes(y.name)&&(N=""),N.startsWith("\x1B")&&(N=N.slice(1)),N.length===1&&/[A-Z]/.test(N)&&(Q.shift=!0),!(N==="c"&&Q.ctrl&&c)&&za.discreteUpdates(()=>{n(N,Q)})});(0,ep.useEffect)(()=>{if(i.isActive!==!1)return d.on("input",m),()=>{d.removeListener("input",m)}},[i.isActive,d])},"useInput"),np=WU;var z2=Ot(Le(),1);var Y2=Ot(Le(),1);var PU=o(()=>(0,Y2.useContext)(oB),"useApp"),JQ=PU;var J2=Ot(Le(),1);var $U=o(()=>(0,J2.useContext)(rB),"useStdout"),pB=$U;var tO=Ot(Le(),1);var KQ=Ot(Le(),1);var nO=Ot(Le(),1);var AO=Ot(Le(),1);var CB=Ot(Le(),1);var Ap=Ot(Le(),1);var K2=Ot(Le(),1);var hB=Ot(Le(),1);var aO=/utf-?8/i;function _c(n=process.env){if(process.platform==="win32")return!0;let i=n.LC_ALL??n.LC_CTYPE??n.LANG;return i===void 0||i.trim().length===0?!1:aO.test(i)}o(_c,"terminalRendersUnicode");var iO=new Map([["\u2014","--"],["\u2013","-"],["\u2019","'"],["\u2018","'"],["\u201C",'"'],["\u201D",'"'],["\u2026","..."],["\xB7","-"],["\u276F",">"],["\u2039","<"],["\u25B8",">"],["\u2713","+"],["\u2691","!"],["\u23CE","Enter"],["\u2191","^"],["\u2193","v"],["\u2190","<-"],["\u2192","->"],["\xD7","x"],["\u2248","~"],["\u2717","x"]]);function F2(n,i=process.env){if(_c(i))return n;let u="";for(let c of n){if(c.codePointAt(0)<128){u+=c;continue}u+=iO.get(c)??"?"}return u}o(F2,"forTerminal");var Ze=Ot(Le(),1);var kt={accent:"#93a2ff",ok:"#7dc9a0",warn:"#d9a441",bad:"#e0796b"};var _l=Ot(Aa(),1);function V2({columns:n,connections:i}){let u=[["\u2191 \u2193 \xB7 k j","move the cursor"],["\u23CE \xB7 \u2192","open what the cursor is on, or run the action it names"],["esc \xB7 \u2190","back; it cancels an armed confirmation first"],["g \xB7 G","jump to the top, jump to the bottom"],...i?[["c","connections and provider key setup"]]:[],["?","these keys"],["q","quit; a run you started keeps going without this window"]];return(0,_l.jsxs)(ut,{flexDirection:"column",width:n,children:[(0,_l.jsx)(q,{color:kt.accent,bold:!0,children:"Keys"}),(0,_l.jsx)(ut,{marginTop:1,flexDirection:"column",children:u.map(([c,d])=>(0,_l.jsxs)(ut,{children:[(0,_l.jsx)(ut,{width:16,children:(0,_l.jsx)(q,{bold:!0,children:c})}),(0,_l.jsx)(q,{dimColor:!0,children:d})]},c))}),(0,_l.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,_l.jsx)(q,{dimColor:!0,children:"Starting a run asks twice when it spends money: the first \u23CE arms and"}),(0,_l.jsx)(q,{dimColor:!0,children:"restates the cost, the second commits. A dry run never asks."})]})]})}o(V2,"HelpScreen");var Da=Ot(Le(),1);function uO(n){let i=new Map,u=[];for(let d of n){let m=d.study?.id;if(m===void 0){u.push(d);continue}let B=i.get(m);B===void 0?i.set(m,[d]):B.push(d)}let c=[...i.entries()].map(([d,m])=>{let B=m.filter(y=>y.liveness==="running");return{studyId:d,runs:m.length,live:B.length,...m[0]===void 0?{}:{latest:m[0]},liveRuns:B}});return c.sort((d,m)=>d.live!==m.live?m.live-d.live:yB(m.latest)-yB(d.latest)),{studies:c,unattributed:u}}o(uO,"groupRunsByStudy");function yB(n){if(n===void 0)return 0;for(let i of[n.completedAt,n.updatedAt,n.startedAt]){if(i===void 0)continue;let u=Date.parse(i);if(Number.isFinite(u))return u}return 0}o(yB,"recencyOf");function X2(n,i){let c=(i===void 0?n:n.filter(y=>y.mode===i)).filter(y=>y.liveness==="finished"),d=c.map(y=>y.durationMs).filter(y=>typeof y=="number"&&Number.isFinite(y)&&y>=0).sort((y,Q)=>y-Q),m=c.map(y=>y.estimatedCostUsd).filter(y=>typeof y=="number"&&Number.isFinite(y)).sort((y,Q)=>y-Q),B=c.filter(y=>y.estimatedCostUsd===null||y.estimatedCostUsd===void 0).length;return{sample:c.length,...d.length===0?{}:{medianDurationMs:Z2(d),durationRangeMs:{min:d[0],max:d[d.length-1]}},...m.length===0?{}:{medianCostUsd:Z2(m)},costUnknown:B}}o(X2,"expectationFor");function Z2(n){let i=Math.floor(n.length/2);return n.length%2===1?n[i]:(n[i-1]+n[i])/2}o(Z2,"median");function QB(n){if(n.sample===0)return"no runs yet";let i=[];if(n.durationRangeMs!==void 0){let{min:m,max:B}=n.durationRangeMs;i.push(m===B?wl(m):`${wl(m)}\u2013${wl(B)}`)}n.medianCostUsd!==void 0&&i.push(`~$${n.medianCostUsd.toFixed(2)} median`);let u=`${n.sample} run${n.sample===1?"":"s"}`,c=n.sample>0&&n.costUnknown===n.sample,d=n.costUnknown===0?"":c?", none priced":`, ${n.costUnknown} unpriced`;return i.length===0?c?`${u}, nothing recorded`:`${u}${d}, nothing timed`:`${i.join(" \xB7 ")} \xB7 ${u}${d}`}o(QB,"expectationLine");function SB(n){return n.runs===0?n.declared?"never run":"no runs":n.liveExpectation.sample>0?QB(n.liveExpectation):`${n.runs} ${n.runs===1?"run":"runs"}, none live`}o(SB,"studySummaryLine");function wl(n){let i=Math.max(0,Math.round(n/1e3));if(i<60)return`${i}s`;let u=Math.floor(i/60);if(u<60)return i%60===0?`${u}m`:`${u}m ${i%60}s`;let c=Math.floor(u/60);return u%60===0?`${c}h`:`${c}h ${u%60}m`}o(wl,"formatDuration");function mg(n,i){let u=Math.max(8,Math.floor(i.width)),c=Math.max(1,Math.floor(i.maxLines)),d=n.replace(/\*\*([^*]+)\*\*/g,"$1").replace(/\s*\n+\s*/g," ").replace(/\s{2,}/g," ").trim();if(d==="")return{lines:[],truncated:!1};let m=d.split(" "),B=[],y="",Q=0;for(;Q<m.length;Q+=1){let b=m[Q],O=y===""?b:`${y} ${b}`;if(O.length<=u){y=O;continue}if(y!==""&&B.push(y),y=b.length<=u?b:`${b.slice(0,u-1)}\u2026`,b.length>u&&(B.push(y),y=""),B.length===c)break}B.length<c&&y!==""&&(B.push(y),Q=m.length);let N=Q<m.length;if(N&&B.length>0){let b=B[B.length-1];B[B.length-1]=b.length+1<=u?`${b}\u2026`:`${b.slice(0,u-1)}\u2026`}return{lines:B,truncated:N}}o(mg,"normalizeThought");function Xr(n){let i=Math.max(0,Math.floor(n.total)),u=Math.max(1,Math.floor(n.viewport));if(i<=u)return{start:0,end:i};let c=Math.min(Math.max(0,Math.floor(n.selected)),i-1),d=Math.min(Math.max(0,Math.floor(n.margin??1)),Math.floor((u-1)/2)),m=Math.min(Math.max(0,c-d),i-u);return c>=m+u-d&&(m=Math.min(c-u+1+d,i-u)),m=Math.max(0,Math.min(m,i-u)),{start:m,end:m+u}}o(Xr,"listWindow");function W2(n){return(n.split("/").pop()??n).replace(/\.(ya?ml)$/i,"")}o(W2,"studyNameFromPath");function P2(n,i){let{studies:u,unattributed:c}=uO(i),d=new Map(u.map(O=>[O.studyId,O])),m=new Map;for(let O of i){let x=O.study?.id;if(x===void 0)continue;let L=m.get(x);L===void 0?m.set(x,[O]):L.push(O)}let B=new Map;for(let O of n)B.set(O.id,(B.get(O.id)??0)+1);let y=o((O,x,L)=>{let j=d.get(O),k=x?.path;return{key:k??`id:${O}`,studyId:O,name:k===void 0?O:W2(k),...x?.title===void 0?{}:{title:x.title},...k===void 0?{}:{path:k},...x?.origin===void 0?{}:{origin:x.origin},declared:L,label:x?.title??(k===void 0?O:W2(k)),...x?.description===void 0?{}:{description:x.description},sharesIdWith:Math.max(0,(B.get(O)??0)-1),runs:j?.runs??0,live:j?.live??0,...j?.latest===void 0?{}:{latest:j.latest},liveRuns:j?.liveRuns??[],expectation:X2(m.get(O)??[]),liveExpectation:X2(m.get(O)??[],"live")}},"build"),Q=new Set(n.map(O=>O.id)),N=[...n.map(O=>y(O.id,O,!0)),...u.filter(O=>!Q.has(O.studyId)).map(O=>y(O.studyId,void 0,!1))];rO(N);let b=o(O=>O.label,"label");return N.sort((O,x)=>{if(O.live!==x.live)return x.live-O.live;let L=o(k=>k.runs>0?0:k.declared?1:2,"rank");if(L(O)!==L(x))return L(O)-L(x);if(O.runs>0&&x.runs>0){let k=yB(x.latest)-yB(O.latest);if(k!==0)return k}let j=b(O).localeCompare(b(x));return j!==0?j:O.key.localeCompare(x.key)}),{rows:N,unattributed:c}}o(P2,"studyRows");function rO(n){let i=o(d=>{let m=new Map;for(let B of d)m.set(B,(m.get(B)??0)+1);return m},"count"),u=i(n.map(d=>d.title??d.name)),c=i(n.map(d=>d.name));for(let d of n){let m=d.title??d.name;if((u.get(m)??0)===1){d.label=m;continue}d.label=(c.get(d.name)??0)===1?d.name:d.path??d.name}}o(rO,"assignLabels");function Xo(n,i){let u=Math.max(4,Math.floor(i));return n.length<=u?n:`${n.slice(0,u-1)}\u2026`}o(Xo,"fitLabelToWidth");function Mn(n){return n===void 0?{}:{color:n}}o(Mn,"color");import $2 from"node:path";var cO=$2.join(".humanish","runs"),Y9=$2.join(cO,"latest.json");var fO=5e3,l7=fO*3;var dO={running:"running",interrupted:"interrupted",passed:"passed",failed:"failed",blocked:"blocked",timed_out:"timed out",no_verdict:"no verdict",dry_run:"dry run",unknown:"unknown"},gO={running:"live",interrupted:"warn",passed:"pass",failed:"fail",blocked:"warn",timed_out:"warn",no_verdict:"warn",dry_run:"neutral",unknown:"neutral"};function Zr(n,i){return{state:n,label:dO[n],tone:gO[n],...i===void 0?{}:{reason:i}}}o(Zr,"shown");function Wr(n){if(n.liveness==="running")return Zr("running");if(n.liveness==="interrupted")return Zr("interrupted");let i=n.ok===!1&&n.failure!==void 0?`${n.failure.kind}: ${n.failure.message}`:void 0;return n.verdict==="blocked"?Zr("blocked",i):n.verdict==="timed_out"?Zr("timed_out",i):n.verdict==="fail"||n.ok===!1?Zr("failed",i):n.verdict==="pass"?Zr("passed"):n.verdict==="contract_proof_only"?Zr(n.mode==="dry-run"?"dry_run":"no_verdict"):Zr("unknown")}o(Wr,"runDisplay");var mo=Ot(Aa(),1),EO=96;function ap(n){return Math.max(20,Math.min(EO,n))}o(ap,"contentWidth");function tN({columns:n,context:i,breadcrumb:u,hints:c,children:d}){let m=ap(n);return(0,mo.jsxs)(ut,{flexDirection:"column",width:m,children:[(0,mo.jsxs)(ut,{width:m,children:[(0,mo.jsx)(q,{bold:!0,children:"human(ish)"}),(0,mo.jsx)(ut,{flexGrow:1}),i===void 0?null:(0,mo.jsx)(q,{dimColor:!0,wrap:"truncate-start",children:i})]}),u===void 0?null:(0,mo.jsx)(q,{dimColor:!0,wrap:"truncate-start",children:u}),(0,mo.jsx)(ut,{marginTop:1,flexDirection:"column",children:d}),(0,mo.jsx)(ut,{marginTop:1,children:(0,mo.jsx)(q,{dimColor:!0,children:c})})]})}o(tN,"Frame");var kQ=_c()?["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]:["|","/","-","\\","|","/","-","\\","|","/"];function ip(n){return kQ[Math.abs(Math.floor(n))%kQ.length]??kQ[0]}o(ip,"spinnerFrame");function yi(n){return n?_c()?"\u276F":">":" "}o(yi,"gutter");function lp(n){let{state:i,tone:u}=Wr(n);if(i==="running")return ip(n.tick??0);let c=_c();return u==="pass"?c?"\u2713":"+":u==="fail"||u==="warn"?c?"\u2691":"!":c?"\xB7":"-"}o(lp,"verdictGlyph");var mO={live:kt.ok,fail:kt.bad,warn:kt.warn,pass:void 0,neutral:void 0},pg=o(n=>Mn(mO[Wr(n).tone]),"glyphColor");var vB=Ot(Le(),1);function DB(){let{stdout:n}=pB(),i=o(()=>({columns:Math.max(20,n.columns||80),rows:Math.max(6,n.rows||24)}),"read"),[u,c]=(0,vB.useState)(i);return(0,vB.useEffect)(()=>{let d=o(()=>{c(B=>{let y=i();return y.columns===B.columns&&y.rows===B.rows?B:y})},"update");n.on("resize",d);let m=setTimeout(d,0);return()=>{n.off("resize",d),clearTimeout(m)}},[n]),u}o(DB,"useTerminalSize");var ht=Ot(Aa(),1),pO=400;function eN({capabilities:n,columns:i,notice:u,onBack:c,onKeyEntry:d}){let[m,B]=(0,Da.useState)(),[y,Q]=(0,Da.useState)(u),[N,b]=(0,Da.useState)(!1),[O,x]=(0,Da.useState)("home"),L=(0,Da.useRef)(!1),[j,k]=(0,Da.useState)(!0),[F,gt]=(0,Da.useState)(0),[lt,Pt]=(0,Da.useState)({kind:"home"}),[Dt,ue]=(0,Da.useState)(),[se,fe]=(0,Da.useState)([]),[Tt,Ct]=(0,Da.useState)([]),{rows:qt}=DB(),ie=(0,Da.useCallback)(async()=>{k(!0);try{let xt=await n.read();B(xt),ue(xt.authentication)}catch{B(void 0),Q("Could not read connection setup. Recheck to try again.")}finally{k(!1)}},[n]);(0,Da.useEffect)(()=>{ie()},[ie]);let Gt=m?.connections.some(xt=>xt.name==="agentmail"&&xt.apiKeyEnv==="AGENTMAIL_API_KEY"),Fe=m?.credential.source,ve=Fe==="process env"?"session environment":Fe?.includes("provider.env")?"project env file":"saved key",st=!!n.studies&&!!n.configure,Rt=Tt.filter(xt=>xt.status!=="closed"||xt.unresolvedCount>0),Wt=j?[]:[...m?.ok?[{id:"key",label:m.credential.stored?"Replace stored key":"Add API key"},...m.credential.present&&!Gt?[{id:"save",label:"Use this key for this project"}]:[],...m.credential.present&&Gt&&n.check?[{id:"check",label:"Test authentication (read-only)"}]:[],...m.credential.present&&Gt&&st?[{id:"studies",label:"Use real email in a study"}]:[]]:[],...n.recovery?[{id:"recovery",label:"Review inbox cleanup"}]:[],{id:"read",label:"Recheck local setup"}],Nt=lt.kind==="home"?Wt:lt.kind==="check"?[{id:"check",label:"Check again"},{id:"home",label:"Back to Connections"}]:lt.kind==="studies"?se.map((xt,_e)=>({id:`study-${_e}`,label:xt.title})):lt.kind==="preview"?[{id:"apply",label:"Save study copy"},{id:"studies",label:"Cancel"}]:lt.kind==="saved"?[{id:"home",label:"Back to Connections"}]:lt.kind==="recovery"?Rt.map((xt,_e)=>({id:`recovery-${_e}`,label:`${xt.runId} \xB7 ${xt.unresolvedCount} pending`})):[...lt.entry.activeOwner===!1&<.entry.unresolvedCount>0&&n.recover?[{id:"recover",label:"Release study inboxes"}]:[],{id:"recovery",label:"Back to cleanup"}],jt=Math.min(F,Math.max(0,Nt.length-1));function De(xt){Pt(xt),gt(0),Q(void 0)}o(De,"go");function dn(){lt.kind==="home"?c():De({kind:lt.kind==="preview"?"studies":lt.kind==="recover"?"recovery":"home"})}o(dn,"back");async function et(xt){if(!L.current){L.current=!0,x(lt.kind),b(!0);try{await xt()}catch{Q("The action could not complete. Recheck before retrying.")}finally{L.current=!1,b(!1)}}}o(et,"run"),np((xt,_e)=>{if(L.current||j)return;if(_e.escape||_e.leftArrow){dn();return}if(_e.upArrow||xt==="k"){gt(Lt=>Math.max(0,Lt-1));return}if(_e.downArrow||xt==="j"){gt(Lt=>Math.min(Math.max(0,Nt.length-1),Lt+1));return}if(!_e.return)return;let le=Nt[jt]?.id;if(le){if(le==="key"){d();return}if(le==="home"){De({kind:"home"});return}(le==="apply"&<.kind==="preview"||le==="recover"&<.kind==="recover")&&Date.now()-lt.openedAt<pO||et(async()=>{if(le==="read"||le==="save"){le==="save"&&Q((await n.save()).message),ue(void 0),await ie(),gt(0);return}if(le==="check"&&n.check){De({kind:"check"}),ue(void 0),ue(await n.check());return}if(le==="studies"&&n.studies){let Lt=await n.studies();fe(Lt),De({kind:"studies"});return}if(le.startsWith("study-")&&n.configure){let Lt=se[jt];if(!Lt)return;let It=await n.configure(Lt.path,!1);if(!It.ok||!It.path||!It.planToken){Q(It.message);return}De({kind:"preview",study:Lt,plan:It,openedAt:Date.now()});return}if(le==="apply"&<.kind==="preview"&&n.configure&<.plan.planToken){let Lt=await n.configure(lt.study.path,!0,lt.plan.planToken);if(!Lt.ok||!Lt.applied||!Lt.path){De({kind:"studies"}),Q(Lt.message);return}De({kind:"saved",path:Lt.path});return}if(le==="recovery"&&n.recovery){Ct(await n.recovery()),De({kind:"recovery"});return}if(le.startsWith("recovery-")){let Lt=Rt[jt];Lt&&De({kind:"recover",entry:Lt,openedAt:Date.now()});return}if(le==="recover"&<.kind==="recover"&&n.recover&&n.recovery&<.entry.activeOwner===!1){let Lt=await n.recover(lt.entry.runId,lt.entry.connectionName);Ct(await n.recovery()),De({kind:"recovery"}),Q(Lt.message)}})}});let Mt=Xr({total:Nt.length,selected:jt,viewport:lt.kind==="studies"||lt.kind==="recovery"?Math.max(2,qt-14):Nt.length}),te=(0,ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[Mt.start>0?(0,ht.jsxs)(q,{dimColor:!0,children:["\u2191 ",Mt.start," more"]}):null,Nt.slice(Mt.start,Mt.end).map((xt,_e)=>{let le=Mt.start+_e;return(0,ht.jsxs)(q,{bold:le===jt,...Mn(le===jt?kt.accent:void 0),children:[yi(le===jt)," ",Xo(xt.label,i-3),N&&O===lt.kind&&le===jt?"\u2026":""]},xt.id)}),Mt.end<Nt.length?(0,ht.jsxs)(q,{dimColor:!0,children:["\u2193 ",Nt.length-Mt.end," more"]}):null]});return(0,ht.jsxs)(ut,{flexDirection:"column",width:i,children:[lt.kind==="home"?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.accent,children:"AgentMail \xB7 hosted email"}),(0,ht.jsxs)(q,{children:["Connection:"," ",j?"checking\u2026":m?.ok?Gt?"agentmail \xB7 saved":"not saved for this project":"unavailable"]}),(0,ht.jsxs)(q,{children:["Key:"," ",m?m.credential.present?`present \xB7 ${ve}`:"missing":"checking\u2026"]}),(0,ht.jsxs)(q,{dimColor:!0,children:["Provider authentication:"," ",Dt?.authenticated===!0?"passed":Dt?.authenticated===!1?"rejected":Dt?"unknown":"not checked"]}),m?.ok===!1?(0,ht.jsx)(q,{color:kt.bad,children:m.message}):null,m?.credential.explicitlyEmpty?(0,ht.jsx)(q,{color:kt.warn,children:"An empty AGENTMAIL_API_KEY overrides the stored key. Unset it and reopen the TUI."}):m?.credential.strict&&!m.credential.present?(0,ht.jsx)(q,{color:kt.warn,children:"Strict key mode ignores saved keys. Reopen without HUMANISH_STRICT_KEYS=1, or pass an env file."}):(Fe==="process env"||Fe?.includes("provider.env"))&&m?.credential.stored?(0,ht.jsx)(q,{dimColor:!0,children:"Env and project keys take precedence over your saved key."}):null,te,y?(0,ht.jsx)(ut,{marginTop:1,children:(0,ht.jsx)(q,{children:y})}):null,(0,ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,ht.jsx)(q,{dimColor:!0,children:"Get a key: https://console.agentmail.to"}),(0,ht.jsx)(q,{dimColor:!0,children:"Key entry is hidden. Saved keys apply to all your projects."}),st?(0,ht.jsx)(q,{dimColor:!0,children:"Fresh inbox per participant \xB7 hosted email"}):(0,ht.jsx)(q,{color:kt.warn,children:"Email receiving in studies is not available yet."}),(0,ht.jsx)(q,{dimColor:!0,children:"Local capture: per study \xB7 SMS: unavailable"})]})]}):lt.kind==="check"?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.accent,children:"Authentication check"}),N&&!Dt?(0,ht.jsx)(q,{children:"Contacting AgentMail\u2026"}):Dt?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsxs)(q,{children:["Credential: ",Dt.credentialPresent?"present":"missing"]}),(0,ht.jsxs)(q,{children:["Authentication:"," ",Dt.authenticated===!0?"passed":Dt.authenticated===!1?"rejected":"unknown"]}),(0,ht.jsxs)(q,{dimColor:!0,children:["Inbox permissions: ",Dt.permissions]}),(0,ht.jsxs)(q,{dimColor:!0,children:["Capacity: ",Dt.capacity," \xB7 delivery: untested"]}),(0,ht.jsx)(ut,{marginTop:1,children:(0,ht.jsx)(q,{children:Dt.message})}),Dt.checkedAt?(0,ht.jsxs)(q,{dimColor:!0,children:["Checked: ",Dt.checkedAt]}):null]}):(0,ht.jsx)(q,{children:"Authentication is unknown."}),te]}):lt.kind==="studies"?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.accent,children:"Choose a study for real email"}),(0,ht.jsx)(q,{dimColor:!0,children:"Preview a local copy before saving."}),se.length?te:(0,ht.jsx)(q,{children:"No studies are available in this project."}),se[jt]?(0,ht.jsx)(ut,{marginTop:1,children:(0,ht.jsx)(q,{dimColor:!0,children:se[jt].path})}):null]}):lt.kind==="preview"?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.accent,children:"Save email-enabled study"}),(0,ht.jsxs)(q,{dimColor:!0,children:["From: ",lt.study.path]}),(0,ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,ht.jsx)(q,{children:"Save as:"}),(0,ht.jsx)(q,{children:lt.plan.path})]}),(0,ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,ht.jsx)(q,{children:"Fresh inbox for each participant."}),(0,ht.jsx)(q,{children:"Mail is hosted. Models may see content."}),(0,ht.jsx)(q,{children:"Recordings remain restricted for sharing."}),(0,ht.jsx)(q,{children:"Provider charges are separate."})]}),te]}):lt.kind==="saved"?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.ok,children:"Email study saved"}),(0,ht.jsx)(q,{children:lt.path}),(0,ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,ht.jsx)(q,{children:"Select this study from Studies to start."}),(0,ht.jsx)(q,{dimColor:!0,children:"Or run this exact path:"}),(0,ht.jsxs)(q,{children:["humanish run ",lt.path]})]}),te]}):lt.kind==="recovery"?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.accent,children:"Inbox cleanup"}),(0,ht.jsx)(q,{dimColor:!0,children:"Study completion and inbox cleanup are separate."}),Rt.length?te:(0,ht.jsx)(q,{children:"No pending inbox cleanup."}),Rt[jt]?(0,ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,ht.jsx)(q,{children:Rt[jt].runId}),(0,ht.jsxs)(q,{dimColor:!0,children:["Connection: ",Rt[jt].connectionName]})]}):null]}):(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.accent,children:"Review inbox cleanup"}),(0,ht.jsx)(q,{children:lt.entry.runId}),(0,ht.jsxs)(q,{children:["Connection: ",lt.entry.connectionName]}),(0,ht.jsxs)(q,{children:[lt.entry.unresolvedCount," pending \xB7 ",lt.entry.participantCount," participants"]}),(0,ht.jsx)(ut,{marginTop:1,flexDirection:"column",children:lt.entry.activeOwner===!0?(0,ht.jsx)(q,{color:kt.warn,children:"This run has an active owner. Cleanup is unavailable while it is running."}):lt.entry.activeOwner===null?(0,ht.jsx)(q,{color:kt.warn,children:"Ownership is unknown. Cleanup is unavailable until ownership can be verified."}):(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{children:"Release this study\u2019s owned inboxes."}),(0,ht.jsx)(q,{dimColor:!0,children:"An uncertain creation may be replayed, then released. Other inboxes are untouched."})]})}),te]}),lt.kind!=="home"&&y?(0,ht.jsx)(ut,{marginTop:1,children:(0,ht.jsx)(q,{color:kt.warn,children:y})}):null,lt.kind!=="home"&&N&&O===lt.kind?(0,ht.jsx)(q,{dimColor:!0,children:"Working\u2026"}):null]})}o(eN,"ConnectionsScreen");import Cg from"node:path";var U7=[{relativeDir:Cg.join("humanish","studies"),origin:"committed",family:"studies"},{relativeDir:Cg.join(".humanish","studies"),origin:"ignored",family:"studies"},{relativeDir:Cg.join(".humanish","local","studies"),origin:"ignored",family:"studies"},{relativeDir:Cg.join("humanish","labs"),origin:"committed",family:"labs"},{relativeDir:Cg.join(".humanish","labs"),origin:"ignored",family:"labs"},{relativeDir:Cg.join(".humanish","local","labs"),origin:"ignored",family:"labs"}],CO=[".yaml",".yml"];function nN(n){let i=CO.find(u=>n.endsWith(u));return i===void 0?void 0:n.slice(0,-i.length)}o(nN,"studyFileStem");function qQ(n){switch(n.name){case"studies":return"studies";case"all-runs":return"all-runs";case"study":return`study:${n.studyKey}`;default:return`run:${n.runId}`}}o(qQ,"screenKey");function AN(){return{stack:[{name:"studies"}],selection:{},quit:!1}}o(AN,"initialNav");function op(n){return n.stack[n.stack.length-1]??{name:"studies"}}o(op,"currentScreen");function aN(n){return n.selection[qQ(op(n))]??0}o(aN,"selectedIndex");function iN(n,i){switch(i.type){case"enter":return{...n,stack:[...n.stack,i.screen]};case"back":return n.stack.length<=1?{...n,quit:!0}:{...n,stack:n.stack.slice(0,-1)};case"move":{if(i.total<=0)return n;let u=qQ(op(n)),c=n.selection[u]??0,d=Math.min(Math.max(0,c+i.delta),i.total-1);return d===c?n:{...n,selection:{...n.selection,[u]:d}}}case"select":{if(i.total<=0)return n;let u=qQ(op(n)),c=Math.min(Math.max(0,i.index),i.total-1);return{...n,selection:{...n.selection,[u]:c}}}default:return{...n,quit:!0}}}o(iN,"navigate");function hO(n,i){if(n==null)return{run:null,analysis:null,total:null};let u={usd:typeof n.estimatedTotalUsd=="number"?n.estimatedTotalUsd:null,complete:n.fullyEstimated===void 0?null:n.fullyEstimated,ratesAsOf:n.ratesAsOf??null,placeholder:n.placeholder===!0},c=i??null,d=[u.usd,c?.estimatedUsd].filter(B=>typeof B=="number");if(d.length===0)return{run:u,analysis:c,total:null};let m=u.usd===null||u.complete===!1||c?.complete===!1;return{run:u,analysis:c,total:{usd:BO(d.reduce((B,y)=>B+y,0)),complete:m?!1:u.complete}}}o(hO,"runCost");function hg(n){return hO({estimatedTotalUsd:n.estimatedCostUsd??null,...n.estimatedCostComplete===void 0?{}:{fullyEstimated:n.estimatedCostComplete}},n.analysisCost)}o(hg,"indexedRunCost");function BO(n){return Math.round(n*1e6)/1e6}o(BO,"round6");function IO(n){return n===1?"analysis":`${n} analyses`}o(IO,"analysesNoun");function RB(n){if(n.run===null)return;let i=n.total===null?"cost not estimated":`~$${n.total.usd.toFixed(2)} est.${n.total.complete===!1?" plus unpriced usage":""}`;return n.analysis===null?i:`${i}, with ${IO(n.analysis.requests)}`}o(RB,"runCostLabel");var bn=Ot(Aa(),1);function uN({runs:n,details:i,labels:u,expected:c,selected:d,columns:m,viewport:B,tick:y,now:Q}){if(n.length===0)return(0,bn.jsxs)(ut,{flexDirection:"column",children:[(0,bn.jsx)(q,{children:"No one is working right now."}),(0,bn.jsx)(q,{dimColor:!0,children:"Start a run from any study and it appears here."})]});let N=Xr({total:n.length,selected:d,viewport:Math.max(2,B-6)}),b=n[Math.min(Math.max(0,d),n.length-1)],O=b===void 0?void 0:i.get(b.runId),x=O?.participants[0],L=x?.thought===void 0?void 0:mg(x.thought.text,{width:Math.max(16,m-2),maxLines:2});return(0,bn.jsxs)(ut,{flexDirection:"column",children:[n.slice(N.start,N.end).map((j,k)=>(0,bn.jsx)(yO,{run:j,who:lN(i.get(j.runId))??"starting\u2026",study:u.get(j.runId)??j.study?.id??"",expectedMs:c.get(j.study?.id??""),active:N.start+k===d,columns:m,tick:y,now:Q},j.runId)),L===void 0?null:(0,bn.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[L.lines.map((j,k)=>(0,bn.jsxs)(ut,{width:m,children:[(0,bn.jsx)(ut,{width:2,flexShrink:0,children:(0,bn.jsx)(q,{color:kt.accent,children:"\u258C"})}),(0,bn.jsxs)(q,{dimColor:!0,wrap:"truncate-end",children:[k===0?`"${j}`:j,k===L.lines.length-1?'"':""]})]},k)),(0,bn.jsxs)(ut,{width:m,children:[(0,bn.jsx)(ut,{width:2,flexShrink:0,children:(0,bn.jsx)(q,{children:" "})}),(0,bn.jsx)(q,{dimColor:!0,wrap:"truncate-end",children:Xo([lN(O),u.get(b?.runId??"")].filter(Boolean).join(" \xB7 "),Math.max(10,m-2))})]})]}),(0,bn.jsx)(ut,{marginTop:1,children:(0,bn.jsx)(q,{dimColor:!0,children:QO(n,i)})}),(0,bn.jsx)(q,{dimColor:!0,children:"Run + analysis costs: humanish stats"})]})}o(uN,"AllRunsScreen");function lN(n){let i=n?.participants[0];return i?.personaId??i?.label}o(lN,"personaOf");function yO({run:n,who:i,study:u,expectedMs:c,active:d,columns:m,tick:B,now:y}){let Q=n.startedAt===void 0?Number.NaN:Date.parse(n.startedAt),N=Number.isFinite(Q)?oN(y-Q):"",b=c===void 0?N:`${N} / ~${oN(c)}`,O=Math.max(10,Math.floor((m-b.length-6)*.5)),x=Math.max(8,m-b.length-O-6);return(0,bn.jsxs)(ut,{width:m,children:[(0,bn.jsxs)(q,{...Mn(d?kt.accent:void 0),bold:d,children:[yi(d)," "]}),(0,bn.jsxs)(q,{color:kt.ok,children:[ip(B)," "]}),(0,bn.jsx)(ut,{width:O,children:(0,bn.jsx)(q,{...Mn(d?kt.accent:void 0),bold:d,wrap:"truncate-end",children:Xo(i,O)})}),(0,bn.jsx)(ut,{width:x,children:(0,bn.jsx)(q,{dimColor:!0,wrap:"truncate-end",children:Xo(u,x)})}),(0,bn.jsx)(ut,{flexGrow:1}),(0,bn.jsx)(q,{dimColor:!0,children:b})]})}o(yO,"RunRow");function QO(n,i){let u=0,c=0,d=0;for(let Q of n){let N=Q.estimatedCostUsd===void 0?i.get(Q.runId)?.participants[0]?.estimatedCostUsd:hg(Q).total?.usd;d+=Q.analysisCost?.requests??0,typeof N=="number"&&(u+=N,c+=1)}if(c===0)return"no spend recorded yet; a live run prices itself as it goes";let m=n.length-c,B=m===0?"":` \xB7 ${m} not priced yet`,y=d===0?"":` \xB7 with ${d===1?"1 analysis":`${d} analyses`}`;return`run spend ~$${u.toFixed(2)} across ${c} of ${n.length}${B}${y}`}o(QO,"spendLine");function oN(n){if(!Number.isFinite(n)||n<0)return"0:00";let i=Math.floor(n/1e3),u=Math.floor(i/60);return u<60?`${u}:${String(i%60).padStart(2,"0")}`:wl(n)}o(oN,"clockOf");var Ht=Ot(Aa(),1);function NB(n,i){return[...i?[{kind:"start",mode:"dry-run"},{kind:"start",mode:"live"}]:[],...n.map(c=>({kind:"run",run:c}))]}o(NB,"studyItems");function cN(n){let{row:i,summary:u,runs:c,selected:d,columns:m,viewport:B,now:y,tick:Q,canStart:N}=n,b=NB(c,N);return(0,Ht.jsxs)(ut,{flexDirection:"column",children:[u?.description===void 0?null:(0,Ht.jsx)(q,{wrap:"truncate-end",children:wO(u.description)}),u?.subject===void 0?null:(0,Ht.jsx)(q,{dimColor:!0,wrap:"truncate-end",children:[u.subject,u.participants,u.model,u.reasoningEffort===void 0?void 0:`${u.reasoningEffort} effort`].filter(Boolean).join(" \xB7 ")}),(0,Ht.jsxs)(ut,{width:m,children:[(0,Ht.jsxs)(q,{dimColor:!0,wrap:"truncate-end",children:[SB(i),_O(u)]}),(0,Ht.jsx)(ut,{flexGrow:1}),u?.planRefusal!==void 0?(0,Ht.jsx)(q,{...Mn(kt.warn),children:"refused \u2717"}):u?.keysReady===void 0?null:(0,Ht.jsx)(q,{...Mn(u.keysReady?kt.ok:kt.warn),children:u.keysReady?"keys \u2713":"keys \u2717"})]}),u?.analysis===void 0?null:(0,Ht.jsx)(q,{wrap:"wrap",children:u.analysis.provider==="codex"?`After live runs: Codex account analyst \xB7 ${u.analysis.model} \xB7 remote inference \xB7 account limits apply; dollar cost unknown`:`After live runs: analysis \xB7 ${u.analysis.model} \xB7 separate $${u.analysis.maxCostUsd} admission estimate limit \xB7 not a billing cap`}),u?.runtime?(0,Ht.jsx)(q,{color:u.runtime.ok?kt.ok:kt.warn,children:u.runtime.message}):null,u?.participantReadiness?(0,Ht.jsx)(q,{color:u.participantReadiness.ok?kt.ok:kt.warn,children:u.participantReadiness.message}):null,u?.communications?(0,Ht.jsx)(q,{color:kt.warn,children:u.communications}):null,u?.planRefusal===void 0?null:(0,Ht.jsx)(ut,{width:m,children:(0,Ht.jsxs)(q,{wrap:"wrap",...Mn(kt.warn),children:["A live run is refused: ",u.planRefusal]})}),u?.keysReady===!1?(0,Ht.jsxs)(ut,{flexDirection:"column",width:m,children:[(0,Ht.jsxs)(q,{...Mn(kt.warn),children:[u.missingKeys?.join(", ")," not found"]}),(0,Ht.jsxs)(q,{dimColor:!0,children:[" ","humanish keys set openai"," ","\xB7 stores them for every project"]}),(0,Ht.jsxs)(q,{dimColor:!0,children:[" ","humanish tui --env-file .env"," ","\xB7 or just this session"]})]}):null,n.launchNote===void 0?null:(0,Ht.jsx)(ut,{marginTop:1,children:(0,Ht.jsx)(q,{dimColor:!0,children:n.launchNote})}),n.launchError===void 0?null:(0,Ht.jsx)(ut,{marginTop:1,children:(0,Ht.jsx)(q,{color:kt.bad,children:n.launchError})}),N?(0,Ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,Ht.jsx)(vO,{...n,active:SO(b,d)}),n.confirming==="live"?(0,Ht.jsx)(ut,{marginTop:1,children:(0,Ht.jsxs)(q,{color:kt.warn,children:[" ","start a live run? ",QB(n.row.liveExpectation),u?.analysis?u.analysis.provider==="codex"?" + Codex account analysis (remote inference; account limits apply, dollar cost unknown)":` + analysis ($${u.analysis.maxCostUsd} admission estimate limit, separate from participant spend)`:""," ","\xB7 \u23CE confirm \xB7 esc cancel"]})}):null]}):null,i.declared?null:(0,Ht.jsx)(ut,{marginTop:1,children:(0,Ht.jsx)(q,{color:kt.warn,children:n.retired??"no manifest here: renamed, deleted, or run from elsewhere"})}),i.sharesIdWith>0?(0,Ht.jsxs)(q,{color:kt.warn,children:[i.sharesIdWith+1,' manifests declare "',i.studyId,'": these runs are shared between them']}):null,(0,Ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,Ht.jsx)(q,{dimColor:!0,children:"Runs"}),n.liveDetail?.automaticAnalysis===void 0?null:(0,Ht.jsxs)(q,{children:["Latest analysis: ",n.liveDetail.automaticAnalysis.state," \xB7 open run for details"]}),c.length===0?(0,Ht.jsx)(q,{dimColor:!0,children:" none yet"}):(0,Ht.jsx)(NO,{runs:c,liveDetail:n.liveDetail,selected:d-NB([],N).length,columns:m,viewport:Math.max(2,B-6),now:y,tick:Q,expectedMs:i.liveExpectation.medianDurationMs})]})]})}o(cN,"StudyScreen");function SO(n,i){let u=n[i];return u?.kind==="start"?u.mode:void 0}o(SO,"activeStart");function vO(n){let i=DO(n.columns,n.row,n.summary);return(0,Ht.jsxs)(Ht.Fragment,{children:[(0,Ht.jsx)(rN,{...n,mode:"dry-run",active:n.active==="dry-run",stacked:i}),(0,Ht.jsx)(rN,{...n,mode:"live",active:n.active==="live",stacked:i})]})}o(vO,"StartRows");function rN({mode:n,active:i,stacked:u,columns:c,row:d,summary:m}){let{label:B,value:y,blocked:Q}=dN(n,d,m),N=n==="live"?kt.warn:kt.accent,b=(0,Ht.jsxs)(q,{...Mn(i?N:void 0),bold:i,dimColor:Q&&!i,children:[yi(i)," ",B]}),O=(0,Ht.jsx)(q,{dimColor:!Q,...Mn(Q?kt.warn:void 0),children:y});return u?(0,Ht.jsxs)(ut,{flexDirection:"column",width:c,children:[b,(0,Ht.jsx)(ut,{marginLeft:4,children:O})]}):(0,Ht.jsxs)(ut,{width:c,children:[(0,Ht.jsx)(ut,{flexShrink:0,children:b}),(0,Ht.jsx)(ut,{flexGrow:1,minWidth:fN}),O]})}o(rN,"StartRow");var fN=2;function dN(n,i,u){if(n==="dry-run")return{label:"Start a dry run",value:"free \xB7 no keys, no spend",blocked:!1};let c=u?.planRefusal!==void 0||u?.keysReady===!1||u?.runtime?.ok===!1||u?.participantReadiness?.ok===!1,d=QB(i.liveExpectation);return{label:"Start a live run",value:c?`${d} \xB7 ${RO(u)}`:d,blocked:c}}o(dN,"startRowText");function DO(n,i,u){return["dry-run","live"].some(c=>{let{label:d,value:m}=dN(c,i,u);return 2+[...d].length+fN+[...m].length>n})}o(DO,"startRowsStack");function RO(n){return n?.planRefusal!==void 0?"refused":n?.keysReady===!1?"needs keys":n?.runtime?.ok===!1?"needs runtime setup":"needs Codex login"}o(RO,"blocker");function NO({runs:n,liveDetail:i,selected:u,columns:c,viewport:d,now:m,tick:B,expectedMs:y}){let Q=Xr({total:n.length,selected:u,viewport:d});return(0,Ht.jsxs)(ut,{flexDirection:"column",children:[Q.start>0?(0,Ht.jsx)(q,{dimColor:!0,children:` \u2191 ${Q.start} more`}):null,n.slice(Q.start,Q.end).map((N,b)=>N.liveness==="running"?(0,Ht.jsx)(xO,{run:N,detail:i,active:Q.start+b===u,columns:c,now:m,tick:B,expectedMs:y},N.runId):(0,Ht.jsx)(bO,{run:N,active:Q.start+b===u,columns:c},N.runId)),Q.end<n.length?(0,Ht.jsx)(q,{dimColor:!0,children:` \u2193 ${n.length-Q.end} more`}):null]})}o(NO,"RunList");function xO({run:n,detail:i,active:u,columns:c,now:d,tick:m,expectedMs:B}){let y=i?.participants[0],Q=n.startedAt===void 0?Number.NaN:Date.parse(n.startedAt),N=Number.isFinite(Q)?sN(d-Q):void 0,b=B===void 0?"":` of ~${sN(B)}`,O=y?.thought===void 0?void 0:mg(y.thought.text,{width:Math.max(16,c-6),maxLines:3});return(0,Ht.jsxs)(ut,{flexDirection:"column",children:[(0,Ht.jsxs)(ut,{width:c,children:[(0,Ht.jsx)(ut,{flexShrink:0,children:(0,Ht.jsxs)(q,{...Mn(u?kt.accent:void 0),bold:u,children:[yi(u)," "]})}),(0,Ht.jsx)(ut,{flexShrink:0,children:(0,Ht.jsxs)(q,{color:kt.ok,children:[lp({liveness:"running",tick:m})," "]})}),(0,Ht.jsx)(q,{...Mn(u?kt.accent:void 0),bold:u,wrap:"truncate-end",children:y?.personaId??y?.label??"starting\u2026"}),(0,Ht.jsx)(ut,{flexGrow:1}),(0,Ht.jsx)(q,{dimColor:!0,children:N===void 0?"":`${N}${b}`})]}),O===void 0?null:(0,Ht.jsx)(ut,{flexDirection:"column",marginLeft:4,children:O.lines.map((x,L)=>(0,Ht.jsxs)(q,{dimColor:L>0,children:[L===0?`"${x}`:x,L===O.lines.length-1?'"':""]},L))}),y===void 0?null:(0,Ht.jsx)(ut,{width:c,children:(0,Ht.jsxs)(q,{dimColor:!0,children:[" ",TO(y)]})})]})}o(xO,"LiveRun");function TO(n){let i=[];return n.actions!==void 0&&i.push(`${n.actions} actions`),n.thoughts!==void 0&&i.push(`${n.thoughts} thoughts`),n.turns!==void 0&&i.push(`${n.turns} turns`),i.length===0?"working\u2026":i.join(" \xB7 ")}o(TO,"activityLine");function bO({run:n,active:i,columns:u}){let c=MO(n.completedAt??n.startedAt),d=Wr(n),m=d.state==="passed"?"":` \xB7 ${d.label}`,B=n.participants===void 0?d.state==="unknown"?"no verdict":d.label:`${n.participants.reachedGoal}/${n.participants.total} reached the goal${m}`,y=n.estimatedCostUsd===void 0||n.estimatedCostUsd===null&&n.analysisCost===void 0?"":` \xB7 run ${RB(hg(n))}`,Q=[c,B].filter(Boolean).join(" \xB7 ")+y;return(0,Ht.jsxs)(ut,{width:u,children:[(0,Ht.jsx)(ut,{flexShrink:0,children:(0,Ht.jsxs)(q,{...Mn(i?kt.accent:void 0),bold:i,children:[yi(i)," "]})}),(0,Ht.jsx)(ut,{flexShrink:0,children:(0,Ht.jsxs)(q,{...pg(n),children:[lp(n)," "]})}),(0,Ht.jsx)(q,{...Mn(i?kt.accent:void 0),bold:i,wrap:"truncate-end",children:Q})]})}o(bO,"PastRun");function _O(n){let i=n?.caps.laneUsd,u=n?.caps.studyUsd;if(i===void 0&&u===void 0)return"";let c=[];return i!==void 0&&c.push(`$${i} per participant`),u!==void 0&&c.push(`$${u} study`),` \xB7 caps ${c.join(" / ")}`}o(_O,"capsLine");function wO(n){let i=n.replace(/\s+/g," ").trim(),u=i.indexOf(". ");return u===-1?i:i.slice(0,u+1)}o(wO,"firstSentence");function MO(n){if(n===void 0)return"";let i=Date.parse(n);if(!Number.isFinite(i))return"";let u=new Date(i),c=o(d=>String(d).padStart(2,"0"),"pad");return`${c(u.getUTCMonth()+1)}-${c(u.getUTCDate())} ${c(u.getUTCHours())}:${c(u.getUTCMinutes())}`}o(MO,"shortDate");function sN(n){if(!Number.isFinite(n)||n<0)return"0:00";let i=Math.floor(n/1e3),u=Math.floor(i/60);return u<60?`${u}:${String(i%60).padStart(2,"0")}`:wl(n)}o(sN,"clockOf");var Un=Ot(Aa(),1);function up(n,i){return["queued","running"].includes(i?.automaticAnalysis?.state??"")?i?.observerPath===void 0?["cancel-analysis"]:["observer","cancel-analysis"]:n.liveness==="interrupted"?i?.observerPath===void 0?["reclaim"]:["reclaim","observer"]:n.liveness==="running"?i?.observerPath===void 0?["stop"]:["stop","observer"]:i?.observerPath===void 0?["again"]:["observer","again"]}o(up,"runActions");function UO(n){switch(n){case"observer":return"Open in Observer";case"again":return"Run again";case"stop":return"Stop this run";case"cancel-analysis":return"Cancel analysis";default:return"Reclaim: stop sandboxes, keep evidence"}}o(UO,"actionLabel");function gN({run:n,detail:i,columns:u,selected:c,tick:d,now:m,actionNote:B}){let y=i?.participants[0],Q=up(n,i),N=n.liveness==="interrupted";return(0,Un.jsxs)(ut,{flexDirection:"column",children:[(0,Un.jsx)(ut,{children:(0,Un.jsxs)(q,{...pg(n),bold:!0,children:[lp({...n,tick:d})," ",OO(n,y)]})}),N?(0,Un.jsx)(GO,{run:n,participant:y,now:m,columns:u}):(0,Un.jsx)(HO,{run:n,participant:y,columns:u}),i?.automaticAnalysis===void 0?null:(0,Un.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,Un.jsxs)(q,{children:["Analysis: ",i.automaticAnalysis.state]}),i.automaticAnalysis.reason===null?null:(0,Un.jsx)(q,{dimColor:!0,wrap:"wrap",children:i.automaticAnalysis.reason})]}),Q.length===0?null:(0,Un.jsx)(ut,{marginTop:1,flexDirection:"column",children:Q.map((b,O)=>(0,Un.jsx)(ut,{children:(0,Un.jsxs)(q,{...Mn(O===c?kt.accent:void 0),bold:O===c,children:[yi(O===c)," ",Xo(UO(b),Math.max(10,u-3))]})},b))}),B===void 0?null:(0,Un.jsx)(ut,{marginTop:1,children:(0,Un.jsx)(q,{dimColor:!0,wrap:"wrap",children:B})})]})}o(gN,"RunScreen");function OO(n,i){if(n.liveness==="interrupted")return"interrupted: no outcome recorded";if(n.liveness==="running"){let B=i?.personaId??i?.label;return B===void 0?"starting\u2026":`${B} is working`}let u=Wr(n),c=n.participants;if(c===void 0)return u.state==="unknown"?"finished, no verdict recorded":u.label;let d=c.reportedFriction===void 0||c.reportedFriction===0?"":` \xB7 ${c.reportedFriction} reported friction`,m=u.state==="passed"?"":` \xB7 ${u.label}`;return`${c.reachedGoal}/${c.total} reached the goal${d}${m}`}o(OO,"headline");function HO({run:n,participant:i,columns:u}){let c=i?.thought===void 0?void 0:mg(i.thought.text,{width:Math.max(16,u),maxLines:3}),{reason:d}=Wr(n),m=[n.durationMs===void 0?void 0:wl(n.durationMs),i?.turns===void 0?void 0:`${i.turns} turns`,i?.thoughts===void 0?void 0:`${i.thoughts} thoughts`].filter(Boolean).join(" \xB7 ");return(0,Un.jsxs)(ut,{flexDirection:"column",children:[c===void 0?null:(0,Un.jsx)(ut,{marginTop:1,flexDirection:"column",children:c.lines.map((B,y)=>(0,Un.jsxs)(q,{children:[y===0?`"${B}`:B,y===c.lines.length-1?'"':""]},y))}),(0,Un.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[d===void 0?null:(0,Un.jsx)(q,{dimColor:!0,wrap:"truncate-end",children:`why: ${d}`}),m===""?null:(0,Un.jsx)(q,{dimColor:!0,children:m}),(0,Un.jsx)(q,{dimColor:!0,children:EN(n,i)})]})]})}o(HO,"FinishedFacts");function GO({run:n,participant:i,now:u,columns:c}){let d=n.startedAt===void 0?Number.NaN:Date.parse(n.startedAt),m=n.updatedAt===void 0?Number.NaN:u-Date.parse(n.updatedAt),B=[i?.thoughts===void 0?void 0:`${i.thoughts} thoughts`,i?.actions===void 0?void 0:`${i.actions} actions`].filter(Boolean).join(" \xB7 ");return(0,Un.jsxs)(ut,{marginTop:1,flexDirection:"column",width:c,children:[(0,Un.jsxs)(q,{dimColor:!0,children:[Number.isFinite(d)?`started ${LO(d)}`:"start time not recorded",Number.isFinite(m)?` \xB7 quiet ${wl(m)}`:"",B===""?"":` \xB7 ${B} captured`]}),(0,Un.jsxs)(ut,{children:[(0,Un.jsx)(q,{dimColor:!0,children:n.estimatedCostUsd===void 0&&i?.estimatedCostUsd===void 0?"cost unknown: it ended before pricing itself":EN(n,i)}),(0,Un.jsx)(q,{color:kt.warn,children:" sandboxes may still be running"})]})]})}o(GO,"InterruptedFacts");function EN(n,i){if(n.estimatedCostUsd===void 0){let u=i?.estimatedCostUsd;return u===void 0?"cost not recorded":u===null?"cost declared absent":`~$${u.toFixed(2)} participant model estimate`}return n.estimatedCostUsd===null&&n.analysisCost===void 0?"cost declared absent":`run ${RB(hg(n))}`}o(EN,"costLine");function LO(n){let i=new Date(n),u=o(c=>String(c).padStart(2,"0"),"pad");return`${u(i.getUTCHours())}:${u(i.getUTCMinutes())}`}o(LO,"clockTime");var pN=Ot(Le(),1);var he=Ot(Aa(),1);function mN({retired:n}){let i=n.filter(c=>c.code==="HUMANISH_STUDY_V2_UNSUPPORTED").length,u=n.length-i;return(0,he.jsxs)(ut,{flexDirection:"column",children:[i===0?null:(0,he.jsx)(q,{color:kt.warn,children:`${i} study ${i===1?"file uses":"files use"} humanish.lab.v2, which humanish no longer reads. Run humanish migrate to convert ${i===1?"it":"them"}.`}),u===0?null:(0,he.jsx)(q,{color:kt.warn,children:`${u} study ${u===1?"file is":"files are"} in a labs/ folder, which humanish no longer reads. Move ${u===1?"it":"them"} to the matching studies/ folder; humanish study list names each one.`})]})}o(mN,"RetiredNote");function CN({rows:n,selected:i,columns:u,viewport:c,unattributed:d,tick:m,liveParticipants:B,now:y,initialized:Q,peerSelected:N,liveTotal:b,initArmed:O,actionNote:x,retired:L=[]}){if(n.length===0)return Q?(0,he.jsxs)(ut,{flexDirection:"column",children:[L.length>0?(0,he.jsx)(mN,{retired:L}):(0,he.jsx)(q,{children:"No studies here yet."}),(0,he.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,he.jsx)(q,{dimColor:!0,children:"A study file says who to send, to what, and what counts as done."}),(0,he.jsx)(q,{dimColor:!0,children:"Write one in humanish/studies/, or run `humanish init` for starter studies."})]})]}):(0,he.jsxs)(ut,{flexDirection:"column",children:[(0,he.jsx)(q,{children:"This directory is not a humanish project."}),(0,he.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,he.jsx)(q,{dimColor:!0,children:"A project is a humanish/ directory of studies and personas,"}),(0,he.jsx)(q,{dimColor:!0,children:"kept beside the app they study."})]}),(0,he.jsxs)(ut,{marginTop:1,children:[(0,he.jsxs)(q,{...Mn(kt.accent),bold:!0,children:[yi(!0)," Set up humanish here"]}),(0,he.jsx)(ut,{flexGrow:1}),(0,he.jsx)(q,{dimColor:!0,children:O?"\u23CE again to confirm \xB7 esc cancel":"writes humanish/ and updates package.json"})]}),x===void 0?null:(0,he.jsx)(ut,{marginTop:1,children:(0,he.jsx)(q,{dimColor:!0,children:x})})]});let j=Xr({total:n.length,selected:i,viewport:c});return(0,he.jsxs)(ut,{flexDirection:"column",children:[j.start>0?(0,he.jsx)(q,{dimColor:!0,children:` \u2191 ${j.start} more`}):null,n.slice(j.start,j.end).map((k,F)=>{let gt=j.start+F,lt=gt>0?n[gt-1]:void 0,Pt=k.runs===0&<!==void 0&<.runs>0;return(0,he.jsxs)(pN.default.Fragment,{children:[Pt?(0,he.jsx)(ut,{marginTop:1,children:(0,he.jsxs)(q,{dimColor:!0,children:[" ","not yet run"]})}):null,(0,he.jsx)(YO,{row:k,columns:u,active:gt===i,tick:m,liveParticipants:B,now:y})]},k.key)}),j.end<n.length?(0,he.jsx)(q,{dimColor:!0,children:` \u2193 ${n.length-j.end} more`}):null,(0,he.jsxs)(ut,{marginTop:1,children:[(0,he.jsx)(q,{...Mn(N?kt.accent:void 0),bold:N,dimColor:!N,children:`${yi(N)} All runs`}),b>0?(0,he.jsx)(q,{color:kt.ok,children:` ${b} working`}):null]}),d>0?(0,he.jsx)(ut,{marginTop:1,children:(0,he.jsxs)(q,{dimColor:!0,children:[d," ",d===1?"run":"runs"," with no study"]})}):null,L.length>0?(0,he.jsx)(ut,{marginTop:1,children:(0,he.jsx)(mN,{retired:L})}):null,(0,he.jsxs)(ut,{marginTop:1,width:u,children:[(0,he.jsx)(ut,{flexShrink:0,children:(0,he.jsx)(q,{...Mn(kt.accent),children:"\u25B8"})}),(0,he.jsx)(q,{dimColor:!0,wrap:"truncate-end",children:` ${zO(n[i],N)}`})]})]})}o(CN,"StudiesScreen");function zO(n,i){if(i)return"every run in this project, newest first, across every study";if(n===void 0)return"";let u=n.description?.split(/(?<=[.!?])\s/)[0]?.trim();return u!==void 0&&u.length>0?u:"no description in the manifest"}o(zO,"describe");function YO({row:n,columns:i,active:u,tick:c,liveParticipants:d,now:m}){let B=n.liveRuns[0],y=B===void 0?SB(n):JO(n,B,d.get(B.runId),m),Q=Math.max(10,Math.floor(i/2)-2),N=y.length<=Q?y:KO(n),b=Math.max(8,i-N.length-6);return(0,he.jsxs)(ut,{width:i,children:[(0,he.jsxs)(q,{...Mn(u?kt.accent:void 0),bold:u,children:[yi(u)," "]}),(0,he.jsxs)(q,{...pg({liveness:B===void 0?"finished":"running"}),children:[B===void 0?" ":ip(c)," "]}),(0,he.jsx)(q,{...Mn(u?kt.accent:void 0),bold:u,wrap:"truncate-end",children:Xo(n.label,b)}),(0,he.jsx)(ut,{flexGrow:1}),(0,he.jsx)(q,{...Mn(B===void 0?void 0:kt.ok),dimColor:B===void 0,children:N})]})}o(YO,"StudyRowView");function JO(n,i,u,c){let d=i.startedAt===void 0?Number.NaN:Date.parse(i.startedAt),m=Number.isFinite(d)?FO(c-d):void 0,B=u??"starting\u2026",y=n.live>1?` +${n.live-1}`:"";return m===void 0?`${B}${y}`:`${B} \xB7 ${m}${y}`}o(JO,"liveStatus");function KO(n){return n.live>0?`${n.live} running`:n.runs===0?n.declared?"never run":"no runs":`${n.runs} runs`}o(KO,"fallbackStatus");function FO(n){if(!Number.isFinite(n)||n<0)return"0:00";let i=Math.floor(n/1e3),u=Math.floor(i/60),c=i%60;return u<60?`${u}:${String(c).padStart(2,"0")}`:wl(n)}o(FO,"clockOf");var Xi=Ot(Aa(),1),kO=6,jQ=2e3,qO=5e3,jO=100,VQ=400,VO=120;function IN({options:n,onReady:i,onKeyEntry:u,now:c,tick:d}){let{exit:m}=JQ(),B=DB(),[y,Q]=(0,Ze.useReducer)(iN,void 0,AN),[N,b]=(0,Ze.useState)(void 0),[O,x]=(0,Ze.useState)(void 0),[L,j]=(0,Ze.useState)(void 0),[k,F]=(0,Ze.useState)(void 0),[gt,lt]=(0,Ze.useState)(void 0),[Pt,Dt]=(0,Ze.useState)(void 0),[ue,se]=(0,Ze.useState)(void 0),[fe,Tt]=(0,Ze.useState)(void 0),[Ct,qt]=(0,Ze.useState)(void 0),[ie,Gt]=(0,Ze.useState)(!1),[Fe,ve]=(0,Ze.useState)(n.initialScreen==="connections"),[st,Rt]=(0,Ze.useState)(void 0),[Wt,Nt]=(0,Ze.useState)(0),jt=d??Wt,[De,dn]=(0,Ze.useState)(void 0),[et,Mt]=(0,Ze.useState)(new Map),xt=(0,Ze.useMemo)(()=>n.capabilities.readProjectState(n.cwd),[n]).initialized||(N?.retired.length??0)>0,_e=c??Date.now(),le=(0,Ze.useRef)(void 0),Lt=(0,Ze.useRef)({name:"studies"});(0,Ze.useEffect)(()=>{let _t=!1,oe=o(async()=>{try{let[Re,cn]=await Promise.all([n.capabilities.readRunIndex(n.cwd),n.capabilities.listStudies(n.cwd)]);if(_t)return;x(void 0),b(hN(Re,cn.studies,cn.retired))}catch(Re){if(_t)return;x(Re instanceof Error?Re.message:String(Re))}},"read");oe();let Pe=setInterval(()=>{oe()},jQ);return Pe.unref?.(),()=>{_t=!0,clearInterval(Pe)}},[n]),(0,Ze.useEffect)(()=>{(N!==void 0||O!==void 0)&&i?.()},[N,O,i]);let It=op(y),ne=aN(y),_n=BN(It,N,ue);(0,Ze.useEffect)(()=>{Lt.current=It;let _t=$O(It,N,ne);_t!==void 0&&(le.current=_t)},[It,N,ne]),(0,Ze.useEffect)(()=>{if(N===void 0)return;let _t=le.current;if(_t===void 0)return;let oe=tH(It,N,_t);oe>=0&&oe!==ne&&Q({type:"select",index:oe,total:BN(It,N,ue)})},[N,It]);let DA=(0,Ze.useCallback)(async(_t,oe)=>{if(oe==="live"&&L!=="live"){j("live"),Dt(Date.now());return}if(oe==="live"&&Pt!==void 0&&Date.now()-Pt<VQ)return;j(void 0),Dt(void 0),F(void 0),lt({studyKey:_t.key,text:`starting ${_t.name}\u2026`});let Pe=await n.capabilities.startRun({cwd:n.cwd,study:_t.name,..._t.path?{manifestPath:_t.path}:{},mode:oe});if(!Pe.ok){lt(void 0),F({studyKey:_t.key,text:Pe.error.message});return}let Re=Date.parse(Pe.run.launchedAt),cn=o(vn=>{if(vn.pid!==Pe.run.pid)return!1;let yt=vn.startedAt===void 0?Number.NaN:Date.parse(vn.startedAt);return!Number.isFinite(yt)||!Number.isFinite(Re)?!1:yt>=Re-1e3},"isOurs"),In=Date.now()+qO;for(;;){let vn=await n.capabilities.readRunIndex(n.cwd),yt=vn.runs.find(cn);if(yt!==void 0){let Vt=await n.capabilities.listStudies(n.cwd);b(hN(vn,Vt.studies,Vt.retired)),lt(void 0),Lt.current.name==="study"&&Lt.current.studyKey===_t.key&&Q({type:"enter",screen:{name:"run",studyId:_t.studyId,runId:yt.runId}});return}if(Date.now()>=In)break;await new Promise(Vt=>setTimeout(Vt,jO))}let we=await n.capabilities.readLaunchLog(Pe.run.logPath);lt(void 0),F({studyKey:_t.key,text:we===""?`${_t.name} started (pid ${Pe.run.pid}) but has not reported in. Check ${Pe.run.logPath}.`:`${_t.name} did not report in. Its log ends:
|
|
286
|
+
`)d.name="enter";else if(n===" ")d.name="tab";else if(n==="\b"||n==="\x1B\b")d.name="backspace",d.meta=n.charAt(0)==="\x1B";else if(n==="\x7F"||n==="\x1B\x7F")d.name="backspace",d.meta=n.charAt(0)==="\x1B";else if(n==="\x1B"||n==="\x1B\x1B")d.name="escape",d.meta=n.length===2;else if(n===" "||n==="\x1B ")d.name="space",d.meta=n.length===2;else if(n.length===1&&n<="")d.name=String.fromCharCode(n.charCodeAt(0)+97-1),d.ctrl=!0;else if(n.length===1&&n>="0"&&n<="9")d.name="number";else if(n.length===1&&n>="a"&&n<="z")d.name=n;else if(n.length===1&&n>="A"&&n<="Z")d.name=n.toLowerCase(),d.shift=!0;else if(i=YU.exec(n))d.name=i[1].toLowerCase(),d.meta=!0,d.shift=/^[A-Z]$/.test(i[1]);else if(i=JU.exec(n)){let m=[...n];m[0]==="\x1B"&&m[1]==="\x1B"&&(d.meta=!0);let B=[i[1],i[2],i[4],i[6]].filter(Boolean).join(""),y=(i[3]||i[5]||1)-1;d.ctrl=!!(y&4),d.meta=d.meta||!!(y&10),d.shift=!!(y&1),d.code=B,d.name=_2[B]??"",d.shift=KU(B)||d.shift,d.ctrl=FU(B)||d.ctrl}return d},"parseKeypress"),G2=ZU;var L2=Ot(Le(),1);var YQ=o(()=>(0,L2.useContext)(uB),"useStdinContext");var WU=o((n,i={})=>{let{setRawMode:u,internal_exitOnCtrlC:c,internal_eventEmitter:d}=YQ();(0,ep.useEffect)(()=>{if(i.isActive!==!1)return u(!0),()=>{u(!1)}},[i.isActive,u]);let m=(0,ep.useEffectEvent)(B=>{let y=G2(B),Q={upArrow:y.name==="up",downArrow:y.name==="down",leftArrow:y.name==="left",rightArrow:y.name==="right",pageDown:y.name==="pagedown",pageUp:y.name==="pageup",home:y.name==="home",end:y.name==="end",return:y.name==="return",escape:y.name==="escape",ctrl:y.ctrl,shift:y.shift,tab:y.name==="tab",backspace:y.name==="backspace",delete:y.name==="delete",meta:y.meta,super:y.super??!1,hyper:y.hyper??!1,capsLock:y.capsLock??!1,numLock:y.numLock??!1,eventType:y.eventType},N;y.isKittyProtocol?y.isPrintable?N=y.text??y.name:y.ctrl&&y.name.length===1?N=y.name:N="":y.ctrl?N=y.name??"":N=y.sequence,!y.isKittyProtocol&&w2.includes(y.name)&&(N=""),N.startsWith("\x1B")&&(N=N.slice(1)),N.length===1&&/[A-Z]/.test(N)&&(Q.shift=!0),!(N==="c"&&Q.ctrl&&c)&&za.discreteUpdates(()=>{n(N,Q)})});(0,ep.useEffect)(()=>{if(i.isActive!==!1)return d.on("input",m),()=>{d.removeListener("input",m)}},[i.isActive,d])},"useInput"),np=WU;var z2=Ot(Le(),1);var Y2=Ot(Le(),1);var PU=o(()=>(0,Y2.useContext)(oB),"useApp"),JQ=PU;var J2=Ot(Le(),1);var $U=o(()=>(0,J2.useContext)(rB),"useStdout"),pB=$U;var tO=Ot(Le(),1);var KQ=Ot(Le(),1);var nO=Ot(Le(),1);var AO=Ot(Le(),1);var CB=Ot(Le(),1);var Ap=Ot(Le(),1);var K2=Ot(Le(),1);var hB=Ot(Le(),1);var aO=/utf-?8/i;function _c(n=process.env){if(process.platform==="win32")return!0;let i=n.LC_ALL??n.LC_CTYPE??n.LANG;return i===void 0||i.trim().length===0?!1:aO.test(i)}o(_c,"terminalRendersUnicode");var iO=new Map([["\u2014","--"],["\u2013","-"],["\u2019","'"],["\u2018","'"],["\u201C",'"'],["\u201D",'"'],["\u2026","..."],["\xB7","-"],["\u276F",">"],["\u2039","<"],["\u25B8",">"],["\u2713","+"],["\u2691","!"],["\u23CE","Enter"],["\u2191","^"],["\u2193","v"],["\u2190","<-"],["\u2192","->"],["\xD7","x"],["\u2248","~"],["\u2717","x"]]);function F2(n,i=process.env){if(_c(i))return n;let u="";for(let c of n){if(c.codePointAt(0)<128){u+=c;continue}u+=iO.get(c)??"?"}return u}o(F2,"forTerminal");var Ze=Ot(Le(),1);var kt={accent:"#93a2ff",ok:"#7dc9a0",warn:"#d9a441",bad:"#e0796b"};var _l=Ot(Aa(),1);function V2({columns:n,connections:i}){let u=[["\u2191 \u2193 \xB7 k j","move the cursor"],["\u23CE \xB7 \u2192","open what the cursor is on, or run the action it names"],["esc \xB7 \u2190","back; it cancels an armed confirmation first"],["g \xB7 G","jump to the top, jump to the bottom"],...i?[["c","connections and provider key setup"]]:[],["?","these keys"],["q","quit; a run you started keeps going without this window"]];return(0,_l.jsxs)(ut,{flexDirection:"column",width:n,children:[(0,_l.jsx)(q,{color:kt.accent,bold:!0,children:"Keys"}),(0,_l.jsx)(ut,{marginTop:1,flexDirection:"column",children:u.map(([c,d])=>(0,_l.jsxs)(ut,{children:[(0,_l.jsx)(ut,{width:16,children:(0,_l.jsx)(q,{bold:!0,children:c})}),(0,_l.jsx)(q,{dimColor:!0,children:d})]},c))}),(0,_l.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,_l.jsx)(q,{dimColor:!0,children:"Starting a run asks twice when it spends money: the first \u23CE arms and"}),(0,_l.jsx)(q,{dimColor:!0,children:"restates the cost, the second commits. A dry run never asks."})]})]})}o(V2,"HelpScreen");var Da=Ot(Le(),1);function uO(n){let i=new Map,u=[];for(let d of n){let m=d.study?.id;if(m===void 0){u.push(d);continue}let B=i.get(m);B===void 0?i.set(m,[d]):B.push(d)}let c=[...i.entries()].map(([d,m])=>{let B=m.filter(y=>y.liveness==="running");return{studyId:d,runs:m.length,live:B.length,...m[0]===void 0?{}:{latest:m[0]},liveRuns:B}});return c.sort((d,m)=>d.live!==m.live?m.live-d.live:yB(m.latest)-yB(d.latest)),{studies:c,unattributed:u}}o(uO,"groupRunsByStudy");function yB(n){if(n===void 0)return 0;for(let i of[n.completedAt,n.updatedAt,n.startedAt]){if(i===void 0)continue;let u=Date.parse(i);if(Number.isFinite(u))return u}return 0}o(yB,"recencyOf");function X2(n,i){let c=(i===void 0?n:n.filter(y=>y.mode===i)).filter(y=>y.liveness==="finished"),d=c.map(y=>y.durationMs).filter(y=>typeof y=="number"&&Number.isFinite(y)&&y>=0).sort((y,Q)=>y-Q),m=c.map(y=>y.estimatedCostUsd).filter(y=>typeof y=="number"&&Number.isFinite(y)).sort((y,Q)=>y-Q),B=c.filter(y=>y.estimatedCostUsd===null||y.estimatedCostUsd===void 0).length;return{sample:c.length,...d.length===0?{}:{medianDurationMs:Z2(d),durationRangeMs:{min:d[0],max:d[d.length-1]}},...m.length===0?{}:{medianCostUsd:Z2(m)},costUnknown:B}}o(X2,"expectationFor");function Z2(n){let i=Math.floor(n.length/2);return n.length%2===1?n[i]:(n[i-1]+n[i])/2}o(Z2,"median");function QB(n){if(n.sample===0)return"no runs yet";let i=[];if(n.durationRangeMs!==void 0){let{min:m,max:B}=n.durationRangeMs;i.push(m===B?wl(m):`${wl(m)}\u2013${wl(B)}`)}n.medianCostUsd!==void 0&&i.push(`~$${n.medianCostUsd.toFixed(2)} median`);let u=`${n.sample} run${n.sample===1?"":"s"}`,c=n.sample>0&&n.costUnknown===n.sample,d=n.costUnknown===0?"":c?", none priced":`, ${n.costUnknown} unpriced`;return i.length===0?c?`${u}, nothing recorded`:`${u}${d}, nothing timed`:`${i.join(" \xB7 ")} \xB7 ${u}${d}`}o(QB,"expectationLine");function SB(n){return n.runs===0?n.declared?"never run":"no runs":n.liveExpectation.sample>0?QB(n.liveExpectation):`${n.runs} ${n.runs===1?"run":"runs"}, none live`}o(SB,"studySummaryLine");function wl(n){let i=Math.max(0,Math.round(n/1e3));if(i<60)return`${i}s`;let u=Math.floor(i/60);if(u<60)return i%60===0?`${u}m`:`${u}m ${i%60}s`;let c=Math.floor(u/60);return u%60===0?`${c}h`:`${c}h ${u%60}m`}o(wl,"formatDuration");function mg(n,i){let u=Math.max(8,Math.floor(i.width)),c=Math.max(1,Math.floor(i.maxLines)),d=n.replace(/\*\*([^*]+)\*\*/g,"$1").replace(/\s*\n+\s*/g," ").replace(/\s{2,}/g," ").trim();if(d==="")return{lines:[],truncated:!1};let m=d.split(" "),B=[],y="",Q=0;for(;Q<m.length;Q+=1){let b=m[Q],O=y===""?b:`${y} ${b}`;if(O.length<=u){y=O;continue}if(y!==""&&B.push(y),y=b.length<=u?b:`${b.slice(0,u-1)}\u2026`,b.length>u&&(B.push(y),y=""),B.length===c)break}B.length<c&&y!==""&&(B.push(y),Q=m.length);let N=Q<m.length;if(N&&B.length>0){let b=B[B.length-1];B[B.length-1]=b.length+1<=u?`${b}\u2026`:`${b.slice(0,u-1)}\u2026`}return{lines:B,truncated:N}}o(mg,"normalizeThought");function Xr(n){let i=Math.max(0,Math.floor(n.total)),u=Math.max(1,Math.floor(n.viewport));if(i<=u)return{start:0,end:i};let c=Math.min(Math.max(0,Math.floor(n.selected)),i-1),d=Math.min(Math.max(0,Math.floor(n.margin??1)),Math.floor((u-1)/2)),m=Math.min(Math.max(0,c-d),i-u);return c>=m+u-d&&(m=Math.min(c-u+1+d,i-u)),m=Math.max(0,Math.min(m,i-u)),{start:m,end:m+u}}o(Xr,"listWindow");function W2(n){return(n.split("/").pop()??n).replace(/\.(ya?ml)$/i,"")}o(W2,"studyNameFromPath");function P2(n,i){let{studies:u,unattributed:c}=uO(i),d=new Map(u.map(O=>[O.studyId,O])),m=new Map;for(let O of i){let x=O.study?.id;if(x===void 0)continue;let L=m.get(x);L===void 0?m.set(x,[O]):L.push(O)}let B=new Map;for(let O of n)B.set(O.id,(B.get(O.id)??0)+1);let y=o((O,x,L)=>{let j=d.get(O),k=x?.path;return{key:k??`id:${O}`,studyId:O,name:k===void 0?O:W2(k),...x?.title===void 0?{}:{title:x.title},...k===void 0?{}:{path:k},...x?.origin===void 0?{}:{origin:x.origin},declared:L,label:x?.title??(k===void 0?O:W2(k)),...x?.description===void 0?{}:{description:x.description},sharesIdWith:Math.max(0,(B.get(O)??0)-1),runs:j?.runs??0,live:j?.live??0,...j?.latest===void 0?{}:{latest:j.latest},liveRuns:j?.liveRuns??[],expectation:X2(m.get(O)??[]),liveExpectation:X2(m.get(O)??[],"live")}},"build"),Q=new Set(n.map(O=>O.id)),N=[...n.map(O=>y(O.id,O,!0)),...u.filter(O=>!Q.has(O.studyId)).map(O=>y(O.studyId,void 0,!1))];rO(N);let b=o(O=>O.label,"label");return N.sort((O,x)=>{if(O.live!==x.live)return x.live-O.live;let L=o(k=>k.runs>0?0:k.declared?1:2,"rank");if(L(O)!==L(x))return L(O)-L(x);if(O.runs>0&&x.runs>0){let k=yB(x.latest)-yB(O.latest);if(k!==0)return k}let j=b(O).localeCompare(b(x));return j!==0?j:O.key.localeCompare(x.key)}),{rows:N,unattributed:c}}o(P2,"studyRows");function rO(n){let i=o(d=>{let m=new Map;for(let B of d)m.set(B,(m.get(B)??0)+1);return m},"count"),u=i(n.map(d=>d.title??d.name)),c=i(n.map(d=>d.name));for(let d of n){let m=d.title??d.name;if((u.get(m)??0)===1){d.label=m;continue}d.label=(c.get(d.name)??0)===1?d.name:d.path??d.name}}o(rO,"assignLabels");function Xo(n,i){let u=Math.max(4,Math.floor(i));return n.length<=u?n:`${n.slice(0,u-1)}\u2026`}o(Xo,"fitLabelToWidth");function Mn(n){return n===void 0?{}:{color:n}}o(Mn,"color");import $2 from"node:path";var cO=$2.join(".humanish","runs"),Y9=$2.join(cO,"latest.json");var fO=5e3,l7=fO*3;var dO={running:"running",interrupted:"interrupted",passed:"passed",failed:"failed",blocked:"blocked",timed_out:"timed out",no_verdict:"no verdict",dry_run:"dry run",unknown:"unknown"},gO={running:"live",interrupted:"warn",passed:"pass",failed:"fail",blocked:"warn",timed_out:"warn",no_verdict:"warn",dry_run:"neutral",unknown:"neutral"};function Zr(n,i){return{state:n,label:dO[n],tone:gO[n],...i===void 0?{}:{reason:i}}}o(Zr,"shown");function Wr(n){if(n.liveness==="running")return Zr("running");if(n.liveness==="interrupted")return Zr("interrupted");let i=n.ok===!1&&n.failure!==void 0?`${n.failure.kind}: ${n.failure.message}`:void 0;return n.verdict==="blocked"?Zr("blocked",i):n.verdict==="timed_out"?Zr("timed_out",i):n.verdict==="fail"||n.ok===!1?Zr("failed",i):n.verdict==="pass"?Zr("passed"):n.verdict==="contract_proof_only"?Zr(n.mode==="dry-run"?"dry_run":"no_verdict"):Zr("unknown")}o(Wr,"runDisplay");var mo=Ot(Aa(),1),EO=96;function ap(n){return Math.max(20,Math.min(EO,n))}o(ap,"contentWidth");function tN({columns:n,context:i,breadcrumb:u,hints:c,children:d}){let m=ap(n);return(0,mo.jsxs)(ut,{flexDirection:"column",width:m,children:[(0,mo.jsxs)(ut,{width:m,children:[(0,mo.jsx)(q,{bold:!0,children:"human(ish)"}),(0,mo.jsx)(ut,{flexGrow:1}),i===void 0?null:(0,mo.jsx)(q,{dimColor:!0,wrap:"truncate-start",children:i})]}),u===void 0?null:(0,mo.jsx)(q,{dimColor:!0,wrap:"truncate-start",children:u}),(0,mo.jsx)(ut,{marginTop:1,flexDirection:"column",children:d}),(0,mo.jsx)(ut,{marginTop:1,children:(0,mo.jsx)(q,{dimColor:!0,children:c})})]})}o(tN,"Frame");var kQ=_c()?["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]:["|","/","-","\\","|","/","-","\\","|","/"];function ip(n){return kQ[Math.abs(Math.floor(n))%kQ.length]??kQ[0]}o(ip,"spinnerFrame");function yi(n){return n?_c()?"\u276F":">":" "}o(yi,"gutter");function lp(n){let{state:i,tone:u}=Wr(n);if(i==="running")return ip(n.tick??0);let c=_c();return u==="pass"?c?"\u2713":"+":u==="fail"||u==="warn"?c?"\u2691":"!":c?"\xB7":"-"}o(lp,"verdictGlyph");var mO={live:kt.ok,fail:kt.bad,warn:kt.warn,pass:void 0,neutral:void 0},pg=o(n=>Mn(mO[Wr(n).tone]),"glyphColor");var vB=Ot(Le(),1);function DB(){let{stdout:n}=pB(),i=o(()=>({columns:Math.max(20,n.columns||80),rows:Math.max(6,n.rows||24)}),"read"),[u,c]=(0,vB.useState)(i);return(0,vB.useEffect)(()=>{let d=o(()=>{c(B=>{let y=i();return y.columns===B.columns&&y.rows===B.rows?B:y})},"update");n.on("resize",d);let m=setTimeout(d,0);return()=>{n.off("resize",d),clearTimeout(m)}},[n]),u}o(DB,"useTerminalSize");var ht=Ot(Aa(),1),pO=400;function eN({capabilities:n,columns:i,notice:u,onBack:c,onKeyEntry:d}){let[m,B]=(0,Da.useState)(),[y,Q]=(0,Da.useState)(u),[N,b]=(0,Da.useState)(!1),[O,x]=(0,Da.useState)("home"),L=(0,Da.useRef)(!1),[j,k]=(0,Da.useState)(!0),[F,gt]=(0,Da.useState)(0),[lt,Pt]=(0,Da.useState)({kind:"home"}),[Dt,ue]=(0,Da.useState)(),[se,fe]=(0,Da.useState)([]),[Tt,Ct]=(0,Da.useState)([]),{rows:qt}=DB(),ie=(0,Da.useCallback)(async()=>{k(!0);try{let xt=await n.read();B(xt),ue(xt.authentication)}catch{B(void 0),Q("Could not read connection setup. Recheck to try again.")}finally{k(!1)}},[n]);(0,Da.useEffect)(()=>{ie()},[ie]);let Gt=m?.connections.some(xt=>xt.name==="agentmail"&&xt.apiKeyEnv==="AGENTMAIL_API_KEY"),Fe=m?.credential.source,ve=Fe==="process env"?"session environment":Fe?.includes("provider.env")?"project env file":"saved key",st=!!n.studies&&!!n.configure,Rt=Tt.filter(xt=>xt.status!=="closed"||xt.unresolvedCount>0),Wt=j?[]:[...m?.ok?[{id:"key",label:m.credential.stored?"Replace stored key":"Add API key"},...m.credential.present&&!Gt?[{id:"save",label:"Use this key for this project"}]:[],...m.credential.present&&Gt&&n.check?[{id:"check",label:"Test authentication (read-only)"}]:[],...m.credential.present&&Gt&&st?[{id:"studies",label:"Use real email in a study"}]:[]]:[],...n.recovery?[{id:"recovery",label:"Review inbox cleanup"}]:[],{id:"read",label:"Recheck local setup"}],Nt=lt.kind==="home"?Wt:lt.kind==="check"?[{id:"check",label:"Check again"},{id:"home",label:"Back to Connections"}]:lt.kind==="studies"?se.map((xt,_e)=>({id:`study-${_e}`,label:xt.title})):lt.kind==="preview"?[{id:"apply",label:"Save study copy"},{id:"studies",label:"Cancel"}]:lt.kind==="saved"?[{id:"home",label:"Back to Connections"}]:lt.kind==="recovery"?Rt.map((xt,_e)=>({id:`recovery-${_e}`,label:`${xt.runId} \xB7 ${xt.unresolvedCount} pending`})):[...lt.entry.activeOwner===!1&<.entry.unresolvedCount>0&&n.recover?[{id:"recover",label:"Release study inboxes"}]:[],{id:"recovery",label:"Back to cleanup"}],jt=Math.min(F,Math.max(0,Nt.length-1));function De(xt){Pt(xt),gt(0),Q(void 0)}o(De,"go");function dn(){lt.kind==="home"?c():De({kind:lt.kind==="preview"?"studies":lt.kind==="recover"?"recovery":"home"})}o(dn,"back");async function et(xt){if(!L.current){L.current=!0,x(lt.kind),b(!0);try{await xt()}catch{Q("The action could not complete. Recheck before retrying.")}finally{L.current=!1,b(!1)}}}o(et,"run"),np((xt,_e)=>{if(L.current||j)return;if(_e.escape||_e.leftArrow){dn();return}if(_e.upArrow||xt==="k"){gt(Lt=>Math.max(0,Lt-1));return}if(_e.downArrow||xt==="j"){gt(Lt=>Math.min(Math.max(0,Nt.length-1),Lt+1));return}if(!_e.return)return;let le=Nt[jt]?.id;if(le){if(le==="key"){d();return}if(le==="home"){De({kind:"home"});return}(le==="apply"&<.kind==="preview"||le==="recover"&<.kind==="recover")&&Date.now()-lt.openedAt<pO||et(async()=>{if(le==="read"||le==="save"){le==="save"&&Q((await n.save()).message),ue(void 0),await ie(),gt(0);return}if(le==="check"&&n.check){De({kind:"check"}),ue(void 0),ue(await n.check());return}if(le==="studies"&&n.studies){let Lt=await n.studies();fe(Lt),De({kind:"studies"});return}if(le.startsWith("study-")&&n.configure){let Lt=se[jt];if(!Lt)return;let It=await n.configure(Lt.path,!1);if(!It.ok||!It.path||!It.planToken){Q(It.message);return}De({kind:"preview",study:Lt,plan:It,openedAt:Date.now()});return}if(le==="apply"&<.kind==="preview"&&n.configure&<.plan.planToken){let Lt=await n.configure(lt.study.path,!0,lt.plan.planToken);if(!Lt.ok||!Lt.applied||!Lt.path){De({kind:"studies"}),Q(Lt.message);return}De({kind:"saved",path:Lt.path});return}if(le==="recovery"&&n.recovery){Ct(await n.recovery()),De({kind:"recovery"});return}if(le.startsWith("recovery-")){let Lt=Rt[jt];Lt&&De({kind:"recover",entry:Lt,openedAt:Date.now()});return}if(le==="recover"&<.kind==="recover"&&n.recover&&n.recovery&<.entry.activeOwner===!1){let Lt=await n.recover(lt.entry.runId,lt.entry.connectionName);Ct(await n.recovery()),De({kind:"recovery"}),Q(Lt.message)}})}});let Mt=Xr({total:Nt.length,selected:jt,viewport:lt.kind==="studies"||lt.kind==="recovery"?Math.max(2,qt-14):Nt.length}),te=(0,ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[Mt.start>0?(0,ht.jsxs)(q,{dimColor:!0,children:["\u2191 ",Mt.start," more"]}):null,Nt.slice(Mt.start,Mt.end).map((xt,_e)=>{let le=Mt.start+_e;return(0,ht.jsxs)(q,{bold:le===jt,...Mn(le===jt?kt.accent:void 0),children:[yi(le===jt)," ",Xo(xt.label,i-3),N&&O===lt.kind&&le===jt?"\u2026":""]},xt.id)}),Mt.end<Nt.length?(0,ht.jsxs)(q,{dimColor:!0,children:["\u2193 ",Nt.length-Mt.end," more"]}):null]});return(0,ht.jsxs)(ut,{flexDirection:"column",width:i,children:[lt.kind==="home"?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.accent,children:"AgentMail \xB7 hosted email"}),(0,ht.jsxs)(q,{children:["Connection:"," ",j?"checking\u2026":m?.ok?Gt?"agentmail \xB7 saved":"not saved for this project":"unavailable"]}),(0,ht.jsxs)(q,{children:["Key:"," ",m?m.credential.present?`present \xB7 ${ve}`:"missing":"checking\u2026"]}),(0,ht.jsxs)(q,{dimColor:!0,children:["Provider authentication:"," ",Dt?.authenticated===!0?"passed":Dt?.authenticated===!1?"rejected":Dt?"unknown":"not checked"]}),m?.ok===!1?(0,ht.jsx)(q,{color:kt.bad,children:m.message}):null,m?.credential.explicitlyEmpty?(0,ht.jsx)(q,{color:kt.warn,children:"An empty AGENTMAIL_API_KEY overrides the stored key. Unset it and reopen the TUI."}):m?.credential.strict&&!m.credential.present?(0,ht.jsx)(q,{color:kt.warn,children:"Strict key mode ignores saved keys. Reopen without HUMANISH_STRICT_KEYS=1, or pass an env file."}):(Fe==="process env"||Fe?.includes("provider.env"))&&m?.credential.stored?(0,ht.jsx)(q,{dimColor:!0,children:"Env and project keys take precedence over your saved key."}):null,te,y?(0,ht.jsx)(ut,{marginTop:1,children:(0,ht.jsx)(q,{children:y})}):null,(0,ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,ht.jsx)(q,{dimColor:!0,children:"Get a key: https://console.agentmail.to"}),(0,ht.jsx)(q,{dimColor:!0,children:"Key entry is hidden. Saved keys apply to all your projects."}),st?(0,ht.jsx)(q,{dimColor:!0,children:"Fresh inbox per participant \xB7 hosted email"}):(0,ht.jsx)(q,{color:kt.warn,children:"Email receiving in studies is not available yet."}),(0,ht.jsx)(q,{dimColor:!0,children:"Local capture: per study \xB7 SMS: unavailable"})]})]}):lt.kind==="check"?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.accent,children:"Authentication check"}),N&&!Dt?(0,ht.jsx)(q,{children:"Contacting AgentMail\u2026"}):Dt?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsxs)(q,{children:["Credential: ",Dt.credentialPresent?"present":"missing"]}),(0,ht.jsxs)(q,{children:["Authentication:"," ",Dt.authenticated===!0?"passed":Dt.authenticated===!1?"rejected":"unknown"]}),(0,ht.jsxs)(q,{dimColor:!0,children:["Inbox permissions: ",Dt.permissions]}),(0,ht.jsxs)(q,{dimColor:!0,children:["Capacity: ",Dt.capacity," \xB7 delivery: untested"]}),(0,ht.jsx)(ut,{marginTop:1,children:(0,ht.jsx)(q,{children:Dt.message})}),Dt.checkedAt?(0,ht.jsxs)(q,{dimColor:!0,children:["Checked: ",Dt.checkedAt]}):null]}):(0,ht.jsx)(q,{children:"Authentication is unknown."}),te]}):lt.kind==="studies"?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.accent,children:"Choose a study for real email"}),(0,ht.jsx)(q,{dimColor:!0,children:"Preview a local copy before saving."}),se.length?te:(0,ht.jsx)(q,{children:"No studies are available in this project."}),se[jt]?(0,ht.jsx)(ut,{marginTop:1,children:(0,ht.jsx)(q,{dimColor:!0,children:se[jt].path})}):null]}):lt.kind==="preview"?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.accent,children:"Save email-enabled study"}),(0,ht.jsxs)(q,{dimColor:!0,children:["From: ",lt.study.path]}),(0,ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,ht.jsx)(q,{children:"Save as:"}),(0,ht.jsx)(q,{children:lt.plan.path})]}),(0,ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,ht.jsx)(q,{children:"Fresh inbox for each participant."}),(0,ht.jsx)(q,{children:"Mail is hosted. Models may see content."}),(0,ht.jsx)(q,{children:"Recordings remain restricted for sharing."}),(0,ht.jsx)(q,{children:"Provider charges are separate."})]}),te]}):lt.kind==="saved"?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.ok,children:"Email study saved"}),(0,ht.jsx)(q,{children:lt.path}),(0,ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,ht.jsx)(q,{children:"Select this study from Studies to start."}),(0,ht.jsx)(q,{dimColor:!0,children:"Or run this exact path:"}),(0,ht.jsxs)(q,{children:["humanish run ",lt.path]})]}),te]}):lt.kind==="recovery"?(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.accent,children:"Inbox cleanup"}),(0,ht.jsx)(q,{dimColor:!0,children:"Study completion and inbox cleanup are separate."}),Rt.length?te:(0,ht.jsx)(q,{children:"No pending inbox cleanup."}),Rt[jt]?(0,ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,ht.jsx)(q,{children:Rt[jt].runId}),(0,ht.jsxs)(q,{dimColor:!0,children:["Connection: ",Rt[jt].connectionName]})]}):null]}):(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{bold:!0,color:kt.accent,children:"Review inbox cleanup"}),(0,ht.jsx)(q,{children:lt.entry.runId}),(0,ht.jsxs)(q,{children:["Connection: ",lt.entry.connectionName]}),(0,ht.jsxs)(q,{children:[lt.entry.unresolvedCount," pending \xB7 ",lt.entry.participantCount," participants"]}),(0,ht.jsx)(ut,{marginTop:1,flexDirection:"column",children:lt.entry.activeOwner===!0?(0,ht.jsx)(q,{color:kt.warn,children:"This run has an active owner. Cleanup is unavailable while it is running."}):lt.entry.activeOwner===null?(0,ht.jsx)(q,{color:kt.warn,children:"Ownership is unknown. Cleanup is unavailable until ownership can be verified."}):(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)(q,{children:"Release this study\u2019s owned inboxes."}),(0,ht.jsx)(q,{dimColor:!0,children:"An uncertain creation may be replayed, then released. Other inboxes are untouched."})]})}),te]}),lt.kind!=="home"&&y?(0,ht.jsx)(ut,{marginTop:1,children:(0,ht.jsx)(q,{color:kt.warn,children:y})}):null,lt.kind!=="home"&&N&&O===lt.kind?(0,ht.jsx)(q,{dimColor:!0,children:"Working\u2026"}):null]})}o(eN,"ConnectionsScreen");import Cg from"node:path";var L7=[{relativeDir:Cg.join("humanish","studies"),origin:"committed",family:"studies"},{relativeDir:Cg.join(".humanish","studies"),origin:"ignored",family:"studies"},{relativeDir:Cg.join(".humanish","local","studies"),origin:"ignored",family:"studies"},{relativeDir:Cg.join("humanish","labs"),origin:"committed",family:"labs"},{relativeDir:Cg.join(".humanish","labs"),origin:"ignored",family:"labs"},{relativeDir:Cg.join(".humanish","local","labs"),origin:"ignored",family:"labs"}],CO=[".yaml",".yml"];function nN(n){let i=CO.find(u=>n.endsWith(u));return i===void 0?void 0:n.slice(0,-i.length)}o(nN,"studyFileStem");function qQ(n){switch(n.name){case"studies":return"studies";case"all-runs":return"all-runs";case"study":return`study:${n.studyKey}`;default:return`run:${n.runId}`}}o(qQ,"screenKey");function AN(){return{stack:[{name:"studies"}],selection:{},quit:!1}}o(AN,"initialNav");function op(n){return n.stack[n.stack.length-1]??{name:"studies"}}o(op,"currentScreen");function aN(n){return n.selection[qQ(op(n))]??0}o(aN,"selectedIndex");function iN(n,i){switch(i.type){case"enter":return{...n,stack:[...n.stack,i.screen]};case"back":return n.stack.length<=1?{...n,quit:!0}:{...n,stack:n.stack.slice(0,-1)};case"move":{if(i.total<=0)return n;let u=qQ(op(n)),c=n.selection[u]??0,d=Math.min(Math.max(0,c+i.delta),i.total-1);return d===c?n:{...n,selection:{...n.selection,[u]:d}}}case"select":{if(i.total<=0)return n;let u=qQ(op(n)),c=Math.min(Math.max(0,i.index),i.total-1);return{...n,selection:{...n.selection,[u]:c}}}default:return{...n,quit:!0}}}o(iN,"navigate");function hO(n,i){if(n==null)return{run:null,analysis:null,total:null};let u={usd:typeof n.estimatedTotalUsd=="number"?n.estimatedTotalUsd:null,complete:n.fullyEstimated===void 0?null:n.fullyEstimated,ratesAsOf:n.ratesAsOf??null,placeholder:n.placeholder===!0},c=i??null,d=[u.usd,c?.estimatedUsd].filter(B=>typeof B=="number");if(d.length===0)return{run:u,analysis:c,total:null};let m=u.usd===null||u.complete===!1||c?.complete===!1;return{run:u,analysis:c,total:{usd:BO(d.reduce((B,y)=>B+y,0)),complete:m?!1:u.complete}}}o(hO,"runCost");function hg(n){return hO({estimatedTotalUsd:n.estimatedCostUsd??null,...n.estimatedCostComplete===void 0?{}:{fullyEstimated:n.estimatedCostComplete}},n.analysisCost)}o(hg,"indexedRunCost");function BO(n){return Math.round(n*1e6)/1e6}o(BO,"round6");function IO(n){return n===1?"analysis":`${n} analyses`}o(IO,"analysesNoun");function RB(n){if(n.run===null)return;let i=n.total===null?"cost not estimated":`~$${n.total.usd.toFixed(2)} est.${n.total.complete===!1?" plus unpriced usage":""}`;return n.analysis===null?i:`${i}, with ${IO(n.analysis.requests)}`}o(RB,"runCostLabel");var bn=Ot(Aa(),1);function uN({runs:n,details:i,labels:u,expected:c,selected:d,columns:m,viewport:B,tick:y,now:Q}){if(n.length===0)return(0,bn.jsxs)(ut,{flexDirection:"column",children:[(0,bn.jsx)(q,{children:"No one is working right now."}),(0,bn.jsx)(q,{dimColor:!0,children:"Start a run from any study and it appears here."})]});let N=Xr({total:n.length,selected:d,viewport:Math.max(2,B-6)}),b=n[Math.min(Math.max(0,d),n.length-1)],O=b===void 0?void 0:i.get(b.runId),x=O?.participants[0],L=x?.thought===void 0?void 0:mg(x.thought.text,{width:Math.max(16,m-2),maxLines:2});return(0,bn.jsxs)(ut,{flexDirection:"column",children:[n.slice(N.start,N.end).map((j,k)=>(0,bn.jsx)(yO,{run:j,who:lN(i.get(j.runId))??"starting\u2026",study:u.get(j.runId)??j.study?.id??"",expectedMs:c.get(j.study?.id??""),active:N.start+k===d,columns:m,tick:y,now:Q},j.runId)),L===void 0?null:(0,bn.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[L.lines.map((j,k)=>(0,bn.jsxs)(ut,{width:m,children:[(0,bn.jsx)(ut,{width:2,flexShrink:0,children:(0,bn.jsx)(q,{color:kt.accent,children:"\u258C"})}),(0,bn.jsxs)(q,{dimColor:!0,wrap:"truncate-end",children:[k===0?`"${j}`:j,k===L.lines.length-1?'"':""]})]},k)),(0,bn.jsxs)(ut,{width:m,children:[(0,bn.jsx)(ut,{width:2,flexShrink:0,children:(0,bn.jsx)(q,{children:" "})}),(0,bn.jsx)(q,{dimColor:!0,wrap:"truncate-end",children:Xo([lN(O),u.get(b?.runId??"")].filter(Boolean).join(" \xB7 "),Math.max(10,m-2))})]})]}),(0,bn.jsx)(ut,{marginTop:1,children:(0,bn.jsx)(q,{dimColor:!0,children:QO(n,i)})}),(0,bn.jsx)(q,{dimColor:!0,children:"Run + analysis costs: humanish stats"})]})}o(uN,"AllRunsScreen");function lN(n){let i=n?.participants[0];return i?.personaId??i?.label}o(lN,"personaOf");function yO({run:n,who:i,study:u,expectedMs:c,active:d,columns:m,tick:B,now:y}){let Q=n.startedAt===void 0?Number.NaN:Date.parse(n.startedAt),N=Number.isFinite(Q)?oN(y-Q):"",b=c===void 0?N:`${N} / ~${oN(c)}`,O=Math.max(10,Math.floor((m-b.length-6)*.5)),x=Math.max(8,m-b.length-O-6);return(0,bn.jsxs)(ut,{width:m,children:[(0,bn.jsxs)(q,{...Mn(d?kt.accent:void 0),bold:d,children:[yi(d)," "]}),(0,bn.jsxs)(q,{color:kt.ok,children:[ip(B)," "]}),(0,bn.jsx)(ut,{width:O,children:(0,bn.jsx)(q,{...Mn(d?kt.accent:void 0),bold:d,wrap:"truncate-end",children:Xo(i,O)})}),(0,bn.jsx)(ut,{width:x,children:(0,bn.jsx)(q,{dimColor:!0,wrap:"truncate-end",children:Xo(u,x)})}),(0,bn.jsx)(ut,{flexGrow:1}),(0,bn.jsx)(q,{dimColor:!0,children:b})]})}o(yO,"RunRow");function QO(n,i){let u=0,c=0,d=0;for(let Q of n){let N=Q.estimatedCostUsd===void 0?i.get(Q.runId)?.participants[0]?.estimatedCostUsd:hg(Q).total?.usd;d+=Q.analysisCost?.requests??0,typeof N=="number"&&(u+=N,c+=1)}if(c===0)return"no spend recorded yet; a live run prices itself as it goes";let m=n.length-c,B=m===0?"":` \xB7 ${m} not priced yet`,y=d===0?"":` \xB7 with ${d===1?"1 analysis":`${d} analyses`}`;return`run spend ~$${u.toFixed(2)} across ${c} of ${n.length}${B}${y}`}o(QO,"spendLine");function oN(n){if(!Number.isFinite(n)||n<0)return"0:00";let i=Math.floor(n/1e3),u=Math.floor(i/60);return u<60?`${u}:${String(i%60).padStart(2,"0")}`:wl(n)}o(oN,"clockOf");var Ht=Ot(Aa(),1);function NB(n,i){return[...i?[{kind:"start",mode:"dry-run"},{kind:"start",mode:"live"}]:[],...n.map(c=>({kind:"run",run:c}))]}o(NB,"studyItems");function cN(n){let{row:i,summary:u,runs:c,selected:d,columns:m,viewport:B,now:y,tick:Q,canStart:N}=n,b=NB(c,N);return(0,Ht.jsxs)(ut,{flexDirection:"column",children:[u?.description===void 0?null:(0,Ht.jsx)(q,{wrap:"truncate-end",children:wO(u.description)}),u?.subject===void 0?null:(0,Ht.jsx)(q,{dimColor:!0,wrap:"truncate-end",children:[u.subject,u.participants,u.model,u.reasoningEffort===void 0?void 0:`${u.reasoningEffort} effort`].filter(Boolean).join(" \xB7 ")}),(0,Ht.jsxs)(ut,{width:m,children:[(0,Ht.jsxs)(q,{dimColor:!0,wrap:"truncate-end",children:[SB(i),_O(u)]}),(0,Ht.jsx)(ut,{flexGrow:1}),u?.planRefusal!==void 0?(0,Ht.jsx)(q,{...Mn(kt.warn),children:"refused \u2717"}):u?.keysReady===void 0?null:(0,Ht.jsx)(q,{...Mn(u.keysReady?kt.ok:kt.warn),children:u.keysReady?"keys \u2713":"keys \u2717"})]}),u?.analysis===void 0?null:(0,Ht.jsx)(q,{wrap:"wrap",children:u.analysis.provider==="codex"?`After live runs: Codex account analyst \xB7 ${u.analysis.model} \xB7 remote inference \xB7 account limits apply; dollar cost unknown`:`After live runs: analysis \xB7 ${u.analysis.model} \xB7 separate $${u.analysis.maxCostUsd} admission estimate limit \xB7 not a billing cap`}),u?.runtime?(0,Ht.jsx)(q,{color:u.runtime.ok?kt.ok:kt.warn,children:u.runtime.message}):null,u?.participantReadiness?(0,Ht.jsx)(q,{color:u.participantReadiness.ok?kt.ok:kt.warn,children:u.participantReadiness.message}):null,u?.communications?(0,Ht.jsx)(q,{color:kt.warn,children:u.communications}):null,u?.planRefusal===void 0?null:(0,Ht.jsx)(ut,{width:m,children:(0,Ht.jsxs)(q,{wrap:"wrap",...Mn(kt.warn),children:["A live run is refused: ",u.planRefusal]})}),u?.keysReady===!1?(0,Ht.jsxs)(ut,{flexDirection:"column",width:m,children:[(0,Ht.jsxs)(q,{...Mn(kt.warn),children:[u.missingKeys?.join(", ")," not found"]}),(0,Ht.jsxs)(q,{dimColor:!0,children:[" ","humanish keys set openai"," ","\xB7 stores them for every project"]}),(0,Ht.jsxs)(q,{dimColor:!0,children:[" ","humanish tui --env-file .env"," ","\xB7 or just this session"]})]}):null,n.launchNote===void 0?null:(0,Ht.jsx)(ut,{marginTop:1,children:(0,Ht.jsx)(q,{dimColor:!0,children:n.launchNote})}),n.launchError===void 0?null:(0,Ht.jsx)(ut,{marginTop:1,children:(0,Ht.jsx)(q,{color:kt.bad,children:n.launchError})}),N?(0,Ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,Ht.jsx)(vO,{...n,active:SO(b,d)}),n.confirming==="live"?(0,Ht.jsx)(ut,{marginTop:1,children:(0,Ht.jsxs)(q,{color:kt.warn,children:[" ","start a live run? ",QB(n.row.liveExpectation),u?.analysis?u.analysis.provider==="codex"?" + Codex account analysis (remote inference; account limits apply, dollar cost unknown)":` + analysis ($${u.analysis.maxCostUsd} admission estimate limit, separate from participant spend)`:""," ","\xB7 \u23CE confirm \xB7 esc cancel"]})}):null]}):null,i.declared?null:(0,Ht.jsx)(ut,{marginTop:1,children:(0,Ht.jsx)(q,{color:kt.warn,children:n.retired??"no manifest here: renamed, deleted, or run from elsewhere"})}),i.sharesIdWith>0?(0,Ht.jsxs)(q,{color:kt.warn,children:[i.sharesIdWith+1,' manifests declare "',i.studyId,'": these runs are shared between them']}):null,(0,Ht.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,Ht.jsx)(q,{dimColor:!0,children:"Runs"}),n.liveDetail?.automaticAnalysis===void 0?null:(0,Ht.jsxs)(q,{children:["Latest analysis: ",n.liveDetail.automaticAnalysis.state," \xB7 open run for details"]}),c.length===0?(0,Ht.jsx)(q,{dimColor:!0,children:" none yet"}):(0,Ht.jsx)(NO,{runs:c,liveDetail:n.liveDetail,selected:d-NB([],N).length,columns:m,viewport:Math.max(2,B-6),now:y,tick:Q,expectedMs:i.liveExpectation.medianDurationMs})]})]})}o(cN,"StudyScreen");function SO(n,i){let u=n[i];return u?.kind==="start"?u.mode:void 0}o(SO,"activeStart");function vO(n){let i=DO(n.columns,n.row,n.summary);return(0,Ht.jsxs)(Ht.Fragment,{children:[(0,Ht.jsx)(rN,{...n,mode:"dry-run",active:n.active==="dry-run",stacked:i}),(0,Ht.jsx)(rN,{...n,mode:"live",active:n.active==="live",stacked:i})]})}o(vO,"StartRows");function rN({mode:n,active:i,stacked:u,columns:c,row:d,summary:m}){let{label:B,value:y,blocked:Q}=dN(n,d,m),N=n==="live"?kt.warn:kt.accent,b=(0,Ht.jsxs)(q,{...Mn(i?N:void 0),bold:i,dimColor:Q&&!i,children:[yi(i)," ",B]}),O=(0,Ht.jsx)(q,{dimColor:!Q,...Mn(Q?kt.warn:void 0),children:y});return u?(0,Ht.jsxs)(ut,{flexDirection:"column",width:c,children:[b,(0,Ht.jsx)(ut,{marginLeft:4,children:O})]}):(0,Ht.jsxs)(ut,{width:c,children:[(0,Ht.jsx)(ut,{flexShrink:0,children:b}),(0,Ht.jsx)(ut,{flexGrow:1,minWidth:fN}),O]})}o(rN,"StartRow");var fN=2;function dN(n,i,u){if(n==="dry-run")return{label:"Start a dry run",value:"free \xB7 no keys, no spend",blocked:!1};let c=u?.planRefusal!==void 0||u?.keysReady===!1||u?.runtime?.ok===!1||u?.participantReadiness?.ok===!1,d=QB(i.liveExpectation);return{label:"Start a live run",value:c?`${d} \xB7 ${RO(u)}`:d,blocked:c}}o(dN,"startRowText");function DO(n,i,u){return["dry-run","live"].some(c=>{let{label:d,value:m}=dN(c,i,u);return 2+[...d].length+fN+[...m].length>n})}o(DO,"startRowsStack");function RO(n){return n?.planRefusal!==void 0?"refused":n?.keysReady===!1?"needs keys":n?.runtime?.ok===!1?"needs runtime setup":"needs Codex login"}o(RO,"blocker");function NO({runs:n,liveDetail:i,selected:u,columns:c,viewport:d,now:m,tick:B,expectedMs:y}){let Q=Xr({total:n.length,selected:u,viewport:d});return(0,Ht.jsxs)(ut,{flexDirection:"column",children:[Q.start>0?(0,Ht.jsx)(q,{dimColor:!0,children:` \u2191 ${Q.start} more`}):null,n.slice(Q.start,Q.end).map((N,b)=>N.liveness==="running"?(0,Ht.jsx)(xO,{run:N,detail:i,active:Q.start+b===u,columns:c,now:m,tick:B,expectedMs:y},N.runId):(0,Ht.jsx)(bO,{run:N,active:Q.start+b===u,columns:c},N.runId)),Q.end<n.length?(0,Ht.jsx)(q,{dimColor:!0,children:` \u2193 ${n.length-Q.end} more`}):null]})}o(NO,"RunList");function xO({run:n,detail:i,active:u,columns:c,now:d,tick:m,expectedMs:B}){let y=i?.participants[0],Q=n.startedAt===void 0?Number.NaN:Date.parse(n.startedAt),N=Number.isFinite(Q)?sN(d-Q):void 0,b=B===void 0?"":` of ~${sN(B)}`,O=y?.thought===void 0?void 0:mg(y.thought.text,{width:Math.max(16,c-6),maxLines:3});return(0,Ht.jsxs)(ut,{flexDirection:"column",children:[(0,Ht.jsxs)(ut,{width:c,children:[(0,Ht.jsx)(ut,{flexShrink:0,children:(0,Ht.jsxs)(q,{...Mn(u?kt.accent:void 0),bold:u,children:[yi(u)," "]})}),(0,Ht.jsx)(ut,{flexShrink:0,children:(0,Ht.jsxs)(q,{color:kt.ok,children:[lp({liveness:"running",tick:m})," "]})}),(0,Ht.jsx)(q,{...Mn(u?kt.accent:void 0),bold:u,wrap:"truncate-end",children:y?.personaId??y?.label??"starting\u2026"}),(0,Ht.jsx)(ut,{flexGrow:1}),(0,Ht.jsx)(q,{dimColor:!0,children:N===void 0?"":`${N}${b}`})]}),O===void 0?null:(0,Ht.jsx)(ut,{flexDirection:"column",marginLeft:4,children:O.lines.map((x,L)=>(0,Ht.jsxs)(q,{dimColor:L>0,children:[L===0?`"${x}`:x,L===O.lines.length-1?'"':""]},L))}),y===void 0?null:(0,Ht.jsx)(ut,{width:c,children:(0,Ht.jsxs)(q,{dimColor:!0,children:[" ",TO(y)]})})]})}o(xO,"LiveRun");function TO(n){let i=[];return n.actions!==void 0&&i.push(`${n.actions} actions`),n.thoughts!==void 0&&i.push(`${n.thoughts} thoughts`),n.turns!==void 0&&i.push(`${n.turns} turns`),i.length===0?"working\u2026":i.join(" \xB7 ")}o(TO,"activityLine");function bO({run:n,active:i,columns:u}){let c=MO(n.completedAt??n.startedAt),d=Wr(n),m=d.state==="passed"?"":` \xB7 ${d.label}`,B=n.participants===void 0?d.state==="unknown"?"no verdict":d.label:`${n.participants.reachedGoal}/${n.participants.total} reached the goal${m}`,y=n.estimatedCostUsd===void 0||n.estimatedCostUsd===null&&n.analysisCost===void 0?"":` \xB7 run ${RB(hg(n))}`,Q=[c,B].filter(Boolean).join(" \xB7 ")+y;return(0,Ht.jsxs)(ut,{width:u,children:[(0,Ht.jsx)(ut,{flexShrink:0,children:(0,Ht.jsxs)(q,{...Mn(i?kt.accent:void 0),bold:i,children:[yi(i)," "]})}),(0,Ht.jsx)(ut,{flexShrink:0,children:(0,Ht.jsxs)(q,{...pg(n),children:[lp(n)," "]})}),(0,Ht.jsx)(q,{...Mn(i?kt.accent:void 0),bold:i,wrap:"truncate-end",children:Q})]})}o(bO,"PastRun");function _O(n){let i=n?.caps.laneUsd,u=n?.caps.studyUsd;if(i===void 0&&u===void 0)return"";let c=[];return i!==void 0&&c.push(`$${i} per participant`),u!==void 0&&c.push(`$${u} study`),` \xB7 caps ${c.join(" / ")}`}o(_O,"capsLine");function wO(n){let i=n.replace(/\s+/g," ").trim(),u=i.indexOf(". ");return u===-1?i:i.slice(0,u+1)}o(wO,"firstSentence");function MO(n){if(n===void 0)return"";let i=Date.parse(n);if(!Number.isFinite(i))return"";let u=new Date(i),c=o(d=>String(d).padStart(2,"0"),"pad");return`${c(u.getUTCMonth()+1)}-${c(u.getUTCDate())} ${c(u.getUTCHours())}:${c(u.getUTCMinutes())}`}o(MO,"shortDate");function sN(n){if(!Number.isFinite(n)||n<0)return"0:00";let i=Math.floor(n/1e3),u=Math.floor(i/60);return u<60?`${u}:${String(i%60).padStart(2,"0")}`:wl(n)}o(sN,"clockOf");var Un=Ot(Aa(),1);function up(n,i){return["queued","running"].includes(i?.automaticAnalysis?.state??"")?i?.observerPath===void 0?["cancel-analysis"]:["observer","cancel-analysis"]:n.liveness==="interrupted"?i?.observerPath===void 0?["reclaim"]:["reclaim","observer"]:n.liveness==="running"?i?.observerPath===void 0?["stop"]:["stop","observer"]:i?.observerPath===void 0?["again"]:["observer","again"]}o(up,"runActions");function UO(n){switch(n){case"observer":return"Open in Observer";case"again":return"Run again";case"stop":return"Stop this run";case"cancel-analysis":return"Cancel analysis";default:return"Reclaim: stop sandboxes, keep evidence"}}o(UO,"actionLabel");function gN({run:n,detail:i,columns:u,selected:c,tick:d,now:m,actionNote:B}){let y=i?.participants[0],Q=up(n,i),N=n.liveness==="interrupted";return(0,Un.jsxs)(ut,{flexDirection:"column",children:[(0,Un.jsx)(ut,{children:(0,Un.jsxs)(q,{...pg(n),bold:!0,children:[lp({...n,tick:d})," ",OO(n,y)]})}),N?(0,Un.jsx)(GO,{run:n,participant:y,now:m,columns:u}):(0,Un.jsx)(HO,{run:n,participant:y,columns:u}),i?.automaticAnalysis===void 0?null:(0,Un.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,Un.jsxs)(q,{children:["Analysis: ",i.automaticAnalysis.state]}),i.automaticAnalysis.reason===null?null:(0,Un.jsx)(q,{dimColor:!0,wrap:"wrap",children:i.automaticAnalysis.reason})]}),Q.length===0?null:(0,Un.jsx)(ut,{marginTop:1,flexDirection:"column",children:Q.map((b,O)=>(0,Un.jsx)(ut,{children:(0,Un.jsxs)(q,{...Mn(O===c?kt.accent:void 0),bold:O===c,children:[yi(O===c)," ",Xo(UO(b),Math.max(10,u-3))]})},b))}),B===void 0?null:(0,Un.jsx)(ut,{marginTop:1,children:(0,Un.jsx)(q,{dimColor:!0,wrap:"wrap",children:B})})]})}o(gN,"RunScreen");function OO(n,i){if(n.liveness==="interrupted")return"interrupted: no outcome recorded";if(n.liveness==="running"){let B=i?.personaId??i?.label;return B===void 0?"starting\u2026":`${B} is working`}let u=Wr(n),c=n.participants;if(c===void 0)return u.state==="unknown"?"finished, no verdict recorded":u.label;let d=c.reportedFriction===void 0||c.reportedFriction===0?"":` \xB7 ${c.reportedFriction} reported friction`,m=u.state==="passed"?"":` \xB7 ${u.label}`;return`${c.reachedGoal}/${c.total} reached the goal${d}${m}`}o(OO,"headline");function HO({run:n,participant:i,columns:u}){let c=i?.thought===void 0?void 0:mg(i.thought.text,{width:Math.max(16,u),maxLines:3}),{reason:d}=Wr(n),m=[n.durationMs===void 0?void 0:wl(n.durationMs),i?.turns===void 0?void 0:`${i.turns} turns`,i?.thoughts===void 0?void 0:`${i.thoughts} thoughts`].filter(Boolean).join(" \xB7 ");return(0,Un.jsxs)(ut,{flexDirection:"column",children:[c===void 0?null:(0,Un.jsx)(ut,{marginTop:1,flexDirection:"column",children:c.lines.map((B,y)=>(0,Un.jsxs)(q,{children:[y===0?`"${B}`:B,y===c.lines.length-1?'"':""]},y))}),(0,Un.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[d===void 0?null:(0,Un.jsx)(q,{dimColor:!0,wrap:"truncate-end",children:`why: ${d}`}),m===""?null:(0,Un.jsx)(q,{dimColor:!0,children:m}),(0,Un.jsx)(q,{dimColor:!0,children:EN(n,i)})]})]})}o(HO,"FinishedFacts");function GO({run:n,participant:i,now:u,columns:c}){let d=n.startedAt===void 0?Number.NaN:Date.parse(n.startedAt),m=n.updatedAt===void 0?Number.NaN:u-Date.parse(n.updatedAt),B=[i?.thoughts===void 0?void 0:`${i.thoughts} thoughts`,i?.actions===void 0?void 0:`${i.actions} actions`].filter(Boolean).join(" \xB7 ");return(0,Un.jsxs)(ut,{marginTop:1,flexDirection:"column",width:c,children:[(0,Un.jsxs)(q,{dimColor:!0,children:[Number.isFinite(d)?`started ${LO(d)}`:"start time not recorded",Number.isFinite(m)?` \xB7 quiet ${wl(m)}`:"",B===""?"":` \xB7 ${B} captured`]}),(0,Un.jsxs)(ut,{children:[(0,Un.jsx)(q,{dimColor:!0,children:n.estimatedCostUsd===void 0&&i?.estimatedCostUsd===void 0?"cost unknown: it ended before pricing itself":EN(n,i)}),(0,Un.jsx)(q,{color:kt.warn,children:" sandboxes may still be running"})]})]})}o(GO,"InterruptedFacts");function EN(n,i){if(n.estimatedCostUsd===void 0){let u=i?.estimatedCostUsd;return u===void 0?"cost not recorded":u===null?"cost declared absent":`~$${u.toFixed(2)} participant model estimate`}return n.estimatedCostUsd===null&&n.analysisCost===void 0?"cost declared absent":`run ${RB(hg(n))}`}o(EN,"costLine");function LO(n){let i=new Date(n),u=o(c=>String(c).padStart(2,"0"),"pad");return`${u(i.getUTCHours())}:${u(i.getUTCMinutes())}`}o(LO,"clockTime");var pN=Ot(Le(),1);var he=Ot(Aa(),1);function mN({retired:n}){let i=n.filter(c=>c.code==="HUMANISH_STUDY_V2_UNSUPPORTED").length,u=n.length-i;return(0,he.jsxs)(ut,{flexDirection:"column",children:[i===0?null:(0,he.jsx)(q,{color:kt.warn,children:`${i} study ${i===1?"file uses":"files use"} humanish.lab.v2, which humanish no longer reads. Run humanish migrate to convert ${i===1?"it":"them"}.`}),u===0?null:(0,he.jsx)(q,{color:kt.warn,children:`${u} study ${u===1?"file is":"files are"} in a labs/ folder, which humanish no longer reads. Move ${u===1?"it":"them"} to the matching studies/ folder; humanish study list names each one.`})]})}o(mN,"RetiredNote");function CN({rows:n,selected:i,columns:u,viewport:c,unattributed:d,tick:m,liveParticipants:B,now:y,initialized:Q,peerSelected:N,liveTotal:b,initArmed:O,actionNote:x,retired:L=[]}){if(n.length===0)return Q?(0,he.jsxs)(ut,{flexDirection:"column",children:[L.length>0?(0,he.jsx)(mN,{retired:L}):(0,he.jsx)(q,{children:"No studies here yet."}),(0,he.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,he.jsx)(q,{dimColor:!0,children:"A study file says who to send, to what, and what counts as done."}),(0,he.jsx)(q,{dimColor:!0,children:"Write one in humanish/studies/, or run `humanish init` for starter studies."})]})]}):(0,he.jsxs)(ut,{flexDirection:"column",children:[(0,he.jsx)(q,{children:"This directory is not a humanish project."}),(0,he.jsxs)(ut,{marginTop:1,flexDirection:"column",children:[(0,he.jsx)(q,{dimColor:!0,children:"A project is a humanish/ directory of studies and personas,"}),(0,he.jsx)(q,{dimColor:!0,children:"kept beside the app they study."})]}),(0,he.jsxs)(ut,{marginTop:1,children:[(0,he.jsxs)(q,{...Mn(kt.accent),bold:!0,children:[yi(!0)," Set up humanish here"]}),(0,he.jsx)(ut,{flexGrow:1}),(0,he.jsx)(q,{dimColor:!0,children:O?"\u23CE again to confirm \xB7 esc cancel":"writes humanish/ and updates package.json"})]}),x===void 0?null:(0,he.jsx)(ut,{marginTop:1,children:(0,he.jsx)(q,{dimColor:!0,children:x})})]});let j=Xr({total:n.length,selected:i,viewport:c});return(0,he.jsxs)(ut,{flexDirection:"column",children:[j.start>0?(0,he.jsx)(q,{dimColor:!0,children:` \u2191 ${j.start} more`}):null,n.slice(j.start,j.end).map((k,F)=>{let gt=j.start+F,lt=gt>0?n[gt-1]:void 0,Pt=k.runs===0&<!==void 0&<.runs>0;return(0,he.jsxs)(pN.default.Fragment,{children:[Pt?(0,he.jsx)(ut,{marginTop:1,children:(0,he.jsxs)(q,{dimColor:!0,children:[" ","not yet run"]})}):null,(0,he.jsx)(YO,{row:k,columns:u,active:gt===i,tick:m,liveParticipants:B,now:y})]},k.key)}),j.end<n.length?(0,he.jsx)(q,{dimColor:!0,children:` \u2193 ${n.length-j.end} more`}):null,(0,he.jsxs)(ut,{marginTop:1,children:[(0,he.jsx)(q,{...Mn(N?kt.accent:void 0),bold:N,dimColor:!N,children:`${yi(N)} All runs`}),b>0?(0,he.jsx)(q,{color:kt.ok,children:` ${b} working`}):null]}),d>0?(0,he.jsx)(ut,{marginTop:1,children:(0,he.jsxs)(q,{dimColor:!0,children:[d," ",d===1?"run":"runs"," with no study"]})}):null,L.length>0?(0,he.jsx)(ut,{marginTop:1,children:(0,he.jsx)(mN,{retired:L})}):null,(0,he.jsxs)(ut,{marginTop:1,width:u,children:[(0,he.jsx)(ut,{flexShrink:0,children:(0,he.jsx)(q,{...Mn(kt.accent),children:"\u25B8"})}),(0,he.jsx)(q,{dimColor:!0,wrap:"truncate-end",children:` ${zO(n[i],N)}`})]})]})}o(CN,"StudiesScreen");function zO(n,i){if(i)return"every run in this project, newest first, across every study";if(n===void 0)return"";let u=n.description?.split(/(?<=[.!?])\s/)[0]?.trim();return u!==void 0&&u.length>0?u:"no description in the manifest"}o(zO,"describe");function YO({row:n,columns:i,active:u,tick:c,liveParticipants:d,now:m}){let B=n.liveRuns[0],y=B===void 0?SB(n):JO(n,B,d.get(B.runId),m),Q=Math.max(10,Math.floor(i/2)-2),N=y.length<=Q?y:KO(n),b=Math.max(8,i-N.length-6);return(0,he.jsxs)(ut,{width:i,children:[(0,he.jsxs)(q,{...Mn(u?kt.accent:void 0),bold:u,children:[yi(u)," "]}),(0,he.jsxs)(q,{...pg({liveness:B===void 0?"finished":"running"}),children:[B===void 0?" ":ip(c)," "]}),(0,he.jsx)(q,{...Mn(u?kt.accent:void 0),bold:u,wrap:"truncate-end",children:Xo(n.label,b)}),(0,he.jsx)(ut,{flexGrow:1}),(0,he.jsx)(q,{...Mn(B===void 0?void 0:kt.ok),dimColor:B===void 0,children:N})]})}o(YO,"StudyRowView");function JO(n,i,u,c){let d=i.startedAt===void 0?Number.NaN:Date.parse(i.startedAt),m=Number.isFinite(d)?FO(c-d):void 0,B=u??"starting\u2026",y=n.live>1?` +${n.live-1}`:"";return m===void 0?`${B}${y}`:`${B} \xB7 ${m}${y}`}o(JO,"liveStatus");function KO(n){return n.live>0?`${n.live} running`:n.runs===0?n.declared?"never run":"no runs":`${n.runs} runs`}o(KO,"fallbackStatus");function FO(n){if(!Number.isFinite(n)||n<0)return"0:00";let i=Math.floor(n/1e3),u=Math.floor(i/60),c=i%60;return u<60?`${u}:${String(c).padStart(2,"0")}`:wl(n)}o(FO,"clockOf");var Xi=Ot(Aa(),1),kO=6,jQ=2e3,qO=5e3,jO=100,VQ=400,VO=120;function IN({options:n,onReady:i,onKeyEntry:u,now:c,tick:d}){let{exit:m}=JQ(),B=DB(),[y,Q]=(0,Ze.useReducer)(iN,void 0,AN),[N,b]=(0,Ze.useState)(void 0),[O,x]=(0,Ze.useState)(void 0),[L,j]=(0,Ze.useState)(void 0),[k,F]=(0,Ze.useState)(void 0),[gt,lt]=(0,Ze.useState)(void 0),[Pt,Dt]=(0,Ze.useState)(void 0),[ue,se]=(0,Ze.useState)(void 0),[fe,Tt]=(0,Ze.useState)(void 0),[Ct,qt]=(0,Ze.useState)(void 0),[ie,Gt]=(0,Ze.useState)(!1),[Fe,ve]=(0,Ze.useState)(n.initialScreen==="connections"),[st,Rt]=(0,Ze.useState)(void 0),[Wt,Nt]=(0,Ze.useState)(0),jt=d??Wt,[De,dn]=(0,Ze.useState)(void 0),[et,Mt]=(0,Ze.useState)(new Map),xt=(0,Ze.useMemo)(()=>n.capabilities.readProjectState(n.cwd),[n]).initialized||(N?.retired.length??0)>0,_e=c??Date.now(),le=(0,Ze.useRef)(void 0),Lt=(0,Ze.useRef)({name:"studies"});(0,Ze.useEffect)(()=>{let _t=!1,oe=o(async()=>{try{let[Re,cn]=await Promise.all([n.capabilities.readRunIndex(n.cwd),n.capabilities.listStudies(n.cwd)]);if(_t)return;x(void 0),b(hN(Re,cn.studies,cn.retired))}catch(Re){if(_t)return;x(Re instanceof Error?Re.message:String(Re))}},"read");oe();let Pe=setInterval(()=>{oe()},jQ);return Pe.unref?.(),()=>{_t=!0,clearInterval(Pe)}},[n]),(0,Ze.useEffect)(()=>{(N!==void 0||O!==void 0)&&i?.()},[N,O,i]);let It=op(y),ne=aN(y),_n=BN(It,N,ue);(0,Ze.useEffect)(()=>{Lt.current=It;let _t=$O(It,N,ne);_t!==void 0&&(le.current=_t)},[It,N,ne]),(0,Ze.useEffect)(()=>{if(N===void 0)return;let _t=le.current;if(_t===void 0)return;let oe=tH(It,N,_t);oe>=0&&oe!==ne&&Q({type:"select",index:oe,total:BN(It,N,ue)})},[N,It]);let DA=(0,Ze.useCallback)(async(_t,oe)=>{if(oe==="live"&&L!=="live"){j("live"),Dt(Date.now());return}if(oe==="live"&&Pt!==void 0&&Date.now()-Pt<VQ)return;j(void 0),Dt(void 0),F(void 0),lt({studyKey:_t.key,text:`starting ${_t.name}\u2026`});let Pe=await n.capabilities.startRun({cwd:n.cwd,study:_t.name,..._t.path?{manifestPath:_t.path}:{},mode:oe});if(!Pe.ok){lt(void 0),F({studyKey:_t.key,text:Pe.error.message});return}let Re=Date.parse(Pe.run.launchedAt),cn=o(vn=>{if(vn.pid!==Pe.run.pid)return!1;let yt=vn.startedAt===void 0?Number.NaN:Date.parse(vn.startedAt);return!Number.isFinite(yt)||!Number.isFinite(Re)?!1:yt>=Re-1e3},"isOurs"),In=Date.now()+qO;for(;;){let vn=await n.capabilities.readRunIndex(n.cwd),yt=vn.runs.find(cn);if(yt!==void 0){let Vt=await n.capabilities.listStudies(n.cwd);b(hN(vn,Vt.studies,Vt.retired)),lt(void 0),Lt.current.name==="study"&&Lt.current.studyKey===_t.key&&Q({type:"enter",screen:{name:"run",studyId:_t.studyId,runId:yt.runId}});return}if(Date.now()>=In)break;await new Promise(Vt=>setTimeout(Vt,jO))}let we=await n.capabilities.readLaunchLog(Pe.run.logPath);lt(void 0),F({studyKey:_t.key,text:we===""?`${_t.name} started (pid ${Pe.run.pid}) but has not reported in. Check ${Pe.run.logPath}.`:`${_t.name} did not report in. Its log ends:
|
|
287
287
|
${we.split(`
|
|
288
288
|
`).slice(-3).join(`
|
|
289
|
-
`)}`})},[L,Pt,n]),kA=(0,Ze.useCallback)(async(_t,oe)=>{if(oe==="stop"||oe==="cancel-analysis"){if(Ct===void 0){qt(Date.now()),Tt(oe==="cancel-analysis"?"cancel analysis? \u23CE again to confirm \xB7 esc keep analyzing":"stop this run? \u23CE again to confirm \xB7 esc cancel");return}if(Date.now()-Ct<VQ)return;qt(void 0),Tt(oe==="cancel-analysis"?"cancelling analysis\u2026":"stopping\u2026");let we=await n.capabilities.stopRun(n.cwd,_t.runId,oe==="cancel-analysis"?"analysis":"run");Tt(we.message);return}if(oe==="observer"){let we=ue?.observerPath;if(we===void 0){Tt("this run has no Observer artifact on disk");return}Tt("opening\u2026");let vn=await n.capabilities.openObserver(n.cwd,we);Tt(vn.message);return}if(oe==="reclaim"){Tt("reclaiming: stopping sandboxes, keeping evidence\u2026");let we=await n.capabilities.reclaimRun(n.cwd,_t.runId),vn=we.outcomes.length;Tt(we.error===void 0?`reclaim ${we.state}: ${vn} sandbox${vn===1?"":"es"} found by receipt or E2B tag`:`could not reclaim: ${we.error.message}`);return}let Pe=_t.study?.id,Re=Pe===void 0?[]:N?.rows.filter(we=>we.studyId===Pe&&we.declared)??[];if(Re.length>1){Tt("multiple manifests share this study id; choose the exact one from the list to run again");return}let cn=Re[0];if(cn===void 0||!cn.declared){let we=N===void 0?void 0:yN(N,Pe);Tt(we===void 0?"cannot run this again: its study has no manifest here any more":`cannot run this again: ${we.message}`);return}Tt(`starting ${cn.name}\u2026`);let In=await n.capabilities.startRun({cwd:n.cwd,study:cn.name,...cn.path?{manifestPath:cn.path}:{},mode:_t.mode==="live"?"live":"dry-run"});Tt(In.ok?`started ${cn.name} (pid ${In.run.pid})`:In.error.message)},[ue,n,N,Ct]);np((0,Ze.useCallback)((_t,oe)=>{if(Fe){_t==="q"&&m();return}if(ie){Gt(!1),_t==="q"&&m();return}if(_t==="?"){Gt(!0);return}if(_t==="q"){m();return}if(_t==="c"&&n.capabilities.comms){j(void 0),Dt(void 0),qt(void 0),Rt(void 0),ve(!0);return}if(_t==="g"||_t==="G"){L!==void 0&&(j(void 0),Dt(void 0)),Q({type:"move",delta:_t==="g"?-_n:_n,total:_n});return}if(oe.upArrow||_t==="k"||oe.downArrow||_t==="j"){L!==void 0&&(j(void 0),Dt(void 0)),Q({type:"move",delta:oe.upArrow||_t==="k"?-1:1,total:_n});return}if(oe.escape||oe.leftArrow){if(L!==void 0){j(void 0),Dt(void 0);return}if(Ct!==void 0){qt(void 0),Tt(void 0);return}if(st!==void 0){Rt(void 0);return}Q({type:"back"});return}if(oe.return||oe.rightArrow){if(It.name==="studies"&&!xt){if(st===void 0){Rt(Date.now());return}if(Date.now()-st<VQ)return;Rt(void 0),(async()=>{let Re=await n.capabilities.initProject(n.cwd);Tt(Re.message)})();return}if(It.name==="run"&&N!==void 0){let Re=N.runsById.get(It.runId);if(Re!==void 0){let cn=up(Re,ue)[ne];if(cn!==void 0){kA(Re,cn);return}}}if(It.name==="study"&&N!==void 0){let{row:Re,items:cn}=Bg(N,It.studyKey),In=cn[ne];if(Re!==void 0&&In?.kind==="start"){DA(Re,In.mode);return}}let Pe=eH(It,N,ne);Pe!==void 0&&Q({type:"enter",screen:Pe})}},[m,_n,It,N,ne,L,DA,ue,kA,Ct,ie,Fe,st,xt,n])),(0,Ze.useEffect)(()=>{y.quit&&m()},[y.quit,m]);let Ie=It.name==="run"?It.runId:void 0;(0,Ze.useEffect)(()=>{if(Tt(void 0),qt(void 0),Ie===void 0){se(void 0);return}let _t=!1;se(void 0);let oe=o(async()=>{try{let Re=await n.capabilities.readRunDetail(n.cwd,Ie);_t||se(Re)}catch{_t||se(null)}},"read");oe();let Pe=setInterval(()=>{oe()},jQ);return Pe.unref?.(),()=>{_t=!0,clearInterval(Pe)}},[Ie,n]),(0,Ze.useEffect)(()=>{if(d!==void 0)return;let _t=setInterval(()=>Nt(oe=>oe+1),VO);return _t.unref?.(),()=>clearInterval(_t)},[d]);let Nn=It.name==="study"?N?.rows.find(_t=>_t.key===It.studyKey):void 0,An=Nn===void 0?void 0:N?.runsByStudy.get(Nn.studyId)?.[0]?.runId,mn=[...new Set([...(N?.rows??[]).flatMap(_t=>_t.liveRuns.map(oe=>oe.runId)),...An===void 0?[]:[An]])].join(",");(0,Ze.useEffect)(()=>{if(mn===""){Mt(new Map);return}let _t=!1,oe=!1,Pe=o(async()=>{if(oe)return;oe=!0;let cn=mn.split(","),In=await Promise.all(cn.map(async we=>{let vn=await n.capabilities.readRunDetail(n.cwd,we).catch(()=>null);return vn===null?null:[we,vn]}));_t||Mt(new Map(In.filter(we=>we!==null))),oe=!1},"read");Pe();let Re=setInterval(()=>{Pe()},jQ);return Re.unref?.(),()=>{_t=!0,clearInterval(Re)}},[mn,n]);let We=It.name==="study"?It.studyKey:void 0,Wn=We===void 0?void 0:N?.rows.find(_t=>_t.key===We),jn=Wn?.path??Wn?.name;(0,Ze.useEffect)(()=>{if(jn===void 0){dn(void 0);return}let _t=!1;return dn(void 0),(async()=>{let oe=await n.capabilities.readStudySummary(n.cwd,jn,{checkKeys:!0}).catch(()=>null);_t||dn(oe)})(),()=>{_t=!0}},[jn,n]);let Jt=Math.max(1,B.rows-kO),gn=(0,Ze.useMemo)(()=>Fe&&n.capabilities.comms?(0,Xi.jsx)(eN,{capabilities:n.capabilities.comms,columns:ap(B.columns),notice:n.connectionNotice,onBack:()=>ve(!1),onKeyEntry:()=>{u?.(),m()}}):ie?(0,Xi.jsx)(V2,{columns:ap(B.columns),connections:!!n.capabilities.comms}):O!==void 0?(0,Xi.jsxs)(q,{color:kt.bad,children:["could not read this project: ",O]}):N===void 0?(0,Xi.jsx)(q,{dimColor:!0,children:"reading project\u2026"}):nH({screen:It,data:N,selected:ne,columns:ap(B.columns),viewport:Jt,now:_e,confirming:L,launchError:k,launchNote:gt,detail:ue,summary:De,liveDetails:et,tick:jt,initialized:xt,actionNote:fe,initArmed:st!==void 0}),[ie,Fe,n,u,m,O,N,It,ne,B.columns,Jt,_e,L,k,gt,ue,De,et,jt,xt,fe]);return(0,Xi.jsx)(tN,{columns:B.columns,context:XO(It,N,n),breadcrumb:Fe?"\u2039 connections":ZO(It,N),hints:Fe?"\u2191\u2193 move \u23CE select esc back q quit":ie?"any key returns q quit":WO(It,N,ne,L,xt)+(n.capabilities.comms?" c connections":""),children:gn})}o(IN,"App");function XO(n,i,u){let c=u.cwd.split("/").filter(Boolean).pop();if(n.name==="run"&&i!==void 0){let m=i.runsById.get(n.runId),B=n.runId.split("-").pop()??n.runId;return[m?.study?.id,B].filter(Boolean).join(" \xB7 ")}if(i===void 0)return c;let d=wc(i).length;return d===0?c:`${c} \xB7 ${d} participant${d===1?"":"s"} working`}o(XO,"contextLine");function ZO(n,i){if(n.name==="studies")return;if(n.name==="all-runs")return"\u2039 studies / all runs";if(n.name==="study")return`\u2039 studies / ${i?.rows.find(d=>d.key===n.studyKey)?.name??n.studyKey}`;let u=n.studyId;return u===void 0?"\u2039 studies / run":`\u2039 studies / ${u} / run`}o(ZO,"breadcrumbOf");function WO(n,i,u,c,d){let m="\u2191\u2193 move";switch(n.name){case"studies":return(i?.rows.length??0)>0?`${m} \u23CE open ? keys q quit`:d===!1?"\u23CE set up humanish here ? keys q quit":"? keys q quit";case"study":{if(c!==void 0)return"\u23CE confirm esc cancel";let y=(i===void 0?void 0:Bg(i,n.studyKey).items[u])?.kind==="start"?"\u23CE start":"\u23CE open";return`${m} ${y} esc back ? keys q quit`}case"all-runs":return`${m} \u23CE open esc back ? keys q quit`;default:{let B=i===void 0?void 0:i.runsById.get(n.name==="run"?n.runId:"");return B!==void 0&&up(B,void 0).length>0?`${m} \u23CE select esc back ? keys q quit`:"esc back ? keys q quit"}}}o(WO,"keyHints");function yN(n,i){if(i===void 0)return;let u=o(d=>d.replace(/\\/g,"/"),"slashed"),c=new Set((n.runsByStudy.get(i)??[]).flatMap(d=>d.study?.path===void 0?[]:[u(d.study.path)]));return c.size>0?n.retired.find(d=>c.has(u(d.path))):n.retired.find(d=>nN(u(d.path).split("/").pop()??"")===i)}o(yN,"retiredFileOf");function hN(n,i,u){let{rows:c,unattributed:d}=P2(i.map(y=>({id:y.id,...y.title===void 0?{}:{title:y.title},...y.description===void 0?{}:{description:y.description},path:y.path,origin:y.origin})),n.runs),m=new Map,B=new Map;for(let y of n.runs){B.set(y.runId,y);let Q=y.study?.id;if(Q===void 0)continue;let N=m.get(Q);N===void 0?m.set(Q,[y]):N.push(y)}return{rows:c,unattributed:d,runsByStudy:m,runsById:B,unreadable:n.unreadable,retired:u}}o(hN,"project");function wc(n){let i=new Set,u=[];for(let c of n.rows.flatMap(d=>d.liveRuns))i.has(c.runId)||(i.add(c.runId),u.push(c));return u}o(wc,"liveRunsOf");function PO(n,i){return i===void 0?"":n.rows.find(u=>u.studyId===i)?.label??i}o(PO,"labelForStudy");function Bg(n,i){let u=n.rows.find(c=>c.key===i);return u===void 0?{items:[]}:{row:u,items:NB(n.runsByStudy.get(u.studyId)??[],u.declared)}}o(Bg,"itemsForStudy");function BN(n,i,u){if(i===void 0)return 0;switch(n.name){case"studies":return i.rows.length+1;case"all-runs":return wc(i).length;case"study":return Bg(i,n.studyKey).items.length;case"run":{let c=i.runsById.get(n.runId);return c===void 0?0:up(c,u).length}default:return 0}}o(BN,"countRows");function $O(n,i,u){if(i!==void 0){if(n.name==="studies")return i.rows[u]?.key??"peer:all-runs";if(n.name==="all-runs")return wc(i)[u]?.runId;if(n.name==="study"){let c=Bg(i,n.studyKey).items[u];return c===void 0?void 0:c.kind==="start"?`start:${c.mode}`:`run:${c.run.runId}`}}}o($O,"identityOf");function tH(n,i,u){return n.name==="studies"?u==="peer:all-runs"?i.rows.length:i.rows.findIndex(c=>c.key===u):n.name==="all-runs"?wc(i).findIndex(c=>c.runId===u):n.name==="study"?Bg(i,n.studyKey).items.findIndex(c=>c.kind==="start"?u===`start:${c.mode}`:`run:${c.run.runId}`===u):-1}o(tH,"indexOfIdentity");function eH(n,i,u){if(i!==void 0){if(n.name==="studies"){let c=i.rows[u];return c===void 0?u===i.rows.length?{name:"all-runs"}:void 0:{name:"study",studyKey:c.key}}if(n.name==="all-runs"){let c=wc(i)[u];return c===void 0?void 0:{name:"run",...c.study?.id===void 0?{}:{studyId:c.study.id},runId:c.runId}}if(n.name==="study"){let{row:c,items:d}=Bg(i,n.studyKey),m=d[u];return c===void 0||m===void 0||m.kind!=="run"?void 0:{name:"run",studyId:c.studyId,runId:m.run.runId}}}}o(eH,"openSelected");function nH(n){let{screen:i,data:u,selected:c,columns:d,viewport:m,now:B,confirming:y,launchError:Q,launchNote:N,detail:b}=n,{summary:O,liveDetails:x,tick:L,initialized:j,actionNote:k}=n;if(i.name==="studies")return(0,Xi.jsx)(CN,{rows:u.rows,selected:c,columns:d,viewport:m,unattributed:u.unattributed.length,tick:L,initialized:j,retired:u.retired,peerSelected:c===u.rows.length,liveTotal:wc(u).length,...n.initArmed===!0?{initArmed:!0}:{},...n.actionNote===void 0?{}:{actionNote:n.actionNote},liveParticipants:new Map([...x.entries()].map(([gt,lt])=>{let Pt=lt.participants[0]?.personaId??lt.participants[0]?.label;return Pt===void 0?null:[gt,Pt]}).filter(gt=>gt!==null)),now:B});if(i.name==="study"){let gt=u.rows.find(Pt=>Pt.key===i.studyKey);if(gt===void 0)return(0,Xi.jsx)(q,{color:kt.warn,children:"that study is no longer in this project"});let lt=gt.declared?void 0:yN(u,gt.studyId)?.message;return(0,Xi.jsx)(cN,{row:gt,summary:O,runs:u.runsByStudy.get(gt.studyId)??[],liveDetail:x.get(gt.liveRuns[0]?.runId??u.runsByStudy.get(gt.studyId)?.[0]?.runId??""),selected:c,columns:d,viewport:m,now:B,tick:L,canStart:gt.declared,...lt===void 0?{}:{retired:lt},confirming:y,launchError:Q?.studyKey===gt.key?Q.text:void 0,launchNote:N?.studyKey===gt.key?N.text:void 0})}if(i.name==="all-runs"){let gt=wc(u);return(0,Xi.jsx)(uN,{runs:gt,details:x,labels:new Map(gt.map(lt=>[lt.runId,PO(u,lt.study?.id)])),expected:new Map(u.rows.map(lt=>lt.liveExpectation.medianDurationMs===void 0?null:[lt.studyId,lt.liveExpectation.medianDurationMs]).filter(lt=>lt!==null)),selected:c,columns:d,viewport:m,tick:L,now:B})}let F=u.runsById.get(i.runId);return F===void 0?(0,Xi.jsx)(q,{color:kt.warn,children:"that run is no longer on disk"}):(0,Xi.jsx)(gN,{run:F,detail:b,columns:d,viewport:m,selected:c,tick:L,now:B,actionNote:k})}o(nH,"renderScreen");var QN=Ot(Aa(),1);function AH(n){if(_c())return n;let i=Object.create(n);return i.write=((u,...c)=>n.write(typeof u=="string"?F2(u):u,...c)),i}o(AH,"encodeFor");var FY=o(async n=>{let i=0,u=o(()=>{},"ready"),c=new Promise(B=>{u=B}),d=AH(n.stdout),m=LQ((0,QN.jsx)(IN,{options:n,onReady:u,onKeyEntry:()=>{i={action:"agentmail-key"}}}),{stdin:n.stdin,stdout:d,patchConsole:!1,exitOnCtrlC:!0,interactive:!0});n.exitAfterFirstFrame===!0&&(await c,await new Promise(B=>setImmediate(B)),m.unmount());try{return await m.waitUntilExit(),m.clear(),m.cleanup(),i}catch(B){return m.unmount(),n.stdout.write(`humanish tui exited: ${B instanceof Error?B.message:String(B)}
|
|
290
|
-
`),1}},"startTui");export{
|
|
289
|
+
`)}`})},[L,Pt,n]),kA=(0,Ze.useCallback)(async(_t,oe)=>{if(oe==="stop"||oe==="cancel-analysis"){if(Ct===void 0){qt(Date.now()),Tt(oe==="cancel-analysis"?"cancel analysis? \u23CE again to confirm \xB7 esc keep analyzing":"stop this run? \u23CE again to confirm \xB7 esc cancel");return}if(Date.now()-Ct<VQ)return;qt(void 0),Tt(oe==="cancel-analysis"?"cancelling analysis\u2026":"stopping\u2026");let we=await n.capabilities.stopRun(n.cwd,_t.runId,oe==="cancel-analysis"?"analysis":"run");Tt(we.message);return}if(oe==="observer"){let we=ue?.observerPath;if(we===void 0){Tt("this run has no Observer artifact on disk");return}Tt("opening\u2026");let vn=await n.capabilities.openObserver(n.cwd,we);Tt(vn.message);return}if(oe==="reclaim"){Tt("reclaiming: stopping sandboxes, keeping evidence\u2026");let we=await n.capabilities.reclaimRun(n.cwd,_t.runId),vn=we.outcomes.length;Tt(we.error===void 0?`reclaim ${we.state}: ${vn} sandbox${vn===1?"":"es"} found by receipt or E2B tag`:`could not reclaim: ${we.error.message}`);return}let Pe=_t.study?.id,Re=Pe===void 0?[]:N?.rows.filter(we=>we.studyId===Pe&&we.declared)??[];if(Re.length>1){Tt("multiple manifests share this study id; choose the exact one from the list to run again");return}let cn=Re[0];if(cn===void 0||!cn.declared){let we=N===void 0?void 0:yN(N,Pe);Tt(we===void 0?"cannot run this again: its study has no manifest here any more":`cannot run this again: ${we.message}`);return}Tt(`starting ${cn.name}\u2026`);let In=await n.capabilities.startRun({cwd:n.cwd,study:cn.name,...cn.path?{manifestPath:cn.path}:{},mode:_t.mode==="live"?"live":"dry-run"});Tt(In.ok?`started ${cn.name} (pid ${In.run.pid})`:In.error.message)},[ue,n,N,Ct]);np((0,Ze.useCallback)((_t,oe)=>{if(Fe){_t==="q"&&m();return}if(ie){Gt(!1),_t==="q"&&m();return}if(_t==="?"){Gt(!0);return}if(_t==="q"){m();return}if(_t==="c"&&n.capabilities.comms){j(void 0),Dt(void 0),qt(void 0),Rt(void 0),ve(!0);return}if(_t==="g"||_t==="G"){L!==void 0&&(j(void 0),Dt(void 0)),Q({type:"move",delta:_t==="g"?-_n:_n,total:_n});return}if(oe.upArrow||_t==="k"||oe.downArrow||_t==="j"){L!==void 0&&(j(void 0),Dt(void 0)),Q({type:"move",delta:oe.upArrow||_t==="k"?-1:1,total:_n});return}if(oe.escape||oe.leftArrow){if(L!==void 0){j(void 0),Dt(void 0);return}if(Ct!==void 0){qt(void 0),Tt(void 0);return}if(st!==void 0){Rt(void 0);return}Q({type:"back"});return}if(oe.return||oe.rightArrow){if(It.name==="studies"&&!xt){if(st===void 0){Rt(Date.now());return}if(Date.now()-st<VQ)return;Rt(void 0),(async()=>{let Re=await n.capabilities.initProject(n.cwd);Tt(Re.message)})();return}if(It.name==="run"&&N!==void 0){let Re=N.runsById.get(It.runId);if(Re!==void 0){let cn=up(Re,ue)[ne];if(cn!==void 0){kA(Re,cn);return}}}if(It.name==="study"&&N!==void 0){let{row:Re,items:cn}=Bg(N,It.studyKey),In=cn[ne];if(Re!==void 0&&In?.kind==="start"){DA(Re,In.mode);return}}let Pe=eH(It,N,ne);Pe!==void 0&&Q({type:"enter",screen:Pe})}},[m,_n,It,N,ne,L,DA,ue,kA,Ct,ie,Fe,st,xt,n])),(0,Ze.useEffect)(()=>{y.quit&&m()},[y.quit,m]);let Ie=It.name==="run"?It.runId:void 0;(0,Ze.useEffect)(()=>{if(Tt(void 0),qt(void 0),Ie===void 0){se(void 0);return}let _t=!1;se(void 0);let oe=o(async()=>{try{let Re=await n.capabilities.readRunDetail(n.cwd,Ie);_t||se(Re)}catch{_t||se(null)}},"read");oe();let Pe=setInterval(()=>{oe()},jQ);return Pe.unref?.(),()=>{_t=!0,clearInterval(Pe)}},[Ie,n]),(0,Ze.useEffect)(()=>{if(d!==void 0)return;let _t=setInterval(()=>Nt(oe=>oe+1),VO);return _t.unref?.(),()=>clearInterval(_t)},[d]);let Nn=It.name==="study"?N?.rows.find(_t=>_t.key===It.studyKey):void 0,An=Nn===void 0?void 0:N?.runsByStudy.get(Nn.studyId)?.[0]?.runId,mn=[...new Set([...(N?.rows??[]).flatMap(_t=>_t.liveRuns.map(oe=>oe.runId)),...An===void 0?[]:[An]])].join(",");(0,Ze.useEffect)(()=>{if(mn===""){Mt(new Map);return}let _t=!1,oe=!1,Pe=o(async()=>{if(oe)return;oe=!0;let cn=mn.split(","),In=await Promise.all(cn.map(async we=>{let vn=await n.capabilities.readRunDetail(n.cwd,we).catch(()=>null);return vn===null?null:[we,vn]}));_t||Mt(new Map(In.filter(we=>we!==null))),oe=!1},"read");Pe();let Re=setInterval(()=>{Pe()},jQ);return Re.unref?.(),()=>{_t=!0,clearInterval(Re)}},[mn,n]);let We=It.name==="study"?It.studyKey:void 0,Wn=We===void 0?void 0:N?.rows.find(_t=>_t.key===We),jn=Wn?.path??Wn?.name;(0,Ze.useEffect)(()=>{if(jn===void 0){dn(void 0);return}let _t=!1;return dn(void 0),(async()=>{let oe=await n.capabilities.readStudySummary(n.cwd,jn,{checkKeys:!0}).catch(()=>null);_t||dn(oe)})(),()=>{_t=!0}},[jn,n]);let Jt=Math.max(1,B.rows-kO),gn=(0,Ze.useMemo)(()=>Fe&&n.capabilities.comms?(0,Xi.jsx)(eN,{capabilities:n.capabilities.comms,columns:ap(B.columns),notice:n.connectionNotice,onBack:()=>ve(!1),onKeyEntry:()=>{u?.(),m()}}):ie?(0,Xi.jsx)(V2,{columns:ap(B.columns),connections:!!n.capabilities.comms}):O!==void 0?(0,Xi.jsxs)(q,{color:kt.bad,children:["could not read this project: ",O]}):N===void 0?(0,Xi.jsx)(q,{dimColor:!0,children:"reading project\u2026"}):nH({screen:It,data:N,selected:ne,columns:ap(B.columns),viewport:Jt,now:_e,confirming:L,launchError:k,launchNote:gt,detail:ue,summary:De,liveDetails:et,tick:jt,initialized:xt,actionNote:fe,initArmed:st!==void 0}),[ie,Fe,n,u,m,O,N,It,ne,B.columns,Jt,_e,L,k,gt,ue,De,et,jt,xt,fe]);return(0,Xi.jsx)(tN,{columns:B.columns,context:XO(It,N,n),breadcrumb:Fe?"\u2039 connections":ZO(It,N),hints:Fe?"\u2191\u2193 move \u23CE select esc back q quit":ie?"any key returns q quit":WO(It,N,ne,L,xt)+(n.capabilities.comms?" c connections":""),children:gn})}o(IN,"App");function XO(n,i,u){let c=u.cwd.split("/").filter(Boolean).pop();if(n.name==="run"&&i!==void 0){let m=i.runsById.get(n.runId),B=n.runId.split("-").pop()??n.runId;return[m?.study?.id,B].filter(Boolean).join(" \xB7 ")}if(i===void 0)return c;let d=wc(i).length;return d===0?c:`${c} \xB7 ${d} participant${d===1?"":"s"} working`}o(XO,"contextLine");function ZO(n,i){if(n.name==="studies")return;if(n.name==="all-runs")return"\u2039 studies / all runs";if(n.name==="study")return`\u2039 studies / ${i?.rows.find(d=>d.key===n.studyKey)?.name??n.studyKey}`;let u=n.studyId;return u===void 0?"\u2039 studies / run":`\u2039 studies / ${u} / run`}o(ZO,"breadcrumbOf");function WO(n,i,u,c,d){let m="\u2191\u2193 move";switch(n.name){case"studies":return(i?.rows.length??0)>0?`${m} \u23CE open ? keys q quit`:d===!1?"\u23CE set up humanish here ? keys q quit":"? keys q quit";case"study":{if(c!==void 0)return"\u23CE confirm esc cancel";let y=(i===void 0?void 0:Bg(i,n.studyKey).items[u])?.kind==="start"?"\u23CE start":"\u23CE open";return`${m} ${y} esc back ? keys q quit`}case"all-runs":return`${m} \u23CE open esc back ? keys q quit`;default:{let B=i===void 0?void 0:i.runsById.get(n.name==="run"?n.runId:"");return B!==void 0&&up(B,void 0).length>0?`${m} \u23CE select esc back ? keys q quit`:"esc back ? keys q quit"}}}o(WO,"keyHints");function yN(n,i){if(i===void 0)return;let u=o(d=>d.replace(/\\/g,"/"),"slashed"),c=new Set((n.runsByStudy.get(i)??[]).flatMap(d=>d.study?.path===void 0?[]:[u(d.study.path)]));return c.size>0?n.retired.find(d=>c.has(u(d.path))):n.retired.find(d=>nN(u(d.path).split("/").pop()??"")===i)}o(yN,"retiredFileOf");function hN(n,i,u){let{rows:c,unattributed:d}=P2(i.map(y=>({id:y.id,...y.title===void 0?{}:{title:y.title},...y.description===void 0?{}:{description:y.description},path:y.path,origin:y.origin})),n.runs),m=new Map,B=new Map;for(let y of n.runs){B.set(y.runId,y);let Q=y.study?.id;if(Q===void 0)continue;let N=m.get(Q);N===void 0?m.set(Q,[y]):N.push(y)}return{rows:c,unattributed:d,runsByStudy:m,runsById:B,unreadable:n.unreadable,retired:u}}o(hN,"project");function wc(n){let i=new Set,u=[];for(let c of n.rows.flatMap(d=>d.liveRuns))i.has(c.runId)||(i.add(c.runId),u.push(c));return u}o(wc,"liveRunsOf");function PO(n,i){return i===void 0?"":n.rows.find(u=>u.studyId===i)?.label??i}o(PO,"labelForStudy");function Bg(n,i){let u=n.rows.find(c=>c.key===i);return u===void 0?{items:[]}:{row:u,items:NB(n.runsByStudy.get(u.studyId)??[],u.declared)}}o(Bg,"itemsForStudy");function BN(n,i,u){if(i===void 0)return 0;switch(n.name){case"studies":return i.rows.length+1;case"all-runs":return wc(i).length;case"study":return Bg(i,n.studyKey).items.length;case"run":{let c=i.runsById.get(n.runId);return c===void 0?0:up(c,u).length}default:return 0}}o(BN,"countRows");function $O(n,i,u){if(i!==void 0){if(n.name==="studies")return i.rows[u]?.key??"peer:all-runs";if(n.name==="all-runs")return wc(i)[u]?.runId;if(n.name==="study"){let c=Bg(i,n.studyKey).items[u];return c===void 0?void 0:c.kind==="start"?`start:${c.mode}`:`run:${c.run.runId}`}}}o($O,"identityOf");function tH(n,i,u){return n.name==="studies"?u==="peer:all-runs"?i.rows.length:i.rows.findIndex(c=>c.key===u):n.name==="all-runs"?wc(i).findIndex(c=>c.runId===u):n.name==="study"?Bg(i,n.studyKey).items.findIndex(c=>c.kind==="start"?u===`start:${c.mode}`:`run:${c.run.runId}`===u):-1}o(tH,"indexOfIdentity");function eH(n,i,u){if(i!==void 0){if(n.name==="studies"){let c=i.rows[u];return c===void 0?u===i.rows.length?{name:"all-runs"}:void 0:{name:"study",studyKey:c.key}}if(n.name==="all-runs"){let c=wc(i)[u];return c===void 0?void 0:{name:"run",...c.study?.id===void 0?{}:{studyId:c.study.id},runId:c.runId}}if(n.name==="study"){let{row:c,items:d}=Bg(i,n.studyKey),m=d[u];return c===void 0||m===void 0||m.kind!=="run"?void 0:{name:"run",studyId:c.studyId,runId:m.run.runId}}}}o(eH,"openSelected");function nH(n){let{screen:i,data:u,selected:c,columns:d,viewport:m,now:B,confirming:y,launchError:Q,launchNote:N,detail:b}=n,{summary:O,liveDetails:x,tick:L,initialized:j,actionNote:k}=n;if(i.name==="studies")return(0,Xi.jsx)(CN,{rows:u.rows,selected:c,columns:d,viewport:m,unattributed:u.unattributed.length,tick:L,initialized:j,retired:u.retired,peerSelected:c===u.rows.length,liveTotal:wc(u).length,...n.initArmed===!0?{initArmed:!0}:{},...n.actionNote===void 0?{}:{actionNote:n.actionNote},liveParticipants:new Map([...x.entries()].map(([gt,lt])=>{let Pt=lt.participants[0]?.personaId??lt.participants[0]?.label;return Pt===void 0?null:[gt,Pt]}).filter(gt=>gt!==null)),now:B});if(i.name==="study"){let gt=u.rows.find(Pt=>Pt.key===i.studyKey);if(gt===void 0)return(0,Xi.jsx)(q,{color:kt.warn,children:"that study is no longer in this project"});let lt=gt.declared?void 0:yN(u,gt.studyId)?.message;return(0,Xi.jsx)(cN,{row:gt,summary:O,runs:u.runsByStudy.get(gt.studyId)??[],liveDetail:x.get(gt.liveRuns[0]?.runId??u.runsByStudy.get(gt.studyId)?.[0]?.runId??""),selected:c,columns:d,viewport:m,now:B,tick:L,canStart:gt.declared,...lt===void 0?{}:{retired:lt},confirming:y,launchError:Q?.studyKey===gt.key?Q.text:void 0,launchNote:N?.studyKey===gt.key?N.text:void 0})}if(i.name==="all-runs"){let gt=wc(u);return(0,Xi.jsx)(uN,{runs:gt,details:x,labels:new Map(gt.map(lt=>[lt.runId,PO(u,lt.study?.id)])),expected:new Map(u.rows.map(lt=>lt.liveExpectation.medianDurationMs===void 0?null:[lt.studyId,lt.liveExpectation.medianDurationMs]).filter(lt=>lt!==null)),selected:c,columns:d,viewport:m,tick:L,now:B})}let F=u.runsById.get(i.runId);return F===void 0?(0,Xi.jsx)(q,{color:kt.warn,children:"that run is no longer on disk"}):(0,Xi.jsx)(gN,{run:F,detail:b,columns:d,viewport:m,selected:c,tick:L,now:B,actionNote:k})}o(nH,"renderScreen");var QN=Ot(Aa(),1);function AH(n){if(_c())return n;let i=Object.create(n);return i.write=((u,...c)=>n.write(typeof u=="string"?F2(u):u,...c)),i}o(AH,"encodeFor");var VY=o(async n=>{let i=0,u=o(()=>{},"ready"),c=new Promise(B=>{u=B}),d=AH(n.stdout),m=LQ((0,QN.jsx)(IN,{options:n,onReady:u,onKeyEntry:()=>{i={action:"agentmail-key"}}}),{stdin:n.stdin,stdout:d,patchConsole:!1,exitOnCtrlC:!0,interactive:!0});n.exitAfterFirstFrame===!0&&(await c,await new Promise(B=>setImmediate(B)),m.unmount());try{return await m.waitUntilExit(),m.clear(),m.cleanup(),i}catch(B){return m.unmount(),n.stdout.write(`humanish tui exited: ${B instanceof Error?B.message:String(B)}
|
|
290
|
+
`),1}},"startTui");export{VY as startTui};
|
|
291
291
|
/*! Bundled license information:
|
|
292
292
|
|
|
293
293
|
react/cjs/react.production.js:
|
|
@@ -59,10 +59,19 @@ workflow without leaking private upstream truth into core.
|
|
|
59
59
|
|
|
60
60
|
## Study File
|
|
61
61
|
|
|
62
|
-
Schema: `humanish.study.v3`. `src/study/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
`humanish migrate <path>`; migrate
|
|
62
|
+
Schema: `humanish.study.v3`. `src/study/config.ts` parses a v3 document into `StudyConfig`
|
|
63
|
+
(`src/study/types.ts`), which has the file's keys; `src/study/parse/front.ts` checks the route and
|
|
64
|
+
the forms of `participants`, `surfaces` and `caps` it takes. humanish refuses a `humanish.lab.v2`
|
|
65
|
+
file with `HUMANISH_STUDY_V2_UNSUPPORTED`, whose message names `humanish migrate <path>`; migrate
|
|
66
|
+
converts the file to v3.
|
|
67
|
+
|
|
68
|
+
The parsed config is the file with defaults filled: a `participants` entry with a `count` expanded
|
|
69
|
+
into its participants, `comms.email.recipients` and a shared world's `execution.concurrency`
|
|
70
|
+
filled, `kind: real` added beside an email `connection`, and a local browser study's model,
|
|
71
|
+
effort, timeout and resolution. `humanish study show --json` prints that config, and `parseStudy`
|
|
72
|
+
reads it back to the same config. Before 0.111.0, `StudyConfig` had the `humanish.lab.v2` keys
|
|
73
|
+
(`actors`, `execution.caps`, the `scenario` object, `subject.topology`); the 0.111.0 release notes
|
|
74
|
+
map each one to its v3 key.
|
|
66
75
|
|
|
67
76
|
A study declares its route and composes code primitives; it is not a hardcoded kind. The
|
|
68
77
|
top-level keys:
|
|
@@ -1147,9 +1156,16 @@ proof claims zero on a `null` line, or when known spend exceeds the declared cap
|
|
|
1147
1156
|
`humanish.run-status.v1` is `status.json`, written inside each run directory by
|
|
1148
1157
|
every route at run start, refreshed on a fixed cadence while the run is
|
|
1149
1158
|
alive, and finalized when it ends: `{ schema, runId, state: running |
|
|
1150
|
-
finished | interrupted, mode, study?, pid, startedAt, updatedAt, completedAt?,
|
|
1159
|
+
finished | interrupted, mode, study?, sandboxes?, pid, startedAt, updatedAt, completedAt?,
|
|
1151
1160
|
signal?, outcome? }`. A record written by 0.108 or earlier also has `lab`, with the same value as
|
|
1152
|
-
`study`, and readers accept it.
|
|
1161
|
+
`study`, and readers accept it. `sandboxes: none` is written at run start by a route that has no
|
|
1162
|
+
way to create a sandbox for the run: a scripted run against an `app-url` subject. A run that may
|
|
1163
|
+
create one has no `sandboxes` field. `humanish reclaim` reports such a run `clean` with
|
|
1164
|
+
`reason: no-sandbox` without contacting E2B only when its `run.json` agrees: the scripted route
|
|
1165
|
+
wrote it, its subject is no clone, it lists no provider resource or desktop minutes, and its
|
|
1166
|
+
outcome marks no sandbox or provider cleanup unconfirmed. A missing or contradicting `run.json`,
|
|
1167
|
+
a journal line or an earlier reclaim receipt that names a sandbox sends the run through the
|
|
1168
|
+
normal E2B search.
|
|
1153
1169
|
`outcome` carries the bundle's `verdict`, `participants`, `estimatedCostUsd` and
|
|
1154
1170
|
`estimatedCostComplete` when the run finishes, with `ok` and `execution: { succeeded,
|
|
1155
1171
|
failures: [{ kind, message }], warnings? }` copied from `run.json`'s `outcome`
|
|
@@ -1203,7 +1219,7 @@ nothing at all until they completed.
|
|
|
1203
1219
|
It is a derived index, not evidence. `run.json` remains the evidence-of-record;
|
|
1204
1220
|
`verify` never gates on `status.json`, nothing in it is a claim about what a
|
|
1205
1221
|
participant did, and when the two disagree the bundle wins. Fields that cannot be
|
|
1206
|
-
rebuilt from `run.json`: `pid`, `startedAt`, `updatedAt` and `
|
|
1222
|
+
rebuilt from `run.json`: `pid`, `startedAt`, `updatedAt`, `completedAt` and `sandboxes`, which
|
|
1207
1223
|
no bundle records, and, on a record written before `run.json` carried an
|
|
1208
1224
|
`outcome`, `outcome.ok` and `outcome.execution`. A `running` record whose `updatedAt` is older than three
|
|
1209
1225
|
touch intervals is interrupted, not alive. A dropped connection or a killed
|
|
@@ -1532,7 +1548,9 @@ sandbox. 0.109.0 removed the 0.107 names (`runLab`, `RunLabOptions`, `parseLabCo
|
|
|
1532
1548
|
`durationMs` on completed phases. Computer use sends a participant target, shared world the
|
|
1533
1549
|
subject.
|
|
1534
1550
|
- `analysis-started` and `analysis-finished`, around post-run analysis. `analysis-finished`
|
|
1535
|
-
fires after success, failure and cancellation.
|
|
1551
|
+
fires after success, failure and cancellation. Neither fires for a run where no participant's
|
|
1552
|
+
session started, such as one whose E2B key was refused before a desktop existed. A session that
|
|
1553
|
+
started and then threw counts as started. That run's analysis outcome is still recorded.
|
|
1536
1554
|
|
|
1537
1555
|
`onEvent` is never awaited, and it changes no output: subject phases still print to stderr. A
|
|
1538
1556
|
throw or a rejected promise becomes a redacted run warning.
|
|
@@ -1543,6 +1561,16 @@ Refusals:
|
|
|
1543
1561
|
a preview or scripted study, `createProvider` off computer use, or `prepareDesktop` where no E2B
|
|
1544
1562
|
desktop exists. The message names the option and the route. The same code refuses a field
|
|
1545
1563
|
`RunStudyOptions` no longer has (below); that message names the field and where its job went.
|
|
1564
|
+
- `HUMANISH_STUDY_V2_UNSUPPORTED`: the config is `humanish.lab.v2`, or it still sets a
|
|
1565
|
+
`StudyConfig` field of humanish 0.110 that 0.111.0 renamed: `actors`, a `scenario` object,
|
|
1566
|
+
`execution.caps`, `subject.topology`, `personas`, or `count`, `lanes`, `roster` or `laneFocus` on
|
|
1567
|
+
`actor`. The message names each one's v3 field. The
|
|
1568
|
+
planners read only the v3 fields, so a budget left in `execution.caps` would otherwise run
|
|
1569
|
+
uncapped.
|
|
1570
|
+
- `HUMANISH_STUDY_INVALID`: the config has no `actor` object, or its `route` is missing or is not
|
|
1571
|
+
the route its subject and actor take. The message is the one `parseStudy` gives.
|
|
1572
|
+
|
|
1573
|
+
`runStudy` checks the config before the options, so a config refusal comes first.
|
|
1546
1574
|
|
|
1547
1575
|
`rerun.laneIds`, the older name of `rerun.participantIds`, was removed in 0.107.0. A caller that
|
|
1548
1576
|
still passes it is refused with `HUMANISH_STUDY_OPTION_UNSUPPORTED`; use `rerun.participantIds`.
|
package/package.json
CHANGED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { StudyRoute } from "../routing.js";
|
|
2
|
-
import { type StudyParseFailure } from "../types.js";
|
|
3
|
-
export interface StudyDocument {
|
|
4
|
-
readonly route: StudyRoute;
|
|
5
|
-
/** The same document in the humanish.lab.v2 spelling. */
|
|
6
|
-
readonly v2: Record<string, unknown>;
|
|
7
|
-
/** For each expanded participant, the index of the `participants` entry it came from. */
|
|
8
|
-
readonly participantSource: readonly number[];
|
|
9
|
-
}
|
|
10
|
-
type Parsed<T> = {
|
|
11
|
-
ok: true;
|
|
12
|
-
value: T;
|
|
13
|
-
} | StudyParseFailure;
|
|
14
|
-
/** Rewrite a humanish.study.v3 document into humanish.lab.v2, or refuse it. */
|
|
15
|
-
export declare function studyToV2(raw: Record<string, unknown>): Parsed<StudyDocument>;
|
|
16
|
-
/**
|
|
17
|
-
* Spell a v2 parser message the way the study file is written: `actors[0].lanes[3]` becomes the
|
|
18
|
-
* `participants` entry it came from, `execution.caps` and `scenario.caps` become `caps`, and so on.
|
|
19
|
-
*/
|
|
20
|
-
export declare function studySpelling(message: string, route: StudyRoute, participantSource: readonly number[]): string;
|
|
21
|
-
export {};
|
|
File without changes
|