(()=>{const y=window.KIND_REGISTRY;function N(e,t,i,a){const c=new Set((Array.isArray(i)?i:[]).filter(s=>typeof s=="string"&&s.trim()).map(s=>s.trim())),n=typeof t=="string"?t.trim():"";return["add","update","remove"].includes(e)?n?typeof a=="number"&&a>=3?{ok:!1,write:!1,code:"level3-read-only",reason:"Level 3 (per-agent WorkloadProfile.guardrails) is owned by the aaa engine \u2014 read-only in canvas."}:e==="add"?c.has(n)?{ok:!0,write:!1,code:"noop-duplicate"}:{ok:!0,write:!0,code:"add-to-child"}:c.has(n)?{ok:!1,write:!1,code:e==="remove"?"remove-parent-ref":"override-parent-ref",reason:"Additive-only: a parent-inherited guardrail/context ref cannot be removed or overridden \u2014 only add-to-child is allowed."}:{ok:!0,write:!0,code:"child-owned-edit"}:{ok:!1,write:!1,code:"invalid-ref"}:{ok:!1,write:!1,code:"invalid-op"}}function b(e){const t=e&&typeof e=="object"?e:{},i=Object.keys(t).filter(n=>n!=="schedules"),a=Array.isArray(t.schedules)?t.schedules:[],c=[];for(const n of a){if(typeof n!="string")return{ok:!1,code:"invalid-schedule-entry",reason:"paperclip.schedules entries must be strings (schema/solution-manifest.schema.json)",stripped:i};const s=n.trim();s&&!c.includes(s)&&c.push(s)}return{ok:!0,code:"cadence-set",payload:{schedules:c},stripped:i}}window.CUSTOMIZE_ADDITIVE_VALIDATE=N,window.CADENCE_SET_BUILD=b;async function z(e,t){const i=window.CANVAS_ACTIONS;if(!i||typeof i.dispatch!="function")throw new Error("write-engine unavailable (view-only mode?)");return i.dispatch(`context.${e}`,t,{confirm:!0})}const{useState:v}=React;function w(e,t){return React.createElement("span",{key:e,className:"status-chip mono czm-ref"},e,t||null)}function k(e){const t=e&&e.kind||{},i=t.layer==="context"?"context":"guardrails",a=t.liveData&&t.liveData.levels||{},c=Array.isArray(a.generic)?a.generic:[],n=Array.isArray(a.solution)?a.solution:[],s=Array.isArray(a.agent)?a.agent:[],[f,p]=v(Array.isArray(a.child)?a.child:[]),[h,o]=v(""),[r,u]=v(null),I=c.concat(n);async function A(d,m){const g=N(d,m,I);if(!g.ok){u({tone:"reject",text:g.reason||g.code});return}if(!g.write){u({tone:"info",text:"Already inherited from a parent level \u2014 deduplicated, nothing to add."});return}try{d==="add"?(await z("datapoint.create",{segment:"customize",subsegment:`static-${i}`,datapoint:{id:m,name:m,src:"customize-editor"}}),p(l=>l.includes(m)?l:[...l,m]),o("")):(await z("datapoint.delete",{segment:"customize",subsegment:`static-${i}`,datapoint_id:m}),p(l=>l.filter(E=>E!==m))),u(null)}catch(l){u({tone:"reject",text:`Save rejected (${l&&l.message}).`})}}return React.createElement("div",{className:`view view-customizeInheritance czm-${i}`},r?React.createElement("div",{className:`czm-notice czm-notice-${r.tone}`},r.text):null,React.createElement("div",{className:"czm-level"},React.createElement("div",{className:"czm-level-head"},"Level 1 \u2014 Generic tenant default"," ",React.createElement("span",{className:"muted"},"(inherited, additive baseline)")),c.length===0?React.createElement("div",{className:"muted czm-empty"},"No generic defaults."):c.map(d=>w(d))),React.createElement("div",{className:"czm-level"},React.createElement("div",{className:"czm-level-head"},"Level 2 \u2014 Solution manifest additive_refs"," ",React.createElement("span",{className:"muted"},"(inherited, read-only)")),n.length===0?React.createElement("div",{className:"muted czm-empty"},"No solution additions."):n.map(d=>w(d))),React.createElement("div",{className:"czm-level czm-level-child"},React.createElement("div",{className:"czm-level-head"},"Your additions ",React.createElement("span",{className:"muted"},"(add-to-child only)")),f.map(d=>w(d,React.createElement("button",{type:"button",className:"czm-retract",onClick:()=>A("remove",d),title:"Retract this child-owned addition"},"\xD7"))),React.createElement("div",{className:"czm-add-row"},React.createElement("input",{className:"czm-add-input mono",value:h,placeholder:`add a ${i} ref\u2026`,onChange:d=>o(d.target.value)}),React.createElement("button",{type:"button",className:"czm-add-btn",onClick:()=>A("add",h)},"Add")),React.createElement("div",{className:"muted czm-hint"},"Additive inheritance only \u2014 a solution can never remove a business guardrail. Removing or overriding an inherited ref is rejected by the server.")),React.createElement("div",{className:"czm-level czm-level-agent"},React.createElement("div",{className:"czm-level-head"},"Level 3 \u2014 Per-agent (WorkloadProfile.guardrails)"," ",React.createElement("span",{className:"czm-lock",title:"Owned by the aaa engine"},"read-only")),s.length===0?React.createElement("div",{className:"muted czm-empty"},"Defined per agent workload profile in the aaa engine \u2014 displayed here when available, never editable from canvas."):s.map(d=>w(d))))}function C(e){const t=e&&e.kind||{},i=t.liveData&&Array.isArray(t.liveData.schedules)?t.liveData.schedules.filter(o=>typeof o=="string"):[],[a,c]=v(i),[n,s]=v(""),[f,p]=v(null);async function h(o){const r=b({schedules:o});if(!r.ok){p({tone:"reject",text:r.reason});return}try{await z("datapoint.update",{segment:"customize",subsegment:"cadence",datapoint_id:"cadence-set",patch:{val:JSON.stringify(r.payload),status:"filled"}}),c(r.payload.schedules),p(null)}catch(u){p({tone:"reject",text:`Save failed (${u&&u.message}).`})}}return React.createElement("div",{className:"view view-customizeCadence"},React.createElement("div",{className:"czm-level-head"},"Paperclip cadence set"," ",React.createElement("span",{className:"muted"},"(form object \u2014 `paperclip.schedules: string[]`; execution owned by the paperclip engine, never by canvas)")),a.length===0?React.createElement("div",{className:"muted czm-empty"},"No schedules configured."):a.map(o=>React.createElement("div",{key:o,className:"czm-schedule mono"},o,React.createElement("button",{type:"button",className:"czm-retract",onClick:()=>h(a.filter(r=>r!==o))},"\xD7"))),React.createElement("div",{className:"czm-add-row"},React.createElement("input",{className:"czm-add-input mono",value:n,placeholder:"e.g. daily-06:00",onChange:o=>s(o.target.value)}),React.createElement("button",{type:"button",className:"czm-add-btn",onClick:()=>{n.trim()&&h(a.concat(n)),s("")}},"Add schedule")),f?React.createElement("div",{className:`czm-notice czm-notice-${f.tone}`},f.text):null)}if(window.CUSTOMIZE_INHERITANCE_VIEW_FN=k,window.CUSTOMIZE_CADENCE_VIEW_FN=C,window.VIEWS=window.VIEWS||{},window.VIEWS.customizeInheritance=k,window.VIEWS.customizeCadence=C,y){const e={defaultView:"customizeInheritance",defaultDetail:"none",agentTreatment:"implicit",scopeTag:"solution",mockItems:[],liveData:null,heroKpis:[]};y.customizeContext={...e,id:"customizeContext",label:"Static context (additive)",workspaceLabel:"Customize",workspaceIcon:"library_add",layer:"context",description:"Additive-only static-context editor: generic default and solution-manifest refs are inherited; the child layer may only add."},y.customizeGuardrails={...e,id:"customizeGuardrails",label:"Static guardrails (additive)",workspaceLabel:"Customize",workspaceIcon:"verified_user",layer:"guardrails",description:"Additive-only guardrail editor: a solution can never remove a business guardrail; level 3 (WorkloadProfile.guardrails) is aaa-owned and read-only."},y.customizeCadence={...e,id:"customizeCadence",label:"Paperclip config",workspaceLabel:"Customize",workspaceIcon:"schedule",defaultView:"customizeCadence",description:"Form-only paperclip cadence-set editor writing the paperclip.schedules string[] contract; cadence execution stays in the paperclip engine."}}})();
