hanoman 0.9.4 → 0.9.5

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.
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DalangHanomanScreen-gKHFySwO.js","assets/react-DfGhg7ZW.js","assets/markdown-CWEY34jk.js","assets/xterm-3VOAfa_q.js","assets/TeamScreen-CJ-AeCGM.js","assets/live-B0yZ2azt.js","assets/TriageScreen-HE-JKaXl.js","assets/TerminalScreen-BTPwK0A4.js","assets/IdeScreen-ZmtKIwRL.js","assets/highlight-HK3IjCTX.js","assets/DocPreviewModal-DCal7m9E.js","assets/IdeScreen-BfC0goYb.css","assets/VpsScreen-CiRV0mMK.js","assets/SchedulerScreen-C1T7kZ5F.js","assets/LeadScreen-BGP15mjr.js","assets/DocsWorkspace-BMAVKbqw.js","assets/ChangelogScreen-DV7czksP.js","assets/ReviewScreen-BB-yKNIm.js","assets/SettingsScreen-JT8uQrhn.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DalangHanomanScreen-Go6ETy3r.js","assets/react-DfGhg7ZW.js","assets/markdown-CWEY34jk.js","assets/xterm-3VOAfa_q.js","assets/TeamScreen-DzKZHKyR.js","assets/live-Jy46oHWQ.js","assets/TriageScreen-D5iyoK-3.js","assets/TerminalScreen-mLiyHYQV.js","assets/IdeScreen-DFRme37j.js","assets/highlight-HK3IjCTX.js","assets/DocPreviewModal-CZ4rZ_h-.js","assets/IdeScreen-BfC0goYb.css","assets/VpsScreen-BhjULQaT.js","assets/SchedulerScreen-Bii5m-K1.js","assets/LeadScreen-ASzNKRLX.js","assets/DocsWorkspace-BDfP0ML1.js","assets/ChangelogScreen-C-C71Zn_.js","assets/ReviewScreen-CyFWhxL1.js","assets/SettingsScreen-siSgzEnH.js"])))=>i.map(i=>d[i]);
2
2
  var op=Object.defineProperty;var lp=(e,t,a)=>t in e?op(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var Rl=(e,t,a)=>lp(e,typeof t!="symbol"?t+"":t,a);import{r as oa,a as dp,R as u,B as cp,u as up,b as hp}from"./react-DfGhg7ZW.js";import{m as mp,p as pp}from"./markdown-CWEY34jk.js";import{D as gp,o as fp}from"./xterm-3VOAfa_q.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function a(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(r){if(r.ep)return;r.ep=!0;const s=a(r);fetch(r.href,s)}})();var Kc={exports:{}},Ys={};/**
3
3
  * @license React
4
4
  * react-jsx-runtime.production.min.js
@@ -7,7 +7,7 @@ var op=Object.defineProperty;var lp=(e,t,a)=>t in e?op(e,t,{enumerable:!0,config
7
7
  *
8
8
  * This source code is licensed under the MIT license found in the
9
9
  * LICENSE file in the root directory of this source tree.
10
- */var bp=oa,kp=Symbol.for("react.element"),yp=Symbol.for("react.fragment"),vp=Object.prototype.hasOwnProperty,xp=bp.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,wp={key:!0,ref:!0,__self:!0,__source:!0};function Vc(e,t,a){var i,r={},s=null,o=null;a!==void 0&&(s=""+a),t.key!==void 0&&(s=""+t.key),t.ref!==void 0&&(o=t.ref);for(i in t)vp.call(t,i)&&!wp.hasOwnProperty(i)&&(r[i]=t[i]);if(e&&e.defaultProps)for(i in t=e.defaultProps,t)r[i]===void 0&&(r[i]=t[i]);return{$$typeof:kp,type:e,key:s,ref:o,props:r,_owner:xp.current}}Ys.Fragment=yp;Ys.jsx=Vc;Ys.jsxs=Vc;Kc.exports=Ys;var n=Kc.exports,Yc,Ll=dp;Yc=Ll.createRoot,Ll.hydrateRoot;const jp="modulepreload",Sp=function(e){return"/"+e},$l={},la=function(t,a,i){let r=Promise.resolve();if(a&&a.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(a.map(d=>{if(d=Sp(d),d in $l)return;$l[d]=!0;const c=d.endsWith(".css"),h=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${d}"]${h}`))return;const p=document.createElement("link");if(p.rel=c?"stylesheet":jp,c||(p.as="script"),p.crossOrigin="",p.href=d,l&&p.setAttribute("nonce",l),document.head.appendChild(p),c)return new Promise((f,b)=>{p.addEventListener("load",f),p.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${d}`)))})}))}function s(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&s(l.reason);return t().catch(s)})};var it;(function(e){e.assertEqual=r=>{};function t(r){}e.assertIs=t;function a(r){throw new Error}e.assertNever=a,e.arrayToEnum=r=>{const s={};for(const o of r)s[o]=o;return s},e.getValidEnumValues=r=>{const s=e.objectKeys(r).filter(l=>typeof r[r[l]]!="number"),o={};for(const l of s)o[l]=r[l];return e.objectValues(o)},e.objectValues=r=>e.objectKeys(r).map(function(s){return r[s]}),e.objectKeys=typeof Object.keys=="function"?r=>Object.keys(r):r=>{const s=[];for(const o in r)Object.prototype.hasOwnProperty.call(r,o)&&s.push(o);return s},e.find=(r,s)=>{for(const o of r)if(s(o))return o},e.isInteger=typeof Number.isInteger=="function"?r=>Number.isInteger(r):r=>typeof r=="number"&&Number.isFinite(r)&&Math.floor(r)===r;function i(r,s=" | "){return r.map(o=>typeof o=="string"?`'${o}'`:o).join(s)}e.joinValues=i,e.jsonStringifyReplacer=(r,s)=>typeof s=="bigint"?s.toString():s})(it||(it={}));var Bl;(function(e){e.mergeShapes=(t,a)=>({...t,...a})})(Bl||(Bl={}));const xe=it.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),un=e=>{switch(typeof e){case"undefined":return xe.undefined;case"string":return xe.string;case"number":return Number.isNaN(e)?xe.nan:xe.number;case"boolean":return xe.boolean;case"function":return xe.function;case"bigint":return xe.bigint;case"symbol":return xe.symbol;case"object":return Array.isArray(e)?xe.array:e===null?xe.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?xe.promise:typeof Map<"u"&&e instanceof Map?xe.map:typeof Set<"u"&&e instanceof Set?xe.set:typeof Date<"u"&&e instanceof Date?xe.date:xe.object;default:return xe.unknown}},te=it.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class Qa extends Error{get errors(){return this.issues}constructor(t){super(),this.issues=[],this.addIssue=i=>{this.issues=[...this.issues,i]},this.addIssues=(i=[])=>{this.issues=[...this.issues,...i]};const a=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,a):this.__proto__=a,this.name="ZodError",this.issues=t}format(t){const a=t||function(s){return s.message},i={_errors:[]},r=s=>{for(const o of s.issues)if(o.code==="invalid_union")o.unionErrors.map(r);else if(o.code==="invalid_return_type")r(o.returnTypeError);else if(o.code==="invalid_arguments")r(o.argumentsError);else if(o.path.length===0)i._errors.push(a(o));else{let l=i,d=0;for(;d<o.path.length;){const c=o.path[d];d===o.path.length-1?(l[c]=l[c]||{_errors:[]},l[c]._errors.push(a(o))):l[c]=l[c]||{_errors:[]},l=l[c],d++}}};return r(this),i}static assert(t){if(!(t instanceof Qa))throw new Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,it.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(t=a=>a.message){const a={},i=[];for(const r of this.issues)if(r.path.length>0){const s=r.path[0];a[s]=a[s]||[],a[s].push(t(r))}else i.push(t(r));return{formErrors:i,fieldErrors:a}}get formErrors(){return this.flatten()}}Qa.create=e=>new Qa(e);const eo=(e,t)=>{let a;switch(e.code){case te.invalid_type:e.received===xe.undefined?a="Required":a=`Expected ${e.expected}, received ${e.received}`;break;case te.invalid_literal:a=`Invalid literal value, expected ${JSON.stringify(e.expected,it.jsonStringifyReplacer)}`;break;case te.unrecognized_keys:a=`Unrecognized key(s) in object: ${it.joinValues(e.keys,", ")}`;break;case te.invalid_union:a="Invalid input";break;case te.invalid_union_discriminator:a=`Invalid discriminator value. Expected ${it.joinValues(e.options)}`;break;case te.invalid_enum_value:a=`Invalid enum value. Expected ${it.joinValues(e.options)}, received '${e.received}'`;break;case te.invalid_arguments:a="Invalid function arguments";break;case te.invalid_return_type:a="Invalid function return type";break;case te.invalid_date:a="Invalid date";break;case te.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(a=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(a=`${a} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?a=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?a=`Invalid input: must end with "${e.validation.endsWith}"`:it.assertNever(e.validation):e.validation!=="regex"?a=`Invalid ${e.validation}`:a="Invalid";break;case te.too_small:e.type==="array"?a=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?a=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?a=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="bigint"?a=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?a=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:a="Invalid input";break;case te.too_big:e.type==="array"?a=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?a=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?a=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?a=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?a=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:a="Invalid input";break;case te.custom:a="Invalid input";break;case te.invalid_intersection_types:a="Intersection results could not be merged";break;case te.not_multiple_of:a=`Number must be a multiple of ${e.multipleOf}`;break;case te.not_finite:a="Number must be finite";break;default:a=t.defaultError,it.assertNever(e)}return{message:a}};let _p=eo;function Cp(){return _p}const Tp=e=>{const{data:t,path:a,errorMaps:i,issueData:r}=e,s=[...a,...r.path||[]],o={...r,path:s};if(r.message!==void 0)return{...r,path:s,message:r.message};let l="";const d=i.filter(c=>!!c).slice().reverse();for(const c of d)l=c(o,{data:t,defaultError:l}).message;return{...r,path:s,message:l}};function pe(e,t){const a=Cp(),i=Tp({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,a,a===eo?void 0:eo].filter(r=>!!r)});e.common.issues.push(i)}class Xt{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,a){const i=[];for(const r of a){if(r.status==="aborted")return Le;r.status==="dirty"&&t.dirty(),i.push(r.value)}return{status:t.value,value:i}}static async mergeObjectAsync(t,a){const i=[];for(const r of a){const s=await r.key,o=await r.value;i.push({key:s,value:o})}return Xt.mergeObjectSync(t,i)}static mergeObjectSync(t,a){const i={};for(const r of a){const{key:s,value:o}=r;if(s.status==="aborted"||o.status==="aborted")return Le;s.status==="dirty"&&t.dirty(),o.status==="dirty"&&t.dirty(),s.value!=="__proto__"&&(typeof o.value<"u"||r.alwaysSet)&&(i[s.value]=o.value)}return{status:t.value,value:i}}}const Le=Object.freeze({status:"aborted"}),Ri=e=>({status:"dirty",value:e}),da=e=>({status:"valid",value:e}),Dl=e=>e.status==="aborted",Ol=e=>e.status==="dirty",li=e=>e.status==="valid",Ts=e=>typeof Promise<"u"&&e instanceof Promise;var _e;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t==null?void 0:t.message})(_e||(_e={}));class Ma{constructor(t,a,i,r){this._cachedPath=[],this.parent=t,this.data=a,this._path=i,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const zl=(e,t)=>{if(li(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const a=new Qa(e.common.issues);return this._error=a,this._error}}};function Fe(e){if(!e)return{};const{errorMap:t,invalid_type_error:a,required_error:i,description:r}=e;if(t&&(a||i))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:r}:{errorMap:(o,l)=>{const{message:d}=e;return o.code==="invalid_enum_value"?{message:d??l.defaultError}:typeof l.data>"u"?{message:d??i??l.defaultError}:o.code!=="invalid_type"?{message:l.defaultError}:{message:d??a??l.defaultError}},description:r}}class Ve{get description(){return this._def.description}_getType(t){return un(t.data)}_getOrReturnCtx(t,a){return a||{common:t.parent.common,data:t.data,parsedType:un(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new Xt,ctx:{common:t.parent.common,data:t.data,parsedType:un(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){const a=this._parse(t);if(Ts(a))throw new Error("Synchronous parse encountered promise.");return a}_parseAsync(t){const a=this._parse(t);return Promise.resolve(a)}parse(t,a){const i=this.safeParse(t,a);if(i.success)return i.data;throw i.error}safeParse(t,a){const i={common:{issues:[],async:(a==null?void 0:a.async)??!1,contextualErrorMap:a==null?void 0:a.errorMap},path:(a==null?void 0:a.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:un(t)},r=this._parseSync({data:t,path:i.path,parent:i});return zl(i,r)}"~validate"(t){var i,r;const a={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:un(t)};if(!this["~standard"].async)try{const s=this._parseSync({data:t,path:[],parent:a});return li(s)?{value:s.value}:{issues:a.common.issues}}catch(s){(r=(i=s==null?void 0:s.message)==null?void 0:i.toLowerCase())!=null&&r.includes("encountered")&&(this["~standard"].async=!0),a.common={issues:[],async:!0}}return this._parseAsync({data:t,path:[],parent:a}).then(s=>li(s)?{value:s.value}:{issues:a.common.issues})}async parseAsync(t,a){const i=await this.safeParseAsync(t,a);if(i.success)return i.data;throw i.error}async safeParseAsync(t,a){const i={common:{issues:[],contextualErrorMap:a==null?void 0:a.errorMap,async:!0},path:(a==null?void 0:a.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:un(t)},r=this._parse({data:t,path:i.path,parent:i}),s=await(Ts(r)?r:Promise.resolve(r));return zl(i,s)}refine(t,a){const i=r=>typeof a=="string"||typeof a>"u"?{message:a}:typeof a=="function"?a(r):a;return this._refinement((r,s)=>{const o=t(r),l=()=>s.addIssue({code:te.custom,...i(r)});return typeof Promise<"u"&&o instanceof Promise?o.then(d=>d?!0:(l(),!1)):o?!0:(l(),!1)})}refinement(t,a){return this._refinement((i,r)=>t(i)?!0:(r.addIssue(typeof a=="function"?a(i,r):a),!1))}_refinement(t){return new Ln({schema:this,typeName:$e.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:a=>this["~validate"](a)}}optional(){return Za.create(this,this._def)}nullable(){return $n.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Aa.create(this)}promise(){return Ls.create(this,this._def)}or(t){return Ms.create([this,t],this._def)}and(t){return Ps.create(this,t,this._def)}transform(t){return new Ln({...Fe(this._def),schema:this,typeName:$e.ZodEffects,effect:{type:"transform",transform:t}})}default(t){const a=typeof t=="function"?t:()=>t;return new $s({...Fe(this._def),innerType:this,defaultValue:a,typeName:$e.ZodDefault})}brand(){return new Qc({typeName:$e.ZodBranded,type:this,...Fe(this._def)})}catch(t){const a=typeof t=="function"?t:()=>t;return new Bs({...Fe(this._def),innerType:this,catchValue:a,typeName:$e.ZodCatch})}describe(t){const a=this.constructor;return new a({...this._def,description:t})}pipe(t){return Lo.create(this,t)}readonly(){return Ds.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const Ap=/^c[^\s-]{8,}$/i,Ep=/^[0-9a-z]+$/,Mp=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Pp=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Ip=/^[a-z0-9_-]{21}$/i,Rp=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Lp=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,$p=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Bp="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let fr;const Dp=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Op=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,zp=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Np=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Fp=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Hp=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Zc="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",Up=new RegExp(`^${Zc}$`);function Jc(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision==null&&(t=`${t}(\\.\\d+)?`);const a=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${a}`}function Gp(e){return new RegExp(`^${Jc(e)}$`)}function qp(e){let t=`${Zc}T${Jc(e)}`;const a=[];return a.push(e.local?"Z?":"Z"),e.offset&&a.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${a.join("|")})`,new RegExp(`^${t}$`)}function Wp(e,t){return!!((t==="v4"||!t)&&Dp.test(e)||(t==="v6"||!t)&&zp.test(e))}function Kp(e,t){if(!Rp.test(e))return!1;try{const[a]=e.split(".");if(!a)return!1;const i=a.replace(/-/g,"+").replace(/_/g,"/").padEnd(a.length+(4-a.length%4)%4,"="),r=JSON.parse(atob(i));return!(typeof r!="object"||r===null||"typ"in r&&(r==null?void 0:r.typ)!=="JWT"||!r.alg||t&&r.alg!==t)}catch{return!1}}function Vp(e,t){return!!((t==="v4"||!t)&&Op.test(e)||(t==="v6"||!t)&&Np.test(e))}class Ca extends Ve{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==xe.string){const s=this._getOrReturnCtx(t);return pe(s,{code:te.invalid_type,expected:xe.string,received:s.parsedType}),Le}const i=new Xt;let r;for(const s of this._def.checks)if(s.kind==="min")t.data.length<s.value&&(r=this._getOrReturnCtx(t,r),pe(r,{code:te.too_small,minimum:s.value,type:"string",inclusive:!0,exact:!1,message:s.message}),i.dirty());else if(s.kind==="max")t.data.length>s.value&&(r=this._getOrReturnCtx(t,r),pe(r,{code:te.too_big,maximum:s.value,type:"string",inclusive:!0,exact:!1,message:s.message}),i.dirty());else if(s.kind==="length"){const o=t.data.length>s.value,l=t.data.length<s.value;(o||l)&&(r=this._getOrReturnCtx(t,r),o?pe(r,{code:te.too_big,maximum:s.value,type:"string",inclusive:!0,exact:!0,message:s.message}):l&&pe(r,{code:te.too_small,minimum:s.value,type:"string",inclusive:!0,exact:!0,message:s.message}),i.dirty())}else if(s.kind==="email")$p.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"email",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="emoji")fr||(fr=new RegExp(Bp,"u")),fr.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"emoji",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="uuid")Pp.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"uuid",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="nanoid")Ip.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"nanoid",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="cuid")Ap.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"cuid",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="cuid2")Ep.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"cuid2",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="ulid")Mp.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"ulid",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="url")try{new URL(t.data)}catch{r=this._getOrReturnCtx(t,r),pe(r,{validation:"url",code:te.invalid_string,message:s.message}),i.dirty()}else s.kind==="regex"?(s.regex.lastIndex=0,s.regex.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"regex",code:te.invalid_string,message:s.message}),i.dirty())):s.kind==="trim"?t.data=t.data.trim():s.kind==="includes"?t.data.includes(s.value,s.position)||(r=this._getOrReturnCtx(t,r),pe(r,{code:te.invalid_string,validation:{includes:s.value,position:s.position},message:s.message}),i.dirty()):s.kind==="toLowerCase"?t.data=t.data.toLowerCase():s.kind==="toUpperCase"?t.data=t.data.toUpperCase():s.kind==="startsWith"?t.data.startsWith(s.value)||(r=this._getOrReturnCtx(t,r),pe(r,{code:te.invalid_string,validation:{startsWith:s.value},message:s.message}),i.dirty()):s.kind==="endsWith"?t.data.endsWith(s.value)||(r=this._getOrReturnCtx(t,r),pe(r,{code:te.invalid_string,validation:{endsWith:s.value},message:s.message}),i.dirty()):s.kind==="datetime"?qp(s).test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{code:te.invalid_string,validation:"datetime",message:s.message}),i.dirty()):s.kind==="date"?Up.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{code:te.invalid_string,validation:"date",message:s.message}),i.dirty()):s.kind==="time"?Gp(s).test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{code:te.invalid_string,validation:"time",message:s.message}),i.dirty()):s.kind==="duration"?Lp.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"duration",code:te.invalid_string,message:s.message}),i.dirty()):s.kind==="ip"?Wp(t.data,s.version)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"ip",code:te.invalid_string,message:s.message}),i.dirty()):s.kind==="jwt"?Kp(t.data,s.alg)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"jwt",code:te.invalid_string,message:s.message}),i.dirty()):s.kind==="cidr"?Vp(t.data,s.version)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"cidr",code:te.invalid_string,message:s.message}),i.dirty()):s.kind==="base64"?Fp.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"base64",code:te.invalid_string,message:s.message}),i.dirty()):s.kind==="base64url"?Hp.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"base64url",code:te.invalid_string,message:s.message}),i.dirty()):it.assertNever(s);return{status:i.value,value:t.data}}_regex(t,a,i){return this.refinement(r=>t.test(r),{validation:a,code:te.invalid_string,..._e.errToObj(i)})}_addCheck(t){return new Ca({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",..._e.errToObj(t)})}url(t){return this._addCheck({kind:"url",..._e.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",..._e.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",..._e.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",..._e.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",..._e.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",..._e.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",..._e.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",..._e.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",..._e.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",..._e.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",..._e.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",..._e.errToObj(t)})}datetime(t){return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,offset:(t==null?void 0:t.offset)??!1,local:(t==null?void 0:t.local)??!1,..._e.errToObj(t==null?void 0:t.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){return typeof t=="string"?this._addCheck({kind:"time",precision:null,message:t}):this._addCheck({kind:"time",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,..._e.errToObj(t==null?void 0:t.message)})}duration(t){return this._addCheck({kind:"duration",..._e.errToObj(t)})}regex(t,a){return this._addCheck({kind:"regex",regex:t,..._e.errToObj(a)})}includes(t,a){return this._addCheck({kind:"includes",value:t,position:a==null?void 0:a.position,..._e.errToObj(a==null?void 0:a.message)})}startsWith(t,a){return this._addCheck({kind:"startsWith",value:t,..._e.errToObj(a)})}endsWith(t,a){return this._addCheck({kind:"endsWith",value:t,..._e.errToObj(a)})}min(t,a){return this._addCheck({kind:"min",value:t,..._e.errToObj(a)})}max(t,a){return this._addCheck({kind:"max",value:t,..._e.errToObj(a)})}length(t,a){return this._addCheck({kind:"length",value:t,..._e.errToObj(a)})}nonempty(t){return this.min(1,_e.errToObj(t))}trim(){return new Ca({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new Ca({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new Ca({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find(t=>t.kind==="date")}get isTime(){return!!this._def.checks.find(t=>t.kind==="time")}get isDuration(){return!!this._def.checks.find(t=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(t=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find(t=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find(t=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find(t=>t.kind==="base64url")}get minLength(){let t=null;for(const a of this._def.checks)a.kind==="min"&&(t===null||a.value>t)&&(t=a.value);return t}get maxLength(){let t=null;for(const a of this._def.checks)a.kind==="max"&&(t===null||a.value<t)&&(t=a.value);return t}}Ca.create=e=>new Ca({checks:[],typeName:$e.ZodString,coerce:(e==null?void 0:e.coerce)??!1,...Fe(e)});function Yp(e,t){const a=(e.toString().split(".")[1]||"").length,i=(t.toString().split(".")[1]||"").length,r=a>i?a:i,s=Number.parseInt(e.toFixed(r).replace(".","")),o=Number.parseInt(t.toFixed(r).replace(".",""));return s%o/10**r}class Mn extends Ve{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==xe.number){const s=this._getOrReturnCtx(t);return pe(s,{code:te.invalid_type,expected:xe.number,received:s.parsedType}),Le}let i;const r=new Xt;for(const s of this._def.checks)s.kind==="int"?it.isInteger(t.data)||(i=this._getOrReturnCtx(t,i),pe(i,{code:te.invalid_type,expected:"integer",received:"float",message:s.message}),r.dirty()):s.kind==="min"?(s.inclusive?t.data<s.value:t.data<=s.value)&&(i=this._getOrReturnCtx(t,i),pe(i,{code:te.too_small,minimum:s.value,type:"number",inclusive:s.inclusive,exact:!1,message:s.message}),r.dirty()):s.kind==="max"?(s.inclusive?t.data>s.value:t.data>=s.value)&&(i=this._getOrReturnCtx(t,i),pe(i,{code:te.too_big,maximum:s.value,type:"number",inclusive:s.inclusive,exact:!1,message:s.message}),r.dirty()):s.kind==="multipleOf"?Yp(t.data,s.value)!==0&&(i=this._getOrReturnCtx(t,i),pe(i,{code:te.not_multiple_of,multipleOf:s.value,message:s.message}),r.dirty()):s.kind==="finite"?Number.isFinite(t.data)||(i=this._getOrReturnCtx(t,i),pe(i,{code:te.not_finite,message:s.message}),r.dirty()):it.assertNever(s);return{status:r.value,value:t.data}}gte(t,a){return this.setLimit("min",t,!0,_e.toString(a))}gt(t,a){return this.setLimit("min",t,!1,_e.toString(a))}lte(t,a){return this.setLimit("max",t,!0,_e.toString(a))}lt(t,a){return this.setLimit("max",t,!1,_e.toString(a))}setLimit(t,a,i,r){return new Mn({...this._def,checks:[...this._def.checks,{kind:t,value:a,inclusive:i,message:_e.toString(r)}]})}_addCheck(t){return new Mn({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:_e.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:_e.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:_e.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:_e.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:_e.toString(t)})}multipleOf(t,a){return this._addCheck({kind:"multipleOf",value:t,message:_e.toString(a)})}finite(t){return this._addCheck({kind:"finite",message:_e.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:_e.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:_e.toString(t)})}get minValue(){let t=null;for(const a of this._def.checks)a.kind==="min"&&(t===null||a.value>t)&&(t=a.value);return t}get maxValue(){let t=null;for(const a of this._def.checks)a.kind==="max"&&(t===null||a.value<t)&&(t=a.value);return t}get isInt(){return!!this._def.checks.find(t=>t.kind==="int"||t.kind==="multipleOf"&&it.isInteger(t.value))}get isFinite(){let t=null,a=null;for(const i of this._def.checks){if(i.kind==="finite"||i.kind==="int"||i.kind==="multipleOf")return!0;i.kind==="min"?(a===null||i.value>a)&&(a=i.value):i.kind==="max"&&(t===null||i.value<t)&&(t=i.value)}return Number.isFinite(a)&&Number.isFinite(t)}}Mn.create=e=>new Mn({checks:[],typeName:$e.ZodNumber,coerce:(e==null?void 0:e.coerce)||!1,...Fe(e)});class Pn extends Ve{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==xe.bigint)return this._getInvalidInput(t);let i;const r=new Xt;for(const s of this._def.checks)s.kind==="min"?(s.inclusive?t.data<s.value:t.data<=s.value)&&(i=this._getOrReturnCtx(t,i),pe(i,{code:te.too_small,type:"bigint",minimum:s.value,inclusive:s.inclusive,message:s.message}),r.dirty()):s.kind==="max"?(s.inclusive?t.data>s.value:t.data>=s.value)&&(i=this._getOrReturnCtx(t,i),pe(i,{code:te.too_big,type:"bigint",maximum:s.value,inclusive:s.inclusive,message:s.message}),r.dirty()):s.kind==="multipleOf"?t.data%s.value!==BigInt(0)&&(i=this._getOrReturnCtx(t,i),pe(i,{code:te.not_multiple_of,multipleOf:s.value,message:s.message}),r.dirty()):it.assertNever(s);return{status:r.value,value:t.data}}_getInvalidInput(t){const a=this._getOrReturnCtx(t);return pe(a,{code:te.invalid_type,expected:xe.bigint,received:a.parsedType}),Le}gte(t,a){return this.setLimit("min",t,!0,_e.toString(a))}gt(t,a){return this.setLimit("min",t,!1,_e.toString(a))}lte(t,a){return this.setLimit("max",t,!0,_e.toString(a))}lt(t,a){return this.setLimit("max",t,!1,_e.toString(a))}setLimit(t,a,i,r){return new Pn({...this._def,checks:[...this._def.checks,{kind:t,value:a,inclusive:i,message:_e.toString(r)}]})}_addCheck(t){return new Pn({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:_e.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:_e.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:_e.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:_e.toString(t)})}multipleOf(t,a){return this._addCheck({kind:"multipleOf",value:t,message:_e.toString(a)})}get minValue(){let t=null;for(const a of this._def.checks)a.kind==="min"&&(t===null||a.value>t)&&(t=a.value);return t}get maxValue(){let t=null;for(const a of this._def.checks)a.kind==="max"&&(t===null||a.value<t)&&(t=a.value);return t}}Pn.create=e=>new Pn({checks:[],typeName:$e.ZodBigInt,coerce:(e==null?void 0:e.coerce)??!1,...Fe(e)});class As extends Ve{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==xe.boolean){const i=this._getOrReturnCtx(t);return pe(i,{code:te.invalid_type,expected:xe.boolean,received:i.parsedType}),Le}return da(t.data)}}As.create=e=>new As({typeName:$e.ZodBoolean,coerce:(e==null?void 0:e.coerce)||!1,...Fe(e)});class di extends Ve{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==xe.date){const s=this._getOrReturnCtx(t);return pe(s,{code:te.invalid_type,expected:xe.date,received:s.parsedType}),Le}if(Number.isNaN(t.data.getTime())){const s=this._getOrReturnCtx(t);return pe(s,{code:te.invalid_date}),Le}const i=new Xt;let r;for(const s of this._def.checks)s.kind==="min"?t.data.getTime()<s.value&&(r=this._getOrReturnCtx(t,r),pe(r,{code:te.too_small,message:s.message,inclusive:!0,exact:!1,minimum:s.value,type:"date"}),i.dirty()):s.kind==="max"?t.data.getTime()>s.value&&(r=this._getOrReturnCtx(t,r),pe(r,{code:te.too_big,message:s.message,inclusive:!0,exact:!1,maximum:s.value,type:"date"}),i.dirty()):it.assertNever(s);return{status:i.value,value:new Date(t.data.getTime())}}_addCheck(t){return new di({...this._def,checks:[...this._def.checks,t]})}min(t,a){return this._addCheck({kind:"min",value:t.getTime(),message:_e.toString(a)})}max(t,a){return this._addCheck({kind:"max",value:t.getTime(),message:_e.toString(a)})}get minDate(){let t=null;for(const a of this._def.checks)a.kind==="min"&&(t===null||a.value>t)&&(t=a.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(const a of this._def.checks)a.kind==="max"&&(t===null||a.value<t)&&(t=a.value);return t!=null?new Date(t):null}}di.create=e=>new di({checks:[],coerce:(e==null?void 0:e.coerce)||!1,typeName:$e.ZodDate,...Fe(e)});class Nl extends Ve{_parse(t){if(this._getType(t)!==xe.symbol){const i=this._getOrReturnCtx(t);return pe(i,{code:te.invalid_type,expected:xe.symbol,received:i.parsedType}),Le}return da(t.data)}}Nl.create=e=>new Nl({typeName:$e.ZodSymbol,...Fe(e)});class Es extends Ve{_parse(t){if(this._getType(t)!==xe.undefined){const i=this._getOrReturnCtx(t);return pe(i,{code:te.invalid_type,expected:xe.undefined,received:i.parsedType}),Le}return da(t.data)}}Es.create=e=>new Es({typeName:$e.ZodUndefined,...Fe(e)});class to extends Ve{_parse(t){if(this._getType(t)!==xe.null){const i=this._getOrReturnCtx(t);return pe(i,{code:te.invalid_type,expected:xe.null,received:i.parsedType}),Le}return da(t.data)}}to.create=e=>new to({typeName:$e.ZodNull,...Fe(e)});class Fl extends Ve{constructor(){super(...arguments),this._any=!0}_parse(t){return da(t.data)}}Fl.create=e=>new Fl({typeName:$e.ZodAny,...Fe(e)});class ao extends Ve{constructor(){super(...arguments),this._unknown=!0}_parse(t){return da(t.data)}}ao.create=e=>new ao({typeName:$e.ZodUnknown,...Fe(e)});class mn extends Ve{_parse(t){const a=this._getOrReturnCtx(t);return pe(a,{code:te.invalid_type,expected:xe.never,received:a.parsedType}),Le}}mn.create=e=>new mn({typeName:$e.ZodNever,...Fe(e)});class Hl extends Ve{_parse(t){if(this._getType(t)!==xe.undefined){const i=this._getOrReturnCtx(t);return pe(i,{code:te.invalid_type,expected:xe.void,received:i.parsedType}),Le}return da(t.data)}}Hl.create=e=>new Hl({typeName:$e.ZodVoid,...Fe(e)});class Aa extends Ve{_parse(t){const{ctx:a,status:i}=this._processInputParams(t),r=this._def;if(a.parsedType!==xe.array)return pe(a,{code:te.invalid_type,expected:xe.array,received:a.parsedType}),Le;if(r.exactLength!==null){const o=a.data.length>r.exactLength.value,l=a.data.length<r.exactLength.value;(o||l)&&(pe(a,{code:o?te.too_big:te.too_small,minimum:l?r.exactLength.value:void 0,maximum:o?r.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:r.exactLength.message}),i.dirty())}if(r.minLength!==null&&a.data.length<r.minLength.value&&(pe(a,{code:te.too_small,minimum:r.minLength.value,type:"array",inclusive:!0,exact:!1,message:r.minLength.message}),i.dirty()),r.maxLength!==null&&a.data.length>r.maxLength.value&&(pe(a,{code:te.too_big,maximum:r.maxLength.value,type:"array",inclusive:!0,exact:!1,message:r.maxLength.message}),i.dirty()),a.common.async)return Promise.all([...a.data].map((o,l)=>r.type._parseAsync(new Ma(a,o,a.path,l)))).then(o=>Xt.mergeArray(i,o));const s=[...a.data].map((o,l)=>r.type._parseSync(new Ma(a,o,a.path,l)));return Xt.mergeArray(i,s)}get element(){return this._def.type}min(t,a){return new Aa({...this._def,minLength:{value:t,message:_e.toString(a)}})}max(t,a){return new Aa({...this._def,maxLength:{value:t,message:_e.toString(a)}})}length(t,a){return new Aa({...this._def,exactLength:{value:t,message:_e.toString(a)}})}nonempty(t){return this.min(1,t)}}Aa.create=(e,t)=>new Aa({type:e,minLength:null,maxLength:null,exactLength:null,typeName:$e.ZodArray,...Fe(t)});function Qn(e){if(e instanceof _t){const t={};for(const a in e.shape){const i=e.shape[a];t[a]=Za.create(Qn(i))}return new _t({...e._def,shape:()=>t})}else return e instanceof Aa?new Aa({...e._def,type:Qn(e.element)}):e instanceof Za?Za.create(Qn(e.unwrap())):e instanceof $n?$n.create(Qn(e.unwrap())):e instanceof In?In.create(e.items.map(t=>Qn(t))):e}class _t extends Ve{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const t=this._def.shape(),a=it.objectKeys(t);return this._cached={shape:t,keys:a},this._cached}_parse(t){if(this._getType(t)!==xe.object){const c=this._getOrReturnCtx(t);return pe(c,{code:te.invalid_type,expected:xe.object,received:c.parsedType}),Le}const{status:i,ctx:r}=this._processInputParams(t),{shape:s,keys:o}=this._getCached(),l=[];if(!(this._def.catchall instanceof mn&&this._def.unknownKeys==="strip"))for(const c in r.data)o.includes(c)||l.push(c);const d=[];for(const c of o){const h=s[c],p=r.data[c];d.push({key:{status:"valid",value:c},value:h._parse(new Ma(r,p,r.path,c)),alwaysSet:c in r.data})}if(this._def.catchall instanceof mn){const c=this._def.unknownKeys;if(c==="passthrough")for(const h of l)d.push({key:{status:"valid",value:h},value:{status:"valid",value:r.data[h]}});else if(c==="strict")l.length>0&&(pe(r,{code:te.unrecognized_keys,keys:l}),i.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const c=this._def.catchall;for(const h of l){const p=r.data[h];d.push({key:{status:"valid",value:h},value:c._parse(new Ma(r,p,r.path,h)),alwaysSet:h in r.data})}}return r.common.async?Promise.resolve().then(async()=>{const c=[];for(const h of d){const p=await h.key,f=await h.value;c.push({key:p,value:f,alwaysSet:h.alwaysSet})}return c}).then(c=>Xt.mergeObjectSync(i,c)):Xt.mergeObjectSync(i,d)}get shape(){return this._def.shape()}strict(t){return _e.errToObj,new _t({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(a,i)=>{var s,o;const r=((o=(s=this._def).errorMap)==null?void 0:o.call(s,a,i).message)??i.defaultError;return a.code==="unrecognized_keys"?{message:_e.errToObj(t).message??r}:{message:r}}}:{}})}strip(){return new _t({...this._def,unknownKeys:"strip"})}passthrough(){return new _t({...this._def,unknownKeys:"passthrough"})}extend(t){return new _t({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new _t({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:$e.ZodObject})}setKey(t,a){return this.augment({[t]:a})}catchall(t){return new _t({...this._def,catchall:t})}pick(t){const a={};for(const i of it.objectKeys(t))t[i]&&this.shape[i]&&(a[i]=this.shape[i]);return new _t({...this._def,shape:()=>a})}omit(t){const a={};for(const i of it.objectKeys(this.shape))t[i]||(a[i]=this.shape[i]);return new _t({...this._def,shape:()=>a})}deepPartial(){return Qn(this)}partial(t){const a={};for(const i of it.objectKeys(this.shape)){const r=this.shape[i];t&&!t[i]?a[i]=r:a[i]=r.optional()}return new _t({...this._def,shape:()=>a})}required(t){const a={};for(const i of it.objectKeys(this.shape))if(t&&!t[i])a[i]=this.shape[i];else{let s=this.shape[i];for(;s instanceof Za;)s=s._def.innerType;a[i]=s}return new _t({...this._def,shape:()=>a})}keyof(){return Xc(it.objectKeys(this.shape))}}_t.create=(e,t)=>new _t({shape:()=>e,unknownKeys:"strip",catchall:mn.create(),typeName:$e.ZodObject,...Fe(t)});_t.strictCreate=(e,t)=>new _t({shape:()=>e,unknownKeys:"strict",catchall:mn.create(),typeName:$e.ZodObject,...Fe(t)});_t.lazycreate=(e,t)=>new _t({shape:e,unknownKeys:"strip",catchall:mn.create(),typeName:$e.ZodObject,...Fe(t)});class Ms extends Ve{_parse(t){const{ctx:a}=this._processInputParams(t),i=this._def.options;function r(s){for(const l of s)if(l.result.status==="valid")return l.result;for(const l of s)if(l.result.status==="dirty")return a.common.issues.push(...l.ctx.common.issues),l.result;const o=s.map(l=>new Qa(l.ctx.common.issues));return pe(a,{code:te.invalid_union,unionErrors:o}),Le}if(a.common.async)return Promise.all(i.map(async s=>{const o={...a,common:{...a.common,issues:[]},parent:null};return{result:await s._parseAsync({data:a.data,path:a.path,parent:o}),ctx:o}})).then(r);{let s;const o=[];for(const d of i){const c={...a,common:{...a.common,issues:[]},parent:null},h=d._parseSync({data:a.data,path:a.path,parent:c});if(h.status==="valid")return h;h.status==="dirty"&&!s&&(s={result:h,ctx:c}),c.common.issues.length&&o.push(c.common.issues)}if(s)return a.common.issues.push(...s.ctx.common.issues),s.result;const l=o.map(d=>new Qa(d));return pe(a,{code:te.invalid_union,unionErrors:l}),Le}}get options(){return this._def.options}}Ms.create=(e,t)=>new Ms({options:e,typeName:$e.ZodUnion,...Fe(t)});const qa=e=>e instanceof io?qa(e.schema):e instanceof Ln?qa(e.innerType()):e instanceof Rs?[e.value]:e instanceof Rn?e.options:e instanceof so?it.objectValues(e.enum):e instanceof $s?qa(e._def.innerType):e instanceof Es?[void 0]:e instanceof to?[null]:e instanceof Za?[void 0,...qa(e.unwrap())]:e instanceof $n?[null,...qa(e.unwrap())]:e instanceof Qc||e instanceof Ds?qa(e.unwrap()):e instanceof Bs?qa(e._def.innerType):[];class Ro extends Ve{_parse(t){const{ctx:a}=this._processInputParams(t);if(a.parsedType!==xe.object)return pe(a,{code:te.invalid_type,expected:xe.object,received:a.parsedType}),Le;const i=this.discriminator,r=a.data[i],s=this.optionsMap.get(r);return s?a.common.async?s._parseAsync({data:a.data,path:a.path,parent:a}):s._parseSync({data:a.data,path:a.path,parent:a}):(pe(a,{code:te.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[i]}),Le)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,a,i){const r=new Map;for(const s of a){const o=qa(s.shape[t]);if(!o.length)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(const l of o){if(r.has(l))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(l)}`);r.set(l,s)}}return new Ro({typeName:$e.ZodDiscriminatedUnion,discriminator:t,options:a,optionsMap:r,...Fe(i)})}}function no(e,t){const a=un(e),i=un(t);if(e===t)return{valid:!0,data:e};if(a===xe.object&&i===xe.object){const r=it.objectKeys(t),s=it.objectKeys(e).filter(l=>r.indexOf(l)!==-1),o={...e,...t};for(const l of s){const d=no(e[l],t[l]);if(!d.valid)return{valid:!1};o[l]=d.data}return{valid:!0,data:o}}else if(a===xe.array&&i===xe.array){if(e.length!==t.length)return{valid:!1};const r=[];for(let s=0;s<e.length;s++){const o=e[s],l=t[s],d=no(o,l);if(!d.valid)return{valid:!1};r.push(d.data)}return{valid:!0,data:r}}else return a===xe.date&&i===xe.date&&+e==+t?{valid:!0,data:e}:{valid:!1}}class Ps extends Ve{_parse(t){const{status:a,ctx:i}=this._processInputParams(t),r=(s,o)=>{if(Dl(s)||Dl(o))return Le;const l=no(s.value,o.value);return l.valid?((Ol(s)||Ol(o))&&a.dirty(),{status:a.value,value:l.data}):(pe(i,{code:te.invalid_intersection_types}),Le)};return i.common.async?Promise.all([this._def.left._parseAsync({data:i.data,path:i.path,parent:i}),this._def.right._parseAsync({data:i.data,path:i.path,parent:i})]).then(([s,o])=>r(s,o)):r(this._def.left._parseSync({data:i.data,path:i.path,parent:i}),this._def.right._parseSync({data:i.data,path:i.path,parent:i}))}}Ps.create=(e,t,a)=>new Ps({left:e,right:t,typeName:$e.ZodIntersection,...Fe(a)});class In extends Ve{_parse(t){const{status:a,ctx:i}=this._processInputParams(t);if(i.parsedType!==xe.array)return pe(i,{code:te.invalid_type,expected:xe.array,received:i.parsedType}),Le;if(i.data.length<this._def.items.length)return pe(i,{code:te.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),Le;!this._def.rest&&i.data.length>this._def.items.length&&(pe(i,{code:te.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),a.dirty());const s=[...i.data].map((o,l)=>{const d=this._def.items[l]||this._def.rest;return d?d._parse(new Ma(i,o,i.path,l)):null}).filter(o=>!!o);return i.common.async?Promise.all(s).then(o=>Xt.mergeArray(a,o)):Xt.mergeArray(a,s)}get items(){return this._def.items}rest(t){return new In({...this._def,rest:t})}}In.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new In({items:e,typeName:$e.ZodTuple,rest:null,...Fe(t)})};class Is extends Ve{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:a,ctx:i}=this._processInputParams(t);if(i.parsedType!==xe.object)return pe(i,{code:te.invalid_type,expected:xe.object,received:i.parsedType}),Le;const r=[],s=this._def.keyType,o=this._def.valueType;for(const l in i.data)r.push({key:s._parse(new Ma(i,l,i.path,l)),value:o._parse(new Ma(i,i.data[l],i.path,l)),alwaysSet:l in i.data});return i.common.async?Xt.mergeObjectAsync(a,r):Xt.mergeObjectSync(a,r)}get element(){return this._def.valueType}static create(t,a,i){return a instanceof Ve?new Is({keyType:t,valueType:a,typeName:$e.ZodRecord,...Fe(i)}):new Is({keyType:Ca.create(),valueType:t,typeName:$e.ZodRecord,...Fe(a)})}}class Ul extends Ve{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:a,ctx:i}=this._processInputParams(t);if(i.parsedType!==xe.map)return pe(i,{code:te.invalid_type,expected:xe.map,received:i.parsedType}),Le;const r=this._def.keyType,s=this._def.valueType,o=[...i.data.entries()].map(([l,d],c)=>({key:r._parse(new Ma(i,l,i.path,[c,"key"])),value:s._parse(new Ma(i,d,i.path,[c,"value"]))}));if(i.common.async){const l=new Map;return Promise.resolve().then(async()=>{for(const d of o){const c=await d.key,h=await d.value;if(c.status==="aborted"||h.status==="aborted")return Le;(c.status==="dirty"||h.status==="dirty")&&a.dirty(),l.set(c.value,h.value)}return{status:a.value,value:l}})}else{const l=new Map;for(const d of o){const c=d.key,h=d.value;if(c.status==="aborted"||h.status==="aborted")return Le;(c.status==="dirty"||h.status==="dirty")&&a.dirty(),l.set(c.value,h.value)}return{status:a.value,value:l}}}}Ul.create=(e,t,a)=>new Ul({valueType:t,keyType:e,typeName:$e.ZodMap,...Fe(a)});class zi extends Ve{_parse(t){const{status:a,ctx:i}=this._processInputParams(t);if(i.parsedType!==xe.set)return pe(i,{code:te.invalid_type,expected:xe.set,received:i.parsedType}),Le;const r=this._def;r.minSize!==null&&i.data.size<r.minSize.value&&(pe(i,{code:te.too_small,minimum:r.minSize.value,type:"set",inclusive:!0,exact:!1,message:r.minSize.message}),a.dirty()),r.maxSize!==null&&i.data.size>r.maxSize.value&&(pe(i,{code:te.too_big,maximum:r.maxSize.value,type:"set",inclusive:!0,exact:!1,message:r.maxSize.message}),a.dirty());const s=this._def.valueType;function o(d){const c=new Set;for(const h of d){if(h.status==="aborted")return Le;h.status==="dirty"&&a.dirty(),c.add(h.value)}return{status:a.value,value:c}}const l=[...i.data.values()].map((d,c)=>s._parse(new Ma(i,d,i.path,c)));return i.common.async?Promise.all(l).then(d=>o(d)):o(l)}min(t,a){return new zi({...this._def,minSize:{value:t,message:_e.toString(a)}})}max(t,a){return new zi({...this._def,maxSize:{value:t,message:_e.toString(a)}})}size(t,a){return this.min(t,a).max(t,a)}nonempty(t){return this.min(1,t)}}zi.create=(e,t)=>new zi({valueType:e,minSize:null,maxSize:null,typeName:$e.ZodSet,...Fe(t)});class io extends Ve{get schema(){return this._def.getter()}_parse(t){const{ctx:a}=this._processInputParams(t);return this._def.getter()._parse({data:a.data,path:a.path,parent:a})}}io.create=(e,t)=>new io({getter:e,typeName:$e.ZodLazy,...Fe(t)});class Rs extends Ve{_parse(t){if(t.data!==this._def.value){const a=this._getOrReturnCtx(t);return pe(a,{received:a.data,code:te.invalid_literal,expected:this._def.value}),Le}return{status:"valid",value:t.data}}get value(){return this._def.value}}Rs.create=(e,t)=>new Rs({value:e,typeName:$e.ZodLiteral,...Fe(t)});function Xc(e,t){return new Rn({values:e,typeName:$e.ZodEnum,...Fe(t)})}class Rn extends Ve{_parse(t){if(typeof t.data!="string"){const a=this._getOrReturnCtx(t),i=this._def.values;return pe(a,{expected:it.joinValues(i),received:a.parsedType,code:te.invalid_type}),Le}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(t.data)){const a=this._getOrReturnCtx(t),i=this._def.values;return pe(a,{received:a.data,code:te.invalid_enum_value,options:i}),Le}return da(t.data)}get options(){return this._def.values}get enum(){const t={};for(const a of this._def.values)t[a]=a;return t}get Values(){const t={};for(const a of this._def.values)t[a]=a;return t}get Enum(){const t={};for(const a of this._def.values)t[a]=a;return t}extract(t,a=this._def){return Rn.create(t,{...this._def,...a})}exclude(t,a=this._def){return Rn.create(this.options.filter(i=>!t.includes(i)),{...this._def,...a})}}Rn.create=Xc;class so extends Ve{_parse(t){const a=it.getValidEnumValues(this._def.values),i=this._getOrReturnCtx(t);if(i.parsedType!==xe.string&&i.parsedType!==xe.number){const r=it.objectValues(a);return pe(i,{expected:it.joinValues(r),received:i.parsedType,code:te.invalid_type}),Le}if(this._cache||(this._cache=new Set(it.getValidEnumValues(this._def.values))),!this._cache.has(t.data)){const r=it.objectValues(a);return pe(i,{received:i.data,code:te.invalid_enum_value,options:r}),Le}return da(t.data)}get enum(){return this._def.values}}so.create=(e,t)=>new so({values:e,typeName:$e.ZodNativeEnum,...Fe(t)});class Ls extends Ve{unwrap(){return this._def.type}_parse(t){const{ctx:a}=this._processInputParams(t);if(a.parsedType!==xe.promise&&a.common.async===!1)return pe(a,{code:te.invalid_type,expected:xe.promise,received:a.parsedType}),Le;const i=a.parsedType===xe.promise?a.data:Promise.resolve(a.data);return da(i.then(r=>this._def.type.parseAsync(r,{path:a.path,errorMap:a.common.contextualErrorMap})))}}Ls.create=(e,t)=>new Ls({type:e,typeName:$e.ZodPromise,...Fe(t)});class Ln extends Ve{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===$e.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){const{status:a,ctx:i}=this._processInputParams(t),r=this._def.effect||null,s={addIssue:o=>{pe(i,o),o.fatal?a.abort():a.dirty()},get path(){return i.path}};if(s.addIssue=s.addIssue.bind(s),r.type==="preprocess"){const o=r.transform(i.data,s);if(i.common.async)return Promise.resolve(o).then(async l=>{if(a.value==="aborted")return Le;const d=await this._def.schema._parseAsync({data:l,path:i.path,parent:i});return d.status==="aborted"?Le:d.status==="dirty"||a.value==="dirty"?Ri(d.value):d});{if(a.value==="aborted")return Le;const l=this._def.schema._parseSync({data:o,path:i.path,parent:i});return l.status==="aborted"?Le:l.status==="dirty"||a.value==="dirty"?Ri(l.value):l}}if(r.type==="refinement"){const o=l=>{const d=r.refinement(l,s);if(i.common.async)return Promise.resolve(d);if(d instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return l};if(i.common.async===!1){const l=this._def.schema._parseSync({data:i.data,path:i.path,parent:i});return l.status==="aborted"?Le:(l.status==="dirty"&&a.dirty(),o(l.value),{status:a.value,value:l.value})}else return this._def.schema._parseAsync({data:i.data,path:i.path,parent:i}).then(l=>l.status==="aborted"?Le:(l.status==="dirty"&&a.dirty(),o(l.value).then(()=>({status:a.value,value:l.value}))))}if(r.type==="transform")if(i.common.async===!1){const o=this._def.schema._parseSync({data:i.data,path:i.path,parent:i});if(!li(o))return Le;const l=r.transform(o.value,s);if(l instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:a.value,value:l}}else return this._def.schema._parseAsync({data:i.data,path:i.path,parent:i}).then(o=>li(o)?Promise.resolve(r.transform(o.value,s)).then(l=>({status:a.value,value:l})):Le);it.assertNever(r)}}Ln.create=(e,t,a)=>new Ln({schema:e,typeName:$e.ZodEffects,effect:t,...Fe(a)});Ln.createWithPreprocess=(e,t,a)=>new Ln({schema:t,effect:{type:"preprocess",transform:e},typeName:$e.ZodEffects,...Fe(a)});class Za extends Ve{_parse(t){return this._getType(t)===xe.undefined?da(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}Za.create=(e,t)=>new Za({innerType:e,typeName:$e.ZodOptional,...Fe(t)});class $n extends Ve{_parse(t){return this._getType(t)===xe.null?da(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}$n.create=(e,t)=>new $n({innerType:e,typeName:$e.ZodNullable,...Fe(t)});class $s extends Ve{_parse(t){const{ctx:a}=this._processInputParams(t);let i=a.data;return a.parsedType===xe.undefined&&(i=this._def.defaultValue()),this._def.innerType._parse({data:i,path:a.path,parent:a})}removeDefault(){return this._def.innerType}}$s.create=(e,t)=>new $s({innerType:e,typeName:$e.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...Fe(t)});class Bs extends Ve{_parse(t){const{ctx:a}=this._processInputParams(t),i={...a,common:{...a.common,issues:[]}},r=this._def.innerType._parse({data:i.data,path:i.path,parent:{...i}});return Ts(r)?r.then(s=>({status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new Qa(i.common.issues)},input:i.data})})):{status:"valid",value:r.status==="valid"?r.value:this._def.catchValue({get error(){return new Qa(i.common.issues)},input:i.data})}}removeCatch(){return this._def.innerType}}Bs.create=(e,t)=>new Bs({innerType:e,typeName:$e.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...Fe(t)});class Gl extends Ve{_parse(t){if(this._getType(t)!==xe.nan){const i=this._getOrReturnCtx(t);return pe(i,{code:te.invalid_type,expected:xe.nan,received:i.parsedType}),Le}return{status:"valid",value:t.data}}}Gl.create=e=>new Gl({typeName:$e.ZodNaN,...Fe(e)});class Qc extends Ve{_parse(t){const{ctx:a}=this._processInputParams(t),i=a.data;return this._def.type._parse({data:i,path:a.path,parent:a})}unwrap(){return this._def.type}}class Lo extends Ve{_parse(t){const{status:a,ctx:i}=this._processInputParams(t);if(i.common.async)return(async()=>{const s=await this._def.in._parseAsync({data:i.data,path:i.path,parent:i});return s.status==="aborted"?Le:s.status==="dirty"?(a.dirty(),Ri(s.value)):this._def.out._parseAsync({data:s.value,path:i.path,parent:i})})();{const r=this._def.in._parseSync({data:i.data,path:i.path,parent:i});return r.status==="aborted"?Le:r.status==="dirty"?(a.dirty(),{status:"dirty",value:r.value}):this._def.out._parseSync({data:r.value,path:i.path,parent:i})}}static create(t,a){return new Lo({in:t,out:a,typeName:$e.ZodPipeline})}}class Ds extends Ve{_parse(t){const a=this._def.innerType._parse(t),i=r=>(li(r)&&(r.value=Object.freeze(r.value)),r);return Ts(a)?a.then(r=>i(r)):i(a)}unwrap(){return this._def.innerType}}Ds.create=(e,t)=>new Ds({innerType:e,typeName:$e.ZodReadonly,...Fe(t)});var $e;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})($e||($e={}));const m=Ca.create,le=Mn.create;Pn.create;const se=As.create;di.create;const Zp=Es.create,Gi=ao.create;mn.create;const Se=Aa.create,R=_t.create,qi=Ms.create,$o=Ro.create;Ps.create;In.create;const pn=Is.create,st=Rs.create,we=Rn.create;Ls.create;Za.create;$n.create;const Jp={string:e=>Ca.create({...e,coerce:!0}),number:e=>Mn.create({...e,coerce:!0}),boolean:e=>As.create({...e,coerce:!0}),bigint:e=>Pn.create({...e,coerce:!0}),date:e=>di.create({...e,coerce:!0})},Bo=we(["brainstorming","objective","spec-ready","planned","executing","done"]),Wi=we(["brief","qa","audit","help","goal","no_effort"]),Xp=we(["ok","drift","broken"]),an=we(["tinggi","sedang","rendah"]),eu=we(["from-scratch","existing"]),Ja=we(["claude","codex"]);we(["critical","major","minor"]);const ro=we(["bug","fitur","pertanyaan","lainnya"]),Qp=we(["new","accepted","rejected"]),eg=["changed","full"],tu=we(eg),tg=new Set(["goal","no_effort"]);function Bn(e){return e==="qa"?"qa":tg.has(e)?"goal":"brief"}function Do(e){const t=e??{};return"severity"in t?"qa":"goal"in t?"goal":"brief"}function au(e,t){return Do(t)===Bn(e)}function ql(e){return e==="minor"?"sedang":"tinggi"}function Wl(e){return e==="tinggi"?"major":"minor"}const ag={brief:["context","outcome"],qa:["steps","expected","actual","env"],goal:["goal","done"]};function ng(e,t){const a=t??{},i=h=>typeof a[h]=="string"?a[h]:"",r=()=>a.priority==="tinggi"||a.priority==="rendah"?a.priority:"sedang",s=h=>h.filter(p=>i(p)!==""),o=Do(t),l=Bn(e),d=i("fromAudit"),c=(h,p)=>({payload:h,dropped:p,missing:ag[l].filter(f=>typeof h[f]!="string"||h[f]==="")});if(o===l)return{payload:{...a},dropped:[],missing:[]};if(l==="qa")return o==="brief"?c({severity:Wl(r()),steps:"",expected:i("outcome"),actual:i("context"),env:"",constraints:i("constraints"),...d?{fromAudit:d}:{}},[]):c({severity:Wl(r()),steps:"",expected:i("goal"),actual:"",env:"",constraints:i("constraints")},s(["done"]));if(l==="goal"){if(o==="brief"){const h=i("outcome")||i("context");return c({goal:h,done:"",constraints:i("constraints"),priority:r()},s([...i("outcome")?["context"]:[],"fromAudit"]))}return c({goal:i("expected"),done:"",constraints:i("constraints"),priority:ql(a.severity)},s(["steps","actual","env","fromAudit"]))}return o==="qa"?c({context:i("actual"),outcome:i("expected"),constraints:i("constraints"),priority:ql(a.severity),...d?{fromAudit:d}:{}},s(["steps","env"])):c({context:"",outcome:i("goal"),constraints:i("constraints"),priority:r()},s(["done"]))}const nu="superpowers",gi="superpowers:verification-before-completion",ig="Sesi ini TAK BERPENUNGGU — tak ada manusia yang menonton terminal untuk menjawab. Skill mattpocock yang kontraknya mewawancarai manusia (`/grill-me`, `/to-spec`, `/triage`) JANGAN dipakai: pakai primitif model-invoked-nya dan putuskan sendiri. `to-tickets` di fase Plan dipakai HANYA sebagai penghasil berkas plan berkotak `- [ ]` di `docs/matt/plans/`, BUKAN penerbit tiket — hanoman sendiri adalah issue tracker-nya, jadi jangan menulis ke tracker eksternal mana pun.",Dn={superpowers:{id:"superpowers",label:"superpowers",planDir:"docs/superpowers/plans",specDir:"docs/superpowers/specs",phaseSkills:{Brainstorm:["superpowers:brainstorming"],Audit:["superpowers:systematic-debugging"],Plan:["superpowers:writing-plans"],Execute:["superpowers:executing-plans","superpowers:test-driven-development",gi],Verifikasi:[gi]},exitSkills:[gi],requires:["superpowers"],install:{claude:["claude plugin marketplace add obra/superpowers-marketplace","claude plugin install superpowers@superpowers-marketplace"],codex:["codex plugin add superpowers@openai-curated"]}},matt:{id:"matt",label:"mattpocock",planDir:"docs/matt/plans",specDir:"docs/matt/specs",phaseSkills:{Brainstorm:["mattpocock-skills:grilling"],Audit:["mattpocock-skills:diagnosing-bugs"],Plan:["mattpocock-skills:to-tickets"],Execute:["mattpocock-skills:implement","mattpocock-skills:tdd","mattpocock-skills:code-review"],Verifikasi:[gi]},exitSkills:[gi],extraClause:ig,requires:["mattpocock-skills","superpowers"],install:{claude:["claude plugin install mattpocock-skills","claude plugin marketplace add obra/superpowers-marketplace","claude plugin install superpowers@superpowers-marketplace"],codex:["npx skills@latest add mattpocock/skills","codex plugin add superpowers@openai-curated"]}}},Oo=Object.keys(Dn),iu=e=>[...new Set(e)];iu(Oo.map(e=>Dn[e].planDir));iu(Oo.map(e=>Dn[e].specDir));function Kl(e){return(e?Dn[e]:void 0)??Dn[nu]}const Zs=R({enabled:se().default(!1),agent:Ja.default("claude"),model:m().default("opus"),effort:m().default("xhigh")}),su=R({enabled:se().default(!1),progress:se().default(!0),engine:Zs.default({})}),sg=su.parse({}),rg=we(["disabled","misconfigured","ready","running","error"]);R({configured:se(),enabled:se(),running:se(),readiness:rg,botUsername:m().min(1).nullable().default(null),allowlistCount:le().int().min(0),agentTokenConfigured:se(),missingCapabilities:Se(m()).default([]),lastUpdateAt:m().datetime().nullable().default(null),lastError:m().nullable().default(null)});const og=R({id:m().min(1),chatId:m().min(1),content:m().trim().min(1).max(1e3),createdAt:m().datetime(),updatedAt:m().datetime()});R({chatId:m().min(1),userId:m().min(1),sessionId:m().nullable(),activeProjectId:m().nullable(),activeSessionId:m().nullable(),personalityAgentId:m().nullable(),summary:m().max(4e3).nullable(),agent:Ja,model:m().min(1),effort:m().min(1),memories:Se(og)});const lg=["progress","final","decision","failure","confirmation"],dg=we(lg),cg=R({description:m().trim().min(1).max(500),method:we(["POST","PATCH","PUT","DELETE"]),path:m().startsWith("/api/").max(1e3)});R({chatId:m().min(1),updateId:le().int().nonnegative(),kind:dg,text:m().trim().min(1).max(12e3),summary:m().trim().min(1).max(4e3).optional(),remember:Se(m().trim().min(1).max(1e3)).max(20).optional(),confirmation:cg.optional()}).superRefine((e,t)=>{e.kind==="confirmation"&&!e.confirmation&&t.addIssue({code:te.custom,path:["confirmation"],message:"confirmation required"}),e.kind!=="confirmation"&&e.confirmation&&t.addIssue({code:te.custom,path:["confirmation"],message:"confirmation only valid for confirmation replies"})});R({id:m().min(1),chatId:m().nullable(),userId:m().nullable(),updateId:le().int().nonnegative().nullable(),action:m().min(1),outcome:m().min(1),correlationId:m().nullable(),method:m().nullable(),path:m().nullable(),statusCode:le().int().nullable(),createdAt:m().datetime()});R({text:m().trim().min(1).max(16e3)});const ug=["off","default-branch","branch"],Ki=R({mode:we(ug).default("off"),dest:we(["local","origin"]).default("local"),branch:m().min(1).nullable().default(null),deleteBranch:se().default(!1)}),si={mode:"off",dest:"local",branch:null,deleteBranch:!1};function Vl(e){if(e==null)return null;const t=Ki.safeParse(e);return t.success?t.data:null}function hg(e,t){return Vl(t)??Vl(e)??si}const Yl={local:"lokal",origin:"origin"};function ru(e){return e.mode==="off"?"tanpa auto-merge":`auto-merge ke ${e.mode==="default-branch"?`default branch repo (${Yl[e.dest]})`:`${e.branch??"—"} (${Yl[e.dest]})`}${e.deleteBranch?" · hapus branch kerja":""}`}const mg=32*1024,ou=["sessions:read","sessions:write","sessions:spawn","backlog:read","backlog:write","ide:read"],lu=we(ou),pg=R({enabled:se().default(!1),capabilities:Se(lu).default([])}),gg={enabled:!1,capabilities:[]},fg=e=>e<128?1:e<2048?2:e<65536?3:4;function bg(e){let t=0;for(let a=0;a<e.length;a++){const i=e.codePointAt(a);t+=fg(i),i>65535&&a++}return t}const du=R({hubOrigin:m().min(1).max(200),userId:m().min(1).max(200),email:m().min(1).max(320)}).strict(),La=m().min(1).max(64),kg=/(^|\/)\.\.?(\/|$)|%2e|%2f|%5c|\\|[?#]/i,cu=m().max(2048).regex(/^\/api\//).refine(e=>!kg.test(e),"path relay tak sah"),zo=m().refine(e=>bg(e)<=mg,"part relay > 32 KiB"),yg=["GET","POST","PUT","PATCH","DELETE"],vg=R({t:st("welcome"),v:st(1),protocol:le().int(),version:m().max(40)}).strict(),xg=R({t:st("req"),id:La,method:we(yg),path:cu,query:m().max(2048).optional(),body:Gi().optional(),actor:du}).strict(),wg=R({t:st("cancel"),id:La}).strict(),jg=R({t:st("open"),sid:La,path:cu,mode:we(["read","write"]),actor:du}).strict(),Sg=R({t:st("data"),sid:La,d:zo}).strict(),_g=R({t:st("credit"),sid:La,n:le().int().min(1).max(4*1024*1024)}).strict(),uu=R({t:st("close"),sid:La,code:le().int().min(1e3).max(4999),reason:m().max(120).optional()}).strict();$o("t",[vg,xg,wg,jg,Sg,_g,uu]);const Cg=R({t:st("hello"),v:st(1),protocol:le().int(),version:m().max(40),capabilities:Se(lu).max(ou.length)}).strict(),Tg=R({t:st("res"),id:La,status:le().int().min(100).max(599).optional(),contentType:m().max(200).optional(),part:zo,end:se()}).strict(),hu={cols:le().int().min(1).max(1e3),rows:le().int().min(1).max(1e3)},Ag=R({t:st("opened"),sid:La,geometry:R(hu).strict().optional()}).strict(),Eg=R({t:st("geometry"),sid:La,...hu}).strict(),Mg=R({t:st("data"),sid:La,d:zo,more:st(!0).optional()}).strict();$o("t",[Cg,Tg,Ag,Eg,Mg,uu]);R({control:R({enabled:se(),capabilities:Se(m().max(40)).max(20)}).strict().optional(),logs:R({event:se(),server:se(),transcript:se()}).strict().optional()}).strict();const Pg=["event","server","transcript"],Ig=we(Pg),Rg=["debug","info","warn","error"],mu=we(Rg),Lg=4*1024,$g={event:!0,server:!1,transcript:!1},Bg=R({event:se().default(!0),server:se().default(!1),transcript:se().default(!1)}),Dg={eventDays:90,serverDays:7,transcriptDays:30,maxBytes:256*1024**2},br=e=>le().int().min(1).max(365).default(e),Og=R({eventDays:br(90),serverDays:br(7),transcriptDays:br(30),maxBytes:le().int().min(16*1024**2).max(4*1024**3).default(256*1024**2)}),zg=500,Ng=1*1024*1024,Zl=31,Jl=200,Fg=R({seq:m().regex(/^\d+$/),ts:m().datetime(),level:mu,kind:m().min(1).max(64),projectId:m().nullish(),specId:m().nullish(),sessionId:m().nullish(),msg:m().max(Lg),data:pn(Gi()).nullish(),transcript:m().max(Ng).nullish()}).strict();R({lane:Ig,entries:Se(Fg).min(1).max(zg)}).strict();R({from:m().datetime(),to:m().datetime(),deviceId:m().optional(),projectId:m().optional(),specId:m().optional(),lane:m().optional(),level:mu.optional(),kind:m().optional(),q:m().max(200).optional(),cursor:m().optional(),limit:Jp.number().int().min(1).max(Jl).default(Jl)}).strict().refine(e=>Date.parse(e.to)>=Date.parse(e.from),{message:"to < from"}).refine(e=>Date.parse(e.to)-Date.parse(e.from)<=Zl*864e5,{message:`rentang > ${Zl} hari`});const Hg=["feature","qa","scaffold","reverse","prd","audit","breakdown","goal","no_effort"],pu={feature:["Brainstorm","Objective","Spec","Plan","Execute"],qa:["Audit","Spec","Plan","Execute"],scaffold:["Brainstorm","Objective","Doc index"],reverse:["Scan","Docs teknis","Wawancara","Konvensi & index","Serah terima"],prd:["Brainstorm","PRD"],audit:["Audit","Laporan"],breakdown:["Analisis","Breakdown"],goal:["Goal","Verifikasi"],no_effort:["Kerjakan"]},No="hanoman-fase-";function Ug(e){return No+e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}const Gg=e=>e.startsWith(No),gu="2026-09-23-v1",fi=we(["seeded","user"]),qg=R({version:m().default(gu),claude:R({model:fi.default("seeded"),effort:fi.default("seeded")}).default({}),codex:R({model:fi.default("seeded"),effort:fi.default("seeded")}).default({}),orchestration:pn(m(),fi).default({})}),Ae=(e,t)=>({model:e,effort:t}),za=(e,t,a=!0)=>({enabled:a,claude:e,codex:t}),Wg={feature:za({Brainstorm:Ae("sonnet","medium"),Objective:Ae("sonnet","medium"),Spec:Ae("opus","medium"),Plan:Ae("sonnet","medium"),Execute:Ae("sonnet","medium")},{Brainstorm:Ae("gpt-5.6-terra","medium"),Objective:Ae("gpt-5.6-terra","medium"),Spec:Ae("gpt-5.6-sol","medium"),Plan:Ae("gpt-5.6-terra","medium"),Execute:Ae("gpt-5.6-terra","medium")}),qa:za({Audit:Ae("sonnet","medium"),Spec:Ae("opus","medium"),Plan:Ae("sonnet","medium"),Execute:Ae("sonnet","medium")},{Audit:Ae("gpt-5.6-terra","medium"),Spec:Ae("gpt-5.6-sol","medium"),Plan:Ae("gpt-5.6-terra","medium"),Execute:Ae("gpt-5.6-terra","medium")}),scaffold:za({Brainstorm:Ae("sonnet","medium"),Objective:Ae("sonnet","medium"),"Doc index":Ae("opus","medium")},{Brainstorm:Ae("gpt-5.6-terra","medium"),Objective:Ae("gpt-5.6-terra","medium"),"Doc index":Ae("gpt-5.6-sol","medium")}),reverse:za({Scan:Ae("sonnet","medium"),"Docs teknis":Ae("sonnet","medium"),Wawancara:Ae("sonnet","medium"),"Konvensi & index":Ae("sonnet","medium"),"Serah terima":Ae("sonnet","medium")},{Scan:Ae("gpt-5.6-terra","medium"),"Docs teknis":Ae("gpt-5.6-terra","medium"),Wawancara:Ae("gpt-5.6-terra","medium"),"Konvensi & index":Ae("gpt-5.6-terra","medium"),"Serah terima":Ae("gpt-5.6-terra","medium")}),prd:za({Brainstorm:Ae("sonnet","medium"),PRD:Ae("opus","medium")},{Brainstorm:Ae("gpt-5.6-terra","medium"),PRD:Ae("gpt-5.6-sol","medium")}),audit:za({Audit:Ae("sonnet","medium"),Laporan:Ae("sonnet","medium")},{Audit:Ae("gpt-5.6-terra","medium"),Laporan:Ae("gpt-5.6-terra","medium")}),breakdown:za({Analisis:Ae("opus","medium"),Breakdown:Ae("opus","medium")},{Analisis:Ae("gpt-5.6-sol","medium"),Breakdown:Ae("gpt-5.6-sol","medium")}),goal:za({Goal:Ae("sonnet","medium"),Verifikasi:Ae("sonnet","medium")},{Goal:Ae("gpt-5.6-terra","medium"),Verifikasi:Ae("gpt-5.6-terra","medium")}),no_effort:za({Kerjakan:Ae("haiku","low")},{Kerjakan:Ae("gpt-5.6-terra","low")},!1)},Kg=Object.fromEntries(Hg.flatMap(e=>[[`${e}.enabled`,"seeded"],...["claude","codex"].flatMap(t=>pu[e].flatMap(a=>[[`${e}.${t}.${a}.model`,"seeded"],[`${e}.${t}.${a}.effort`,"seeded"]]))])),Vg={version:gu,claude:{model:"seeded",effort:"seeded"},codex:{model:"seeded",effort:"seeded"},orchestration:Kg},Yg=R({id:m(),name:m(),desc:m(),kind:eu,repoDir:m().nullable().optional(),gitRemote:m().nullable().optional(),stack:m().default(""),docStatus:Xp,coverage:le().int().min(0).max(100),createdAt:m()}),Js=R({context:m(),outcome:m(),constraints:m(),priority:an,fromAudit:m().optional()}),Xs=R({severity:we(["critical","major","minor"]),steps:m(),expected:m(),actual:m(),env:m(),constraints:m().default(""),fromAudit:m().optional()}),Qs=R({goal:m(),done:m(),constraints:m(),priority:an}),Zg=R({id:m(),reason:we(["missing","unfinished","unmerged"])}),Jg=R({at:m(),from:m(),to:m(),by:m(),payload:Gi().optional()}),Xg=R({at:m(),by:m(),reason:m().optional()}),fu=R({id:m(),projectId:m(),title:m(),source:Wi,stage:Bo,priority:an,author:m(),objective:m(),payload:qi([Js,Xs,Qs]).nullable(),branchFrom:m().nullable(),baseSha:m().nullable(),createdAt:m(),startedAt:m().nullable(),dependsOn:Se(m()).default([]),blockedBy:Se(Zg).default([]),autoMerge:Ki.nullable().default(null),sourceHistory:Se(Jg).default([]),manualDone:Xg.nullable().default(null)}),Qg=fu.omit({payload:!0,sourceHistory:!0}).extend({version:le().optional(),updatedAt:m().optional()});Qg.omit({objective:!0});const Xl=["off","short","medium","long","blip","pop","ping","coin","alert","chime","success","bell","marimba","fanfare"];let ci=[{id:"default",label:"Default (rekomendasi CLI)"},{id:"opus",label:"Opus"},{id:"sonnet",label:"Sonnet"},{id:"haiku",label:"Haiku"},{id:"fable",label:"Fable"}];const bu="default",ku=["xhigh","high","medium","low","max","ultracode"],kr=["ultra","max","xhigh","high","medium","low"],ef=["max","xhigh","high","medium","low"],yu=["xhigh","high","medium","low"];let Pa=[{id:"gpt-6-astra",label:"GPT-6 Astra",efforts:kr,fallback:"medium",minClient:""},{id:"gpt-5.6-sol",label:"GPT-5.6 Sol",efforts:kr,fallback:"xhigh",minClient:"0.144.0"},{id:"gpt-5.6-terra",label:"GPT-5.6 Terra",efforts:kr,fallback:"xhigh",minClient:"0.144.0"},{id:"gpt-5.6-luna",label:"GPT-5.6 Luna",efforts:ef,fallback:"xhigh",minClient:"0.144.0"},{id:"gpt-5.5",label:"GPT-5.5",efforts:yu,fallback:"xhigh",minClient:"0.124.0"}];function tf(e,t){ci=e,Pa=t}function er(e){return ci.find(t=>t.id===e)??ci.find(t=>t.resolved===e)}function vu(){return ci.filter(e=>e.id!==bu)}function xu(e){var t;return((t=er(e))==null?void 0:t.efforts)??ku}function wu(e,t){const a=e.map(r=>({value:r.id,label:r.label}));if(!t||a.some(r=>r.value===t))return a;const i=e.find(r=>r.resolved===t);return[{value:t,label:i?`${i.label} (terpatok: ${t})`:t},...a]}function tr(e,t){var i;const a=(i=er(e))==null?void 0:i.efforts;return!(a!=null&&a.length)||a.includes(t)?t:a.includes("xhigh")?"xhigh":a[0]}function ar(e){return Pa.find(t=>t.id===e)}function af(e){var t;return((t=ar(e))==null?void 0:t.efforts)??yu}function nr(e,t){const a=ar(e);return a?a.efforts.includes(t)?t:a.fallback:t}function ju(e,t){const a=e.split(".").map(Number),i=t.split(".").map(Number);for(let r=0;r<Math.max(a.length,i.length);r++){const s=(a[r]??0)-(i[r]??0);if(s!==0)return s}return 0}function nf(e,t){var i;const a=(i=ar(e))==null?void 0:i.minClient;return!a||!t?!1:ju(t,a)<0}const Su=R({model:m().default("gpt-5.6-terra"),effort:m().default("medium")}),oo=Su.parse({}),Ql={enabled:se().default(!1)},Fo=R({enabled:se().default(!1),paused:se().default(!1),maxConcurrent:le().int().min(1).default(2),launchGuard:R({enabled:se().default(!0),maxLoadPerCore:le().finite().positive().default(2.5)}).default({}),autonomy:we(["full-control","butuh-keputusan"]).default("butuh-keputusan"),sources:R({backlog:R({...Ql,everyMin:le().int().min(1).default(15)}).default({}),triase:R({...Ql,everyMin:le().int().min(1).default(30)}).default({})}).default({})}),sf=Fo.parse({}),_u=R({enabled:se().default(!1),condition:m().max(4e3).default("")}),rf=_u.parse({}),Cu=R({enabled:se().default(!1),agent:Ja.default("claude"),model:m().default("opus"),effort:m().default("xhigh")}),of=Cu.parse({}),lf=Zs.parse({}),df=Zs,Ho=R({enabled:se().default(!1),paused:se().default(!1),pausedProjects:Se(m()).default([]),everyMin:le().int().min(1).max(1440).default(5),timeoutSec:le().int().min(10).max(900).default(600),maxAutoAnswers:le().int().min(1).max(20).default(3),maxConcurrent:le().int().min(1).max(16).default(2),queueWaitSec:le().int().min(0).max(900).default(120),flowTtlMin:le().int().min(1).max(1440).default(60),requireGreenBeforeIntegrate:se().default(!0),engine:df.default({})}),cf=Ho.parse({}),Tu=R({enabled:se().default(!1),brainstormPerMonth:le().int().min(0).max(1e3).default(2),askPerMonth:le().int().min(0).max(1e4).default(30),model:m().default("opus"),effort:m().default("high"),timeoutSec:le().int().min(10).max(900).default(180)}),uf=Tu.parse({}),ed=R({model:m().nullable().default(null),effort:m().nullable().default(null)}),Oi={model:200,effort:64,phase:64,phases:32},hf=R({model:m().min(1).max(Oi.model).optional(),effort:m().min(1).max(Oi.effort).optional()}),mf=pn(m().min(1).max(Oi.phase),hf).refine(e=>Object.keys(e).length<=Oi.phases,{message:`phaseOverrides maksimal ${Oi.phases} fase`}),Na=R({enabled:se().default(!0),claude:pn(m(),ed).default({}),codex:pn(m(),ed).default({})}),Au=R({feature:Na.default({}),qa:Na.default({}),scaffold:Na.default({}),reverse:Na.default({}),prd:Na.default({}),audit:Na.default({}),breakdown:Na.default({}),goal:Na.default({}),no_effort:Na.default({})}),Uo=Au.parse(Wg);R({model:m().default("sonnet"),effort:m().default("medium"),autoDefault:se(),autoScaffold:se(),notifyFail:se(),notifyDone:se().default(!0),notifySound:we(Xl).default("short"),notifyDecision:se().default(!0),notifyDecisionSound:we(Xl).default("alert"),agentAccessEnabled:se().default(!1),scheduler:Fo.default(sf),goal:_u.default(rf),agent:Ja.default("claude"),codex:Su.default(oo),verifyScope:tu.default("changed"),method:m().default(nu),conflict:Cu.default(of),lead:Ho.default(cf),telegram:su.default(sg),changelog:Zs.default(lf),portalChat:Tu.default(uf),orchestration:Au.default(Uo),remoteControl:pg.default(gg),logShipping:Bg.default($g),logRetention:Og.default(Dg),builtinAgents:pn(m(),m()).default({}),builtinAgentPolicies:pn(m(),m()).default({}),builtinRuntimeDefaults:qg.default(Vg)});R({id:m(),type:we(["done","decision","ticket","fail","lead"]).default("done"),specId:m().nullable(),sessionId:m().nullable(),title:m(),projectId:m().nullable(),createdAt:m(),readAt:m().nullable()});R({projectId:m(),path:m(),category:m(),content:m(),linked:se(),root:se()});R({id:m(),name:m(),createdAt:m(),lastSeenAt:m().nullable(),revokedAt:m().nullable()});const Go="inherit",Eu="0.151.0";function pf(e){var a;const t=e?(a=/(\d+)\.(\d+)\.(\d+)/.exec(e))==null?void 0:a[0]:null;return t?ju(t,Eu)>=0:!1}function gf(e){const t=(e.orchestration??Uo)[e.flow];if(!e.nativeAgents||(t==null?void 0:t.enabled)===!1)return null;const a=(t==null?void 0:t[e.runtime])??{},i=e.runtime==="codex"?nr:tr;return{flow:e.flow,runtime:e.runtime,phases:pu[e.flow].map(r=>{var c;const s=a[r],o=(c=e.phaseOverrides)==null?void 0:c[r],l=(o==null?void 0:o.model)??(s==null?void 0:s.model)??e.orchestrator.model,d=e.runtime==="claude"&&l===bu?Go:l;return{phase:r,agentName:Ug(r),model:d,effort:i(d,(o==null?void 0:o.effort)??(s==null?void 0:s.effort)??e.orchestrator.effort)}})}}const ff=["projects:read","projects:write","backlog:read","backlog:write","sessions:read","sessions:write","docs:read","docs:write","ide:read","ide:write","vps:read","vps:write","settings:read","settings:write","support:read","support:write","notifications:read","notifications:write","lead:read","lead:write","agents:read","agents:write","telegram:read","telegram:write","team:read","team:write","sessions:spawn","ide:git","backlog:lifecycle","vps:exec"],ir=we(ff);R({id:ir,domain:m(),access:we(["read","write","danger"]),label:m(),desc:m(),risk:we(["rce","exec"]).optional()});const IC=[{domain:"projects",label:"Projects",desc:"Project, branch, binding, Help Center."},{domain:"backlog",label:"Backlog / Spec",desc:"Spec/backlog, dokumen, review diff, integrate."},{domain:"sessions",label:"Sesi",desc:"Sesi terminal, fase, jalankan claude/shell."},{domain:"docs",label:"Docs & PRD",desc:"Dokumen SoT project & PRD."},{domain:"ide",label:"IDE / Git",desc:"Tree, file, status git, graph, commit, diff."},{domain:"vps",label:"VPS",desc:"VPS, checklist kepatuhan, audit, konsol."},{domain:"settings",label:"Settings",desc:"Setelan & config runtime."},{domain:"support",label:"Help Desk",desc:"Tiket Help Center (Help Desk): lihat, terima/tolak, promosikan ke backlog."},{domain:"notifications",label:"Notifikasi",desc:"Lihat & kelola notifikasi."},{domain:"lead",label:"Lead",desc:"Minta putusan ke hanoman-lead & baca jejak keputusannya."},{domain:"agents",label:"Custom agent",desc:"Katalog persona agen global & per project."},{domain:"telegram",label:"Telegram",desc:"Status, binding, memory, reply, dan audit kanal operator Telegram."},{domain:"team",label:"Tim",desc:"Kartu papan Tim (kerja manusia), direktori anggota, eskalasi kartu ke backlog."}];R({id:m(),name:m(),tokenPrefix:m(),capabilities:Se(ir),enabled:se(),createdBy:m().nullable(),createdAt:m(),lastUsedAt:m().nullable(),revokedAt:m().nullable()});R({name:m().min(1),capabilities:Se(ir)});R({name:m().min(1).optional(),capabilities:Se(ir).optional(),enabled:se().optional()});const qo=["claude","codex"];we(qo);const bf=["always","smart"],Mu=we(bf),Pu=m().min(1).max(64).regex(/^[a-z][a-z0-9_-]*$/),kf=["inherit","read-only","isolated-worktree"],Iu=we(kf),Wo=/^[a-z][a-z0-9-]{1,39}$/,Ru=["Read","Write","Edit","Bash","Glob","Grep","WebFetch","WebSearch"],td="Task";R({id:m(),projectId:m().nullable(),name:m().regex(Wo),description:m(),instructions:m(),tools:Se(m()).nullable(),model:m().nullable(),mentions:Se(m()).nullable(),runtime:we(qo).nullable(),activation:Mu.default("always"),effort:Pu.nullable().default(null),workspacePolicy:Iu.default("inherit"),maxTurns:le().int().min(1).max(200).nullable().default(null),timeoutSeconds:le().int().min(30).max(3600).nullable().default(null),enabled:se(),createdAt:m(),updatedAt:m()});const Lu=R({projectId:m().nullable().optional(),name:m().regex(Wo).refine(e=>!Gg(e),{message:`awalan ${No} dicadangkan untuk agen fase hanoman`}),description:m().trim().min(1).max(500),instructions:m().trim().min(1).max(2e4),tools:Se(m()).nullable().optional(),model:m().nullable().optional(),mentions:Se(m()).nullable().optional(),runtime:we(qo).nullable().optional(),activation:Mu.optional(),effort:Pu.nullable().optional(),workspacePolicy:Iu.optional(),maxTurns:le().int().min(1).max(200).nullable().optional(),timeoutSeconds:le().int().min(30).max(3600).nullable().optional(),enabled:se().optional()});function yf(e,t){e.workspacePolicy==="isolated-worktree"&&e.runtime!=="claude"&&t.addIssue({code:te.custom,path:["workspacePolicy"],message:"isolated-worktree hanya tersedia untuk Claude Code"})}Lu.superRefine(yf);Lu.omit({name:!0,projectId:!0}).partial().superRefine((e,t)=>{e.workspacePolicy==="isolated-worktree"&&e.runtime!==void 0&&e.runtime!=="claude"&&t.addIssue({code:te.custom,path:["workspacePolicy"],message:"isolated-worktree hanya tersedia untuk Claude Code"})});function vf(e){const t=e.tools??[...Ru],a=(e.mentions??[]).length>0,i=t.filter(r=>r!==td);return a&&i.push(td),i}const rn=["Kamu agen daun: jangan mendelegasikan atau memanggil agen lain; eskalasi hanya ke parent.","Awali laporan dengan Status: selesai | sebagian | terhalang | menunggu-keputusan. Sertakan simpulan, jangkar bukti,","tingkat keyakinan, scope yang belum diperiksa dan langkah berikutnya. Maksimal 12 temuan utama","dan 1200 kata; jangan mengklaim selesai bila acceptance penting belum terverifikasi."],xf=[{name:"product-designer",description:"Gunakan saat alur pengguna atau UI perlu dirancang dan diwujudkan sesuai design system, termasuk responsive, aksesibilitas, dan state interaksi. Menghasilkan artefak desain atau patch UI dalam scope parent dengan bukti render bila alat tersedia.",tools:["Read","Glob","Grep","Bash","Write","Edit","WebFetch","WebSearch"],enabledByDefault:!1,activation:"smart",effort:"medium",workspacePolicy:"isolated-worktree",maxTurns:40,timeoutSeconds:null,models:{claude:"sonnet",codex:"gpt-5.6-terra"},instructions:["Kamu merancang pengalaman produk dan mewujudkan UI sesuai mandat parent.","Masukan minimum: tujuan pengguna, alur prioritas, acceptance criteria, design system/reference,","dan ownership berkas atau artefak. Baca komponen yang ada sebelum membuat pola baru.","1. Petakan alur dan state yang relevan: awal, loading, kosong, sukses, error, disabled,"," validasi, fokus/keyboard, serta hak akses. Tandai state yang tidak berlaku beserta alasan.","2. Gunakan token dan komponen existing; periksa hirarki, copy, kontras, label, fokus,"," urutan keyboard, dan viewport sempit/lebar. Referensi web hanya bila perlu panduan primer.","3. Buat artefak atau patch hanya dalam ownership yang diserahkan; jangan memperluas fitur"," atau mengubah backend tanpa mandat. Parent memutuskan perubahan scope dan integrasi.","4. Cocokkan hasil dengan acceptance criteria. Bila alat render/browser tersedia, periksa"," render nyata pada viewport dan state relevan serta catat hasil/screenshot. Bash atau"," WebFetch bukan bukti browser tersedia; bila tidak ada, laporkan gap verifikasi visual.","Berhenti saat mandat terpenuhi atau keputusan produk/dependensi menghalangi; kerjakan bagian","yang independen lalu eskalasi ke parent. Jangan mengaku merender atau menguji tanpa output.","Handoff ringkas: artefak/berkas berubah, keputusan desain, state diperiksa, acceptance beserta","bukti, ketidakpastian dan gap, serta langkah parent. Jangan membuat proses berat untuk UI kecil.",...rn].join(`
10
+ */var bp=oa,kp=Symbol.for("react.element"),yp=Symbol.for("react.fragment"),vp=Object.prototype.hasOwnProperty,xp=bp.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,wp={key:!0,ref:!0,__self:!0,__source:!0};function Vc(e,t,a){var i,r={},s=null,o=null;a!==void 0&&(s=""+a),t.key!==void 0&&(s=""+t.key),t.ref!==void 0&&(o=t.ref);for(i in t)vp.call(t,i)&&!wp.hasOwnProperty(i)&&(r[i]=t[i]);if(e&&e.defaultProps)for(i in t=e.defaultProps,t)r[i]===void 0&&(r[i]=t[i]);return{$$typeof:kp,type:e,key:s,ref:o,props:r,_owner:xp.current}}Ys.Fragment=yp;Ys.jsx=Vc;Ys.jsxs=Vc;Kc.exports=Ys;var n=Kc.exports,Yc,Ll=dp;Yc=Ll.createRoot,Ll.hydrateRoot;const jp="modulepreload",Sp=function(e){return"/"+e},$l={},la=function(t,a,i){let r=Promise.resolve();if(a&&a.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(a.map(d=>{if(d=Sp(d),d in $l)return;$l[d]=!0;const c=d.endsWith(".css"),h=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${d}"]${h}`))return;const p=document.createElement("link");if(p.rel=c?"stylesheet":jp,c||(p.as="script"),p.crossOrigin="",p.href=d,l&&p.setAttribute("nonce",l),document.head.appendChild(p),c)return new Promise((f,b)=>{p.addEventListener("load",f),p.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${d}`)))})}))}function s(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&s(l.reason);return t().catch(s)})};var it;(function(e){e.assertEqual=r=>{};function t(r){}e.assertIs=t;function a(r){throw new Error}e.assertNever=a,e.arrayToEnum=r=>{const s={};for(const o of r)s[o]=o;return s},e.getValidEnumValues=r=>{const s=e.objectKeys(r).filter(l=>typeof r[r[l]]!="number"),o={};for(const l of s)o[l]=r[l];return e.objectValues(o)},e.objectValues=r=>e.objectKeys(r).map(function(s){return r[s]}),e.objectKeys=typeof Object.keys=="function"?r=>Object.keys(r):r=>{const s=[];for(const o in r)Object.prototype.hasOwnProperty.call(r,o)&&s.push(o);return s},e.find=(r,s)=>{for(const o of r)if(s(o))return o},e.isInteger=typeof Number.isInteger=="function"?r=>Number.isInteger(r):r=>typeof r=="number"&&Number.isFinite(r)&&Math.floor(r)===r;function i(r,s=" | "){return r.map(o=>typeof o=="string"?`'${o}'`:o).join(s)}e.joinValues=i,e.jsonStringifyReplacer=(r,s)=>typeof s=="bigint"?s.toString():s})(it||(it={}));var Bl;(function(e){e.mergeShapes=(t,a)=>({...t,...a})})(Bl||(Bl={}));const xe=it.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),un=e=>{switch(typeof e){case"undefined":return xe.undefined;case"string":return xe.string;case"number":return Number.isNaN(e)?xe.nan:xe.number;case"boolean":return xe.boolean;case"function":return xe.function;case"bigint":return xe.bigint;case"symbol":return xe.symbol;case"object":return Array.isArray(e)?xe.array:e===null?xe.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?xe.promise:typeof Map<"u"&&e instanceof Map?xe.map:typeof Set<"u"&&e instanceof Set?xe.set:typeof Date<"u"&&e instanceof Date?xe.date:xe.object;default:return xe.unknown}},te=it.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class Qa extends Error{get errors(){return this.issues}constructor(t){super(),this.issues=[],this.addIssue=i=>{this.issues=[...this.issues,i]},this.addIssues=(i=[])=>{this.issues=[...this.issues,...i]};const a=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,a):this.__proto__=a,this.name="ZodError",this.issues=t}format(t){const a=t||function(s){return s.message},i={_errors:[]},r=s=>{for(const o of s.issues)if(o.code==="invalid_union")o.unionErrors.map(r);else if(o.code==="invalid_return_type")r(o.returnTypeError);else if(o.code==="invalid_arguments")r(o.argumentsError);else if(o.path.length===0)i._errors.push(a(o));else{let l=i,d=0;for(;d<o.path.length;){const c=o.path[d];d===o.path.length-1?(l[c]=l[c]||{_errors:[]},l[c]._errors.push(a(o))):l[c]=l[c]||{_errors:[]},l=l[c],d++}}};return r(this),i}static assert(t){if(!(t instanceof Qa))throw new Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,it.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(t=a=>a.message){const a={},i=[];for(const r of this.issues)if(r.path.length>0){const s=r.path[0];a[s]=a[s]||[],a[s].push(t(r))}else i.push(t(r));return{formErrors:i,fieldErrors:a}}get formErrors(){return this.flatten()}}Qa.create=e=>new Qa(e);const eo=(e,t)=>{let a;switch(e.code){case te.invalid_type:e.received===xe.undefined?a="Required":a=`Expected ${e.expected}, received ${e.received}`;break;case te.invalid_literal:a=`Invalid literal value, expected ${JSON.stringify(e.expected,it.jsonStringifyReplacer)}`;break;case te.unrecognized_keys:a=`Unrecognized key(s) in object: ${it.joinValues(e.keys,", ")}`;break;case te.invalid_union:a="Invalid input";break;case te.invalid_union_discriminator:a=`Invalid discriminator value. Expected ${it.joinValues(e.options)}`;break;case te.invalid_enum_value:a=`Invalid enum value. Expected ${it.joinValues(e.options)}, received '${e.received}'`;break;case te.invalid_arguments:a="Invalid function arguments";break;case te.invalid_return_type:a="Invalid function return type";break;case te.invalid_date:a="Invalid date";break;case te.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(a=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(a=`${a} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?a=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?a=`Invalid input: must end with "${e.validation.endsWith}"`:it.assertNever(e.validation):e.validation!=="regex"?a=`Invalid ${e.validation}`:a="Invalid";break;case te.too_small:e.type==="array"?a=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?a=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?a=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="bigint"?a=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?a=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:a="Invalid input";break;case te.too_big:e.type==="array"?a=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?a=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?a=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?a=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?a=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:a="Invalid input";break;case te.custom:a="Invalid input";break;case te.invalid_intersection_types:a="Intersection results could not be merged";break;case te.not_multiple_of:a=`Number must be a multiple of ${e.multipleOf}`;break;case te.not_finite:a="Number must be finite";break;default:a=t.defaultError,it.assertNever(e)}return{message:a}};let _p=eo;function Cp(){return _p}const Tp=e=>{const{data:t,path:a,errorMaps:i,issueData:r}=e,s=[...a,...r.path||[]],o={...r,path:s};if(r.message!==void 0)return{...r,path:s,message:r.message};let l="";const d=i.filter(c=>!!c).slice().reverse();for(const c of d)l=c(o,{data:t,defaultError:l}).message;return{...r,path:s,message:l}};function pe(e,t){const a=Cp(),i=Tp({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,a,a===eo?void 0:eo].filter(r=>!!r)});e.common.issues.push(i)}class Xt{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,a){const i=[];for(const r of a){if(r.status==="aborted")return Le;r.status==="dirty"&&t.dirty(),i.push(r.value)}return{status:t.value,value:i}}static async mergeObjectAsync(t,a){const i=[];for(const r of a){const s=await r.key,o=await r.value;i.push({key:s,value:o})}return Xt.mergeObjectSync(t,i)}static mergeObjectSync(t,a){const i={};for(const r of a){const{key:s,value:o}=r;if(s.status==="aborted"||o.status==="aborted")return Le;s.status==="dirty"&&t.dirty(),o.status==="dirty"&&t.dirty(),s.value!=="__proto__"&&(typeof o.value<"u"||r.alwaysSet)&&(i[s.value]=o.value)}return{status:t.value,value:i}}}const Le=Object.freeze({status:"aborted"}),Ri=e=>({status:"dirty",value:e}),da=e=>({status:"valid",value:e}),Dl=e=>e.status==="aborted",Ol=e=>e.status==="dirty",li=e=>e.status==="valid",Ts=e=>typeof Promise<"u"&&e instanceof Promise;var _e;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t==null?void 0:t.message})(_e||(_e={}));class Ma{constructor(t,a,i,r){this._cachedPath=[],this.parent=t,this.data=a,this._path=i,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const zl=(e,t)=>{if(li(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const a=new Qa(e.common.issues);return this._error=a,this._error}}};function Fe(e){if(!e)return{};const{errorMap:t,invalid_type_error:a,required_error:i,description:r}=e;if(t&&(a||i))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:r}:{errorMap:(o,l)=>{const{message:d}=e;return o.code==="invalid_enum_value"?{message:d??l.defaultError}:typeof l.data>"u"?{message:d??i??l.defaultError}:o.code!=="invalid_type"?{message:l.defaultError}:{message:d??a??l.defaultError}},description:r}}class Ve{get description(){return this._def.description}_getType(t){return un(t.data)}_getOrReturnCtx(t,a){return a||{common:t.parent.common,data:t.data,parsedType:un(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new Xt,ctx:{common:t.parent.common,data:t.data,parsedType:un(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){const a=this._parse(t);if(Ts(a))throw new Error("Synchronous parse encountered promise.");return a}_parseAsync(t){const a=this._parse(t);return Promise.resolve(a)}parse(t,a){const i=this.safeParse(t,a);if(i.success)return i.data;throw i.error}safeParse(t,a){const i={common:{issues:[],async:(a==null?void 0:a.async)??!1,contextualErrorMap:a==null?void 0:a.errorMap},path:(a==null?void 0:a.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:un(t)},r=this._parseSync({data:t,path:i.path,parent:i});return zl(i,r)}"~validate"(t){var i,r;const a={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:un(t)};if(!this["~standard"].async)try{const s=this._parseSync({data:t,path:[],parent:a});return li(s)?{value:s.value}:{issues:a.common.issues}}catch(s){(r=(i=s==null?void 0:s.message)==null?void 0:i.toLowerCase())!=null&&r.includes("encountered")&&(this["~standard"].async=!0),a.common={issues:[],async:!0}}return this._parseAsync({data:t,path:[],parent:a}).then(s=>li(s)?{value:s.value}:{issues:a.common.issues})}async parseAsync(t,a){const i=await this.safeParseAsync(t,a);if(i.success)return i.data;throw i.error}async safeParseAsync(t,a){const i={common:{issues:[],contextualErrorMap:a==null?void 0:a.errorMap,async:!0},path:(a==null?void 0:a.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:un(t)},r=this._parse({data:t,path:i.path,parent:i}),s=await(Ts(r)?r:Promise.resolve(r));return zl(i,s)}refine(t,a){const i=r=>typeof a=="string"||typeof a>"u"?{message:a}:typeof a=="function"?a(r):a;return this._refinement((r,s)=>{const o=t(r),l=()=>s.addIssue({code:te.custom,...i(r)});return typeof Promise<"u"&&o instanceof Promise?o.then(d=>d?!0:(l(),!1)):o?!0:(l(),!1)})}refinement(t,a){return this._refinement((i,r)=>t(i)?!0:(r.addIssue(typeof a=="function"?a(i,r):a),!1))}_refinement(t){return new Ln({schema:this,typeName:$e.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:a=>this["~validate"](a)}}optional(){return Za.create(this,this._def)}nullable(){return $n.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Aa.create(this)}promise(){return Ls.create(this,this._def)}or(t){return Ms.create([this,t],this._def)}and(t){return Ps.create(this,t,this._def)}transform(t){return new Ln({...Fe(this._def),schema:this,typeName:$e.ZodEffects,effect:{type:"transform",transform:t}})}default(t){const a=typeof t=="function"?t:()=>t;return new $s({...Fe(this._def),innerType:this,defaultValue:a,typeName:$e.ZodDefault})}brand(){return new Qc({typeName:$e.ZodBranded,type:this,...Fe(this._def)})}catch(t){const a=typeof t=="function"?t:()=>t;return new Bs({...Fe(this._def),innerType:this,catchValue:a,typeName:$e.ZodCatch})}describe(t){const a=this.constructor;return new a({...this._def,description:t})}pipe(t){return Lo.create(this,t)}readonly(){return Ds.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const Ap=/^c[^\s-]{8,}$/i,Ep=/^[0-9a-z]+$/,Mp=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Pp=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Ip=/^[a-z0-9_-]{21}$/i,Rp=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Lp=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,$p=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Bp="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let fr;const Dp=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Op=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,zp=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Np=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Fp=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Hp=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Zc="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",Up=new RegExp(`^${Zc}$`);function Jc(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision==null&&(t=`${t}(\\.\\d+)?`);const a=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${a}`}function Gp(e){return new RegExp(`^${Jc(e)}$`)}function qp(e){let t=`${Zc}T${Jc(e)}`;const a=[];return a.push(e.local?"Z?":"Z"),e.offset&&a.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${a.join("|")})`,new RegExp(`^${t}$`)}function Wp(e,t){return!!((t==="v4"||!t)&&Dp.test(e)||(t==="v6"||!t)&&zp.test(e))}function Kp(e,t){if(!Rp.test(e))return!1;try{const[a]=e.split(".");if(!a)return!1;const i=a.replace(/-/g,"+").replace(/_/g,"/").padEnd(a.length+(4-a.length%4)%4,"="),r=JSON.parse(atob(i));return!(typeof r!="object"||r===null||"typ"in r&&(r==null?void 0:r.typ)!=="JWT"||!r.alg||t&&r.alg!==t)}catch{return!1}}function Vp(e,t){return!!((t==="v4"||!t)&&Op.test(e)||(t==="v6"||!t)&&Np.test(e))}class Ca extends Ve{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==xe.string){const s=this._getOrReturnCtx(t);return pe(s,{code:te.invalid_type,expected:xe.string,received:s.parsedType}),Le}const i=new Xt;let r;for(const s of this._def.checks)if(s.kind==="min")t.data.length<s.value&&(r=this._getOrReturnCtx(t,r),pe(r,{code:te.too_small,minimum:s.value,type:"string",inclusive:!0,exact:!1,message:s.message}),i.dirty());else if(s.kind==="max")t.data.length>s.value&&(r=this._getOrReturnCtx(t,r),pe(r,{code:te.too_big,maximum:s.value,type:"string",inclusive:!0,exact:!1,message:s.message}),i.dirty());else if(s.kind==="length"){const o=t.data.length>s.value,l=t.data.length<s.value;(o||l)&&(r=this._getOrReturnCtx(t,r),o?pe(r,{code:te.too_big,maximum:s.value,type:"string",inclusive:!0,exact:!0,message:s.message}):l&&pe(r,{code:te.too_small,minimum:s.value,type:"string",inclusive:!0,exact:!0,message:s.message}),i.dirty())}else if(s.kind==="email")$p.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"email",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="emoji")fr||(fr=new RegExp(Bp,"u")),fr.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"emoji",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="uuid")Pp.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"uuid",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="nanoid")Ip.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"nanoid",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="cuid")Ap.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"cuid",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="cuid2")Ep.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"cuid2",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="ulid")Mp.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"ulid",code:te.invalid_string,message:s.message}),i.dirty());else if(s.kind==="url")try{new URL(t.data)}catch{r=this._getOrReturnCtx(t,r),pe(r,{validation:"url",code:te.invalid_string,message:s.message}),i.dirty()}else s.kind==="regex"?(s.regex.lastIndex=0,s.regex.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"regex",code:te.invalid_string,message:s.message}),i.dirty())):s.kind==="trim"?t.data=t.data.trim():s.kind==="includes"?t.data.includes(s.value,s.position)||(r=this._getOrReturnCtx(t,r),pe(r,{code:te.invalid_string,validation:{includes:s.value,position:s.position},message:s.message}),i.dirty()):s.kind==="toLowerCase"?t.data=t.data.toLowerCase():s.kind==="toUpperCase"?t.data=t.data.toUpperCase():s.kind==="startsWith"?t.data.startsWith(s.value)||(r=this._getOrReturnCtx(t,r),pe(r,{code:te.invalid_string,validation:{startsWith:s.value},message:s.message}),i.dirty()):s.kind==="endsWith"?t.data.endsWith(s.value)||(r=this._getOrReturnCtx(t,r),pe(r,{code:te.invalid_string,validation:{endsWith:s.value},message:s.message}),i.dirty()):s.kind==="datetime"?qp(s).test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{code:te.invalid_string,validation:"datetime",message:s.message}),i.dirty()):s.kind==="date"?Up.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{code:te.invalid_string,validation:"date",message:s.message}),i.dirty()):s.kind==="time"?Gp(s).test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{code:te.invalid_string,validation:"time",message:s.message}),i.dirty()):s.kind==="duration"?Lp.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"duration",code:te.invalid_string,message:s.message}),i.dirty()):s.kind==="ip"?Wp(t.data,s.version)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"ip",code:te.invalid_string,message:s.message}),i.dirty()):s.kind==="jwt"?Kp(t.data,s.alg)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"jwt",code:te.invalid_string,message:s.message}),i.dirty()):s.kind==="cidr"?Vp(t.data,s.version)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"cidr",code:te.invalid_string,message:s.message}),i.dirty()):s.kind==="base64"?Fp.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"base64",code:te.invalid_string,message:s.message}),i.dirty()):s.kind==="base64url"?Hp.test(t.data)||(r=this._getOrReturnCtx(t,r),pe(r,{validation:"base64url",code:te.invalid_string,message:s.message}),i.dirty()):it.assertNever(s);return{status:i.value,value:t.data}}_regex(t,a,i){return this.refinement(r=>t.test(r),{validation:a,code:te.invalid_string,..._e.errToObj(i)})}_addCheck(t){return new Ca({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",..._e.errToObj(t)})}url(t){return this._addCheck({kind:"url",..._e.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",..._e.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",..._e.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",..._e.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",..._e.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",..._e.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",..._e.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",..._e.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",..._e.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",..._e.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",..._e.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",..._e.errToObj(t)})}datetime(t){return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,offset:(t==null?void 0:t.offset)??!1,local:(t==null?void 0:t.local)??!1,..._e.errToObj(t==null?void 0:t.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){return typeof t=="string"?this._addCheck({kind:"time",precision:null,message:t}):this._addCheck({kind:"time",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,..._e.errToObj(t==null?void 0:t.message)})}duration(t){return this._addCheck({kind:"duration",..._e.errToObj(t)})}regex(t,a){return this._addCheck({kind:"regex",regex:t,..._e.errToObj(a)})}includes(t,a){return this._addCheck({kind:"includes",value:t,position:a==null?void 0:a.position,..._e.errToObj(a==null?void 0:a.message)})}startsWith(t,a){return this._addCheck({kind:"startsWith",value:t,..._e.errToObj(a)})}endsWith(t,a){return this._addCheck({kind:"endsWith",value:t,..._e.errToObj(a)})}min(t,a){return this._addCheck({kind:"min",value:t,..._e.errToObj(a)})}max(t,a){return this._addCheck({kind:"max",value:t,..._e.errToObj(a)})}length(t,a){return this._addCheck({kind:"length",value:t,..._e.errToObj(a)})}nonempty(t){return this.min(1,_e.errToObj(t))}trim(){return new Ca({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new Ca({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new Ca({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find(t=>t.kind==="date")}get isTime(){return!!this._def.checks.find(t=>t.kind==="time")}get isDuration(){return!!this._def.checks.find(t=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(t=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find(t=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find(t=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find(t=>t.kind==="base64url")}get minLength(){let t=null;for(const a of this._def.checks)a.kind==="min"&&(t===null||a.value>t)&&(t=a.value);return t}get maxLength(){let t=null;for(const a of this._def.checks)a.kind==="max"&&(t===null||a.value<t)&&(t=a.value);return t}}Ca.create=e=>new Ca({checks:[],typeName:$e.ZodString,coerce:(e==null?void 0:e.coerce)??!1,...Fe(e)});function Yp(e,t){const a=(e.toString().split(".")[1]||"").length,i=(t.toString().split(".")[1]||"").length,r=a>i?a:i,s=Number.parseInt(e.toFixed(r).replace(".","")),o=Number.parseInt(t.toFixed(r).replace(".",""));return s%o/10**r}class Mn extends Ve{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==xe.number){const s=this._getOrReturnCtx(t);return pe(s,{code:te.invalid_type,expected:xe.number,received:s.parsedType}),Le}let i;const r=new Xt;for(const s of this._def.checks)s.kind==="int"?it.isInteger(t.data)||(i=this._getOrReturnCtx(t,i),pe(i,{code:te.invalid_type,expected:"integer",received:"float",message:s.message}),r.dirty()):s.kind==="min"?(s.inclusive?t.data<s.value:t.data<=s.value)&&(i=this._getOrReturnCtx(t,i),pe(i,{code:te.too_small,minimum:s.value,type:"number",inclusive:s.inclusive,exact:!1,message:s.message}),r.dirty()):s.kind==="max"?(s.inclusive?t.data>s.value:t.data>=s.value)&&(i=this._getOrReturnCtx(t,i),pe(i,{code:te.too_big,maximum:s.value,type:"number",inclusive:s.inclusive,exact:!1,message:s.message}),r.dirty()):s.kind==="multipleOf"?Yp(t.data,s.value)!==0&&(i=this._getOrReturnCtx(t,i),pe(i,{code:te.not_multiple_of,multipleOf:s.value,message:s.message}),r.dirty()):s.kind==="finite"?Number.isFinite(t.data)||(i=this._getOrReturnCtx(t,i),pe(i,{code:te.not_finite,message:s.message}),r.dirty()):it.assertNever(s);return{status:r.value,value:t.data}}gte(t,a){return this.setLimit("min",t,!0,_e.toString(a))}gt(t,a){return this.setLimit("min",t,!1,_e.toString(a))}lte(t,a){return this.setLimit("max",t,!0,_e.toString(a))}lt(t,a){return this.setLimit("max",t,!1,_e.toString(a))}setLimit(t,a,i,r){return new Mn({...this._def,checks:[...this._def.checks,{kind:t,value:a,inclusive:i,message:_e.toString(r)}]})}_addCheck(t){return new Mn({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:_e.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:_e.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:_e.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:_e.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:_e.toString(t)})}multipleOf(t,a){return this._addCheck({kind:"multipleOf",value:t,message:_e.toString(a)})}finite(t){return this._addCheck({kind:"finite",message:_e.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:_e.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:_e.toString(t)})}get minValue(){let t=null;for(const a of this._def.checks)a.kind==="min"&&(t===null||a.value>t)&&(t=a.value);return t}get maxValue(){let t=null;for(const a of this._def.checks)a.kind==="max"&&(t===null||a.value<t)&&(t=a.value);return t}get isInt(){return!!this._def.checks.find(t=>t.kind==="int"||t.kind==="multipleOf"&&it.isInteger(t.value))}get isFinite(){let t=null,a=null;for(const i of this._def.checks){if(i.kind==="finite"||i.kind==="int"||i.kind==="multipleOf")return!0;i.kind==="min"?(a===null||i.value>a)&&(a=i.value):i.kind==="max"&&(t===null||i.value<t)&&(t=i.value)}return Number.isFinite(a)&&Number.isFinite(t)}}Mn.create=e=>new Mn({checks:[],typeName:$e.ZodNumber,coerce:(e==null?void 0:e.coerce)||!1,...Fe(e)});class Pn extends Ve{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==xe.bigint)return this._getInvalidInput(t);let i;const r=new Xt;for(const s of this._def.checks)s.kind==="min"?(s.inclusive?t.data<s.value:t.data<=s.value)&&(i=this._getOrReturnCtx(t,i),pe(i,{code:te.too_small,type:"bigint",minimum:s.value,inclusive:s.inclusive,message:s.message}),r.dirty()):s.kind==="max"?(s.inclusive?t.data>s.value:t.data>=s.value)&&(i=this._getOrReturnCtx(t,i),pe(i,{code:te.too_big,type:"bigint",maximum:s.value,inclusive:s.inclusive,message:s.message}),r.dirty()):s.kind==="multipleOf"?t.data%s.value!==BigInt(0)&&(i=this._getOrReturnCtx(t,i),pe(i,{code:te.not_multiple_of,multipleOf:s.value,message:s.message}),r.dirty()):it.assertNever(s);return{status:r.value,value:t.data}}_getInvalidInput(t){const a=this._getOrReturnCtx(t);return pe(a,{code:te.invalid_type,expected:xe.bigint,received:a.parsedType}),Le}gte(t,a){return this.setLimit("min",t,!0,_e.toString(a))}gt(t,a){return this.setLimit("min",t,!1,_e.toString(a))}lte(t,a){return this.setLimit("max",t,!0,_e.toString(a))}lt(t,a){return this.setLimit("max",t,!1,_e.toString(a))}setLimit(t,a,i,r){return new Pn({...this._def,checks:[...this._def.checks,{kind:t,value:a,inclusive:i,message:_e.toString(r)}]})}_addCheck(t){return new Pn({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:_e.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:_e.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:_e.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:_e.toString(t)})}multipleOf(t,a){return this._addCheck({kind:"multipleOf",value:t,message:_e.toString(a)})}get minValue(){let t=null;for(const a of this._def.checks)a.kind==="min"&&(t===null||a.value>t)&&(t=a.value);return t}get maxValue(){let t=null;for(const a of this._def.checks)a.kind==="max"&&(t===null||a.value<t)&&(t=a.value);return t}}Pn.create=e=>new Pn({checks:[],typeName:$e.ZodBigInt,coerce:(e==null?void 0:e.coerce)??!1,...Fe(e)});class As extends Ve{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==xe.boolean){const i=this._getOrReturnCtx(t);return pe(i,{code:te.invalid_type,expected:xe.boolean,received:i.parsedType}),Le}return da(t.data)}}As.create=e=>new As({typeName:$e.ZodBoolean,coerce:(e==null?void 0:e.coerce)||!1,...Fe(e)});class di extends Ve{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==xe.date){const s=this._getOrReturnCtx(t);return pe(s,{code:te.invalid_type,expected:xe.date,received:s.parsedType}),Le}if(Number.isNaN(t.data.getTime())){const s=this._getOrReturnCtx(t);return pe(s,{code:te.invalid_date}),Le}const i=new Xt;let r;for(const s of this._def.checks)s.kind==="min"?t.data.getTime()<s.value&&(r=this._getOrReturnCtx(t,r),pe(r,{code:te.too_small,message:s.message,inclusive:!0,exact:!1,minimum:s.value,type:"date"}),i.dirty()):s.kind==="max"?t.data.getTime()>s.value&&(r=this._getOrReturnCtx(t,r),pe(r,{code:te.too_big,message:s.message,inclusive:!0,exact:!1,maximum:s.value,type:"date"}),i.dirty()):it.assertNever(s);return{status:i.value,value:new Date(t.data.getTime())}}_addCheck(t){return new di({...this._def,checks:[...this._def.checks,t]})}min(t,a){return this._addCheck({kind:"min",value:t.getTime(),message:_e.toString(a)})}max(t,a){return this._addCheck({kind:"max",value:t.getTime(),message:_e.toString(a)})}get minDate(){let t=null;for(const a of this._def.checks)a.kind==="min"&&(t===null||a.value>t)&&(t=a.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(const a of this._def.checks)a.kind==="max"&&(t===null||a.value<t)&&(t=a.value);return t!=null?new Date(t):null}}di.create=e=>new di({checks:[],coerce:(e==null?void 0:e.coerce)||!1,typeName:$e.ZodDate,...Fe(e)});class Nl extends Ve{_parse(t){if(this._getType(t)!==xe.symbol){const i=this._getOrReturnCtx(t);return pe(i,{code:te.invalid_type,expected:xe.symbol,received:i.parsedType}),Le}return da(t.data)}}Nl.create=e=>new Nl({typeName:$e.ZodSymbol,...Fe(e)});class Es extends Ve{_parse(t){if(this._getType(t)!==xe.undefined){const i=this._getOrReturnCtx(t);return pe(i,{code:te.invalid_type,expected:xe.undefined,received:i.parsedType}),Le}return da(t.data)}}Es.create=e=>new Es({typeName:$e.ZodUndefined,...Fe(e)});class to extends Ve{_parse(t){if(this._getType(t)!==xe.null){const i=this._getOrReturnCtx(t);return pe(i,{code:te.invalid_type,expected:xe.null,received:i.parsedType}),Le}return da(t.data)}}to.create=e=>new to({typeName:$e.ZodNull,...Fe(e)});class Fl extends Ve{constructor(){super(...arguments),this._any=!0}_parse(t){return da(t.data)}}Fl.create=e=>new Fl({typeName:$e.ZodAny,...Fe(e)});class ao extends Ve{constructor(){super(...arguments),this._unknown=!0}_parse(t){return da(t.data)}}ao.create=e=>new ao({typeName:$e.ZodUnknown,...Fe(e)});class mn extends Ve{_parse(t){const a=this._getOrReturnCtx(t);return pe(a,{code:te.invalid_type,expected:xe.never,received:a.parsedType}),Le}}mn.create=e=>new mn({typeName:$e.ZodNever,...Fe(e)});class Hl extends Ve{_parse(t){if(this._getType(t)!==xe.undefined){const i=this._getOrReturnCtx(t);return pe(i,{code:te.invalid_type,expected:xe.void,received:i.parsedType}),Le}return da(t.data)}}Hl.create=e=>new Hl({typeName:$e.ZodVoid,...Fe(e)});class Aa extends Ve{_parse(t){const{ctx:a,status:i}=this._processInputParams(t),r=this._def;if(a.parsedType!==xe.array)return pe(a,{code:te.invalid_type,expected:xe.array,received:a.parsedType}),Le;if(r.exactLength!==null){const o=a.data.length>r.exactLength.value,l=a.data.length<r.exactLength.value;(o||l)&&(pe(a,{code:o?te.too_big:te.too_small,minimum:l?r.exactLength.value:void 0,maximum:o?r.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:r.exactLength.message}),i.dirty())}if(r.minLength!==null&&a.data.length<r.minLength.value&&(pe(a,{code:te.too_small,minimum:r.minLength.value,type:"array",inclusive:!0,exact:!1,message:r.minLength.message}),i.dirty()),r.maxLength!==null&&a.data.length>r.maxLength.value&&(pe(a,{code:te.too_big,maximum:r.maxLength.value,type:"array",inclusive:!0,exact:!1,message:r.maxLength.message}),i.dirty()),a.common.async)return Promise.all([...a.data].map((o,l)=>r.type._parseAsync(new Ma(a,o,a.path,l)))).then(o=>Xt.mergeArray(i,o));const s=[...a.data].map((o,l)=>r.type._parseSync(new Ma(a,o,a.path,l)));return Xt.mergeArray(i,s)}get element(){return this._def.type}min(t,a){return new Aa({...this._def,minLength:{value:t,message:_e.toString(a)}})}max(t,a){return new Aa({...this._def,maxLength:{value:t,message:_e.toString(a)}})}length(t,a){return new Aa({...this._def,exactLength:{value:t,message:_e.toString(a)}})}nonempty(t){return this.min(1,t)}}Aa.create=(e,t)=>new Aa({type:e,minLength:null,maxLength:null,exactLength:null,typeName:$e.ZodArray,...Fe(t)});function Qn(e){if(e instanceof _t){const t={};for(const a in e.shape){const i=e.shape[a];t[a]=Za.create(Qn(i))}return new _t({...e._def,shape:()=>t})}else return e instanceof Aa?new Aa({...e._def,type:Qn(e.element)}):e instanceof Za?Za.create(Qn(e.unwrap())):e instanceof $n?$n.create(Qn(e.unwrap())):e instanceof In?In.create(e.items.map(t=>Qn(t))):e}class _t extends Ve{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const t=this._def.shape(),a=it.objectKeys(t);return this._cached={shape:t,keys:a},this._cached}_parse(t){if(this._getType(t)!==xe.object){const c=this._getOrReturnCtx(t);return pe(c,{code:te.invalid_type,expected:xe.object,received:c.parsedType}),Le}const{status:i,ctx:r}=this._processInputParams(t),{shape:s,keys:o}=this._getCached(),l=[];if(!(this._def.catchall instanceof mn&&this._def.unknownKeys==="strip"))for(const c in r.data)o.includes(c)||l.push(c);const d=[];for(const c of o){const h=s[c],p=r.data[c];d.push({key:{status:"valid",value:c},value:h._parse(new Ma(r,p,r.path,c)),alwaysSet:c in r.data})}if(this._def.catchall instanceof mn){const c=this._def.unknownKeys;if(c==="passthrough")for(const h of l)d.push({key:{status:"valid",value:h},value:{status:"valid",value:r.data[h]}});else if(c==="strict")l.length>0&&(pe(r,{code:te.unrecognized_keys,keys:l}),i.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const c=this._def.catchall;for(const h of l){const p=r.data[h];d.push({key:{status:"valid",value:h},value:c._parse(new Ma(r,p,r.path,h)),alwaysSet:h in r.data})}}return r.common.async?Promise.resolve().then(async()=>{const c=[];for(const h of d){const p=await h.key,f=await h.value;c.push({key:p,value:f,alwaysSet:h.alwaysSet})}return c}).then(c=>Xt.mergeObjectSync(i,c)):Xt.mergeObjectSync(i,d)}get shape(){return this._def.shape()}strict(t){return _e.errToObj,new _t({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(a,i)=>{var s,o;const r=((o=(s=this._def).errorMap)==null?void 0:o.call(s,a,i).message)??i.defaultError;return a.code==="unrecognized_keys"?{message:_e.errToObj(t).message??r}:{message:r}}}:{}})}strip(){return new _t({...this._def,unknownKeys:"strip"})}passthrough(){return new _t({...this._def,unknownKeys:"passthrough"})}extend(t){return new _t({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new _t({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:$e.ZodObject})}setKey(t,a){return this.augment({[t]:a})}catchall(t){return new _t({...this._def,catchall:t})}pick(t){const a={};for(const i of it.objectKeys(t))t[i]&&this.shape[i]&&(a[i]=this.shape[i]);return new _t({...this._def,shape:()=>a})}omit(t){const a={};for(const i of it.objectKeys(this.shape))t[i]||(a[i]=this.shape[i]);return new _t({...this._def,shape:()=>a})}deepPartial(){return Qn(this)}partial(t){const a={};for(const i of it.objectKeys(this.shape)){const r=this.shape[i];t&&!t[i]?a[i]=r:a[i]=r.optional()}return new _t({...this._def,shape:()=>a})}required(t){const a={};for(const i of it.objectKeys(this.shape))if(t&&!t[i])a[i]=this.shape[i];else{let s=this.shape[i];for(;s instanceof Za;)s=s._def.innerType;a[i]=s}return new _t({...this._def,shape:()=>a})}keyof(){return Xc(it.objectKeys(this.shape))}}_t.create=(e,t)=>new _t({shape:()=>e,unknownKeys:"strip",catchall:mn.create(),typeName:$e.ZodObject,...Fe(t)});_t.strictCreate=(e,t)=>new _t({shape:()=>e,unknownKeys:"strict",catchall:mn.create(),typeName:$e.ZodObject,...Fe(t)});_t.lazycreate=(e,t)=>new _t({shape:e,unknownKeys:"strip",catchall:mn.create(),typeName:$e.ZodObject,...Fe(t)});class Ms extends Ve{_parse(t){const{ctx:a}=this._processInputParams(t),i=this._def.options;function r(s){for(const l of s)if(l.result.status==="valid")return l.result;for(const l of s)if(l.result.status==="dirty")return a.common.issues.push(...l.ctx.common.issues),l.result;const o=s.map(l=>new Qa(l.ctx.common.issues));return pe(a,{code:te.invalid_union,unionErrors:o}),Le}if(a.common.async)return Promise.all(i.map(async s=>{const o={...a,common:{...a.common,issues:[]},parent:null};return{result:await s._parseAsync({data:a.data,path:a.path,parent:o}),ctx:o}})).then(r);{let s;const o=[];for(const d of i){const c={...a,common:{...a.common,issues:[]},parent:null},h=d._parseSync({data:a.data,path:a.path,parent:c});if(h.status==="valid")return h;h.status==="dirty"&&!s&&(s={result:h,ctx:c}),c.common.issues.length&&o.push(c.common.issues)}if(s)return a.common.issues.push(...s.ctx.common.issues),s.result;const l=o.map(d=>new Qa(d));return pe(a,{code:te.invalid_union,unionErrors:l}),Le}}get options(){return this._def.options}}Ms.create=(e,t)=>new Ms({options:e,typeName:$e.ZodUnion,...Fe(t)});const qa=e=>e instanceof io?qa(e.schema):e instanceof Ln?qa(e.innerType()):e instanceof Rs?[e.value]:e instanceof Rn?e.options:e instanceof so?it.objectValues(e.enum):e instanceof $s?qa(e._def.innerType):e instanceof Es?[void 0]:e instanceof to?[null]:e instanceof Za?[void 0,...qa(e.unwrap())]:e instanceof $n?[null,...qa(e.unwrap())]:e instanceof Qc||e instanceof Ds?qa(e.unwrap()):e instanceof Bs?qa(e._def.innerType):[];class Ro extends Ve{_parse(t){const{ctx:a}=this._processInputParams(t);if(a.parsedType!==xe.object)return pe(a,{code:te.invalid_type,expected:xe.object,received:a.parsedType}),Le;const i=this.discriminator,r=a.data[i],s=this.optionsMap.get(r);return s?a.common.async?s._parseAsync({data:a.data,path:a.path,parent:a}):s._parseSync({data:a.data,path:a.path,parent:a}):(pe(a,{code:te.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[i]}),Le)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,a,i){const r=new Map;for(const s of a){const o=qa(s.shape[t]);if(!o.length)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(const l of o){if(r.has(l))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(l)}`);r.set(l,s)}}return new Ro({typeName:$e.ZodDiscriminatedUnion,discriminator:t,options:a,optionsMap:r,...Fe(i)})}}function no(e,t){const a=un(e),i=un(t);if(e===t)return{valid:!0,data:e};if(a===xe.object&&i===xe.object){const r=it.objectKeys(t),s=it.objectKeys(e).filter(l=>r.indexOf(l)!==-1),o={...e,...t};for(const l of s){const d=no(e[l],t[l]);if(!d.valid)return{valid:!1};o[l]=d.data}return{valid:!0,data:o}}else if(a===xe.array&&i===xe.array){if(e.length!==t.length)return{valid:!1};const r=[];for(let s=0;s<e.length;s++){const o=e[s],l=t[s],d=no(o,l);if(!d.valid)return{valid:!1};r.push(d.data)}return{valid:!0,data:r}}else return a===xe.date&&i===xe.date&&+e==+t?{valid:!0,data:e}:{valid:!1}}class Ps extends Ve{_parse(t){const{status:a,ctx:i}=this._processInputParams(t),r=(s,o)=>{if(Dl(s)||Dl(o))return Le;const l=no(s.value,o.value);return l.valid?((Ol(s)||Ol(o))&&a.dirty(),{status:a.value,value:l.data}):(pe(i,{code:te.invalid_intersection_types}),Le)};return i.common.async?Promise.all([this._def.left._parseAsync({data:i.data,path:i.path,parent:i}),this._def.right._parseAsync({data:i.data,path:i.path,parent:i})]).then(([s,o])=>r(s,o)):r(this._def.left._parseSync({data:i.data,path:i.path,parent:i}),this._def.right._parseSync({data:i.data,path:i.path,parent:i}))}}Ps.create=(e,t,a)=>new Ps({left:e,right:t,typeName:$e.ZodIntersection,...Fe(a)});class In extends Ve{_parse(t){const{status:a,ctx:i}=this._processInputParams(t);if(i.parsedType!==xe.array)return pe(i,{code:te.invalid_type,expected:xe.array,received:i.parsedType}),Le;if(i.data.length<this._def.items.length)return pe(i,{code:te.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),Le;!this._def.rest&&i.data.length>this._def.items.length&&(pe(i,{code:te.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),a.dirty());const s=[...i.data].map((o,l)=>{const d=this._def.items[l]||this._def.rest;return d?d._parse(new Ma(i,o,i.path,l)):null}).filter(o=>!!o);return i.common.async?Promise.all(s).then(o=>Xt.mergeArray(a,o)):Xt.mergeArray(a,s)}get items(){return this._def.items}rest(t){return new In({...this._def,rest:t})}}In.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new In({items:e,typeName:$e.ZodTuple,rest:null,...Fe(t)})};class Is extends Ve{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:a,ctx:i}=this._processInputParams(t);if(i.parsedType!==xe.object)return pe(i,{code:te.invalid_type,expected:xe.object,received:i.parsedType}),Le;const r=[],s=this._def.keyType,o=this._def.valueType;for(const l in i.data)r.push({key:s._parse(new Ma(i,l,i.path,l)),value:o._parse(new Ma(i,i.data[l],i.path,l)),alwaysSet:l in i.data});return i.common.async?Xt.mergeObjectAsync(a,r):Xt.mergeObjectSync(a,r)}get element(){return this._def.valueType}static create(t,a,i){return a instanceof Ve?new Is({keyType:t,valueType:a,typeName:$e.ZodRecord,...Fe(i)}):new Is({keyType:Ca.create(),valueType:t,typeName:$e.ZodRecord,...Fe(a)})}}class Ul extends Ve{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:a,ctx:i}=this._processInputParams(t);if(i.parsedType!==xe.map)return pe(i,{code:te.invalid_type,expected:xe.map,received:i.parsedType}),Le;const r=this._def.keyType,s=this._def.valueType,o=[...i.data.entries()].map(([l,d],c)=>({key:r._parse(new Ma(i,l,i.path,[c,"key"])),value:s._parse(new Ma(i,d,i.path,[c,"value"]))}));if(i.common.async){const l=new Map;return Promise.resolve().then(async()=>{for(const d of o){const c=await d.key,h=await d.value;if(c.status==="aborted"||h.status==="aborted")return Le;(c.status==="dirty"||h.status==="dirty")&&a.dirty(),l.set(c.value,h.value)}return{status:a.value,value:l}})}else{const l=new Map;for(const d of o){const c=d.key,h=d.value;if(c.status==="aborted"||h.status==="aborted")return Le;(c.status==="dirty"||h.status==="dirty")&&a.dirty(),l.set(c.value,h.value)}return{status:a.value,value:l}}}}Ul.create=(e,t,a)=>new Ul({valueType:t,keyType:e,typeName:$e.ZodMap,...Fe(a)});class zi extends Ve{_parse(t){const{status:a,ctx:i}=this._processInputParams(t);if(i.parsedType!==xe.set)return pe(i,{code:te.invalid_type,expected:xe.set,received:i.parsedType}),Le;const r=this._def;r.minSize!==null&&i.data.size<r.minSize.value&&(pe(i,{code:te.too_small,minimum:r.minSize.value,type:"set",inclusive:!0,exact:!1,message:r.minSize.message}),a.dirty()),r.maxSize!==null&&i.data.size>r.maxSize.value&&(pe(i,{code:te.too_big,maximum:r.maxSize.value,type:"set",inclusive:!0,exact:!1,message:r.maxSize.message}),a.dirty());const s=this._def.valueType;function o(d){const c=new Set;for(const h of d){if(h.status==="aborted")return Le;h.status==="dirty"&&a.dirty(),c.add(h.value)}return{status:a.value,value:c}}const l=[...i.data.values()].map((d,c)=>s._parse(new Ma(i,d,i.path,c)));return i.common.async?Promise.all(l).then(d=>o(d)):o(l)}min(t,a){return new zi({...this._def,minSize:{value:t,message:_e.toString(a)}})}max(t,a){return new zi({...this._def,maxSize:{value:t,message:_e.toString(a)}})}size(t,a){return this.min(t,a).max(t,a)}nonempty(t){return this.min(1,t)}}zi.create=(e,t)=>new zi({valueType:e,minSize:null,maxSize:null,typeName:$e.ZodSet,...Fe(t)});class io extends Ve{get schema(){return this._def.getter()}_parse(t){const{ctx:a}=this._processInputParams(t);return this._def.getter()._parse({data:a.data,path:a.path,parent:a})}}io.create=(e,t)=>new io({getter:e,typeName:$e.ZodLazy,...Fe(t)});class Rs extends Ve{_parse(t){if(t.data!==this._def.value){const a=this._getOrReturnCtx(t);return pe(a,{received:a.data,code:te.invalid_literal,expected:this._def.value}),Le}return{status:"valid",value:t.data}}get value(){return this._def.value}}Rs.create=(e,t)=>new Rs({value:e,typeName:$e.ZodLiteral,...Fe(t)});function Xc(e,t){return new Rn({values:e,typeName:$e.ZodEnum,...Fe(t)})}class Rn extends Ve{_parse(t){if(typeof t.data!="string"){const a=this._getOrReturnCtx(t),i=this._def.values;return pe(a,{expected:it.joinValues(i),received:a.parsedType,code:te.invalid_type}),Le}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(t.data)){const a=this._getOrReturnCtx(t),i=this._def.values;return pe(a,{received:a.data,code:te.invalid_enum_value,options:i}),Le}return da(t.data)}get options(){return this._def.values}get enum(){const t={};for(const a of this._def.values)t[a]=a;return t}get Values(){const t={};for(const a of this._def.values)t[a]=a;return t}get Enum(){const t={};for(const a of this._def.values)t[a]=a;return t}extract(t,a=this._def){return Rn.create(t,{...this._def,...a})}exclude(t,a=this._def){return Rn.create(this.options.filter(i=>!t.includes(i)),{...this._def,...a})}}Rn.create=Xc;class so extends Ve{_parse(t){const a=it.getValidEnumValues(this._def.values),i=this._getOrReturnCtx(t);if(i.parsedType!==xe.string&&i.parsedType!==xe.number){const r=it.objectValues(a);return pe(i,{expected:it.joinValues(r),received:i.parsedType,code:te.invalid_type}),Le}if(this._cache||(this._cache=new Set(it.getValidEnumValues(this._def.values))),!this._cache.has(t.data)){const r=it.objectValues(a);return pe(i,{received:i.data,code:te.invalid_enum_value,options:r}),Le}return da(t.data)}get enum(){return this._def.values}}so.create=(e,t)=>new so({values:e,typeName:$e.ZodNativeEnum,...Fe(t)});class Ls extends Ve{unwrap(){return this._def.type}_parse(t){const{ctx:a}=this._processInputParams(t);if(a.parsedType!==xe.promise&&a.common.async===!1)return pe(a,{code:te.invalid_type,expected:xe.promise,received:a.parsedType}),Le;const i=a.parsedType===xe.promise?a.data:Promise.resolve(a.data);return da(i.then(r=>this._def.type.parseAsync(r,{path:a.path,errorMap:a.common.contextualErrorMap})))}}Ls.create=(e,t)=>new Ls({type:e,typeName:$e.ZodPromise,...Fe(t)});class Ln extends Ve{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===$e.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){const{status:a,ctx:i}=this._processInputParams(t),r=this._def.effect||null,s={addIssue:o=>{pe(i,o),o.fatal?a.abort():a.dirty()},get path(){return i.path}};if(s.addIssue=s.addIssue.bind(s),r.type==="preprocess"){const o=r.transform(i.data,s);if(i.common.async)return Promise.resolve(o).then(async l=>{if(a.value==="aborted")return Le;const d=await this._def.schema._parseAsync({data:l,path:i.path,parent:i});return d.status==="aborted"?Le:d.status==="dirty"||a.value==="dirty"?Ri(d.value):d});{if(a.value==="aborted")return Le;const l=this._def.schema._parseSync({data:o,path:i.path,parent:i});return l.status==="aborted"?Le:l.status==="dirty"||a.value==="dirty"?Ri(l.value):l}}if(r.type==="refinement"){const o=l=>{const d=r.refinement(l,s);if(i.common.async)return Promise.resolve(d);if(d instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return l};if(i.common.async===!1){const l=this._def.schema._parseSync({data:i.data,path:i.path,parent:i});return l.status==="aborted"?Le:(l.status==="dirty"&&a.dirty(),o(l.value),{status:a.value,value:l.value})}else return this._def.schema._parseAsync({data:i.data,path:i.path,parent:i}).then(l=>l.status==="aborted"?Le:(l.status==="dirty"&&a.dirty(),o(l.value).then(()=>({status:a.value,value:l.value}))))}if(r.type==="transform")if(i.common.async===!1){const o=this._def.schema._parseSync({data:i.data,path:i.path,parent:i});if(!li(o))return Le;const l=r.transform(o.value,s);if(l instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:a.value,value:l}}else return this._def.schema._parseAsync({data:i.data,path:i.path,parent:i}).then(o=>li(o)?Promise.resolve(r.transform(o.value,s)).then(l=>({status:a.value,value:l})):Le);it.assertNever(r)}}Ln.create=(e,t,a)=>new Ln({schema:e,typeName:$e.ZodEffects,effect:t,...Fe(a)});Ln.createWithPreprocess=(e,t,a)=>new Ln({schema:t,effect:{type:"preprocess",transform:e},typeName:$e.ZodEffects,...Fe(a)});class Za extends Ve{_parse(t){return this._getType(t)===xe.undefined?da(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}Za.create=(e,t)=>new Za({innerType:e,typeName:$e.ZodOptional,...Fe(t)});class $n extends Ve{_parse(t){return this._getType(t)===xe.null?da(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}$n.create=(e,t)=>new $n({innerType:e,typeName:$e.ZodNullable,...Fe(t)});class $s extends Ve{_parse(t){const{ctx:a}=this._processInputParams(t);let i=a.data;return a.parsedType===xe.undefined&&(i=this._def.defaultValue()),this._def.innerType._parse({data:i,path:a.path,parent:a})}removeDefault(){return this._def.innerType}}$s.create=(e,t)=>new $s({innerType:e,typeName:$e.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...Fe(t)});class Bs extends Ve{_parse(t){const{ctx:a}=this._processInputParams(t),i={...a,common:{...a.common,issues:[]}},r=this._def.innerType._parse({data:i.data,path:i.path,parent:{...i}});return Ts(r)?r.then(s=>({status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new Qa(i.common.issues)},input:i.data})})):{status:"valid",value:r.status==="valid"?r.value:this._def.catchValue({get error(){return new Qa(i.common.issues)},input:i.data})}}removeCatch(){return this._def.innerType}}Bs.create=(e,t)=>new Bs({innerType:e,typeName:$e.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...Fe(t)});class Gl extends Ve{_parse(t){if(this._getType(t)!==xe.nan){const i=this._getOrReturnCtx(t);return pe(i,{code:te.invalid_type,expected:xe.nan,received:i.parsedType}),Le}return{status:"valid",value:t.data}}}Gl.create=e=>new Gl({typeName:$e.ZodNaN,...Fe(e)});class Qc extends Ve{_parse(t){const{ctx:a}=this._processInputParams(t),i=a.data;return this._def.type._parse({data:i,path:a.path,parent:a})}unwrap(){return this._def.type}}class Lo extends Ve{_parse(t){const{status:a,ctx:i}=this._processInputParams(t);if(i.common.async)return(async()=>{const s=await this._def.in._parseAsync({data:i.data,path:i.path,parent:i});return s.status==="aborted"?Le:s.status==="dirty"?(a.dirty(),Ri(s.value)):this._def.out._parseAsync({data:s.value,path:i.path,parent:i})})();{const r=this._def.in._parseSync({data:i.data,path:i.path,parent:i});return r.status==="aborted"?Le:r.status==="dirty"?(a.dirty(),{status:"dirty",value:r.value}):this._def.out._parseSync({data:r.value,path:i.path,parent:i})}}static create(t,a){return new Lo({in:t,out:a,typeName:$e.ZodPipeline})}}class Ds extends Ve{_parse(t){const a=this._def.innerType._parse(t),i=r=>(li(r)&&(r.value=Object.freeze(r.value)),r);return Ts(a)?a.then(r=>i(r)):i(a)}unwrap(){return this._def.innerType}}Ds.create=(e,t)=>new Ds({innerType:e,typeName:$e.ZodReadonly,...Fe(t)});var $e;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})($e||($e={}));const m=Ca.create,le=Mn.create;Pn.create;const se=As.create;di.create;const Zp=Es.create,Gi=ao.create;mn.create;const Se=Aa.create,R=_t.create,qi=Ms.create,$o=Ro.create;Ps.create;In.create;const pn=Is.create,st=Rs.create,we=Rn.create;Ls.create;Za.create;$n.create;const Jp={string:e=>Ca.create({...e,coerce:!0}),number:e=>Mn.create({...e,coerce:!0}),boolean:e=>As.create({...e,coerce:!0}),bigint:e=>Pn.create({...e,coerce:!0}),date:e=>di.create({...e,coerce:!0})},Bo=we(["brainstorming","objective","spec-ready","planned","executing","done"]),Wi=we(["brief","qa","audit","help","goal","no_effort"]),Xp=we(["ok","drift","broken"]),an=we(["tinggi","sedang","rendah"]),eu=we(["from-scratch","existing"]),Ja=we(["claude","codex"]);we(["critical","major","minor"]);const ro=we(["bug","fitur","pertanyaan","lainnya"]),Qp=we(["new","accepted","rejected"]),eg=["changed","full"],tu=we(eg),tg=new Set(["goal","no_effort"]);function Bn(e){return e==="qa"?"qa":tg.has(e)?"goal":"brief"}function Do(e){const t=e??{};return"severity"in t?"qa":"goal"in t?"goal":"brief"}function au(e,t){return Do(t)===Bn(e)}function ql(e){return e==="minor"?"sedang":"tinggi"}function Wl(e){return e==="tinggi"?"major":"minor"}const ag={brief:["context","outcome"],qa:["steps","expected","actual","env"],goal:["goal","done"]};function ng(e,t){const a=t??{},i=h=>typeof a[h]=="string"?a[h]:"",r=()=>a.priority==="tinggi"||a.priority==="rendah"?a.priority:"sedang",s=h=>h.filter(p=>i(p)!==""),o=Do(t),l=Bn(e),d=i("fromAudit"),c=(h,p)=>({payload:h,dropped:p,missing:ag[l].filter(f=>typeof h[f]!="string"||h[f]==="")});if(o===l)return{payload:{...a},dropped:[],missing:[]};if(l==="qa")return o==="brief"?c({severity:Wl(r()),steps:"",expected:i("outcome"),actual:i("context"),env:"",constraints:i("constraints"),...d?{fromAudit:d}:{}},[]):c({severity:Wl(r()),steps:"",expected:i("goal"),actual:"",env:"",constraints:i("constraints")},s(["done"]));if(l==="goal"){if(o==="brief"){const h=i("outcome")||i("context");return c({goal:h,done:"",constraints:i("constraints"),priority:r()},s([...i("outcome")?["context"]:[],"fromAudit"]))}return c({goal:i("expected"),done:"",constraints:i("constraints"),priority:ql(a.severity)},s(["steps","actual","env","fromAudit"]))}return o==="qa"?c({context:i("actual"),outcome:i("expected"),constraints:i("constraints"),priority:ql(a.severity),...d?{fromAudit:d}:{}},s(["steps","env"])):c({context:"",outcome:i("goal"),constraints:i("constraints"),priority:r()},s(["done"]))}const nu="superpowers",gi="superpowers:verification-before-completion",ig="Sesi ini TAK BERPENUNGGU — tak ada manusia yang menonton terminal untuk menjawab. Skill mattpocock yang kontraknya mewawancarai manusia (`/grill-me`, `/to-spec`, `/triage`) JANGAN dipakai: pakai primitif model-invoked-nya dan putuskan sendiri. `to-tickets` di fase Plan dipakai HANYA sebagai penghasil berkas plan berkotak `- [ ]` di `docs/matt/plans/`, BUKAN penerbit tiket — hanoman sendiri adalah issue tracker-nya, jadi jangan menulis ke tracker eksternal mana pun.",Dn={superpowers:{id:"superpowers",label:"superpowers",planDir:"docs/superpowers/plans",specDir:"docs/superpowers/specs",phaseSkills:{Brainstorm:["superpowers:brainstorming"],Audit:["superpowers:systematic-debugging"],Plan:["superpowers:writing-plans"],Execute:["superpowers:executing-plans","superpowers:test-driven-development",gi],Verifikasi:[gi]},exitSkills:[gi],requires:["superpowers"],install:{claude:["claude plugin marketplace add obra/superpowers-marketplace","claude plugin install superpowers@superpowers-marketplace"],codex:["codex plugin add superpowers@openai-curated"]}},matt:{id:"matt",label:"mattpocock",planDir:"docs/matt/plans",specDir:"docs/matt/specs",phaseSkills:{Brainstorm:["mattpocock-skills:grilling"],Audit:["mattpocock-skills:diagnosing-bugs"],Plan:["mattpocock-skills:to-tickets"],Execute:["mattpocock-skills:implement","mattpocock-skills:tdd","mattpocock-skills:code-review"],Verifikasi:[gi]},exitSkills:[gi],extraClause:ig,requires:["mattpocock-skills","superpowers"],install:{claude:["claude plugin install mattpocock-skills","claude plugin marketplace add obra/superpowers-marketplace","claude plugin install superpowers@superpowers-marketplace"],codex:["npx skills@latest add mattpocock/skills","codex plugin add superpowers@openai-curated"]}}},Oo=Object.keys(Dn),iu=e=>[...new Set(e)];iu(Oo.map(e=>Dn[e].planDir));iu(Oo.map(e=>Dn[e].specDir));function Kl(e){return(e?Dn[e]:void 0)??Dn[nu]}const Zs=R({enabled:se().default(!1),agent:Ja.default("claude"),model:m().default("opus"),effort:m().default("xhigh")}),su=R({enabled:se().default(!1),progress:se().default(!0),engine:Zs.default({})}),sg=su.parse({}),rg=we(["disabled","misconfigured","ready","running","error"]);R({configured:se(),enabled:se(),running:se(),readiness:rg,botUsername:m().min(1).nullable().default(null),allowlistCount:le().int().min(0),agentTokenConfigured:se(),missingCapabilities:Se(m()).default([]),lastUpdateAt:m().datetime().nullable().default(null),lastError:m().nullable().default(null)});const og=R({id:m().min(1),chatId:m().min(1),content:m().trim().min(1).max(1e3),createdAt:m().datetime(),updatedAt:m().datetime()});R({chatId:m().min(1),userId:m().min(1),sessionId:m().nullable(),activeProjectId:m().nullable(),activeSessionId:m().nullable(),personalityAgentId:m().nullable(),summary:m().max(4e3).nullable(),agent:Ja,model:m().min(1),effort:m().min(1),memories:Se(og)});const lg=["progress","final","decision","failure","confirmation"],dg=we(lg),cg=R({description:m().trim().min(1).max(500),method:we(["POST","PATCH","PUT","DELETE"]),path:m().startsWith("/api/").max(1e3)});R({chatId:m().min(1),updateId:le().int().nonnegative(),kind:dg,text:m().trim().min(1).max(12e3),summary:m().trim().min(1).max(4e3).optional(),remember:Se(m().trim().min(1).max(1e3)).max(20).optional(),confirmation:cg.optional()}).superRefine((e,t)=>{e.kind==="confirmation"&&!e.confirmation&&t.addIssue({code:te.custom,path:["confirmation"],message:"confirmation required"}),e.kind!=="confirmation"&&e.confirmation&&t.addIssue({code:te.custom,path:["confirmation"],message:"confirmation only valid for confirmation replies"})});R({id:m().min(1),chatId:m().nullable(),userId:m().nullable(),updateId:le().int().nonnegative().nullable(),action:m().min(1),outcome:m().min(1),correlationId:m().nullable(),method:m().nullable(),path:m().nullable(),statusCode:le().int().nullable(),createdAt:m().datetime()});R({text:m().trim().min(1).max(16e3)});const ug=["off","default-branch","branch"],Ki=R({mode:we(ug).default("off"),dest:we(["local","origin"]).default("local"),branch:m().min(1).nullable().default(null),deleteBranch:se().default(!1)}),si={mode:"off",dest:"local",branch:null,deleteBranch:!1};function Vl(e){if(e==null)return null;const t=Ki.safeParse(e);return t.success?t.data:null}function hg(e,t){return Vl(t)??Vl(e)??si}const Yl={local:"lokal",origin:"origin"};function ru(e){return e.mode==="off"?"tanpa auto-merge":`auto-merge ke ${e.mode==="default-branch"?`default branch repo (${Yl[e.dest]})`:`${e.branch??"—"} (${Yl[e.dest]})`}${e.deleteBranch?" · hapus branch kerja":""}`}const mg=32*1024,ou=["sessions:read","sessions:write","sessions:spawn","backlog:read","backlog:write","ide:read"],lu=we(ou),pg=R({enabled:se().default(!1),capabilities:Se(lu).default([])}),gg={enabled:!1,capabilities:[]},fg=e=>e<128?1:e<2048?2:e<65536?3:4;function bg(e){let t=0;for(let a=0;a<e.length;a++){const i=e.codePointAt(a);t+=fg(i),i>65535&&a++}return t}const du=R({hubOrigin:m().min(1).max(200),userId:m().min(1).max(200),email:m().min(1).max(320)}).strict(),La=m().min(1).max(64),kg=/(^|\/)\.\.?(\/|$)|%2e|%2f|%5c|\\|[?#]/i,cu=m().max(2048).regex(/^\/api\//).refine(e=>!kg.test(e),"path relay tak sah"),zo=m().refine(e=>bg(e)<=mg,"part relay > 32 KiB"),yg=["GET","POST","PUT","PATCH","DELETE"],vg=R({t:st("welcome"),v:st(1),protocol:le().int(),version:m().max(40)}).strict(),xg=R({t:st("req"),id:La,method:we(yg),path:cu,query:m().max(2048).optional(),body:Gi().optional(),actor:du}).strict(),wg=R({t:st("cancel"),id:La}).strict(),jg=R({t:st("open"),sid:La,path:cu,mode:we(["read","write"]),actor:du}).strict(),Sg=R({t:st("data"),sid:La,d:zo}).strict(),_g=R({t:st("credit"),sid:La,n:le().int().min(1).max(4*1024*1024)}).strict(),uu=R({t:st("close"),sid:La,code:le().int().min(1e3).max(4999),reason:m().max(120).optional()}).strict();$o("t",[vg,xg,wg,jg,Sg,_g,uu]);const Cg=R({t:st("hello"),v:st(1),protocol:le().int(),version:m().max(40),capabilities:Se(lu).max(ou.length)}).strict(),Tg=R({t:st("res"),id:La,status:le().int().min(100).max(599).optional(),contentType:m().max(200).optional(),part:zo,end:se()}).strict(),hu={cols:le().int().min(1).max(1e3),rows:le().int().min(1).max(1e3)},Ag=R({t:st("opened"),sid:La,geometry:R(hu).strict().optional()}).strict(),Eg=R({t:st("geometry"),sid:La,...hu}).strict(),Mg=R({t:st("data"),sid:La,d:zo,more:st(!0).optional()}).strict();$o("t",[Cg,Tg,Ag,Eg,Mg,uu]);R({control:R({enabled:se(),capabilities:Se(m().max(40)).max(20)}).strict().optional(),logs:R({event:se(),server:se(),transcript:se()}).strict().optional()}).strict();const Pg=["event","server","transcript"],Ig=we(Pg),Rg=["debug","info","warn","error"],mu=we(Rg),Lg=4*1024,$g={event:!0,server:!1,transcript:!1},Bg=R({event:se().default(!0),server:se().default(!1),transcript:se().default(!1)}),Dg={eventDays:90,serverDays:7,transcriptDays:30,maxBytes:256*1024**2},br=e=>le().int().min(1).max(365).default(e),Og=R({eventDays:br(90),serverDays:br(7),transcriptDays:br(30),maxBytes:le().int().min(16*1024**2).max(4*1024**3).default(256*1024**2)}),zg=500,Ng=1*1024*1024,Zl=31,Jl=200,Fg=R({seq:m().regex(/^\d+$/),ts:m().datetime(),level:mu,kind:m().min(1).max(64),projectId:m().nullish(),specId:m().nullish(),sessionId:m().nullish(),msg:m().max(Lg),data:pn(Gi()).nullish(),transcript:m().max(Ng).nullish()}).strict();R({lane:Ig,entries:Se(Fg).min(1).max(zg)}).strict();R({from:m().datetime(),to:m().datetime(),deviceId:m().optional(),projectId:m().optional(),specId:m().optional(),lane:m().optional(),level:mu.optional(),kind:m().optional(),q:m().max(200).optional(),cursor:m().optional(),limit:Jp.number().int().min(1).max(Jl).default(Jl)}).strict().refine(e=>Date.parse(e.to)>=Date.parse(e.from),{message:"to < from"}).refine(e=>Date.parse(e.to)-Date.parse(e.from)<=Zl*864e5,{message:`rentang > ${Zl} hari`});const Hg=["feature","qa","scaffold","reverse","prd","audit","breakdown","goal","no_effort"],pu={feature:["Brainstorm","Objective","Spec","Plan","Execute"],qa:["Audit","Spec","Plan","Execute"],scaffold:["Brainstorm","Objective","Doc index"],reverse:["Scan","Docs teknis","Wawancara","Konvensi & index","Serah terima"],prd:["Brainstorm","PRD"],audit:["Audit","Laporan"],breakdown:["Analisis","Breakdown"],goal:["Goal","Verifikasi"],no_effort:["Kerjakan"]},No="hanoman-fase-";function Ug(e){return No+e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}const Gg=e=>e.startsWith(No),gu="2026-09-23-v2",fi=we(["seeded","user"]),qg=R({version:m().default(gu),claude:R({model:fi.default("seeded"),effort:fi.default("seeded")}).default({}),codex:R({model:fi.default("seeded"),effort:fi.default("seeded")}).default({}),orchestration:pn(m(),fi).default({})}),Ae=(e,t)=>({model:e,effort:t}),za=(e,t,a=!0)=>({enabled:a,claude:e,codex:t}),Wg={feature:za({Brainstorm:Ae("sonnet","medium"),Objective:Ae("sonnet","medium"),Spec:Ae("opus","high"),Plan:Ae("opus","high"),Execute:Ae("sonnet","high")},{Brainstorm:Ae("gpt-5.6-terra","medium"),Objective:Ae("gpt-5.6-terra","medium"),Spec:Ae("gpt-5.6-sol","high"),Plan:Ae("gpt-5.6-sol","high"),Execute:Ae("gpt-5.6-terra","high")}),qa:za({Audit:Ae("opus","high"),Spec:Ae("opus","high"),Plan:Ae("sonnet","high"),Execute:Ae("sonnet","high")},{Audit:Ae("gpt-5.6-sol","high"),Spec:Ae("gpt-5.6-sol","high"),Plan:Ae("gpt-5.6-terra","high"),Execute:Ae("gpt-5.6-terra","high")}),scaffold:za({Brainstorm:Ae("sonnet","medium"),Objective:Ae("sonnet","medium"),"Doc index":Ae("opus","high")},{Brainstorm:Ae("gpt-5.6-terra","medium"),Objective:Ae("gpt-5.6-terra","medium"),"Doc index":Ae("gpt-5.6-sol","high")}),reverse:za({Scan:Ae("sonnet","medium"),"Docs teknis":Ae("sonnet","high"),Wawancara:Ae("sonnet","medium"),"Konvensi & index":Ae("opus","medium"),"Serah terima":Ae("sonnet","low")},{Scan:Ae("gpt-5.6-terra","medium"),"Docs teknis":Ae("gpt-5.6-terra","high"),Wawancara:Ae("gpt-5.6-terra","medium"),"Konvensi & index":Ae("gpt-5.6-sol","medium"),"Serah terima":Ae("gpt-5.6-terra","low")}),prd:za({Brainstorm:Ae("sonnet","medium"),PRD:Ae("opus","high")},{Brainstorm:Ae("gpt-5.6-terra","medium"),PRD:Ae("gpt-5.6-sol","high")}),audit:za({Audit:Ae("opus","high"),Laporan:Ae("sonnet","medium")},{Audit:Ae("gpt-5.6-sol","high"),Laporan:Ae("gpt-5.6-terra","medium")}),breakdown:za({Analisis:Ae("opus","high"),Breakdown:Ae("opus","medium")},{Analisis:Ae("gpt-5.6-sol","high"),Breakdown:Ae("gpt-5.6-sol","medium")}),goal:za({Goal:Ae("sonnet","high"),Verifikasi:Ae("opus","medium")},{Goal:Ae("gpt-5.6-terra","high"),Verifikasi:Ae("gpt-5.6-sol","medium")}),no_effort:za({Kerjakan:Ae("haiku","low")},{Kerjakan:Ae("gpt-5.6-terra","low")},!1)},Kg=Object.fromEntries(Hg.flatMap(e=>[[`${e}.enabled`,"seeded"],...["claude","codex"].flatMap(t=>pu[e].flatMap(a=>[[`${e}.${t}.${a}.model`,"seeded"],[`${e}.${t}.${a}.effort`,"seeded"]]))])),Vg={version:gu,claude:{model:"seeded",effort:"seeded"},codex:{model:"seeded",effort:"seeded"},orchestration:Kg},Yg=R({id:m(),name:m(),desc:m(),kind:eu,repoDir:m().nullable().optional(),gitRemote:m().nullable().optional(),stack:m().default(""),docStatus:Xp,coverage:le().int().min(0).max(100),createdAt:m()}),Js=R({context:m(),outcome:m(),constraints:m(),priority:an,fromAudit:m().optional()}),Xs=R({severity:we(["critical","major","minor"]),steps:m(),expected:m(),actual:m(),env:m(),constraints:m().default(""),fromAudit:m().optional()}),Qs=R({goal:m(),done:m(),constraints:m(),priority:an}),Zg=R({id:m(),reason:we(["missing","unfinished","unmerged"])}),Jg=R({at:m(),from:m(),to:m(),by:m(),payload:Gi().optional()}),Xg=R({at:m(),by:m(),reason:m().optional()}),fu=R({id:m(),projectId:m(),title:m(),source:Wi,stage:Bo,priority:an,author:m(),objective:m(),payload:qi([Js,Xs,Qs]).nullable(),branchFrom:m().nullable(),baseSha:m().nullable(),createdAt:m(),startedAt:m().nullable(),dependsOn:Se(m()).default([]),blockedBy:Se(Zg).default([]),autoMerge:Ki.nullable().default(null),sourceHistory:Se(Jg).default([]),manualDone:Xg.nullable().default(null)}),Qg=fu.omit({payload:!0,sourceHistory:!0}).extend({version:le().optional(),updatedAt:m().optional()});Qg.omit({objective:!0});const Xl=["off","short","medium","long","blip","pop","ping","coin","alert","chime","success","bell","marimba","fanfare"];let ci=[{id:"default",label:"Default (rekomendasi CLI)"},{id:"opus",label:"Opus"},{id:"sonnet",label:"Sonnet"},{id:"haiku",label:"Haiku"},{id:"fable",label:"Fable"}];const bu="default",ku=["xhigh","high","medium","low","max","ultracode"],kr=["ultra","max","xhigh","high","medium","low"],ef=["max","xhigh","high","medium","low"],yu=["xhigh","high","medium","low"];let Pa=[{id:"gpt-6-astra",label:"GPT-6 Astra",efforts:kr,fallback:"medium",minClient:""},{id:"gpt-5.6-sol",label:"GPT-5.6 Sol",efforts:kr,fallback:"xhigh",minClient:"0.144.0"},{id:"gpt-5.6-terra",label:"GPT-5.6 Terra",efforts:kr,fallback:"xhigh",minClient:"0.144.0"},{id:"gpt-5.6-luna",label:"GPT-5.6 Luna",efforts:ef,fallback:"xhigh",minClient:"0.144.0"},{id:"gpt-5.5",label:"GPT-5.5",efforts:yu,fallback:"xhigh",minClient:"0.124.0"}];function tf(e,t){ci=e,Pa=t}function er(e){return ci.find(t=>t.id===e)??ci.find(t=>t.resolved===e)}function vu(){return ci.filter(e=>e.id!==bu)}function xu(e){var t;return((t=er(e))==null?void 0:t.efforts)??ku}function wu(e,t){const a=e.map(r=>({value:r.id,label:r.label}));if(!t||a.some(r=>r.value===t))return a;const i=e.find(r=>r.resolved===t);return[{value:t,label:i?`${i.label} (terpatok: ${t})`:t},...a]}function tr(e,t){var i;const a=(i=er(e))==null?void 0:i.efforts;return!(a!=null&&a.length)||a.includes(t)?t:a.includes("xhigh")?"xhigh":a[0]}function ar(e){return Pa.find(t=>t.id===e)}function af(e){var t;return((t=ar(e))==null?void 0:t.efforts)??yu}function nr(e,t){const a=ar(e);return a?a.efforts.includes(t)?t:a.fallback:t}function ju(e,t){const a=e.split(".").map(Number),i=t.split(".").map(Number);for(let r=0;r<Math.max(a.length,i.length);r++){const s=(a[r]??0)-(i[r]??0);if(s!==0)return s}return 0}function nf(e,t){var i;const a=(i=ar(e))==null?void 0:i.minClient;return!a||!t?!1:ju(t,a)<0}const Su=R({model:m().default("gpt-5.6-terra"),effort:m().default("medium")}),oo=Su.parse({}),Ql={enabled:se().default(!1)},Fo=R({enabled:se().default(!1),paused:se().default(!1),maxConcurrent:le().int().min(1).default(2),launchGuard:R({enabled:se().default(!0),maxLoadPerCore:le().finite().positive().default(2.5)}).default({}),autonomy:we(["full-control","butuh-keputusan"]).default("butuh-keputusan"),sources:R({backlog:R({...Ql,everyMin:le().int().min(1).default(15)}).default({}),triase:R({...Ql,everyMin:le().int().min(1).default(30)}).default({})}).default({})}),sf=Fo.parse({}),_u=R({enabled:se().default(!1),condition:m().max(4e3).default("")}),rf=_u.parse({}),Cu=R({enabled:se().default(!1),agent:Ja.default("claude"),model:m().default("opus"),effort:m().default("xhigh")}),of=Cu.parse({}),lf=Zs.parse({}),df=Zs,Ho=R({enabled:se().default(!1),paused:se().default(!1),pausedProjects:Se(m()).default([]),everyMin:le().int().min(1).max(1440).default(5),timeoutSec:le().int().min(10).max(900).default(600),maxAutoAnswers:le().int().min(1).max(20).default(3),maxConcurrent:le().int().min(1).max(16).default(2),queueWaitSec:le().int().min(0).max(900).default(120),flowTtlMin:le().int().min(1).max(1440).default(60),requireGreenBeforeIntegrate:se().default(!0),engine:df.default({})}),cf=Ho.parse({}),Tu=R({enabled:se().default(!1),brainstormPerMonth:le().int().min(0).max(1e3).default(2),askPerMonth:le().int().min(0).max(1e4).default(30),model:m().default("opus"),effort:m().default("high"),timeoutSec:le().int().min(10).max(900).default(180)}),uf=Tu.parse({}),ed=R({model:m().nullable().default(null),effort:m().nullable().default(null)}),Oi={model:200,effort:64,phase:64,phases:32},hf=R({model:m().min(1).max(Oi.model).optional(),effort:m().min(1).max(Oi.effort).optional()}),mf=pn(m().min(1).max(Oi.phase),hf).refine(e=>Object.keys(e).length<=Oi.phases,{message:`phaseOverrides maksimal ${Oi.phases} fase`}),Na=R({enabled:se().default(!0),claude:pn(m(),ed).default({}),codex:pn(m(),ed).default({})}),Au=R({feature:Na.default({}),qa:Na.default({}),scaffold:Na.default({}),reverse:Na.default({}),prd:Na.default({}),audit:Na.default({}),breakdown:Na.default({}),goal:Na.default({}),no_effort:Na.default({})}),Uo=Au.parse(Wg);R({model:m().default("sonnet"),effort:m().default("medium"),autoDefault:se(),autoScaffold:se(),notifyFail:se(),notifyDone:se().default(!0),notifySound:we(Xl).default("short"),notifyDecision:se().default(!0),notifyDecisionSound:we(Xl).default("alert"),agentAccessEnabled:se().default(!1),scheduler:Fo.default(sf),goal:_u.default(rf),agent:Ja.default("claude"),codex:Su.default(oo),verifyScope:tu.default("changed"),method:m().default(nu),conflict:Cu.default(of),lead:Ho.default(cf),telegram:su.default(sg),changelog:Zs.default(lf),portalChat:Tu.default(uf),orchestration:Au.default(Uo),remoteControl:pg.default(gg),logShipping:Bg.default($g),logRetention:Og.default(Dg),builtinAgents:pn(m(),m()).default({}),builtinAgentPolicies:pn(m(),m()).default({}),builtinRuntimeDefaults:qg.default(Vg)});R({id:m(),type:we(["done","decision","ticket","fail","lead"]).default("done"),specId:m().nullable(),sessionId:m().nullable(),title:m(),projectId:m().nullable(),createdAt:m(),readAt:m().nullable()});R({projectId:m(),path:m(),category:m(),content:m(),linked:se(),root:se()});R({id:m(),name:m(),createdAt:m(),lastSeenAt:m().nullable(),revokedAt:m().nullable()});const Go="inherit",Eu="0.151.0";function pf(e){var a;const t=e?(a=/(\d+)\.(\d+)\.(\d+)/.exec(e))==null?void 0:a[0]:null;return t?ju(t,Eu)>=0:!1}function gf(e){const t=(e.orchestration??Uo)[e.flow];if(!e.nativeAgents||(t==null?void 0:t.enabled)===!1)return null;const a=(t==null?void 0:t[e.runtime])??{},i=e.runtime==="codex"?nr:tr;return{flow:e.flow,runtime:e.runtime,phases:pu[e.flow].map(r=>{var c;const s=a[r],o=(c=e.phaseOverrides)==null?void 0:c[r],l=(o==null?void 0:o.model)??(s==null?void 0:s.model)??e.orchestrator.model,d=e.runtime==="claude"&&l===bu?Go:l;return{phase:r,agentName:Ug(r),model:d,effort:i(d,(o==null?void 0:o.effort)??(s==null?void 0:s.effort)??e.orchestrator.effort)}})}}const ff=["projects:read","projects:write","backlog:read","backlog:write","sessions:read","sessions:write","docs:read","docs:write","ide:read","ide:write","vps:read","vps:write","settings:read","settings:write","support:read","support:write","notifications:read","notifications:write","lead:read","lead:write","agents:read","agents:write","telegram:read","telegram:write","team:read","team:write","sessions:spawn","ide:git","backlog:lifecycle","vps:exec"],ir=we(ff);R({id:ir,domain:m(),access:we(["read","write","danger"]),label:m(),desc:m(),risk:we(["rce","exec"]).optional()});const IC=[{domain:"projects",label:"Projects",desc:"Project, branch, binding, Help Center."},{domain:"backlog",label:"Backlog / Spec",desc:"Spec/backlog, dokumen, review diff, integrate."},{domain:"sessions",label:"Sesi",desc:"Sesi terminal, fase, jalankan claude/shell."},{domain:"docs",label:"Docs & PRD",desc:"Dokumen SoT project & PRD."},{domain:"ide",label:"IDE / Git",desc:"Tree, file, status git, graph, commit, diff."},{domain:"vps",label:"VPS",desc:"VPS, checklist kepatuhan, audit, konsol."},{domain:"settings",label:"Settings",desc:"Setelan & config runtime."},{domain:"support",label:"Help Desk",desc:"Tiket Help Center (Help Desk): lihat, terima/tolak, promosikan ke backlog."},{domain:"notifications",label:"Notifikasi",desc:"Lihat & kelola notifikasi."},{domain:"lead",label:"Lead",desc:"Minta putusan ke hanoman-lead & baca jejak keputusannya."},{domain:"agents",label:"Custom agent",desc:"Katalog persona agen global & per project."},{domain:"telegram",label:"Telegram",desc:"Status, binding, memory, reply, dan audit kanal operator Telegram."},{domain:"team",label:"Tim",desc:"Kartu papan Tim (kerja manusia), direktori anggota, eskalasi kartu ke backlog."}];R({id:m(),name:m(),tokenPrefix:m(),capabilities:Se(ir),enabled:se(),createdBy:m().nullable(),createdAt:m(),lastUsedAt:m().nullable(),revokedAt:m().nullable()});R({name:m().min(1),capabilities:Se(ir)});R({name:m().min(1).optional(),capabilities:Se(ir).optional(),enabled:se().optional()});const qo=["claude","codex"];we(qo);const bf=["always","smart"],Mu=we(bf),Pu=m().min(1).max(64).regex(/^[a-z][a-z0-9_-]*$/),kf=["inherit","read-only","isolated-worktree"],Iu=we(kf),Wo=/^[a-z][a-z0-9-]{1,39}$/,Ru=["Read","Write","Edit","Bash","Glob","Grep","WebFetch","WebSearch"],td="Task";R({id:m(),projectId:m().nullable(),name:m().regex(Wo),description:m(),instructions:m(),tools:Se(m()).nullable(),model:m().nullable(),mentions:Se(m()).nullable(),runtime:we(qo).nullable(),activation:Mu.default("always"),effort:Pu.nullable().default(null),workspacePolicy:Iu.default("inherit"),maxTurns:le().int().min(1).max(200).nullable().default(null),timeoutSeconds:le().int().min(30).max(3600).nullable().default(null),enabled:se(),createdAt:m(),updatedAt:m()});const Lu=R({projectId:m().nullable().optional(),name:m().regex(Wo).refine(e=>!Gg(e),{message:`awalan ${No} dicadangkan untuk agen fase hanoman`}),description:m().trim().min(1).max(500),instructions:m().trim().min(1).max(2e4),tools:Se(m()).nullable().optional(),model:m().nullable().optional(),mentions:Se(m()).nullable().optional(),runtime:we(qo).nullable().optional(),activation:Mu.optional(),effort:Pu.nullable().optional(),workspacePolicy:Iu.optional(),maxTurns:le().int().min(1).max(200).nullable().optional(),timeoutSeconds:le().int().min(30).max(3600).nullable().optional(),enabled:se().optional()});function yf(e,t){e.workspacePolicy==="isolated-worktree"&&e.runtime!=="claude"&&t.addIssue({code:te.custom,path:["workspacePolicy"],message:"isolated-worktree hanya tersedia untuk Claude Code"})}Lu.superRefine(yf);Lu.omit({name:!0,projectId:!0}).partial().superRefine((e,t)=>{e.workspacePolicy==="isolated-worktree"&&e.runtime!==void 0&&e.runtime!=="claude"&&t.addIssue({code:te.custom,path:["workspacePolicy"],message:"isolated-worktree hanya tersedia untuk Claude Code"})});function vf(e){const t=e.tools??[...Ru],a=(e.mentions??[]).length>0,i=t.filter(r=>r!==td);return a&&i.push(td),i}const rn=["Kamu agen daun: jangan mendelegasikan atau memanggil agen lain; eskalasi hanya ke parent.","Awali laporan dengan Status: selesai | sebagian | terhalang | menunggu-keputusan. Sertakan simpulan, jangkar bukti,","tingkat keyakinan, scope yang belum diperiksa dan langkah berikutnya. Maksimal 12 temuan utama","dan 1200 kata; jangan mengklaim selesai bila acceptance penting belum terverifikasi."],xf=[{name:"product-designer",description:"Gunakan saat alur pengguna atau UI perlu dirancang dan diwujudkan sesuai design system, termasuk responsive, aksesibilitas, dan state interaksi. Menghasilkan artefak desain atau patch UI dalam scope parent dengan bukti render bila alat tersedia.",tools:["Read","Glob","Grep","Bash","Write","Edit","WebFetch","WebSearch"],enabledByDefault:!1,activation:"smart",effort:"medium",workspacePolicy:"isolated-worktree",maxTurns:40,timeoutSeconds:null,models:{claude:"sonnet",codex:"gpt-5.6-terra"},instructions:["Kamu merancang pengalaman produk dan mewujudkan UI sesuai mandat parent.","Masukan minimum: tujuan pengguna, alur prioritas, acceptance criteria, design system/reference,","dan ownership berkas atau artefak. Baca komponen yang ada sebelum membuat pola baru.","1. Petakan alur dan state yang relevan: awal, loading, kosong, sukses, error, disabled,"," validasi, fokus/keyboard, serta hak akses. Tandai state yang tidak berlaku beserta alasan.","2. Gunakan token dan komponen existing; periksa hirarki, copy, kontras, label, fokus,"," urutan keyboard, dan viewport sempit/lebar. Referensi web hanya bila perlu panduan primer.","3. Buat artefak atau patch hanya dalam ownership yang diserahkan; jangan memperluas fitur"," atau mengubah backend tanpa mandat. Parent memutuskan perubahan scope dan integrasi.","4. Cocokkan hasil dengan acceptance criteria. Bila alat render/browser tersedia, periksa"," render nyata pada viewport dan state relevan serta catat hasil/screenshot. Bash atau"," WebFetch bukan bukti browser tersedia; bila tidak ada, laporkan gap verifikasi visual.","Berhenti saat mandat terpenuhi atau keputusan produk/dependensi menghalangi; kerjakan bagian","yang independen lalu eskalasi ke parent. Jangan mengaku merender atau menguji tanpa output.","Handoff ringkas: artefak/berkas berubah, keputusan desain, state diperiksa, acceptance beserta","bukti, ketidakpastian dan gap, serta langkah parent. Jangan membuat proses berat untuk UI kecil.",...rn].join(`
11
11
  `)},{name:"feature-builder",description:"Gunakan saat spec atau desain yang cukup jelas perlu menjadi fitur dengan batas ownership tegas, test relevan dan dokumentasi. Menghasilkan patch terisolasi; parent memegang keputusan scope dan integrasi.",tools:["Read","Glob","Grep","Bash","Write","Edit"],enabledByDefault:!1,activation:"smart",effort:"medium",workspacePolicy:"isolated-worktree",maxTurns:40,timeoutSeconds:null,models:{claude:"sonnet",codex:"gpt-5.6-terra"},instructions:["Kamu mengimplementasikan satu bagian fitur yang didelegasikan parent.","Masukan minimum: spec/desain, acceptance criteria, base SHA, ownership berkas/modul, batas","perubahan dan kontrak integrasi. Baca docs serta pola kode relevan; gunakan bukti parent.","1. Cocokkan requirement dengan keadaan kode. Tandai asumsi atau keputusan yang belum jelas;"," eskalasi yang memengaruhi kontrak sebelum menebaknya, lanjutkan bagian independen.","2. Buat patch terkecil yang memenuhi mandat di worktree sendiri. Kamu tidak sendirian:"," jangan membatalkan edit agen lain, mengubah worktree parent, atau memperluas refactor.","3. Uji perilaku yang berubah dan batas kontrak yang berisiko. Pilih test relevan; jalankan"," pemeriksaan paket yang tersentuh. Catat perintah, output, dan kegagalan yang belum selesai.","4. Perbarui docs yang berubah sesuai konvensi repo. Nilai tiap acceptance dari keadaan akhir,"," bukan hanya keberadaan patch atau test hijau. Parent memegang merge dan integrasi.","Berhenti setelah scope terpenuhi atau dependensi menghalangi; laporkan kekurangan input,","konflik ownership, dan verifikasi yang tidak tersedia. Jangan mengklaim test yang tidak jalan.","Handoff: ringkasan perilaku, berkas/commit, acceptance dan bukti test, ketidakpastian/risiko,","dependensi serta langkah integrasi parent. Jangan membuat framework untuk perubahan kecil.",...rn].join(`
12
12
  `)},{name:"performance-engineer",description:"Gunakan saat latensi, throughput, penggunaan resource atau respons UI perlu diukur dan diperbaiki. Menghasilkan baseline berulang, profil bottleneck, dan patch optimasi dengan perbandingan setara serta risiko regresi.",tools:["Read","Glob","Grep","Bash","Write","Edit","WebFetch","WebSearch"],enabledByDefault:!1,activation:"smart",effort:"high",workspacePolicy:"isolated-worktree",maxTurns:40,timeoutSeconds:null,models:{claude:"sonnet",codex:"gpt-5.6-terra"},instructions:["Kamu membuktikan bottleneck dan dampak optimasi, bukan menebak kode yang tampak lambat.","Masukan minimum: gejala, skenario/data, environment, metrik dan acceptance target, base SHA,","ownership patch serta batas pengukuran. Bila akses profiler/browser/monitoring tidak ada,","nyatakan gap; jangan mengarang angka atau mengaku telah memprofil.","1. Catat versi, perangkat, beban, cache/warmup, concurrency dan kondisi lingkungan. Ukur"," baseline berulang sebelum mengubah kode; simpan perintah, jumlah run dan hasil individual.","2. Profil skenario yang sama untuk membedakan hipotesis bottleneck. Bedakan observasi dari"," dugaan. Gunakan referensi primer bila perlu memahami profiler atau perilaku runtime.","3. Optimalkan bottleneck yang terbukti dalam ownership parent. Jaga hasil fungsional dan"," kontrak API/data; jangan mengganti arsitektur atau menjalankan beban produksi tanpa mandat.","4. Ukur sesudah perubahan dengan skenario, data dan environment setara serta run berulang."," Laporkan sebaran/noise, warmup dan outlier; jangan memilih satu angka terbaik. Bila noise"," menutupi perbedaan, simpulkan belum terbukti. Periksa regresi correctness dan resource lain.","Berhenti saat target acceptance terbukti, manfaat tidak terbukti, atau alat/scope menghalangi;","serahkan keputusan tradeoff ke parent. Jangan memperluas eksperimen ke layanan eksternal sendiri.","Handoff: baseline/before-after dan bukti mentah, bottleneck, patch, penerimaan/regresi,","ketidakpastian dan kondisi reproduksi. Nyatakan pengukuran yang belum dilakukan secara jelas.",...rn].join(`
13
13
  `)},{name:"product-analyst",description:"Gunakan saat brief atau permintaan fitur perlu diperjelas menjadi kebutuhan tervalidasi, prioritas/MVP dan acceptance criteria yang dapat diuji. Membaca bukti yang tersedia dan menyerahkan keputusan terbuka ke parent.",tools:["Read","Glob","Grep","WebFetch","WebSearch"],enabledByDefault:!1,activation:"smart",effort:"medium",workspacePolicy:"read-only",maxTurns:30,timeoutSeconds:null,models:{claude:"sonnet",codex:"gpt-5.6-terra"},instructions:["Kamu mengubah brief menjadi kebutuhan yang dapat diuji; ownership-mu analisis, bukan patch.","Masukan minimum: masalah, pengguna, tujuan/outcome, batas scope, bukti pengguna yang tersedia","dan kendala. Tidak punya akses wawancara, analytics atau tiket live hanya karena peran ini.","1. Baca brief/docs/bukti. Pisahkan kebutuhan tervalidasi (sertakan sumber), asumsi, usulan,"," dan pertanyaan terbuka. Jangan mengubah preferensi sendiri menjadi kebutuhan pengguna.","2. Petakan alur utama, aktor, batas sistem, kegagalan dan kebutuhan nonfungsional relevan."," Gunakan sumber primer web bila konteks perlu referensi; catat tanggal dan batas sumber.","3. Usulkan MVP dan prioritas menurut dampak, kebutuhan terbukti, dependensi dan biaya yang"," diketahui. Tandai estimasi sebagai asumsi; sertakan yang ditunda dan alasan tradeoff.","4. Turunkan acceptance criteria yang observabel: kondisi/pemicu, perilaku dan hasil yang"," dapat diperiksa, termasuk kasus gagal relevan. Jangan menjanjikan validasi yang belum ada.","Berhenti ketika brief siap diputuskan atau bukti minimum tidak ada. Ajukan pertanyaan paling","menentukan ke parent; jangan menghubungi pengguna atau menulis berkas/issue sendiri.","Handoff: kebutuhan dan sumber bukti, MVP/prioritas, acceptance, ketidakpastian/asumsi,","keputusan terbuka serta input berikutnya. Sesuaikan kedalaman analisis dengan ukuran tugas.",...rn].join(`
@@ -1000,6 +1000,6 @@ void main() {
1000
1000
  C 43 54.5, 38 55, 34.5 53.8 Z`,fill:t}),n.jsx("path",{d:`M35 55 C 40 58, 44.5 63, 47.5 69 C 49.5 73, 51 76, 51.8 79.5 L 49.4 80.5
1001
1001
  C 47 76.5, 44.5 72.5, 41.5 68.5 C 38.5 64.5, 35.5 61, 33 58.5 Z`,fill:t})]})}function e_({s:e,projects:t,backlog:a,index:i,onOpenSession:r}){var c;const s=((c=t.find(h=>h.id===e.projectId))==null?void 0:c.name)??e.projectId,o=e.specId?a.find(h=>h.id===e.specId):void 0,l=!!e.decision&&!e.deciding,d=l?"menunggu jawabanmu":o?`${o.id} · ${o.stage}`:e.flow??"sesi terminal";return n.jsxs("button",{type:"button",className:"hn-dalang-live","data-puppet":!0,"data-waiting":l||void 0,style:{animationDelay:`${i%5*.5}s`},onClick:()=>r(e.id),"aria-label":`Buka terminal — ${s}, ${d}`,children:[n.jsx("span",{className:l?"hn-dalang-puppet hn-dalang-puppet--still":"hn-dalang-puppet",style:{animationDelay:`${i%5*.7}s`},children:n.jsx("img",{src:ZS,alt:"","aria-hidden":"true",height:78,style:{display:"block",width:"auto"}})}),n.jsx("span",{style:{display:"block",fontFamily:"var(--font-mono)",fontSize:12,fontWeight:500,color:"var(--term-fg)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:s}),n.jsx("span",{style:{display:"block",fontFamily:"var(--font-mono)",fontSize:10.5,color:l?"var(--amber-500)":"var(--brass-400)",marginTop:3,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:d})]})}function ps({value:e,label:t,dot:a}){return n.jsxs("div",{className:"hn-dalang-stat",children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:7},children:[n.jsx("span",{style:{width:7,height:7,borderRadius:"50%",background:a}}),n.jsx("span",{style:{fontFamily:"var(--font-display)",fontSize:24,fontWeight:600,color:"var(--text-strong)",lineHeight:1},children:e})]}),n.jsx("div",{style:{fontSize:11.5,color:"var(--text-muted)",marginTop:4},children:t})]})}function t_({projects:e,backlog:t,sessions:a,onOpenSession:i,onOpenProject:r}){const s=a.filter(g=>!g.exited).sort((g,y)=>g.id.localeCompare(y.id)),o=new Set(s.map(g=>g.projectId)),l=e.filter(g=>!o.has(g.id)),d=t.filter(g=>XS(g.startedAt)).length,c=t.filter(g=>g.stage==="done").length,h=t.filter(g=>!g.startedAt&&g.stage!=="done").length,p=s.map(g=>g.id).join("|"),f=u.useRef(null),[b,k]=u.useState([]);return u.useLayoutEffect(()=>{const g=f.current;if(!g||s.length===0){k([]);return}const y=()=>{var A;const v=g.getBoundingClientRect();if(v.width<60)return;const x=(A=g.querySelector(".hn-dalang-mascot"))==null?void 0:A.getBoundingClientRect(),_=x?x.right-v.left-x.width*.2:150,T=x?x.top-v.top+x.height*.28:v.height*.35,E=[];g.querySelectorAll("[data-puppet]").forEach(B=>{const O=B.getBoundingClientRect(),ne=O.left+O.width/2-v.left,Z=O.top-v.top+2,P=Math.min(T,Z)-26;E.push(`M ${_.toFixed(1)} ${T.toFixed(1)} Q ${((_+ne)/2).toFixed(1)} ${P.toFixed(1)}, ${ne.toFixed(1)} ${Z.toFixed(1)}`)}),k(E)};if(y(),typeof ResizeObserver>"u")return;const w=new ResizeObserver(y);return w.observe(g),()=>w.disconnect()},[p,s.length]),n.jsxs("section",{className:"hn-dalang","aria-label":"Panggung dalang — status orkestrasi workspace",children:[n.jsxs("div",{className:"hn-dalang-head hn-wrap-mobile",children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:14},children:[n.jsx("img",{className:"hn-dalang-blencong",src:JS,alt:"","aria-hidden":"true","data-lit":s.length>0||void 0}),n.jsxs("div",{children:[n.jsxs("div",{className:"hn-eyebrow",style:{fontFamily:"var(--font-mono)",fontSize:10.5,textTransform:"uppercase",letterSpacing:"var(--tracking-caps)",color:"var(--text-subtle)"},children:["panggung dalang · ",s.length>0?`${s.length} wayang dimainkan`:"kelir sunyi"]}),n.jsx("h2",{style:{fontFamily:"var(--font-display)",fontSize:19,fontWeight:600,color:"var(--text-strong)",margin:"5px 0 0"},children:s.length>0?"Anoman sedang memainkan lakon":"Anoman siaga di balik kelir"})]})]}),n.jsxs("div",{className:"hn-dalang-stats",children:[n.jsx(ps,{value:d,label:"dikerjakan hari ini",dot:"var(--brass-500)"}),n.jsx(ps,{value:s.length,label:"sesi berjalan",dot:"var(--leaf-500)"}),n.jsx(ps,{value:h,label:"menunggu di backlog",dot:"var(--wind-500)"}),n.jsx(ps,{value:c,label:"total selesai",dot:"var(--bone-400)"})]})]}),n.jsxs("div",{className:"hn-dalang-stage",ref:f,"data-live":s.length>0||void 0,children:[s.length>0&&n.jsx("svg",{className:"hn-dalang-threads","aria-hidden":"true",focusable:"false",children:b.map((g,y)=>n.jsx("path",{d:g,style:{animationDelay:`${y%5*.35}s`}},y))}),n.jsx("div",{className:"hn-dalang-mascot",children:n.jsx("img",{src:YS,alt:"","aria-hidden":"true",style:{display:"block",width:"100%",height:"auto"}})}),s.length>0?n.jsx("div",{className:"hn-dalang-troupe",role:"list","aria-label":"Sesi yang sedang berjalan",children:s.map((g,y)=>n.jsx(e_,{s:g,projects:e,backlog:t,index:y,onOpenSession:i},g.id))}):n.jsxs("div",{className:"hn-dalang-empty",children:[n.jsx("div",{style:{fontSize:13.5,color:"var(--text-body)"},children:"Panggung sunyi — semua wayang tersandar di debog."}),n.jsx("div",{style:{fontSize:12,color:"var(--text-muted)",marginTop:4},children:"Mulai sebuah backlog item dan sang dalang mengangkat wayangnya."})]})]}),l.length>0&&n.jsx("div",{className:"hn-dalang-debog","aria-label":"Project tanpa sesi aktif",children:l.map(g=>n.jsxs("button",{type:"button",className:"hn-dalang-parked",onClick:()=>r(g),"aria-label":`Buka project ${g.name}`,children:[n.jsx(QS,{height:26,color:"var(--ink-300)",rod:"var(--bone-400)"}),n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--text-muted)"},children:g.name})]},g.id))})]})}function a_(e){return e==="broken"?"err":e==="drift"?"warn":"ok"}function Bi(e){return e.docStatus==="broken"?"high":e.docStatus==="drift"?"low":"none"}const n_={high:{bar:"var(--clay-500)",tint:"var(--clay-100)",text:"var(--clay-600)",label:"perlu perhatian"},low:{bar:"var(--amber-500)",tint:"var(--amber-100)",text:"var(--amber-600)",label:"docs drift"}};function i_({items:e}){return n.jsx("div",{className:"hn-stat-grid",style:{display:"grid",gridTemplateColumns:`repeat(${e.length}, 1fr)`,gap:1,background:"var(--border-hair)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-lg)",overflow:"hidden",marginBottom:20},children:e.map(t=>n.jsxs("div",{style:{background:"var(--surface-card)",padding:"16px 18px"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:7},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:t.dot}}),n.jsx("span",{style:{fontFamily:"var(--font-display)",fontSize:27,fontWeight:600,color:"var(--text-strong)",lineHeight:1},children:t.value})]}),n.jsx("div",{style:{fontSize:12,color:"var(--text-muted)",marginTop:6},children:t.label}),t.sub&&n.jsx("div",{style:{fontFamily:"var(--font-mono)",fontSize:10.5,color:"var(--text-subtle)",marginTop:3},children:t.sub})]},t.label))})}function s_({p:e,onOpen:t}){const a=Bi(e),i=n_[a],r=e.docStatus==="broken"?"Docs off-convention":"Docs drift — sebagian kategori belum ter-index";return n.jsxs("div",{className:"hn-dense-row",style:{display:"flex",alignItems:"center",gap:12,padding:"12px 4px",borderBottom:"1px solid var(--border-hair)",borderLeft:`3px solid ${i.bar}`,paddingLeft:12},children:[n.jsxs("div",{style:{minWidth:0,flex:1},children:[n.jsxs("div",{className:"hn-wrap-mobile",style:{display:"flex",alignItems:"center",gap:8},children:[n.jsx(Ee,{name:"box",size:13,color:"var(--text-muted)"}),n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:13.5,fontWeight:500,color:"var(--text-strong)"},children:e.name}),n.jsx(Oe,{tone:a==="high"?"err":"warn",size:"sm",children:i.label})]}),n.jsxs("div",{style:{fontSize:12,color:"var(--text-muted)",marginTop:4},children:[r," · ",e.coverage,"% ter-index"]})]}),n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"book-open",onClick:()=>t(e),children:"Buka SoT"})]})}function r_({s:e,projects:t,backlog:a,onOpenSession:i}){var l;const r=((l=t.find(d=>d.id===e.projectId))==null?void 0:l.name)??e.projectId,s=e.specId?a.find(d=>d.id===e.specId):void 0,o=()=>i(e.id);return n.jsxs("div",{className:"hn-dense-row",role:"button",tabIndex:0,onClick:o,onKeyDown:d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),o())},style:{display:"flex",alignItems:"center",gap:8,padding:"12px 4px",borderBottom:"1px solid var(--border-hair)",cursor:"pointer"},children:[n.jsx(Va,{status:"running",size:"sm",children:(s==null?void 0:s.stage)??e.flow??"sesi"}),n.jsx("span",{style:{fontSize:13.5,fontWeight:500,color:"var(--text-strong)",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:r}),n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)"},children:e.specId??""})]})}function o_({p:e,onOpen:t}){return n.jsxs("div",{className:"hn-grid-mobile",role:"button",tabIndex:0,onClick:()=>t(e),onKeyDown:a=>{(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),t(e))},style:{display:"grid",gridTemplateColumns:"92px minmax(0, 1fr) 120px",alignItems:"center",gap:12,padding:"9px 4px",cursor:"pointer",borderBottom:"1px solid var(--border-hair)"},children:[n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12.5,color:"var(--text-strong)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),n.jsx(or,{value:e.coverage,tone:a_(e.docStatus),size:"sm"}),n.jsx(Va,{status:e.docStatus,size:"sm",style:{justifySelf:"end"}})]})}function gs({icon:e,label:t,value:a,tone:i}){return n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"10px 12px",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-md)",background:"var(--bone-100)"},children:[n.jsx("span",{style:{width:30,height:30,borderRadius:"var(--radius-sm)",flex:"0 0 auto",background:"var(--surface-card)",border:"1px solid var(--border-hair)",color:i||"var(--text-muted)",display:"inline-flex",alignItems:"center",justifyContent:"center"},children:n.jsx(Ee,{name:e,size:15})}),n.jsxs("div",{style:{minWidth:0},children:[n.jsx("div",{style:{fontFamily:"var(--font-display)",fontSize:20,fontWeight:600,color:"var(--text-strong)",lineHeight:1},children:a}),n.jsx("div",{style:{fontSize:11.5,color:"var(--text-muted)",marginTop:3},children:t})]})]})}function l_({projects:e,backlog:t,sessions:a,onOpenProject:i,onGoto:r,onOpenSession:s}){const o=Ah(),l=Eh(),d=a.filter(_=>!_.exited).sort((_,T)=>_.id.localeCompare(T.id)),c=e.filter(_=>Bi(_)!=="none").sort((_,T)=>(Bi(_)==="high"?0:1)-(Bi(T)==="high"?0:1)),h=e.filter(_=>_.docStatus==="ok").length,p=e.filter(_=>Bi(_)==="high").length,f=e.length?Math.round(e.reduce((_,T)=>_+T.coverage,0)/e.length):0,b=t.filter(_=>_.source==="brief").length,k=t.filter(_=>_.source==="qa").length,g=t.filter(_=>_.source==="audit").length,y=t.filter(_=>_.priority==="tinggi").length,w=[...e].sort((_,T)=>_.coverage-T.coverage),v=e.map(_=>({project:_.name,status:_.session.status,text:_.activity,commit:_.commit})),x=[{label:"Sesi aktif",value:d.length,dot:"var(--brass-500)"},{label:"Perlu perhatian",value:p,dot:"var(--clay-600)"},{label:"Docs on-convention",value:h+"/"+e.length,sub:"rata-rata "+f+"%",dot:"var(--leaf-600)"},{label:"SpecSlim di backlog",value:t.length,sub:b+" brief · "+k+" QA · "+g+" audit",dot:"var(--wind-600)"}];return n.jsxs("div",{children:[n.jsx(t_,{projects:e,backlog:t,sessions:a,onOpenSession:s,onOpenProject:i}),n.jsx(i_,{items:x}),n.jsxs("div",{className:"hn-grid-mobile",style:{display:"grid",gridTemplateColumns:"1.35fr 1fr",gap:20,alignItems:"start"},children:[n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:20},children:[n.jsx(Qe,{eyebrow:"needs attention · "+c.length,title:"Perlu perhatian",actions:n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"layout-grid",onClick:()=>r("projects"),children:"Semua project"}),children:c.length===0?n.jsx(ye,{kind:"empty",compact:!0,illustration:"PST-005",illustrationDecorative:!0,title:"Semua project on-convention",hint:"Source of Truth utuh — tidak ada yang perlu perhatian."}):n.jsx("div",{style:{marginTop:4},children:c.map(_=>n.jsx(s_,{p:_,onOpen:i},_.id))})}),n.jsx(Qe,{eyebrow:"live · "+d.length+" berjalan",title:"Claude Code sedang jalan",actions:n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"terminal",onClick:()=>r("terminal"),children:"Buka Terminal"}),children:d.length===0?n.jsx(ye,{kind:"empty",compact:!0,icon:"terminal",title:"Tidak ada sesi aktif",hint:"Mulai sebuah backlog item untuk membuka sesi Claude Code interaktif."}):n.jsx("div",{style:{marginTop:4},children:d.map(_=>n.jsx(r_,{s:_,projects:e,backlog:t,onOpenSession:s},_.id))})})]}),n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:20},children:[n.jsx(Qe,{eyebrow:"realtime · Claude",title:"Limit langganan",children:n.jsx(Fs,{dto:o})}),l.status!=="unavailable"&&n.jsx(Qe,{eyebrow:`snapshot · Codex${l.plan?` · ${l.plan}`:""}`,title:"Limit langganan",children:n.jsx(Fs,{dto:l})}),n.jsx(Qe,{eyebrow:"Source of Truth",title:"Docs coverage",actions:n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"book-open",onClick:()=>r("docs"),children:"Docs"}),children:w.length===0?n.jsx(ye,{kind:"empty",compact:!0,icon:"book-open",title:"Belum ada project",hint:"Coverage Source of Truth muncul setelah project pertama ditambahkan."}):n.jsx("div",{style:{marginTop:4},children:w.map(_=>n.jsx(o_,{p:_,onOpen:i},_.id))})}),n.jsx(Qe,{eyebrow:"brainstorm → execute",title:"Backlog",actions:n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"list-checks",onClick:()=>r("backlog"),children:"Buka"}),children:n.jsxs("div",{className:"hn-grid-mobile",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:10,marginTop:6},children:[n.jsx(gs,{icon:"lightbulb",label:"dari brief",value:b,tone:"var(--brass-600)"}),n.jsx(gs,{icon:"bug",label:"dari QA",value:k,tone:"var(--clay-500)"}),n.jsx(gs,{icon:"flame",label:"prioritas tinggi",value:y,tone:"var(--clay-500)"}),n.jsx(gs,{icon:"layers",label:"total spec",value:t.length,tone:"var(--wind-600)"})]})})]})]}),n.jsx("div",{style:{marginTop:20},children:n.jsx(Qe,{eyebrow:"workspace",title:"Aktivitas terbaru",children:v.length===0?n.jsx(ye,{kind:"empty",compact:!0,icon:"history",title:"Belum ada aktivitas",hint:"Sesi dan branch terakhir tiap project akan tampil di sini."}):n.jsx("div",{style:{marginTop:4},children:v.map((_,T)=>{const E=_.status==="running"?"var(--brass-500)":"var(--bone-400)";return n.jsxs("div",{className:"hn-dense-row",style:{display:"flex",alignItems:"center",gap:12,padding:"9px 4px",borderBottom:"1px solid var(--border-hair)"},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:E,flex:"0 0 auto"}}),n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12.5,color:"var(--text-strong)",width:120,flex:"0 0 auto",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:_.project}),n.jsx("span",{style:{fontSize:12.5,color:"var(--text-body)",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:_.text}),n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:160},children:_.commit})]},T)})})})})]})}function cr({names:e}){return e!=null&&e.length?n.jsxs(Oe,{"data-testid":"presence-chip",size:"sm",tone:"ok",icon:"monitor",title:"Ada sesi agen yang hidup untuk item ini",children:["dikerjakan di ",e.join(", ")]}):null}function d_(e){return e==="broken"?"err":e==="drift"?"warn":"ok"}function zm(e){return e.docStatus==="broken"?"high":e.docStatus==="drift"?"low":"none"}const c_={high:{bar:"var(--clay-500)",tint:"var(--clay-100)",text:"var(--clay-600)"},low:{bar:"var(--amber-500)",tint:"var(--amber-100)",text:"var(--amber-600)"}};function u_({projects:e}){const t=e.filter(o=>o.session.status==="running").length,a=e.reduce((o,l)=>o+l.backlog,0),i=e.filter(o=>o.docStatus==="ok").length,r=e.filter(o=>zm(o)==="high").length,s=[{label:"Run aktif",value:t,dot:"var(--brass-500)"},{label:"Total di backlog",value:a,dot:"var(--wind-600)"},{label:"On convention",value:i+"/"+e.length,dot:"var(--leaf-600)"},{label:"Perlu perhatian",value:r,dot:"var(--clay-600)"}];return n.jsx("div",{className:"hn-stat-grid",style:{display:"grid",gridTemplateColumns:"repeat(4, 1fr)",gap:1,background:"var(--border-hair)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-lg)",overflow:"hidden",marginBottom:20},children:s.map(o=>n.jsxs("div",{style:{background:"var(--surface-card)",padding:"15px 18px"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:7},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:o.dot}}),n.jsx("span",{style:{fontFamily:"var(--font-display)",fontSize:27,fontWeight:600,color:"var(--text-strong)",lineHeight:1},children:o.value})]}),n.jsx("div",{style:{fontSize:12,color:"var(--text-muted)",marginTop:6},children:o.label})]},o.label))})}function h_({p:e,onOpen:t,onDelete:a,presenceOn:i}){const r=zm(e),s=e.session.status==="running",[o,l]=u.useState(!1);return n.jsxs("div",{className:"hn-project-row",onClick:t?()=>t(e):void 0,onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),style:{display:"grid",gridTemplateColumns:"1.6fr 1fr 1.2fr 0.9fr 1.3fr 1.2fr",alignItems:"center",gap:12,padding:"11px 14px 11px 12px",borderBottom:"1px solid var(--border-hair)",borderLeft:`3px solid ${r==="none"?"transparent":c_[r].bar}`,cursor:t?"pointer":"default",background:o&&t?"var(--bone-100)":"transparent",transition:"background 120ms ease"},children:[n.jsx("div",{"data-label":"Project",style:{minWidth:0},children:n.jsxs("button",{type:"button",className:"hn-project-open","aria-label":`Buka project ${e.name}`,disabled:!t,onClick:d=>{d.stopPropagation(),t==null||t(e)},style:{all:"unset",display:"block",width:"100%",cursor:t?"pointer":"default"},children:[n.jsxs("span",{style:{display:"flex",alignItems:"center",gap:7},children:[n.jsx(Ee,{name:"box",size:13,color:"var(--text-muted)"}),n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:13.5,fontWeight:500,color:"var(--text-strong)"},children:e.name}),n.jsx(Oe,{tone:e.kind==="from-scratch"?"brass":"neutral",size:"sm",children:e.kind})]}),n.jsx("span",{style:{display:"block",fontSize:11.5,color:"var(--text-subtle)",marginTop:3,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.desc})]})}),n.jsxs("div",{"data-label":"Status",style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:6,minWidth:0},children:[n.jsx(Va,{status:e.session.status,size:"sm",children:s&&e.session.phase?e.session.phase:void 0}),n.jsx(cr,{names:i})]}),n.jsx("div",{"data-label":"Docs · SoT",style:{paddingRight:8},children:n.jsx(or,{value:e.coverage,showLabel:!0,tone:d_(e.docStatus),size:"sm"})}),n.jsxs("div",{"data-label":"Backlog",style:{fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--text-muted)"},children:[e.backlog," · ",e.topStage]}),n.jsx("div",{"data-label":"Ditangani",style:{minWidth:0},children:n.jsx(ml,{list:e.handledBy})}),n.jsxs("div",{"data-label":"Aktivitas",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",display:"flex",alignItems:"center",gap:6,justifyContent:"space-between"},children:[n.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.activity}),a&&n.jsx("span",{onClick:d=>{d.stopPropagation(),a(e)},children:n.jsx(Tn,{size:"sm",variant:"ghost",icon:"trash-2",label:"Hapus project "+e.name})}),t&&n.jsx(Ee,{name:"chevron-right",size:14,color:"var(--text-subtle)"})]})]})}function m_({projects:e,onOpen:t,onDelete:a,pageSize:i,search:r="",dataVersion:s,onClearSearch:o,presenceByProject:l}){const d=["Project","Status","Docs · SoT","Backlog","Ditangani","Aktivitas"],c="1.6fr 1fr 1.2fr 0.9fr 1.3fr 1.2fr",[h,p]=u.useState(e),[f,b]=u.useState(e.length),[k,g]=Pt("projects","page",1,cl),y=ul("projects","scroll",h.length>0),[w,v]=u.useState([]),[x,_]=Pt("projects","handledBy","",_a);u.useEffect(()=>{var A;let E=!0;return(A=Y.listDeviceTokens)==null||A.call(Y).then(B=>{E&&v(B)}).catch(()=>{}),()=>{E=!1}},[]),Fh(JSON.stringify([r,x]),()=>g(1)),u.useEffect(()=>{var B;if(!i){p(e),b(e.length);return}let E=!0;const A=(B=Y.listProjects)==null?void 0:B.call(Y,{q:r||void 0,handledBy:x||void 0,page:k,limit:i});return A==null||A.then(O=>{E&&(p(O.items),b(O.total))}).catch(()=>{}),()=>{E=!1}},[r,x,k,i,s,e]);const T=Vi(f,k,i||f||1);return n.jsxs("div",{style:tl,children:[n.jsxs("div",{style:tn,children:[n.jsx(u_,{projects:e}),w.some(E=>!E.revokedAt)&&n.jsxs("div",{className:"hn-dense-row",style:{display:"flex",alignItems:"center",gap:8,marginBottom:12,flexWrap:"wrap"},children:[n.jsx("span",{className:"hn-eyebrow",children:"Ditangani oleh"}),n.jsx(Be,{"aria-label":"Saring per client",value:x,style:{minWidth:180},onChange:E=>_(E.target.value),options:[{value:"",label:"Semua client"},...w.filter(E=>!E.revokedAt).map(E=>({value:E.id,label:E.name}))]})]})]}),h.length===0&&r?n.jsx(ye,{kind:"empty",icon:"search",title:`Tidak ada project cocok dengan “${r}”`,hint:"Coba kata kunci lain, atau kosongkan pencarian.",action:o,actionLabel:"Hapus pencarian",actionIcon:"x"}):n.jsxs(Qe,{padding:0,fill:!0,children:[n.jsx("div",{className:"hn-project-header",style:{...tn,display:"grid",gridTemplateColumns:c,gap:12,padding:"10px 14px 10px 15px",borderBottom:"1px solid var(--border-hair)"},children:d.map(E=>n.jsx("span",{className:"hn-eyebrow",children:E},E))}),n.jsx("div",{ref:y,"data-testid":"projects-scroll",style:Fi,children:h.map(E=>n.jsx(h_,{p:E,onOpen:t,onDelete:a,presenceOn:l==null?void 0:l.get(E.id)},E.id))}),i&&n.jsx(Yi,{page:T.page,pageCount:T.pageCount,total:f,from:T.from,to:T.to,onPage:g,unit:"project"})]})]})}const _c=e=>e===null?"—":e<1e3?`${e} ms`:`${(e/1e3).toFixed(1)} dtk`,Zn=e=>e==null?"—":e.toLocaleString("id-ID");function p_({name:e,metrics:t}){const a=t==null?void 0:t.agents.find(s=>s.agentName===e),i=((t==null?void 0:t.variants)??[]).filter(s=>s.agentName===e),r=(a==null?void 0:a.evaluatedCount)??(a?a.invocationCount-a.dispositions.pending:0);return n.jsxs(n.Fragment,{children:[n.jsxs("div",{"data-testid":`metrics-${e}`,style:{display:"flex",gap:14,flexWrap:"wrap",marginTop:10,paddingTop:9,borderTop:"1px solid var(--border-hair)",fontSize:"var(--text-xs)",color:"var(--text-subtle)"},children:[n.jsxs("span",{children:[t?(a==null?void 0:a.invocationCount)??0:"—"," invocation tercatat · 30 hari"]}),n.jsxs("span",{children:["Durasi median: ",_c((a==null?void 0:a.medianDurationMs)??null)]}),n.jsxs("span",{children:["Token masuk: ",Zn(a==null?void 0:a.inputTokens)," · keluar: ",Zn(a==null?void 0:a.outputTokens)," · cache: ",Zn(a==null?void 0:a.cachedTokens)]}),n.jsxs("span",{"data-testid":`precision-${e}`,title:"Hasil diterima atau parsial dibagi seluruh hasil yang dinilai; bukan akurasi menemukan semua bug.",children:["Diterima/parsial: ",(a==null?void 0:a.operationalPrecision)==null?"—":`${Math.round(a.operationalPrecision*100)}%`,` · ${r} dinilai · ${(a==null?void 0:a.dispositions.pending)??0} belum dinilai`]}),a&&n.jsxs("span",{children:["Diterima ",a.dispositions.accepted," · Parsial ",a.dispositions.partial," · ","Ditolak ",a.dispositions.rejected," · False-positive ",a.dispositions.falsePositive]}),(a==null?void 0:a.rework)&&n.jsxs("span",{children:["Perlu kerja ulang: ",a.rework.required,` · tidak perlu: ${a.rework.notRequired} · belum dinilai: ${a.rework.unknown}`]}),(a==null?void 0:a.workspaceChanged)&&n.jsx(Oe,{tone:"err",size:"sm",children:"workspace berubah"})]}),i.length>0&&n.jsxs("details",{style:{marginTop:8},children:[n.jsx("summary",{style:{cursor:"pointer",fontSize:"var(--text-xs)"},children:"Bukti menurut runtime, model, dan versi instruksi"}),n.jsx("ul",{style:{fontSize:"var(--text-xs)",color:"var(--text-muted)",paddingLeft:20},children:i.map(s=>{var o;return n.jsxs("li",{children:[s.runtime," · ",s.model??"model tidak tercatat"," · ",n.jsx("span",{title:s.definitionHash??"Definisi historis tidak diketahui",children:((o=s.definitionHash)==null?void 0:o.slice(0,12))??"versi tidak tercatat"}),` · ${s.invocationCount} invocation · ${s.evaluatedCount} dinilai`,` · diterima ${s.dispositions.accepted} · parsial ${s.dispositions.partial}`,` · false-positive ${s.dispositions.falsePositive} · perlu kerja ulang ${s.rework.required}`,` · median ${_c(s.medianDurationMs)} · token masuk ${Zn(s.inputTokens)}`,` / keluar ${Zn(s.outputTokens)} / cache ${Zn(s.cachedTokens)}`]},JSON.stringify([s.runtime,s.model,s.definitionHash]))})})]})]})}const g_=()=>({name:"",description:"",instructions:"",tools:[],model:"",mentions:[],runtime:"",enabled:!0,activation:"always",effort:"",workspacePolicy:"inherit",maxTurns:"",timeoutSeconds:""}),f_=e=>({name:e.name,description:e.description,instructions:e.instructions,tools:e.tools??[],model:e.model??"",mentions:e.mentions,runtime:e.runtime??"",enabled:e.enabled,activation:e.activation??"always",effort:e.effort??"",workspacePolicy:e.workspacePolicy??"inherit",maxTurns:e.maxTurns==null?"":String(e.maxTurns),timeoutSeconds:e.timeoutSeconds==null?"":String(e.timeoutSeconds)}),fs=(e,t,a)=>e===""||/^\d+$/.test(e)&&Number(e)>=t&&Number(e)<=a;function Mi(e){if(!(e instanceof lt))return(e==null?void 0:e.message)??"gagal";const t=e.detail??{};return Array.isArray(t.cycle)&&t.cycle.length?`Mention membentuk siklus di scope ${t.scope??"?"}: ${t.cycle.join(" → ")}`:Array.isArray(t.unknown)&&t.unknown.length?`Mention tak dikenal: ${t.unknown.join(", ")}`:Array.isArray(t.unknownTools)&&t.unknownTools.length?`Tool tak dikenal di mesin ini: ${t.unknownTools.join(", ")}`:typeof t.model=="string"?`Model "${t.model}" tak tersedia untuk runtime ${t.runtime??"warisi"}.`:typeof t.error=="string"?t.error:`Gagal (${e.status})`}function b_({projectId:e,runtime:t,onToast:a}){var Me,Ye;const[i,r]=u.useState(null),[s,o]=u.useState(null),[l,d]=u.useState(null),[c,h]=u.useState({}),[p,f]=u.useState(!1),[b,k]=u.useState(""),[g,y]=u.useState(null),[w,v]=u.useState(!1),x=u.useCallback(async()=>{let I=[],be={tools:[],models:[],runtimes:[]},Re=null;f(!1);try{I=await Y.listCustomAgents(e??void 0,t)}catch(Ze){k(Mi(Ze))}try{be=await Y.getCustomAgentCatalog(e??void 0)}catch{}try{Re=await Y.getCustomAgentMetrics({projectId:e??void 0,from:new Date(Date.now()-30*24*60*6e4).toISOString()})}catch{f(!0)}o(be),d(Re),r(I)},[e,t]),_=u.useCallback(async()=>{try{d(await Y.getCustomAgentMetrics({projectId:e??void 0,from:new Date(Date.now()-30*24*60*6e4).toISOString()})),f(!1)}catch{f(!0)}},[e]);u.useEffect(()=>{x()},[x]);const T=(i??[]).filter(I=>I.name!==(g==null?void 0:g.draft.name)),E=!(g!=null&&g.draft.name)||Wo.test(g.draft.name),A=(g==null?void 0:g.draft.runtime)||null,B=((s==null?void 0:s.tools)??[]).map(I=>I.id),O=((s==null?void 0:s.tools)??[]).map(I=>({value:I.id,label:I.label,...I.group==="mcp"?{group:"MCP"}:{}}));fh();const ne=ad(A).map(I=>({value:I.id,label:A?I.label:`${I.label} · ${I.runtime}`})),Z=T.map(I=>({value:I.name,label:I.name})),P=((g==null?void 0:g.draft.tools)??[]).filter(I=>!B.includes(I)),D=((g==null?void 0:g.draft.mentions)??[]).filter(I=>!Z.some(be=>be.value===I)),W=!!(g!=null&&g.draft.model)&&!ne.some(I=>I.value===g.draft.model),F=yr(A,(g==null?void 0:g.draft.model)||null),N=!!(g!=null&&g.draft.effort)&&!F.includes(g.draft.effort),ee=g?!fs(g.draft.maxTurns,1,200)||!fs(g.draft.timeoutSeconds,30,3600)||g.draft.workspacePolicy==="isolated-worktree"&&g.draft.runtime!=="claude":!1,J=P.length>0||D.length>0||W||N||ee,H=I=>{if(!g)return;const Re=I.includes(qn)&&!g.draft.tools.includes(qn)?[qn]:I.filter(Ze=>Ze!==qn);y({...g,draft:{...g.draft,tools:Re}})},K=I=>{if(!g)return;const Re=ad(I||null).map(je=>je.id).includes(g.draft.model)?g.draft.model:"",Ze=I==="codex"&&g.draft.workspacePolicy==="isolated-worktree"?"inherit":g.draft.workspacePolicy,oe=yr(I||null,Re||null).includes(g.draft.effort)?g.draft.effort:"";y({...g,draft:{...g.draft,runtime:I,model:Re,effort:oe,workspacePolicy:Ze}})},me=I=>{if(!g)return;const be=yr(A,I||null).includes(g.draft.effort)?g.draft.effort:"";y({...g,draft:{...g.draft,model:I,effort:be}})};async function He(){if(!g)return;const I=g.draft;v(!0),k("");try{const be={description:I.description,instructions:I.instructions,tools:I.tools.length?I.tools:null,model:I.model||null,mentions:I.mentions,runtime:I.runtime||null,enabled:I.enabled,activation:I.activation,effort:I.effort||null,workspacePolicy:I.workspacePolicy,maxTurns:I.maxTurns===""?null:Number(I.maxTurns),timeoutSeconds:I.timeoutSeconds===""?null:Number(I.timeoutSeconds)};g.id?await Y.updateCustomAgent(g.id,be):await Y.createCustomAgent({...be,name:I.name,projectId:e}),y(null),await x(),a==null||a(g.id?"Agen diperbarui":"Agen dibuat","ok")}catch(be){k(Mi(be))}finally{v(!1)}}async function fe(I,be){k("");try{await Y.updateCustomAgent(I.id,{enabled:be}),await x()}catch(Re){k(Mi(Re))}}async function Te(I){k("");try{await Y.deleteCustomAgent(I.id),await x(),a==null||a("Agen dihapus","ok")}catch(be){k(Mi(be))}}async function ze(I){const be=c[I];if(be!=null&&be.disposition){v(!0),k("");try{await Y.updateAgentInvocationDisposition(I,{disposition:be.disposition,note:be.note,...be.reworkRequired!==void 0?{reworkRequired:be.reworkRequired}:{}}),await _(),a==null||a("Penilaian invocation disimpan","ok")}catch(Re){k(Mi(Re))}finally{v(!1)}}}return i===null?n.jsx(ye,{kind:"loading",title:"Memuat custom agent…"}):n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[n.jsx("div",{style:{flex:1,minWidth:0,fontSize:"var(--text-xs)",color:"var(--text-subtle)"},children:e?"Agen project ini, ditambah agen global yang berlaku di sini. Agen project menimpa agen global bernama sama.":"Agen global — tersedia di semua project. Satu project bisa menimpanya dengan agen bernama sama."}),n.jsx(V,{size:"sm",onClick:()=>{k(""),y({id:null,draft:g_()})},children:"Agen baru"})]}),b&&!g&&n.jsx(hn,{tone:"err",children:b}),p&&n.jsxs(hn,{tone:"warn",children:["Bukti penggunaan gagal dimuat. Angka yang masih terlihat berasal dari pemuatan sebelumnya.",n.jsx(V,{size:"sm",variant:"ghost",onClick:()=>void _(),children:"Muat ulang bukti"})]}),!p&&l&&l.agents.length===0&&n.jsx(hn,{tone:"info",children:"Belum ada bukti invocation dalam periode ini. Ini tidak membuktikan agent belum pernah dipakai; pengiriman event dapat tidak tercatat."}),!p&&((Me=l==null?void 0:l.telemetry)==null?void 0:Me.state)==="observed"&&n.jsxs("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-subtle)"},children:["Event terakhir tercatat: ",l.telemetry.lastEventAt?new Date(l.telemetry.lastEventAt).toLocaleString("id-ID"):"—",` · ${l.telemetry.incompleteCount} invocation belum memiliki bukti lengkap.`," Catatan ini tidak menjamin seluruh event berhasil dikirim."]}),((Ye=l==null?void 0:l.telemetry)==null?void 0:Ye.relay)&&n.jsxs("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-subtle)"},children:["Pengiriman event: ",l.telemetry.relay.state==="unobserved"?"belum diperiksa":l.telemetry.relay.state==="degraded"?"terganggu":"antrean dapat diproses",` · ${l.telemetry.relay.retryPending} pengiriman ditunda pada pemeriksaan terakhir`,` · ${l.telemetry.relay.droppedEvents} event ditolak sejak server menyala`,l.telemetry.relay.lastIssueAt&&` · kendala terakhir ${new Date(l.telemetry.relay.lastIssueAt).toLocaleString("id-ID")}`]}),i.length===0&&n.jsx(ye,{kind:"empty",compact:!0,title:"Belum ada custom agent",hint:"Custom agent adalah persona yang bisa dipilih sesi claude & codex — misalnya peninjau keamanan atau penulis migration."}),i.map(I=>{const be=(I.tools??[]).includes(qn)?((s==null?void 0:s.tools)??[]).map(je=>je.id).filter(je=>je!==qn):I.tools,Re=vf({tools:be,mentions:I.mentions}),Ze=!!(e&&I.inherited),oe=l!=null&&l.samples?l.samples.filter(je=>je.agentName===I.name):((l==null?void 0:l.recent)??[]).filter(je=>je.agentName===I.name).slice(0,5);return n.jsxs(Qe,{padding:14,children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:6},children:[n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontWeight:600,color:"var(--text-strong)"},children:I.name}),Ze&&n.jsx(Oe,{tone:"neutral",size:"sm",children:"warisan global"}),I.builtin&&n.jsx(Oe,{tone:"neutral",size:"sm","data-testid":`builtin-${I.name}`,children:I.builtinEdited?"bawaan · disunting":"bawaan"}),!I.enabled&&n.jsx(Oe,{tone:"warn",size:"sm",children:"nonaktif"}),I.available===!1&&n.jsx(Oe,{tone:"warn",size:"sm",children:"tidak tersedia"}),I.runtime&&n.jsx(Oe,{tone:"neutral",size:"sm","data-testid":`runtime-${I.name}`,children:I.runtime}),n.jsx("span",{style:{flex:1}}),n.jsx(xh,{checked:I.enabled,disabled:Ze,"aria-label":`Aktifkan ${I.name}`,onChange:je=>void fe(I,je)}),n.jsx(V,{size:"sm",variant:"ghost",disabled:Ze,onClick:()=>{k(""),y({id:I.id,draft:f_(I)})},children:"Ubah"}),n.jsx(V,{size:"sm",variant:"ghost",disabled:Ze,onClick:()=>void Te(I),children:"Hapus"})]}),n.jsx("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-muted)",marginBottom:6},children:I.description}),n.jsxs("div",{style:{display:"flex",gap:16,flexWrap:"wrap",fontSize:"var(--text-xs)",color:"var(--text-subtle)"},children:[n.jsxs("span",{"data-testid":`tools-${I.name}`,children:["Tools: ",Re.join(", ")]}),n.jsxs("span",{"data-testid":`mentions-${I.name}`,children:["Mention: ",I.mentions.length?I.mentions.map(je=>`@${je}`).join(", "):"—"]}),I.model&&n.jsxs("span",{children:["Model: ",I.model]}),n.jsxs("span",{children:["Aktivasi: ",I.activation??"always"]}),n.jsxs("span",{children:["Workspace: ",I.workspacePolicy??"inherit"]}),I.maxTurns!=null&&n.jsxs("span",{children:["Batas kerja: ",I.maxTurns," giliran"," (native Claude; instruksi pada Codex)"]}),I.timeoutSeconds!=null&&n.jsxs("span",{children:["Target waktu: ",I.timeoutSeconds," detik"," (instruksi; tidak menghentikan proses otomatis)"]})]}),I.selectionReason&&n.jsx("div",{style:{fontSize:"var(--text-xs)",marginTop:6},children:I.selectionReason}),I.activation==="smart"&&n.jsx("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-muted)",marginTop:6},children:"Tersedia sepanjang sesi yang kompatibel. Dipanggil saat tugas, fase, dan perubahan terbaru membutuhkan perannya."}),I.workspacePolicy==="read-only"&&n.jsx("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-muted)",marginTop:6},children:"Pemeriksaan statis; perintah test dan eksperimen memerlukan lingkungan terisolasi."}),I.available===!1&&I.availabilityReason&&n.jsx(hn,{tone:"warn",children:I.availabilityReason}),n.jsx(p_,{name:I.name,metrics:l}),oe.length>0&&n.jsxs("details",{style:{marginTop:8},children:[n.jsxs("summary",{style:{cursor:"pointer",fontSize:"var(--text-xs)",color:"var(--text-muted)"},children:[oe.length," sampel bukti"]}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8,marginTop:8},children:oe.map(je=>{var rt;const Ce=c[je.id],ke=(Ce==null?void 0:Ce.disposition)??(je.disposition==="pending"?"":je.disposition),Ue=(Ce==null?void 0:Ce.note)??je.dispositionNote??"",Je=(Ce==null?void 0:Ce.reworkRequired)!==void 0?Ce.reworkRequired:je.reworkRequired??null;return n.jsxs("div",{style:{padding:8,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)"},children:[n.jsxs("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-subtle)",marginBottom:6},children:[new Date(je.startedAt).toLocaleString("id-ID")," · ",je.runtime,` · ${je.model??"model tidak tercatat"} · versi ${((rt=je.definitionHash)==null?void 0:rt.slice(0,12))??"tidak tercatat"}`,je.resultExcerpt?` · ${je.resultExcerpt}`:""]}),n.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:8},children:[n.jsx(Be,{"aria-label":`Disposition ${je.id}`,value:ke,options:[{value:"",label:"Pilih disposition"},{value:"accepted",label:"Diterima"},{value:"partial",label:"Parsial"},{value:"rejected",label:"Ditolak"},{value:"false-positive",label:"False-positive"}],onChange:et=>h({...c,[je.id]:{...Ce,disposition:et.target.value,note:Ue}})}),n.jsx(Be,{"aria-label":`Kerja ulang ${je.id}`,value:Je===null?"":Je?"yes":"no",options:[{value:"",label:"Kerja ulang belum dinilai"},{value:"yes",label:"Perlu kerja ulang"},{value:"no",label:"Tidak perlu kerja ulang"}],onChange:et=>h({...c,[je.id]:{disposition:ke,note:Ue,reworkRequired:et.target.value===""?null:et.target.value==="yes"}})}),n.jsx(We,{"aria-label":`Catatan ${je.id}`,value:Ue,maxLength:500,placeholder:"Catatan opsional",onChange:et=>h({...c,[je.id]:{...Ce,disposition:ke,note:et.target.value}})}),n.jsx(V,{size:"sm","aria-label":`Nilai ${je.id}`,loading:w,disabled:!ke,onClick:()=>void ze(je.id),children:"Nilai"})]})]},je.id)})})]})]},I.id)}),g&&n.jsxs(mt,{open:!0,onClose:()=>{y(null),k("")},icon:"bot",eyebrow:e?"agen project":"agen global",title:g.id?`Ubah ${g.draft.name}`:"Agen baru",width:640,footer:n.jsxs(n.Fragment,{children:[n.jsx(V,{variant:"ghost",onClick:()=>{y(null),k("")},children:"Batal"}),n.jsx(V,{onClick:()=>void He(),loading:w,disabled:!E||J,children:"Simpan"})]}),children:[b&&n.jsx(hn,{tone:"err",children:b}),n.jsx(ge,{label:"Nama",hint:g.id?"Nama tak bisa diubah — hapus lalu buat baru (definisi ini menyeberang lewat sync).":"huruf kecil, angka, dan tanda hubung; minimal 2 karakter",children:n.jsx(We,{value:g.draft.name,"aria-label":"Nama",disabled:!!g.id,invalid:!E,placeholder:"mis. peninjau-keamanan",style:{width:"100%"},onChange:I=>y({...g,draft:{...g.draft,name:I.target.value}})})}),n.jsx(ge,{label:"Deskripsi",hint:"Kapan agen ini dipakai — inilah yang dibaca agen untuk MEMILIH.",children:n.jsx(We,{value:g.draft.description,"aria-label":"Deskripsi",style:{width:"100%"},placeholder:"mis. Dipakai saat meninjau perubahan yang menyentuh auth",onChange:I=>y({...g,draft:{...g.draft,description:I.target.value}})})}),n.jsx(ge,{label:"Instruksi",hint:"System prompt agen.",children:n.jsx(zt,{value:g.draft.instructions,"aria-label":"Instruksi",rows:8,placeholder:"mis. Kamu peninjau keamanan. Baca diff, laporkan temuan berurut dari yang paling berbahaya, sebut file:line.",onChange:I=>y({...g,draft:{...g.draft,instructions:I.target.value}})})}),n.jsx(ge,{label:"Tools",hint:`Kosongkan untuk memakai default: ${Ru.join(", ")}. Alat delegasi (Task) diatur otomatis dari Mention.`,children:n.jsx(bo,{"aria-label":"Tools",options:O,value:g.draft.tools,invalidValues:P,onChange:H,placeholder:"Pilih tools…",searchPlaceholder:"mis. Read atau Bash"})}),n.jsxs("div",{className:"hn-grid-mobile",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:[n.jsx(ge,{label:"Runtime agent",hint:"Mesin sesi yang memakai agen ini. Kosongkan untuk ikut sesi induk.",children:n.jsx(Be,{"aria-label":"Runtime agent",value:g.draft.runtime,options:[{value:"",label:"Ikut sesi induk"},...((s==null?void 0:s.runtimes)??[]).map(I=>({value:I.id,label:I.label}))],onChange:I=>K(I.target.value)})}),n.jsx(ge,{label:"Model",hint:"Kosongkan untuk mewarisi model sesi.",children:n.jsx(Be,{"aria-label":"Model",value:g.draft.model,invalid:W,options:[{value:"",label:"Ikut sesi induk"},...ne,...W?[{value:g.draft.model,label:`⚠ ${g.draft.model} — tak ada di katalog`}]:[]],onChange:I=>me(I.target.value)})})]}),n.jsxs("div",{className:"hn-grid-mobile",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:[n.jsx(ge,{label:"Aktivasi",hint:"Smart hanya masuk saat flow dan diff relevan.",children:n.jsx(Be,{"aria-label":"Aktivasi",value:g.draft.activation,options:[{value:"always",label:"Selalu"},{value:"smart",label:"Smart"}],onChange:I=>y({...g,draft:{...g.draft,activation:I.target.value}})})}),n.jsx(ge,{label:"Effort",hint:"Kosongkan untuk mewarisi sesi.",children:n.jsx(Be,{"aria-label":"Effort",value:g.draft.effort,invalid:N,options:[{value:"",label:"Ikut sesi induk"},...F.map(I=>({value:I,label:I})),...N?[{value:g.draft.effort,label:`⚠ ${g.draft.effort} — tak didukung`}]:[]],onChange:I=>y({...g,draft:{...g.draft,effort:I.target.value}})})})]}),n.jsx(ge,{label:"Kebijakan workspace",hint:"Read-only dipagari hook; isolated hanya tersedia untuk Claude.",children:n.jsx(Be,{"aria-label":"Kebijakan workspace",value:g.draft.workspacePolicy,options:[{value:"inherit",label:"Ikut parent"},{value:"read-only",label:"Hanya baca"},{value:"isolated-worktree",label:"Worktree terisolasi",disabled:g.draft.runtime!=="claude"}],onChange:I=>y({...g,draft:{...g.draft,workspacePolicy:I.target.value}})})}),n.jsxs("div",{className:"hn-grid-mobile",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:[n.jsx(ge,{label:"Maksimum giliran",hint:"Kosong = warisi; 1–200.",children:n.jsx(We,{"aria-label":"Maksimum giliran",type:"number",min:1,max:200,placeholder:"mis. 40",invalid:!fs(g.draft.maxTurns,1,200),value:g.draft.maxTurns,onChange:I=>y({...g,draft:{...g.draft,maxTurns:I.target.value}})})}),n.jsx(ge,{label:"Timeout detik",hint:"Kosong = tanpa batas Hanoman; 30–3600.",children:n.jsx(We,{"aria-label":"Timeout detik",type:"number",min:30,max:3600,placeholder:"mis. 600",invalid:!fs(g.draft.timeoutSeconds,30,3600),value:g.draft.timeoutSeconds,onChange:I=>y({...g,draft:{...g.draft,timeoutSeconds:I.target.value}})})})]}),n.jsx(ge,{label:"Mention",hint:"Agen yang boleh dipanggil agen ini. Graf mention wajib asiklik — server menolak yang membentuk lingkaran.",children:n.jsx(bo,{"aria-label":"Mention",options:Z,value:g.draft.mentions,invalidValues:D,onChange:I=>y({...g,draft:{...g.draft,mentions:I}}),placeholder:"Pilih agen…",searchPlaceholder:"mis. peninjau-keamanan",emptyText:"Belum ada agen lain."})}),J&&n.jsx(hn,{tone:"warn",children:"Ada nilai yang tak ada di katalog mesin ini (ditandai ⚠). Buang dulu sebelum menyimpan — server menolak nilai yang tak dikenal."})]})]})}const k_=[{value:"off",label:"Tanpa auto-merge (default)"},{value:"default-branch",label:"Auto-merge ke default branch repo"},{value:"branch",label:"Auto-merge ke branch tujuan…"}],y_=[{value:"local",label:"Branch lokal (perbarui ref di checkout ini)"},{value:"origin",label:"Origin (push ke remote)"}];function v_({p:e,onToast:t,onProjectChanged:a}){const i=e.autoMerge??null,[r,s]=u.useState(i??si),[o,l]=u.useState({local:[],origin:[],def:null}),[d,c]=u.useState(!1),h=e.binding??e.repoDir??null;u.useEffect(()=>{s(i??si)},[i]),u.useEffect(()=>{let k=!0;return Y.listBranches(e.id).then(g=>{k&&l({local:g.branches,origin:g.remotes,def:g.defaultBranch??null})}).catch(()=>{k&&l({local:[],origin:[],def:null})}),()=>{k=!1}},[e.id]);const p=o[r.dest==="origin"?"origin":"local"],f=k=>g=>s(y=>({...y,[k]:g}));async function b(){c(!0);try{await Y.updateProject(e.id,{autoMerge:r.mode==="off"?null:r}),t("Kebijakan auto-merge disimpan","ok","git-merge"),await(a==null?void 0:a(e.id))}catch(k){t(`Gagal menyimpan: ${k.message}`,"err","x-circle")}finally{c(!1)}}return n.jsxs(Qe,{eyebrow:"integrasi",title:"Auto-merge saat sesi selesai",actions:n.jsx(V,{size:"sm",leftIcon:"check",disabled:d||!h,onClick:b,children:"Simpan"}),children:[n.jsxs("div",{style:{fontSize:12.5,color:"var(--text-muted)",marginBottom:12,lineHeight:1.5},children:["Saat sebuah backlog item mencapai ",n.jsx("b",{children:"Selesai"}),", hanoman menggabungkan branch kerjanya (",n.jsx("code",{children:"hanoman/<spec>"}),") ke branch tujuan. Merge saja — tak pernah rebase, tak pernah force-push. Konflik tidak menghapus apa pun: branch kerja tetap utuh dan kamu dapat notifikasi berisi alasannya. Item bisa menimpa setelan ini satu per satu dari Backlog."]}),!h&&n.jsxs("div",{style:{fontSize:12.5,color:"var(--status-warn, var(--text-muted))",marginBottom:12},children:["Project ini belum di-bind ke checkout lokal — atur ",n.jsx("b",{children:"repoDir"})," dulu (Edit project) sebelum menyalakan auto-merge."]}),n.jsx("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:12,flexWrap:"wrap"},children:n.jsx(Oe,{tone:i&&i.mode!=="off"?"ok":"neutral",size:"sm",children:ru(i??si)})}),n.jsxs("div",{style:{display:"grid",gap:10},children:[n.jsxs("div",{children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Mode"}),n.jsx(Be,{size:"sm","aria-label":"Mode auto-merge",value:r.mode,disabled:!h,onChange:k=>f("mode")(k.target.value),options:k_})]}),r.mode!=="off"&&n.jsxs("div",{children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Tujuan"}),n.jsx(Be,{size:"sm","aria-label":"Tujuan",value:r.dest,disabled:!h,onChange:k=>f("dest")(k.target.value),options:y_})]}),r.mode==="default-branch"&&n.jsxs("div",{style:{fontSize:12.5,color:"var(--text-subtle)"},children:["Default branch repo saat ini: ",n.jsx("b",{children:o.def??"— tak terbaca"}),". Diresolve ulang tiap kali auto-merge berjalan, jadi mengganti default branch repo tak menyisakan setelan basi."]}),r.mode==="branch"&&n.jsxs("div",{children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Branch tujuan"}),n.jsx(Be,{size:"sm","aria-label":"Branch tujuan",value:r.branch??"",disabled:!h||!p.length,onChange:k=>f("branch")(k.target.value||null),options:[{value:"",label:"Pilih branch…"},...p.map(k=>({value:k,label:k}))]})]}),r.mode!=="off"&&n.jsx(sr,{"aria-label":"Hapus branch kerja setelah merge sukses",checked:r.deleteBranch,label:"Hapus branch kerja setelah merge sukses",onChange:()=>f("deleteBranch")(!r.deleteBranch)})]})]})}function x_({open:e,p:t,onClose:a,onDone:i,onToast:r}){const s=t.gitRemote??"",[o,l]=u.useState(""),[d,c]=u.useState(""),[h,p]=u.useState(!1),[f,b]=u.useState(!1),[k,g]=u.useState(null),{confirm:y,dialog:w}=al();u.useEffect(()=>{e&&(l(""),c(""),g(null),b(!1))},[e]);async function v(){const x=o.trim();if(!(!x||f)){b(!0),g(null);try{if(!await y({title:"Jalankan git clone di mesin ini?",message:n.jsxs(n.Fragment,{children:["Folder tujuan ",n.jsx("code",{style:{fontFamily:"var(--font-mono)",wordBreak:"break-all"},children:x}),"."]}),impact:[n.jsxs(n.Fragment,{children:["Isi ",n.jsx("code",{style:{fontFamily:"var(--font-mono)",wordBreak:"break-all"},children:s})," diunduh ke disk mesin ini — repo besar berarti unduhan besar."]}),n.jsxs(n.Fragment,{children:["Folder yang sudah berisi ",n.jsx("b",{children:"ditolak git"}),", jadi tak ada berkas yang tertimpa."]}),"Sesudah berhasil, project ini menunjuk hasil clone (binding lokal, tak disync)."],confirmLabel:"Jalankan git clone",tone:"default",icon:"git-branch",run:()=>Y.cloneProject(t.id,x)}))return;await i(),r(`Repo ${t.id} di-clone ke ${x}`,"ok","git-branch"),a()}catch(_){g(Om(_))}finally{b(!1)}}}return n.jsxs(n.Fragment,{children:[n.jsxs(mt,{open:e,onClose:a,icon:"git-branch",eyebrow:t.id,title:"Clone dari git remote",footer:n.jsxs(n.Fragment,{children:[n.jsx(V,{variant:"ghost",size:"sm",onClick:a,disabled:f,children:"Tutup"}),n.jsx(V,{size:"sm",leftIcon:"git-branch",onClick:()=>{v()},disabled:!o.trim()||f,children:f?"Meng-clone…":k?"Coba lagi":"Clone"})]}),children:[n.jsxs("div",{style:{fontSize:12.5,color:"var(--text-muted)",marginBottom:14,lineHeight:1.5},children:["Menjalankan ",n.jsx("code",{style:{fontFamily:"var(--font-mono)"},children:"git clone"})," dari"," ",n.jsx("code",{style:{fontFamily:"var(--font-mono)",wordBreak:"break-all"},children:s})," di mesin ini, lalu menunjuk project ke hasilnya. Gagal clone tak menyentuh project."]}),n.jsx(ge,{label:"Folder tujuan clone",hint:"mesin ini · harus belum ada atau kosong — git clone menolak folder berisi",children:n.jsxs("div",{style:{display:"flex",gap:8},children:[n.jsx(We,{value:o,onChange:x=>l(x.target.value),leftIcon:"folder",mono:!0,placeholder:`/path/ke/${jl(s)}`,style:{flex:1,minWidth:0}}),n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"folder-open",onClick:()=>p(!0),children:"Pilih folder"})]})}),n.jsx(Hi,{open:h,onClose:()=>p(!1),start:d,onPick:x=>{c(x),l(qS(x,s))}}),k&&n.jsxs(hn,{tone:"err",title:k.error,style:{marginTop:4},children:["Project tak tersentuh — perbaiki penyebabnya lalu coba lagi.",k.stderr&&n.jsx("pre",{style:{marginTop:8,marginBottom:0,whiteSpace:"pre-wrap",wordBreak:"break-all",fontFamily:"var(--font-mono)",fontSize:12,maxHeight:160,overflow:"auto"},children:k.stderr})]})]}),w]})}function w_({p:e,onEdit:t,onToast:a,onProjectChanged:i}){const[r,s]=u.useState(!1),[o,l]=u.useState(!1);if(e.binding??e.repoDir)return null;const d=e.gitRemote??"";async function c(h){try{await Y.putBinding(e.id,h),await(i==null?void 0:i(e.id)),a(`Project ${e.id} menunjuk ${h}`,"ok","folder")}catch{a("Gagal menyimpan path project","err","x-circle")}}return n.jsxs(n.Fragment,{children:[n.jsx(hn,{tone:"warn",icon:"folder-git-2",title:"Belum ada checkout di mesin ini",action:n.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:[d?n.jsx(V,{size:"sm",leftIcon:"git-branch",onClick:()=>l(!0),children:"Clone dari git remote"}):n.jsx(V,{size:"sm",leftIcon:"pencil",onClick:t,children:"Isi git remote"}),n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"folder-open",onClick:()=>s(!0),children:"Pilih folder di device"})]}),children:d?n.jsxs(n.Fragment,{children:["Docs, terminal, dan sesi project ini butuh checkout lokal. Clone"," ",n.jsx("code",{style:{fontFamily:"var(--font-mono)",wordBreak:"break-all"},children:d})," ","ke mesin ini, atau tunjuk folder yang sudah kamu clone sendiri."]}):n.jsx(n.Fragment,{children:"Project ini juga belum punya git remote, jadi clone tak mungkin dilakukan. Isi git remote-nya dulu lewat Edit project, atau tunjuk folder yang sudah ada di device ini."})}),n.jsx(Hi,{open:r,onClose:()=>s(!1),onPick:h=>{c(h)}}),d&&n.jsx(x_,{open:o,p:e,onClose:()=>l(!1),onToast:a,onDone:async()=>{await(i==null?void 0:i(e.id))}})]})}const j_=e=>e==="broken"?"err":e==="drift"?"warn":"ok";function S_({p:e,onToast:t,onProjectChanged:a}){const[i,r]=u.useState(e.helpEnabled),[s,o]=u.useState(!1),l=`${window.location.origin}/help/${encodeURIComponent(e.id)}`,{confirm:d,dialog:c}=al();async function h(){o(!0);try{await Y.enableHelpCenter(e.id),r(!0),t("Help Center aktif","ok","inbox"),await(a==null?void 0:a(e.id))}catch{t("Gagal mengaktifkan Help Center","err","x-circle")}finally{o(!1)}}async function p(){if(await d({title:`Nonaktifkan Help Center project "${e.name}"?`,message:"Link publik berhenti menerima keluhan baru.",impact:["Tiket lama tetap ada dan tetap bisa ditriase.","Bisa diaktifkan lagi kapan saja."],confirmLabel:"Nonaktifkan",icon:"ban",tone:"default"})){o(!0);try{await Y.disableHelpCenter(e.id),r(!1),t("Help Center nonaktif","ok","inbox"),await(a==null?void 0:a(e.id))}catch{t("Gagal menonaktifkan Help Center","err","x-circle")}finally{o(!1)}}}return n.jsxs(Qe,{eyebrow:"help center",title:"Link publik keluhan",actions:i?n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"ban",onClick:p,disabled:s,children:"Nonaktifkan"}):n.jsx(V,{size:"sm",leftIcon:"inbox",onClick:h,disabled:s,children:"Aktifkan"}),children:[n.jsx("div",{style:{fontSize:12.5,color:"var(--text-muted)",marginBottom:10,lineHeight:1.5},children:"Saat aktif, sebar link ini agar pengguna project melapor keluhan tanpa login. Keluhan masuk ke antrean Triase."}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[n.jsx(Oe,{tone:i?"ok":"neutral",size:"sm",children:i?"aktif":"nonaktif"}),i&&l&&n.jsxs(n.Fragment,{children:[n.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:12.5,color:"var(--text-body)",wordBreak:"break-all"},children:l}),n.jsx(V,{size:"sm",leftIcon:"copy",onClick:()=>{var f;(f=navigator.clipboard)==null||f.writeText(l),t("Link disalin","ok","copy")},children:"Salin"})]})]}),c]})}function Pi({label:e,value:t,mono:a}){return n.jsxs("div",{children:[n.jsx("div",{className:"hn-eyebrow",children:e}),n.jsx("div",{style:{marginTop:4,fontSize:12.5,color:"var(--text-body)",fontFamily:a?"var(--font-mono)":"var(--font-ui)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t})]})}function Jn({icon:e,title:t,hint:a,onClick:i}){return n.jsx(Qe,{padding:0,children:n.jsxs("button",{type:"button",onClick:i,style:{display:"flex",alignItems:"center",gap:12,width:"100%",padding:"14px 16px",cursor:"pointer",textAlign:"left",border:"none",background:"transparent",color:"inherit"},children:[n.jsx(Ee,{name:e,size:16,color:"var(--text-muted)"}),n.jsxs("div",{style:{flex:1,minWidth:0},children:[n.jsx("div",{style:{fontSize:13.5,fontWeight:500,color:"var(--text-strong)"},children:t}),n.jsx("div",{style:{fontSize:11.5,color:"var(--text-subtle)",marginTop:2},children:a})]}),n.jsx(Ee,{name:"chevron-right",size:14,color:"var(--text-subtle)"})]})})}function __({p:e,onEdit:t,onGotoDocs:a,onGotoTerminal:i,onGotoBacklog:r,onGotoChangelog:s,onDelete:o,onReverse:l,onScaffold:d,onToast:c,onProjectChanged:h}){return n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:20},children:[n.jsxs(Qe,{children:[n.jsxs("div",{className:"hn-stack-mobile",style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:16},children:[n.jsxs("div",{style:{minWidth:0},children:[n.jsxs("div",{className:"hn-wrap-mobile",style:{display:"flex",alignItems:"center",gap:8},children:[n.jsx(Ee,{name:"box",size:15,color:"var(--text-muted)"}),n.jsx("span",{style:{fontFamily:"var(--font-display)",fontSize:22,fontWeight:600,color:"var(--text-strong)"},children:e.name}),n.jsx(Oe,{tone:e.kind==="from-scratch"?"brass":"neutral",size:"sm",children:e.kind}),n.jsx(Va,{status:e.session.status,size:"sm",children:e.session.phase??void 0})]}),n.jsx("div",{style:{fontSize:12.5,color:"var(--text-subtle)",marginTop:6},children:e.desc})]}),n.jsxs("div",{className:"hn-row-actions",style:{display:"flex",gap:8,flex:"0 0 auto"},children:[n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"pencil",onClick:t,children:"Edit project"}),n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"trash-2",onClick:o,children:"Hapus project"})]})]}),n.jsxs("div",{className:"hn-grid-mobile",style:{display:"grid",gridTemplateColumns:"repeat(4, 1fr)",gap:16,marginTop:20},children:[n.jsx(Pi,{label:"ID",value:e.id,mono:!0}),n.jsx(Pi,{label:e.binding?"Repo · mesin ini":"Repo",value:(e.binding??e.repoDir)||"—",mono:!0}),n.jsx(Pi,{label:"Git remote",value:e.gitRemote||"—",mono:!0}),n.jsxs("div",{children:[n.jsx("div",{className:"hn-eyebrow",children:"Ditangani oleh · disync"}),n.jsx("div",{style:{marginTop:4},children:n.jsx(ml,{list:e.handledBy})})]}),n.jsx(Pi,{label:"Stack",value:e.stack||"—"}),n.jsx(Pi,{label:"Backlog terbuka",value:`${e.backlog} · ${e.topStage}`})]}),n.jsxs("div",{style:{marginTop:18},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:6},children:"Docs · SoT"}),n.jsx(or,{value:e.coverage,showLabel:!0,tone:j_(e.docStatus),size:"sm"})]})]}),n.jsx(w_,{p:e,onEdit:t,onToast:c,onProjectChanged:h}),n.jsx(S_,{p:e,onToast:c,onProjectChanged:h}),n.jsx(v_,{p:e,onToast:c,onProjectChanged:h}),n.jsxs(Qe,{eyebrow:"agen",title:"Custom agent — project ini",children:[n.jsxs("div",{style:{fontSize:12.5,color:"var(--text-muted)",marginBottom:12,lineHeight:1.5},children:["Persona khusus project ini, ditambah agen global yang berlaku di sini. Agen project",n.jsx("b",{children:" menimpa"})," agen global bernama sama — termasuk untuk mematikannya di project ini saja."]}),n.jsx(b_,{projectId:e.id,onToast:c})]}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(190px, 1fr))",gap:12},children:[n.jsx(Jn,{icon:"book-open",title:"Source of Truth",hint:"baca & sunting docs",onClick:a}),n.jsx(Jn,{icon:"terminal",title:"Buka terminal",hint:"sesi claude project ini",onClick:i}),n.jsx(Jn,{icon:"list-checks",title:"Lihat backlog",hint:`${e.backlog} spec terbuka`,onClick:r}),n.jsx(Jn,{icon:"megaphone",title:"Changelog",hint:"ringkasan rilis untuk pemakai",onClick:s}),l&&n.jsx(Jn,{icon:"radar",title:"Reverse docs",hint:"susun Source of Truth dari kode",onClick:l}),d&&n.jsx(Jn,{icon:"sparkles",title:"Scaffold docs",hint:"susun Source of Truth dari ide",onClick:d})]})]})}function C_({projectId:e,ownBranch:t,eyebrow:a,onClose:i,onIntegrate:r}){const[s,o]=u.useState({local:[],origin:[]}),[l,d]=u.useState(""),c=t;u.useEffect(()=>{let f=!0;return Y.listBranches(e).then(b=>{f&&o({local:b.branches.filter(k=>k!==c),origin:b.remotes.filter(k=>k!==c)})}).catch(()=>{f&&o({local:[],origin:[]})}),()=>{f=!1}},[e,c]);const h=[{value:"",label:"Pilih target…"},...s.local.map(f=>({value:`local:${f}`,label:`${f} (lokal)`})),...s.origin.map(f=>({value:`origin:${f}`,label:`origin/${f}`}))],p=f=>{l&&r(f,l)};return n.jsxs(mt,{open:!0,title:"Rebase / Merge",eyebrow:`${a} · ${c}`,icon:"git-merge",onClose:i,children:[n.jsxs("div",{style:{fontSize:13,color:"var(--text-muted)",marginBottom:12,lineHeight:1.5},children:["Rebase menata ulang branch di atas target (force-push balik ke branch itu). Merge menggabungkan branch ke target. Bila ada konflik, sesi agen membereskannya di Terminal — agen, model & effort-nya diatur di ",n.jsx("b",{children:"Settings → Model sesi → Konflik rebase & merge"})," ","(SPEC-383/ADR-0081); selama kartu itu mati, ia mengikuti default global."]}),n.jsxs("div",{style:{marginBottom:16},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Target"}),n.jsx(Be,{size:"sm","aria-label":"Target",value:l,disabled:h.length===1,onChange:f=>d(f.target.value),options:h})]}),n.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"git-branch",disabled:!l,onClick:()=>p("rebase"),children:"Rebase"}),n.jsx(V,{size:"sm",variant:"primary",leftIcon:"git-merge",disabled:!l,onClick:()=>p("merge"),children:"Merge"})]})]})}function T_(e){return new Date(e.localUpdatedAt)>=new Date(e.serverUpdatedAt)?"local":"server"}function A_(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function E_({open:e,onClose:t,onResolved:a}){const[i,r]=u.useState([]),[s,o]=u.useState(null),[l,d]=u.useState(null),c=u.useCallback(async()=>{try{r((await Y.listConflicts()).conflicts)}catch{r([])}},[]);u.useEffect(()=>{e&&c()},[e,c]);const h={"still-conflict":"Hub bergeser lagi sebelum keputusan ini masuk. Coba lagi — datanya sudah disegarkan.","not-found":"Konflik ini sudah tak ada di hub (mungkin sudah diselesaikan dari mesin lain)."};async function p(f,b){const k=`${f.entity}:${f.recordId}`;o(k),d(null);try{const g=await Y.resolveConflict(f.entity,f.recordId,b);g.ok||d(h[g.reason??""]??`Gagal menyimpan keputusan (${g.reason??"tak diketahui"}).`),await c(),g.ok&&a()}catch(g){d(`Gagal menghubungi server: ${g.message}`)}finally{o(null)}}return n.jsxs(mt,{open:e,title:"Rekonsil konflik sync",eyebrow:"SPEC-270",icon:"git-merge",width:720,onClose:t,children:[l&&n.jsx("div",{"data-testid":"resolve-error",role:"alert",style:{fontSize:12.5,color:"var(--danger, #b23b3b)",border:"1px solid var(--danger, #b23b3b)",borderRadius:6,padding:"8px 10px",marginBottom:12},children:l}),i.length===0&&n.jsx("div",{style:{fontSize:13.5,color:"var(--text-muted)"},children:"Tak ada konflik. Semua sinkron."}),i.map(f=>{const b=T_(f),k=`${f.entity}:${f.recordId}`;return n.jsxs("div",{style:{border:"1px solid var(--line)",borderRadius:8,padding:12,marginBottom:12},children:[n.jsxs("div",{style:{fontSize:12,color:"var(--text-muted)",marginBottom:6},children:[f.entity," · ",f.recordId," · ",n.jsxs("span",{"data-testid":"default-side",children:["default: ",b==="local"?"Lokal":"Server"," (updatedAt terbaru)"]})]}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:10},children:[n.jsx(Cc,{label:"Lokal",data:f.localData,at:f.localUpdatedAt,ver:f.localVersion,active:b==="local"}),n.jsx(Cc,{label:"Server",data:f.serverData,at:f.serverUpdatedAt,ver:f.serverVersion,active:b==="server"})]}),n.jsxs("div",{style:{display:"flex",gap:8,marginTop:10,justifyContent:"flex-end"},children:[n.jsx(V,{size:"sm",variant:b==="local"?"primary":"secondary",disabled:s===k,onClick:()=>p(f,"local"),children:"Pakai Lokal"}),n.jsx(V,{size:"sm",variant:b==="server"?"primary":"secondary",disabled:s===k,onClick:()=>p(f,"server"),children:"Pakai Server"})]})]},k)})]})}function Cc({label:e,data:t,at:a,ver:i,active:r}){return n.jsxs("div",{style:{border:r?"1px solid var(--brass)":"1px solid var(--line)",borderRadius:6,padding:8},children:[n.jsxs("div",{style:{fontSize:12,fontWeight:600},children:[e," · v",i]}),n.jsx("div",{style:{fontSize:11,color:"var(--text-muted)",marginBottom:4},children:new Date(a).toLocaleString()}),n.jsx("pre",{style:{fontSize:11,whiteSpace:"pre-wrap",margin:0,maxHeight:200,overflow:"auto"},children:A_(t)})]})}let Gr=null;function M_(){const[e,t]=u.useState(!1);return u.useEffect(()=>{Gr||(Gr=(async()=>{var i;try{return((i=(await Y.getConfig()).sync)==null?void 0:i.running)??!1}catch{return!1}})());let a=!0;return Gr.then(i=>{a&&t(i)}),()=>{a=!1}},[]),e}function P_({onDone:e,onToast:t}){const a=M_(),[i,r]=u.useState(""),[s,o]=u.useState(!1),[l,d]=u.useState(0),c=u.useCallback(()=>{Y.getSyncPending().then(p=>d(p.total)).catch(()=>d(0))},[]);if(u.useEffect(()=>{a&&c()},[a,c]),!a)return null;async function h(p){r(p?"full":"once");try{const f=p?await Y.syncNow({full:!0}):await Y.syncNow();f.ok?t(`Sinkron: ↓${f.pulled??0} ↑${f.pushed??0}`+(f.deleted?` ⨯${f.deleted}`:"")+(f.conflicts?` · ${f.conflicts} konflik`:""),f.conflicts?"warn":"ok",f.conflicts?"triangle-alert":"check"):t("Instance ini hub — tak ada sync manual","info","info"),f.ok&&f.conflicts&&o(!0),e(),c()}catch{t("Gagal sync","err","x-circle")}finally{r("")}}return n.jsxs(n.Fragment,{children:[n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"rotate-ccw",onClick:()=>h(!1),disabled:i!=="",children:i==="once"?"Menyinkron…":"Sync"}),n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"history",onClick:()=>h(!0),disabled:i!=="",title:"Tarik ulang seluruh feed dari awal — untuk data lama yang tak ikut tersinkron",children:i==="full"?"Menarik ulang…":"Tarik ulang"}),l>0&&n.jsxs("span",{className:"hn-muted",style:{fontSize:12},title:"Penghapusan sudah tercatat di mesin ini dan akan menyeberang ke hub pada sync berikutnya",children:[l," hapus menunggu"]}),n.jsx(E_,{open:s,onClose:()=>o(!1),onResolved:e})]})}const Tc={qa:{label:"QA finding",icon:"bug",tone:"err",color:"var(--clay-500)"},audit:{label:"Audit",icon:"search",tone:"info",color:"var(--wind-600)"},brief:{label:"feature brief",icon:"lightbulb",tone:"brass",color:"var(--brass-500)"},goal:{label:"Goal",icon:"target",tone:"brass",color:"var(--brass-600)"},help:{label:"Help Center",icon:"life-buoy",tone:"info",color:"var(--wind-500)"},no_effort:{label:"Tanpa effort",icon:"zap",tone:"brass",color:"var(--brass-400)"}},Kt=e=>Tc[e]??Tc.brief,I_=Wi.options.map(e=>({value:e,label:Kt(e).label})),R_=[["context","Konteks","mis. operator harus membuka tiga layar untuk tahu sesi mana yang menunggu"],["outcome","Outcome","mis. satu badge di Overview menunjukkan jumlah sesi yang menunggu"],["constraints","Batasan","mis. reuse queue yang ada"]],L_=[["goal","Goal","mis. p95 GET /api/specs di bawah 200 ms"],["done","Selesai bila","mis. output benchmark menunjukkan < 200 ms"],["constraints","Batasan","mis. tanpa cache eksternal"]],$_=[["severity","Severity",""],["steps","Langkah reproduksi",`1. Buka …
1002
1002
  2. Lakukan …
1003
- 3. Amati …`],["expected","Diharapkan","mis. total funnel sama dengan jumlah baris laporan harian"],["actual","Aktual","mis. total funnel dua kali lipat untuk sesi yang melewati tengah malam"],["env","Environment","prod · web · v0.9.2"],["constraints","Batasan","mis. jangan ubah kontrak API"]],Eo={brief:R_,qa:$_,goal:L_},Nm=[{value:"tinggi",label:"Tinggi"},{value:"sedang",label:"Sedang"},{value:"rendah",label:"Rendah"}],Fm=[{value:"critical",label:"Critical"},{value:"major",label:"Major"},{value:"minor",label:"Minor"}];function B_({spec:e,onClose:t,onSubmit:a}){var T;const i=e.stage!=="brainstorming"||e.baseSha!=null,r=I_.filter(E=>E.value!==e.source),[s,o]=u.useState(((T=r[0])==null?void 0:T.value)??""),l=i&&Ni(s)!==Ni(e.source),d=i&&!l,c=u.useMemo(()=>ng(s,e.payload),[s,e.payload]),[h,p]=u.useState(()=>c.payload),[f,b]=u.useState(null),[k,g]=u.useState(!1);u.useEffect(()=>{p(c.payload),b(null)},[s]);const y=E=>A=>p(B=>({...B,[E]:A.target.value})),w=Bn(s),v=Eo[w]??[],x=E=>{var A;return((A=(Eo[Do(e.payload)]??[]).find(([B])=>B===E))==null?void 0:A[1])??E};async function _(E){if(!k){g(!0);try{const A=await a(s,d?void 0:{...h},E);A&&A.pending?b(A):t()}finally{g(!1)}}}return f?n.jsxs(mt,{open:!0,title:"Item ini akan dikembalikan ke Brainstorming",icon:"rotate-ccw",eyebrow:`${e.id} · ${Kt(e.source).label} → ${Kt(s).label}`,onClose:k?void 0:t,children:[n.jsxs("div",{style:{fontSize:13.5,color:"var(--text-strong)",lineHeight:1.55,marginBottom:12},children:["Alur kerja ",Kt(s).label," berbeda dari yang sudah dikerjakan, jadi item ini mulai lagi dari awal. Kode yang sudah ter-commit di branch lain tak disentuh."]}),n.jsxs("ul",{"data-testid":"source-reset-impact",style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-muted)",marginBottom:16,paddingLeft:18,lineHeight:1.6},children:[f.wouldDelete.map(E=>n.jsx("li",{children:E},E)),f.worktree&&n.jsx("li",{children:f.worktree}),f.branch&&n.jsx("li",{children:f.branch}),!f.wouldDelete.length&&!f.worktree&&!f.branch&&n.jsx("li",{children:"tak ada berkas yang perlu dibuang — hanya tahapnya yang mundur"})]}),n.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[n.jsx(V,{size:"sm",variant:"secondary",disabled:k,onClick:t,children:"Batal"}),n.jsx(V,{size:"sm",variant:"danger",leftIcon:"rotate-ccw",loading:k,onClick:()=>_(!0),children:"Reset & ubah type"})]})]}):n.jsxs(mt,{open:!0,title:"Ubah type backlog item",icon:"shuffle",eyebrow:`${e.id} · ${Kt(e.source).label}`,onClose:t,children:[n.jsx(ge,{label:"Type tujuan",children:n.jsx(Be,{"aria-label":"Type tujuan",value:s,onChange:E=>o(E.target.value),options:r,style:{width:"100%"}})}),!r.length&&n.jsx("div",{style:{fontSize:13,color:"var(--text-muted)",lineHeight:1.5,marginBottom:12},children:"Tak ada type lain yang bisa dituju. Dialog tetap terbuka dan mengatakannya — menolak dengan diam adalah bug yang melahirkan ADR-0149."}),d?n.jsxs("div",{style:{fontSize:13,color:"var(--text-muted)",lineHeight:1.5,marginBottom:12},children:["Item ini sudah pernah dikerjakan sesi, dan type tujuannya memakai alur kerja yang sama — yang berpindah hanya ",n.jsx("strong",{children:"labelnya"}),". Isi, worktree, dan berkas fase tak disentuh."]}):n.jsxs(n.Fragment,{children:[l&&n.jsxs("div",{"data-testid":"source-reset-warning",style:{fontSize:12.5,color:"var(--text-strong)",lineHeight:1.5,marginBottom:12,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",padding:10},children:[n.jsx(Oe,{tone:"warn",size:"sm",children:"alur kerja berbeda"})," ","Item ini akan kembali ke tahap ",n.jsx("strong",{children:"Brainstorming"}),"; dokumen fase, worktree, dan branch sesi lamanya dihapus. Daftar persisnya ditampilkan sebelum kamu menyetujui."]}),c.dropped.length>0&&n.jsxs("div",{"data-testid":"source-dropped",style:{fontSize:12.5,color:"var(--text-muted)",lineHeight:1.5,marginBottom:12,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",padding:10},children:[n.jsx(Oe,{tone:"warn",size:"sm",children:"tak punya padanan"})," ",c.dropped.map(x).join(", ")," tidak ada di bentuk"," ",Kt(s).label,". Teks lamanya tetap tersimpan di"," ",n.jsx("strong",{children:"jejak konversi"})," item ini."]}),w!=="qa"&&n.jsx(ge,{label:"Prioritas",children:n.jsx(Be,{"aria-label":"Prioritas",value:h.priority??"sedang",onChange:y("priority"),options:Nm,style:{width:"100%"}})}),v.map(([E,A,B])=>n.jsx(ge,{label:A,children:E==="severity"?n.jsx(Be,{"aria-label":A,value:h[E]??"minor",onChange:y(E),options:Fm,style:{width:"100%"}}):n.jsx(zt,{"aria-label":A,value:h[E]??"",onChange:y(E),rows:2,placeholder:B})},E))]}),n.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end",marginTop:8},children:[n.jsx(V,{size:"sm",variant:"secondary",onClick:t,children:"Batal"}),n.jsx(V,{size:"sm",variant:"primary",leftIcon:"shuffle",loading:k,disabled:!r.length,onClick:()=>_(),children:"Ubah type"})]})]})}const Ac=280;function Hm({spec:e,onClose:t,onSubmit:a}){const[i,r]=u.useState(""),[s,o]=u.useState(null),[l,d]=u.useState(!1),c=u.useRef(!1);async function h(){if(!c.current){c.current=!0,d(!0);try{const p=await a(e,i.trim(),s!==null);if(p&&"needConfirm"in p){o(p.sessionId??"");return}p&&t()}finally{c.current=!1,d(!1)}}}return n.jsxs(mt,{open:!0,title:"Tandai selesai",icon:"circle-check",eyebrow:e.id+" · "+e.projectId,onClose:l?void 0:t,children:[n.jsx("div",{style:{fontSize:13,color:"var(--text-muted)",lineHeight:1.55,marginBottom:14},children:"Item keluar dari daftar siap-kerja dan berstatus selesai — sama seperti item yang selesai lewat sesi. Kode, commit, dan dokumen tidak disentuh, dan status ini masih bisa dikembalikan lewat “Ubah status”."}),s!==null&&n.jsxs("div",{"data-testid":"mark-done-live",style:{border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",background:"var(--bone-100)",padding:10,marginBottom:14,fontSize:12.5,color:"var(--text-strong)",lineHeight:1.5},children:["Masih ada sesi yang berjalan untuk item ini",s?` (${s})`:"",". Menandainya selesai tidak menghentikan sesi itu — tutup sesinya dari Terminal bila memang sudah tak dibutuhkan."]}),n.jsx(ge,{label:"Alasan singkat (opsional)",hint:`${i.trim().length}/${Ac} — mis. “sudah ter-merge lewat PR #12”`,children:n.jsx(zt,{"aria-label":"Alasan singkat (opsional)",rows:2,value:i,maxLength:Ac,disabled:l,onChange:p=>r(p.target.value),placeholder:"sudah dikerjakan langsung di checkout"})}),n.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[n.jsx(V,{size:"sm",variant:"secondary",disabled:l,onClick:t,children:"Batal"}),n.jsx(V,{size:"sm",variant:"primary",leftIcon:"circle-check",loading:l,onClick:h,children:s!==null?"Tandai selesai — sesi tetap berjalan":"Tandai selesai"})]})]})}const Ea=[{key:"brainstorming",label:"Brainstorm"},{key:"objective",label:"Objective"},{key:"spec-ready",label:"Spec"},{key:"planned",label:"Plan"},{key:"executing",label:"Execute"},{key:"done",label:"Done"}],Um=e=>Ea.findIndex(t=>t.key===e),Ta={tinggi:{tone:"err",label:"prioritas tinggi"},sedang:{tone:"neutral",label:"prioritas sedang"},rendah:{tone:"neutral",label:"prioritas rendah"}},Gm=e=>e==="missing"?"tak ditemukan":e==="unmerged"?"belum ter-merge":"belum selesai";function Sl({spec:e}){const t=e.blockedBy??[];return t.length?n.jsx(Oe,{tone:"warn",size:"sm",icon:"lock",title:t.map(a=>`${a.id} — ${Gm(a.reason)}`).join(" · "),children:"Terblokir"}):null}function _l({stage:e}){var i;const t=Um(e),a=((i=Ea[t])==null?void 0:i.label)??e;return n.jsx("div",{"aria-label":`Status ${a}`,style:{display:"flex",alignItems:"center",gap:4},children:Ea.map((r,s)=>{const o=s<t||e==="done",l=s===t&&e!=="done";return n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:5,padding:l?"3px 9px":0,borderRadius:"var(--radius-pill)",background:l?"var(--brass-100)":"transparent"},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:o?"var(--leaf-500)":l?"var(--brass-500)":"var(--bone-400)"}}),l&&n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,fontWeight:500,color:"var(--brass-700)"},children:r.label})]}),s<Ea.length-1&&n.jsx("span",{style:{width:12,height:1.5,background:s<t||e==="done"?"var(--leaf-500)":"var(--bone-300)"}})]},r.key)})})}function Ec({label:e,value:t}){return n.jsxs("div",{style:{marginBottom:14},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:e}),n.jsx("div",{style:{fontSize:13.5,color:"var(--text-strong)",lineHeight:1.5,whiteSpace:"pre-wrap"},children:t||"—"})]})}const D_={qa:"Finding QA — ada yang perlu diperbaiki.",brief:"Feature brief — kebutuhan yang bentuknya sudah jelas.",prd:"PRD — kebutuhan produk yang perlu didefinisikan dulu."},qr=(e,t)=>e&&e.target===t?"primary":"secondary",Mc=e=>e==="audit";function O_({spec:e,onClose:t,onEditBranch:a,onRevertStage:i,onMarkDone:r,onOpenReview:s,onStart:o,onIntegrate:l,onEditSpec:d,onPromoteToQa:c,onPromoteToBrief:h,onPromoteToPrd:p,onEditDeps:f,onEditAutoMerge:b,onChangeSource:k,projectPolicy:g,allSpecs:y,onAttachmentToast:w}){var gt,ae,tt;const[v,x]=u.useState([]),[_,T]=u.useState(new Set),[E,A]=u.useState(null),[B,O]=u.useState(""),[ne,Z]=u.useState(!1),[P,D]=u.useState(!1),W=u.useRef(!1),[F,N]=u.useState(!1),[ee,J]=u.useState(!1),[H,K]=u.useState(!1),[me,He]=u.useState({}),fe=(e==null?void 0:e.stage)==="brainstorming"&&(e==null?void 0:e.baseSha)==null&&!!d&&e.payload!==void 0,Te=()=>{if(!e)return;const X=e.payload||{};He({title:e.title,priority:e.priority,...X}),K(!0)},ze=X=>de=>He(at=>({...at,[X]:de.target.value})),[Me,Ye]=u.useState(null),I=e&&Mc(e.source)?e.id:null;u.useEffect(()=>{var de;if(Ye(null),!I)return;let X=!0;return(de=Y.getEscalation)==null||de.call(Y,I).then(at=>{X&&Ye(at.escalation)}).catch(()=>{X&&Ye(null)}),()=>{X=!1}},[I]);const be=()=>{if(!e||!d)return;const X=e.source==="qa"?{title:me.title,payload:{severity:me.severity,steps:me.steps,expected:me.expected,actual:me.actual,env:me.env,constraints:me.constraints??""}}:Bn(e.source)==="goal"?{title:me.title,priority:me.priority,payload:{goal:me.goal,done:me.done??"",constraints:me.constraints??"",priority:me.priority}}:{title:me.title,priority:me.priority,payload:{context:me.context,outcome:me.outcome,constraints:me.constraints,priority:me.priority}};d(e,X),K(!1)},Re=e==null?void 0:e.projectId;u.useEffect(()=>{if(!Re){x([]),T(new Set);return}let X=!0;return Y.listBranches(Re).then(de=>{if(X){const at=[...new Set([...de.branches,...de.remotes])].sort();x(at),T(new Set(de.remotes.filter(Ft=>!de.branches.includes(Ft))))}}).catch(()=>{X&&(x([]),T(new Set))}),()=>{X=!1}},[Re]),u.useEffect(()=>{B&&O(""),E&&A(null)},[e==null?void 0:e.id,e==null?void 0:e.stage]);async function Ze(X){if(!W.current){W.current=!0,D(!0);try{return await X()}finally{W.current=!1,D(!1)}}}async function oe(){if(!e||!i||!B)return;const X=await Ze(()=>i(e,B));X&&X.pending?A({target:B,files:X.wouldDelete}):X&&O("")}async function je(){if(!e||!i||!E)return;await Ze(()=>i(e,E.target,!0))&&(A(null),O(""))}function Ce(){E||W.current||(K(!1),t())}if(!e)return null;const ke=Ea.slice(0,Um(e.stage)),Ue=((gt=Ea.find(X=>X.key===e.stage))==null?void 0:gt.label)??e.stage,Je=((ae=Ea.find(X=>X.key===B))==null?void 0:ae.label)??B,rt=e.source==="qa",et=Bn(e.source),xt=e.payload||{},kt=(y??[]).filter(X=>X.projectId===e.projectId&&X.id!==e.id),pt=Eo[et];return n.jsxs(mt,{open:!0,title:e.title,eyebrow:e.id+" · "+e.projectId,icon:Kt(e.source).icon,onClose:Ce,children:[n.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap",marginBottom:16,alignItems:"center"},children:[n.jsx(Oe,{tone:Kt(e.source).tone,size:"sm",children:Kt(e.source).label}),n.jsx(Oe,{tone:(Ta[e.priority]||Ta.sedang).tone,size:"sm",variant:"outline",children:(Ta[e.priority]||Ta.sedang).label}),n.jsx(Oe,{tone:"neutral",size:"sm",children:e.author}),n.jsx("span",{style:{flex:1}}),fe&&!H&&n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"pencil",onClick:Te,children:"Edit"}),k&&n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"shuffle",onClick:()=>J(!0),children:"Ubah type"}),s&&n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"git-compare",onClick:()=>{s(e),t()},children:"Review perubahan"})]}),n.jsxs("div",{style:{marginBottom:18},children:[n.jsx(_l,{stage:e.stage}),e.stage==="done"&&o&&n.jsx("div",{style:{marginTop:12},children:n.jsx(V,{size:"sm",variant:"primary",leftIcon:"play",onClick:()=>o(e),children:"Buka sesi lagi"})}),Mc(e.source)&&(c||h||p)&&n.jsxs("div",{style:{marginTop:12},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Tindak lanjut"}),Me&&n.jsxs("div",{style:{fontSize:12.5,color:"var(--text-muted)",lineHeight:1.5,marginBottom:8},children:[Me.target==="none"?n.jsxs("span",{children:["Audit menilai ",n.jsx("strong",{children:"cukup jawaban"})," — tak perlu perbaikan."]}):n.jsxs("span",{children:[n.jsx(Oe,{tone:"brass",size:"sm",children:"direkomendasikan hanoman"})," ",D_[Me.target]]}),Me.reason?n.jsx("div",{style:{marginTop:4},children:Me.reason}):null]}),n.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:[c&&n.jsx(V,{size:"sm",variant:qr(Me,"qa"),leftIcon:"bug",onClick:()=>c(e,Me),children:"Jadikan Finding QA"}),h&&n.jsx(V,{size:"sm",variant:qr(Me,"brief"),leftIcon:"lightbulb",onClick:()=>h(e,Me),children:"Jadikan Feature brief"}),p&&n.jsx(V,{size:"sm",variant:qr(Me,"prd"),leftIcon:"scroll-text",onClick:()=>p(e,Me),children:"Jadikan PRD"})]})]}),e.stage==="done"&&l&&n.jsxs("div",{style:{marginTop:12},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Integrasi"}),n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"git-merge",onClick:()=>N(!0),children:"Rebase / Merge"})]}),(i||r)&&n.jsxs("div",{style:{marginTop:12},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Ubah status"}),n.jsx("div",{style:{fontSize:13,color:"var(--text-strong)",fontWeight:600,marginBottom:6},children:`Status saat ini: ${Ue}`}),e.stage!=="done"&&r&&n.jsx("div",{style:{marginBottom:10},children:n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"circle-check",onClick:()=>Z(!0),children:"Tandai selesai"})}),i?ke.length>0?n.jsxs(n.Fragment,{children:[n.jsx(Be,{size:"sm","aria-label":"Kembalikan stage",value:B,onChange:X=>O(X.target.value),disabled:P,placeholder:"Pilih status lebih awal…",options:ke.map(X=>({value:X.key,label:"← "+X.label}))}),n.jsx("div",{style:{fontSize:12.5,color:"var(--text-muted)",lineHeight:1.5,marginTop:6},children:"Status saat ini dan status berikutnya tidak dapat dipilih. Kemajuan hanya berasal dari fase sesi."}),B&&n.jsxs("div",{style:{border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",background:"var(--bone-100)",padding:10,marginTop:8,fontSize:12.5,color:"var(--text-muted)",lineHeight:1.5},children:[n.jsxs("div",{style:{color:"var(--text-strong)",fontWeight:600},children:[Ue," → ",Je]}),"Fase sesi yang sudah berjalan tidak dibatalkan. Dokumen Spec/Plan di atas target mungkin perlu dihapus setelah konfirmasi; kode dan commit tidak disentuh."]}),n.jsx("div",{style:{marginTop:8},children:n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"rotate-ccw",disabled:!B,loading:P,onClick:oe,children:"Simpan status"})})]}):n.jsxs("div",{style:{fontSize:12.5,color:"var(--text-muted)",lineHeight:1.5},children:[Ue," adalah status paling awal. Kemajuan hanya berasal dari fase sesi."]}):null]})]}),e.manualDone&&n.jsxs("div",{style:{marginBottom:14},"data-testid":"manual-done-trail",children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Ditandai selesai manual"}),n.jsxs("div",{style:{fontSize:12.5,color:"var(--text-muted)",lineHeight:1.5},children:[e.manualDone.by," · ",new Date(e.manualDone.at).toLocaleString("id-ID"),e.manualDone.reason?n.jsx("div",{style:{marginTop:4},children:e.manualDone.reason}):null]})]}),(e.sourceHistory??[]).length>0&&n.jsxs("div",{style:{marginBottom:14},"data-testid":"source-trail",children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Jejak konversi type"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:4},children:(e.sourceHistory??[]).map((X,de)=>n.jsxs("div",{style:{fontSize:13,color:"var(--text-muted)"},children:[n.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-strong)"},children:[X.from," → ",X.to]})," · ",new Date(X.at).toLocaleString("id-ID")," · ",X.by]},`${X.at}-${de}`))})]}),b&&n.jsxs("div",{style:{marginBottom:14},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Auto-merge saat selesai"}),n.jsx(Be,{size:"sm","aria-label":"Auto-merge item ini",value:e.autoMerge?e.autoMerge.mode:"inherit",onChange:X=>{var at;const de=X.target.value;if(de==="inherit")return b(e,null);if(de==="off")return b(e,{...si});b(e,{...e.autoMerge??si,mode:de,branch:de==="branch"?((at=e.autoMerge)==null?void 0:at.branch)??v[0]??null:null})},options:[{value:"inherit",label:`Ikut project (${ru(hg(g,null))})`},{value:"off",label:"Tanpa auto-merge untuk item ini"},{value:"default-branch",label:"Auto-merge ke default branch repo"},{value:"branch",label:"Auto-merge ke branch tujuan…"}]}),((tt=e.autoMerge)==null?void 0:tt.mode)==="branch"&&n.jsx("div",{style:{marginTop:6},children:n.jsx(Be,{size:"sm","aria-label":"Branch tujuan item ini",value:e.autoMerge.branch??"",onChange:X=>b(e,{...e.autoMerge,branch:X.target.value||null}),options:[{value:"",label:"Pilih branch…"},...v.map(X=>({value:X,label:X}))]})})]}),H?n.jsx(ge,{label:"Judul",children:n.jsx(We,{value:me.title??"",onChange:ze("title"),placeholder:"mis. Jadwal invoice berulang",style:{width:"100%"}})}):n.jsx(Ec,{label:"Objective",value:e.objective}),n.jsxs("div",{style:{marginBottom:14},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Branch worktree"}),n.jsx(Be,{size:"sm",value:e.branchFrom??"",disabled:!v.length,onChange:X=>a&&a(e,X.target.value||null),options:tm(v,_)})]}),n.jsx(Sw,{specId:e.id,onToast:w??(()=>{})}),n.jsxs("div",{style:{marginBottom:14},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Bergantung pada"}),(e.dependsOn??[]).length===0?n.jsx("div",{style:{fontSize:13,color:"var(--text-subtle)"},children:"— berdiri sendiri"}):n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:4},children:(e.dependsOn??[]).map(X=>{const de=(e.blockedBy??[]).find(at=>at.id===X);return n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,fontSize:13},children:[n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-strong)"},children:X}),de?n.jsx(Oe,{tone:"warn",size:"sm",children:Gm(de.reason)}):n.jsx(Oe,{tone:"ok",size:"sm",icon:"check",children:"selesai & ter-merge"})]},X)})}),f&&kt.length>0&&n.jsx("div",{style:{maxHeight:132,overflowY:"auto",display:"flex",flexDirection:"column",gap:6,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",padding:8,marginTop:8},children:kt.map(X=>{const de=(e.dependsOn??[]).includes(X.id);return n.jsx(sr,{"aria-label":`Bergantung pada ${X.id}`,checked:de,label:`${X.id} · ${X.title}`,onChange:()=>f(e,de?(e.dependsOn??[]).filter(at=>at!==X.id):[...e.dependsOn??[],X.id])},X.id)})})]}),H?n.jsxs(n.Fragment,{children:[!rt&&n.jsx(ge,{label:"Prioritas",children:n.jsx(Be,{value:me.priority??"sedang",onChange:ze("priority"),options:Nm,style:{width:"100%"}})}),pt.map(([X,de,at])=>n.jsx(ge,{label:de,children:X==="severity"?n.jsx(Be,{value:me[X]??"major",onChange:ze(X),options:Fm,style:{width:"100%"}}):n.jsx(zt,{value:me[X]??"",onChange:ze(X),rows:2,placeholder:at})},X)),n.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end",marginTop:8},children:[n.jsx(V,{size:"sm",variant:"secondary",onClick:()=>K(!1),children:"Batal"}),n.jsx(V,{size:"sm",variant:"primary",leftIcon:"check",onClick:be,children:"Simpan"})]})]}):pt.map(([X,de])=>n.jsx(Ec,{label:de,value:xt[X]??""},X)),E&&n.jsxs(mt,{open:!0,title:"Kembalikan stage & hapus artefak",icon:"rotate-ccw",eyebrow:e.id+" → "+E.target,onClose:P?void 0:()=>A(null),children:[n.jsxs("div",{style:{fontSize:13.5,color:"var(--text-strong)",marginBottom:12},children:[E.files.length," berkas docs akan dihapus dari disk (kode & commit tak disentuh):"]}),n.jsx("ul",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-muted)",marginBottom:16,paddingLeft:18},children:E.files.map(X=>n.jsx("li",{children:X},X))}),n.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[n.jsx(V,{size:"sm",variant:"secondary",disabled:P,onClick:()=>A(null),children:"Batal"}),n.jsx(V,{size:"sm",variant:"primary",leftIcon:"trash-2",loading:P,onClick:je,children:"Hapus & kembalikan"})]})]}),F&&l&&n.jsx(C_,{projectId:e.projectId,ownBranch:`hanoman/${e.id.toLowerCase().replace(/[^a-z0-9_-]/g,"_")}`,eyebrow:e.id,onClose:()=>N(!1),onIntegrate:(X,de)=>{N(!1),l(e,X,de)}}),ne&&r&&n.jsx(Hm,{spec:e,onClose:()=>Z(!1),onSubmit:r}),ee&&k&&e.payload!==void 0&&n.jsx(B_,{spec:e,onClose:()=>J(!1),onSubmit:(X,de,at)=>Promise.resolve(k(e,X,de,at)??null)})]})}function Cl({spec:e,onStart:t,onDelete:a,onOpenRun:i,onOpenReview:r,onMarkDone:s,running:o}){const[l,d]=u.useState(!1),[c,h]=u.useState(!1);return n.jsxs("div",{className:"hn-row-actions",style:{display:"flex",alignItems:"center",gap:8},children:[r&&n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"git-compare",onClick:()=>r(e),children:"Review"}),e.stage!=="done"&&o&&n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"terminal",onClick:()=>i&&i(e),children:"Buka sesi"}),e.stage!=="done"&&!o&&n.jsx(V,{size:"sm",variant:"primary",leftIcon:"play",onClick:()=>t&&t(e),children:e.stage==="brainstorming"?"Mulai":"Lanjutkan"}),e.stage==="done"&&n.jsx(Oe,{tone:"ok",size:"sm",icon:"check-circle-2",children:"selesai"}),e.stage!=="done"&&s&&n.jsx(Tn,{size:"sm",variant:"ghost",icon:"circle-check",label:"Tandai selesai",onClick:()=>h(!0)}),n.jsx(Tn,{size:"sm",variant:"ghost",icon:"file-text",label:"Lihat dokumen",onClick:()=>d(!0)}),a&&n.jsx(Tn,{size:"sm",variant:"ghost",icon:"trash-2",label:"Hapus spec",onClick:()=>a(e)}),c&&s&&n.jsx(Hm,{spec:e,onClose:()=>h(!1),onSubmit:s}),l&&n.jsx(Lm,{specId:e.id,onClose:()=>d(!1)})]})}const qm=e=>{const t=e?new Date(e):null;return t&&!Number.isNaN(t.getTime())?t.toLocaleDateString("id-ID",{day:"numeric",month:"short",year:"numeric"}):""};function Tl({spec:e,style:t}){const a=qm(e.createdAt);return a?n.jsx("time",{dateTime:e.createdAt,title:"Tanggal dibuat","data-testid":"spec-created",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)",whiteSpace:"nowrap",...t},children:a}):null}function Al({spec:e,onOpenDetail:t,size:a=15}){return n.jsx("button",{onClick:()=>t&&t(e),style:{border:"none",background:"transparent",padding:0,textAlign:"left",cursor:"pointer",fontFamily:"var(--font-sans)",fontSize:a,fontWeight:600,color:"var(--text-strong)",overflowWrap:"anywhere"},children:e.title})}const Pc=e=>({display:"-webkit-box",WebkitLineClamp:e,WebkitBoxOrient:"vertical",overflow:"hidden",overflowWrap:"anywhere"});function z_({spec:e,onStart:t,onDelete:a,onOpenRun:i,onOpenReview:r,onOpenDetail:s,onMarkDone:o,running:l,presenceOn:d}){const c=Ta[e.priority]||Ta.sedang;return n.jsxs(Qe,{padding:16,fill:!0,style:{height:"100%"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:12},children:[n.jsxs("div",{style:{minWidth:0},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-subtle)"},children:e.id}),n.jsx(Oe,{tone:Kt(e.source).tone,size:"sm",icon:Kt(e.source).icon,children:Kt(e.source).label}),e.branchFrom&&n.jsx(Oe,{tone:"neutral",size:"sm",icon:"git-branch",children:e.branchFrom}),n.jsx(Sl,{spec:e}),n.jsx(cr,{names:d}),n.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-muted)"},children:["· ",e.projectId]})]}),n.jsx("div",{style:{marginTop:8,...Pc(2)},children:n.jsx(Al,{spec:e,onOpenDetail:s})}),n.jsx("div",{title:e.objective,style:{fontSize:13,color:"var(--text-muted)",marginTop:4,lineHeight:1.45,...Pc(3)},children:e.objective})]}),n.jsx(Oe,{tone:c.tone,size:"sm",variant:e.priority==="tinggi"?"soft":"outline",children:c.label})]}),n.jsxs("div",{style:{marginTop:"auto",paddingTop:12,borderTop:"1px solid var(--border-hair)"},children:[n.jsx(_l,{stage:e.stage}),n.jsxs("div",{className:"hn-card-footer",style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:10,marginTop:12},children:[n.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)"},children:[e.author,qm(e.createdAt)&&" · ",n.jsx(Tl,{spec:e})]}),n.jsx(Cl,{spec:e,onStart:t,onDelete:a,onOpenRun:i,onOpenReview:r,onMarkDone:o,running:l})]})]})]})}function N_({spec:e,projectName:t,onStart:a,onDelete:i,onOpenRun:r,onOpenReview:s,onOpenDetail:o,onMarkDone:l,running:d,presenceOn:c}){const h=Ta[e.priority]||Ta.sedang;return n.jsxs("div",{className:"hn-backlog-row",style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:"8px 14px",padding:"12px 16px",borderBottom:"1px solid var(--border-hair)",background:"var(--surface-card)"},children:[n.jsx(Ee,{name:Kt(e.source).icon,size:15,color:Kt(e.source).color}),n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-subtle)",flex:"0 0 84px"},children:e.id}),n.jsxs("div",{style:{flex:"1 1 320px",minWidth:240},children:[n.jsx(Al,{spec:e,onOpenDetail:o,size:14}),n.jsx("div",{style:{fontSize:12,color:"var(--text-muted)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.objective})]}),n.jsx(Oe,{tone:"neutral",size:"sm",icon:"folder","data-testid":"spec-project",children:t??e.projectId}),e.branchFrom&&n.jsx(Oe,{tone:"neutral",size:"sm",icon:"git-branch",children:e.branchFrom}),n.jsx(Sl,{spec:e}),n.jsx(Oe,{tone:h.tone,size:"sm",variant:e.priority==="tinggi"?"soft":"outline",children:h.label}),n.jsx(Tl,{spec:e}),n.jsx(cr,{names:c}),n.jsx("div",{style:{flex:"0 0 auto"},children:n.jsx(_l,{stage:e.stage})}),n.jsx(Cl,{spec:e,onStart:a,onDelete:i,onOpenRun:r,onOpenReview:s,onMarkDone:l,running:d})]})}const ur="backlog",Wm="success",F_=Ea[0].key,Ic=[{key:ur,label:"Backlog",icon:"inbox"},...Ea.slice(0,5).map(e=>({key:e.key,label:e.label})),{key:Wm,label:"Success",icon:"check-circle-2"}];function H_(e,t){return e.stage==="done"?Wm:!t&&e.stage==="brainstorming"?ur:e.stage}const Rc=(e,t)=>e===ur&&t===F_;function U_({spec:e,col:t,onOpenDetail:a,onStart:i,onOpenRun:r,onOpenReview:s,onMarkDone:o,running:l,presenceOn:d,onDragStart:c,onDragEnd:h,dragging:p}){const f=Ta[e.priority]||Ta.sedang,b=t===ur;return n.jsxs("div",{draggable:b,onDragStart:k=>{k.dataTransfer.effectAllowed="move",k.dataTransfer.setData("text/plain",e.id),c()},onDragEnd:h,title:b?"Seret ke Brainstorm untuk memulai sesi":"Stage mengikuti fase yang dilaporkan agen — kartu tak bisa dipindah",style:{flex:"0 0 auto",background:"var(--surface-card)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-md)",padding:10,boxShadow:"var(--shadow-xs)",cursor:b?"grab":"default",opacity:p?.4:1},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:6},children:[n.jsx(Ee,{name:Kt(e.source).icon,size:13,color:Kt(e.source).color}),n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)"},children:e.id}),n.jsx("span",{style:{flex:1}}),n.jsx(Tl,{spec:e}),n.jsx(Oe,{tone:f.tone,size:"sm",variant:e.priority==="tinggi"?"soft":"outline",children:e.priority})]}),n.jsx(Al,{spec:e,onOpenDetail:a,size:13}),e.branchFrom&&n.jsx("div",{style:{marginTop:6},children:n.jsx(Oe,{tone:"neutral",size:"sm",icon:"git-branch",children:e.branchFrom})}),(e.blockedBy??[]).length>0&&n.jsx("div",{style:{marginTop:6},children:n.jsx(Sl,{spec:e})}),d!=null&&d.length?n.jsx("div",{style:{marginTop:6},children:n.jsx(cr,{names:d})}):null,n.jsx("div",{style:{marginTop:8},children:n.jsx(Cl,{spec:e,onStart:i,onOpenRun:r,onOpenReview:s,onMarkDone:o,running:l})})]})}function G_({specs:e,activeSpecs:t,presenceBySpec:a,onStart:i,onOpenRun:r,onOpenReview:s,onOpenDetail:o,onMarkDone:l}){const[d,c]=u.useState(null),[h,p]=u.useState(null),f=u.useMemo(()=>{var g;const k=new Map(Ic.map(y=>[y.key,[]]));for(const y of e)(g=k.get(H_(y,t==null?void 0:t.has(y.id))))==null||g.push(y);return k},[e,t]),b=k=>{d&&Rc(d.from,k)&&i&&i(d.spec),c(null),p(null)};return n.jsx("div",{"data-testid":"backlog-board",className:"hn-board-local-overflow",style:{flex:"1 1 auto",minHeight:0,display:"flex",gap:10,overflowX:"auto",overflowY:"hidden",alignItems:"stretch",paddingBottom:4},children:Ic.map(k=>{const g=f.get(k.key),y=!!d&&Rc(d.from,k.key),w=y&&h===k.key;return n.jsxs("div",{onDragOver:v=>{y&&(v.preventDefault(),v.dataTransfer.dropEffect="move",p(k.key))},onDragLeave:()=>p(v=>v===k.key?null:v),onDrop:v=>{v.preventDefault(),b(k.key)},style:{flex:"0 0 244px",display:"flex",flexDirection:"column",minHeight:0,padding:10,borderRadius:"var(--radius-lg)",background:w?"var(--brass-100)":"var(--bone-100)",border:`1px ${y?"dashed":"solid"} ${w?"var(--brass-500)":"var(--border-hair)"}`,opacity:d&&!y?.5:1,transition:"var(--transition-fast)"},children:[n.jsxs("div",{style:{...tn,display:"flex",alignItems:"center",gap:6,marginBottom:8},children:[k.icon&&n.jsx(Ee,{name:k.icon,size:13,color:"var(--text-muted)"}),n.jsx("span",{className:"hn-eyebrow",children:k.label}),n.jsx("span",{style:{flex:1}}),n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)"},children:g.length})]}),n.jsx("div",{style:{...Fi,display:"flex",flexDirection:"column",gap:8},children:g.map(v=>n.jsx(U_,{spec:v,col:k.key,onOpenDetail:o,onStart:i,onOpenRun:r,onOpenReview:s,onMarkDone:l,running:t==null?void 0:t.has(v.id),presenceOn:a==null?void 0:a.get(v.id),dragging:(d==null?void 0:d.spec.id)===v.id,onDragStart:()=>c({spec:v,from:k.key}),onDragEnd:()=>{c(null),p(null)}},v.id))})]},k.key)})})}const q_=[{value:"grid",label:"Grid",icon:"layout-grid"},{value:"list",label:"List",icon:"list"},{value:"board",label:"Board",icon:"kanban"}];function W_({backlog:e,projects:t,pageSize:a=20,onStart:i,activeSpecs:r,presenceBySpec:s,onDelete:o,onOpenRun:l,onOpenReview:d,onNew:c,onEditBranch:h,onRevertStage:p,onMarkDone:f,onIntegrate:b,onEditSpec:k,onEditDeps:g,onEditAutoMerge:y,onChangeSource:w,onPromoteToQa:v,onPromoteToBrief:x,onPromoteToPrd:_,projectFilter:T,onProjectFilter:E,dataVersion:A,onToast:B,initialDetailId:O}){var Vt;const[ne,Z]=Pt("backlog","tab","all",_a),[P,D]=u.useState(0),[W,F]=Pt("backlog","view","grid",Gs("grid","list","board")),[N,ee]=Pt("backlog","q","",_a),[J,H]=Pt("backlog","stage","all",_a),[K,me]=Pt("backlog","prio","all",_a),[He,fe]=Pt("backlog","dateField","created",Gs("created","started")),[Te,ze]=Pt("backlog","from","",_a),[Me,Ye]=Pt("backlog","to","",_a),I=T,be=E,[Re,Ze]=Pt("backlog","detailId",null,Oh);u.useEffect(()=>{O&&Ze(O)},[O]);const oe=t||[...new Set(e.map(q=>q.projectId))].map(q=>({id:q,name:q})),[je,Ce]=u.useState(()=>({items:e.map(q=>({objective:"",...q})),total:e.length})),[ke,Ue]=Pt("backlog","page",1,cl),[Je,rt]=u.useState(()=>N.trim()),[et,xt]=u.useState(!1),kt=u.useRef(!1),pt=[ne!=="all",I!=="all",N.trim()!=="",J!=="all",K!=="all",Te!=="",Me!==""].filter(Boolean).length,gt=ul("backlog","scroll",je.items.length>0),ae=()=>be("all");u.useEffect(()=>{const q=setTimeout(()=>rt(N.trim()),250);return()=>clearTimeout(q)},[N]),Fh(JSON.stringify([ne,I,J,K,Je,W,He,Te,Me]),()=>Ue(1)),u.useEffect(()=>{var wt;let q=!0;const qe=(wt=Y.listSpecs)==null?void 0:wt.call(Y,{project:I==="all"?void 0:I,source:ne==="all"?void 0:ne,q:Je||void 0,stage:J==="all"?void 0:J,priority:K==="all"?void 0:K,dateField:Te||Me?He:void 0,from:Te||void 0,to:Me||void 0,page:W==="board"?void 0:ke,limit:W==="board"?void 0:a});return qe==null||qe.then(ca=>{q&&(Ce({items:ca.items,total:ca.total}),kt.current=!1,xt(!1))}).catch(()=>{q&&(kt.current||(kt.current=!0,B==null||B("Gagal menyegarkan backlog — jumlah & daftar di layar mungkin basi","warn")),xt(!0))}),()=>{q=!1}},[ne,I,J,K,Je,W,ke,a,A,P,He,Te,Me]);const tt=u.useMemo(()=>new Map(e.map(q=>[q.id,q])),[e]),X=u.useMemo(()=>je.items.map(q=>Ur(q,tt.get(q.id))),[je.items,tt]),[de,at]=u.useState(null);u.useEffect(()=>{if(!Re||!Y.getSpec){at(null);return}let q=!0;return Y.getSpec(Re).then(qe=>{q&&at(qe)}).catch(qe=>{!q||!(qe instanceof lt)||qe.status!==404||(Ze(null),B==null||B(`${Re} sudah tidak ada`,"warn"))}),()=>{q=!1}},[Re,A]);const Ft=u.useMemo(()=>{if(!Re)return null;const q=tt.get(Re);if((de==null?void 0:de.id)===Re)return Ur(de,q);const qe=je.items.find(wt=>wt.id===Re);return qe?Ur(qe,q):q?{objective:"",...q}:null},[Re,de,je.items,tt]),Ht=Vi(je.total,ke,a);return n.jsxs("div",{style:tl,children:[n.jsxs("div",{className:"hn-backlog-controls",role:"region","aria-label":"Kontrol backlog",style:{...tn,marginBottom:18},children:[n.jsxs("div",{className:"hn-backlog-topline",style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,flexWrap:"wrap",marginBottom:12},children:[n.jsx(Ia,{"aria-label":"Sumber backlog",variant:"pill",value:ne,onChange:Z,tabs:[{value:"all",label:"Semua spec"},{value:"brief",label:"Dari brief"},{value:"qa",label:"Dari QA"},{value:"audit",label:"Audit"},{value:"goal",label:"Goal"},{value:"help",label:"Help Center"},{value:"no_effort",label:"Tanpa effort"}]}),n.jsxs("div",{className:"hn-backlog-view-actions",style:{display:"flex",alignItems:"center",gap:10},children:[n.jsx(Ia,{variant:"pill",value:W,onChange:F,tabs:q_,"aria-label":"Mode tampilan"}),n.jsx(P_,{onDone:()=>D(q=>q+1),onToast:B??(()=>{})}),n.jsx(Wh,{screen:"backlog",active:pt,onReset:ae}),n.jsxs("span",{className:"hn-eyebrow",role:"status",style:et?{color:"var(--amber-600)"}:void 0,title:et?"Server tak menjawab saat menyegarkan — angka ini dari muatan terakhir yang berhasil":void 0,children:[je.total," spec",et?" · basi":""]})]})]}),n.jsxs("div",{className:"hn-backlog-filters",style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[n.jsx(We,{size:"sm",leftIcon:"search",placeholder:"mis. invoice atau SPEC-412","aria-label":"Cari backlog",value:N,onChange:q=>ee(q.target.value),style:{flex:"1 1 220px"}}),n.jsx(Be,{size:"sm","aria-label":"Filter project",value:I,onChange:q=>be(q.target.value),options:[{value:"all",label:"Semua project"}].concat(oe.map(q=>({value:q.id,label:q.name})))}),n.jsx(Be,{size:"sm","aria-label":"Filter stage",value:J,onChange:q=>H(q.target.value),options:[{value:"all",label:"Semua stage"}].concat(Ea.map(q=>({value:q.key,label:q.label})))}),n.jsx(Be,{size:"sm","aria-label":"Filter prioritas",value:K,onChange:q=>me(q.target.value),options:[{value:"all",label:"Semua prioritas"},{value:"tinggi",label:"Tinggi"},{value:"sedang",label:"Sedang"},{value:"rendah",label:"Rendah"}]}),n.jsx(Be,{size:"sm","aria-label":"Filter tanggal berdasarkan",value:He,onChange:q=>fe(q.target.value),options:[{value:"created",label:"Dibuat"},{value:"started",label:"Dikerjakan"}]}),n.jsx(We,{size:"sm",type:"date","aria-label":"Tanggal dari",value:Te,onChange:q=>ze(q.target.value),style:{flex:"0 0 auto"}}),n.jsx("span",{className:"hn-eyebrow","aria-hidden":"true",children:"→"}),n.jsx(We,{size:"sm",type:"date","aria-label":"Tanggal sampai",value:Me,onChange:q=>Ye(q.target.value),style:{flex:"0 0 auto"}})]})]}),je.total===0?e.length===0?n.jsx(ye,{kind:"empty",illustration:"PST-002",title:"Backlog masih kosong",hint:"Filekan feature brief atau QA finding — hanoman menjalankannya dari brainstorm sampai execute.",action:c,actionLabel:"Tambah spec"}):n.jsx(ye,{kind:"empty",icon:"filter",title:"Tidak ada spec untuk filter ini",hint:`${e.length} spec ada di backlog, tapi tak ada yang cocok dengan filter aktif.`,action:()=>{Z("all"),be("all"),ee(""),H("all"),me("all"),fe("created"),ze(""),Ye("")},actionLabel:"Reset filter",actionIcon:"rotate-ccw"}):W==="board"?n.jsx(G_,{specs:X,activeSpecs:r,presenceBySpec:s,onMarkDone:f,onStart:i,onOpenRun:l,onOpenReview:d,onOpenDetail:q=>Ze(q.id)}):n.jsxs(n.Fragment,{children:[W==="list"?n.jsx("div",{ref:gt,"data-testid":"backlog-scroll",className:"hn-backlog-list",style:{...Fi,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-lg)",overflowX:"hidden"},children:X.map(q=>{var qe;return n.jsx(N_,{spec:q,projectName:(qe=t.find(wt=>wt.id===q.projectId))==null?void 0:qe.name,onStart:i,running:r==null?void 0:r.has(q.id),presenceOn:s==null?void 0:s.get(q.id),onDelete:o,onOpenRun:l,onOpenReview:d,onMarkDone:f,onOpenDetail:wt=>Ze(wt.id)},q.id)})}):n.jsx("div",{ref:gt,"data-testid":"backlog-scroll",className:"hn-backlog-grid",style:{...Fi,display:"grid",gap:12,gridTemplateColumns:"repeat(auto-fill, minmax(min(340px, 100%), 1fr))",gridAutoRows:"1fr"},children:X.map(q=>n.jsx(z_,{spec:q,onStart:i,running:r==null?void 0:r.has(q.id),presenceOn:s==null?void 0:s.get(q.id),onDelete:o,onOpenRun:l,onOpenReview:d,onMarkDone:f,onOpenDetail:qe=>Ze(qe.id)},q.id))}),n.jsx("div",{style:{...tn,marginTop:14,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-lg)",overflow:"hidden"},children:n.jsx(Yi,{page:Ht.page,pageCount:Ht.pageCount,total:je.total,from:Ht.from,to:Ht.to,onPage:Ue,unit:"spec"})})]}),n.jsx(O_,{spec:Ft,onClose:()=>Ze(null),onEditBranch:h,onRevertStage:p,onMarkDone:f,onOpenReview:d,onStart:i,onIntegrate:b,onEditSpec:k,onPromoteToQa:v,onPromoteToBrief:x,onPromoteToPrd:_,onEditDeps:g,onEditAutoMerge:y,onChangeSource:w,projectPolicy:(Vt=t.find(q=>{var qe;return q.id===((qe=e.find(wt=>wt.id===Re))==null?void 0:qe.projectId)}))==null?void 0:Vt.autoMerge,allSpecs:e,onAttachmentToast:(q,qe)=>B==null?void 0:B(q,qe??"ok","paperclip")})]})}const Lc=20,$c={brainstorm:"Brainstorming",tanya:"Bertanya"},Wr=e=>e?new Date(e).toLocaleDateString("id-ID",{day:"numeric",month:"short",year:"numeric"}):"—";function K_({projectId:e}){const[t,a]=u.useState(null),[i,r]=u.useState(0),[s,o]=u.useState(null),[l,d]=u.useState(1),[c,h]=u.useState(null),[p,f]=u.useState(""),[b,k]=u.useState(null),g=u.useCallback(()=>{jr.listSessions(e,{page:l,limit:Lc}).then(x=>{a(x.items),r(x.total),o(x.kuota)}).catch(()=>{a([]),r(0),o(null)})},[e,l]);u.useEffect(()=>{h(null),g()},[g]),u.useEffect(()=>{d(1)},[e]);const y=x=>{k(null),f(""),jr.getSession(x).then(h).catch(()=>h(null))},w=async()=>{if(!(!c||!p.trim()))try{const x=await jr.materializePrd(c.id,p.trim());k(`PRD tersimpan di ${x.path}. Ia BELUM jadi backlog — eskalasi tetap keputusan Anda.`),g()}catch(x){k(x instanceof Error?x.message:"gagal menulis PRD")}};if(t===null)return n.jsx(ye,{kind:"loading",title:"Memuat obrolan…"});const v=Vi(i,l,Lc);return n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[s&&n.jsxs("div",{"data-testid":"portal-chat-kuota",style:{fontSize:12.5,color:"var(--text-muted)",lineHeight:1.6},children:["Jatah bulan ini — Brainstorming ",n.jsxs("b",{children:[s.brainstorm.terpakai," / ",s.brainstorm.jatah]})," · ","Bertanya ",n.jsxs("b",{children:[s.tanya.terpakai," / ",s.tanya.jatah]})," · ","reset ",Wr(s.resetPada),!s.enabled&&" · obrolan portal sedang MATI di Settings"]}),t.length===0?n.jsx(ye,{kind:"empty",icon:"messages-square",title:"Belum ada obrolan",hint:"Begitu klien memulai obrolan di portal, sesinya muncul di sini."}):n.jsxs(n.Fragment,{children:[n.jsx(Qe,{padding:0,children:t.map(x=>n.jsxs("button",{type:"button","data-testid":`portal-chat-row-${x.id}`,onClick:()=>y(x.id),style:{display:"flex",alignItems:"center",gap:12,width:"100%",textAlign:"left",padding:"12px 16px",background:"none",border:"none",borderBottom:"1px solid var(--border-hair)",cursor:"pointer"},children:[n.jsx("span",{style:{fontSize:12.5,color:"var(--text-muted)",width:110},children:$c[x.type]??x.type}),n.jsx("span",{style:{flex:1,minWidth:0,color:"var(--text-strong)"},children:x.summary||"Belum ada ringkasan"}),x.prdSiap&&n.jsx(Va,{status:x.prdDocPath?"ok":"warn",size:"sm",children:x.prdDocPath?"PRD dokumen":"PRD draft"}),n.jsx("span",{style:{fontSize:12.5,color:"var(--text-muted)"},children:x.clientEmail}),n.jsx("span",{style:{fontSize:12.5,color:"var(--text-muted)"},children:Wr(x.createdAt)})]},x.id))}),n.jsx(Yi,{page:v.page,pageCount:v.pageCount,total:i,from:v.from,to:v.to,onPage:d,unit:"obrolan"})]}),c&&n.jsxs(Qe,{eyebrow:`${$c[c.type]??c.type} · ${c.clientEmail}`,title:c.summary||"Obrolan",children:[n.jsx("div",{"data-testid":"portal-chat-transkrip",style:{display:"flex",flexDirection:"column",gap:10,marginBottom:14},children:c.messages.map(x=>n.jsxs("div",{style:{padding:"10px 12px",borderRadius:"var(--radius-lg)",border:`1px solid ${x.blocked?"var(--status-err)":"var(--border-hair)"}`,background:x.role==="klien"?"var(--bone-100)":"var(--surface-card)"},children:[n.jsxs("div",{style:{fontSize:11.5,color:"var(--text-muted)",marginBottom:4},children:[x.role==="klien"?"Klien":"hanoman"," · ",Wr(x.createdAt)]}),n.jsx("div",{style:{whiteSpace:"pre-wrap",lineHeight:1.6},children:x.text}),x.blocked&&n.jsxs("div",{style:{marginTop:8,fontSize:12.5,color:"var(--text-muted)"},children:[n.jsx("b",{children:"Diblokir"})," (",(x.blockReasons??[]).join(", "),") — teks asli agen:",n.jsx("div",{style:{whiteSpace:"pre-wrap",marginTop:4},children:x.rawText})]})]},x.id))}),c.prdMarkdown&&n.jsxs(n.Fragment,{children:[n.jsx("div",{"data-testid":"portal-chat-prd",style:{border:"1px solid var(--border-hair)",borderRadius:"var(--radius-lg)",padding:"12px 14px",marginBottom:12},children:n.jsx(lr,{text:c.prdMarkdown,name:"prd-draft.md"})}),n.jsxs("div",{style:{display:"flex",gap:10,alignItems:"center",flexWrap:"wrap"},children:[n.jsx(We,{"data-testid":"portal-chat-slug","aria-label":"Slug dokumen PRD",placeholder:"nama-dokumen",value:p,style:{width:240},onChange:x=>f(x.target.value)}),n.jsx(V,{"data-testid":"portal-chat-jadikan-prd",disabled:!p.trim(),onClick:()=>void w(),children:"Jadikan dokumen PRD"}),n.jsxs("span",{style:{fontSize:12.5,color:"var(--text-muted)"},children:["Menyimpan ke ",n.jsx("code",{children:"docs/prd/"}),". Tidak membuat backlog."]})]})]}),b&&n.jsx("p",{style:{marginTop:10,fontSize:12.5,color:"var(--text-muted)"},children:b})]})]})}function Km({projects:e,defaultProject:t,onClose:a,onCreate:i,prefill:r,lockProject:s}){var f;const[o,l]=u.useState(t||((f=e[0])==null?void 0:f.id)||""),[d,c]=u.useState({title:(r==null?void 0:r.title)??"",context:(r==null?void 0:r.context)??"",outcome:(r==null?void 0:r.outcome)??"",constraints:(r==null?void 0:r.constraints)??""}),h=b=>k=>c(g=>({...g,[b]:k.target.value})),p=()=>{!d.title.trim()||!o||i(o,{title:d.title.trim(),context:d.context,outcome:d.outcome,constraints:d.constraints||void 0})};return n.jsxs(mt,{open:!0,onClose:a,icon:"scroll-text",eyebrow:"PM → hanoman",title:"PRD baru",footer:n.jsxs(n.Fragment,{children:[n.jsx(V,{variant:"ghost",size:"sm",onClick:a,children:"Batal"}),n.jsx(V,{size:"sm",leftIcon:"messages-square",onClick:p,children:"Buat brief → brainstorm PRD"})]}),children:[n.jsxs("div",{style:{fontSize:12,color:"var(--text-subtle)",marginBottom:12,lineHeight:1.5},children:["hanoman membuka sesi brainstorm interaktif di terminal, lalu menulis dokumen PRD ke ",n.jsx("code",{children:"docs/prd/"}),"."]}),n.jsx(ge,{label:"Project",hint:"Tujuan penulisan docs/prd/ — pilih di sini, tak perlu memfilter daftar dulu",children:n.jsx(Be,{"aria-label":"Project untuk PRD baru",value:o,disabled:s,onChange:b=>l(b.target.value),style:{width:"100%"},options:e.map(b=>({value:b.id,label:b.name}))})}),n.jsx(ge,{label:"Judul",children:n.jsx(We,{value:d.title,onChange:h("title"),placeholder:"mis. Jadwal Invoice Berulang",style:{width:"100%"}})}),n.jsx(ge,{label:"Konteks",hint:"Latar belakang & alasan fitur ini dibutuhkan",children:n.jsx(zt,{value:d.context,onChange:h("context"),rows:3,placeholder:"mis. operator harus membuka tiga layar untuk tahu sesi mana yang menunggu"})}),n.jsx(ge,{label:"Hasil yang diharapkan",children:n.jsx(zt,{value:d.outcome,onChange:h("outcome"),rows:2,placeholder:"mis. satu badge di Overview menunjukkan jumlah sesi yang menunggu"})}),n.jsx(ge,{label:"Batasan",hint:"opsional",children:n.jsx(We,{value:d.constraints,onChange:h("constraints"),placeholder:"mis. reuse queue yang ada",style:{width:"100%"}})})]})}const V_={draft:"neutral",dieskalasi:"info",terwujud:"ok"};function Vm({prd:e}){return n.jsx(Oe,{tone:V_[e.status],size:"sm",children:e.specCount>0?`${e.status} ${e.doneCount}/${e.specCount}`:e.status})}function Y_({prd:e,projectId:t,onTake:a,onStartBreakdown:i,onMaterialize:r}){const[s,o]=u.useState(null),[l,d]=u.useState([]),[c,h]=u.useState([]),[p,f]=u.useState(!1),[b,k]=u.useState(!1);u.useEffect(()=>{let v=!0;return o(null),Y.getPrd(t,e.path).then(x=>{v&&o(x.content)}).catch(()=>{v&&o("")}),()=>{v=!1}},[t,e.path]),u.useEffect(()=>{let v=!0;return Y.getBreakdown(t,e.path).then(x=>{v&&(d(x.items),h(x.items.map(()=>!0)))}).catch(()=>{v&&(d([]),h([]))}),()=>{v=!1}},[t,e.path]);const g={project:t,title:e.title,prdPath:e.path,branchFrom:Hw(e.path)},y=l.filter((v,x)=>c[x]),w=async()=>{if(y.length){f(!0);try{await r(t,e.path,y)}finally{f(!1)}}};return n.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[n.jsxs("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:12,marginBottom:14},children:[n.jsxs("div",{style:{minWidth:0},children:[n.jsx("div",{className:"hn-eyebrow",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)",marginBottom:4},children:e.path}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[n.jsx("div",{style:{fontFamily:"var(--font-sans)",fontSize:18,fontWeight:700,color:"var(--text-strong)"},children:e.title}),n.jsx(Vm,{prd:e})]})]}),n.jsxs("div",{style:{display:"flex",gap:8,flexShrink:0,alignItems:"center"},children:[n.jsx(qh,{href:v=>Y.prdDownloadUrl(t,e.path,v),disabled:s===null}),n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"list-checks",onClick:()=>k(!0),children:"Take ke backlog"}),n.jsx(V,{size:"sm",leftIcon:"split",onClick:()=>i(t,e.path),children:"Breakdown ke backlog"})]})]}),l.length>0&&n.jsxs("div",{style:{border:"1px solid var(--brass-200)",borderRadius:"var(--radius-sm)",background:"var(--brass-50)",padding:12,marginBottom:14},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:8,gap:8},children:[n.jsxs("div",{style:{fontFamily:"var(--font-sans)",fontWeight:700,fontSize:13,color:"var(--brass-700)"},children:["Usulan backlog paralel (",y.length,"/",l.length,")"]}),n.jsx(V,{size:"sm",leftIcon:"plus",disabled:!y.length||p,onClick:w,children:p?"Membuat…":`Buat ${y.length} backlog`})]}),l.map((v,x)=>n.jsxs("label",{style:{display:"flex",gap:8,alignItems:"flex-start",padding:"6px 0",borderTop:x?"1px solid var(--border-hair)":"none",cursor:"pointer"},children:[n.jsx("input",{type:"checkbox",checked:c[x]??!1,onChange:_=>h(T=>T.map((E,A)=>A===x?_.target.checked:E))}),n.jsxs("div",{style:{minWidth:0},children:[n.jsxs("div",{style:{fontSize:13,fontWeight:600,color:"var(--text-strong)",display:"flex",alignItems:"center",gap:6,flexWrap:"wrap"},children:[v.title," ",n.jsx(Oe,{tone:"brass",size:"sm",children:v.priority})]}),v.outcome&&n.jsx("div",{style:{fontSize:12,color:"var(--text-subtle)"},children:v.outcome})]})]},x))]}),n.jsx("div",{style:{flex:"1 1 auto",minHeight:0,overflowY:"auto"},children:s===null?n.jsx(ye,{kind:"loading",title:"Memuat PRD…"}):n.jsx(lr,{text:s,name:e.name})}),b&&n.jsx(mt,{open:!0,onClose:()=>k(!1),icon:"list-checks",eyebrow:"PRD → backlog",title:"Take PRD ke backlog",footer:n.jsx(V,{variant:"ghost",size:"sm",onClick:()=>k(!1),children:"Batal"}),children:n.jsxs("div",{style:{display:"grid",gap:16},children:[n.jsxs("div",{children:[n.jsx(V,{leftIcon:"lightbulb",onClick:()=>{k(!1),a({...g,kind:"brief",context:`Dari PRD: ${e.path}`,outcome:""})},children:"Sebagai feature brief"}),n.jsx("div",{style:{fontSize:12.5,color:"var(--text-muted)",marginTop:6,lineHeight:1.5},children:"Sesi menjalankan pipeline penuh: brainstorm → objective → spec → plan → execute."})]}),n.jsxs("div",{children:[n.jsx(V,{leftIcon:"target",variant:"secondary",onClick:()=>{k(!1),a({...g,kind:"goal",context:"",outcome:"",goal:`Wujudkan PRD ${e.path}`})},children:"Sebagai goal"}),n.jsx("div",{style:{fontSize:12.5,color:"var(--text-muted)",marginTop:6,lineHeight:1.5},children:"Sesi dua fase (Goal → Verifikasi) yang langsung mengejar goal-nya, tanpa brainstorm, spec, maupun plan. Mode goal selalu aktif."})]})]})})]})}function Z_(e){const t=[],a=new Map;for(const i of e){let r=a.get(i.projectId);r||(r={projectId:i.projectId,projectName:i.projectName,items:[]},a.set(i.projectId,r),t.push(i.projectId)),r.items.push(i)}return t.map(i=>a.get(i))}function J_({prd:e,active:t,onSelect:a}){const[i,r]=u.useState(!1);return n.jsxs("button",{onClick:a,onMouseEnter:()=>r(!0),onMouseLeave:()=>r(!1),style:{display:"block",width:"100%",textAlign:"left",cursor:"pointer",border:"none",borderRadius:"var(--radius-sm)",padding:"8px 10px",marginBottom:2,background:t?"var(--brass-100)":i?"var(--bone-200)":"transparent"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:7,marginBottom:3,flexWrap:"wrap"},children:[n.jsx(Ee,{name:"scroll-text",size:13,color:t?"var(--brass-700)":"var(--brass-500)"}),n.jsx("span",{style:{fontFamily:"var(--font-sans)",fontSize:14,fontWeight:600,color:t?"var(--brass-700)":"var(--text-strong)"},children:e.title}),n.jsx(Vm,{prd:e}),e.live&&n.jsx(Oe,{tone:"brass",size:"sm",children:"sesi hidup"})]}),n.jsx("div",{style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-subtle)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:e.path})]})}function X_({projects:e,projectFilter:t,onProjectFilter:a,onNewPrd:i,onTakeToBacklog:r,onStartBreakdown:s,onMaterialize:o,dataVersion:l}){const[d,c]=u.useState([]),[h,p]=Pt("prd","sel",null,Oh),[f,b]=u.useState("list"),k=u.useMemo(()=>d.find(P=>P.slug===h)??null,[d,h]),g=u.useCallback(P=>p(P?P.slug:null),[p]),[y,w]=u.useState(!1),[v,x]=Pt("prd","status","all",Gs("all",...co)),_=t==="all",T=_?"":t;u.useEffect(()=>{g(null)},[t,v]),u.useEffect(()=>{let P=!0;return(_?Y.listAllPrds():T?Y.listPrds(T):Promise.resolve({items:[]})).then(W=>{P&&c(W.items)}).catch(()=>{P&&c([])}),()=>{P=!1}},[t,l]);const[E,A]=u.useState(!1),B=v==="all"?d:d.filter(P=>P.status===v),O=Z_(B),ne=k?k.projectId||T:"",Z=[{value:"all",label:"Semua project"}].concat(e.map(P=>({value:P.id,label:P.name})));return n.jsxs("div",{style:tl,children:[n.jsxs("div",{className:"hn-stack-mobile",style:{...tn,display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginBottom:18},children:[n.jsxs("div",{className:"hn-wrap-mobile",style:{display:"flex",alignItems:"center",gap:8},children:[n.jsx(Be,{size:"sm",value:t,"aria-label":"Project",onChange:P=>a(P.target.value),options:Z}),n.jsx(Be,{size:"sm",value:v,"aria-label":"Status PRD",onChange:P=>x(P.target.value),options:[{value:"all",label:"Semua status"}].concat(co.map(P=>({value:P,label:P})))}),n.jsx(Wh,{screen:"prd",active:v==="all"?0:1})]}),n.jsxs("div",{style:{display:"flex",gap:8},children:[!_&&n.jsx(V,{size:"sm",variant:E?"primary":"ghost",leftIcon:"messages-square",onClick:()=>A(P=>!P),children:"Draft dari portal klien"}),n.jsx(V,{size:"sm",leftIcon:"plus",onClick:()=>w(!0),children:"PRD baru"})]})]}),E&&!_&&n.jsx("div",{style:{...tn,marginBottom:18},children:n.jsx(K_,{projectId:t})}),n.jsx(ll,{ariaLabel:"Panel PRD",active:f,onActiveChange:P=>b(P),masterWidth:264,panels:[{id:"list",label:"Daftar",className:"hn-panel-flex",content:n.jsx("aside",{"aria-label":"Daftar PRD",style:{width:"100%",minHeight:0,overflowY:"auto",borderRight:"1px solid var(--border-hair)",paddingRight:12},children:d.length===0?n.jsx(ye,{kind:"empty",icon:"scroll-text",title:"Belum ada PRD",hint:"Buat PRD dari brief + brainstorm; hanoman menulisnya ke docs/prd/ lalu bisa di-take jadi backlog.",action:()=>w(!0),actionLabel:"PRD baru"}):B.length===0?n.jsx(ye,{kind:"empty",icon:"filter",compact:!0,title:`Tak ada PRD berstatus "${v}"`,hint:"Longgarkan filter status untuk melihat PRD lainnya.",action:()=>x("all"),actionLabel:"Semua status"}):O.map(P=>n.jsxs("div",{style:{marginBottom:10},children:[_&&n.jsx("div",{className:"hn-eyebrow",style:{fontFamily:"var(--font-sans)",fontSize:11,fontWeight:600,letterSpacing:.3,textTransform:"uppercase",color:"var(--text-subtle)",padding:"6px 10px 4px"},children:P.projectName}),P.items.map(D=>n.jsx(J_,{prd:D,active:(k==null?void 0:k.path)===D.path&&(k==null?void 0:k.projectId)===D.projectId,onSelect:()=>{g(D),b("detail")}},`${D.projectId}:${D.path}`))]},P.projectId))})},{id:"detail",label:"Detail",className:"hn-panel-flex",content:n.jsx("div",{style:{flex:"1 1 auto",minHeight:0},children:k?n.jsx(Y_,{prd:k,projectId:ne,onTake:P=>r(P),onStartBreakdown:s,onMaterialize:o}):n.jsx(ye,{kind:"empty",icon:"scroll-text",title:"Pilih PRD",hint:"Klik dokumen di daftar kiri untuk melihat isinya, lalu take ke backlog."})})}]}),y&&n.jsx(Km,{projects:e,defaultProject:T,onClose:()=>w(!1),onCreate:(P,D)=>{w(!1),i(P,D)}})]})}const Bc={ready:"siap",sleeping:"tidur",working:"sedang bekerja",deciding:"sedang diputuskan lead",waiting:"menunggu jawabanmu",blocked:"tertahan",shipped:"baru saja selesai",review:"menunggu review","docs-updated":"dokumen baru terbit",offline:"tak terhubung"},Kr={offline:"koneksi terputus",failed:"sesi gagal",blocked:"backlog tertahan dependency",waiting:"sesi menunggu jawabanmu",deciding:"sesi sedang diputuskan lead",shipped:"kabar selesai","docs-updated":"dokumen terbit",working:"sesi berjalan",review:"sesi menunggu review",ready:"backlog siap dikerjakan"},Vr=45e3,Ym=6e3,Dc=30*6e4,Mo=10*6e4,Zm="hanoman.pet.hidden",Jm="hanoman.pet.roam",Xm=new Set(["done","automerge"]),Qm={connected:!0,since:0,paused:!1},Vs=e=>[...e].sort((t,a)=>t.id.localeCompare(a.id)),xn=e=>e.specId??e.id,Q_=(e,t)=>t.specId?e.find(a=>a.id===t.specId):void 0,e5=e=>new Date(e).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),ep=e=>e.reduce((t,a)=>a.createdAt>t?a.createdAt:t,""),t5=(e,t)=>`${e.filter(a=>!a.exited).map(a=>a.id).sort().join(",")}|${ep(t)}`,hr=e=>new Set(e.filter(t=>t.stage==="done").map(t=>t.id));function mr(e,t){const a=!!e.specId&&t.has(e.specId);return e.exited?e.exitCode?"failed":a?"review":null:e.decision&&!e.deciding?"waiting":e.deciding?"deciding":a?"review":"working"}const a5=(e,t)=>{const a=hr(t);return Vs(e).filter(i=>mr(i,a)==="waiting")},n5=(e,t)=>{const a=hr(t);return Vs(e).filter(i=>mr(i,a)==="deciding")};function i5(e){const{sessions:t,backlog:a,notifications:i,now:r}=e,s=e.connection??Qm,o=[];!s.connected&&!s.paused&&r-s.since>=Ym&&o.push({kind:"offline",pose:"offline",headline:`Tak terhubung sejak ${e5(s.since)}`,detail:"Dashboard menyambung ulang sendiri; yang tertulis di bawah adalah data terakhir.",count:1,subject:null,since:s.since,target:null,recheckAt:null});const l=hr(a),d=new Set(a.filter(O=>O.source==="audit").map(O=>O.id)),c=t.filter(O=>!O.exited),h=new Map;for(const O of Vs(t)){const ne=mr(O,l);ne&&h.set(ne,[...h.get(ne)??[],O])}const p=O=>h.get(O)??[],f=Vs(a.filter(O=>{var ne;return O.stage!=="done"&&(((ne=O.blockedBy)==null?void 0:ne.length)??0)>0})),b=(O,ne,Z,P,D=null)=>{var W;return{kind:O,pose:ne,headline:P(Z[0]),detail:((W=Q_(a,Z[0]))==null?void 0:W.title)??"Sesi terminal",count:Z.length,subject:xn(Z[0]),since:D,target:{section:"terminal",sessionId:Z[0].id},recheckAt:null}},k=O=>{const ne=O.map(Z=>Z.decisionAt?Date.parse(Z.decisionAt):NaN).filter(Z=>Number.isFinite(Z));return ne.length>0?Math.min(...ne):null},g=p("failed"),y=g[0];y&&o.push({kind:"failed",pose:"blocked",headline:`${xn(y)} · sesi gagal`,detail:`Keluar dengan exit ${y.exitCode}`,count:g.length,subject:xn(y),since:null,target:{section:"terminal",sessionId:y.id},recheckAt:null});const w=f[0],v=()=>({kind:"blocked",pose:"blocked",headline:`${w.id} · tertahan dependency`,detail:`Menunggu ${(w.blockedBy??[]).map(O=>O.id).join(", ")}`,count:f.length,subject:w.id,since:null,target:{section:"backlog"},recheckAt:null});if(w&&c.length===0&&o.push(v()),p("waiting").length){const O=k(p("waiting"));o.push({...b("waiting","waiting",p("waiting"),ne=>`Menunggu jawabanmu · ${xn(ne)}`,O),recheckAt:O!==null&&r-O<Mo?O+Mo:null})}p("deciding").length&&o.push(b("deciding","deciding",p("deciding"),O=>`${xn(O)} · lead sedang memutuskan`));const x=i.filter(O=>Date.parse(O.createdAt)+Vr>r),_=O=>[...O].sort((ne,Z)=>Z.createdAt.localeCompare(ne.createdAt))[0],T=x.filter(O=>Xm.has(O.type)&&!(O.specId&&d.has(O.specId))),E=x.filter(O=>O.type==="done"&&!!O.specId&&d.has(O.specId)),A=_(T),B=_(E);return A&&o.push({kind:"shipped",pose:"shipped",headline:`${A.specId??"Backlog"} · selesai`,detail:A.title,count:T.length,subject:A.specId??"Backlog",since:null,target:{section:"backlog"},recheckAt:Date.parse(A.createdAt)+Vr}),B&&o.push({kind:"docs-updated",pose:"docs-updated",headline:`${B.specId??"Audit"} · dokumen terbit`,detail:B.title,count:E.length,subject:B.specId??"Audit",since:null,target:{section:"backlog"},recheckAt:Date.parse(B.createdAt)+Vr}),p("working").length&&o.push(b("working","working",p("working"),O=>`${xn(O)} · sedang berjalan`)),p("review").length&&o.push(b("review","review",p("review"),O=>`${xn(O)} · menunggu review`)),w&&c.length>0&&o.push(v()),o}const s5=(e,...t)=>{const a=t.filter(i=>i!==null&&i>e);return a.length>0?Math.min(...a):null};function r5(e){const{backlog:t,now:a,quietSince:i}=e,r=e.connection??Qm,s=i5(e),o=t.filter(b=>{var k;return b.stage!=="done"&&(((k=b.blockedBy)==null?void 0:k.length)??0)===0}),l=i!==void 0&&a-i>=Dc,d={kind:"ready",pose:l?"sleeping":"ready",headline:l?"Tidur — tak ada kabar 30 menit terakhir":o.length>0?`${o.length} backlog siap dikerjakan`:"Tidak ada pekerjaan siap",detail:l?"Bangun sendiri begitu ada sesi atau notifikasi baru.":"Tak ada sesi yang berjalan",count:1,subject:null,since:null,target:{section:"backlog"},recheckAt:null},c=s.length>0?s:[d],h=c[0],p=!r.connected&&!r.paused?r.since+Ym:null,f=s.length===0&&i!==void 0&&!l?i+Dc:null;return{...h,recheckAt:s5(a,h.recheckAt,p,f),conditions:c}}function o5(){try{return localStorage.getItem(Zm)==="1"}catch{return!1}}function l5(e){try{localStorage.setItem(Zm,e?"1":"0")}catch{}}function d5(){try{return localStorage.getItem(Jm)!=="0"}catch{return!0}}function c5(e){try{localStorage.setItem(Jm,e?"1":"0")}catch{}}const Oc=5e3,u5=12e3,h5=5*6e4,m5=new Set(["shipped","docs-updated","waiting","offline"]),p5={shipped:"selesai","docs-updated":"dokumen terbit",waiting:"butuh jawabanmu"},g5={shipped:"kabar","docs-updated":"dokumen",waiting:"sesi"},tp=(e,t)=>e.kind==="waiting"&&e.since!==null&&t-e.since>=Mo;function f5(e){const t=Math.floor(e/6e4);if(t<1)return`${Math.max(0,Math.floor(e/1e3))} detik`;if(t<60)return`${t} menit`;const a=Math.floor(t/60),i=t%60;return i>0?`${a} jam ${i} menit`:`${a} jam`}function b5(e,t){if(!m5.has(e.kind))return null;if(e.kind==="offline")return{kind:"pose",text:"Aku kehilangan sambungan",ttl:Oc};let a=`${e.subject??"Backlog"} ${p5[e.kind]}`;return e.count>1&&(a+=` · ${e.count} ${g5[e.kind]}`),tp(e,t)&&(a+=` — ${f5(t-e.since)}`),{kind:"pose",text:a,ttl:Oc}}function ap(e){const t=hr(e.backlog),a={};for(const i of e.sessions){const r=mr(i,t);r&&(a[i.id]=r)}return{at:e.now,sessions:a,notifiedAt:ep(e.notifications)}}function k5(e,t){const a=ap(t),i=d=>Object.entries(a.sessions).filter(([c,h])=>h===d&&e.sessions[c]!==d).length,r=t.notifications.filter(d=>Xm.has(d.type)&&d.createdAt>e.notifiedAt).length,s=i("waiting"),o=i("failed"),l=[r>0?`${r} selesai`:"",s>0?`${s} menunggu`:"",o>0?`${o} gagal`:""].filter(Boolean);return l.length>0?{kind:"recap",text:l.join(" · "),ttl:u5}:null}const y5="PET-001",v5=2,x5={w:192,h:208},w5=8,j5={x:.62,baseline:202},S5={h:168},_5=[{key:"idle",fps:6,loop:!0},{key:"walk-right",fps:10,loop:!0,dir:"right"},{key:"walk-left",fps:10,loop:!0,dir:"left"},{key:"working",fps:8,loop:!0},{key:"waiting",fps:6,loop:!0},{key:"blocked",fps:4,loop:!0},{key:"review",fps:6,loop:!0},{key:"shipped",fps:10,loop:!1,then:"idle"},{key:"docs-updated",fps:6,loop:!0},{key:"wave",fps:10,loop:!1,then:"idle"},{key:"deciding",fps:6,loop:!0},{key:"sleep",fps:4,loop:!0},{key:"thanks",fps:10,loop:!1,then:"idle"},{key:"held",fps:8,loop:!0},{key:"falling",fps:8,loop:!0},{key:"dizzy",fps:8,loop:!1,then:"idle"}],C5={idle:"4a0f06cacdad0fa8e0b0a369628e383fc2cb54cbdd5297285c88d1a33bd686ac","walk-right":"7bdfb2786b2b1c899fb7b170ce2cf5d1e3a922e251cbaca9600c210262629a52","walk-left":"c53c6f7b980d4179b45d55160145df73eb629ccbb809ce2b19946045e388ce60",working:"2ec0d0d4565eced3c55c32603c2b1c6fe9ff93f13f2a1061bc7d2e8d8864aa6f",waiting:"8bb1595bf280040e101949392c1048330c19142d7b5a1d6b74918734f72287e3",blocked:"134f48c60fa6fef038da266be7fb2a69755ecb9123d23dc4e270b14d7d077da6",review:"77c865ff6d49a8bbf3db4e0d7b91ce4663a1e3acef5d072ddd65eac9479b232c",shipped:"d32653efa6a64eb4d00fb63a6e8c0a7dc24de63ecd5a6cfda36f32b584de00b8","docs-updated":"2b3a01ddd640efd6e65d61c6ad4980da3a9fbceff251f1b42ce13389c02bb19c",wave:"4153420063211e6d196219b89c572f43f96ec32f28c63a1159e6d98630e0ed73",deciding:"6309ab706c8430cf97b187f353fd2d447ba729f6e0764efef1b75a3c96168984",sleep:"40f1fd6e27ddddb13a5702c05a03f5e015e44e7e77e96c4e1ed52a5d7741f2ec",thanks:"0f59f2c042b25ff47a7022d4452bf0dc433dcea796d90bf47d95a5c8ca359d8d",held:"8de04ba258b30acb105a27a81ed400b66f3b68953042957a75e63ebe8efe7c89",falling:"8bc3429c44ef4ba257da895080fa6458c3a66e51cebe103e09cd8bac25be5363",dizzy:"3e8c2072e2aa652e204e3c6b041cb6c9487d8dca1649b52f9695600880a94e49"},T5={id:y5,version:v5,cell:x5,columns:w5,anchor:j5,character:S5,rows:_5,sources:C5},A5="/assets/hnm-pet-anoman-atlas-v02-ClJhW17L.webp",Di=["idle","walk-right","walk-left","working","waiting","blocked","review","shipped","docs-updated","wave","deciding","sleep","thanks","held","falling","dizzy"],E5=e=>typeof e=="string"&&Di.includes(e),wn=e=>typeof e=="number"&&Number.isInteger(e)&&e>0,Xn=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function M5(e){const t=p=>{throw new Error(`pet.json tidak sah: ${p}`)};if(!Xn(e))return t("bukan objek");const{id:a,version:i,cell:r,columns:s,anchor:o,character:l,rows:d,sources:c}=e;if(typeof a!="string"||!a)return t("id");if(!wn(i))return t("version");if(!Xn(r)||!wn(r.w)||!wn(r.h))return t("cell");if(!wn(s))return t("columns");if(!Xn(o)||typeof o.x!="number"||!(o.x>0&&o.x<1)||!wn(o.baseline)||o.baseline>r.h)return t("anchor");if(!Xn(l)||!wn(l.h)||l.h>r.h)return t("character");if(!Array.isArray(d)||d.length!==Di.length)return t(`rows: butuh ${Di.length} baris`);const h=d.map((p,f)=>{const b=Di[f];if(!Xn(p)||p.key!==b)return t(`rows[${f}]: harus "${b}"`);if(!wn(p.fps))return t(`rows[${f}].fps`);if(typeof p.loop!="boolean")return t(`rows[${f}].loop`);const k={key:b,fps:p.fps,loop:p.loop};if(p.then!==void 0){if(!E5(p.then)||p.loop)return t(`rows[${f}].then hanya untuk baris loop:false`);k.then=p.then}else if(!p.loop)return t(`rows[${f}] loop:false tanpa then`);if(p.dir!==void 0){if(p.dir!=="right"&&p.dir!=="left")return t(`rows[${f}].dir`);k.dir=p.dir}return k});return!Xn(c)||Di.some(p=>typeof c[p]!="string")?t("sources"):{id:a,version:i,cell:{w:r.w,h:r.h},columns:s,anchor:{x:o.x,baseline:o.baseline},character:{h:l.h},rows:h,sources:c}}const Xi=M5(T5),P5=A5,np={ready:"idle",sleeping:"sleep",offline:"idle",working:"working",deciding:"deciding",waiting:"waiting",blocked:"blocked",review:"review",shipped:"shipped","docs-updated":"docs-updated"};function El(e,t=Xi){const a=t.rows.find(i=>i.key===e);if(!a)throw new Error(`baris ${e} tak ada di manifest`);return a}const I5=(e,t=Xi)=>t.rows.findIndex(a=>a.key===e),ip=(e,t=Xi)=>Math.round(t.columns/El(e,t).fps*1e3),R5=(e,t=Xi)=>El(e,t).then??null,zc=40,Cs=[1200,4500],L5=[5e3,14e3],Po=16,Nc=24,$5=240,B5=220,D5=new Set(["waiting","blocked"]),O5=new Set(["offline","sleeping"]),bs=(e,[t,a])=>t+e()*(a-t),Yr=e=>e==="right"?"walk-right":"walk-left",Ml=(e,t)=>Math.max(Po,e-t-Po),Ii=(e,t,a)=>Math.min(Math.max(e,Po),Ml(t,a)),z5=(e,t,a)=>Math.min(Math.max(e,0),Math.max(0,t-a)),N5=e=>e==="held"||e==="falling"||e==="dizzy",F5=e=>!e.roam||e.reduced||e.tier==="mobile";function H5(e,t,a){return{x:Ml(e,t),y:0,facing:"right",mode:"stand",until:a+Cs[0],parkedX:null}}function U5(e,t,a){const{now:i,laneWidth:r,laneHeight:s,petWidth:o,petHeight:l,pose:d}=t,c=Ml(r,o),h=np[d],p=Ii(t.currentX,r,o),f=e.mode==="walk"||e.mode==="home",b=e.mode==="dizzy",k=(T,E,A=e.facing)=>({x:T,y:0,facing:A,mode:"stand",until:E,parkedX:e.parkedX}),g=T=>f||Math.abs(p-T)>.5?{x:T,y:0,durationMs:0,ease:"linear"}:null,y=(T,E)=>{const A=Math.round(Math.abs(T-p)/zc*1e3),B=T>=p?"right":"left";return{state:{x:T,y:0,facing:B,mode:E,until:i+A,parkedX:e.parkedX},row:Yr(B),move:{x:T,y:0,durationMs:A,ease:"linear"}}},w=T=>{const E={x:T,y:0,durationMs:0,ease:"linear"};return t.reduced?{state:{...k(T,1/0),parkedX:T},row:h,move:E}:{state:{x:T,y:0,facing:e.facing,mode:"dizzy",until:i+ip("dizzy"),parkedX:T},row:"dizzy",move:E}};if(t.dragging){const T=Ii(t.pointerX,r,o),E=z5(t.pointerY,s,l);return{state:{x:T,y:E,facing:e.facing,mode:"held",until:1/0,parkedX:e.parkedX},row:"held",move:{x:T,y:E,durationMs:0,ease:"linear"}}}if(e.mode==="held"){if(t.reduced||e.y===0)return w(e.x);const T=Math.max(B5,Math.round(e.y/$5*1e3));return{state:{x:e.x,y:0,facing:e.facing,mode:"falling",until:i+T,parkedX:e.x},row:"falling",move:{x:e.x,y:0,durationMs:T,ease:"fall"}}}if(e.mode==="falling")return i<e.until?{state:e,row:"falling",move:null}:w(e.x);if(e.mode==="dizzy"&&i<e.until)return{state:e,row:"dizzy",move:null};if(F5(t)){const T=Ii(e.parkedX??c,r,o);return{state:k(T,1/0,"right"),row:h,move:g(T)}}if(t.hovered||t.panelOpen||t.documentHidden)return{state:k(p,1/0),row:h,move:g(p)};if(O5.has(d))return{state:k(p,1/0),row:h,move:g(p)};if(D5.has(d))return Math.abs(p-c)>1?e.mode==="home"&&i<e.until?{state:e,row:Yr(e.facing),move:null}:y(c,"home"):{state:k(c,1/0,"right"),row:h,move:g(c)};if(d==="shipped")return{state:k(p,1/0),row:h,move:g(p)};if(f)return i<e.until?{state:e,row:Yr(e.facing),move:null}:{state:k(e.x,i+bs(a,Cs)),row:h,move:null};if(b||e.until===1/0)return{state:k(p,i+bs(a,Cs)),row:h,move:null};if(i<e.until)return{state:e,row:h,move:null};const v=bs(a,L5)*zc/1e3;let x=a()<.5?-1:1,_=Ii(p+x*v,r,o);return Math.abs(_-p)<Nc&&(x=-x,_=Ii(p+x*v,r,o)),Math.abs(_-p)<Nc?{state:k(p,i+bs(a,Cs)),row:h,move:null}:y(_,"walk")}const Ga={loading:"Membaca layar sesi…",none:"Pertanyaannya tak terbaca dari sini — buka Terminal untuk menjawabnya.",stale:"Layarnya sudah berubah — pertanyaannya dimuat ulang.",deciding:"hanoman-lead sedang menyusun keputusan untuk sesi ini.",failed:"Jawaban tak terkirim. Buka Terminal untuk menjawabnya.",answering:"hanoman-lead sudah mengirim jawabannya ke pane — terlambat mengambil alih.",taken:"Kamu mengambil alih sesi ini. hanoman-lead berhenti menjawabnya.",preparing:"Kotak jawabnya sedang disiapkan — dialognya belum tergambar di pane."},G5={queued:"hanoman-lead mengantre untuk sesi ini",deciding:"hanoman-lead sedang menyusun keputusan",answered:"hanoman-lead sudah menjawab","taken-over":"Kamu yang menjawab sesi ini",failed:"hanoman-lead tak sanggup menjawab sesi ini"},Fc=e=>{var t;return e instanceof lt?(t=e.detail)==null?void 0:t.reason:void 0};function Hc({sessionId:e,label:t,reduced:a,ask:i}){const[r,s]=u.useState(void 0),[o,l]=u.useState([]),[d,c]=u.useState(""),[h,p]=u.useState(!1),[f,b]=u.useState(!1),[k,g]=u.useState(null),[y,w]=u.useState(0);u.useEffect(()=>{let Z=!0;return s(void 0),Y.sessionDialog(e).then(P=>{Z&&(s(P),l(P?P.dialog.options.filter(D=>D.checked).map(D=>D.n):[]))}).catch(()=>{Z&&s(null)}),()=>{Z=!1}},[e,y]);async function v(){if(!h){p(!0),g(null);try{await Y.takeoverSessionDialog(e),g(Ga.taken),w(Z=>Z+1)}catch(Z){g(Fc(Z)==="answering"?Ga.answering:Ga.failed)}finally{p(!1)}}}async function x(Z){if(!(!r||h)){p(!0),g(null);try{await Y.answerSessionDialog(e,{screenHash:r.screenHash,...Z}),b(!0)}catch(P){const D=Fc(P);D==="stale"?(g(Ga.stale),w(W=>W+1)):g(D==="deciding"?Ga.deciding:Ga.failed)}finally{p(!1)}}}const _=a?{transition:"none",transform:"none"}:void 0,T={marginTop:8,padding:"8px 10px",background:"var(--bone-100)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)"},E=Z=>n.jsx("div",{"data-testid":"pet-answer-note",style:{fontFamily:"var(--font-ui)",fontSize:12,color:"var(--text-muted)",lineHeight:1.45},children:Z});if(f)return n.jsx("div",{style:T,children:n.jsxs("div",{"data-testid":"pet-answer-sent",style:{fontFamily:"var(--font-ui)",fontSize:12.5,color:"var(--text-strong)"},children:["Terkirim — menunggu ",t," bergerak"]})});const A=i==null?void 0:i.questions[Math.min(i.at,Math.max(0,i.questions.length-1))],B=i?n.jsxs("div",{style:{marginBottom:6},children:[n.jsx("div",{"data-testid":"pet-answer-lead-state",className:"hn-eyebrow",children:G5[i.state]}),i.total>1&&n.jsxs("div",{className:"hn-eyebrow",style:{marginTop:2},children:["Pertanyaan ",Math.min(i.at+1,i.total)," dari ",i.total]}),i.source==="turn-end"&&n.jsx("div",{"data-testid":"pet-answer-source",className:"hn-eyebrow",style:{marginTop:2},children:"Giliran terakhir sesi"}),((A==null?void 0:A.question)||i.message)&&n.jsx("div",{style:{fontFamily:"var(--font-ui)",fontSize:12.5,fontWeight:600,color:"var(--text-strong)",lineHeight:1.4,marginTop:4},children:(A==null?void 0:A.question)||i.message}),i.state!=="taken-over"&&n.jsx("div",{style:{marginTop:6},children:n.jsx(V,{"data-testid":"pet-answer-takeover",size:"sm",variant:"ghost",disabled:h,style:_,onClick:()=>{v()},children:"Ambil alih"})})]}):null;if(r===void 0)return n.jsxs("div",{style:T,children:[B,E(Ga.loading)]});if(r===null)return n.jsxs("div",{style:T,children:[B,E(k??(i?Ga.preparing:Ga.none))]});const{dialog:O}=r,ne=O.tabs.filter(Z=>Z.answered).length;return n.jsxs("div",{"data-testid":"pet-answer","data-session":e,style:T,children:[B,!i&&O.tabs.length>1&&n.jsxs("div",{className:"hn-eyebrow",style:{marginBottom:4},children:["Pertanyaan ",Math.min(ne+1,O.tabs.length)," dari ",O.tabs.length]}),!i&&O.title&&n.jsx("div",{style:{fontFamily:"var(--font-ui)",fontSize:12.5,fontWeight:600,color:"var(--text-strong)",lineHeight:1.4,marginBottom:6},children:O.title}),O.multi?n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:O.options.map(Z=>n.jsx(sr,{label:Z.label,checked:o.includes(Z.n),disabled:h,onChange:P=>l(D=>(P?[...D,Z.n]:D.filter(W=>W!==Z.n)).sort((W,F)=>W-F))},Z.n))}):n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:O.options.map(Z=>n.jsx(V,{"data-testid":"pet-answer-option",size:"sm",variant:"ghost",disabled:h,style:_,onClick:()=>{x({choice:Z.n})},children:Z.label},Z.n))}),(O.freeIndex!==null||O.notes)&&n.jsxs("div",{style:{display:"flex",gap:6,marginTop:8},children:[n.jsx(We,{"data-testid":"pet-answer-text",size:"sm",value:d,disabled:h,placeholder:"Jawab dengan kalimatmu sendiri",style:{flex:1,minWidth:0},onChange:Z=>c(Z.target.value)}),!O.multi&&n.jsx(V,{size:"sm",variant:"ghost",disabled:h||!d.trim(),style:_,onClick:()=>{x({text:d.trim()})},children:"Kirim"})]}),O.multi&&n.jsx("div",{style:{marginTop:8},children:n.jsx(V,{"data-testid":"pet-answer-submit",size:"sm",variant:"primary",disabled:h,style:_,onClick:()=>{x({choices:o,...d.trim()?{text:d.trim()}:{}})},children:"Submit"})}),k&&n.jsx("div",{style:{marginTop:6},children:E(k)})]})}const q5={mobile:96,tablet:112,desktop:112},Zr=44,Jr=268,W5=10,ks=12,ys=200,Xr=8,K5=5e3,V5=1.5,Y5=2e3,Z5=3,J5=6,X5={linear:"linear",fall:"var(--ease-fall)"};function Q5(){const e="(prefers-reduced-motion: reduce)",[t,a]=u.useState(()=>typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia(e).matches);return u.useEffect(()=>{var s;if(typeof window>"u"||typeof window.matchMedia!="function")return;const i=window.matchMedia(e),r=()=>a(i.matches);return(s=i.addEventListener)==null||s.call(i,"change",r),()=>{var o;return(o=i.removeEventListener)==null?void 0:o.call(i,"change",r)}},[]),t}function eC(){const[e,t]=u.useState(()=>typeof document<"u"&&document.hidden);return u.useEffect(()=>{const a=()=>t(document.hidden);return document.addEventListener("visibilitychange",a),()=>document.removeEventListener("visibilitychange",a)},[]),e}function tC(){const[e,t]=u.useState(()=>typeof window<"u"?window.innerWidth:1024);return u.useEffect(()=>{let a;const i=()=>{clearTimeout(a),a=setTimeout(()=>t(window.innerWidth),150)};return window.addEventListener("resize",i),()=>{clearTimeout(a),window.removeEventListener("resize",i)}},[]),e}function aC({sessions:e,backlog:t,asks:a=[],onOpen:i}){const{items:r}=_h(),[s,o]=u.useState(o5),[l,d]=u.useState(d5),[c,h]=u.useState(!1),[p,f]=u.useState(!1),[b,k]=u.useState(ks),[g,y]=u.useState(!1),[w,v]=u.useState(!1),[x,_]=u.useState(0),[T,E]=u.useState(null),A=Q5(),B=ol(),O=eC(),ne=tC(),Z=u.useRef(null),P=u.useRef(null),D=u.useRef(null),W=W1(),F=t5(e,r),[N,ee]=u.useState(F),[J,H]=u.useState(()=>Date.now());N!==F&&(ee(F),H(Date.now()));const K=u.useMemo(()=>r5({sessions:e,backlog:t,notifications:r,now:Date.now(),connection:W,quietSince:J}),[e,t,r,W,J,x]),me=u.useMemo(()=>a5(e,t),[e,t]),He=u.useMemo(()=>n5(e,t),[e,t]);u.useEffect(()=>{if(K.recheckAt===null)return;const Q=setTimeout(()=>_(he=>he+1),Math.max(0,K.recheckAt-Date.now()));return()=>clearTimeout(Q)},[K.recheckAt]),u.useEffect(()=>{if(!T)return;const Q=setTimeout(()=>E(null),T.ttl);return()=>clearTimeout(Q)},[T]);const fe=u.useRef(null),Te=u.useRef(null);u.useEffect(()=>{const Q={sessions:e,backlog:t,notifications:r,now:Date.now()};if(O){fe.current||(fe.current=ap(Q)),Te.current=null;return}const he=fe.current;if(!he)return;if(Te.current===null&&(Te.current=Q.now),Q.now-he.at<h5){fe.current=null;return}const Ne=k5(he,Q);if(Ne){fe.current=null,E({...Ne,id:Q.now});return}Q.now-Te.current>K5&&(fe.current=null)},[O,e,t,r]);const ze=b5(K,Date.now()),[Me,Ye]=u.useState((ze==null?void 0:ze.text)??null);((ze==null?void 0:ze.text)??null)!==Me&&(Ye((ze==null?void 0:ze.text)??null),ze&&E({...ze,id:Date.now()}));const{cell:I,columns:be,anchor:Re,character:Ze,rows:oe}=Xi,je=q5[B]/Ze.h,Ce=Math.round(I.w*je),ke=Math.round(I.h*je),Ue=u.useRef(H5(ne,Ce,Date.now())),[Je,rt]=u.useState(Ue.current),[et,xt]=u.useState(np[K.pose]),[kt,pt]=u.useState({x:Ue.current.x,y:0,durationMs:0,ease:"linear"}),[gt,ae]=u.useState(null),tt=u.useRef(null),X=u.useRef(!1),de=u.useCallback(()=>{var Ne,ft;const Q=(Ne=P.current)==null?void 0:Ne.getBoundingClientRect(),he=(ft=Z.current)==null?void 0:ft.getBoundingClientRect();return Q&&he&&Q.width>0?Q.left-he.left:Ue.current.x},[]),at=u.useCallback(()=>{var he;const Q=(he=Z.current)==null?void 0:he.getBoundingClientRect();return Q&&Q.height>ke?Q.height:typeof window<"u"?window.innerHeight:ke},[ke]),Ft=u.useMemo(()=>{const Q=typeof window<"u"?window.innerWidth:ne,he=kt.x+Re.x*Ce-ys/2,Ne=Math.min(Math.max(he,Xr),Math.max(Xr,Q-ys-Xr));return Math.round(Re.x*Ce-ys/2+(Ne-he))},[kt.x,Ce,Re.x,ne]),Ht=u.useCallback(()=>{const Q=U5(Ue.current,{now:Date.now(),currentX:de(),laneWidth:ne,laneHeight:at(),petWidth:Ce,petHeight:ke,pose:K.pose,hovered:w,panelOpen:c,documentHidden:O,roam:l,reduced:A,tier:B,dragging:gt!==null,pointerX:(gt==null?void 0:gt.x)??0,pointerY:(gt==null?void 0:gt.y)??0},Math.random);Ue.current=Q.state,rt(Q.state),xt(Q.row),Q.move&&pt(Q.move)},[de,at,ne,Ce,ke,K.pose,w,c,O,l,A,B,gt]);u.useEffect(()=>{Ht()},[Ht]),u.useEffect(()=>{if(!Number.isFinite(Je.until))return;const Q=setTimeout(Ht,Math.max(0,Je.until-Date.now()));return()=>clearTimeout(Q)},[Je.until,Ht]);const[Vt,q]=u.useState(null),qe=u.useRef(0),wt=u.useRef([]),[ca,nn]=u.useState(0),[mi,Pe]=u.useState(!1);u.useEffect(()=>{Pe(!1)},[K.pose]);const zn=et==="shipped"&&mi?R5("shipped")??"idle":et,Ut=(Vt==null?void 0:Vt.row)??zn,Nn=El(Ut),va=u.useCallback(()=>!A&&K.pose!=="offline"&&K.pose!=="sleeping"&&gt===null&&!N5(Ue.current.mode),[A,K.pose,gt]),$t=u.useCallback(()=>{va()&&q(Q=>Q??{row:"wave",id:++qe.current})},[va]),ua=u.useCallback(()=>{A||(q({row:"thanks",id:++qe.current}),nn(Q=>Q+1))},[A]);u.useEffect(()=>{if(!c)return;const Q=Ne=>{Z.current&&!Z.current.contains(Ne.target)&&ta()},he=Ne=>{Ne.key==="Escape"&&ta()};return document.addEventListener("mousedown",Q),document.addEventListener("keydown",he),()=>{document.removeEventListener("mousedown",Q),document.removeEventListener("keydown",he)}},[c,A]),u.useEffect(()=>{A&&(y(!1),q(null),c||f(!1))},[A,c]),u.useEffect(()=>{var Q;(Q=D.current)==null||Q.toggleAttribute("inert",!c)},[c,p]);function Ba(){var ha;const Q=typeof window<"u"?window.innerWidth:ne,he=(ha=P.current)==null?void 0:ha.getBoundingClientRect(),ft=(he&&he.width>0?he.left:Ue.current.x)+Re.x*Ce;k(Math.round(Math.min(Math.max(ft-Jr/2,ks),Math.max(ks,Q-Jr-ks)))),f(!0),h(!0)}function ta(){h(!1),A&&f(!1)}function Fn(){c?ta():Ba()}function fn(){const Q=Date.now(),he=[...wt.current.filter(Ne=>Q-Ne<Y5),Q];if(he.length>=Z5){wt.current=[],ua();return}wt.current=he,A||y(!0),$t(),Fn()}function Hn(Q){var he,Ne;(Ne=(he=Q.currentTarget).setPointerCapture)==null||Ne.call(he,Q.pointerId),tt.current={id:Q.pointerId,dx:Q.clientX-de(),dy:Q.clientY+Ue.current.y,x0:Q.clientX,y0:Q.clientY,moved:!1}}function bn(Q){const he=tt.current;if(!(!he||he.id!==Q.pointerId)){if(!he.moved){if(Math.hypot(Q.clientX-he.x0,Q.clientY-he.y0)<=J5)return;he.moved=!0,c&&ta(),q(null)}ae({x:Q.clientX-he.dx,y:he.dy-Q.clientY})}}function sn(Q){var Ne,ft;const he=tt.current;!he||he.id!==Q.pointerId||(tt.current=null,(ft=(Ne=Q.currentTarget).releasePointerCapture)==null||ft.call(Ne,Q.pointerId),he.moved&&(X.current=!0,ae(null)))}function Da(Q){o(Q),l5(Q),Q&&(h(!1),f(!1))}function Un(Q){d(Q),c5(Q)}const Oa=Je.mode==="held"||Je.mode==="falling",kn={position:"fixed",left:0,right:0,bottom:"max(0px, var(--safe-bottom))",...Oa?{top:"max(0px, var(--safe-top))"}:{height:ke},zIndex:80,pointerEvents:"none"};if(s)return n.jsx("div",{"data-testid":"pet-root",ref:Z,style:kn,children:n.jsx("button",{"aria-label":"Tampilkan pet Hanoman",onClick:()=>Da(!1),style:{pointerEvents:"auto",position:"absolute",width:44,height:44,padding:0,right:"max(22px, var(--safe-right))",bottom:22,display:"inline-flex",alignItems:"center",justifyContent:"center",cursor:"pointer",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-pill)",background:"var(--surface-card)",opacity:.55,boxShadow:"var(--shadow-sm)"},children:n.jsx(nl,{id:"buntut",size:15})})});const ce=K.pose==="offline",De=`Hanoman ${Bc[K.pose]} · ${K.headline}`+(K.count>1?` · ${K.count} ${Kr[K.kind]}`:""),Xe=Ut==="waiting"&&tp(K,Date.now()),ct=Math.round(ip(Ut)/(Xe?V5:1)),Et=A?"none":`hn-pet-frames ${ct}ms steps(${be}, end) ${Nn.loop?"infinite":"1 forwards"}`;return n.jsxs("div",{"data-testid":"pet-root",ref:Z,style:kn,children:[p&&n.jsxs("div",{ref:D,"data-testid":"pet-panel","aria-hidden":!c||void 0,onAnimationEnd:Q=>{Q.animationName==="hn-pet-panel-out"&&!c&&f(!1)},style:{pointerEvents:c?"auto":"none",position:"absolute",left:b,bottom:ke+W5,width:Jr,maxWidth:"calc(100vw - var(--safe-left) - var(--safe-right) - 24px)",maxHeight:"calc(100dvh - var(--safe-top) - var(--safe-bottom) - 120px)",overflowY:"auto",boxSizing:"border-box",padding:14,background:"var(--surface-card)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-md)",boxShadow:"var(--shadow-lg)",transformOrigin:"center bottom",animation:A?"none":`${c?"hn-pet-panel-in":"hn-pet-panel-out"} var(--dur-slow) var(--ease-out) both`},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:8},children:Bc[K.pose]}),n.jsx("ul",{"data-testid":"pet-conditions",style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:10},children:K.conditions.map((Q,he)=>n.jsxs("li",{"data-testid":"pet-condition","data-kind":Q.kind,style:he>0?{borderTop:"1px solid var(--border-hair)",paddingTop:10}:void 0,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:6},children:[n.jsx("span",{style:he===0?{fontFamily:"var(--font-display)",fontSize:15,fontWeight:600,color:"var(--text-strong)",lineHeight:1.25}:{fontFamily:"var(--font-ui)",fontSize:13,fontWeight:600,color:"var(--text-strong)",lineHeight:1.3},children:Q.headline}),Q.count>1&&n.jsx("span",{"data-testid":"pet-condition-count",title:`${Q.count} ${Kr[Q.kind]}`,style:{flex:"0 0 auto",padding:"2px 6px",fontFamily:"var(--font-ui)",fontSize:11,fontWeight:700,lineHeight:1,color:"var(--accent-on)",background:"var(--accent)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-pill)"},children:Q.count})]}),n.jsx("div",{style:{marginTop:3,fontFamily:"var(--font-ui)",fontSize:12.5,color:"var(--text-muted)",lineHeight:1.45},children:Q.detail}),Q.target&&n.jsx("div",{style:{marginTop:7},children:n.jsx(V,{size:"sm",variant:he===0?"primary":"ghost",leftIcon:Q.target.section==="terminal"?"terminal":"list-checks",style:A?{transition:"none",transform:"none"}:void 0,onClick:()=>{const Ne=Q.target;ta(),i(Ne)},children:Q.target.section==="terminal"?"Buka Terminal":"Buka Backlog"})}),Q.kind==="waiting"&&c&&me.map(Ne=>n.jsx(Hc,{sessionId:Ne.id,label:Ne.specId??Ne.id,reduced:A,ask:a.find(ft=>ft.sessionId===Ne.id)},Ne.id)),Q.kind==="deciding"&&c&&He.map(Ne=>{const ft=a.find(ha=>ha.sessionId===Ne.id);return ft?n.jsx(Hc,{sessionId:Ne.id,label:Ne.specId??Ne.id,reduced:A,ask:ft},Ne.id):null})]},`${Q.kind}:${he}`))}),n.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:8,marginTop:12,borderTop:"1px solid var(--border-hair)",paddingTop:10},children:[B!=="mobile"&&n.jsx(V,{size:"sm",variant:"ghost",style:A?{transition:"none",transform:"none"}:void 0,onClick:()=>Un(!l),children:l?Je.parkedX===null?"Diam di pojok":"Diam di sini":"Berkeliaran"}),n.jsx(V,{size:"sm",variant:"ghost",style:A?{transition:"none",transform:"none"}:void 0,onClick:()=>Da(!0),children:"Sembunyikan"})]})]}),n.jsxs("div",{"data-testid":"pet-actor",ref:P,"data-facing":Je.facing,"data-mode":Je.mode,onTransitionEnd:Q=>{Q.propertyName==="transform"&&Ht()},style:{position:"absolute",left:0,bottom:0,width:Ce,height:ke,transform:`translate(${kt.x}px, ${-kt.y}px)`,transition:A||kt.durationMs===0?"none":`transform ${kt.durationMs}ms ${X5[kt.ease]}`,willChange:"transform"},children:[T&&!c&&n.jsxs("div",{"data-testid":"pet-bubble","data-kind":T.kind,"aria-hidden":T.kind==="pose"&&K.kind!=="waiting"?"true":void 0,style:{pointerEvents:"none",position:"absolute",left:Ft,bottom:ke-6,width:"max-content",maxWidth:ys,boxSizing:"border-box",padding:"6px 10px",fontFamily:"var(--font-ui)",fontSize:12.5,lineHeight:1.35,color:"var(--text-strong)",background:"var(--surface-card)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-md)",boxShadow:"var(--shadow-sm)",animation:A?"none":"hn-pet-bubble-in var(--dur-base) var(--ease-out) both"},children:[n.jsx("span",{"data-testid":"pet-bubble-text","aria-hidden":T.kind==="pose"?"true":void 0,children:T.text}),(T.kind==="recap"||K.kind==="waiting")&&n.jsx("div",{style:{marginTop:6,pointerEvents:"auto"},children:n.jsx(V,{size:"sm",variant:"ghost",leftIcon:T.kind==="recap"?"list-checks":"terminal","aria-label":T.kind==="recap"?`${T.text} — buka ringkasan pet`:`${T.text} — jawab di sini`,style:A?{transition:"none",transform:"none"}:void 0,onClick:()=>{E(null),Ba()},children:T.kind==="recap"?"Lihat":"Jawab di sini"})})]}),n.jsxs("div",{"data-testid":"pet-stage",role:"status","aria-live":"polite",className:"hn-pet-stage","data-reduced-motion":A?"true":void 0,style:{position:"relative",width:Ce,height:ke,animation:A?"none":"hn-pet-reveal var(--dur-slow) var(--ease-out) both"},children:[n.jsx("span",{className:"hn-sr-only","data-testid":"pet-status",children:De}),K.count>1&&n.jsx("span",{"data-testid":"pet-badge","aria-hidden":"true",title:`${K.count} ${Kr[K.kind]}`,style:{pointerEvents:"none",position:"absolute",top:4,right:8,zIndex:2,minWidth:18,height:18,padding:"0 5px",boxSizing:"border-box",display:"inline-flex",alignItems:"center",justifyContent:"center",fontFamily:"var(--font-ui)",fontSize:11,fontWeight:700,lineHeight:1,color:"var(--accent-on)",background:"var(--accent)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-pill)",boxShadow:"var(--shadow-sm)"},children:K.count}),ca>0&&!A&&n.jsx("span",{"data-testid":"pet-hearts","aria-hidden":"true",style:{pointerEvents:"none",position:"absolute",zIndex:2,left:Math.round(Re.x*Ce),bottom:Math.round(ke*.55)},onAnimationEnd:Q=>{Q.target.dataset.last==="1"&&nn(0)},children:[0,1,2].map(Q=>n.jsx("span",{"data-last":Q===2?"1":void 0,style:{position:"absolute",left:Q*9-9,fontFamily:"var(--font-ui)",fontSize:12,color:"var(--accent)",animation:`hn-pet-heart 900ms var(--ease-out) ${Q*120}ms both`},children:"♥"},Q))},ca),n.jsx("div",{"data-testid":"pet-reactor",className:"hn-pet-reactor",style:{position:"relative",width:"100%",height:"100%",transition:A?"none":"transform var(--dur-base) var(--ease-out)",animation:A||!g?"none":"hn-pet-click var(--dur-slow) var(--ease-out) both"},onAnimationEnd:Q=>{Q.animationName==="hn-pet-click"&&y(!1)},children:n.jsx("div",{"data-testid":"pet-viewport","data-offline":ce?"true":void 0,style:{position:"relative",overflow:"hidden",width:Ce,height:ke,opacity:ce?.45:1,transition:A?"none":"opacity var(--dur-slow) var(--ease-out)"},children:n.jsx("div",{"data-testid":"pet-rowshift",className:"hn-pet-rowshift","data-row":Ut,style:{width:Ce,height:ke,"--row":I5(Ut)},children:n.jsx("img",{"data-testid":"pet-atlas",src:P5,alt:"","aria-hidden":"true",draggable:!1,decoding:"async",onAnimationEnd:Q=>{if(Q.animationName==="hn-pet-frames"){if(Vt){Vt.row==="wave"&&w&&va()?q({row:"wave",id:++qe.current}):q(null);return}Ut==="shipped"&&Pe(!0)}},style:{display:"block",width:Ce*be,height:ke*oe.length,animation:Et,willChange:"transform"}},`${Ut}:${(Vt==null?void 0:Vt.id)??0}`)})})}),n.jsx("button",{"data-testid":"pet-hit",className:"hn-pet-hit","aria-label":"Ringkasan status Hanoman",title:`${K.headline} — ${K.detail}`,onClick:()=>{if(X.current){X.current=!1;return}fn()},onPointerDown:Hn,onPointerMove:bn,onPointerUp:sn,onPointerCancel:sn,onPointerEnter:()=>{v(!0),$t()},onPointerLeave:()=>v(!1),onFocus:()=>v(!0),onBlur:()=>v(!1),style:{pointerEvents:"auto",position:"absolute",zIndex:3,left:Math.round(Re.x*Ce-Zr/2),bottom:0,width:Zr,height:Zr,padding:0,border:"none",background:"transparent",cursor:Oa?"grabbing":"grab"}})]})]})]})}const nC=u.lazy(()=>la(()=>import("./DalangHanomanScreen-gKHFySwO.js"),__vite__mapDeps([0,1,2,3])).then(e=>({default:e.DalangHanomanScreen}))),iC=u.lazy(()=>la(()=>import("./TeamScreen-CJ-AeCGM.js"),__vite__mapDeps([4,1,5,2,3])).then(e=>({default:e.TeamScreen}))),sC=u.lazy(()=>la(()=>import("./TriageScreen-HE-JKaXl.js"),__vite__mapDeps([6,1,5,2,3])).then(e=>({default:e.TriageScreen}))),rC=u.lazy(()=>la(()=>import("./TerminalScreen-BTPwK0A4.js"),__vite__mapDeps([7,1,2,3])).then(e=>({default:e.TerminalScreen}))),oC=u.lazy(()=>la(()=>import("./IdeScreen-ZmtKIwRL.js"),__vite__mapDeps([8,1,9,10,5,2,3,11])).then(e=>({default:e.IdeScreen}))),lC=u.lazy(()=>la(()=>import("./VpsScreen-CiRV0mMK.js"),__vite__mapDeps([12,1,2,3])).then(e=>({default:e.VpsScreen}))),dC=u.lazy(()=>la(()=>import("./SchedulerScreen-C1T7kZ5F.js"),__vite__mapDeps([13,1,5,2,3])).then(e=>({default:e.SchedulerScreen}))),cC=u.lazy(()=>la(()=>import("./LeadScreen-BGP15mjr.js"),__vite__mapDeps([14,1,5,2,3])).then(e=>({default:e.LeadScreen}))),uC=u.lazy(()=>la(()=>import("./DocsWorkspace-BMAVKbqw.js"),__vite__mapDeps([15,1,2,3])).then(e=>({default:e.DocsWorkspace}))),hC=u.lazy(()=>la(()=>import("./ChangelogScreen-DV7czksP.js"),__vite__mapDeps([16,1,2,3])).then(e=>({default:e.ChangelogScreen}))),mC=u.lazy(()=>la(()=>import("./ReviewScreen-BB-yKNIm.js"),__vite__mapDeps([17,1,10,2,3])).then(e=>({default:e.ReviewScreen}))),pC=u.lazy(()=>la(()=>import("./SettingsScreen-JT8uQrhn.js"),__vite__mapDeps([18,1,2,10,3])).then(e=>({default:e.SettingsScreen}))),gC=[{value:"critical",label:"Critical"},{value:"major",label:"Major"},{value:"minor",label:"Minor"}],Uc=[{value:"tinggi",label:"Tinggi"},{value:"sedang",label:"Sedang"},{value:"rendah",label:"Rendah"}];function fC(e){switch(e){case"offline":return"offline";case"control-off":return"kendali jarak jauh mati";case"protocol-mismatch":return"versi tak cocok";case"no-spawn":return"tanpa izin mulai sesi";case"capacity-full":return"kapasitas penuh";default:return"tak tersedia"}}function bC({open:e,spec:t,onClose:a,onStarted:i,onError:r}){var kt,pt,gt;const[s,o]=u.useState("sonnet"),[l,d]=u.useState("medium"),[c,h]=u.useState("claude"),[p,f]=u.useState({claude:{model:"sonnet",effort:"medium"},codex:{...oo}}),[b,k]=u.useState({}),[g,y]=u.useState(!1),[w,v]=u.useState(""),[x,_]=u.useState("changed"),[T,E]=u.useState(Kl().id),[A,B]=u.useState(!1),[O,ne]=u.useState(null);u.useEffect(()=>{ne(null)},[e,t==null?void 0:t.id]);const[Z,P]=u.useState([{deviceId:ja,name:"hub ini",eligible:!0}]),[D,W]=u.useState(ja),[F,N]=u.useState(null),[ee,J]=u.useState(null),[H,K]=u.useState(void 0),[me,He]=u.useState(!1),[fe,Te]=u.useState(!1),[ze,Me]=u.useState(!1),[Ye,I]=u.useState(null);u.useEffect(()=>{e&&(He(!1),Te(!1),Me(!1),k({}),Y.getSettings().then(ae=>{const tt={claude:{model:ae.model,effort:ae.effort},codex:{...oo,...ae.codex??{}}},X=ae.agent==="codex"?"codex":"claude";f(tt),h(X),o(tt[X].model),d(tt[X].effort);const de=!!t&&id(Ni(t.source));y(de||ae.goal.enabled),v(de?"":ae.goal.condition),_(ae.verifyScope??"changed"),E(Kl(ae.method).id),K(ae.orchestration),He(!0)}).catch(()=>{Te(!0),He(!0)}),Y.getCodexVersion().then(ae=>{J(ae.version),Me(!0)}).catch(()=>{Me(!0)}),Y.getMethodStatus().then(ae=>I(ae.methods)).catch(()=>I(null)))},[e,t]),u.useEffect(()=>{if(!e||!t)return;let ae=!1;return(async()=>{try{const[tt,X]=await Promise.all([typeof Y.presence=="function"?Y.presence():Promise.resolve({enabled:!1,devices:[],hubVersion:""}),typeof Y.getProject=="function"?Y.getProject(t.projectId).then(Ft=>Ft.handledBy??[]).catch(()=>[]):Promise.resolve([])]);if(ae)return;const de=gw(tt,X);P(de);const at=de.find(Ft=>Ft.deviceId!==ja&&Ft.eligible);W((at==null?void 0:at.deviceId)??ja)}catch{if(ae)return;P([{deviceId:ja,name:"hub ini",eligible:!0}]),W(ja)}})(),()=>{ae=!0}},[e,t==null?void 0:t.id]);const be=D!==ja,Re=u.useMemo(()=>be?Qo({base:`/api/devices/${D}/relay`}):Y,[be,D]),Ze=ae=>{h(ae),k({});const tt=yw(p,ae);o(tt.model),d(tt.effort)},oe=ae=>{o(ae),d(tt=>c==="codex"?nr(ae,tt):tr(ae,tt))},je=Kh(c,s);if(!t)return null;const Ce=t,ke=Ni(Ce.source),Ue=id(ke),Je=Ce.blockedBy??[],rt=Je.length>0,et=(Ye==null?void 0:Ye.find(ae=>ae.method===T&&ae.agent===c))??null;async function xt(ae=!1,tt=!1){B(!0),ne(null),N(null);try{const{id:X,resumed:de}=await Re.startSession({spec:Ce.id,flow:ke,model:s,effort:l,agent:c,...Object.keys(b).length?{phaseOverrides:b}:{},goal:g,goalCondition:g&&w.trim()?w.trim():void 0,verifyScope:x,method:T,...rt||ae?{force:!0}:{},...tt?{confirmRemote:!0}:{}});i(X,de),a()}catch(X){if(X instanceof lt&&X.status===409&&X.detail&&typeof X.detail=="object"&&(X.detail.error==="remote-session"||X.detail.error==="confirm-required")){N(X.detail);return}const de=X instanceof lt&&X.status===409?Hu.safeParse(X.detail):null;de!=null&&de.success?ne(de.data):r==null||r(X)}finally{B(!1)}}return n.jsxs(mt,{open:e,onClose:a,icon:"play",eyebrow:`${Ce.id} · ${ke}`,title:"Mulai sesi",footer:n.jsxs(n.Fragment,{children:[n.jsx(V,{variant:"ghost",onClick:a,children:"Batal"}),n.jsx(V,{leftIcon:rt?"lock":"play",variant:rt?"danger":"primary",disabled:A,onClick:()=>void xt(),children:rt?"Mulai tetap":O?"Coba lagi":"Mulai"}),O&&!rt&&!be&&n.jsx(V,{leftIcon:"lock",variant:"danger",disabled:A,onClick:()=>void xt(!0),children:"Mulai tetap"})]}),children:[n.jsxs("div",{style:{fontSize:12.5,color:"var(--text-muted)",marginBottom:12,lineHeight:1.5},children:["Agen, model & effort ",n.jsx("b",{children:"orchestrator"})," sesi ini. Default dari setelan global; ubah bila perlu. Bila orkestrasi flow ini aktif, tiap fase dikerjakan subagent dengan model & effort di bawah (Settings › Orkestrasi). Override di bawah hanya berlaku untuk sesi ini dan tidak mengubah Settings."]}),O&&n.jsxs("div",{role:"alert",style:{fontSize:12.5,lineHeight:1.55,marginBottom:12,padding:"9px 11px",borderRadius:8,background:"var(--warn-bg, #fdf6e3)",color:"var(--text-strong)"},children:[n.jsx("b",{children:O.error}),n.jsxs("div",{children:[O.admission.liveCount," sesi hidup · ",O.admission.liveAgentCount," agen terstruktur · cap ",O.admission.maxConcurrent]}),n.jsxs("div",{children:["Load per core: ",O.admission.loadStatus==="available"&&O.admission.loadPerCore!==null?O.admission.loadPerCore.toFixed(2):"tidak tersedia",O.admission.loadStatus==="unsupported"?" (tidak didukung platform)":""," · ambang ",O.admission.maxLoadPerCore]}),n.jsx("div",{children:"Coba lagi setelah beban turun, atau pilih Mulai tetap untuk melewati cap dan pemeriksaan beban host."})]}),rt&&n.jsxs("div",{"data-testid":"dep-blocked-note",style:{fontSize:12.5,lineHeight:1.55,marginBottom:12,padding:"9px 11px",borderRadius:8,background:"var(--warn-bg, #fdf6e3)",color:"var(--text-strong)"},children:["Backlog ini menunggu"," ",n.jsx("b",{children:Je.map(ae=>`${ae.id} (${ae.reason==="missing"?"tak ditemukan":ae.reason==="unmerged"?"belum ter-merge":"belum selesai"})`).join(", ")}),". Sesi tetap bisa dimulai, tapi worktree-nya lahir dari basis yang belum memuat pekerjaan itu."," ","Mulai tetap juga melewati cap sesi dan pemeriksaan beban host."]}),n.jsx(ge,{label:"Target",hint:"Mesin yang menjalankan sesi ini. Tak terpilih tetap tampil beserta alasannya.",children:n.jsx(Be,{"aria-label":"target",value:D,style:{width:"100%"},options:Z.map(ae=>({value:ae.deviceId,label:ae.eligible?ae.name:`${ae.name} — ${fC(ae.reason)}`,disabled:!ae.eligible})),onChange:ae=>{W(ae.target.value),N(null)}})}),(F==null?void 0:F.error)==="remote-session"&&F.remoteSession&&n.jsxs("div",{role:"alert",style:{fontSize:12.5,marginBottom:12,padding:"9px 11px",borderRadius:8,background:"var(--warn-bg, #fdf6e3)"},children:["Sesi ini sudah berjalan di ",n.jsx("b",{children:F.remoteSession.name}),"."]}),(F==null?void 0:F.error)==="confirm-required"&&n.jsxs("div",{role:"alert",style:{fontSize:12.5,marginBottom:12,padding:"9px 11px",borderRadius:8,background:"var(--warn-bg, #fdf6e3)"},children:[n.jsx("div",{children:"Device terakhir yang mengerjakan ini sudah offline."}),n.jsx(V,{variant:"danger",disabled:A,onClick:()=>void xt(!1,!0),children:"Tetap mulai"})]}),n.jsx(ge,{label:"Agen",hint:"Mesin yang menjalankan sesi ini. Perilaku sesi sama; hanya CLI-nya berbeda.",children:n.jsx(Be,{"aria-label":"Agen",value:c,style:{width:"100%"},options:[{value:"claude",label:"Claude Code"},{value:"codex",label:"Codex CLI"}],onChange:ae=>Ze(ae.target.value)})}),n.jsx(ge,{label:"Model",children:n.jsx(Be,{"aria-label":"Model",value:s,style:{width:"100%"},options:kw(c,s),onChange:ae=>oe(ae.target.value)})}),n.jsx(ge,{label:"Effort",children:n.jsx(Be,{"aria-label":"Effort",value:l,style:{width:"100%"},options:je.map(ae=>({value:ae,label:ae})),onChange:ae=>d(ae.target.value)})}),c==="codex"&&nf(s,ee)&&n.jsxs("div",{"data-testid":"codex-version-note",style:{fontSize:12,lineHeight:1.5,marginBottom:12,padding:"8px 10px",borderRadius:8,background:"var(--warn-bg, #fdf6e3)",color:"var(--text-muted)"},children:["Codex CLI terpasang ",n.jsx("b",{children:ee}),", sedangkan ",n.jsx("b",{children:s})," butuh ",n.jsx("b",{children:(kt=ar(s))==null?void 0:kt.minClient}),". Sesi tetap boleh dijalankan, tapi modelnya belum tentu dikenali CLI ini."]}),n.jsx(Tw,{flow:ke,agent:c,model:s,effort:l,orchestration:H,codexVersion:ee,phaseOverrides:b,onPhaseOverridesChange:k,loadError:fe,remoteTarget:be?((pt=Z.find(ae=>ae.deviceId===D))==null?void 0:pt.name)??D:null,loading:!me||c==="codex"&&!ze}),n.jsxs(ge,{label:"Mode goal",hint:Ue?"Backlog goal selalu berjalan dalam mode goal — sesi menolak berhenti sampai goal item ini terbukti tercapai. Kosongkan kondisi untuk memakai goal item apa adanya.":"Sesi menolak berhenti sampai kondisinya terbukti. Kosongkan kondisi untuk memakai bawaan hanoman: semua fase tercatat, plan tak menyisakan task, push sukses.",children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:g?10:0},children:[n.jsx(xh,{"aria-label":"Mode goal",checked:g,disabled:Ue,onChange:ae=>{Ue||y(ae)}}),n.jsx("span",{style:{fontSize:12.5,color:"var(--text-muted)"},children:Ue?"aktif · terkunci":g?"aktif":"nonaktif"})]}),g&&n.jsx(zt,{value:w,rows:4,mono:!0,placeholder:Ue?"Kosong = goal backlog item ini · mis. semua fase tercatat & plan tanpa - [ ]":"Kosong = kondisi bawaan hanoman · mis. semua fase tercatat & plan tanpa - [ ]",onChange:ae=>v(ae.target.value)})]}),n.jsx(ge,{label:"Scope verifikasi",hint:"Hanya yang berubah = test/typecheck/lint hanya menyentuh berkas yang disentuh sesi ini. Suite penuh tetap dijalankan manusia sebelum merge.",children:n.jsx(Be,{"aria-label":"Scope verifikasi",value:x,style:{width:"100%"},options:[{value:"changed",label:"Hanya yang berubah — hemat RAM & CPU"},{value:"full",label:"Seluruh project"}],onChange:ae=>_(ae.target.value)})}),n.jsxs(ge,{label:"Metode",hint:"Metodologi kerja sesi ini: skill per fase + direktori plan/spec. Fase-fasenya sendiri tak berubah. Item yang sudah pernah dijalankan memakai metode tercatatnya saat dilanjutkan.",children:[n.jsx(Be,{"aria-label":"Metode",value:T,style:{width:"100%"},options:Oo.map(ae=>({value:ae,label:Dn[ae].label})),onChange:ae=>E(ae.target.value)}),n.jsxs("div",{"data-testid":"method-requires",style:{fontSize:12,color:"var(--text-muted)",marginTop:6},children:["Butuh terpasang: ",((gt=Dn[T])==null?void 0:gt.requires.join(" · "))??"—"]}),et&&!et.ready&&n.jsxs("div",{"data-testid":"method-status-note",style:{fontSize:12,lineHeight:1.5,marginTop:8,padding:"8px 10px",overflowWrap:"anywhere",borderRadius:8,background:"var(--warn-bg, #fdf6e3)",color:"var(--text-muted)"},children:[n.jsx("b",{children:et.label})," belum siap untuk ",n.jsx("b",{children:c==="codex"?"Codex CLI":"Claude Code"})," di mesin ini",et.missingPackages.length>0&&n.jsxs(n.Fragment,{children:[" · paket kurang: ",n.jsx("code",{children:et.missingPackages.join(" · ")})]}),et.missingSkills.length>0&&n.jsxs(n.Fragment,{children:[" · skill kurang: ",n.jsx("code",{children:et.missingSkills.join(" · ")})]}),"."," ","Sesi tetap boleh dijalankan, tapi gerbang yang disebut prompt tak akan ada. Pasang dari Settings → Sesi."]})]})]})}function kC({open:e,onClose:t,projects:a,defaultProject:i,onCreate:r,prefill:s,specs:o}){const l={kind:(s==null?void 0:s.kind)??"brief",project:(s==null?void 0:s.project)||i,title:(s==null?void 0:s.title)??"",context:(s==null?void 0:s.context)??"",outcome:(s==null?void 0:s.outcome)??"",constraints:(s==null?void 0:s.constraints)??"",priority:"sedang",severity:(s==null?void 0:s.severity)??"major",steps:(s==null?void 0:s.steps)??"",expected:"",actual:(s==null?void 0:s.actual)??"",env:"",branchFrom:(s==null?void 0:s.branchFrom)??"",fromAudit:(s==null?void 0:s.fromAudit)??"",goal:(s==null?void 0:s.goal)??"",done:(s==null?void 0:s.done)??"",dependsOn:[],attachments:[]},[d,c]=u.useState(l);u.useEffect(()=>{e&&c({...l,project:(s==null?void 0:s.project)||i})},[e,i,s]);const[h,p]=u.useState([]),[f,b]=u.useState(new Set);u.useEffect(()=>{if(!e||!d.project){p([]),b(new Set);return}let A=!0;return Y.listBranches(d.project).then(B=>{if(!A)return;const O=[...new Set([...B.branches,...B.remotes])].sort();p(O),b(new Set(B.remotes.filter(ne=>!B.branches.includes(ne)))),c(ne=>ne.branchFrom&&!O.includes(ne.branchFrom)?{...ne,branchFrom:""}:ne)}).catch(()=>{A&&(p([]),b(new Set))}),()=>{A=!1}},[e,d.project]);const k=A=>B=>c(O=>({...O,[A]:B.target.value})),g=d.kind==="qa",y=d.kind==="audit",w=d.kind==="goal",v=d.kind==="no_effort",x=Bn(d.kind)==="goal",_=(o??[]).filter(A=>A.projectId===d.project),T=A=>c(B=>({...B,dependsOn:B.dependsOn.includes(A)?B.dependsOn.filter(O=>O!==A):[...B.dependsOn,A]})),E=()=>{!d.title.trim()||x&&!d.goal.trim()||r(d)};return n.jsxs(mt,{open:e,onClose:t,icon:g?"bug":y?"search":v?"zap":w?"target":"lightbulb",eyebrow:"human → hanoman",title:g?"QA finding baru":y?"Audit baru":v?"Task remeh baru":w?"Goal baru":"Feature brief baru",footer:n.jsxs(n.Fragment,{children:[n.jsx(V,{variant:"ghost",size:"sm",onClick:t,children:"Batal"}),n.jsx(V,{size:"sm",leftIcon:g?"radar":y?"search":v?"zap":w?"target":"messages-square",onClick:E,children:g?"Filekan finding → audit":y?"Buat audit → investigasi":v?"Buat task → sesi satu fase":w?"Buat goal → sesi goal":"Buat brief → brainstorm"})]}),children:[n.jsxs("div",{style:{marginBottom:16},children:[n.jsx(Ia,{variant:"pill",value:d.kind,onChange:A=>c(B=>({...B,kind:A})),tabs:[{value:"brief",label:"Feature brief",icon:"lightbulb"},{value:"qa",label:"QA finding",icon:"bug"},{value:"audit",label:"Audit",icon:"search"},{value:"goal",label:"Goal",icon:"target"},{value:"no_effort",label:"Tanpa effort",icon:"zap"}]}),n.jsx("div",{style:{fontSize:12,color:"var(--text-subtle)",marginTop:8,lineHeight:1.5},children:v?"Sesi satu fase (Kerjakan): langsung mengerjakan lalu berhenti — tanpa brainstorm, spec, plan, maupun fase pembuktian terpisah. Untuk ganti copy, bump konstanta, perbaiki typo docs, tambah satu baris allowlist.":w?"Sesi goal langsung mengejar goal-nya — tanpa brainstorm, spec, atau plan (fase: Goal → Verifikasi). Sesi lahir dengan mode goal aktif dan menolak berhenti sampai buktinya ada di transkrip.":g?"Finding masuk lewat alur audit → spec → plan → execute. hanoman menelusuri akar masalah dulu.":y?"Audit HANYA menghasilkan dokumen (audit → laporan) — tanpa perbaikan kode. Bisa dinaikkan jadi Finding QA bila perlu diperbaiki.":"Brief masuk lewat alur brainstorm → objective → spec → plan → execute."})]}),n.jsx(ge,{label:"Project",children:n.jsx(Be,{value:d.project,onChange:k("project"),style:{width:"100%"},options:a.map(A=>({value:A.id,label:A.name}))})}),n.jsx(ge,{label:"Branch",hint:"branch yang di-copy ke git worktree saat run",children:n.jsx(Be,{value:d.branchFrom,onChange:k("branchFrom"),disabled:!h.length,style:{width:"100%"},options:tm(h,f)})}),n.jsx(ge,{label:"Bergantung pada",hint:"Backlog yang harus selesai & ter-merge lebih dulu. Kosongkan bila item ini berdiri sendiri.",children:_.length===0?n.jsx("div",{style:{fontSize:12.5,color:"var(--text-subtle)"},children:"Belum ada backlog lain di project ini."}):n.jsx("div",{style:{maxHeight:132,overflowY:"auto",display:"flex",flexDirection:"column",gap:6,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",padding:8},children:_.map(A=>n.jsx(sr,{"aria-label":`Bergantung pada ${A.id}`,checked:d.dependsOn.includes(A.id),onChange:()=>T(A.id),label:`${A.id} · ${A.title}`},A.id))})}),n.jsx(ge,{label:"Judul",children:n.jsx(We,{"aria-label":"Judul",value:d.title,onChange:k("title"),placeholder:g?"mis. Funnel double-count sesi lintas tengah malam":v?"mis. Label tombol Simpan di form backlog":w?"mis. Latensi daftar backlog":"mis. Jadwal invoice berulang",style:{width:"100%"}})}),x?n.jsxs(n.Fragment,{children:[n.jsx(ge,{label:"Goal",hint:"Keadaan yang harus tercapai — inilah yang dikejar sesi sampai terbukti",children:n.jsx(zt,{"aria-label":"Goal",value:d.goal,onChange:k("goal"),rows:3,placeholder:"mis. p95 GET /api/specs di bawah 200 ms"})}),n.jsx(ge,{label:"Selesai bila",hint:"Bukti yang harus muncul di transkrip; kosongkan bila goal-nya sudah jadi buktinya sendiri",children:n.jsx(zt,{"aria-label":"Selesai bila",value:d.done,onChange:k("done"),rows:2,placeholder:"mis. output benchmark menunjukkan < 200 ms"})}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1.4fr 1fr",gap:12},children:[n.jsx(ge,{label:"Batasan",hint:"opsional",children:n.jsx(We,{"aria-label":"Batasan",value:d.constraints,onChange:k("constraints"),placeholder:"mis. tanpa cache eksternal",style:{width:"100%"}})}),n.jsx(ge,{label:"Prioritas",children:n.jsx(Be,{"aria-label":"Prioritas",value:d.priority,onChange:k("priority"),style:{width:"100%"},options:Uc})})]})]}):g?n.jsxs(n.Fragment,{children:[n.jsx(ge,{label:"Severity",children:n.jsx(Be,{value:d.severity,onChange:k("severity"),style:{width:"100%"},options:gC})}),n.jsx(ge,{label:"Langkah reproduksi",children:n.jsx(zt,{value:d.steps,onChange:k("steps"),rows:3,mono:!0,placeholder:`1. Buka …
1003
+ 3. Amati …`],["expected","Diharapkan","mis. total funnel sama dengan jumlah baris laporan harian"],["actual","Aktual","mis. total funnel dua kali lipat untuk sesi yang melewati tengah malam"],["env","Environment","prod · web · v0.9.2"],["constraints","Batasan","mis. jangan ubah kontrak API"]],Eo={brief:R_,qa:$_,goal:L_},Nm=[{value:"tinggi",label:"Tinggi"},{value:"sedang",label:"Sedang"},{value:"rendah",label:"Rendah"}],Fm=[{value:"critical",label:"Critical"},{value:"major",label:"Major"},{value:"minor",label:"Minor"}];function B_({spec:e,onClose:t,onSubmit:a}){var T;const i=e.stage!=="brainstorming"||e.baseSha!=null,r=I_.filter(E=>E.value!==e.source),[s,o]=u.useState(((T=r[0])==null?void 0:T.value)??""),l=i&&Ni(s)!==Ni(e.source),d=i&&!l,c=u.useMemo(()=>ng(s,e.payload),[s,e.payload]),[h,p]=u.useState(()=>c.payload),[f,b]=u.useState(null),[k,g]=u.useState(!1);u.useEffect(()=>{p(c.payload),b(null)},[s]);const y=E=>A=>p(B=>({...B,[E]:A.target.value})),w=Bn(s),v=Eo[w]??[],x=E=>{var A;return((A=(Eo[Do(e.payload)]??[]).find(([B])=>B===E))==null?void 0:A[1])??E};async function _(E){if(!k){g(!0);try{const A=await a(s,d?void 0:{...h},E);A&&A.pending?b(A):t()}finally{g(!1)}}}return f?n.jsxs(mt,{open:!0,title:"Item ini akan dikembalikan ke Brainstorming",icon:"rotate-ccw",eyebrow:`${e.id} · ${Kt(e.source).label} → ${Kt(s).label}`,onClose:k?void 0:t,children:[n.jsxs("div",{style:{fontSize:13.5,color:"var(--text-strong)",lineHeight:1.55,marginBottom:12},children:["Alur kerja ",Kt(s).label," berbeda dari yang sudah dikerjakan, jadi item ini mulai lagi dari awal. Kode yang sudah ter-commit di branch lain tak disentuh."]}),n.jsxs("ul",{"data-testid":"source-reset-impact",style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-muted)",marginBottom:16,paddingLeft:18,lineHeight:1.6},children:[f.wouldDelete.map(E=>n.jsx("li",{children:E},E)),f.worktree&&n.jsx("li",{children:f.worktree}),f.branch&&n.jsx("li",{children:f.branch}),!f.wouldDelete.length&&!f.worktree&&!f.branch&&n.jsx("li",{children:"tak ada berkas yang perlu dibuang — hanya tahapnya yang mundur"})]}),n.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[n.jsx(V,{size:"sm",variant:"secondary",disabled:k,onClick:t,children:"Batal"}),n.jsx(V,{size:"sm",variant:"danger",leftIcon:"rotate-ccw",loading:k,onClick:()=>_(!0),children:"Reset & ubah type"})]})]}):n.jsxs(mt,{open:!0,title:"Ubah type backlog item",icon:"shuffle",eyebrow:`${e.id} · ${Kt(e.source).label}`,onClose:t,children:[n.jsx(ge,{label:"Type tujuan",children:n.jsx(Be,{"aria-label":"Type tujuan",value:s,onChange:E=>o(E.target.value),options:r,style:{width:"100%"}})}),!r.length&&n.jsx("div",{style:{fontSize:13,color:"var(--text-muted)",lineHeight:1.5,marginBottom:12},children:"Tak ada type lain yang bisa dituju. Dialog tetap terbuka dan mengatakannya — menolak dengan diam adalah bug yang melahirkan ADR-0149."}),d?n.jsxs("div",{style:{fontSize:13,color:"var(--text-muted)",lineHeight:1.5,marginBottom:12},children:["Item ini sudah pernah dikerjakan sesi, dan type tujuannya memakai alur kerja yang sama — yang berpindah hanya ",n.jsx("strong",{children:"labelnya"}),". Isi, worktree, dan berkas fase tak disentuh."]}):n.jsxs(n.Fragment,{children:[l&&n.jsxs("div",{"data-testid":"source-reset-warning",style:{fontSize:12.5,color:"var(--text-strong)",lineHeight:1.5,marginBottom:12,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",padding:10},children:[n.jsx(Oe,{tone:"warn",size:"sm",children:"alur kerja berbeda"})," ","Item ini akan kembali ke tahap ",n.jsx("strong",{children:"Brainstorming"}),"; dokumen fase, worktree, dan branch sesi lamanya dihapus. Daftar persisnya ditampilkan sebelum kamu menyetujui."]}),c.dropped.length>0&&n.jsxs("div",{"data-testid":"source-dropped",style:{fontSize:12.5,color:"var(--text-muted)",lineHeight:1.5,marginBottom:12,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",padding:10},children:[n.jsx(Oe,{tone:"warn",size:"sm",children:"tak punya padanan"})," ",c.dropped.map(x).join(", ")," tidak ada di bentuk"," ",Kt(s).label,". Teks lamanya tetap tersimpan di"," ",n.jsx("strong",{children:"jejak konversi"})," item ini."]}),w!=="qa"&&n.jsx(ge,{label:"Prioritas",children:n.jsx(Be,{"aria-label":"Prioritas",value:h.priority??"sedang",onChange:y("priority"),options:Nm,style:{width:"100%"}})}),v.map(([E,A,B])=>n.jsx(ge,{label:A,children:E==="severity"?n.jsx(Be,{"aria-label":A,value:h[E]??"minor",onChange:y(E),options:Fm,style:{width:"100%"}}):n.jsx(zt,{"aria-label":A,value:h[E]??"",onChange:y(E),rows:2,placeholder:B})},E))]}),n.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end",marginTop:8},children:[n.jsx(V,{size:"sm",variant:"secondary",onClick:t,children:"Batal"}),n.jsx(V,{size:"sm",variant:"primary",leftIcon:"shuffle",loading:k,disabled:!r.length,onClick:()=>_(),children:"Ubah type"})]})]})}const Ac=280;function Hm({spec:e,onClose:t,onSubmit:a}){const[i,r]=u.useState(""),[s,o]=u.useState(null),[l,d]=u.useState(!1),c=u.useRef(!1);async function h(){if(!c.current){c.current=!0,d(!0);try{const p=await a(e,i.trim(),s!==null);if(p&&"needConfirm"in p){o(p.sessionId??"");return}p&&t()}finally{c.current=!1,d(!1)}}}return n.jsxs(mt,{open:!0,title:"Tandai selesai",icon:"circle-check",eyebrow:e.id+" · "+e.projectId,onClose:l?void 0:t,children:[n.jsx("div",{style:{fontSize:13,color:"var(--text-muted)",lineHeight:1.55,marginBottom:14},children:"Item keluar dari daftar siap-kerja dan berstatus selesai — sama seperti item yang selesai lewat sesi. Kode, commit, dan dokumen tidak disentuh, dan status ini masih bisa dikembalikan lewat “Ubah status”."}),s!==null&&n.jsxs("div",{"data-testid":"mark-done-live",style:{border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",background:"var(--bone-100)",padding:10,marginBottom:14,fontSize:12.5,color:"var(--text-strong)",lineHeight:1.5},children:["Masih ada sesi yang berjalan untuk item ini",s?` (${s})`:"",". Menandainya selesai tidak menghentikan sesi itu — tutup sesinya dari Terminal bila memang sudah tak dibutuhkan."]}),n.jsx(ge,{label:"Alasan singkat (opsional)",hint:`${i.trim().length}/${Ac} — mis. “sudah ter-merge lewat PR #12”`,children:n.jsx(zt,{"aria-label":"Alasan singkat (opsional)",rows:2,value:i,maxLength:Ac,disabled:l,onChange:p=>r(p.target.value),placeholder:"sudah dikerjakan langsung di checkout"})}),n.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[n.jsx(V,{size:"sm",variant:"secondary",disabled:l,onClick:t,children:"Batal"}),n.jsx(V,{size:"sm",variant:"primary",leftIcon:"circle-check",loading:l,onClick:h,children:s!==null?"Tandai selesai — sesi tetap berjalan":"Tandai selesai"})]})]})}const Ea=[{key:"brainstorming",label:"Brainstorm"},{key:"objective",label:"Objective"},{key:"spec-ready",label:"Spec"},{key:"planned",label:"Plan"},{key:"executing",label:"Execute"},{key:"done",label:"Done"}],Um=e=>Ea.findIndex(t=>t.key===e),Ta={tinggi:{tone:"err",label:"prioritas tinggi"},sedang:{tone:"neutral",label:"prioritas sedang"},rendah:{tone:"neutral",label:"prioritas rendah"}},Gm=e=>e==="missing"?"tak ditemukan":e==="unmerged"?"belum ter-merge":"belum selesai";function Sl({spec:e}){const t=e.blockedBy??[];return t.length?n.jsx(Oe,{tone:"warn",size:"sm",icon:"lock",title:t.map(a=>`${a.id} — ${Gm(a.reason)}`).join(" · "),children:"Terblokir"}):null}function _l({stage:e}){var i;const t=Um(e),a=((i=Ea[t])==null?void 0:i.label)??e;return n.jsx("div",{"aria-label":`Status ${a}`,style:{display:"flex",alignItems:"center",gap:4},children:Ea.map((r,s)=>{const o=s<t||e==="done",l=s===t&&e!=="done";return n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:5,padding:l?"3px 9px":0,borderRadius:"var(--radius-pill)",background:l?"var(--brass-100)":"transparent"},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:o?"var(--leaf-500)":l?"var(--brass-500)":"var(--bone-400)"}}),l&&n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,fontWeight:500,color:"var(--brass-700)"},children:r.label})]}),s<Ea.length-1&&n.jsx("span",{style:{width:12,height:1.5,background:s<t||e==="done"?"var(--leaf-500)":"var(--bone-300)"}})]},r.key)})})}function Ec({label:e,value:t}){return n.jsxs("div",{style:{marginBottom:14},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:e}),n.jsx("div",{style:{fontSize:13.5,color:"var(--text-strong)",lineHeight:1.5,whiteSpace:"pre-wrap"},children:t||"—"})]})}const D_={qa:"Finding QA — ada yang perlu diperbaiki.",brief:"Feature brief — kebutuhan yang bentuknya sudah jelas.",prd:"PRD — kebutuhan produk yang perlu didefinisikan dulu."},qr=(e,t)=>e&&e.target===t?"primary":"secondary",Mc=e=>e==="audit";function O_({spec:e,onClose:t,onEditBranch:a,onRevertStage:i,onMarkDone:r,onOpenReview:s,onStart:o,onIntegrate:l,onEditSpec:d,onPromoteToQa:c,onPromoteToBrief:h,onPromoteToPrd:p,onEditDeps:f,onEditAutoMerge:b,onChangeSource:k,projectPolicy:g,allSpecs:y,onAttachmentToast:w}){var gt,ae,tt;const[v,x]=u.useState([]),[_,T]=u.useState(new Set),[E,A]=u.useState(null),[B,O]=u.useState(""),[ne,Z]=u.useState(!1),[P,D]=u.useState(!1),W=u.useRef(!1),[F,N]=u.useState(!1),[ee,J]=u.useState(!1),[H,K]=u.useState(!1),[me,He]=u.useState({}),fe=(e==null?void 0:e.stage)==="brainstorming"&&(e==null?void 0:e.baseSha)==null&&!!d&&e.payload!==void 0,Te=()=>{if(!e)return;const X=e.payload||{};He({title:e.title,priority:e.priority,...X}),K(!0)},ze=X=>de=>He(at=>({...at,[X]:de.target.value})),[Me,Ye]=u.useState(null),I=e&&Mc(e.source)?e.id:null;u.useEffect(()=>{var de;if(Ye(null),!I)return;let X=!0;return(de=Y.getEscalation)==null||de.call(Y,I).then(at=>{X&&Ye(at.escalation)}).catch(()=>{X&&Ye(null)}),()=>{X=!1}},[I]);const be=()=>{if(!e||!d)return;const X=e.source==="qa"?{title:me.title,payload:{severity:me.severity,steps:me.steps,expected:me.expected,actual:me.actual,env:me.env,constraints:me.constraints??""}}:Bn(e.source)==="goal"?{title:me.title,priority:me.priority,payload:{goal:me.goal,done:me.done??"",constraints:me.constraints??"",priority:me.priority}}:{title:me.title,priority:me.priority,payload:{context:me.context,outcome:me.outcome,constraints:me.constraints,priority:me.priority}};d(e,X),K(!1)},Re=e==null?void 0:e.projectId;u.useEffect(()=>{if(!Re){x([]),T(new Set);return}let X=!0;return Y.listBranches(Re).then(de=>{if(X){const at=[...new Set([...de.branches,...de.remotes])].sort();x(at),T(new Set(de.remotes.filter(Ft=>!de.branches.includes(Ft))))}}).catch(()=>{X&&(x([]),T(new Set))}),()=>{X=!1}},[Re]),u.useEffect(()=>{B&&O(""),E&&A(null)},[e==null?void 0:e.id,e==null?void 0:e.stage]);async function Ze(X){if(!W.current){W.current=!0,D(!0);try{return await X()}finally{W.current=!1,D(!1)}}}async function oe(){if(!e||!i||!B)return;const X=await Ze(()=>i(e,B));X&&X.pending?A({target:B,files:X.wouldDelete}):X&&O("")}async function je(){if(!e||!i||!E)return;await Ze(()=>i(e,E.target,!0))&&(A(null),O(""))}function Ce(){E||W.current||(K(!1),t())}if(!e)return null;const ke=Ea.slice(0,Um(e.stage)),Ue=((gt=Ea.find(X=>X.key===e.stage))==null?void 0:gt.label)??e.stage,Je=((ae=Ea.find(X=>X.key===B))==null?void 0:ae.label)??B,rt=e.source==="qa",et=Bn(e.source),xt=e.payload||{},kt=(y??[]).filter(X=>X.projectId===e.projectId&&X.id!==e.id),pt=Eo[et];return n.jsxs(mt,{open:!0,title:e.title,eyebrow:e.id+" · "+e.projectId,icon:Kt(e.source).icon,onClose:Ce,children:[n.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap",marginBottom:16,alignItems:"center"},children:[n.jsx(Oe,{tone:Kt(e.source).tone,size:"sm",children:Kt(e.source).label}),n.jsx(Oe,{tone:(Ta[e.priority]||Ta.sedang).tone,size:"sm",variant:"outline",children:(Ta[e.priority]||Ta.sedang).label}),n.jsx(Oe,{tone:"neutral",size:"sm",children:e.author}),n.jsx("span",{style:{flex:1}}),fe&&!H&&n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"pencil",onClick:Te,children:"Edit"}),k&&n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"shuffle",onClick:()=>J(!0),children:"Ubah type"}),s&&n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"git-compare",onClick:()=>{s(e),t()},children:"Review perubahan"})]}),n.jsxs("div",{style:{marginBottom:18},children:[n.jsx(_l,{stage:e.stage}),e.stage==="done"&&o&&n.jsx("div",{style:{marginTop:12},children:n.jsx(V,{size:"sm",variant:"primary",leftIcon:"play",onClick:()=>o(e),children:"Buka sesi lagi"})}),Mc(e.source)&&(c||h||p)&&n.jsxs("div",{style:{marginTop:12},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Tindak lanjut"}),Me&&n.jsxs("div",{style:{fontSize:12.5,color:"var(--text-muted)",lineHeight:1.5,marginBottom:8},children:[Me.target==="none"?n.jsxs("span",{children:["Audit menilai ",n.jsx("strong",{children:"cukup jawaban"})," — tak perlu perbaikan."]}):n.jsxs("span",{children:[n.jsx(Oe,{tone:"brass",size:"sm",children:"direkomendasikan hanoman"})," ",D_[Me.target]]}),Me.reason?n.jsx("div",{style:{marginTop:4},children:Me.reason}):null]}),n.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:[c&&n.jsx(V,{size:"sm",variant:qr(Me,"qa"),leftIcon:"bug",onClick:()=>c(e,Me),children:"Jadikan Finding QA"}),h&&n.jsx(V,{size:"sm",variant:qr(Me,"brief"),leftIcon:"lightbulb",onClick:()=>h(e,Me),children:"Jadikan Feature brief"}),p&&n.jsx(V,{size:"sm",variant:qr(Me,"prd"),leftIcon:"scroll-text",onClick:()=>p(e,Me),children:"Jadikan PRD"})]})]}),e.stage==="done"&&l&&n.jsxs("div",{style:{marginTop:12},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Integrasi"}),n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"git-merge",onClick:()=>N(!0),children:"Rebase / Merge"})]}),(i||r)&&n.jsxs("div",{style:{marginTop:12},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Ubah status"}),n.jsx("div",{style:{fontSize:13,color:"var(--text-strong)",fontWeight:600,marginBottom:6},children:`Status saat ini: ${Ue}`}),e.stage!=="done"&&r&&n.jsx("div",{style:{marginBottom:10},children:n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"circle-check",onClick:()=>Z(!0),children:"Tandai selesai"})}),i?ke.length>0?n.jsxs(n.Fragment,{children:[n.jsx(Be,{size:"sm","aria-label":"Kembalikan stage",value:B,onChange:X=>O(X.target.value),disabled:P,placeholder:"Pilih status lebih awal…",options:ke.map(X=>({value:X.key,label:"← "+X.label}))}),n.jsx("div",{style:{fontSize:12.5,color:"var(--text-muted)",lineHeight:1.5,marginTop:6},children:"Status saat ini dan status berikutnya tidak dapat dipilih. Kemajuan hanya berasal dari fase sesi."}),B&&n.jsxs("div",{style:{border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",background:"var(--bone-100)",padding:10,marginTop:8,fontSize:12.5,color:"var(--text-muted)",lineHeight:1.5},children:[n.jsxs("div",{style:{color:"var(--text-strong)",fontWeight:600},children:[Ue," → ",Je]}),"Fase sesi yang sudah berjalan tidak dibatalkan. Dokumen Spec/Plan di atas target mungkin perlu dihapus setelah konfirmasi; kode dan commit tidak disentuh."]}),n.jsx("div",{style:{marginTop:8},children:n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"rotate-ccw",disabled:!B,loading:P,onClick:oe,children:"Simpan status"})})]}):n.jsxs("div",{style:{fontSize:12.5,color:"var(--text-muted)",lineHeight:1.5},children:[Ue," adalah status paling awal. Kemajuan hanya berasal dari fase sesi."]}):null]})]}),e.manualDone&&n.jsxs("div",{style:{marginBottom:14},"data-testid":"manual-done-trail",children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Ditandai selesai manual"}),n.jsxs("div",{style:{fontSize:12.5,color:"var(--text-muted)",lineHeight:1.5},children:[e.manualDone.by," · ",new Date(e.manualDone.at).toLocaleString("id-ID"),e.manualDone.reason?n.jsx("div",{style:{marginTop:4},children:e.manualDone.reason}):null]})]}),(e.sourceHistory??[]).length>0&&n.jsxs("div",{style:{marginBottom:14},"data-testid":"source-trail",children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Jejak konversi type"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:4},children:(e.sourceHistory??[]).map((X,de)=>n.jsxs("div",{style:{fontSize:13,color:"var(--text-muted)"},children:[n.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-strong)"},children:[X.from," → ",X.to]})," · ",new Date(X.at).toLocaleString("id-ID")," · ",X.by]},`${X.at}-${de}`))})]}),b&&n.jsxs("div",{style:{marginBottom:14},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Auto-merge saat selesai"}),n.jsx(Be,{size:"sm","aria-label":"Auto-merge item ini",value:e.autoMerge?e.autoMerge.mode:"inherit",onChange:X=>{var at;const de=X.target.value;if(de==="inherit")return b(e,null);if(de==="off")return b(e,{...si});b(e,{...e.autoMerge??si,mode:de,branch:de==="branch"?((at=e.autoMerge)==null?void 0:at.branch)??v[0]??null:null})},options:[{value:"inherit",label:`Ikut project (${ru(hg(g,null))})`},{value:"off",label:"Tanpa auto-merge untuk item ini"},{value:"default-branch",label:"Auto-merge ke default branch repo"},{value:"branch",label:"Auto-merge ke branch tujuan…"}]}),((tt=e.autoMerge)==null?void 0:tt.mode)==="branch"&&n.jsx("div",{style:{marginTop:6},children:n.jsx(Be,{size:"sm","aria-label":"Branch tujuan item ini",value:e.autoMerge.branch??"",onChange:X=>b(e,{...e.autoMerge,branch:X.target.value||null}),options:[{value:"",label:"Pilih branch…"},...v.map(X=>({value:X,label:X}))]})})]}),H?n.jsx(ge,{label:"Judul",children:n.jsx(We,{value:me.title??"",onChange:ze("title"),placeholder:"mis. Jadwal invoice berulang",style:{width:"100%"}})}):n.jsx(Ec,{label:"Objective",value:e.objective}),n.jsxs("div",{style:{marginBottom:14},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Branch worktree"}),n.jsx(Be,{size:"sm",value:e.branchFrom??"",disabled:!v.length,onChange:X=>a&&a(e,X.target.value||null),options:tm(v,_)})]}),n.jsx(Sw,{specId:e.id,onToast:w??(()=>{})}),n.jsxs("div",{style:{marginBottom:14},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:4},children:"Bergantung pada"}),(e.dependsOn??[]).length===0?n.jsx("div",{style:{fontSize:13,color:"var(--text-subtle)"},children:"— berdiri sendiri"}):n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:4},children:(e.dependsOn??[]).map(X=>{const de=(e.blockedBy??[]).find(at=>at.id===X);return n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,fontSize:13},children:[n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-strong)"},children:X}),de?n.jsx(Oe,{tone:"warn",size:"sm",children:Gm(de.reason)}):n.jsx(Oe,{tone:"ok",size:"sm",icon:"check",children:"selesai & ter-merge"})]},X)})}),f&&kt.length>0&&n.jsx("div",{style:{maxHeight:132,overflowY:"auto",display:"flex",flexDirection:"column",gap:6,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",padding:8,marginTop:8},children:kt.map(X=>{const de=(e.dependsOn??[]).includes(X.id);return n.jsx(sr,{"aria-label":`Bergantung pada ${X.id}`,checked:de,label:`${X.id} · ${X.title}`,onChange:()=>f(e,de?(e.dependsOn??[]).filter(at=>at!==X.id):[...e.dependsOn??[],X.id])},X.id)})})]}),H?n.jsxs(n.Fragment,{children:[!rt&&n.jsx(ge,{label:"Prioritas",children:n.jsx(Be,{value:me.priority??"sedang",onChange:ze("priority"),options:Nm,style:{width:"100%"}})}),pt.map(([X,de,at])=>n.jsx(ge,{label:de,children:X==="severity"?n.jsx(Be,{value:me[X]??"major",onChange:ze(X),options:Fm,style:{width:"100%"}}):n.jsx(zt,{value:me[X]??"",onChange:ze(X),rows:2,placeholder:at})},X)),n.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end",marginTop:8},children:[n.jsx(V,{size:"sm",variant:"secondary",onClick:()=>K(!1),children:"Batal"}),n.jsx(V,{size:"sm",variant:"primary",leftIcon:"check",onClick:be,children:"Simpan"})]})]}):pt.map(([X,de])=>n.jsx(Ec,{label:de,value:xt[X]??""},X)),E&&n.jsxs(mt,{open:!0,title:"Kembalikan stage & hapus artefak",icon:"rotate-ccw",eyebrow:e.id+" → "+E.target,onClose:P?void 0:()=>A(null),children:[n.jsxs("div",{style:{fontSize:13.5,color:"var(--text-strong)",marginBottom:12},children:[E.files.length," berkas docs akan dihapus dari disk (kode & commit tak disentuh):"]}),n.jsx("ul",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-muted)",marginBottom:16,paddingLeft:18},children:E.files.map(X=>n.jsx("li",{children:X},X))}),n.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[n.jsx(V,{size:"sm",variant:"secondary",disabled:P,onClick:()=>A(null),children:"Batal"}),n.jsx(V,{size:"sm",variant:"primary",leftIcon:"trash-2",loading:P,onClick:je,children:"Hapus & kembalikan"})]})]}),F&&l&&n.jsx(C_,{projectId:e.projectId,ownBranch:`hanoman/${e.id.toLowerCase().replace(/[^a-z0-9_-]/g,"_")}`,eyebrow:e.id,onClose:()=>N(!1),onIntegrate:(X,de)=>{N(!1),l(e,X,de)}}),ne&&r&&n.jsx(Hm,{spec:e,onClose:()=>Z(!1),onSubmit:r}),ee&&k&&e.payload!==void 0&&n.jsx(B_,{spec:e,onClose:()=>J(!1),onSubmit:(X,de,at)=>Promise.resolve(k(e,X,de,at)??null)})]})}function Cl({spec:e,onStart:t,onDelete:a,onOpenRun:i,onOpenReview:r,onMarkDone:s,running:o}){const[l,d]=u.useState(!1),[c,h]=u.useState(!1);return n.jsxs("div",{className:"hn-row-actions",style:{display:"flex",alignItems:"center",gap:8},children:[r&&n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"git-compare",onClick:()=>r(e),children:"Review"}),e.stage!=="done"&&o&&n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"terminal",onClick:()=>i&&i(e),children:"Buka sesi"}),e.stage!=="done"&&!o&&n.jsx(V,{size:"sm",variant:"primary",leftIcon:"play",onClick:()=>t&&t(e),children:e.stage==="brainstorming"?"Mulai":"Lanjutkan"}),e.stage==="done"&&n.jsx(Oe,{tone:"ok",size:"sm",icon:"check-circle-2",children:"selesai"}),e.stage!=="done"&&s&&n.jsx(Tn,{size:"sm",variant:"ghost",icon:"circle-check",label:"Tandai selesai",onClick:()=>h(!0)}),n.jsx(Tn,{size:"sm",variant:"ghost",icon:"file-text",label:"Lihat dokumen",onClick:()=>d(!0)}),a&&n.jsx(Tn,{size:"sm",variant:"ghost",icon:"trash-2",label:"Hapus spec",onClick:()=>a(e)}),c&&s&&n.jsx(Hm,{spec:e,onClose:()=>h(!1),onSubmit:s}),l&&n.jsx(Lm,{specId:e.id,onClose:()=>d(!1)})]})}const qm=e=>{const t=e?new Date(e):null;return t&&!Number.isNaN(t.getTime())?t.toLocaleDateString("id-ID",{day:"numeric",month:"short",year:"numeric"}):""};function Tl({spec:e,style:t}){const a=qm(e.createdAt);return a?n.jsx("time",{dateTime:e.createdAt,title:"Tanggal dibuat","data-testid":"spec-created",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)",whiteSpace:"nowrap",...t},children:a}):null}function Al({spec:e,onOpenDetail:t,size:a=15}){return n.jsx("button",{onClick:()=>t&&t(e),style:{border:"none",background:"transparent",padding:0,textAlign:"left",cursor:"pointer",fontFamily:"var(--font-sans)",fontSize:a,fontWeight:600,color:"var(--text-strong)",overflowWrap:"anywhere"},children:e.title})}const Pc=e=>({display:"-webkit-box",WebkitLineClamp:e,WebkitBoxOrient:"vertical",overflow:"hidden",overflowWrap:"anywhere"});function z_({spec:e,onStart:t,onDelete:a,onOpenRun:i,onOpenReview:r,onOpenDetail:s,onMarkDone:o,running:l,presenceOn:d}){const c=Ta[e.priority]||Ta.sedang;return n.jsxs(Qe,{padding:16,fill:!0,style:{height:"100%"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:12},children:[n.jsxs("div",{style:{minWidth:0},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-subtle)"},children:e.id}),n.jsx(Oe,{tone:Kt(e.source).tone,size:"sm",icon:Kt(e.source).icon,children:Kt(e.source).label}),e.branchFrom&&n.jsx(Oe,{tone:"neutral",size:"sm",icon:"git-branch",children:e.branchFrom}),n.jsx(Sl,{spec:e}),n.jsx(cr,{names:d}),n.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-muted)"},children:["· ",e.projectId]})]}),n.jsx("div",{style:{marginTop:8,...Pc(2)},children:n.jsx(Al,{spec:e,onOpenDetail:s})}),n.jsx("div",{title:e.objective,style:{fontSize:13,color:"var(--text-muted)",marginTop:4,lineHeight:1.45,...Pc(3)},children:e.objective})]}),n.jsx(Oe,{tone:c.tone,size:"sm",variant:e.priority==="tinggi"?"soft":"outline",children:c.label})]}),n.jsxs("div",{style:{marginTop:"auto",paddingTop:12,borderTop:"1px solid var(--border-hair)"},children:[n.jsx(_l,{stage:e.stage}),n.jsxs("div",{className:"hn-card-footer",style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:10,marginTop:12},children:[n.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)"},children:[e.author,qm(e.createdAt)&&" · ",n.jsx(Tl,{spec:e})]}),n.jsx(Cl,{spec:e,onStart:t,onDelete:a,onOpenRun:i,onOpenReview:r,onMarkDone:o,running:l})]})]})]})}function N_({spec:e,projectName:t,onStart:a,onDelete:i,onOpenRun:r,onOpenReview:s,onOpenDetail:o,onMarkDone:l,running:d,presenceOn:c}){const h=Ta[e.priority]||Ta.sedang;return n.jsxs("div",{className:"hn-backlog-row",style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:"8px 14px",padding:"12px 16px",borderBottom:"1px solid var(--border-hair)",background:"var(--surface-card)"},children:[n.jsx(Ee,{name:Kt(e.source).icon,size:15,color:Kt(e.source).color}),n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-subtle)",flex:"0 0 84px"},children:e.id}),n.jsxs("div",{style:{flex:"1 1 320px",minWidth:240},children:[n.jsx(Al,{spec:e,onOpenDetail:o,size:14}),n.jsx("div",{style:{fontSize:12,color:"var(--text-muted)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.objective})]}),n.jsx(Oe,{tone:"neutral",size:"sm",icon:"folder","data-testid":"spec-project",children:t??e.projectId}),e.branchFrom&&n.jsx(Oe,{tone:"neutral",size:"sm",icon:"git-branch",children:e.branchFrom}),n.jsx(Sl,{spec:e}),n.jsx(Oe,{tone:h.tone,size:"sm",variant:e.priority==="tinggi"?"soft":"outline",children:h.label}),n.jsx(Tl,{spec:e}),n.jsx(cr,{names:c}),n.jsx("div",{style:{flex:"0 0 auto"},children:n.jsx(_l,{stage:e.stage})}),n.jsx(Cl,{spec:e,onStart:a,onDelete:i,onOpenRun:r,onOpenReview:s,onMarkDone:l,running:d})]})}const ur="backlog",Wm="success",F_=Ea[0].key,Ic=[{key:ur,label:"Backlog",icon:"inbox"},...Ea.slice(0,5).map(e=>({key:e.key,label:e.label})),{key:Wm,label:"Success",icon:"check-circle-2"}];function H_(e,t){return e.stage==="done"?Wm:!t&&e.stage==="brainstorming"?ur:e.stage}const Rc=(e,t)=>e===ur&&t===F_;function U_({spec:e,col:t,onOpenDetail:a,onStart:i,onOpenRun:r,onOpenReview:s,onMarkDone:o,running:l,presenceOn:d,onDragStart:c,onDragEnd:h,dragging:p}){const f=Ta[e.priority]||Ta.sedang,b=t===ur;return n.jsxs("div",{draggable:b,onDragStart:k=>{k.dataTransfer.effectAllowed="move",k.dataTransfer.setData("text/plain",e.id),c()},onDragEnd:h,title:b?"Seret ke Brainstorm untuk memulai sesi":"Stage mengikuti fase yang dilaporkan agen — kartu tak bisa dipindah",style:{flex:"0 0 auto",background:"var(--surface-card)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-md)",padding:10,boxShadow:"var(--shadow-xs)",cursor:b?"grab":"default",opacity:p?.4:1},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:6},children:[n.jsx(Ee,{name:Kt(e.source).icon,size:13,color:Kt(e.source).color}),n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)"},children:e.id}),n.jsx("span",{style:{flex:1}}),n.jsx(Tl,{spec:e}),n.jsx(Oe,{tone:f.tone,size:"sm",variant:e.priority==="tinggi"?"soft":"outline",children:e.priority})]}),n.jsx(Al,{spec:e,onOpenDetail:a,size:13}),e.branchFrom&&n.jsx("div",{style:{marginTop:6},children:n.jsx(Oe,{tone:"neutral",size:"sm",icon:"git-branch",children:e.branchFrom})}),(e.blockedBy??[]).length>0&&n.jsx("div",{style:{marginTop:6},children:n.jsx(Sl,{spec:e})}),d!=null&&d.length?n.jsx("div",{style:{marginTop:6},children:n.jsx(cr,{names:d})}):null,n.jsx("div",{style:{marginTop:8},children:n.jsx(Cl,{spec:e,onStart:i,onOpenRun:r,onOpenReview:s,onMarkDone:o,running:l})})]})}function G_({specs:e,activeSpecs:t,presenceBySpec:a,onStart:i,onOpenRun:r,onOpenReview:s,onOpenDetail:o,onMarkDone:l}){const[d,c]=u.useState(null),[h,p]=u.useState(null),f=u.useMemo(()=>{var g;const k=new Map(Ic.map(y=>[y.key,[]]));for(const y of e)(g=k.get(H_(y,t==null?void 0:t.has(y.id))))==null||g.push(y);return k},[e,t]),b=k=>{d&&Rc(d.from,k)&&i&&i(d.spec),c(null),p(null)};return n.jsx("div",{"data-testid":"backlog-board",className:"hn-board-local-overflow",style:{flex:"1 1 auto",minHeight:0,display:"flex",gap:10,overflowX:"auto",overflowY:"hidden",alignItems:"stretch",paddingBottom:4},children:Ic.map(k=>{const g=f.get(k.key),y=!!d&&Rc(d.from,k.key),w=y&&h===k.key;return n.jsxs("div",{onDragOver:v=>{y&&(v.preventDefault(),v.dataTransfer.dropEffect="move",p(k.key))},onDragLeave:()=>p(v=>v===k.key?null:v),onDrop:v=>{v.preventDefault(),b(k.key)},style:{flex:"0 0 244px",display:"flex",flexDirection:"column",minHeight:0,padding:10,borderRadius:"var(--radius-lg)",background:w?"var(--brass-100)":"var(--bone-100)",border:`1px ${y?"dashed":"solid"} ${w?"var(--brass-500)":"var(--border-hair)"}`,opacity:d&&!y?.5:1,transition:"var(--transition-fast)"},children:[n.jsxs("div",{style:{...tn,display:"flex",alignItems:"center",gap:6,marginBottom:8},children:[k.icon&&n.jsx(Ee,{name:k.icon,size:13,color:"var(--text-muted)"}),n.jsx("span",{className:"hn-eyebrow",children:k.label}),n.jsx("span",{style:{flex:1}}),n.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)"},children:g.length})]}),n.jsx("div",{style:{...Fi,display:"flex",flexDirection:"column",gap:8},children:g.map(v=>n.jsx(U_,{spec:v,col:k.key,onOpenDetail:o,onStart:i,onOpenRun:r,onOpenReview:s,onMarkDone:l,running:t==null?void 0:t.has(v.id),presenceOn:a==null?void 0:a.get(v.id),dragging:(d==null?void 0:d.spec.id)===v.id,onDragStart:()=>c({spec:v,from:k.key}),onDragEnd:()=>{c(null),p(null)}},v.id))})]},k.key)})})}const q_=[{value:"grid",label:"Grid",icon:"layout-grid"},{value:"list",label:"List",icon:"list"},{value:"board",label:"Board",icon:"kanban"}];function W_({backlog:e,projects:t,pageSize:a=20,onStart:i,activeSpecs:r,presenceBySpec:s,onDelete:o,onOpenRun:l,onOpenReview:d,onNew:c,onEditBranch:h,onRevertStage:p,onMarkDone:f,onIntegrate:b,onEditSpec:k,onEditDeps:g,onEditAutoMerge:y,onChangeSource:w,onPromoteToQa:v,onPromoteToBrief:x,onPromoteToPrd:_,projectFilter:T,onProjectFilter:E,dataVersion:A,onToast:B,initialDetailId:O}){var Vt;const[ne,Z]=Pt("backlog","tab","all",_a),[P,D]=u.useState(0),[W,F]=Pt("backlog","view","grid",Gs("grid","list","board")),[N,ee]=Pt("backlog","q","",_a),[J,H]=Pt("backlog","stage","all",_a),[K,me]=Pt("backlog","prio","all",_a),[He,fe]=Pt("backlog","dateField","created",Gs("created","started")),[Te,ze]=Pt("backlog","from","",_a),[Me,Ye]=Pt("backlog","to","",_a),I=T,be=E,[Re,Ze]=Pt("backlog","detailId",null,Oh);u.useEffect(()=>{O&&Ze(O)},[O]);const oe=t||[...new Set(e.map(q=>q.projectId))].map(q=>({id:q,name:q})),[je,Ce]=u.useState(()=>({items:e.map(q=>({objective:"",...q})),total:e.length})),[ke,Ue]=Pt("backlog","page",1,cl),[Je,rt]=u.useState(()=>N.trim()),[et,xt]=u.useState(!1),kt=u.useRef(!1),pt=[ne!=="all",I!=="all",N.trim()!=="",J!=="all",K!=="all",Te!=="",Me!==""].filter(Boolean).length,gt=ul("backlog","scroll",je.items.length>0),ae=()=>be("all");u.useEffect(()=>{const q=setTimeout(()=>rt(N.trim()),250);return()=>clearTimeout(q)},[N]),Fh(JSON.stringify([ne,I,J,K,Je,W,He,Te,Me]),()=>Ue(1)),u.useEffect(()=>{var wt;let q=!0;const qe=(wt=Y.listSpecs)==null?void 0:wt.call(Y,{project:I==="all"?void 0:I,source:ne==="all"?void 0:ne,q:Je||void 0,stage:J==="all"?void 0:J,priority:K==="all"?void 0:K,dateField:Te||Me?He:void 0,from:Te||void 0,to:Me||void 0,page:W==="board"?void 0:ke,limit:W==="board"?void 0:a});return qe==null||qe.then(ca=>{q&&(Ce({items:ca.items,total:ca.total}),kt.current=!1,xt(!1))}).catch(()=>{q&&(kt.current||(kt.current=!0,B==null||B("Gagal menyegarkan backlog — jumlah & daftar di layar mungkin basi","warn")),xt(!0))}),()=>{q=!1}},[ne,I,J,K,Je,W,ke,a,A,P,He,Te,Me]);const tt=u.useMemo(()=>new Map(e.map(q=>[q.id,q])),[e]),X=u.useMemo(()=>je.items.map(q=>Ur(q,tt.get(q.id))),[je.items,tt]),[de,at]=u.useState(null);u.useEffect(()=>{if(!Re||!Y.getSpec){at(null);return}let q=!0;return Y.getSpec(Re).then(qe=>{q&&at(qe)}).catch(qe=>{!q||!(qe instanceof lt)||qe.status!==404||(Ze(null),B==null||B(`${Re} sudah tidak ada`,"warn"))}),()=>{q=!1}},[Re,A]);const Ft=u.useMemo(()=>{if(!Re)return null;const q=tt.get(Re);if((de==null?void 0:de.id)===Re)return Ur(de,q);const qe=je.items.find(wt=>wt.id===Re);return qe?Ur(qe,q):q?{objective:"",...q}:null},[Re,de,je.items,tt]),Ht=Vi(je.total,ke,a);return n.jsxs("div",{style:tl,children:[n.jsxs("div",{className:"hn-backlog-controls",role:"region","aria-label":"Kontrol backlog",style:{...tn,marginBottom:18},children:[n.jsxs("div",{className:"hn-backlog-topline",style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,flexWrap:"wrap",marginBottom:12},children:[n.jsx(Ia,{"aria-label":"Sumber backlog",variant:"pill",value:ne,onChange:Z,tabs:[{value:"all",label:"Semua spec"},{value:"brief",label:"Dari brief"},{value:"qa",label:"Dari QA"},{value:"audit",label:"Audit"},{value:"goal",label:"Goal"},{value:"help",label:"Help Center"},{value:"no_effort",label:"Tanpa effort"}]}),n.jsxs("div",{className:"hn-backlog-view-actions",style:{display:"flex",alignItems:"center",gap:10},children:[n.jsx(Ia,{variant:"pill",value:W,onChange:F,tabs:q_,"aria-label":"Mode tampilan"}),n.jsx(P_,{onDone:()=>D(q=>q+1),onToast:B??(()=>{})}),n.jsx(Wh,{screen:"backlog",active:pt,onReset:ae}),n.jsxs("span",{className:"hn-eyebrow",role:"status",style:et?{color:"var(--amber-600)"}:void 0,title:et?"Server tak menjawab saat menyegarkan — angka ini dari muatan terakhir yang berhasil":void 0,children:[je.total," spec",et?" · basi":""]})]})]}),n.jsxs("div",{className:"hn-backlog-filters",style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[n.jsx(We,{size:"sm",leftIcon:"search",placeholder:"mis. invoice atau SPEC-412","aria-label":"Cari backlog",value:N,onChange:q=>ee(q.target.value),style:{flex:"1 1 220px"}}),n.jsx(Be,{size:"sm","aria-label":"Filter project",value:I,onChange:q=>be(q.target.value),options:[{value:"all",label:"Semua project"}].concat(oe.map(q=>({value:q.id,label:q.name})))}),n.jsx(Be,{size:"sm","aria-label":"Filter stage",value:J,onChange:q=>H(q.target.value),options:[{value:"all",label:"Semua stage"}].concat(Ea.map(q=>({value:q.key,label:q.label})))}),n.jsx(Be,{size:"sm","aria-label":"Filter prioritas",value:K,onChange:q=>me(q.target.value),options:[{value:"all",label:"Semua prioritas"},{value:"tinggi",label:"Tinggi"},{value:"sedang",label:"Sedang"},{value:"rendah",label:"Rendah"}]}),n.jsx(Be,{size:"sm","aria-label":"Filter tanggal berdasarkan",value:He,onChange:q=>fe(q.target.value),options:[{value:"created",label:"Dibuat"},{value:"started",label:"Dikerjakan"}]}),n.jsx(We,{size:"sm",type:"date","aria-label":"Tanggal dari",value:Te,onChange:q=>ze(q.target.value),style:{flex:"0 0 auto"}}),n.jsx("span",{className:"hn-eyebrow","aria-hidden":"true",children:"→"}),n.jsx(We,{size:"sm",type:"date","aria-label":"Tanggal sampai",value:Me,onChange:q=>Ye(q.target.value),style:{flex:"0 0 auto"}})]})]}),je.total===0?e.length===0?n.jsx(ye,{kind:"empty",illustration:"PST-002",title:"Backlog masih kosong",hint:"Filekan feature brief atau QA finding — hanoman menjalankannya dari brainstorm sampai execute.",action:c,actionLabel:"Tambah spec"}):n.jsx(ye,{kind:"empty",icon:"filter",title:"Tidak ada spec untuk filter ini",hint:`${e.length} spec ada di backlog, tapi tak ada yang cocok dengan filter aktif.`,action:()=>{Z("all"),be("all"),ee(""),H("all"),me("all"),fe("created"),ze(""),Ye("")},actionLabel:"Reset filter",actionIcon:"rotate-ccw"}):W==="board"?n.jsx(G_,{specs:X,activeSpecs:r,presenceBySpec:s,onMarkDone:f,onStart:i,onOpenRun:l,onOpenReview:d,onOpenDetail:q=>Ze(q.id)}):n.jsxs(n.Fragment,{children:[W==="list"?n.jsx("div",{ref:gt,"data-testid":"backlog-scroll",className:"hn-backlog-list",style:{...Fi,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-lg)",overflowX:"hidden"},children:X.map(q=>{var qe;return n.jsx(N_,{spec:q,projectName:(qe=t.find(wt=>wt.id===q.projectId))==null?void 0:qe.name,onStart:i,running:r==null?void 0:r.has(q.id),presenceOn:s==null?void 0:s.get(q.id),onDelete:o,onOpenRun:l,onOpenReview:d,onMarkDone:f,onOpenDetail:wt=>Ze(wt.id)},q.id)})}):n.jsx("div",{ref:gt,"data-testid":"backlog-scroll",className:"hn-backlog-grid",style:{...Fi,display:"grid",gap:12,gridTemplateColumns:"repeat(auto-fill, minmax(min(340px, 100%), 1fr))",gridAutoRows:"1fr"},children:X.map(q=>n.jsx(z_,{spec:q,onStart:i,running:r==null?void 0:r.has(q.id),presenceOn:s==null?void 0:s.get(q.id),onDelete:o,onOpenRun:l,onOpenReview:d,onMarkDone:f,onOpenDetail:qe=>Ze(qe.id)},q.id))}),n.jsx("div",{style:{...tn,marginTop:14,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-lg)",overflow:"hidden"},children:n.jsx(Yi,{page:Ht.page,pageCount:Ht.pageCount,total:je.total,from:Ht.from,to:Ht.to,onPage:Ue,unit:"spec"})})]}),n.jsx(O_,{spec:Ft,onClose:()=>Ze(null),onEditBranch:h,onRevertStage:p,onMarkDone:f,onOpenReview:d,onStart:i,onIntegrate:b,onEditSpec:k,onPromoteToQa:v,onPromoteToBrief:x,onPromoteToPrd:_,onEditDeps:g,onEditAutoMerge:y,onChangeSource:w,projectPolicy:(Vt=t.find(q=>{var qe;return q.id===((qe=e.find(wt=>wt.id===Re))==null?void 0:qe.projectId)}))==null?void 0:Vt.autoMerge,allSpecs:e,onAttachmentToast:(q,qe)=>B==null?void 0:B(q,qe??"ok","paperclip")})]})}const Lc=20,$c={brainstorm:"Brainstorming",tanya:"Bertanya"},Wr=e=>e?new Date(e).toLocaleDateString("id-ID",{day:"numeric",month:"short",year:"numeric"}):"—";function K_({projectId:e}){const[t,a]=u.useState(null),[i,r]=u.useState(0),[s,o]=u.useState(null),[l,d]=u.useState(1),[c,h]=u.useState(null),[p,f]=u.useState(""),[b,k]=u.useState(null),g=u.useCallback(()=>{jr.listSessions(e,{page:l,limit:Lc}).then(x=>{a(x.items),r(x.total),o(x.kuota)}).catch(()=>{a([]),r(0),o(null)})},[e,l]);u.useEffect(()=>{h(null),g()},[g]),u.useEffect(()=>{d(1)},[e]);const y=x=>{k(null),f(""),jr.getSession(x).then(h).catch(()=>h(null))},w=async()=>{if(!(!c||!p.trim()))try{const x=await jr.materializePrd(c.id,p.trim());k(`PRD tersimpan di ${x.path}. Ia BELUM jadi backlog — eskalasi tetap keputusan Anda.`),g()}catch(x){k(x instanceof Error?x.message:"gagal menulis PRD")}};if(t===null)return n.jsx(ye,{kind:"loading",title:"Memuat obrolan…"});const v=Vi(i,l,Lc);return n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[s&&n.jsxs("div",{"data-testid":"portal-chat-kuota",style:{fontSize:12.5,color:"var(--text-muted)",lineHeight:1.6},children:["Jatah bulan ini — Brainstorming ",n.jsxs("b",{children:[s.brainstorm.terpakai," / ",s.brainstorm.jatah]})," · ","Bertanya ",n.jsxs("b",{children:[s.tanya.terpakai," / ",s.tanya.jatah]})," · ","reset ",Wr(s.resetPada),!s.enabled&&" · obrolan portal sedang MATI di Settings"]}),t.length===0?n.jsx(ye,{kind:"empty",icon:"messages-square",title:"Belum ada obrolan",hint:"Begitu klien memulai obrolan di portal, sesinya muncul di sini."}):n.jsxs(n.Fragment,{children:[n.jsx(Qe,{padding:0,children:t.map(x=>n.jsxs("button",{type:"button","data-testid":`portal-chat-row-${x.id}`,onClick:()=>y(x.id),style:{display:"flex",alignItems:"center",gap:12,width:"100%",textAlign:"left",padding:"12px 16px",background:"none",border:"none",borderBottom:"1px solid var(--border-hair)",cursor:"pointer"},children:[n.jsx("span",{style:{fontSize:12.5,color:"var(--text-muted)",width:110},children:$c[x.type]??x.type}),n.jsx("span",{style:{flex:1,minWidth:0,color:"var(--text-strong)"},children:x.summary||"Belum ada ringkasan"}),x.prdSiap&&n.jsx(Va,{status:x.prdDocPath?"ok":"warn",size:"sm",children:x.prdDocPath?"PRD dokumen":"PRD draft"}),n.jsx("span",{style:{fontSize:12.5,color:"var(--text-muted)"},children:x.clientEmail}),n.jsx("span",{style:{fontSize:12.5,color:"var(--text-muted)"},children:Wr(x.createdAt)})]},x.id))}),n.jsx(Yi,{page:v.page,pageCount:v.pageCount,total:i,from:v.from,to:v.to,onPage:d,unit:"obrolan"})]}),c&&n.jsxs(Qe,{eyebrow:`${$c[c.type]??c.type} · ${c.clientEmail}`,title:c.summary||"Obrolan",children:[n.jsx("div",{"data-testid":"portal-chat-transkrip",style:{display:"flex",flexDirection:"column",gap:10,marginBottom:14},children:c.messages.map(x=>n.jsxs("div",{style:{padding:"10px 12px",borderRadius:"var(--radius-lg)",border:`1px solid ${x.blocked?"var(--status-err)":"var(--border-hair)"}`,background:x.role==="klien"?"var(--bone-100)":"var(--surface-card)"},children:[n.jsxs("div",{style:{fontSize:11.5,color:"var(--text-muted)",marginBottom:4},children:[x.role==="klien"?"Klien":"hanoman"," · ",Wr(x.createdAt)]}),n.jsx("div",{style:{whiteSpace:"pre-wrap",lineHeight:1.6},children:x.text}),x.blocked&&n.jsxs("div",{style:{marginTop:8,fontSize:12.5,color:"var(--text-muted)"},children:[n.jsx("b",{children:"Diblokir"})," (",(x.blockReasons??[]).join(", "),") — teks asli agen:",n.jsx("div",{style:{whiteSpace:"pre-wrap",marginTop:4},children:x.rawText})]})]},x.id))}),c.prdMarkdown&&n.jsxs(n.Fragment,{children:[n.jsx("div",{"data-testid":"portal-chat-prd",style:{border:"1px solid var(--border-hair)",borderRadius:"var(--radius-lg)",padding:"12px 14px",marginBottom:12},children:n.jsx(lr,{text:c.prdMarkdown,name:"prd-draft.md"})}),n.jsxs("div",{style:{display:"flex",gap:10,alignItems:"center",flexWrap:"wrap"},children:[n.jsx(We,{"data-testid":"portal-chat-slug","aria-label":"Slug dokumen PRD",placeholder:"nama-dokumen",value:p,style:{width:240},onChange:x=>f(x.target.value)}),n.jsx(V,{"data-testid":"portal-chat-jadikan-prd",disabled:!p.trim(),onClick:()=>void w(),children:"Jadikan dokumen PRD"}),n.jsxs("span",{style:{fontSize:12.5,color:"var(--text-muted)"},children:["Menyimpan ke ",n.jsx("code",{children:"docs/prd/"}),". Tidak membuat backlog."]})]})]}),b&&n.jsx("p",{style:{marginTop:10,fontSize:12.5,color:"var(--text-muted)"},children:b})]})]})}function Km({projects:e,defaultProject:t,onClose:a,onCreate:i,prefill:r,lockProject:s}){var f;const[o,l]=u.useState(t||((f=e[0])==null?void 0:f.id)||""),[d,c]=u.useState({title:(r==null?void 0:r.title)??"",context:(r==null?void 0:r.context)??"",outcome:(r==null?void 0:r.outcome)??"",constraints:(r==null?void 0:r.constraints)??""}),h=b=>k=>c(g=>({...g,[b]:k.target.value})),p=()=>{!d.title.trim()||!o||i(o,{title:d.title.trim(),context:d.context,outcome:d.outcome,constraints:d.constraints||void 0})};return n.jsxs(mt,{open:!0,onClose:a,icon:"scroll-text",eyebrow:"PM → hanoman",title:"PRD baru",footer:n.jsxs(n.Fragment,{children:[n.jsx(V,{variant:"ghost",size:"sm",onClick:a,children:"Batal"}),n.jsx(V,{size:"sm",leftIcon:"messages-square",onClick:p,children:"Buat brief → brainstorm PRD"})]}),children:[n.jsxs("div",{style:{fontSize:12,color:"var(--text-subtle)",marginBottom:12,lineHeight:1.5},children:["hanoman membuka sesi brainstorm interaktif di terminal, lalu menulis dokumen PRD ke ",n.jsx("code",{children:"docs/prd/"}),"."]}),n.jsx(ge,{label:"Project",hint:"Tujuan penulisan docs/prd/ — pilih di sini, tak perlu memfilter daftar dulu",children:n.jsx(Be,{"aria-label":"Project untuk PRD baru",value:o,disabled:s,onChange:b=>l(b.target.value),style:{width:"100%"},options:e.map(b=>({value:b.id,label:b.name}))})}),n.jsx(ge,{label:"Judul",children:n.jsx(We,{value:d.title,onChange:h("title"),placeholder:"mis. Jadwal Invoice Berulang",style:{width:"100%"}})}),n.jsx(ge,{label:"Konteks",hint:"Latar belakang & alasan fitur ini dibutuhkan",children:n.jsx(zt,{value:d.context,onChange:h("context"),rows:3,placeholder:"mis. operator harus membuka tiga layar untuk tahu sesi mana yang menunggu"})}),n.jsx(ge,{label:"Hasil yang diharapkan",children:n.jsx(zt,{value:d.outcome,onChange:h("outcome"),rows:2,placeholder:"mis. satu badge di Overview menunjukkan jumlah sesi yang menunggu"})}),n.jsx(ge,{label:"Batasan",hint:"opsional",children:n.jsx(We,{value:d.constraints,onChange:h("constraints"),placeholder:"mis. reuse queue yang ada",style:{width:"100%"}})})]})}const V_={draft:"neutral",dieskalasi:"info",terwujud:"ok"};function Vm({prd:e}){return n.jsx(Oe,{tone:V_[e.status],size:"sm",children:e.specCount>0?`${e.status} ${e.doneCount}/${e.specCount}`:e.status})}function Y_({prd:e,projectId:t,onTake:a,onStartBreakdown:i,onMaterialize:r}){const[s,o]=u.useState(null),[l,d]=u.useState([]),[c,h]=u.useState([]),[p,f]=u.useState(!1),[b,k]=u.useState(!1);u.useEffect(()=>{let v=!0;return o(null),Y.getPrd(t,e.path).then(x=>{v&&o(x.content)}).catch(()=>{v&&o("")}),()=>{v=!1}},[t,e.path]),u.useEffect(()=>{let v=!0;return Y.getBreakdown(t,e.path).then(x=>{v&&(d(x.items),h(x.items.map(()=>!0)))}).catch(()=>{v&&(d([]),h([]))}),()=>{v=!1}},[t,e.path]);const g={project:t,title:e.title,prdPath:e.path,branchFrom:Hw(e.path)},y=l.filter((v,x)=>c[x]),w=async()=>{if(y.length){f(!0);try{await r(t,e.path,y)}finally{f(!1)}}};return n.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[n.jsxs("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:12,marginBottom:14},children:[n.jsxs("div",{style:{minWidth:0},children:[n.jsx("div",{className:"hn-eyebrow",style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)",marginBottom:4},children:e.path}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[n.jsx("div",{style:{fontFamily:"var(--font-sans)",fontSize:18,fontWeight:700,color:"var(--text-strong)"},children:e.title}),n.jsx(Vm,{prd:e})]})]}),n.jsxs("div",{style:{display:"flex",gap:8,flexShrink:0,alignItems:"center"},children:[n.jsx(qh,{href:v=>Y.prdDownloadUrl(t,e.path,v),disabled:s===null}),n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"list-checks",onClick:()=>k(!0),children:"Take ke backlog"}),n.jsx(V,{size:"sm",leftIcon:"split",onClick:()=>i(t,e.path),children:"Breakdown ke backlog"})]})]}),l.length>0&&n.jsxs("div",{style:{border:"1px solid var(--brass-200)",borderRadius:"var(--radius-sm)",background:"var(--brass-50)",padding:12,marginBottom:14},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:8,gap:8},children:[n.jsxs("div",{style:{fontFamily:"var(--font-sans)",fontWeight:700,fontSize:13,color:"var(--brass-700)"},children:["Usulan backlog paralel (",y.length,"/",l.length,")"]}),n.jsx(V,{size:"sm",leftIcon:"plus",disabled:!y.length||p,onClick:w,children:p?"Membuat…":`Buat ${y.length} backlog`})]}),l.map((v,x)=>n.jsxs("label",{style:{display:"flex",gap:8,alignItems:"flex-start",padding:"6px 0",borderTop:x?"1px solid var(--border-hair)":"none",cursor:"pointer"},children:[n.jsx("input",{type:"checkbox",checked:c[x]??!1,onChange:_=>h(T=>T.map((E,A)=>A===x?_.target.checked:E))}),n.jsxs("div",{style:{minWidth:0},children:[n.jsxs("div",{style:{fontSize:13,fontWeight:600,color:"var(--text-strong)",display:"flex",alignItems:"center",gap:6,flexWrap:"wrap"},children:[v.title," ",n.jsx(Oe,{tone:"brass",size:"sm",children:v.priority})]}),v.outcome&&n.jsx("div",{style:{fontSize:12,color:"var(--text-subtle)"},children:v.outcome})]})]},x))]}),n.jsx("div",{style:{flex:"1 1 auto",minHeight:0,overflowY:"auto"},children:s===null?n.jsx(ye,{kind:"loading",title:"Memuat PRD…"}):n.jsx(lr,{text:s,name:e.name})}),b&&n.jsx(mt,{open:!0,onClose:()=>k(!1),icon:"list-checks",eyebrow:"PRD → backlog",title:"Take PRD ke backlog",footer:n.jsx(V,{variant:"ghost",size:"sm",onClick:()=>k(!1),children:"Batal"}),children:n.jsxs("div",{style:{display:"grid",gap:16},children:[n.jsxs("div",{children:[n.jsx(V,{leftIcon:"lightbulb",onClick:()=>{k(!1),a({...g,kind:"brief",context:`Dari PRD: ${e.path}`,outcome:""})},children:"Sebagai feature brief"}),n.jsx("div",{style:{fontSize:12.5,color:"var(--text-muted)",marginTop:6,lineHeight:1.5},children:"Sesi menjalankan pipeline penuh: brainstorm → objective → spec → plan → execute."})]}),n.jsxs("div",{children:[n.jsx(V,{leftIcon:"target",variant:"secondary",onClick:()=>{k(!1),a({...g,kind:"goal",context:"",outcome:"",goal:`Wujudkan PRD ${e.path}`})},children:"Sebagai goal"}),n.jsx("div",{style:{fontSize:12.5,color:"var(--text-muted)",marginTop:6,lineHeight:1.5},children:"Sesi dua fase (Goal → Verifikasi) yang langsung mengejar goal-nya, tanpa brainstorm, spec, maupun plan. Mode goal selalu aktif."})]})]})})]})}function Z_(e){const t=[],a=new Map;for(const i of e){let r=a.get(i.projectId);r||(r={projectId:i.projectId,projectName:i.projectName,items:[]},a.set(i.projectId,r),t.push(i.projectId)),r.items.push(i)}return t.map(i=>a.get(i))}function J_({prd:e,active:t,onSelect:a}){const[i,r]=u.useState(!1);return n.jsxs("button",{onClick:a,onMouseEnter:()=>r(!0),onMouseLeave:()=>r(!1),style:{display:"block",width:"100%",textAlign:"left",cursor:"pointer",border:"none",borderRadius:"var(--radius-sm)",padding:"8px 10px",marginBottom:2,background:t?"var(--brass-100)":i?"var(--bone-200)":"transparent"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:7,marginBottom:3,flexWrap:"wrap"},children:[n.jsx(Ee,{name:"scroll-text",size:13,color:t?"var(--brass-700)":"var(--brass-500)"}),n.jsx("span",{style:{fontFamily:"var(--font-sans)",fontSize:14,fontWeight:600,color:t?"var(--brass-700)":"var(--text-strong)"},children:e.title}),n.jsx(Vm,{prd:e}),e.live&&n.jsx(Oe,{tone:"brass",size:"sm",children:"sesi hidup"})]}),n.jsx("div",{style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--text-subtle)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:e.path})]})}function X_({projects:e,projectFilter:t,onProjectFilter:a,onNewPrd:i,onTakeToBacklog:r,onStartBreakdown:s,onMaterialize:o,dataVersion:l}){const[d,c]=u.useState([]),[h,p]=Pt("prd","sel",null,Oh),[f,b]=u.useState("list"),k=u.useMemo(()=>d.find(P=>P.slug===h)??null,[d,h]),g=u.useCallback(P=>p(P?P.slug:null),[p]),[y,w]=u.useState(!1),[v,x]=Pt("prd","status","all",Gs("all",...co)),_=t==="all",T=_?"":t;u.useEffect(()=>{g(null)},[t,v]),u.useEffect(()=>{let P=!0;return(_?Y.listAllPrds():T?Y.listPrds(T):Promise.resolve({items:[]})).then(W=>{P&&c(W.items)}).catch(()=>{P&&c([])}),()=>{P=!1}},[t,l]);const[E,A]=u.useState(!1),B=v==="all"?d:d.filter(P=>P.status===v),O=Z_(B),ne=k?k.projectId||T:"",Z=[{value:"all",label:"Semua project"}].concat(e.map(P=>({value:P.id,label:P.name})));return n.jsxs("div",{style:tl,children:[n.jsxs("div",{className:"hn-stack-mobile",style:{...tn,display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginBottom:18},children:[n.jsxs("div",{className:"hn-wrap-mobile",style:{display:"flex",alignItems:"center",gap:8},children:[n.jsx(Be,{size:"sm",value:t,"aria-label":"Project",onChange:P=>a(P.target.value),options:Z}),n.jsx(Be,{size:"sm",value:v,"aria-label":"Status PRD",onChange:P=>x(P.target.value),options:[{value:"all",label:"Semua status"}].concat(co.map(P=>({value:P,label:P})))}),n.jsx(Wh,{screen:"prd",active:v==="all"?0:1})]}),n.jsxs("div",{style:{display:"flex",gap:8},children:[!_&&n.jsx(V,{size:"sm",variant:E?"primary":"ghost",leftIcon:"messages-square",onClick:()=>A(P=>!P),children:"Draft dari portal klien"}),n.jsx(V,{size:"sm",leftIcon:"plus",onClick:()=>w(!0),children:"PRD baru"})]})]}),E&&!_&&n.jsx("div",{style:{...tn,marginBottom:18},children:n.jsx(K_,{projectId:t})}),n.jsx(ll,{ariaLabel:"Panel PRD",active:f,onActiveChange:P=>b(P),masterWidth:264,panels:[{id:"list",label:"Daftar",className:"hn-panel-flex",content:n.jsx("aside",{"aria-label":"Daftar PRD",style:{width:"100%",minHeight:0,overflowY:"auto",borderRight:"1px solid var(--border-hair)",paddingRight:12},children:d.length===0?n.jsx(ye,{kind:"empty",icon:"scroll-text",title:"Belum ada PRD",hint:"Buat PRD dari brief + brainstorm; hanoman menulisnya ke docs/prd/ lalu bisa di-take jadi backlog.",action:()=>w(!0),actionLabel:"PRD baru"}):B.length===0?n.jsx(ye,{kind:"empty",icon:"filter",compact:!0,title:`Tak ada PRD berstatus "${v}"`,hint:"Longgarkan filter status untuk melihat PRD lainnya.",action:()=>x("all"),actionLabel:"Semua status"}):O.map(P=>n.jsxs("div",{style:{marginBottom:10},children:[_&&n.jsx("div",{className:"hn-eyebrow",style:{fontFamily:"var(--font-sans)",fontSize:11,fontWeight:600,letterSpacing:.3,textTransform:"uppercase",color:"var(--text-subtle)",padding:"6px 10px 4px"},children:P.projectName}),P.items.map(D=>n.jsx(J_,{prd:D,active:(k==null?void 0:k.path)===D.path&&(k==null?void 0:k.projectId)===D.projectId,onSelect:()=>{g(D),b("detail")}},`${D.projectId}:${D.path}`))]},P.projectId))})},{id:"detail",label:"Detail",className:"hn-panel-flex",content:n.jsx("div",{style:{flex:"1 1 auto",minHeight:0},children:k?n.jsx(Y_,{prd:k,projectId:ne,onTake:P=>r(P),onStartBreakdown:s,onMaterialize:o}):n.jsx(ye,{kind:"empty",icon:"scroll-text",title:"Pilih PRD",hint:"Klik dokumen di daftar kiri untuk melihat isinya, lalu take ke backlog."})})}]}),y&&n.jsx(Km,{projects:e,defaultProject:T,onClose:()=>w(!1),onCreate:(P,D)=>{w(!1),i(P,D)}})]})}const Bc={ready:"siap",sleeping:"tidur",working:"sedang bekerja",deciding:"sedang diputuskan lead",waiting:"menunggu jawabanmu",blocked:"tertahan",shipped:"baru saja selesai",review:"menunggu review","docs-updated":"dokumen baru terbit",offline:"tak terhubung"},Kr={offline:"koneksi terputus",failed:"sesi gagal",blocked:"backlog tertahan dependency",waiting:"sesi menunggu jawabanmu",deciding:"sesi sedang diputuskan lead",shipped:"kabar selesai","docs-updated":"dokumen terbit",working:"sesi berjalan",review:"sesi menunggu review",ready:"backlog siap dikerjakan"},Vr=45e3,Ym=6e3,Dc=30*6e4,Mo=10*6e4,Zm="hanoman.pet.hidden",Jm="hanoman.pet.roam",Xm=new Set(["done","automerge"]),Qm={connected:!0,since:0,paused:!1},Vs=e=>[...e].sort((t,a)=>t.id.localeCompare(a.id)),xn=e=>e.specId??e.id,Q_=(e,t)=>t.specId?e.find(a=>a.id===t.specId):void 0,e5=e=>new Date(e).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),ep=e=>e.reduce((t,a)=>a.createdAt>t?a.createdAt:t,""),t5=(e,t)=>`${e.filter(a=>!a.exited).map(a=>a.id).sort().join(",")}|${ep(t)}`,hr=e=>new Set(e.filter(t=>t.stage==="done").map(t=>t.id));function mr(e,t){const a=!!e.specId&&t.has(e.specId);return e.exited?e.exitCode?"failed":a?"review":null:e.decision&&!e.deciding?"waiting":e.deciding?"deciding":a?"review":"working"}const a5=(e,t)=>{const a=hr(t);return Vs(e).filter(i=>mr(i,a)==="waiting")},n5=(e,t)=>{const a=hr(t);return Vs(e).filter(i=>mr(i,a)==="deciding")};function i5(e){const{sessions:t,backlog:a,notifications:i,now:r}=e,s=e.connection??Qm,o=[];!s.connected&&!s.paused&&r-s.since>=Ym&&o.push({kind:"offline",pose:"offline",headline:`Tak terhubung sejak ${e5(s.since)}`,detail:"Dashboard menyambung ulang sendiri; yang tertulis di bawah adalah data terakhir.",count:1,subject:null,since:s.since,target:null,recheckAt:null});const l=hr(a),d=new Set(a.filter(O=>O.source==="audit").map(O=>O.id)),c=t.filter(O=>!O.exited),h=new Map;for(const O of Vs(t)){const ne=mr(O,l);ne&&h.set(ne,[...h.get(ne)??[],O])}const p=O=>h.get(O)??[],f=Vs(a.filter(O=>{var ne;return O.stage!=="done"&&(((ne=O.blockedBy)==null?void 0:ne.length)??0)>0})),b=(O,ne,Z,P,D=null)=>{var W;return{kind:O,pose:ne,headline:P(Z[0]),detail:((W=Q_(a,Z[0]))==null?void 0:W.title)??"Sesi terminal",count:Z.length,subject:xn(Z[0]),since:D,target:{section:"terminal",sessionId:Z[0].id},recheckAt:null}},k=O=>{const ne=O.map(Z=>Z.decisionAt?Date.parse(Z.decisionAt):NaN).filter(Z=>Number.isFinite(Z));return ne.length>0?Math.min(...ne):null},g=p("failed"),y=g[0];y&&o.push({kind:"failed",pose:"blocked",headline:`${xn(y)} · sesi gagal`,detail:`Keluar dengan exit ${y.exitCode}`,count:g.length,subject:xn(y),since:null,target:{section:"terminal",sessionId:y.id},recheckAt:null});const w=f[0],v=()=>({kind:"blocked",pose:"blocked",headline:`${w.id} · tertahan dependency`,detail:`Menunggu ${(w.blockedBy??[]).map(O=>O.id).join(", ")}`,count:f.length,subject:w.id,since:null,target:{section:"backlog"},recheckAt:null});if(w&&c.length===0&&o.push(v()),p("waiting").length){const O=k(p("waiting"));o.push({...b("waiting","waiting",p("waiting"),ne=>`Menunggu jawabanmu · ${xn(ne)}`,O),recheckAt:O!==null&&r-O<Mo?O+Mo:null})}p("deciding").length&&o.push(b("deciding","deciding",p("deciding"),O=>`${xn(O)} · lead sedang memutuskan`));const x=i.filter(O=>Date.parse(O.createdAt)+Vr>r),_=O=>[...O].sort((ne,Z)=>Z.createdAt.localeCompare(ne.createdAt))[0],T=x.filter(O=>Xm.has(O.type)&&!(O.specId&&d.has(O.specId))),E=x.filter(O=>O.type==="done"&&!!O.specId&&d.has(O.specId)),A=_(T),B=_(E);return A&&o.push({kind:"shipped",pose:"shipped",headline:`${A.specId??"Backlog"} · selesai`,detail:A.title,count:T.length,subject:A.specId??"Backlog",since:null,target:{section:"backlog"},recheckAt:Date.parse(A.createdAt)+Vr}),B&&o.push({kind:"docs-updated",pose:"docs-updated",headline:`${B.specId??"Audit"} · dokumen terbit`,detail:B.title,count:E.length,subject:B.specId??"Audit",since:null,target:{section:"backlog"},recheckAt:Date.parse(B.createdAt)+Vr}),p("working").length&&o.push(b("working","working",p("working"),O=>`${xn(O)} · sedang berjalan`)),p("review").length&&o.push(b("review","review",p("review"),O=>`${xn(O)} · menunggu review`)),w&&c.length>0&&o.push(v()),o}const s5=(e,...t)=>{const a=t.filter(i=>i!==null&&i>e);return a.length>0?Math.min(...a):null};function r5(e){const{backlog:t,now:a,quietSince:i}=e,r=e.connection??Qm,s=i5(e),o=t.filter(b=>{var k;return b.stage!=="done"&&(((k=b.blockedBy)==null?void 0:k.length)??0)===0}),l=i!==void 0&&a-i>=Dc,d={kind:"ready",pose:l?"sleeping":"ready",headline:l?"Tidur — tak ada kabar 30 menit terakhir":o.length>0?`${o.length} backlog siap dikerjakan`:"Tidak ada pekerjaan siap",detail:l?"Bangun sendiri begitu ada sesi atau notifikasi baru.":"Tak ada sesi yang berjalan",count:1,subject:null,since:null,target:{section:"backlog"},recheckAt:null},c=s.length>0?s:[d],h=c[0],p=!r.connected&&!r.paused?r.since+Ym:null,f=s.length===0&&i!==void 0&&!l?i+Dc:null;return{...h,recheckAt:s5(a,h.recheckAt,p,f),conditions:c}}function o5(){try{return localStorage.getItem(Zm)==="1"}catch{return!1}}function l5(e){try{localStorage.setItem(Zm,e?"1":"0")}catch{}}function d5(){try{return localStorage.getItem(Jm)!=="0"}catch{return!0}}function c5(e){try{localStorage.setItem(Jm,e?"1":"0")}catch{}}const Oc=5e3,u5=12e3,h5=5*6e4,m5=new Set(["shipped","docs-updated","waiting","offline"]),p5={shipped:"selesai","docs-updated":"dokumen terbit",waiting:"butuh jawabanmu"},g5={shipped:"kabar","docs-updated":"dokumen",waiting:"sesi"},tp=(e,t)=>e.kind==="waiting"&&e.since!==null&&t-e.since>=Mo;function f5(e){const t=Math.floor(e/6e4);if(t<1)return`${Math.max(0,Math.floor(e/1e3))} detik`;if(t<60)return`${t} menit`;const a=Math.floor(t/60),i=t%60;return i>0?`${a} jam ${i} menit`:`${a} jam`}function b5(e,t){if(!m5.has(e.kind))return null;if(e.kind==="offline")return{kind:"pose",text:"Aku kehilangan sambungan",ttl:Oc};let a=`${e.subject??"Backlog"} ${p5[e.kind]}`;return e.count>1&&(a+=` · ${e.count} ${g5[e.kind]}`),tp(e,t)&&(a+=` — ${f5(t-e.since)}`),{kind:"pose",text:a,ttl:Oc}}function ap(e){const t=hr(e.backlog),a={};for(const i of e.sessions){const r=mr(i,t);r&&(a[i.id]=r)}return{at:e.now,sessions:a,notifiedAt:ep(e.notifications)}}function k5(e,t){const a=ap(t),i=d=>Object.entries(a.sessions).filter(([c,h])=>h===d&&e.sessions[c]!==d).length,r=t.notifications.filter(d=>Xm.has(d.type)&&d.createdAt>e.notifiedAt).length,s=i("waiting"),o=i("failed"),l=[r>0?`${r} selesai`:"",s>0?`${s} menunggu`:"",o>0?`${o} gagal`:""].filter(Boolean);return l.length>0?{kind:"recap",text:l.join(" · "),ttl:u5}:null}const y5="PET-001",v5=2,x5={w:192,h:208},w5=8,j5={x:.62,baseline:202},S5={h:168},_5=[{key:"idle",fps:6,loop:!0},{key:"walk-right",fps:10,loop:!0,dir:"right"},{key:"walk-left",fps:10,loop:!0,dir:"left"},{key:"working",fps:8,loop:!0},{key:"waiting",fps:6,loop:!0},{key:"blocked",fps:4,loop:!0},{key:"review",fps:6,loop:!0},{key:"shipped",fps:10,loop:!1,then:"idle"},{key:"docs-updated",fps:6,loop:!0},{key:"wave",fps:10,loop:!1,then:"idle"},{key:"deciding",fps:6,loop:!0},{key:"sleep",fps:4,loop:!0},{key:"thanks",fps:10,loop:!1,then:"idle"},{key:"held",fps:8,loop:!0},{key:"falling",fps:8,loop:!0},{key:"dizzy",fps:8,loop:!1,then:"idle"}],C5={idle:"4a0f06cacdad0fa8e0b0a369628e383fc2cb54cbdd5297285c88d1a33bd686ac","walk-right":"7bdfb2786b2b1c899fb7b170ce2cf5d1e3a922e251cbaca9600c210262629a52","walk-left":"c53c6f7b980d4179b45d55160145df73eb629ccbb809ce2b19946045e388ce60",working:"2ec0d0d4565eced3c55c32603c2b1c6fe9ff93f13f2a1061bc7d2e8d8864aa6f",waiting:"8bb1595bf280040e101949392c1048330c19142d7b5a1d6b74918734f72287e3",blocked:"134f48c60fa6fef038da266be7fb2a69755ecb9123d23dc4e270b14d7d077da6",review:"77c865ff6d49a8bbf3db4e0d7b91ce4663a1e3acef5d072ddd65eac9479b232c",shipped:"d32653efa6a64eb4d00fb63a6e8c0a7dc24de63ecd5a6cfda36f32b584de00b8","docs-updated":"2b3a01ddd640efd6e65d61c6ad4980da3a9fbceff251f1b42ce13389c02bb19c",wave:"4153420063211e6d196219b89c572f43f96ec32f28c63a1159e6d98630e0ed73",deciding:"6309ab706c8430cf97b187f353fd2d447ba729f6e0764efef1b75a3c96168984",sleep:"40f1fd6e27ddddb13a5702c05a03f5e015e44e7e77e96c4e1ed52a5d7741f2ec",thanks:"0f59f2c042b25ff47a7022d4452bf0dc433dcea796d90bf47d95a5c8ca359d8d",held:"8de04ba258b30acb105a27a81ed400b66f3b68953042957a75e63ebe8efe7c89",falling:"8bc3429c44ef4ba257da895080fa6458c3a66e51cebe103e09cd8bac25be5363",dizzy:"3e8c2072e2aa652e204e3c6b041cb6c9487d8dca1649b52f9695600880a94e49"},T5={id:y5,version:v5,cell:x5,columns:w5,anchor:j5,character:S5,rows:_5,sources:C5},A5="/assets/hnm-pet-anoman-atlas-v02-ClJhW17L.webp",Di=["idle","walk-right","walk-left","working","waiting","blocked","review","shipped","docs-updated","wave","deciding","sleep","thanks","held","falling","dizzy"],E5=e=>typeof e=="string"&&Di.includes(e),wn=e=>typeof e=="number"&&Number.isInteger(e)&&e>0,Xn=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function M5(e){const t=p=>{throw new Error(`pet.json tidak sah: ${p}`)};if(!Xn(e))return t("bukan objek");const{id:a,version:i,cell:r,columns:s,anchor:o,character:l,rows:d,sources:c}=e;if(typeof a!="string"||!a)return t("id");if(!wn(i))return t("version");if(!Xn(r)||!wn(r.w)||!wn(r.h))return t("cell");if(!wn(s))return t("columns");if(!Xn(o)||typeof o.x!="number"||!(o.x>0&&o.x<1)||!wn(o.baseline)||o.baseline>r.h)return t("anchor");if(!Xn(l)||!wn(l.h)||l.h>r.h)return t("character");if(!Array.isArray(d)||d.length!==Di.length)return t(`rows: butuh ${Di.length} baris`);const h=d.map((p,f)=>{const b=Di[f];if(!Xn(p)||p.key!==b)return t(`rows[${f}]: harus "${b}"`);if(!wn(p.fps))return t(`rows[${f}].fps`);if(typeof p.loop!="boolean")return t(`rows[${f}].loop`);const k={key:b,fps:p.fps,loop:p.loop};if(p.then!==void 0){if(!E5(p.then)||p.loop)return t(`rows[${f}].then hanya untuk baris loop:false`);k.then=p.then}else if(!p.loop)return t(`rows[${f}] loop:false tanpa then`);if(p.dir!==void 0){if(p.dir!=="right"&&p.dir!=="left")return t(`rows[${f}].dir`);k.dir=p.dir}return k});return!Xn(c)||Di.some(p=>typeof c[p]!="string")?t("sources"):{id:a,version:i,cell:{w:r.w,h:r.h},columns:s,anchor:{x:o.x,baseline:o.baseline},character:{h:l.h},rows:h,sources:c}}const Xi=M5(T5),P5=A5,np={ready:"idle",sleeping:"sleep",offline:"idle",working:"working",deciding:"deciding",waiting:"waiting",blocked:"blocked",review:"review",shipped:"shipped","docs-updated":"docs-updated"};function El(e,t=Xi){const a=t.rows.find(i=>i.key===e);if(!a)throw new Error(`baris ${e} tak ada di manifest`);return a}const I5=(e,t=Xi)=>t.rows.findIndex(a=>a.key===e),ip=(e,t=Xi)=>Math.round(t.columns/El(e,t).fps*1e3),R5=(e,t=Xi)=>El(e,t).then??null,zc=40,Cs=[1200,4500],L5=[5e3,14e3],Po=16,Nc=24,$5=240,B5=220,D5=new Set(["waiting","blocked"]),O5=new Set(["offline","sleeping"]),bs=(e,[t,a])=>t+e()*(a-t),Yr=e=>e==="right"?"walk-right":"walk-left",Ml=(e,t)=>Math.max(Po,e-t-Po),Ii=(e,t,a)=>Math.min(Math.max(e,Po),Ml(t,a)),z5=(e,t,a)=>Math.min(Math.max(e,0),Math.max(0,t-a)),N5=e=>e==="held"||e==="falling"||e==="dizzy",F5=e=>!e.roam||e.reduced||e.tier==="mobile";function H5(e,t,a){return{x:Ml(e,t),y:0,facing:"right",mode:"stand",until:a+Cs[0],parkedX:null}}function U5(e,t,a){const{now:i,laneWidth:r,laneHeight:s,petWidth:o,petHeight:l,pose:d}=t,c=Ml(r,o),h=np[d],p=Ii(t.currentX,r,o),f=e.mode==="walk"||e.mode==="home",b=e.mode==="dizzy",k=(T,E,A=e.facing)=>({x:T,y:0,facing:A,mode:"stand",until:E,parkedX:e.parkedX}),g=T=>f||Math.abs(p-T)>.5?{x:T,y:0,durationMs:0,ease:"linear"}:null,y=(T,E)=>{const A=Math.round(Math.abs(T-p)/zc*1e3),B=T>=p?"right":"left";return{state:{x:T,y:0,facing:B,mode:E,until:i+A,parkedX:e.parkedX},row:Yr(B),move:{x:T,y:0,durationMs:A,ease:"linear"}}},w=T=>{const E={x:T,y:0,durationMs:0,ease:"linear"};return t.reduced?{state:{...k(T,1/0),parkedX:T},row:h,move:E}:{state:{x:T,y:0,facing:e.facing,mode:"dizzy",until:i+ip("dizzy"),parkedX:T},row:"dizzy",move:E}};if(t.dragging){const T=Ii(t.pointerX,r,o),E=z5(t.pointerY,s,l);return{state:{x:T,y:E,facing:e.facing,mode:"held",until:1/0,parkedX:e.parkedX},row:"held",move:{x:T,y:E,durationMs:0,ease:"linear"}}}if(e.mode==="held"){if(t.reduced||e.y===0)return w(e.x);const T=Math.max(B5,Math.round(e.y/$5*1e3));return{state:{x:e.x,y:0,facing:e.facing,mode:"falling",until:i+T,parkedX:e.x},row:"falling",move:{x:e.x,y:0,durationMs:T,ease:"fall"}}}if(e.mode==="falling")return i<e.until?{state:e,row:"falling",move:null}:w(e.x);if(e.mode==="dizzy"&&i<e.until)return{state:e,row:"dizzy",move:null};if(F5(t)){const T=Ii(e.parkedX??c,r,o);return{state:k(T,1/0,"right"),row:h,move:g(T)}}if(t.hovered||t.panelOpen||t.documentHidden)return{state:k(p,1/0),row:h,move:g(p)};if(O5.has(d))return{state:k(p,1/0),row:h,move:g(p)};if(D5.has(d))return Math.abs(p-c)>1?e.mode==="home"&&i<e.until?{state:e,row:Yr(e.facing),move:null}:y(c,"home"):{state:k(c,1/0,"right"),row:h,move:g(c)};if(d==="shipped")return{state:k(p,1/0),row:h,move:g(p)};if(f)return i<e.until?{state:e,row:Yr(e.facing),move:null}:{state:k(e.x,i+bs(a,Cs)),row:h,move:null};if(b||e.until===1/0)return{state:k(p,i+bs(a,Cs)),row:h,move:null};if(i<e.until)return{state:e,row:h,move:null};const v=bs(a,L5)*zc/1e3;let x=a()<.5?-1:1,_=Ii(p+x*v,r,o);return Math.abs(_-p)<Nc&&(x=-x,_=Ii(p+x*v,r,o)),Math.abs(_-p)<Nc?{state:k(p,i+bs(a,Cs)),row:h,move:null}:y(_,"walk")}const Ga={loading:"Membaca layar sesi…",none:"Pertanyaannya tak terbaca dari sini — buka Terminal untuk menjawabnya.",stale:"Layarnya sudah berubah — pertanyaannya dimuat ulang.",deciding:"hanoman-lead sedang menyusun keputusan untuk sesi ini.",failed:"Jawaban tak terkirim. Buka Terminal untuk menjawabnya.",answering:"hanoman-lead sudah mengirim jawabannya ke pane — terlambat mengambil alih.",taken:"Kamu mengambil alih sesi ini. hanoman-lead berhenti menjawabnya.",preparing:"Kotak jawabnya sedang disiapkan — dialognya belum tergambar di pane."},G5={queued:"hanoman-lead mengantre untuk sesi ini",deciding:"hanoman-lead sedang menyusun keputusan",answered:"hanoman-lead sudah menjawab","taken-over":"Kamu yang menjawab sesi ini",failed:"hanoman-lead tak sanggup menjawab sesi ini"},Fc=e=>{var t;return e instanceof lt?(t=e.detail)==null?void 0:t.reason:void 0};function Hc({sessionId:e,label:t,reduced:a,ask:i}){const[r,s]=u.useState(void 0),[o,l]=u.useState([]),[d,c]=u.useState(""),[h,p]=u.useState(!1),[f,b]=u.useState(!1),[k,g]=u.useState(null),[y,w]=u.useState(0);u.useEffect(()=>{let Z=!0;return s(void 0),Y.sessionDialog(e).then(P=>{Z&&(s(P),l(P?P.dialog.options.filter(D=>D.checked).map(D=>D.n):[]))}).catch(()=>{Z&&s(null)}),()=>{Z=!1}},[e,y]);async function v(){if(!h){p(!0),g(null);try{await Y.takeoverSessionDialog(e),g(Ga.taken),w(Z=>Z+1)}catch(Z){g(Fc(Z)==="answering"?Ga.answering:Ga.failed)}finally{p(!1)}}}async function x(Z){if(!(!r||h)){p(!0),g(null);try{await Y.answerSessionDialog(e,{screenHash:r.screenHash,...Z}),b(!0)}catch(P){const D=Fc(P);D==="stale"?(g(Ga.stale),w(W=>W+1)):g(D==="deciding"?Ga.deciding:Ga.failed)}finally{p(!1)}}}const _=a?{transition:"none",transform:"none"}:void 0,T={marginTop:8,padding:"8px 10px",background:"var(--bone-100)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)"},E=Z=>n.jsx("div",{"data-testid":"pet-answer-note",style:{fontFamily:"var(--font-ui)",fontSize:12,color:"var(--text-muted)",lineHeight:1.45},children:Z});if(f)return n.jsx("div",{style:T,children:n.jsxs("div",{"data-testid":"pet-answer-sent",style:{fontFamily:"var(--font-ui)",fontSize:12.5,color:"var(--text-strong)"},children:["Terkirim — menunggu ",t," bergerak"]})});const A=i==null?void 0:i.questions[Math.min(i.at,Math.max(0,i.questions.length-1))],B=i?n.jsxs("div",{style:{marginBottom:6},children:[n.jsx("div",{"data-testid":"pet-answer-lead-state",className:"hn-eyebrow",children:G5[i.state]}),i.total>1&&n.jsxs("div",{className:"hn-eyebrow",style:{marginTop:2},children:["Pertanyaan ",Math.min(i.at+1,i.total)," dari ",i.total]}),i.source==="turn-end"&&n.jsx("div",{"data-testid":"pet-answer-source",className:"hn-eyebrow",style:{marginTop:2},children:"Giliran terakhir sesi"}),((A==null?void 0:A.question)||i.message)&&n.jsx("div",{style:{fontFamily:"var(--font-ui)",fontSize:12.5,fontWeight:600,color:"var(--text-strong)",lineHeight:1.4,marginTop:4},children:(A==null?void 0:A.question)||i.message}),i.state!=="taken-over"&&n.jsx("div",{style:{marginTop:6},children:n.jsx(V,{"data-testid":"pet-answer-takeover",size:"sm",variant:"ghost",disabled:h,style:_,onClick:()=>{v()},children:"Ambil alih"})})]}):null;if(r===void 0)return n.jsxs("div",{style:T,children:[B,E(Ga.loading)]});if(r===null)return n.jsxs("div",{style:T,children:[B,E(k??(i?Ga.preparing:Ga.none))]});const{dialog:O}=r,ne=O.tabs.filter(Z=>Z.answered).length;return n.jsxs("div",{"data-testid":"pet-answer","data-session":e,style:T,children:[B,!i&&O.tabs.length>1&&n.jsxs("div",{className:"hn-eyebrow",style:{marginBottom:4},children:["Pertanyaan ",Math.min(ne+1,O.tabs.length)," dari ",O.tabs.length]}),!i&&O.title&&n.jsx("div",{style:{fontFamily:"var(--font-ui)",fontSize:12.5,fontWeight:600,color:"var(--text-strong)",lineHeight:1.4,marginBottom:6},children:O.title}),O.multi?n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:O.options.map(Z=>n.jsx(sr,{label:Z.label,checked:o.includes(Z.n),disabled:h,onChange:P=>l(D=>(P?[...D,Z.n]:D.filter(W=>W!==Z.n)).sort((W,F)=>W-F))},Z.n))}):n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:O.options.map(Z=>n.jsx(V,{"data-testid":"pet-answer-option",size:"sm",variant:"ghost",disabled:h,style:_,onClick:()=>{x({choice:Z.n})},children:Z.label},Z.n))}),(O.freeIndex!==null||O.notes)&&n.jsxs("div",{style:{display:"flex",gap:6,marginTop:8},children:[n.jsx(We,{"data-testid":"pet-answer-text",size:"sm",value:d,disabled:h,placeholder:"Jawab dengan kalimatmu sendiri",style:{flex:1,minWidth:0},onChange:Z=>c(Z.target.value)}),!O.multi&&n.jsx(V,{size:"sm",variant:"ghost",disabled:h||!d.trim(),style:_,onClick:()=>{x({text:d.trim()})},children:"Kirim"})]}),O.multi&&n.jsx("div",{style:{marginTop:8},children:n.jsx(V,{"data-testid":"pet-answer-submit",size:"sm",variant:"primary",disabled:h,style:_,onClick:()=>{x({choices:o,...d.trim()?{text:d.trim()}:{}})},children:"Submit"})}),k&&n.jsx("div",{style:{marginTop:6},children:E(k)})]})}const q5={mobile:96,tablet:112,desktop:112},Zr=44,Jr=268,W5=10,ks=12,ys=200,Xr=8,K5=5e3,V5=1.5,Y5=2e3,Z5=3,J5=6,X5={linear:"linear",fall:"var(--ease-fall)"};function Q5(){const e="(prefers-reduced-motion: reduce)",[t,a]=u.useState(()=>typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia(e).matches);return u.useEffect(()=>{var s;if(typeof window>"u"||typeof window.matchMedia!="function")return;const i=window.matchMedia(e),r=()=>a(i.matches);return(s=i.addEventListener)==null||s.call(i,"change",r),()=>{var o;return(o=i.removeEventListener)==null?void 0:o.call(i,"change",r)}},[]),t}function eC(){const[e,t]=u.useState(()=>typeof document<"u"&&document.hidden);return u.useEffect(()=>{const a=()=>t(document.hidden);return document.addEventListener("visibilitychange",a),()=>document.removeEventListener("visibilitychange",a)},[]),e}function tC(){const[e,t]=u.useState(()=>typeof window<"u"?window.innerWidth:1024);return u.useEffect(()=>{let a;const i=()=>{clearTimeout(a),a=setTimeout(()=>t(window.innerWidth),150)};return window.addEventListener("resize",i),()=>{clearTimeout(a),window.removeEventListener("resize",i)}},[]),e}function aC({sessions:e,backlog:t,asks:a=[],onOpen:i}){const{items:r}=_h(),[s,o]=u.useState(o5),[l,d]=u.useState(d5),[c,h]=u.useState(!1),[p,f]=u.useState(!1),[b,k]=u.useState(ks),[g,y]=u.useState(!1),[w,v]=u.useState(!1),[x,_]=u.useState(0),[T,E]=u.useState(null),A=Q5(),B=ol(),O=eC(),ne=tC(),Z=u.useRef(null),P=u.useRef(null),D=u.useRef(null),W=W1(),F=t5(e,r),[N,ee]=u.useState(F),[J,H]=u.useState(()=>Date.now());N!==F&&(ee(F),H(Date.now()));const K=u.useMemo(()=>r5({sessions:e,backlog:t,notifications:r,now:Date.now(),connection:W,quietSince:J}),[e,t,r,W,J,x]),me=u.useMemo(()=>a5(e,t),[e,t]),He=u.useMemo(()=>n5(e,t),[e,t]);u.useEffect(()=>{if(K.recheckAt===null)return;const Q=setTimeout(()=>_(he=>he+1),Math.max(0,K.recheckAt-Date.now()));return()=>clearTimeout(Q)},[K.recheckAt]),u.useEffect(()=>{if(!T)return;const Q=setTimeout(()=>E(null),T.ttl);return()=>clearTimeout(Q)},[T]);const fe=u.useRef(null),Te=u.useRef(null);u.useEffect(()=>{const Q={sessions:e,backlog:t,notifications:r,now:Date.now()};if(O){fe.current||(fe.current=ap(Q)),Te.current=null;return}const he=fe.current;if(!he)return;if(Te.current===null&&(Te.current=Q.now),Q.now-he.at<h5){fe.current=null;return}const Ne=k5(he,Q);if(Ne){fe.current=null,E({...Ne,id:Q.now});return}Q.now-Te.current>K5&&(fe.current=null)},[O,e,t,r]);const ze=b5(K,Date.now()),[Me,Ye]=u.useState((ze==null?void 0:ze.text)??null);((ze==null?void 0:ze.text)??null)!==Me&&(Ye((ze==null?void 0:ze.text)??null),ze&&E({...ze,id:Date.now()}));const{cell:I,columns:be,anchor:Re,character:Ze,rows:oe}=Xi,je=q5[B]/Ze.h,Ce=Math.round(I.w*je),ke=Math.round(I.h*je),Ue=u.useRef(H5(ne,Ce,Date.now())),[Je,rt]=u.useState(Ue.current),[et,xt]=u.useState(np[K.pose]),[kt,pt]=u.useState({x:Ue.current.x,y:0,durationMs:0,ease:"linear"}),[gt,ae]=u.useState(null),tt=u.useRef(null),X=u.useRef(!1),de=u.useCallback(()=>{var Ne,ft;const Q=(Ne=P.current)==null?void 0:Ne.getBoundingClientRect(),he=(ft=Z.current)==null?void 0:ft.getBoundingClientRect();return Q&&he&&Q.width>0?Q.left-he.left:Ue.current.x},[]),at=u.useCallback(()=>{var he;const Q=(he=Z.current)==null?void 0:he.getBoundingClientRect();return Q&&Q.height>ke?Q.height:typeof window<"u"?window.innerHeight:ke},[ke]),Ft=u.useMemo(()=>{const Q=typeof window<"u"?window.innerWidth:ne,he=kt.x+Re.x*Ce-ys/2,Ne=Math.min(Math.max(he,Xr),Math.max(Xr,Q-ys-Xr));return Math.round(Re.x*Ce-ys/2+(Ne-he))},[kt.x,Ce,Re.x,ne]),Ht=u.useCallback(()=>{const Q=U5(Ue.current,{now:Date.now(),currentX:de(),laneWidth:ne,laneHeight:at(),petWidth:Ce,petHeight:ke,pose:K.pose,hovered:w,panelOpen:c,documentHidden:O,roam:l,reduced:A,tier:B,dragging:gt!==null,pointerX:(gt==null?void 0:gt.x)??0,pointerY:(gt==null?void 0:gt.y)??0},Math.random);Ue.current=Q.state,rt(Q.state),xt(Q.row),Q.move&&pt(Q.move)},[de,at,ne,Ce,ke,K.pose,w,c,O,l,A,B,gt]);u.useEffect(()=>{Ht()},[Ht]),u.useEffect(()=>{if(!Number.isFinite(Je.until))return;const Q=setTimeout(Ht,Math.max(0,Je.until-Date.now()));return()=>clearTimeout(Q)},[Je.until,Ht]);const[Vt,q]=u.useState(null),qe=u.useRef(0),wt=u.useRef([]),[ca,nn]=u.useState(0),[mi,Pe]=u.useState(!1);u.useEffect(()=>{Pe(!1)},[K.pose]);const zn=et==="shipped"&&mi?R5("shipped")??"idle":et,Ut=(Vt==null?void 0:Vt.row)??zn,Nn=El(Ut),va=u.useCallback(()=>!A&&K.pose!=="offline"&&K.pose!=="sleeping"&&gt===null&&!N5(Ue.current.mode),[A,K.pose,gt]),$t=u.useCallback(()=>{va()&&q(Q=>Q??{row:"wave",id:++qe.current})},[va]),ua=u.useCallback(()=>{A||(q({row:"thanks",id:++qe.current}),nn(Q=>Q+1))},[A]);u.useEffect(()=>{if(!c)return;const Q=Ne=>{Z.current&&!Z.current.contains(Ne.target)&&ta()},he=Ne=>{Ne.key==="Escape"&&ta()};return document.addEventListener("mousedown",Q),document.addEventListener("keydown",he),()=>{document.removeEventListener("mousedown",Q),document.removeEventListener("keydown",he)}},[c,A]),u.useEffect(()=>{A&&(y(!1),q(null),c||f(!1))},[A,c]),u.useEffect(()=>{var Q;(Q=D.current)==null||Q.toggleAttribute("inert",!c)},[c,p]);function Ba(){var ha;const Q=typeof window<"u"?window.innerWidth:ne,he=(ha=P.current)==null?void 0:ha.getBoundingClientRect(),ft=(he&&he.width>0?he.left:Ue.current.x)+Re.x*Ce;k(Math.round(Math.min(Math.max(ft-Jr/2,ks),Math.max(ks,Q-Jr-ks)))),f(!0),h(!0)}function ta(){h(!1),A&&f(!1)}function Fn(){c?ta():Ba()}function fn(){const Q=Date.now(),he=[...wt.current.filter(Ne=>Q-Ne<Y5),Q];if(he.length>=Z5){wt.current=[],ua();return}wt.current=he,A||y(!0),$t(),Fn()}function Hn(Q){var he,Ne;(Ne=(he=Q.currentTarget).setPointerCapture)==null||Ne.call(he,Q.pointerId),tt.current={id:Q.pointerId,dx:Q.clientX-de(),dy:Q.clientY+Ue.current.y,x0:Q.clientX,y0:Q.clientY,moved:!1}}function bn(Q){const he=tt.current;if(!(!he||he.id!==Q.pointerId)){if(!he.moved){if(Math.hypot(Q.clientX-he.x0,Q.clientY-he.y0)<=J5)return;he.moved=!0,c&&ta(),q(null)}ae({x:Q.clientX-he.dx,y:he.dy-Q.clientY})}}function sn(Q){var Ne,ft;const he=tt.current;!he||he.id!==Q.pointerId||(tt.current=null,(ft=(Ne=Q.currentTarget).releasePointerCapture)==null||ft.call(Ne,Q.pointerId),he.moved&&(X.current=!0,ae(null)))}function Da(Q){o(Q),l5(Q),Q&&(h(!1),f(!1))}function Un(Q){d(Q),c5(Q)}const Oa=Je.mode==="held"||Je.mode==="falling",kn={position:"fixed",left:0,right:0,bottom:"max(0px, var(--safe-bottom))",...Oa?{top:"max(0px, var(--safe-top))"}:{height:ke},zIndex:80,pointerEvents:"none"};if(s)return n.jsx("div",{"data-testid":"pet-root",ref:Z,style:kn,children:n.jsx("button",{"aria-label":"Tampilkan pet Hanoman",onClick:()=>Da(!1),style:{pointerEvents:"auto",position:"absolute",width:44,height:44,padding:0,right:"max(22px, var(--safe-right))",bottom:22,display:"inline-flex",alignItems:"center",justifyContent:"center",cursor:"pointer",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-pill)",background:"var(--surface-card)",opacity:.55,boxShadow:"var(--shadow-sm)"},children:n.jsx(nl,{id:"buntut",size:15})})});const ce=K.pose==="offline",De=`Hanoman ${Bc[K.pose]} · ${K.headline}`+(K.count>1?` · ${K.count} ${Kr[K.kind]}`:""),Xe=Ut==="waiting"&&tp(K,Date.now()),ct=Math.round(ip(Ut)/(Xe?V5:1)),Et=A?"none":`hn-pet-frames ${ct}ms steps(${be}, end) ${Nn.loop?"infinite":"1 forwards"}`;return n.jsxs("div",{"data-testid":"pet-root",ref:Z,style:kn,children:[p&&n.jsxs("div",{ref:D,"data-testid":"pet-panel","aria-hidden":!c||void 0,onAnimationEnd:Q=>{Q.animationName==="hn-pet-panel-out"&&!c&&f(!1)},style:{pointerEvents:c?"auto":"none",position:"absolute",left:b,bottom:ke+W5,width:Jr,maxWidth:"calc(100vw - var(--safe-left) - var(--safe-right) - 24px)",maxHeight:"calc(100dvh - var(--safe-top) - var(--safe-bottom) - 120px)",overflowY:"auto",boxSizing:"border-box",padding:14,background:"var(--surface-card)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-md)",boxShadow:"var(--shadow-lg)",transformOrigin:"center bottom",animation:A?"none":`${c?"hn-pet-panel-in":"hn-pet-panel-out"} var(--dur-slow) var(--ease-out) both`},children:[n.jsx("div",{className:"hn-eyebrow",style:{marginBottom:8},children:Bc[K.pose]}),n.jsx("ul",{"data-testid":"pet-conditions",style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:10},children:K.conditions.map((Q,he)=>n.jsxs("li",{"data-testid":"pet-condition","data-kind":Q.kind,style:he>0?{borderTop:"1px solid var(--border-hair)",paddingTop:10}:void 0,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:6},children:[n.jsx("span",{style:he===0?{fontFamily:"var(--font-display)",fontSize:15,fontWeight:600,color:"var(--text-strong)",lineHeight:1.25}:{fontFamily:"var(--font-ui)",fontSize:13,fontWeight:600,color:"var(--text-strong)",lineHeight:1.3},children:Q.headline}),Q.count>1&&n.jsx("span",{"data-testid":"pet-condition-count",title:`${Q.count} ${Kr[Q.kind]}`,style:{flex:"0 0 auto",padding:"2px 6px",fontFamily:"var(--font-ui)",fontSize:11,fontWeight:700,lineHeight:1,color:"var(--accent-on)",background:"var(--accent)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-pill)"},children:Q.count})]}),n.jsx("div",{style:{marginTop:3,fontFamily:"var(--font-ui)",fontSize:12.5,color:"var(--text-muted)",lineHeight:1.45},children:Q.detail}),Q.target&&n.jsx("div",{style:{marginTop:7},children:n.jsx(V,{size:"sm",variant:he===0?"primary":"ghost",leftIcon:Q.target.section==="terminal"?"terminal":"list-checks",style:A?{transition:"none",transform:"none"}:void 0,onClick:()=>{const Ne=Q.target;ta(),i(Ne)},children:Q.target.section==="terminal"?"Buka Terminal":"Buka Backlog"})}),Q.kind==="waiting"&&c&&me.map(Ne=>n.jsx(Hc,{sessionId:Ne.id,label:Ne.specId??Ne.id,reduced:A,ask:a.find(ft=>ft.sessionId===Ne.id)},Ne.id)),Q.kind==="deciding"&&c&&He.map(Ne=>{const ft=a.find(ha=>ha.sessionId===Ne.id);return ft?n.jsx(Hc,{sessionId:Ne.id,label:Ne.specId??Ne.id,reduced:A,ask:ft},Ne.id):null})]},`${Q.kind}:${he}`))}),n.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:8,marginTop:12,borderTop:"1px solid var(--border-hair)",paddingTop:10},children:[B!=="mobile"&&n.jsx(V,{size:"sm",variant:"ghost",style:A?{transition:"none",transform:"none"}:void 0,onClick:()=>Un(!l),children:l?Je.parkedX===null?"Diam di pojok":"Diam di sini":"Berkeliaran"}),n.jsx(V,{size:"sm",variant:"ghost",style:A?{transition:"none",transform:"none"}:void 0,onClick:()=>Da(!0),children:"Sembunyikan"})]})]}),n.jsxs("div",{"data-testid":"pet-actor",ref:P,"data-facing":Je.facing,"data-mode":Je.mode,onTransitionEnd:Q=>{Q.propertyName==="transform"&&Ht()},style:{position:"absolute",left:0,bottom:0,width:Ce,height:ke,transform:`translate(${kt.x}px, ${-kt.y}px)`,transition:A||kt.durationMs===0?"none":`transform ${kt.durationMs}ms ${X5[kt.ease]}`,willChange:"transform"},children:[T&&!c&&n.jsxs("div",{"data-testid":"pet-bubble","data-kind":T.kind,"aria-hidden":T.kind==="pose"&&K.kind!=="waiting"?"true":void 0,style:{pointerEvents:"none",position:"absolute",left:Ft,bottom:ke-6,width:"max-content",maxWidth:ys,boxSizing:"border-box",padding:"6px 10px",fontFamily:"var(--font-ui)",fontSize:12.5,lineHeight:1.35,color:"var(--text-strong)",background:"var(--surface-card)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-md)",boxShadow:"var(--shadow-sm)",animation:A?"none":"hn-pet-bubble-in var(--dur-base) var(--ease-out) both"},children:[n.jsx("span",{"data-testid":"pet-bubble-text","aria-hidden":T.kind==="pose"?"true":void 0,children:T.text}),(T.kind==="recap"||K.kind==="waiting")&&n.jsx("div",{style:{marginTop:6,pointerEvents:"auto"},children:n.jsx(V,{size:"sm",variant:"ghost",leftIcon:T.kind==="recap"?"list-checks":"terminal","aria-label":T.kind==="recap"?`${T.text} — buka ringkasan pet`:`${T.text} — jawab di sini`,style:A?{transition:"none",transform:"none"}:void 0,onClick:()=>{E(null),Ba()},children:T.kind==="recap"?"Lihat":"Jawab di sini"})})]}),n.jsxs("div",{"data-testid":"pet-stage",role:"status","aria-live":"polite",className:"hn-pet-stage","data-reduced-motion":A?"true":void 0,style:{position:"relative",width:Ce,height:ke,animation:A?"none":"hn-pet-reveal var(--dur-slow) var(--ease-out) both"},children:[n.jsx("span",{className:"hn-sr-only","data-testid":"pet-status",children:De}),K.count>1&&n.jsx("span",{"data-testid":"pet-badge","aria-hidden":"true",title:`${K.count} ${Kr[K.kind]}`,style:{pointerEvents:"none",position:"absolute",top:4,right:8,zIndex:2,minWidth:18,height:18,padding:"0 5px",boxSizing:"border-box",display:"inline-flex",alignItems:"center",justifyContent:"center",fontFamily:"var(--font-ui)",fontSize:11,fontWeight:700,lineHeight:1,color:"var(--accent-on)",background:"var(--accent)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-pill)",boxShadow:"var(--shadow-sm)"},children:K.count}),ca>0&&!A&&n.jsx("span",{"data-testid":"pet-hearts","aria-hidden":"true",style:{pointerEvents:"none",position:"absolute",zIndex:2,left:Math.round(Re.x*Ce),bottom:Math.round(ke*.55)},onAnimationEnd:Q=>{Q.target.dataset.last==="1"&&nn(0)},children:[0,1,2].map(Q=>n.jsx("span",{"data-last":Q===2?"1":void 0,style:{position:"absolute",left:Q*9-9,fontFamily:"var(--font-ui)",fontSize:12,color:"var(--accent)",animation:`hn-pet-heart 900ms var(--ease-out) ${Q*120}ms both`},children:"♥"},Q))},ca),n.jsx("div",{"data-testid":"pet-reactor",className:"hn-pet-reactor",style:{position:"relative",width:"100%",height:"100%",transition:A?"none":"transform var(--dur-base) var(--ease-out)",animation:A||!g?"none":"hn-pet-click var(--dur-slow) var(--ease-out) both"},onAnimationEnd:Q=>{Q.animationName==="hn-pet-click"&&y(!1)},children:n.jsx("div",{"data-testid":"pet-viewport","data-offline":ce?"true":void 0,style:{position:"relative",overflow:"hidden",width:Ce,height:ke,opacity:ce?.45:1,transition:A?"none":"opacity var(--dur-slow) var(--ease-out)"},children:n.jsx("div",{"data-testid":"pet-rowshift",className:"hn-pet-rowshift","data-row":Ut,style:{width:Ce,height:ke,"--row":I5(Ut)},children:n.jsx("img",{"data-testid":"pet-atlas",src:P5,alt:"","aria-hidden":"true",draggable:!1,decoding:"async",onAnimationEnd:Q=>{if(Q.animationName==="hn-pet-frames"){if(Vt){Vt.row==="wave"&&w&&va()?q({row:"wave",id:++qe.current}):q(null);return}Ut==="shipped"&&Pe(!0)}},style:{display:"block",width:Ce*be,height:ke*oe.length,animation:Et,willChange:"transform"}},`${Ut}:${(Vt==null?void 0:Vt.id)??0}`)})})}),n.jsx("button",{"data-testid":"pet-hit",className:"hn-pet-hit","aria-label":"Ringkasan status Hanoman",title:`${K.headline} — ${K.detail}`,onClick:()=>{if(X.current){X.current=!1;return}fn()},onPointerDown:Hn,onPointerMove:bn,onPointerUp:sn,onPointerCancel:sn,onPointerEnter:()=>{v(!0),$t()},onPointerLeave:()=>v(!1),onFocus:()=>v(!0),onBlur:()=>v(!1),style:{pointerEvents:"auto",position:"absolute",zIndex:3,left:Math.round(Re.x*Ce-Zr/2),bottom:0,width:Zr,height:Zr,padding:0,border:"none",background:"transparent",cursor:Oa?"grabbing":"grab"}})]})]})]})}const nC=u.lazy(()=>la(()=>import("./DalangHanomanScreen-Go6ETy3r.js"),__vite__mapDeps([0,1,2,3])).then(e=>({default:e.DalangHanomanScreen}))),iC=u.lazy(()=>la(()=>import("./TeamScreen-DzKZHKyR.js"),__vite__mapDeps([4,1,5,2,3])).then(e=>({default:e.TeamScreen}))),sC=u.lazy(()=>la(()=>import("./TriageScreen-D5iyoK-3.js"),__vite__mapDeps([6,1,5,2,3])).then(e=>({default:e.TriageScreen}))),rC=u.lazy(()=>la(()=>import("./TerminalScreen-mLiyHYQV.js"),__vite__mapDeps([7,1,2,3])).then(e=>({default:e.TerminalScreen}))),oC=u.lazy(()=>la(()=>import("./IdeScreen-DFRme37j.js"),__vite__mapDeps([8,1,9,10,5,2,3,11])).then(e=>({default:e.IdeScreen}))),lC=u.lazy(()=>la(()=>import("./VpsScreen-BhjULQaT.js"),__vite__mapDeps([12,1,2,3])).then(e=>({default:e.VpsScreen}))),dC=u.lazy(()=>la(()=>import("./SchedulerScreen-Bii5m-K1.js"),__vite__mapDeps([13,1,5,2,3])).then(e=>({default:e.SchedulerScreen}))),cC=u.lazy(()=>la(()=>import("./LeadScreen-ASzNKRLX.js"),__vite__mapDeps([14,1,5,2,3])).then(e=>({default:e.LeadScreen}))),uC=u.lazy(()=>la(()=>import("./DocsWorkspace-BDfP0ML1.js"),__vite__mapDeps([15,1,2,3])).then(e=>({default:e.DocsWorkspace}))),hC=u.lazy(()=>la(()=>import("./ChangelogScreen-C-C71Zn_.js"),__vite__mapDeps([16,1,2,3])).then(e=>({default:e.ChangelogScreen}))),mC=u.lazy(()=>la(()=>import("./ReviewScreen-CyFWhxL1.js"),__vite__mapDeps([17,1,10,2,3])).then(e=>({default:e.ReviewScreen}))),pC=u.lazy(()=>la(()=>import("./SettingsScreen-siSgzEnH.js"),__vite__mapDeps([18,1,2,10,3])).then(e=>({default:e.SettingsScreen}))),gC=[{value:"critical",label:"Critical"},{value:"major",label:"Major"},{value:"minor",label:"Minor"}],Uc=[{value:"tinggi",label:"Tinggi"},{value:"sedang",label:"Sedang"},{value:"rendah",label:"Rendah"}];function fC(e){switch(e){case"offline":return"offline";case"control-off":return"kendali jarak jauh mati";case"protocol-mismatch":return"versi tak cocok";case"no-spawn":return"tanpa izin mulai sesi";case"capacity-full":return"kapasitas penuh";default:return"tak tersedia"}}function bC({open:e,spec:t,onClose:a,onStarted:i,onError:r}){var kt,pt,gt;const[s,o]=u.useState("sonnet"),[l,d]=u.useState("medium"),[c,h]=u.useState("claude"),[p,f]=u.useState({claude:{model:"sonnet",effort:"medium"},codex:{...oo}}),[b,k]=u.useState({}),[g,y]=u.useState(!1),[w,v]=u.useState(""),[x,_]=u.useState("changed"),[T,E]=u.useState(Kl().id),[A,B]=u.useState(!1),[O,ne]=u.useState(null);u.useEffect(()=>{ne(null)},[e,t==null?void 0:t.id]);const[Z,P]=u.useState([{deviceId:ja,name:"hub ini",eligible:!0}]),[D,W]=u.useState(ja),[F,N]=u.useState(null),[ee,J]=u.useState(null),[H,K]=u.useState(void 0),[me,He]=u.useState(!1),[fe,Te]=u.useState(!1),[ze,Me]=u.useState(!1),[Ye,I]=u.useState(null);u.useEffect(()=>{e&&(He(!1),Te(!1),Me(!1),k({}),Y.getSettings().then(ae=>{const tt={claude:{model:ae.model,effort:ae.effort},codex:{...oo,...ae.codex??{}}},X=ae.agent==="codex"?"codex":"claude";f(tt),h(X),o(tt[X].model),d(tt[X].effort);const de=!!t&&id(Ni(t.source));y(de||ae.goal.enabled),v(de?"":ae.goal.condition),_(ae.verifyScope??"changed"),E(Kl(ae.method).id),K(ae.orchestration),He(!0)}).catch(()=>{Te(!0),He(!0)}),Y.getCodexVersion().then(ae=>{J(ae.version),Me(!0)}).catch(()=>{Me(!0)}),Y.getMethodStatus().then(ae=>I(ae.methods)).catch(()=>I(null)))},[e,t]),u.useEffect(()=>{if(!e||!t)return;let ae=!1;return(async()=>{try{const[tt,X]=await Promise.all([typeof Y.presence=="function"?Y.presence():Promise.resolve({enabled:!1,devices:[],hubVersion:""}),typeof Y.getProject=="function"?Y.getProject(t.projectId).then(Ft=>Ft.handledBy??[]).catch(()=>[]):Promise.resolve([])]);if(ae)return;const de=gw(tt,X);P(de);const at=de.find(Ft=>Ft.deviceId!==ja&&Ft.eligible);W((at==null?void 0:at.deviceId)??ja)}catch{if(ae)return;P([{deviceId:ja,name:"hub ini",eligible:!0}]),W(ja)}})(),()=>{ae=!0}},[e,t==null?void 0:t.id]);const be=D!==ja,Re=u.useMemo(()=>be?Qo({base:`/api/devices/${D}/relay`}):Y,[be,D]),Ze=ae=>{h(ae),k({});const tt=yw(p,ae);o(tt.model),d(tt.effort)},oe=ae=>{o(ae),d(tt=>c==="codex"?nr(ae,tt):tr(ae,tt))},je=Kh(c,s);if(!t)return null;const Ce=t,ke=Ni(Ce.source),Ue=id(ke),Je=Ce.blockedBy??[],rt=Je.length>0,et=(Ye==null?void 0:Ye.find(ae=>ae.method===T&&ae.agent===c))??null;async function xt(ae=!1,tt=!1){B(!0),ne(null),N(null);try{const{id:X,resumed:de}=await Re.startSession({spec:Ce.id,flow:ke,model:s,effort:l,agent:c,...Object.keys(b).length?{phaseOverrides:b}:{},goal:g,goalCondition:g&&w.trim()?w.trim():void 0,verifyScope:x,method:T,...rt||ae?{force:!0}:{},...tt?{confirmRemote:!0}:{}});i(X,de),a()}catch(X){if(X instanceof lt&&X.status===409&&X.detail&&typeof X.detail=="object"&&(X.detail.error==="remote-session"||X.detail.error==="confirm-required")){N(X.detail);return}const de=X instanceof lt&&X.status===409?Hu.safeParse(X.detail):null;de!=null&&de.success?ne(de.data):r==null||r(X)}finally{B(!1)}}return n.jsxs(mt,{open:e,onClose:a,icon:"play",eyebrow:`${Ce.id} · ${ke}`,title:"Mulai sesi",footer:n.jsxs(n.Fragment,{children:[n.jsx(V,{variant:"ghost",onClick:a,children:"Batal"}),n.jsx(V,{leftIcon:rt?"lock":"play",variant:rt?"danger":"primary",disabled:A,onClick:()=>void xt(),children:rt?"Mulai tetap":O?"Coba lagi":"Mulai"}),O&&!rt&&!be&&n.jsx(V,{leftIcon:"lock",variant:"danger",disabled:A,onClick:()=>void xt(!0),children:"Mulai tetap"})]}),children:[n.jsxs("div",{style:{fontSize:12.5,color:"var(--text-muted)",marginBottom:12,lineHeight:1.5},children:["Agen, model & effort ",n.jsx("b",{children:"orchestrator"})," sesi ini. Default dari setelan global; ubah bila perlu. Bila orkestrasi flow ini aktif, tiap fase dikerjakan subagent dengan model & effort di bawah (Settings › Orkestrasi). Override di bawah hanya berlaku untuk sesi ini dan tidak mengubah Settings."]}),O&&n.jsxs("div",{role:"alert",style:{fontSize:12.5,lineHeight:1.55,marginBottom:12,padding:"9px 11px",borderRadius:8,background:"var(--warn-bg, #fdf6e3)",color:"var(--text-strong)"},children:[n.jsx("b",{children:O.error}),n.jsxs("div",{children:[O.admission.liveCount," sesi hidup · ",O.admission.liveAgentCount," agen terstruktur · cap ",O.admission.maxConcurrent]}),n.jsxs("div",{children:["Load per core: ",O.admission.loadStatus==="available"&&O.admission.loadPerCore!==null?O.admission.loadPerCore.toFixed(2):"tidak tersedia",O.admission.loadStatus==="unsupported"?" (tidak didukung platform)":""," · ambang ",O.admission.maxLoadPerCore]}),n.jsx("div",{children:"Coba lagi setelah beban turun, atau pilih Mulai tetap untuk melewati cap dan pemeriksaan beban host."})]}),rt&&n.jsxs("div",{"data-testid":"dep-blocked-note",style:{fontSize:12.5,lineHeight:1.55,marginBottom:12,padding:"9px 11px",borderRadius:8,background:"var(--warn-bg, #fdf6e3)",color:"var(--text-strong)"},children:["Backlog ini menunggu"," ",n.jsx("b",{children:Je.map(ae=>`${ae.id} (${ae.reason==="missing"?"tak ditemukan":ae.reason==="unmerged"?"belum ter-merge":"belum selesai"})`).join(", ")}),". Sesi tetap bisa dimulai, tapi worktree-nya lahir dari basis yang belum memuat pekerjaan itu."," ","Mulai tetap juga melewati cap sesi dan pemeriksaan beban host."]}),n.jsx(ge,{label:"Target",hint:"Mesin yang menjalankan sesi ini. Tak terpilih tetap tampil beserta alasannya.",children:n.jsx(Be,{"aria-label":"target",value:D,style:{width:"100%"},options:Z.map(ae=>({value:ae.deviceId,label:ae.eligible?ae.name:`${ae.name} — ${fC(ae.reason)}`,disabled:!ae.eligible})),onChange:ae=>{W(ae.target.value),N(null)}})}),(F==null?void 0:F.error)==="remote-session"&&F.remoteSession&&n.jsxs("div",{role:"alert",style:{fontSize:12.5,marginBottom:12,padding:"9px 11px",borderRadius:8,background:"var(--warn-bg, #fdf6e3)"},children:["Sesi ini sudah berjalan di ",n.jsx("b",{children:F.remoteSession.name}),"."]}),(F==null?void 0:F.error)==="confirm-required"&&n.jsxs("div",{role:"alert",style:{fontSize:12.5,marginBottom:12,padding:"9px 11px",borderRadius:8,background:"var(--warn-bg, #fdf6e3)"},children:[n.jsx("div",{children:"Device terakhir yang mengerjakan ini sudah offline."}),n.jsx(V,{variant:"danger",disabled:A,onClick:()=>void xt(!1,!0),children:"Tetap mulai"})]}),n.jsx(ge,{label:"Agen",hint:"Mesin yang menjalankan sesi ini. Perilaku sesi sama; hanya CLI-nya berbeda.",children:n.jsx(Be,{"aria-label":"Agen",value:c,style:{width:"100%"},options:[{value:"claude",label:"Claude Code"},{value:"codex",label:"Codex CLI"}],onChange:ae=>Ze(ae.target.value)})}),n.jsx(ge,{label:"Model",children:n.jsx(Be,{"aria-label":"Model",value:s,style:{width:"100%"},options:kw(c,s),onChange:ae=>oe(ae.target.value)})}),n.jsx(ge,{label:"Effort",children:n.jsx(Be,{"aria-label":"Effort",value:l,style:{width:"100%"},options:je.map(ae=>({value:ae,label:ae})),onChange:ae=>d(ae.target.value)})}),c==="codex"&&nf(s,ee)&&n.jsxs("div",{"data-testid":"codex-version-note",style:{fontSize:12,lineHeight:1.5,marginBottom:12,padding:"8px 10px",borderRadius:8,background:"var(--warn-bg, #fdf6e3)",color:"var(--text-muted)"},children:["Codex CLI terpasang ",n.jsx("b",{children:ee}),", sedangkan ",n.jsx("b",{children:s})," butuh ",n.jsx("b",{children:(kt=ar(s))==null?void 0:kt.minClient}),". Sesi tetap boleh dijalankan, tapi modelnya belum tentu dikenali CLI ini."]}),n.jsx(Tw,{flow:ke,agent:c,model:s,effort:l,orchestration:H,codexVersion:ee,phaseOverrides:b,onPhaseOverridesChange:k,loadError:fe,remoteTarget:be?((pt=Z.find(ae=>ae.deviceId===D))==null?void 0:pt.name)??D:null,loading:!me||c==="codex"&&!ze}),n.jsxs(ge,{label:"Mode goal",hint:Ue?"Backlog goal selalu berjalan dalam mode goal — sesi menolak berhenti sampai goal item ini terbukti tercapai. Kosongkan kondisi untuk memakai goal item apa adanya.":"Sesi menolak berhenti sampai kondisinya terbukti. Kosongkan kondisi untuk memakai bawaan hanoman: semua fase tercatat, plan tak menyisakan task, push sukses.",children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:g?10:0},children:[n.jsx(xh,{"aria-label":"Mode goal",checked:g,disabled:Ue,onChange:ae=>{Ue||y(ae)}}),n.jsx("span",{style:{fontSize:12.5,color:"var(--text-muted)"},children:Ue?"aktif · terkunci":g?"aktif":"nonaktif"})]}),g&&n.jsx(zt,{value:w,rows:4,mono:!0,placeholder:Ue?"Kosong = goal backlog item ini · mis. semua fase tercatat & plan tanpa - [ ]":"Kosong = kondisi bawaan hanoman · mis. semua fase tercatat & plan tanpa - [ ]",onChange:ae=>v(ae.target.value)})]}),n.jsx(ge,{label:"Scope verifikasi",hint:"Hanya yang berubah = test/typecheck/lint hanya menyentuh berkas yang disentuh sesi ini. Suite penuh tetap dijalankan manusia sebelum merge.",children:n.jsx(Be,{"aria-label":"Scope verifikasi",value:x,style:{width:"100%"},options:[{value:"changed",label:"Hanya yang berubah — hemat RAM & CPU"},{value:"full",label:"Seluruh project"}],onChange:ae=>_(ae.target.value)})}),n.jsxs(ge,{label:"Metode",hint:"Metodologi kerja sesi ini: skill per fase + direktori plan/spec. Fase-fasenya sendiri tak berubah. Item yang sudah pernah dijalankan memakai metode tercatatnya saat dilanjutkan.",children:[n.jsx(Be,{"aria-label":"Metode",value:T,style:{width:"100%"},options:Oo.map(ae=>({value:ae,label:Dn[ae].label})),onChange:ae=>E(ae.target.value)}),n.jsxs("div",{"data-testid":"method-requires",style:{fontSize:12,color:"var(--text-muted)",marginTop:6},children:["Butuh terpasang: ",((gt=Dn[T])==null?void 0:gt.requires.join(" · "))??"—"]}),et&&!et.ready&&n.jsxs("div",{"data-testid":"method-status-note",style:{fontSize:12,lineHeight:1.5,marginTop:8,padding:"8px 10px",overflowWrap:"anywhere",borderRadius:8,background:"var(--warn-bg, #fdf6e3)",color:"var(--text-muted)"},children:[n.jsx("b",{children:et.label})," belum siap untuk ",n.jsx("b",{children:c==="codex"?"Codex CLI":"Claude Code"})," di mesin ini",et.missingPackages.length>0&&n.jsxs(n.Fragment,{children:[" · paket kurang: ",n.jsx("code",{children:et.missingPackages.join(" · ")})]}),et.missingSkills.length>0&&n.jsxs(n.Fragment,{children:[" · skill kurang: ",n.jsx("code",{children:et.missingSkills.join(" · ")})]}),"."," ","Sesi tetap boleh dijalankan, tapi gerbang yang disebut prompt tak akan ada. Pasang dari Settings → Sesi."]})]})]})}function kC({open:e,onClose:t,projects:a,defaultProject:i,onCreate:r,prefill:s,specs:o}){const l={kind:(s==null?void 0:s.kind)??"brief",project:(s==null?void 0:s.project)||i,title:(s==null?void 0:s.title)??"",context:(s==null?void 0:s.context)??"",outcome:(s==null?void 0:s.outcome)??"",constraints:(s==null?void 0:s.constraints)??"",priority:"sedang",severity:(s==null?void 0:s.severity)??"major",steps:(s==null?void 0:s.steps)??"",expected:"",actual:(s==null?void 0:s.actual)??"",env:"",branchFrom:(s==null?void 0:s.branchFrom)??"",fromAudit:(s==null?void 0:s.fromAudit)??"",goal:(s==null?void 0:s.goal)??"",done:(s==null?void 0:s.done)??"",dependsOn:[],attachments:[]},[d,c]=u.useState(l);u.useEffect(()=>{e&&c({...l,project:(s==null?void 0:s.project)||i})},[e,i,s]);const[h,p]=u.useState([]),[f,b]=u.useState(new Set);u.useEffect(()=>{if(!e||!d.project){p([]),b(new Set);return}let A=!0;return Y.listBranches(d.project).then(B=>{if(!A)return;const O=[...new Set([...B.branches,...B.remotes])].sort();p(O),b(new Set(B.remotes.filter(ne=>!B.branches.includes(ne)))),c(ne=>ne.branchFrom&&!O.includes(ne.branchFrom)?{...ne,branchFrom:""}:ne)}).catch(()=>{A&&(p([]),b(new Set))}),()=>{A=!1}},[e,d.project]);const k=A=>B=>c(O=>({...O,[A]:B.target.value})),g=d.kind==="qa",y=d.kind==="audit",w=d.kind==="goal",v=d.kind==="no_effort",x=Bn(d.kind)==="goal",_=(o??[]).filter(A=>A.projectId===d.project),T=A=>c(B=>({...B,dependsOn:B.dependsOn.includes(A)?B.dependsOn.filter(O=>O!==A):[...B.dependsOn,A]})),E=()=>{!d.title.trim()||x&&!d.goal.trim()||r(d)};return n.jsxs(mt,{open:e,onClose:t,icon:g?"bug":y?"search":v?"zap":w?"target":"lightbulb",eyebrow:"human → hanoman",title:g?"QA finding baru":y?"Audit baru":v?"Task remeh baru":w?"Goal baru":"Feature brief baru",footer:n.jsxs(n.Fragment,{children:[n.jsx(V,{variant:"ghost",size:"sm",onClick:t,children:"Batal"}),n.jsx(V,{size:"sm",leftIcon:g?"radar":y?"search":v?"zap":w?"target":"messages-square",onClick:E,children:g?"Filekan finding → audit":y?"Buat audit → investigasi":v?"Buat task → sesi satu fase":w?"Buat goal → sesi goal":"Buat brief → brainstorm"})]}),children:[n.jsxs("div",{style:{marginBottom:16},children:[n.jsx(Ia,{variant:"pill",value:d.kind,onChange:A=>c(B=>({...B,kind:A})),tabs:[{value:"brief",label:"Feature brief",icon:"lightbulb"},{value:"qa",label:"QA finding",icon:"bug"},{value:"audit",label:"Audit",icon:"search"},{value:"goal",label:"Goal",icon:"target"},{value:"no_effort",label:"Tanpa effort",icon:"zap"}]}),n.jsx("div",{style:{fontSize:12,color:"var(--text-subtle)",marginTop:8,lineHeight:1.5},children:v?"Sesi satu fase (Kerjakan): langsung mengerjakan lalu berhenti — tanpa brainstorm, spec, plan, maupun fase pembuktian terpisah. Untuk ganti copy, bump konstanta, perbaiki typo docs, tambah satu baris allowlist.":w?"Sesi goal langsung mengejar goal-nya — tanpa brainstorm, spec, atau plan (fase: Goal → Verifikasi). Sesi lahir dengan mode goal aktif dan menolak berhenti sampai buktinya ada di transkrip.":g?"Finding masuk lewat alur audit → spec → plan → execute. hanoman menelusuri akar masalah dulu.":y?"Audit HANYA menghasilkan dokumen (audit → laporan) — tanpa perbaikan kode. Bisa dinaikkan jadi Finding QA bila perlu diperbaiki.":"Brief masuk lewat alur brainstorm → objective → spec → plan → execute."})]}),n.jsx(ge,{label:"Project",children:n.jsx(Be,{value:d.project,onChange:k("project"),style:{width:"100%"},options:a.map(A=>({value:A.id,label:A.name}))})}),n.jsx(ge,{label:"Branch",hint:"branch yang di-copy ke git worktree saat run",children:n.jsx(Be,{value:d.branchFrom,onChange:k("branchFrom"),disabled:!h.length,style:{width:"100%"},options:tm(h,f)})}),n.jsx(ge,{label:"Bergantung pada",hint:"Backlog yang harus selesai & ter-merge lebih dulu. Kosongkan bila item ini berdiri sendiri.",children:_.length===0?n.jsx("div",{style:{fontSize:12.5,color:"var(--text-subtle)"},children:"Belum ada backlog lain di project ini."}):n.jsx("div",{style:{maxHeight:132,overflowY:"auto",display:"flex",flexDirection:"column",gap:6,border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",padding:8},children:_.map(A=>n.jsx(sr,{"aria-label":`Bergantung pada ${A.id}`,checked:d.dependsOn.includes(A.id),onChange:()=>T(A.id),label:`${A.id} · ${A.title}`},A.id))})}),n.jsx(ge,{label:"Judul",children:n.jsx(We,{"aria-label":"Judul",value:d.title,onChange:k("title"),placeholder:g?"mis. Funnel double-count sesi lintas tengah malam":v?"mis. Label tombol Simpan di form backlog":w?"mis. Latensi daftar backlog":"mis. Jadwal invoice berulang",style:{width:"100%"}})}),x?n.jsxs(n.Fragment,{children:[n.jsx(ge,{label:"Goal",hint:"Keadaan yang harus tercapai — inilah yang dikejar sesi sampai terbukti",children:n.jsx(zt,{"aria-label":"Goal",value:d.goal,onChange:k("goal"),rows:3,placeholder:"mis. p95 GET /api/specs di bawah 200 ms"})}),n.jsx(ge,{label:"Selesai bila",hint:"Bukti yang harus muncul di transkrip; kosongkan bila goal-nya sudah jadi buktinya sendiri",children:n.jsx(zt,{"aria-label":"Selesai bila",value:d.done,onChange:k("done"),rows:2,placeholder:"mis. output benchmark menunjukkan < 200 ms"})}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1.4fr 1fr",gap:12},children:[n.jsx(ge,{label:"Batasan",hint:"opsional",children:n.jsx(We,{"aria-label":"Batasan",value:d.constraints,onChange:k("constraints"),placeholder:"mis. tanpa cache eksternal",style:{width:"100%"}})}),n.jsx(ge,{label:"Prioritas",children:n.jsx(Be,{"aria-label":"Prioritas",value:d.priority,onChange:k("priority"),style:{width:"100%"},options:Uc})})]})]}):g?n.jsxs(n.Fragment,{children:[n.jsx(ge,{label:"Severity",children:n.jsx(Be,{value:d.severity,onChange:k("severity"),style:{width:"100%"},options:gC})}),n.jsx(ge,{label:"Langkah reproduksi",children:n.jsx(zt,{value:d.steps,onChange:k("steps"),rows:3,mono:!0,placeholder:`1. Buka …
1004
1004
  2. Lakukan …
1005
1005
  3. Amati …`})}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:[n.jsx(ge,{label:"Diharapkan",children:n.jsx(zt,{value:d.expected,onChange:k("expected"),rows:2,placeholder:"mis. total funnel sama dengan jumlah baris laporan harian"})}),n.jsx(ge,{label:"Aktual",children:n.jsx(zt,{value:d.actual,onChange:k("actual"),rows:2,placeholder:"mis. total funnel dua kali lipat untuk sesi yang melewati tengah malam"})})]}),n.jsx(ge,{label:"Environment",hint:"build / kanal tempat finding muncul",children:n.jsx(We,{value:d.env,onChange:k("env"),placeholder:"prod · web · v0.9.2",style:{width:"100%"}})}),n.jsx(ge,{label:"Batasan",hint:"opsional — batasan pengerjaan yang sudah kamu ketahui",children:n.jsx(We,{"aria-label":"Batasan",value:d.constraints,onChange:k("constraints"),placeholder:"mis. jangan ubah kontrak API",style:{width:"100%"}})})]}):n.jsxs(n.Fragment,{children:[n.jsx(ge,{label:y?"Apa yang diaudit / pertanyaan":"Konteks",hint:y?"Isu atau pertanyaan yang mau ditelusuri":"Latar belakang & alasan fitur ini dibutuhkan",children:n.jsx(zt,{value:d.context,onChange:k("context"),rows:3,placeholder:y?"mis. apakah funnel double-count? cek log sesi lintas tengah malam…":"mis. operator harus membuka tiga layar untuk tahu sesi mana yang menunggu"})}),n.jsx(ge,{label:y?"Temuan/jawaban yang diharapkan":"Hasil yang diharapkan",children:n.jsx(zt,{value:d.outcome,onChange:k("outcome"),rows:2,placeholder:y?"Jawaban/kepastian yang dicari…":"mis. satu badge di Overview menunjukkan jumlah sesi yang menunggu"})}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1.4fr 1fr",gap:12},children:[n.jsx(ge,{label:"Batasan",hint:"opsional",children:n.jsx(We,{value:d.constraints,onChange:k("constraints"),placeholder:"mis. reuse queue yang ada",style:{width:"100%"}})}),n.jsx(ge,{label:"Prioritas",children:n.jsx(Be,{value:d.priority,onChange:k("priority"),style:{width:"100%"},options:Uc})})]})]}),n.jsx(ge,{label:"Lampiran",hint:"Gambar, log, CSV, JSON, atau PDF — sesi agen membacanya sebagai konteks",children:n.jsx(jw,{files:d.attachments,onChange:A=>c(B=>({...B,attachments:A}))})})]})}function yC({open:e,onClose:t,onCreate:a}){const i={kind:"from-scratch",mode:"local",name:"",desc:"",dir:"",gitRemote:"",objective:""},[r,s]=u.useState(i),[o,l]=u.useState(!1);u.useEffect(()=>{e&&(s(i),l(!1))},[e]);const d=y=>w=>s(v=>({...v,[y]:w.target.value})),c=r.kind==="from-scratch",h=!c&&r.mode==="clone",p=c?!!r.name.trim()&&!!r.dir.trim():h?!!r.gitRemote.trim()&&!!r.dir.trim():!!r.name.trim()||!!r.dir.trim(),f=async()=>{if(!(!p||o)){l(!0);try{await a(r)}finally{l(!1)}}},[b,k]=u.useState(!1),g=c?"Buat → brainstorm objective":h?o?"Meng-clone…":"Clone → reverse-engineer docs":"Tambah → reverse-engineer docs";return n.jsxs(mt,{open:e,onClose:t,icon:"box",eyebrow:"workspace",title:"Project baru",footer:n.jsxs(n.Fragment,{children:[n.jsx(V,{variant:"ghost",size:"sm",onClick:t,disabled:o,children:"Batal"}),n.jsx(V,{size:"sm",leftIcon:c?"messages-square":h?"git-branch":"radar",onClick:f,disabled:!p||o,children:g})]}),children:[n.jsxs("div",{style:{marginBottom:16},children:[n.jsx(Ia,{variant:"pill",value:r.kind,onChange:y=>s(w=>({...w,kind:y})),tabs:[{value:"from-scratch",label:"From scratch",icon:"sparkles"},{value:"existing",label:"Existing codebase",icon:"folder-git-2"}]}),n.jsx("div",{style:{fontSize:12,color:"var(--text-subtle)",marginTop:8,lineHeight:1.5},children:c?"hanoman brainstorm sampai MVP objective terkunci, lalu scaffold seluruh doc index sebagai Source of Truth.":"hanoman reverse-engineer docs dari codebase yang ada, lalu menyusun Source of Truth-nya."})]}),c?n.jsxs(n.Fragment,{children:[n.jsx(ge,{label:"Nama project",hint:"lowercase, tanpa spasi",children:n.jsx(We,{value:r.name,onChange:d("name"),placeholder:"mis. kirana",style:{width:"100%"}})}),n.jsx(ge,{label:"Direktori",hint:"folder tempat repo baru di-init (mesin ini)",children:n.jsxs("div",{style:{display:"flex",gap:8},children:[n.jsx(We,{value:r.dir,onChange:d("dir"),leftIcon:"folder",mono:!0,placeholder:"/path/ke/project-baru",style:{flex:1}}),n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"folder-open",onClick:()=>k(!0),children:"Pilih folder"})]})}),n.jsx(Hi,{open:b,onClose:()=>k(!1),start:r.dir,onPick:y=>s(w=>({...w,dir:y}))}),n.jsx(ge,{label:"Ide awal",hint:"bahan brainstorm objective → jadi deskripsi & seed scaffold",children:n.jsx(zt,{value:r.objective,onChange:d("objective"),rows:2,placeholder:"mis. POS ritel dengan stok multi-gudang dan laporan harian"})})]}):n.jsxs(n.Fragment,{children:[n.jsx("div",{style:{marginBottom:12},children:n.jsx(Ia,{variant:"pill",value:r.mode,onChange:y=>s(w=>({...w,mode:y})),tabs:[{value:"local",label:"Dari folder lokal",icon:"folder"},{value:"clone",label:"Clone dari URL git",icon:"git-branch"}]})}),h?n.jsx(ge,{label:"URL repository",hint:"GitHub/GitLab · https atau ssh",children:n.jsx(We,{value:r.gitRemote,onChange:d("gitRemote"),leftIcon:"git-branch",mono:!0,placeholder:"https://github.com/org/repo.git",style:{width:"100%"}})}):null,n.jsx(ge,{label:h?"Folder tujuan clone":"Direktori",hint:h?"path lokal tempat repo di-clone (mesin ini)":"opsional · path checkout lokal (bisa diedit belakangan per-mesin)",children:n.jsxs("div",{style:{display:"flex",gap:8},children:[n.jsx(We,{value:r.dir,onChange:d("dir"),leftIcon:"folder",mono:!0,placeholder:"/path/ke/repo",style:{flex:1}}),n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"folder-open",onClick:()=>k(!0),children:"Pilih folder"})]})}),n.jsx(Hi,{open:b,onClose:()=>k(!1),start:r.dir,onPick:y=>s(w=>({...w,dir:y}))}),n.jsx(ge,{label:"Deskripsi",hint:"opsional",children:n.jsx(We,{value:r.desc,onChange:d("desc"),placeholder:"mis. POS ritel + inventori",style:{width:"100%"}})})]})]})}function vC({open:e,project:t,onClose:a,onSave:i}){const[r,s]=u.useState({id:"",name:"",desc:"",dir:"",gitRemote:""}),[o,l]=u.useState(!1),[d,c]=u.useState(null),[h,p]=u.useState([]),f=!!(d!=null&&d.length);u.useEffect(()=>{e&&t&&(s({id:t.id,name:t.name,desc:t.desc,dir:t.binding??"",gitRemote:t.gitRemote??""}),p((t.handledBy??[]).map(g=>({deviceId:g.deviceId,name:g.name}))))},[e,t]),u.useEffect(()=>{var y;if(!e)return;let g=!0;return(y=Y.listDeviceTokens)==null||y.call(Y).then(w=>{g&&c(w)}).catch(()=>{g&&c([])}),()=>{g=!1}},[e]);const b=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(r.id.trim()),k=!!r.name.trim()&&b;return n.jsxs(mt,{open:e,onClose:a,icon:"pencil",eyebrow:t?t.id:"project",title:"Edit project",footer:n.jsxs(n.Fragment,{children:[n.jsx(V,{variant:"ghost",size:"sm",onClick:a,children:"Batal"}),n.jsx(V,{size:"sm",leftIcon:"check",onClick:()=>k&&i({...r,handledBy:f?h:void 0}),children:"Simpan"})]}),children:[n.jsx(ge,{label:"ID project",hint:"slug unik · huruf-kecil/angka/hubung · ganti = pengaruh Help Center & sync ke server",children:n.jsx(We,{value:r.id,onChange:g=>s(y=>({...y,id:g.target.value})),leftIcon:"hash",mono:!0,placeholder:"mis. erp-tumbuh-ai",style:{width:"100%"}})}),n.jsx(ge,{label:"Nama project",hint:"label tampilan — boleh berbeda dari id",children:n.jsx(We,{value:r.name,onChange:g=>s(y=>({...y,name:g.target.value})),placeholder:"mis. ERP Tumbuh AI",style:{width:"100%"}})}),n.jsx(ge,{label:"Deskripsi",children:n.jsx(We,{value:r.desc,onChange:g=>s(y=>({...y,desc:g.target.value})),placeholder:"mis. ERP manufaktur + inventori",style:{width:"100%"}})}),n.jsx(ge,{label:"Path (mesin ini)",hint:"opsional · disimpan lokal, tak disync · kosongkan = pakai default",children:n.jsxs("div",{style:{display:"flex",gap:8},children:[n.jsx(We,{value:r.dir,onChange:g=>s(y=>({...y,dir:g.target.value})),leftIcon:"folder",mono:!0,placeholder:"/path/ke/repo (mesin ini)",style:{flex:1,minWidth:0}}),n.jsx(V,{size:"sm",variant:"secondary",leftIcon:"folder-open",onClick:()=>l(!0),children:"Pilih folder"})]})}),n.jsx(Hi,{open:o,onClose:()=>l(!1),start:r.dir,onPick:g=>s(y=>({...y,dir:g}))}),n.jsx(ge,{label:"Git remote",hint:"opsional · remote resmi agar device lain bisa clone project ini · disync antar-device",children:n.jsx(We,{value:r.gitRemote,onChange:g=>s(y=>({...y,gitRemote:g.target.value})),leftIcon:"git-branch",mono:!0,placeholder:"https://github.com/org/repo.git",style:{width:"100%"}})}),n.jsx(ge,{label:"Ditangani oleh",hint:f?"hanoman client yang memegang project ini · disync ke semua mesin · boleh kosong":"disync ke semua mesin · hanya bisa diubah dari instance yang memegang katalog device",children:f?n.jsx(bo,{"aria-label":"Pilih hanoman client",placeholder:"Pilih client…",searchPlaceholder:"mis. mac-mini atau vps-jakarta",emptyText:"Tak ada device terdaftar yang cocok.",value:h.map(g=>g.deviceId),invalidValues:h.filter(g=>!d.some(y=>y.id===g.deviceId&&!y.revokedAt)).map(g=>g.deviceId),options:d.filter(g=>!g.revokedAt).map(g=>({value:g.id,label:g.lastSeenAt?`${g.name} · terakhir ${new Date(g.lastSeenAt).toLocaleDateString("id-ID")}`:g.name})),onChange:g=>p(g.map(y=>{var w;return h.find(v=>v.deviceId===y)??{deviceId:y,name:((w=d.find(v=>v.id===y))==null?void 0:w.name)??y}}))}):n.jsx(ml,{list:t==null?void 0:t.handledBy})})]})}function xC(){return n.jsx(cp,{children:n.jsx(wC,{})})}function wC(){var Pl,Il;fh();const e=up(),t=hp(),a=u.useMemo(()=>xk(e.pathname,Cr),[e.pathname]),[i,r]=Pt("app","section","overview",Gs(...Cr)),s=(a==null?void 0:a.section)??i;u.useEffect(()=>{a&&Cr.includes(a.section)&&r(a.section)},[a==null?void 0:a.section]);const o=u.useCallback(j=>t(jn({section:j})),[t]),l=u.useCallback(j=>t(jn({section:"project",projectId:j})),[t]),[d,c]=u.useState(null),[h,p]=u.useState(null),[f,b]=u.useState([]),[k,g]=u.useState([]),y=u.useRef(""),[w,v]=u.useState(0),[x,_]=u.useState([]),[T,E]=u.useState([]),[A,B]=Pt("app","projectId","",_a),[O,ne]=u.useState(null),[Z,P]=Pt("app","projectFilter","all",_a),[D,W]=u.useState(null),[F,N]=u.useState(null),[ee,J]=u.useState(null),H=u.useCallback(j=>{W(j??null),o("terminal")},[o]),[K,me]=Pt("projects","q","",_a),[He,fe]=u.useState(null),{confirm:Te,dialog:ze}=al(),Me=vw(),[Ye,I]=u.useState(null),[be,Re]=u.useState(null),[Ze,oe]=V1(),[je,Ce]=u.useState("loading"),[ke,Ue]=u.useState(null),Je=u.useCallback(()=>Ue({needsSetup:!1,user:null}),[]);u.useEffect(()=>{Y.authStatus().then(Ue).catch(()=>Ue({needsSetup:!1,user:null}))},[]);const[rt,et]=u.useState(null),[xt,kt]=u.useState(!1);u.useEffect(()=>{(ke!=null&&ke.needsSetup||ke!=null&&ke.user)&&Y.setupStatus().then(et).catch(()=>et(null))},[ke==null?void 0:ke.needsSetup,(Pl=ke==null?void 0:ke.user)==null?void 0:Pl.id]),u.useEffect(()=>{Zx()},[]),u.useEffect(()=>{const j=WS(window.location.hash);if(j){t(jn({section:"backlog",specId:j}),{replace:!0});return}const U=KS(window.location.hash);if(U){t(jn({section:"changelog",projectId:U.projectId,changelogId:U.changelogId}),{replace:!0});return}a||t(jn({section:i}),{replace:!0})},[a]),u.useEffect(()=>{((a==null?void 0:a.section)==="project"||(a==null?void 0:a.section)==="changelog")&&a.projectId&&B(a.projectId),(a==null?void 0:a.section)==="backlog"&&c(a.specId??null),(a==null?void 0:a.section)==="changelog"&&p(a.changelogId??null)},[a==null?void 0:a.section,a==null?void 0:a.projectId,a==null?void 0:a.specId,a==null?void 0:a.changelogId]);const[pt,gt]=u.useState({enabled:!1,devices:[],hubVersion:""}),[ae,tt]=u.useState(null),X=u.useCallback(()=>{Ce("loading"),Promise.all([Y.listProjects(),Y.listSpecs(),Y.listTerminals()]).then(([j,U,z])=>{b(j.items),g(U.items.map(GS)),_(z),y.current=jc(U.items),B(ue=>{var ve;return ue||((ve=j.items[0])==null?void 0:ve.id)||""}),v(ue=>ue+1),Ce("ready")}).catch(j=>{if(j instanceof lt&&j.status===401){Je();return}Ce("error"),oe("Gagal memuat data dari server","err","x-circle")})},[oe,Je]);u.useEffect(()=>{ke!=null&&ke.user&&X()},[X,ke==null?void 0:ke.user]);const de=f,at=u.useCallback(async j=>{try{const U=await Y.getProject(j);b(z=>z.map(ue=>ue.id===U.id?U:ue))}catch{}},[]),Ft=u.useMemo(()=>new Set(x.filter(j=>j.specId&&!j.exited).map(j=>j.specId)),[x]),Ht=u.useMemo(()=>HS(pt),[pt]),Vt=u.useMemo(()=>Object.fromEntries(k.map(j=>[j.id,j.title])),[k]);u.useEffect(()=>On(j=>{if(j.t==="specs"){const U=jc(j.specs);U!==y.current&&(y.current=U,g(j.specs),v(z=>z+1))}else if(j.t==="sessions")_(j.sessions);else if(j.t==="leadAsks")E(j.asks);else if(j.t==="presence"){const U={enabled:j.enabled,devices:j.devices,hubVersion:j.hubVersion};gt(z=>Sc(z)===Sc(U)?z:U)}else j.t==="pending"&&tt(j.counts)}),[]);const q=de.find(j=>j.id===A)||de[0];function qe(j){B(j.id),l(j.id)}const wt=(j,U)=>t(jn({section:"review",kind:j,id:U}));function ca(j){ne({id:j.id,kind:"spec",title:j.title}),wt("spec",j.id)}function nn(j){var U;ne({id:j,kind:"spec",title:((U=k.find(z=>z.id===j))==null?void 0:U.title)??j}),wt("spec",j)}function mi(j,U){ne({id:j,kind:"session",title:U}),wt("session",j)}const Pe=(a==null?void 0:a.section)==="review"?O&&O.id===a.id&&O.kind===a.kind?O:{id:a.id,kind:a.kind,title:((Il=k.find(j=>j.id===a.id))==null?void 0:Il.title)??a.id}:null,zn=u.useCallback(j=>{const U=G1(j,x);U.projectFilter&&P(U.projectFilter),U.focus&&W(U.focus),o(U.section)},[x]);async function Ut(j){if(!q)return;const U=j.id.trim();try{if(U&&U!==q.id){if(!await Te({title:`Ganti ID project "${q.id}" → "${U}"?`,message:"Ini berpengaruh ke SEMUA yang terkait project:",impact:[n.jsxs(n.Fragment,{children:["Link Help Center publik berubah jadi ",n.jsxs("code",{children:["/help/",U]})," — tautan lama rusak."]}),"Perubahan dirambatkan (sync) ke server; server ikut berganti id."],confirmLabel:"Ganti ID",icon:"pencil"}))return;const Ie=await Y.renameProject(q.id,U);Ie.helpUrl&&oe("Help Center baru: "+Ie.helpUrl,"ok","life-buoy")}const z=U&&U!==q.id?U:q.id;await Y.updateProject(z,{name:j.name.trim(),desc:j.desc.trim(),gitRemote:j.gitRemote.trim(),...j.handledBy?{handledBy:j.handledBy}:{}});const ue=j.dir.trim();ue!==(q.binding??"")&&(ue?await Y.putBinding(z,ue):await Y.deleteBinding(z));const ve=await Y.getProject(z);b(Ie=>[...Ie.filter(jt=>jt.id!==q.id&&jt.id!==ve.id),ve]),B(ve.id),fe(null),oe("Project "+ve.name+" diperbarui","ok","box")}catch{oe("Gagal memperbarui project","err","x-circle")}}async function Nn(j){var jt;const U=j.kind==="from-scratch",z=!U&&j.mode==="clone",ue=jl(j.gitRemote),ve=j.name.trim()||(z?ue:j.dir.split("/").filter(Boolean).pop()||"repo");let Ie;try{Ie=await Y.createProject({name:ve,kind:j.kind,desc:U&&j.objective.trim()||j.desc.trim(),repoDir:U?j.dir.trim():z?void 0:j.dir,gitRemote:z?j.gitRemote.trim():void 0})}catch{oe("Gagal membuat project","err","x-circle");return}if(z)try{await Y.cloneProject(Ie.id,j.dir.trim()),Ie=await Y.getProject(Ie.id)}catch(aa){const{error:yn}=Om(aa);b(rp=>[Ie,...rp]),B(Ie.id),fe(null),l(Ie.id),oe(`Project ${Ie.id} dibuat, tapi clone gagal · ${yn} · clone ulang dari detail project`,"warn","git-branch");return}if(b(aa=>[Ie,...aa]),fe(null),U){let aa=!0;try{aa=(await Y.getSettings()).autoScaffold}catch{}if(aa)try{const{id:yn}=await Y.scaffoldDocs(Ie.id);B(Ie.id),H(yn),oe(`Project ${Ie.id} dibuat · scaffold docs · sesi ${yn} dimulai`,"ok","sparkles");return}catch{}B(Ie.id),l(Ie.id),oe(`Project ${Ie.id} dibuat · tekan "Scaffold docs" untuk menyusun SoT`,"ok","box");return}B(Ie.id);try{const{id:aa}=await Y.reverseDocs(Ie.id);H(aa),oe(`Project ${Ie.id} dibuat · reverse docs · sesi ${aa} dimulai`,"ok","radar")}catch(aa){const yn=(jt=aa.detail)==null?void 0:jt.error;l(Ie.id),oe(`Project ${Ie.id} dibuat, tapi reverse docs gagal dimulai`+(yn?` · ${yn}`:"")+' · ulangi lewat "Reverse docs"',"warn","radar")}}async function va(j){try{if(!await Te({title:`Hapus project "${j.name}"?`,message:`Project "${j.id}" dan seluruh isinya dihapus dari dashboard ini.`,impact:["Semua backlog item project ini ikut terhapus.","Tindakan ini tak bisa dibatalkan."],confirmLabel:"Hapus project",run:()=>Y.deleteProject(j.id)}))return;b(U=>U.filter(z=>z.id!==j.id)),g(U=>U.filter(z=>z.projectId!==j.id)),_(U=>U.filter(z=>z.projectId!==j.id)),B(U=>U===j.id?"":U),P(U=>U===j.id?"all":U),(s==="docs"||s==="project")&&o("projects"),oe("Project "+j.id+" dihapus","warn","trash-2")}catch(U){const z=U instanceof lt&&U.status===409;oe("Gagal hapus "+j.id+(z?" · masih ada sesi aktif":""),"err","x-circle")}}const[$t,ua]=u.useState(null);function Ba(j){J("backlog"),ua(j)}function ta(j){J("terminal"),ua(j)}const Fn=u.useCallback(()=>N(null),[]);async function fn(j,U,z){try{const ue=await Y.integrateSpec(j.id,U,z);ue.status==="conflict"?(H(ue.sessionId),oe(`${j.id} · konflik ${U} — selesaikan di Terminal`,"warn","git-merge")):oe(`${j.id} · ${U} berhasil · ${ue.detail}`,"ok","git-merge")}catch(ue){const ve=ue instanceof lt?ue.status:0;oe(`${j.id} · gagal ${U}`+(ve===409?" · cek target/branch":""),"err","x-circle")}}async function Hn(j,U,z){try{const ue=await Y.sessionIntegrate(j.id,U,z);ue.status==="conflict"?(H(ue.sessionId),oe(`${j.id} · konflik ${U} — selesaikan di Terminal`,"warn","git-merge")):oe(`${j.id} · ${U} berhasil · ${ue.detail}`,"ok","git-merge")}catch(ue){const ve=ue instanceof lt?ue.status:0;oe(`${j.id} · gagal ${U}`+(ve===409?" · cek target/branch":""),"err","x-circle")}}async function bn(j,U){try{const{id:z}=await(U?Y.reverseDocs(j.id,{force:U}):Y.reverseDocs(j.id));H(z),oe(j.id+" · reverse docs · sesi "+z+" dimulai","info","radar")}catch(z){if(Me.offerRetry(z,`${j.id} · reverse docs`,ve=>bn(j,ve)))return;const ue=z instanceof lt&&(z.status===422||z.status===400);oe(j.id+" · gagal mulai reverse"+(ue?" · project belum punya repoDir":""),"warn","x-circle")}}async function sn(j,U){try{const{id:z}=await(U?Y.scaffoldDocs(j.id,{force:U}):Y.scaffoldDocs(j.id));H(z),oe(j.id+" · scaffold docs · sesi "+z+" dimulai","info","sparkles")}catch(z){if(Me.offerRetry(z,`${j.id} · scaffold docs`,ve=>sn(j,ve)))return;const ue=z instanceof lt&&(z.status===422||z.status===400);oe(j.id+" · gagal mulai scaffold"+(ue?" · project belum punya repoDir":""),"warn","x-circle")}}async function Da(j,U,z,ue){try{const{id:ve}=await Y.startPrd(j,U,ue?{...z,force:ue}:z);H(ve),oe(`PRD · sesi ${ve} dimulai`,"info","scroll-text")}catch(ve){if(Me.offerRetry(ve,`${j} · PRD`,jt=>Da(j,U,z,jt)))return;const Ie=ve instanceof lt&&(ve.status===422||ve.status===400);oe("gagal mulai PRD"+(Ie?" · project belum punya repoDir":""),"warn","x-circle")}}function Un(j){I(j),fe("brief")}async function Oa(j,U,z){try{const{id:ue}=await(z?Y.startBreakdown(j,U,{force:z}):Y.startBreakdown(j,U));H(ue),oe(`Breakdown · sesi ${ue} dimulai`,"info","split")}catch(ue){if(Me.offerRetry(ue,`${j} · breakdown`,Ie=>Oa(j,U,Ie)))return;const ve=ue instanceof lt&&(ue.status===422||ue.status===400);oe("gagal mulai breakdown"+(ve?" · project belum punya repoDir/PRD":""),"warn","x-circle")}}async function kn(j,U,z){try{const{created:ue}=await Y.createSpecsBatch({project:j,items:z,prdPath:U});return g(ve=>[...ue,...ve]),o("backlog"),oe(`${ue.length} backlog dibuat dari breakdown`,"ok","list-checks"),ue.length}catch{return oe("Gagal membuat backlog dari breakdown","err","x-circle"),0}}function ce(j,U){const z=U==null?void 0:U.prefill,ue=`Dari audit ${j.id}: ${j.objective}`;I({project:j.projectId,kind:"qa",title:(z==null?void 0:z.title)||j.title,steps:((z==null?void 0:z.steps)||ue).slice(0,500),actual:(z==null?void 0:z.context)||j.objective,severity:z!=null&&z.severity&&["critical","major","minor"].includes(z.severity)?z.severity:"major",constraints:(z==null?void 0:z.constraints)??"",branchFrom:`hanoman/${j.id.toLowerCase()}`,fromAudit:j.id}),fe("brief")}function De(j,U){const z=U==null?void 0:U.prefill;I({project:j.projectId,kind:"brief",title:(z==null?void 0:z.title)||j.title,context:(z==null?void 0:z.context)||`Dari audit ${j.id}: ${j.objective}`,outcome:(z==null?void 0:z.outcome)||"",branchFrom:`hanoman/${j.id.toLowerCase()}`,fromAudit:j.id}),fe("brief")}function Xe(j,U){const z=U==null?void 0:U.prefill;Re({project:j.projectId,branchFrom:`hanoman/${j.id.toLowerCase()}`,fromAudit:j.id,title:(z==null?void 0:z.title)||j.title,context:(z==null?void 0:z.context)||`Dari audit ${j.id}: ${j.objective}`,outcome:(z==null?void 0:z.outcome)||""})}async function ct(j,U){try{const z=await Y.patchSpec(j.id,{branchFrom:U});if("pending"in z)return;g(ue=>ue.map(ve=>ve.id===z.id?z:ve)),oe(j.id+" · branch "+(U??"main (default project)"),"ok","git-branch")}catch{oe("Gagal mengubah branch "+j.id,"err","x-circle")}}async function Et(j,U){try{const z=await Y.patchSpec(j.id,U);if("pending"in z)return;g(ue=>ue.map(ve=>ve.id===z.id?z:ve)),oe(j.id+" diperbarui","ok","check")}catch(z){const ue=z instanceof lt&&z.status===409;oe(ue?j.id+" sudah dimulai — tak bisa diedit":"Gagal menyimpan "+j.id,"warn","x-circle")}}async function Q(j,U,z,ue){try{const ve=await Y.changeSpecSource(j.id,{source:U,payload:z,confirmReset:ue});return"pending"in ve?ve:(g(Ie=>Ie.map(jt=>jt.id===ve.id?ve:jt)),oe(`${j.id} · type ${j.source} → ${U}`,"ok","shuffle"),null)}catch(ve){const Ie=ve instanceof lt&&ve.status===409;return oe(Ie?`${j.id} punya sesi yang masih berjalan — tutup dulu sesinya`:`Gagal mengubah type ${j.id}`,"warn","x-circle"),null}}async function he(j,U){try{const z=await Y.patchSpec(j.id,{dependsOn:U});if("pending"in z)return;g(ue=>ue.map(ve=>ve.id===z.id?z:ve)),oe(j.id+" · dependency diperbarui","ok","lock")}catch(z){const ue=z instanceof lt&&z.status===400;oe(ue?"Dependency ditolak server":"Gagal menyimpan dependency "+j.id,"warn","x-circle")}}async function Ne(j,U){try{const z=await Y.patchSpec(j.id,{autoMerge:U});if("pending"in z)return;g(ue=>ue.map(ve=>ve.id===z.id?z:ve)),oe(j.id+" · auto-merge diperbarui","ok","git-merge")}catch(z){const ue=z instanceof lt?z.message:"Gagal menyimpan auto-merge "+j.id;oe(ue,"warn","x-circle")}}async function ft(j,U,z){try{const ue=await Y.patchSpec(j.id,{stage:U,confirmDelete:z});return"pending"in ue||(g(ve=>ve.map(Ie=>Ie.id===ue.id?ue:Ie)),oe(j.id+" dikembalikan ke "+U,"warn","rotate-ccw")),ue}catch{oe("Gagal mengembalikan stage "+j.id,"err","x-circle");return}}async function ha(j,U,z){var ue;try{const ve=await Y.markSpecDone(j.id,{reason:U||void 0,confirm:z});return g(Ie=>Ie.map(jt=>jt.id===ve.id?ve:jt)),oe(j.id+" ditandai selesai","ok","circle-check"),ve}catch(ve){const Ie=ve instanceof lt?ve.detail:null;if((Ie==null?void 0:Ie.error)==="confirm-required")return{needConfirm:!0,sessionId:(ue=Ie.session)==null?void 0:ue.id};oe((Ie==null?void 0:Ie.error)==="backlog item sudah selesai"?j.id+" sudah selesai":"Gagal menandai selesai "+j.id,"warn","x-circle");return}}async function Gn(j){await Y.deleteSpec(j.id),g(U=>U.filter(z=>z.id!==j.id)),oe(j.id+" dihapus dari backlog","warn","trash-2")}async function pr(j){const U=j.kind==="qa",z=Bn(j.kind)==="goal",ue=U?{severity:j.severity,steps:j.steps,expected:j.expected,actual:j.actual,env:j.env,constraints:j.constraints,...j.fromAudit?{fromAudit:j.fromAudit}:{}}:z?{goal:j.goal.trim(),done:j.done,constraints:j.constraints,priority:j.priority}:{context:j.context,outcome:j.outcome,constraints:j.constraints,priority:j.priority,...j.fromAudit?{fromAudit:j.fromAudit}:{}};try{const ve=await Y.createSpec({project:j.project,source:j.kind,title:j.title.trim(),priority:j.priority,payload:ue,branchFrom:j.branchFrom||void 0,...j.dependsOn.length?{dependsOn:j.dependsOn}:{}});if(g(jt=>[ve,...jt]),j.attachments.length){const jt=await Y.uploadSpecAttachments(ve.id,j.attachments).catch(()=>null);jt?jt.rejected.length&&oe(`${jt.rejected.length} lampiran ditolak: ${jt.rejected.map(aa=>aa.filename).join(", ")}`,"warn","paperclip"):oe("Item dibuat, tapi lampiran gagal diunggah","warn","paperclip")}fe(null),I(null),o("backlog");const Ie=j.kind==="audit"?" dibuat · audit-only (dokumen)":j.kind==="no_effort"?" dibuat · sesi satu fase (Kerjakan)":j.kind==="goal"?" dibuat · sesi goal (Goal → Verifikasi)":U?" difilekan · masuk audit":" dibuat · masuk brainstorm";oe(ve.id+Ie,"ok",j.kind==="audit"?"search":j.kind==="no_effort"?"zap":j.kind==="goal"?"target":U?"bug":"lightbulb")}catch{oe("Gagal membuat spec","err","x-circle")}}const pi=j=>n.jsx(D1,{children:n.jsx(u.Suspense,{fallback:n.jsx(ye,{kind:"loading",title:"Memuat halaman…"}),children:j})}),ma=j=>je==="loading"?n.jsx(ye,{kind:"loading",title:"Memuat workspace…"}):je==="error"?n.jsx(ye,{kind:"error",illustration:"PST-006",title:"Gagal memuat data dari server",hint:"Pastikan server hanoman berjalan, lalu coba lagi.",action:X}):pi(j);if(!ke)return n.jsx(ye,{kind:"loading",title:"Memuat hanoman…"});if(ke.needsSetup&&(rt!=null&&rt.needed)&&!xt)return n.jsx(Mw,{status:rt,onDone:()=>kt(!0)});if(!ke.user)return n.jsx(Ew,{needsSetup:ke.needsSetup,setupTokenRequired:ke.setupTokenRequired??!1,onDone:j=>Ue({needsSetup:!1,user:j})});if(ke.user.role==="client")return n.jsx(Nw,{user:ke.user,onLoggedOut:Je});const gr=ke.user;let At=null;if(s==="overview")At=n.jsx(Bt,{active:"overview",title:"Overview",breadcrumb:"nafanesia.id · ringkasan workspace",onNavigate:o,children:ma(n.jsx(l_,{projects:de,backlog:k,sessions:x,onOpenProject:qe,onGoto:o,onOpenSession:j=>{W(j),o("terminal")}}))});else if(s==="dalang")At=ma(n.jsx(nC,{projects:de,backlog:k,sessions:x,onOpenProject:qe,onGoto:o,onOpenSession:j=>{W(j),o("terminal")},onExit:()=>o("overview")}));else if(s==="projects")At=n.jsx(Bt,{active:"projects",title:"Projects",breadcrumb:"nafanesia.id · workspace",showSearch:!0,searchValue:K,onSearchChange:me,onNavigate:o,actions:n.jsx(V,{size:"sm",leftIcon:"plus",onClick:()=>fe("project"),children:"Project baru"}),children:ma(de.length===0?n.jsx(ye,{kind:"empty",icon:"box",title:"Belum ada project",hint:"Mulai dari nol atau tambahkan codebase yang sudah ada — hanoman menyusun Source of Truth-nya.",action:()=>fe("project"),actionLabel:"Project baru"}):n.jsx(m_,{projects:de,variant:"list",onOpen:qe,onDelete:va,pageSize:20,search:K,dataVersion:w,onClearSearch:()=>me(""),presenceByProject:Ht.byProject}))});else if(s==="project")At=n.jsx(Bt,{active:"projects",title:q?q.name:"Project",breadcrumb:q?"projects · "+q.id:"projects",onNavigate:o,children:ma(q?n.jsx(__,{p:q,onEdit:()=>fe("project-edit"),onToast:oe,onProjectChanged:at,onGotoDocs:()=>o("docs"),onGotoTerminal:()=>{P(q.id),H()},onGotoBacklog:()=>{P(q.id),o("backlog")},onGotoChangelog:()=>o("changelog"),onReverse:q.kind==="existing"&&(q.binding??q.repoDir)?()=>bn(q):void 0,onScaffold:q.kind==="from-scratch"&&(q.binding??q.repoDir)?()=>sn(q):void 0,onDelete:()=>va(q)}):n.jsx(ye,{kind:"empty",icon:"box",title:"Belum ada project",hint:"Mulai dari nol atau tambahkan codebase yang sudah ada.",action:()=>fe("project"),actionLabel:"Project baru"}))});else if(s==="backlog")At=n.jsx(Bt,{active:"backlog",title:"Backlog",breadcrumb:"specs · brainstorm → execute",onNavigate:o,actions:n.jsx(V,{size:"sm",leftIcon:"plus",onClick:()=>fe("brief"),children:"Tambah"}),children:ma(n.jsx(W_,{backlog:k,projects:de,pageSize:20,onStart:Ba,activeSpecs:Ft,presenceBySpec:Ht.bySpec,onNew:()=>fe("brief"),onDelete:Gn,onOpenRun:j=>{var U;return H((U=x.find(z=>z.specId===j.id&&!z.exited))==null?void 0:U.id)},onOpenReview:ca,onEditBranch:ct,onRevertStage:ft,onMarkDone:ha,onIntegrate:fn,onEditSpec:Et,onEditDeps:he,onEditAutoMerge:Ne,onChangeSource:Q,onPromoteToQa:ce,onPromoteToBrief:De,onPromoteToPrd:Xe,onToast:oe,initialDetailId:d,projectFilter:Z,onProjectFilter:P,dataVersion:w}))});else if(s==="team")At=n.jsx(Bt,{active:"team",title:"Tim",breadcrumb:"tugas manusia · backlog → selesai",onNavigate:o,children:n.jsx(iC,{projects:de,projectFilter:Z,onProjectFilter:P,onToast:oe})});else if(s==="triage")At=n.jsx(Bt,{active:"triage",title:"Triase",breadcrumb:"keluhan · lapor → triase → backlog",onNavigate:o,children:n.jsx(sC,{projects:de,onToast:oe,onAccepted:(j,U)=>{oe(U?`Tiket sudah jadi ${j.id}`:`Diterima → ${j.id}`,"ok","arrow-up-right"),P(j.projectId),o("backlog")}})});else if(s==="prd")At=n.jsx(Bt,{active:"prd",title:"PRD",breadcrumb:"brief → brainstorm → dokumen",onNavigate:o,children:ma(de.length===0?n.jsx(ye,{kind:"empty",icon:"box",title:"Belum ada project",hint:"PRD butuh project dengan repoDir untuk menulis docs/prd/.",action:()=>fe("project"),actionLabel:"Project baru"}):n.jsx(X_,{projects:de,projectFilter:Z,onProjectFilter:P,onNewPrd:Da,onTakeToBacklog:Un,onStartBreakdown:Oa,onMaterialize:kn,dataVersion:w}))});else if(s==="terminal")At=n.jsx(Bt,{active:"terminal",title:"Terminal",breadcrumb:"Claude Code · sesi interaktif",onNavigate:o,wide:!0,children:ma(de.length===0?n.jsx(ye,{kind:"empty",icon:"box",title:"Belum ada project",hint:"Terminal butuh project dengan repoDir untuk dijalankan.",action:()=>fe("project"),actionLabel:"Project baru"}):n.jsx(rC,{userId:gr.id,projects:de,backlog:k,focusSession:D,sessions:x,setSessions:_,startedSession:F,onStartedSessionHandled:Fn,onStartBacklog:ta,onOpenReview:nn,onOpenSessionReview:mi,titleOf:j=>{var U;return(U=k.find(z=>z.id===j))==null?void 0:U.title},onIntegrate:fn,onIntegrateSession:Hn,specOf:j=>k.find(U=>U.id===j)}))});else if(s==="ide")At=n.jsx(Bt,{active:"ide",title:"IDE",breadcrumb:q?q.name:"workspace",onNavigate:o,wide:!0,children:ma(de.length===0?n.jsx(ye,{kind:"empty",icon:"box",title:"Belum ada project",hint:"IDE butuh project dengan repoDir.",action:()=>fe("project"),actionLabel:"Project baru"}):n.jsx(oC,{projects:de,projectId:q?q.id:de[0].id,onProject:j=>B(j),onToast:oe,onGotoTerminal:H}))});else if(s==="vps")At=n.jsx(Bt,{active:"vps",title:"VPS",breadcrumb:"infra · audit → harden",onNavigate:o,children:n.jsx(lC,{onToast:oe,onGotoTerminal:H})});else if(s==="clients")At=n.jsx(Bt,{active:"clients",title:"Klien",breadcrumb:"device · sesi yang sedang berjalan",onNavigate:o,children:n.jsx(FS,{view:pt,specTitles:Vt,onOpenSpec:nn})});else if(s==="scheduler")At=n.jsx(Bt,{active:"scheduler",title:"Scheduler",breadcrumb:"otonom · jadwal → antrean → sesi",onNavigate:o,children:n.jsx(dC,{projects:de,backlog:k,onProjectChanged:at,onToast:oe,onGotoTerminal:H})});else if(s==="lead")At=n.jsx(Bt,{active:"lead",title:"Lead",breadcrumb:"otonom · keputusan → jejak → kendali",onNavigate:o,children:n.jsx(cC,{projects:de,onProjectChanged:at,onToast:oe,onGotoTerminal:H})});else if(s==="docs")At=n.jsx(Bt,{active:"docs",title:"Source of Truth",breadcrumb:q?q.name:"workspace",onNavigate:o,wide:!0,actions:q&&n.jsxs(n.Fragment,{children:[n.jsx(Be,{size:"sm",value:q.id,onChange:j=>B(j.target.value),options:de.map(j=>({value:j.id,label:j.name}))}),n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"trash-2",onClick:()=>va(q),children:"Hapus project"})]}),children:ma(q?n.jsx(uC,{projectId:q.id,projectName:q.name,docStatus:q.docStatus}):n.jsx(ye,{kind:"empty",icon:"book-open",title:"Belum ada project",hint:"Source of Truth muncul setelah ada project yang dipantau.",action:()=>fe("project"),actionLabel:"Project baru"}))});else if(s==="changelog")At=n.jsx(Bt,{active:"changelog",title:"Changelog",breadcrumb:q?q.name+" · rilis untuk pemakai":"workspace",onNavigate:o,actions:q&&n.jsxs(n.Fragment,{children:[n.jsx(Be,{size:"sm","aria-label":"Project",value:q.id,onChange:j=>B(j.target.value),options:de.map(j=>({value:j.id,label:j.name}))}),n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"link",onClick:()=>{var j;(j=navigator.clipboard)==null||j.writeText(VS(q.id)),oe("Link halaman changelog disalin","ok","link")},children:"Salin link"})]}),children:ma(q?n.jsx(hC,{p:q,onToast:oe,initialChangelogId:h}):n.jsx(ye,{kind:"empty",icon:"megaphone",title:"Belum ada project",hint:"Changelog muncul setelah ada project yang dipantau.",action:()=>fe("project"),actionLabel:"Project baru"}))});else if(s==="review"){const j=(Pe==null?void 0:Pe.kind)==="session"?"terminal":"backlog";At=n.jsx(Bt,{active:"backlog",title:"Review",wide:!0,onNavigate:o,breadcrumb:Pe?(Pe.kind==="session"?"terminal · ":"backlog · ")+Pe.id:"review",actions:n.jsx(V,{size:"sm",variant:"ghost",leftIcon:"arrow-left",onClick:()=>o(j),children:"Kembali"}),children:ma(Pe?n.jsx(mC,{specId:Pe.id,kind:Pe.kind,title:Pe.title,onBack:()=>o(j)}):n.jsx(ye,{kind:"empty",icon:"git-compare",title:"Pilih item untuk di-review",hint:"Buka Review dari Backlog atau dari sel sesi di Terminal.",action:()=>o("backlog"),actionLabel:"Ke Backlog"}))})}else s==="settings"&&(At=n.jsx(Bt,{active:"settings",title:"Settings",breadcrumb:"nafanesia.id · workspace",onNavigate:o,children:pi(n.jsx(pC,{onToast:oe,me:gr,onLoggedOut:Je}))}));return n.jsx(zx,{user:gr,onLoggedOut:Je,children:n.jsxs(U1,{showToast:oe,onOpen:zn,children:[n.jsx(Pw,{status:rt}),n.jsx(Gh.Provider,{value:{clients:pt.enabled},children:n.jsx(Uh.Provider,{value:ae,children:At})}),n.jsx(aC,{sessions:x,backlog:k,asks:T,onOpen:j=>{j.sessionId&&W(j.sessionId),o(j.section)}}),n.jsx(kC,{open:He==="brief",onClose:()=>{fe(null),I(null)},projects:de,defaultProject:q?q.id:"",onCreate:pr,prefill:Ye??void 0,specs:k})," ",be&&n.jsx(Km,{projects:de,defaultProject:be.project,lockProject:!0,prefill:{title:be.title,context:be.context,outcome:be.outcome},onClose:()=>Re(null),onCreate:(j,U)=>{Da(j,U,{branchFrom:be.branchFrom,fromAudit:be.fromAudit}),Re(null)}}),n.jsx(yC,{open:He==="project",onClose:()=>fe(null),onCreate:Nn}),n.jsx(vC,{open:He==="project-edit",project:q,onClose:()=>fe(null),onSave:Ut}),n.jsx(bC,{open:!!$t,spec:$t,onClose:()=>{ua(null),J(null)},onStarted:(j,U)=>{const z=$t;if(ee==="terminal"&&z){const ue={id:j,projectId:z.projectId,specId:z.id,flow:Ni(z.source),cwd:"",exited:!1};N(ue),W(j),_(ve=>ve.some(Ie=>Ie.id===j)?ve:[...ve,ue])}oe(((z==null?void 0:z.id)??"")+" · sesi "+j+(U?" dilanjutkan":" dimulai"),"info","play")},onError:j=>{const U=j instanceof lt&&(j.status===400||j.status===422);oe((($t==null?void 0:$t.id)??"")+" · gagal mulai sesi"+(U?" · project belum punya repoDir":""),"warn","x-circle")}}),ze,Me.dialog,n.jsx(Y1,{toast:Ze})]})})}const Io={async getInfo(e){const t=await fetch(S.help(e));if(!t.ok)throw new Error("Help Center tak tersedia untuk project ini.");return t.json()},async submit(e,t){const a=await fetch(S.helpTickets(e),{method:"POST",body:t});if(a.status===429)throw new Error("Terlalu banyak permintaan. Coba lagi beberapa saat lagi.");if(a.status===404)throw new Error("Help Center tidak aktif untuk project ini.");if(!a.ok)throw new Error("Gagal mengirim keluhan. Pastikan semua isian wajib terisi.");const i=await a.json();if(typeof i.number!="number"||typeof i.statusPath!="string")throw new Error("Gagal mengirim keluhan. Silakan coba lagi.");return i},async status(e,t){const a=await fetch(S.helpStatus(e,t));if(!a.ok)throw new Error("Tiket tidak ditemukan.");return a.json()}},sp={bug:"Bug",fitur:"Permintaan fitur",pertanyaan:"Pertanyaan",lainnya:"Lainnya"},Qr=3;function jC(e){const t=e.replace(/^\/+|\/+$/g,"").split("/");return t[0]!=="help"||!t[1]?null:t[2]==="status"&&t[3]?{slug:decodeURIComponent(t[1]),key:decodeURIComponent(t[3])}:{slug:decodeURIComponent(t[1])}}function ii({children:e}){return n.jsx("div",{"data-testid":"public-help-scroll",className:"hn-dynamic-viewport",style:{height:"100dvh",minHeight:0,overflowY:"auto",overscrollBehavior:"contain",boxSizing:"border-box",background:"var(--bone-100)",padding:"max(40px, var(--safe-top)) max(16px, var(--safe-right)) max(40px, var(--safe-bottom)) max(16px, var(--safe-left))"},children:n.jsx("div",{style:{maxWidth:640,margin:"0 auto",display:"flex",flexDirection:"column",gap:16},children:e})})}function SC({slug:e,statusKey:t}){const[a,i]=u.useState(null),[r,s]=u.useState("loading"),o=u.useCallback(()=>{Io.status(e,t).then(l=>{i(l),s("ready")}).catch(()=>s("error"))},[e,t]);return u.useEffect(()=>{o()},[o]),n.jsx(ii,{children:n.jsx(Qe,{eyebrow:"status keluhan",title:a?`Tiket #${a.number}`:"Status tiket",children:r==="loading"?n.jsx(ye,{kind:"loading"}):r==="error"||!a?n.jsx(ye,{kind:"error",title:"Tiket tidak ditemukan",hint:"Periksa kembali link status Anda.",action:o,actionLabel:"Coba lagi"}):n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[n.jsx("span",{style:{fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:"Status"}),n.jsx(Oe,{tone:"ok",children:a.status})]}),n.jsxs("div",{children:[n.jsx("span",{className:"hn-eyebrow",children:"Kategori"}),n.jsx("div",{children:sp[a.category]??a.category})]}),n.jsxs("div",{children:[n.jsx("span",{className:"hn-eyebrow",children:"Judul"}),n.jsx("div",{style:{color:"var(--text-body)"},children:a.title})]}),n.jsxs("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-subtle)"},children:["Dilaporkan ",new Date(a.createdAt).toLocaleString("id-ID")]})]})})})}function _C({slug:e}){const[t,a]=u.useState(null),[i,r]=u.useState("loading"),[s,o]=u.useState("bug"),[l,d]=u.useState(""),[c,h]=u.useState(""),[p,f]=u.useState(""),[b,k]=u.useState(""),[g,y]=u.useState([]),[w,v]=u.useState(!1),[x,_]=u.useState(null),[T,E]=u.useState(null),A=u.useCallback(()=>{Io.getInfo(e).then(P=>{a(P),o(P.categories[0]??"bug"),r("ready")}).catch(()=>r("error"))},[e]);u.useEffect(()=>{A()},[A]);const[B,O]=u.useState("");function ne(){const P=B.trim().split("/").pop()??B.trim();P&&(window.location.href=`/help/${encodeURIComponent(e)}/status/${encodeURIComponent(P)}`)}async function Z(P){P.preventDefault(),_(null),v(!0);try{const D=new FormData;D.set("category",s),D.set("title",l),D.set("detail",c),D.set("email",p),D.set("hc_trap",b);for(const N of g.slice(0,Qr))D.append("files",N,N.name);const W=await Io.submit(e,D),F=`${window.location.origin}${W.statusPath}`;E({number:W.number,statusUrl:F})}catch(D){_(D.message)}finally{v(!1)}}return i==="loading"?n.jsx(ii,{children:n.jsx(ye,{kind:"loading"})}):i==="error"||!t?n.jsx(ii,{children:n.jsx(Qe,{title:"Help Center",children:n.jsx(ye,{kind:"error",title:"Tidak tersedia",hint:"Help Center untuk project ini tidak aktif."})})}):T?n.jsx(ii,{children:n.jsxs(Qe,{eyebrow:"terkirim",title:`Terima kasih — tiket #${T.number}`,children:[n.jsx("div",{style:{color:"var(--text-body)",marginBottom:12},children:"Keluhan Anda sudah kami terima. Simpan link berikut untuk memantau statusnya:"}),n.jsxs("div",{style:{padding:12,border:"1px solid var(--brass-300)",borderRadius:"var(--radius-sm)",background:"var(--brass-100)"},children:[n.jsx("code",{style:{display:"block",wordBreak:"break-all",fontSize:12.5},children:T.statusUrl}),n.jsxs("div",{style:{marginTop:8,display:"flex",gap:8},children:[n.jsx(V,{size:"sm",leftIcon:"copy",onClick:()=>{var P;return void((P=navigator.clipboard)==null?void 0:P.writeText(T.statusUrl))},children:"Salin link"}),n.jsx(V,{size:"sm",variant:"ghost",onClick:()=>window.location.assign(T.statusUrl),children:"Buka status"})]})]})]})}):n.jsxs(ii,{children:[n.jsx(Qe,{eyebrow:"help center",title:`Lapor keluhan · ${t.projectName}`,children:n.jsxs("form",{onSubmit:Z,style:{display:"flex",flexDirection:"column",gap:14},children:[n.jsxs("div",{children:[n.jsx("label",{htmlFor:"hc-cat",className:"hn-eyebrow",children:"Kategori"}),n.jsx(Be,{id:"hc-cat",value:s,onChange:P=>o(P.target.value),options:t.categories.map(P=>({value:P,label:sp[P]??P}))})]}),n.jsxs("div",{children:[n.jsx("label",{htmlFor:"hc-title",className:"hn-eyebrow",children:"Judul"}),n.jsx("input",{id:"hc-title",value:l,onChange:P=>d(P.target.value),required:!0,maxLength:200,style:vs,placeholder:"mis. Tombol Simpan tak berfungsi di HP"})]}),n.jsxs("div",{children:[n.jsx("label",{htmlFor:"hc-detail",className:"hn-eyebrow",children:"Detail"}),n.jsx("textarea",{id:"hc-detail",value:c,onChange:P=>h(P.target.value),required:!0,maxLength:1e4,rows:6,style:{...vs,resize:"vertical"},placeholder:"mis. Buka halaman Pesanan di HP, tekan Simpan — layar diam dan datanya tak tersimpan. Jangan sertakan data sensitif (kata sandi, dsb)."})]}),n.jsxs("div",{children:[n.jsx("label",{htmlFor:"hc-email",className:"hn-eyebrow",children:"Email Anda"}),n.jsx("input",{id:"hc-email",type:"email",value:p,onChange:P=>f(P.target.value),required:!0,maxLength:200,style:vs,placeholder:"nama@contoh.id"})]}),n.jsxs("div",{children:[n.jsxs("label",{htmlFor:"hc-files",className:"hn-eyebrow",children:["Lampiran gambar (opsional, maks ",Qr,")"]}),n.jsx("input",{id:"hc-files",className:"hn-touch-target",type:"file",accept:"image/png,image/jpeg,image/webp",multiple:!0,onChange:P=>y(Array.from(P.target.files??[]).slice(0,Qr))}),g.length>0&&n.jsx("div",{style:{fontSize:12,color:"var(--text-subtle)",marginTop:4},children:g.map(P=>P.name).join(", ")})]}),n.jsx("input",{tabIndex:-1,autoComplete:"new-password","aria-hidden":!0,value:b,onChange:P=>k(P.target.value),name:"hc_trap",style:{position:"absolute",left:"-9999px",width:1,height:1}}),x&&n.jsx("div",{style:{color:"var(--clay-600)",fontSize:13},children:x}),n.jsx(V,{type:"submit",disabled:w,leftIcon:"send",children:"Kirim keluhan"})]})}),n.jsx(Qe,{eyebrow:"sudah pernah lapor?",title:"Cek status tiket",children:n.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:[n.jsx("input",{value:B,onChange:P=>O(P.target.value),placeholder:"mis. a1b2c3d4e5f6 — atau tempel link statusnya",style:{...vs,flex:1,minWidth:200}}),n.jsx(V,{variant:"secondary",onClick:ne,children:"Cek"})]})})]})}const vs={display:"block",width:"100%",minHeight:"var(--touch-target)",boxSizing:"border-box",marginTop:4,padding:"8px 10px",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",background:"var(--surface-card)",color:"var(--text-body)",fontSize:14,fontFamily:"var(--font-ui)"};function CC(){const e=jC(window.location.pathname);return e?e.key?n.jsx(SC,{slug:e.slug,statusKey:e.key}):n.jsx(_C,{slug:e.slug}):n.jsx(ii,{children:n.jsx(Qe,{title:"Help Center",children:n.jsx(ye,{kind:"error",title:"Halaman tidak ditemukan",hint:"Link Help Center tidak valid."})})})}const TC=window.location.pathname.startsWith("/help/");Yc(document.getElementById("root")).render(n.jsx(u.StrictMode,{children:TC?n.jsx(CC,{}):n.jsx(xC,{})}));export{lT as $,S as A,Oe as B,X1 as C,Vi as D,Yu as E,tn as F,nb as G,zt as H,Ee as I,BC as J,DC as K,Fi as L,mt as M,hn as N,oo as O,Nm as P,yw as Q,Wh as R,Be as S,Vu as T,kw as U,Kh as V,nf as W,ar as X,nr as Y,tr as Z,ih as _,V as a,iT as a$,lt as a0,oT as a1,Ji as a2,_w as a3,hl as a4,yT as a5,mT as a6,vw as a7,ol as a8,On as a9,gT as aA,xc as aB,cT as aC,Fu as aD,RC as aE,$C as aF,Bf as aG,fw as aH,xh as aI,$f as aJ,LC as aK,sf as aL,W1 as aM,or as aN,VS as aO,WC as aP,KC as aQ,VC as aR,YC as aS,ZC as aT,JC as aU,XC as aV,QC as aW,eT as aX,tT as aY,aT as aZ,nT as a_,Fj as aa,Hj as ab,hT as ac,kT as ad,bc as ae,wT as af,Em as ag,fT as ah,Ea as ai,Ni as aj,ES as ak,L1 as al,Va as am,Lm as an,C_ as ao,xT as ap,Qe as aq,sr as ar,pT as as,$m as at,wl as au,hw as av,qh as aw,LS as ax,lr as ay,dT as az,JS as b,sT as b0,rT as b1,Ku as b2,Zo as b3,db as b4,ob as b5,qC as b6,GC as b7,UC as b8,zC as b9,Oo as bA,Dn as bB,Kl as bC,wu as bD,xu as bE,ci as bF,Pa as bG,lb as ba,NC as bb,HC as bc,FC as bd,Hg as be,pu as bf,Uo as bg,bw as bh,IC as bi,fh as bj,b_ as bk,Mw as bl,sg as bm,OC as bn,Vg as bo,Dg as bp,$g as bq,gg as br,uf as bs,lf as bt,cf as bu,of as bv,nu as bw,rf as bx,af as by,z1 as bz,ge as c,We as d,Y as e,ye as f,Tn as g,Pt as h,XS as i,n as j,tl as k,Ia as l,P_ as m,bT as n,Gs as o,_a as p,uT as q,ul as r,Kt as s,Fh as t,al as u,ll as v,Yi as w,cl as x,Oh as y,jT as z};