@kelceyp/caw-server 1.0.54 → 1.0.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +3 -3
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -500,7 +500,7 @@ globstar while`,$,P,K,w,T),this.matchOne($.slice(P),K.slice(w),q))return this.de
|
|
|
500
500
|
entity_id UNINDEXED,
|
|
501
501
|
field_definition_id UNINDEXED
|
|
502
502
|
)
|
|
503
|
-
`.execute($)};var nZ6=()=>new Date().toISOString(),y6=nZ6;var oZ6=async($,K,q,Y)=>{if(!await $.selectFrom("sequences").select("next_value").where("scope_type","=",K).where("scope_id",q===null?"is":"=",q).where("type_code","=",Y).executeTakeFirst())await $.insertInto("sequences").values({scope_type:K,scope_id:q,type_code:Y,next_value:1}).execute();let z=await $.selectFrom("sequences").select("next_value").where("scope_type","=",K).where("scope_id",q===null?"is":"=",q).where("type_code","=",Y).executeTakeFirstOrThrow();return await $.updateTable("sequences").set((W)=>({next_value:W("next_value","+",1)})).where("scope_type","=",K).where("scope_id",q===null?"is":"=",q).where("type_code","=",Y).execute(),z.next_value},A1=Object.freeze({nextSeq:oZ6});var aZ6=Object.freeze([{name:"agent",label:"Agent",description:"Agent type (claude or codex)"},{name:"model",label:"Model",description:"Model name (optional)"},{name:"status",label:"Status",description:"Job status (pending/running/completed/error)"},{name:"startedAt",label:"Started At",description:"Job start timestamp",primitiveType:"date"},{name:"completedAt",label:"Completed At",description:"Job completion timestamp",primitiveType:"date"},{name:"tokensUsed",label:"Tokens Used",description:"Total tokens used by the job",primitiveType:"int"},{name:"exitCode",label:"Exit Code",description:"Process exit code",primitiveType:"int"},{name:"errorMessage",label:"Error Message",description:"Error message if job failed"},{name:"durationMs",label:"Duration (ms)",description:"Job execution duration in milliseconds",primitiveType:"int"},{name:"totalCostUsd",label:"Total Cost (USD)",description:"API cost in USD",primitiveType:"float"},{name:"numTurns",label:"Number of Turns",description:"Number of agent conversation turns",primitiveType:"int"},{name:"sessionId",label:"Session ID",description:"Agent session ID for conversation continuity"},{name:"workingDirectory",label:"Working Directory",description:"Working directory for job execution (optional, defaults to projectPath)"},{name:"pid",label:"PID",description:"Process ID of the running job",primitiveType:"int"},{name:"objectId",label:"Object ID",description:"ID of the entity this job is associated with"},{name:"streaming",label:"Streaming",description:"Enable realtime output streaming (true/false)"}]),qG=aZ6;var rZ6=Object.freeze([{name:"hash",label:"Hash",description:"SHA-256 content hash",required:!0},{name:"mimeType",label:"MIME Type",description:"Content type",required:!0},{name:"sizeBytes",label:"Size (bytes)",description:"File size in bytes",primitiveType:"int",required:!0},{name:"originalFilename",label:"Original Filename",description:"Original upload filename"},{name:"widthPx",label:"Width (px)",description:"Native pixel width",primitiveType:"int"},{name:"heightPx",label:"Height (px)",description:"Native pixel height",primitiveType:"int"},{name:"displayWidth",label:"Display Width",description:"CSS display width",primitiveType:"int"},{name:"displayHeight",label:"Display Height",description:"CSS display height",primitiveType:"int"}]),LM=rZ6;var c78=[{code:"f",name:"Folder",subtype:null},{code:"d",name:"Document",subtype:null},{code:"t",name:"Template",subtype:null},{code:"s",name:"Story",subtype:null},{code:"r",name:"Store",subtype:"local"},{code:"r",name:"Store",subtype:"demux"},{code:"p",name:"Project",subtype:null},{code:"j",name:"Job",subtype:null},{code:"v",name:"Version",subtype:null},{code:"n",name:"field_definition",subtype:null},{code:"a",name:"asset",subtype:null},{code:"f",name:"Document Root Folder",subtype:"root_d",parentCode:"f",parentSubtype:null},{code:"f",name:"Template Root Folder",subtype:"root_t",parentCode:"f",parentSubtype:null},{code:"f",name:"Story Root Folder",subtype:"root_s",parentCode:"f",parentSubtype:null},{code:"f",name:"Job Root Folder",subtype:"root_j",parentCode:"f",parentSubtype:null},{code:"f",name:"Tasks Folder",subtype:"tasks",parentCode:"f",parentSubtype:null},{code:"d",name:"Task",subtype:"task",parentCode:"d",parentSubtype:null},{code:"d",name:"Cartridge",subtype:"cartridge",parentCode:"d",parentSubtype:null},{code:"t",name:"Prompt",subtype:"prompt",parentCode:"t",parentSubtype:null}],l78=async($)=>{return(await $.selectFrom("entity_types").select("id").limit(1).execute()).length>0},t6=async($,K,q=null)=>{return(await $.selectFrom("entity_types").select("id").where("code","=",K).where((J)=>q?J("subtype","=",q):J("subtype","is",null)).executeTakeFirstOrThrow()).id},SM=async($,K,q,Y)=>{let J=y6(),W={d:"root_d",t:"root_t",s:"root_s",j:"root_j"}[Y],H={d:"Documents",t:"Templates",s:"Stories",j:"Jobs"}[Y],O=await t6($,"f",W);if(!await $.selectFrom("sequences").select("next_value").where("scope_type","=","store").where("scope_id","=",K).where("type_code","=","f").executeTakeFirst())await $.insertInto("sequences").values({scope_type:"store",scope_id:K,type_code:"f",next_value:1}).execute();let P=await $.selectFrom("sequences").select("next_value").where("scope_type","=","store").where("scope_id","=",K).where("type_code","=","f").executeTakeFirst();await $.updateTable("sequences").set((v)=>({next_value:v("next_value","+",1)})).where("scope_type","=","store").where("scope_id","=",K).where("type_code","=","f").execute();let w=`${q}f${P.next_value}`,T=await $.insertInto("entities").values({store_id:K,object_id:w,entity_type_id:O,type_code:"f",seq:P.next_value,parent_folder_id:null,parent_object_id:null,name:H,created_at:J,updated_at:J}).returning("id").executeTakeFirstOrThrow(),j={d:"document",t:"template",s:"story",j:"job"}[Y];return T.id},sZ6=async($)=>{for(let K of c78)await $.insertInto("entity_types").values({code:K.code,name:K.name,subtype:K.subtype,parent_type_id:null}).execute();for(let K of c78)if(K.parentCode!==void 0){let q=await $.selectFrom("entity_types").select("id").where("code","=",K.parentCode).where((Y)=>K.parentSubtype===null?Y("subtype","is",null):Y("subtype","=",K.parentSubtype)).executeTakeFirstOrThrow();await $.updateTable("entity_types").set({parent_type_id:q.id}).where("code","=",K.code).where((Y)=>K.subtype===null?Y("subtype","is",null):Y("subtype","=",K.subtype)).execute()}},tZ6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await A1.nextSeq($,"store",K,"n"),W=`${q}n${z}`;await $.insertInto("field_definitions").values({store_id:K,object_id:W,entity_type_id:J,type_code:"n",seq:z,owner_entity_id:null,name:"state",label:"State",description:"Workflow state",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).execute()},eZ6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d","task"),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"state",label:"State",description:"Task workflow state",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:1,sort_order:null}).execute()},$H6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"j",null);for(let W of qG){let Z=await A1.nextSeq($,"store",K,"n"),H=`${q}n${Z}`,O=await $.insertInto("field_definitions").values({store_id:K,object_id:H,entity_type_id:J,type_code:"n",seq:Z,owner_entity_id:null,name:W.name,label:W.label,description:W.description,primitive_type:W.primitiveType||"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:O.id,required:0,sort_order:null}).execute()}},KH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"a",null);for(let W of LM){let Z=await A1.nextSeq($,"store",K,"n"),H=`${q}n${Z}`,O=await $.insertInto("field_definitions").values({store_id:K,object_id:H,entity_type_id:J,type_code:"n",seq:Z,owner_entity_id:null,name:W.name,label:W.label,description:W.description,primitive_type:W.primitiveType||"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:O.id,required:W.required?1:0,sort_order:null}).execute()}},IM=Object.freeze(["prep","spec","design","plan","build","review","done"]),kz=Object.freeze(["waiting","ready","in-progress","done"]),qH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"f","tasks"),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"states",label:"States",description:"Ordered list of valid task states",primitive_type:"string",required:0,multiplicity:"multi",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:1,sort_order:null}).execute()},YH6=async($,K,q,Y)=>{let J=y6(),z=await t6($,"n",null),W=await t6($,"f","root_s"),Z=await A1.nextSeq($,"store",K,"n"),H=`${q}n${Z}`,X=(await $.insertInto("field_definitions").values({store_id:K,object_id:H,entity_type_id:z,type_code:"n",seq:Z,owner_entity_id:null,name:"states",label:"States",description:"Ordered list of valid story states",primitive_type:"string",required:0,multiplicity:"multi",is_system:1,created_at:J,updated_at:J}).returning("id").executeTakeFirstOrThrow()).id;await $.insertInto("class_field_defs").values({store_id:K,class_type_id:W,field_definition_id:X,required:1,sort_order:null}).execute();for(let P=0;P<IM.length;P++)await $.insertInto("string_fields").values({entity_id:Y,field_definition_id:X,value:IM[P],ordinal:P}).execute()},JH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d","task"),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"dependsOn",label:"Depends On",description:"Tasks that block this task",primitive_type:"object_ref",required:0,multiplicity:"multi",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},zH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d","cartridge"),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"synopsis",label:"Synopsis",description:"Brief description of the cartridge",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},WH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d","cartridge"),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"relatedActivities",label:"Related Activities",description:"Associated activity types",primitive_type:"string",required:0,multiplicity:"multi",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},ZH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"t","prompt"),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"associatedType",label:"Associated Type",description:"Entity types this template is associated with",primitive_type:"string",required:0,multiplicity:"multi",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},HH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"s",null),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"flag",label:"Flag",description:"Visual indicator for story attention",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},OH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"s",null),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"activeJobCount",label:"Active Job Count",description:"Number of active jobs associated with this story",primitive_type:"int",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},XH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"s",null),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"statusMessage",label:"Status Message",description:"Agent status message displayed in stories list",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},PH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"s",null),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"dateCompleted",label:"Date Completed",description:"Timestamp when story transitioned to done state",primitive_type:"date",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},wH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d",null),W=await t6($,"t",null),Z=[{name:"draft_version",label:"Draft Version",description:"Points to current draft version entity"},{name:"latest_published_version",label:"Latest Published Version",description:"Points to most recent published version entity"}];for(let H of[z,W])for(let O of Z){let X=await A1.nextSeq($,"store",K,"n"),P=`${q}n${X}`,w=await $.insertInto("field_definitions").values({store_id:K,object_id:P,entity_type_id:J,type_code:"n",seq:X,owner_entity_id:null,name:O.name,label:O.label,description:O.description,primitive_type:"object_ref",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:H,field_definition_id:w.id,required:0,sort_order:null}).execute()}},TH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d",null),W=await t6($,"t",null),Z=[{name:"edit_session_id",label:"Edit Session ID",description:"UUID of the editing session",primitiveType:"string"},{name:"edit_started_at",label:"Edit Started At",description:"ISO 8601 timestamp when edit lock was acquired",primitiveType:"date"},{name:"edit_last_activity_at",label:"Edit Last Activity At",description:"ISO 8601 timestamp of last activity",primitiveType:"date"}];for(let H of[z,W])for(let O of Z){let X=await A1.nextSeq($,"store",K,"n"),P=`${q}n${X}`,w=await $.insertInto("field_definitions").values({store_id:K,object_id:P,entity_type_id:J,type_code:"n",seq:X,owner_entity_id:null,name:O.name,label:O.label,description:O.description,primitive_type:O.primitiveType,required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:H,field_definition_id:w.id,required:0,sort_order:null}).execute()}},GH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d",null),W=await t6($,"t",null);for(let Z of[z,W]){let H=await A1.nextSeq($,"store",K,"n"),O=`${q}n${H}`,X=await $.insertInto("field_definitions").values({store_id:K,object_id:O,entity_type_id:J,type_code:"n",seq:H,owner_entity_id:null,name:"size",label:"Size",description:"Content size in bytes",primitive_type:"int",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:Z,field_definition_id:X.id,required:0,sort_order:null}).execute()}},jH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"v",null),W=[{name:"document",label:"Document",description:"Parent document or template entity",primitiveType:"object_ref",required:1},{name:"version_number",label:"Version Number",description:"Version number (1, 2, 3...)",primitiveType:"int",required:1},{name:"published_at",label:"Published At",description:"ISO 8601 timestamp when published (null = draft)",primitiveType:"date",required:0},{name:"content_hash",label:"Content Hash",description:"SHA-256 hex fingerprint of content for change detection",primitiveType:"string",required:0}];for(let Z of W){let H=await A1.nextSeq($,"store",K,"n"),O=`${q}n${H}`,X=await $.insertInto("field_definitions").values({store_id:K,object_id:O,entity_type_id:J,type_code:"n",seq:H,owner_entity_id:null,name:Z.name,label:Z.label,description:Z.description,primitive_type:Z.primitiveType,required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:X.id,required:Z.required,sort_order:null}).execute()}},vH6=async($)=>{let K=y6(),q=await t6($,"n",null),Y=await t6($,"r","local");if(!await $.selectFrom("sequences").select("next_value").where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","n").executeTakeFirst())await $.insertInto("sequences").values({scope_type:"global",scope_id:null,type_code:"n",next_value:1}).execute();let z=await $.selectFrom("sequences").select("next_value").where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","n").executeTakeFirstOrThrow();await $.updateTable("sequences").set((H)=>({next_value:H("next_value","+",1)})).where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","n").execute();let W=`_n${z.next_value}`,Z=await $.insertInto("field_definitions").values({store_id:null,object_id:W,entity_type_id:q,type_code:"n",seq:z.next_value,owner_entity_id:null,name:"code",label:"Store Code",description:"Unique code identifying the local store (e.g., A, B)",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:K,updated_at:K}).returning("id").executeTakeFirstOrThrow();return await $.insertInto("class_field_defs").values({store_id:null,class_type_id:Y,field_definition_id:Z.id,required:1,sort_order:null}).execute(),Z.id},VH6=async($)=>{let K=y6(),q=await t6($,"n",null),Y=await t6($,"p",null),J=await $.selectFrom("sequences").select("next_value").where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","n").executeTakeFirstOrThrow();await $.updateTable("sequences").set((Z)=>({next_value:Z("next_value","+",1)})).where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","n").execute();let z=`_n${J.next_value}`,W=await $.insertInto("field_definitions").values({store_id:null,object_id:z,entity_type_id:q,type_code:"n",seq:J.next_value,owner_entity_id:null,name:"path",label:"Project Path",description:"Filesystem path for the project",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:K,updated_at:K}).returning("id").executeTakeFirstOrThrow();return await $.insertInto("class_field_defs").values({store_id:null,class_type_id:Y,field_definition_id:W.id,required:1,sort_order:null}).execute(),W.id},AH6=async($)=>{let K=await vH6($);await VH6($);let q=await $.selectFrom("sequences").select("next_value").where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","r").executeTakeFirstOrThrow();await $.updateTable("sequences").set((O)=>({next_value:O("next_value","+",1)})).where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","r").execute();let Y=`S${q.next_value}`,J=y6(),z=await t6($,"r","local"),Z=(await $.insertInto("entities").values({store_id:null,object_id:Y,entity_type_id:z,type_code:"r",seq:q.next_value,parent_folder_id:null,parent_object_id:null,name:"Shared",created_at:J,updated_at:J}).returning("id").executeTakeFirstOrThrow()).id;await $.insertInto("string_fields").values({entity_id:Z,field_definition_id:K,value:"B",ordinal:0}).execute(),await SM($,Z,"B","d"),await SM($,Z,"B","t");let H=await SM($,Z,"B","s");await SM($,Z,"B","j"),await tZ6($,Z,"B"),await $H6($,Z,"B"),await KH6($,Z,"B"),await eZ6($,Z,"B"),await JH6($,Z,"B"),await zH6($,Z,"B"),await WH6($,Z,"B"),await YH6($,Z,"B",H),await qH6($,Z,"B"),await ZH6($,Z,"B"),await HH6($,Z,"B"),await OH6($,Z,"B"),await XH6($,Z,"B"),await PH6($,Z,"B"),await wH6($,Z,"B"),await TH6($,Z,"B"),await GH6($,Z,"B"),await jH6($,Z,"B"),await $.insertInto("sequences").values({scope_type:"store",scope_id:Z,type_code:"v",next_value:1}).execute()},i78=async($)=>{await sZ6($),await $.insertInto("sequences").values([{scope_type:"global",scope_id:null,type_code:"r",next_value:1},{scope_type:"global",scope_id:null,type_code:"p",next_value:1}]).execute(),await AH6($)};var xM=n6(n78(),1),MH6=($,K)=>{if($)throw Error(K)},o78=($,K)=>{if(xM.default.null($)||xM.default.undefined($))throw Error(`${K} is required`)},_H6=($,K)=>{if(o78($,K),xM.default.empty($))throw Error(`${K} cannot be empty`)},kH6=($,K,...q)=>{if($)throw K(...q)},NH6={condition:MH6,nullish:o78,empty:_H6,factory:kH6},b=NH6;var H_6=typeof Bun<"u",O_6=async($)=>{if(H_6){let{Database:K}=await import("bun:sqlite"),{BunSqliteDialect:q}=await Promise.resolve().then(() => n6(DP8(),1)),Y=new K($);return Y.exec("PRAGMA journal_mode = WAL"),Y.exec("PRAGMA foreign_keys = ON"),new pK({dialect:new q({database:Y})})}else{let q=new(await import("better-sqlite3")).default($);return q.pragma("journal_mode = WAL"),q.pragma("foreign_keys = ON"),new pK({dialect:new gx({database:q})})}},X_6=($,K)=>{if(!z_6($)){if(!K)throw Error(`Database file not found: ${$}`);W_6(Z_6($),{recursive:!0})}},P_6=async($,K)=>{if(!await p78($)){if(!K)throw Error("Database schema not found");await Q78($)}},w_6=async($,K)=>{if(!await l78($)){if(!K)throw Error("Database seed data not found");await i78($)}},T_6=($)=>{let{kyselyFactory:K=O_6}=$??{};return Object.freeze({getDb:async(Y,J)=>{if(b.nullish(Y,"databaseFilepath"),Y!==":memory:")X_6(Y,J);let z=await K(Y);return await P_6(z,J),await w_6(z,J),z}})},hP8={create:T_6};var G_6=($)=>{let{id:K,name:q,createdAt:Y,updatedAt:J}=$,O=Object.freeze({getObjectId:()=>K,getName:()=>q,getCreatedAt:()=>Y,getUpdatedAt:()=>J}),w=Object.freeze({setName:(T)=>{q=T},setUpdatedAt:(T)=>{J=T}});return{entityFns:O,mutationFns:w}},o9=Object.freeze({create:G_6});var j_6=($)=>{let{id:K,name:q,path:Y,createdAt:J,updatedAt:z}=$,{entityFns:W,mutationFns:Z}=o9.create({id:K,name:q,createdAt:J,updatedAt:z}),H=()=>Y,X=Object.freeze({...W,getPath:H,toJSON:()=>({objectId:W.getObjectId(),name:W.getName(),path:H(),createdAt:W.getCreatedAt(),updatedAt:W.getUpdatedAt()})}),w=Object.freeze({...Z,setPath:(T)=>{Y=T}});return{entity:X,mutationApi:w}},EP8=Object.freeze({create:j_6});var v_6=($,K,q)=>{return Object.freeze({getEntity:()=>$,getMutationApi:()=>K,getPk:()=>q})},e6=Object.freeze({create:v_6});EO();y1();var R_6=($)=>$.object_id,SP8=($)=>{if(!$||$.length<2||$[0]!=="P")return null;let K=parseInt($.slice(1),10);return isNaN(K)?null:K},IP8=async($,K)=>{let q=await $.selectFrom("field_definitions").select("id").where("name","=","path").where("store_id","is",null).where("is_system","=",1).executeTakeFirst();if(!q)return null;return(await $.selectFrom("string_fields").select("value").where("entity_id","=",K).where("field_definition_id","=",q.id).executeTakeFirst())?.value??null},C_6=async($,K,q)=>{let Y=await $.selectFrom("field_definitions").select("id").where("name","=","path").where("store_id","is",null).where("is_system","=",1).executeTakeFirstOrThrow();await $.insertInto("string_fields").values({entity_id:K,field_definition_id:Y.id,value:q,ordinal:0}).execute()},Vk=($,K)=>{let q=R_6($),Y=$.id,{entity:J,mutationApi:z}=EP8.create({id:q,name:$.name,path:K,createdAt:$.created_at,updatedAt:$.updated_at});return{entity:J,mutationApi:z,id:q,pk:Y}},D_6=()=>{let $=new Map,K=new Map,q=async(Z,H,{name:O,path:X},P)=>{let w=await z(Z,H,X);b.factory(w,I.validation,`Project with path already exists: ${X}`,"DUPLICATE_PROJECT_PATH");let T=y6(),G=await A1.nextSeq(Z,"global",null,"p"),j=`P${G}`,v=await E6.readEntityTypeId(Z,H,"p",null),M=await Z.insertInto("entities").values({store_id:null,object_id:j,entity_type_id:v,type_code:"p",seq:G,parent_folder_id:null,parent_object_id:null,name:O,created_at:T,updated_at:T}).returningAll().executeTakeFirstOrThrow(),N=M.id;await C_6(Z,N,X);let{entity:k,mutationApi:R,id:C}=Vk(M,X);return P(()=>{$.set(C,e6.create(k,R,N)),K.set(N,C)}),k},Y=async(Z,H,O)=>{let X=$.get(O);if(X)return X.getEntity();let P=SP8(O);if(P===null)return null;let w=await Z.selectFrom("entities").selectAll().where("type_code","=","p").where("seq","=",P).where("deleted_at","is",null).executeTakeFirst();if(!w)return null;let T=await IP8(Z,w.id),{entity:G,mutationApi:j,id:v,pk:M}=Vk(w,T);return $.set(v,e6.create(G,j,M)),K.set(M,v),G},J=async(Z,H,O)=>{let X=$.get(O);if(X)return X.getEntity();if(SP8(O)===null)return null;let w=await Z.selectFrom("entities").selectAll().where("type_code","=","p").where("object_id","=",O).where("deleted_at","is",null).executeTakeFirst();if(!w)return null;let T=await IP8(Z,w.id),{entity:G,mutationApi:j,id:v,pk:M}=Vk(w,T);return $.set(v,e6.create(G,j,M)),K.set(M,v),G},z=async(Z,H,O)=>{let X=await Z.selectFrom("entities").innerJoin("string_fields","string_fields.entity_id","entities.id").innerJoin("field_definitions","field_definitions.id","string_fields.field_definition_id").select(["entities.id","entities.object_id","entities.name","entities.created_at","entities.updated_at","string_fields.value as path"]).where("entities.type_code","=","p").where("entities.deleted_at","is",null).where("field_definitions.name","=","path").where("field_definitions.store_id","is",null).where("field_definitions.is_system","=",1).where("string_fields.value","=",O).executeTakeFirst();if(!X)return null;let{entity:P,mutationApi:w,id:T,pk:G}=Vk(X,X.path),j=$.get(T);if(j)return j.getEntity();return $.set(T,e6.create(P,w,G)),K.set(G,T),P};return Object.freeze({createProject:q,readProject:Y,readProjectByObjectId:J,readProjectByPath:z,evictProject:(Z)=>{let H=$.get(Z);if(H)K.delete(H.getPk());$.delete(Z)}})},xP8=Object.freeze({create:D_6});var h_6=()=>{let $=new Map,K=new Map;return Object.freeze({get:(P)=>$.get(P),getByPk:(P)=>{let w=K.get(P);return w?$.get(w):void 0},has:(P)=>$.has(P),set:(P,w)=>{$.set(P,w),K.set(w.getPk(),P)},remove:(P)=>{let w=$.get(P);if(w)K.delete(w.getPk());$.delete(P)},getIdByPk:(P)=>K.get(P),setIdByPk:(P,w)=>K.set(P,w),clear:()=>{$.clear(),K.clear()},entries:()=>$.entries()})},tz=Object.freeze({create:h_6});var dP8=n6(k4(),1);import{createHash as lP8}from"crypto";EO();var E_6=($)=>{let{id:K,name:q,createdAt:Y,updatedAt:J}=$,{entityFns:z,mutationFns:W}=o9.create({id:K,name:q,createdAt:Y,updatedAt:J}),Z=new Map,X=Object.freeze({...z,getField:(G)=>{return Z.get(G)},getFields:()=>{let G={};for(let[j,v]of Z.entries())G[j]=v;return G}}),T=Object.freeze({...W,setField:(G,j)=>{Z.set(G,j)},removeField:(G)=>{Z.delete(G)}});return{entityFns:X,mutationFns:T}},Ak=Object.freeze({create:E_6});var L_6=($)=>{let{id:K,name:q,parentId:Y,path:J,createdAt:z,updatedAt:W}=$,{entityFns:Z,mutationFns:H}=Ak.create({id:K,name:q,createdAt:z,updatedAt:W}),w=Object.freeze({...Z,getParentId:()=>Y,getPath:()=>J,getIsFolder:()=>!1}),j=Object.freeze({...H,setParentId:(v)=>{Y=v},setPath:(v)=>{J=v}});return{entityFns:w,mutationFns:j}},lJ=Object.freeze({create:L_6});var gP8=($)=>{let{entityFns:K,mutationFns:q}=lJ.create($),Y=$.subtype||null,J=()=>Y,z=()=>K.getParentId()===null,W=()=>!0,H=Object.freeze({...K,getSubtype:J,isRoot:z,getIsFolder:W,toJSON:()=>{let X={};for(let[P,w]of Object.entries(K.getFields()))X[P]=w.toJSON();return{id:K.getObjectId(),parentId:K.getParentId(),name:K.getName(),path:K.getPath(),subtype:J(),createdAt:K.getCreatedAt(),updatedAt:K.getUpdatedAt(),isFolder:W(),isRoot:z(),fields:X}}}),O=Object.freeze({...q});return{entity:H,mutationApi:O}},S_6=($,K,q,Y)=>{return gP8({id:K,parentId:q,name:$.name,path:Y,subtype:$.subtype||null,createdAt:$.created_at,updatedAt:$.updated_at})},YY=Object.freeze({create:gP8,createFromRow:S_6});var yP8=($)=>{let{entityFns:K,mutationFns:q}=lJ.create($),H=Object.freeze({...K,getTypeCode:()=>"s",getSubtype:()=>null,isStory:()=>!0,getIsFolder:()=>!1,toJSON:()=>{let X={};for(let[P,w]of Object.entries(K.getFields()))X[P]=w.toJSON();return{id:K.getObjectId(),parentId:K.getParentId(),name:K.getName(),path:K.getPath(),createdAt:K.getCreatedAt(),updatedAt:K.getUpdatedAt(),type:"s",isStory:!0,isFolder:!1,fields:X}}}),O=Object.freeze({...q});return{entity:H,mutationApi:O}},I_6=($,K,q,Y)=>{return yP8({id:K,parentId:q,name:$.name,path:Y,createdAt:$.created_at,updatedAt:$.updated_at})},LO=Object.freeze({create:yP8,createFromRow:I_6});var bP8=($)=>{let{entityFns:K,mutationFns:q}=lJ.create($),Z=Object.freeze({...K,getTypeCode:()=>"j",isJob:()=>!0,getIsFolder:()=>!1,toJSON:()=>{let O={};for(let[X,P]of Object.entries(K.getFields()))O[X]=P.toJSON();return{id:K.getObjectId(),parentId:K.getParentId(),name:K.getName(),path:K.getPath(),createdAt:K.getCreatedAt(),updatedAt:K.getUpdatedAt(),type:"j",isJob:!0,isFolder:!1,fields:O}}}),H=Object.freeze({...q});return{entity:Z,mutationApi:H}},x_6=($,K,q,Y)=>{return bP8({id:K,parentId:q,name:$.name,path:Y,createdAt:$.created_at,updatedAt:$.updated_at})},Mk=Object.freeze({create:bP8,createFromRow:x_6});var g_6=($)=>{let{entityFns:K,mutationFns:q}=Ak.create({id:$.id,name:$.name,createdAt:$.createdAt,updatedAt:$.updatedAt}),Y=()=>"a",J=()=>!0,z=()=>K.getField("hash")?.getValue(),W=()=>K.getField("mimeType")?.getValue(),Z=()=>K.getField("sizeBytes")?.getValue(),H=()=>K.getField("originalFilename")?.getValue()??null,O=()=>K.getField("widthPx")?.getValue()??null,X=()=>K.getField("heightPx")?.getValue()??null,P=()=>K.getField("displayWidth")?.getValue()??null,w=()=>K.getField("displayHeight")?.getValue()??null,G=Object.freeze({...K,getTypeCode:Y,isAsset:J,getHash:z,getMimeType:W,getSizeBytes:Z,getOriginalFilename:H,getWidthPx:O,getHeightPx:X,getDisplayWidth:P,getDisplayHeight:w,toJSON:()=>({id:K.getObjectId(),type:"a",hash:z(),mimeType:W(),sizeBytes:Z(),originalFilename:H(),widthPx:O(),heightPx:X(),displayWidth:P(),displayHeight:w(),createdAt:K.getCreatedAt(),updatedAt:K.getUpdatedAt()})}),j=Object.freeze({...q});return{entity:G,mutationApi:j}},_k=Object.freeze({create:g_6});var uP8=Object.freeze(["string","object_ref","int","text","date","float"]),y_6=($)=>{let{id:K,name:q,ownerEntityId:Y,label:J,description:z,primitiveType:W,required:Z,multiplicity:H,isSystem:O,allowedValues:X,createdAt:P,updatedAt:w}=$;if(!uP8.includes(W))throw Error(`Invalid primitive type: "${W}". Valid types are: ${uP8.join(", ")}`);let{entityFns:T,mutationFns:G}=o9.create({id:K,name:q,createdAt:P,updatedAt:w}),j=()=>Y,v=()=>J,M=()=>z,N=()=>W,k=()=>Z,R=()=>H,C=()=>O,L=()=>X??null,m=Object.freeze({...T,getOwnerEntityId:j,getLabel:v,getDescription:M,getPrimitiveType:N,getRequired:k,getMultiplicity:R,getIsSystem:C,getAllowedValues:L,toJSON:()=>({id:T.getObjectId(),ownerEntityId:j(),name:T.getName(),label:v(),description:M(),primitiveType:N(),required:k(),multiplicity:R(),isSystem:C(),allowedValues:L(),createdAt:T.getCreatedAt(),updatedAt:T.getUpdatedAt()})}),S=Object.freeze({...G});return{entity:m,mutationApi:S}},Cu=Object.freeze({create:y_6});var b_6=({definition:$,values:K=[]})=>{let q=$,Y=[...K];if(q.getMultiplicity()==="single"&&Y.length>1)throw Error(`Field "${q.getName()}" is single-valued but received ${Y.length} values`);let J=(T=0)=>{return Y[T]},z=()=>{return[...Y]},W=()=>{return q},Z=()=>{return q.getMultiplicity()==="multi"};return Object.freeze({getValue:J,getValues:z,getDefinition:W,isMultiValued:Z,isRequired:()=>{return q.getRequired()},getType:()=>{return q.getPrimitiveType()},getLabel:()=>{return q.getLabel()||q.getName()},getName:()=>{return q.getName()},toJSON:()=>{if(Z())return Y;else return Y[0]}})},kk=Object.freeze({create:b_6});y1();y1();var u_6=($)=>{let K=$.trim();b.factory(!K,I.validation,"Folder name cannot be empty","EMPTY_NAME"),b.factory(K.length>255,I.validation,"Folder name cannot exceed 255 characters","NAME_TOO_LONG");let q=/[/\\:*?"<>|]/;return b.factory(q.test(K),I.validation,'Folder name contains invalid characters: /\\:*?"<>|',"INVALID_CHARS"),K},m_6=($)=>{return $.getParentId()===null},r3=Object.freeze({validateFolderName:u_6,isRootFolder:m_6});y1();var B_6=($)=>{if(!$||$.length<3)return null;let K=$[0],q=$[1],Y=parseInt($.slice(2),10);if(isNaN(Y))return null;return{storeCode:K,typeCode:q,seq:Y}},U_6=($,K,q)=>`${$}${K}${q}`,F_6=($,K)=>{b.factory($!==K,I.validation,`Store code mismatch: expected ${K}, got ${$}`,"STORE_CODE_MISMATCH")},SO=Object.freeze({parseId:B_6,buildId:U_6,validateStoreCode:F_6});var p_6=($)=>{let{publishedVersionNumber:K,hasDraft:q,draftContent:Y,publishedContent:J,...z}=$,{entityFns:W,mutationFns:Z}=lJ.create(z),H=K??null,O=q??!1,X=Y??null,P=J??null,w=null,C=Object.freeze({...W,getPublishedVersionNumber:()=>H,hasDraftContent:()=>O,getDraftContent:()=>X,getPublishedContent:()=>P,getEditState:()=>w,hasPublished:()=>H>0,isBeingEdited:()=>w!==null,getVersionCount:()=>H??0}),E=Object.freeze({...Z,setPublishedVersionNumber:(g)=>{H=g},setHasDraft:(g)=>{O=g},setDraftContent:(g)=>{X=g},setPublishedContent:(g)=>{P=g},setEditState:(g)=>{w=g}});return{entityFns:C,mutationFns:E}},Nk=Object.freeze({create:p_6});var mP8=($)=>{let{subtype:K,...q}=$,{entityFns:Y,mutationFns:J}=Nk.create(q),z=()=>"d",W=()=>K??null,H=Object.freeze({...Y,getTypeCode:z,getSubtype:W,toJSON:()=>{let X={};for(let[P,w]of Object.entries(Y.getFields()))X[P]=w.toJSON();return{id:Y.getObjectId(),parentId:Y.getParentId(),name:Y.getName(),path:Y.getPath(),publishedVersionNumber:Y.getPublishedVersionNumber(),hasDraft:Y.hasDraftContent(),draftContent:Y.getDraftContent(),publishedContent:Y.getPublishedContent(),editState:Y.getEditState(),createdAt:Y.getCreatedAt(),updatedAt:Y.getUpdatedAt(),versionCount:Y.getVersionCount(),isFolder:Y.getIsFolder(),type:z(),subtype:W(),hasPublished:Y.hasPublished(),isBeingEdited:Y.isBeingEdited(),fields:X}}}),O=Object.freeze({...J});return{entity:H,mutationApi:O}},Q_6=($,K,q,Y,J,z,W=null,Z=null)=>{return mP8({id:K,parentId:q,name:$.name,path:Y,publishedVersionNumber:J,hasDraft:z,draftContent:W,publishedContent:Z,createdAt:$.created_at,updatedAt:$.updated_at,subtype:$.subtype||null})},BP8=Object.freeze({create:mP8,createFromRow:Q_6});var UP8=($)=>{let{subtype:K,...q}=$,{entityFns:Y,mutationFns:J}=Nk.create(q),z=()=>"t",W=()=>K??null,H=Object.freeze({...Y,getTypeCode:z,getSubtype:W,toJSON:()=>{let X={};for(let[P,w]of Object.entries(Y.getFields()))X[P]=w.toJSON();return{id:Y.getObjectId(),parentId:Y.getParentId(),name:Y.getName(),path:Y.getPath(),publishedVersionNumber:Y.getPublishedVersionNumber(),hasDraft:Y.hasDraftContent(),draftContent:Y.getDraftContent(),publishedContent:Y.getPublishedContent(),editState:Y.getEditState(),createdAt:Y.getCreatedAt(),updatedAt:Y.getUpdatedAt(),versionCount:Y.getVersionCount(),isFolder:Y.getIsFolder(),type:z(),subtype:W(),hasPublished:Y.hasPublished(),isBeingEdited:Y.isBeingEdited(),fields:X}}}),O=Object.freeze({...J});return{entity:H,mutationApi:O}},c_6=($,K,q,Y,J,z,W=null,Z=null)=>{return UP8({id:K,parentId:q,name:$.name,path:Y,publishedVersionNumber:J,hasDraft:z,draftContent:W,publishedContent:Z,createdAt:$.created_at,updatedAt:$.updated_at,subtype:$.subtype||null})},FP8=Object.freeze({create:UP8,createFromRow:c_6});var pP8=($)=>{let{id:K,documentId:q,versionNumber:Y,publishedAt:J,content:z,createdAt:W,updatedAt:Z}=$,{entityFns:H,mutationFns:O}=o9.create({id:K,name:null,createdAt:W,updatedAt:Z}),X=()=>q,P=()=>Y,w=()=>J,T=()=>z,M=Object.freeze({...H,getDocumentId:X,getVersionNumber:P,getPublishedAt:w,getContent:T,isDraft:()=>J===null,getTypeCode:()=>"v",toJSON:()=>({id:H.getObjectId(),documentId:X(),versionNumber:P(),publishedAt:w(),content:T(),createdAt:H.getCreatedAt(),updatedAt:H.getUpdatedAt()})}),N=Object.freeze({...O});return{entity:M,mutationApi:N}},l_6=($,K,q,Y,J,z=null)=>{return pP8({id:K,documentId:q,versionNumber:Y,publishedAt:J,content:z,createdAt:$.created_at,updatedAt:$.updated_at})},QP8=Object.freeze({create:pP8,createFromRow:l_6});y1();var cP8=($)=>{let K=SO.parseId($);if(!K)throw I.notFound(`Invalid entity ID format: ${$}`,"NOT_FOUND");let{storeCode:q,typeCode:Y,seq:J}=K;return{entityId:`${Y}${J}`,storeCode:q,typeCode:Y,seq:J}},i_6=($)=>{let{typeCode:K}=cP8($);return K},Du={d:BP8.createFromRow,t:FP8.createFromRow,v:QP8.createFromRow},d_6=($)=>{if($==="s")return Du.d;if(!$)return Du.d;let K=Du[$];if(!K)throw Error(`Unknown content type: ${$}`);return K},n_6=($)=>{return{d:"document",t:"template",v:"version"}[$]||"content"},Y1=Object.freeze({resolveEntityId:cP8,getTypeFromId:i_6,getEntityFactory:d_6,getContentTypeLabel:n_6,buildId:SO.buildId,parseId:SO.parseId});var{parseId:W4,buildId:ez,validateStoreCode:o_6}=SO,{validateFolderName:iP8,isRootFolder:Q$4}=r3,v7=dP8.default("caw:stores:db"),iJ=3600000,a_6=({id:$,code:K,name:q,pk:Y,folderCache:J,createdAt:z,updatedAt:W})=>{let Z=new Map,{entityFns:H,mutationFns:O}=o9.create({id:$,name:q,createdAt:z,updatedAt:W}),X=()=>new Set([K]),P=()=>"local",w=()=>K,T=()=>Y,G=()=>({id:$,code:K,name:H.getName(),createdAt:H.getCreatedAt(),updatedAt:H.getUpdatedAt(),type:"local"}),j=(x)=>{o_6(x,K)},v=async(x,T8)=>{if(!T8)return null;if(J){let p=J.get(T8);if(p)return p.getPk()}if(!W4(T8))b.factory(!0,I.validation,`Invalid parent folder ID: ${T8}`,"INVALID_ID");let t=await x.selectFrom("entities").select("id").where("store_id","=",Y).where("object_id","=",T8).where("deleted_at","is",null).executeTakeFirst();return t?t.id:null},M=async(x,T8)=>{let u=await x.selectFrom("entities").select(["name","parent_folder_id","parent_object_id","object_id"]).where("id","=",T8).where("deleted_at","is",null).executeTakeFirst();b.factory(!u,I.notFound,`Entity not found for PK ${T8}`,"ENTITY_NOT_FOUND");let t=u.object_id,p=J?J.get(t):null;if(p){let Z8=p.getEntity();if(Z8.getName()===u.name&&Z8.getParentId()===u.parent_object_id)return Z8.getPath()}if(!u.parent_object_id)return u.name;let r=J?J.get(u.parent_object_id):null;if(r){let G8=r.getEntity().getPath();return G8?`${G8}/${u.name}`:u.name}let o=[u.name],$8=u.parent_folder_id;while($8!==null){let Z8=Z.get($8),G8=Z8&&J?J.get(Z8):null;if(G8){let o8=G8.getEntity().getPath();if(o8){let i8=o8.split("/").filter((A6)=>A6);o.unshift(...i8)}break}let V8=await x.selectFrom("entities").select(["name","parent_folder_id"]).where("id","=",$8).where("deleted_at","is",null).executeTakeFirst();b.factory(!V8,I.notFound,`Folder not found for PK ${$8}`,"FOLDER_NOT_FOUND"),o.unshift(V8.name),$8=V8.parent_folder_id}return o.join("/")},N=async(x,T8)=>{let u=[],t=[T8];while(t.length>0){let p=t.shift(),r=await x.selectFrom("entities").select(["id","type_code"]).where("store_id","=",Y).where("parent_folder_id","=",p).where("deleted_at","is",null).execute();for(let o of r)if(u.push(o.id),o.type_code==="f"||o.type_code==="s"||o.type_code==="j")t.push(o.id)}return u},k=async(x,T8,u,t)=>{let p=y6(),r=await E6.readEntityTypeId(x,{},"f",t),o=await A1.nextSeq(x,"store",Y,"f"),$8=await v(x,T8),Z8=ez(K,"f",o);return{row:{...await x.insertInto("entities").values({store_id:Y,object_id:Z8,entity_type_id:r,type_code:"f",seq:o,parent_folder_id:$8,parent_object_id:T8,name:u,created_at:p,updated_at:p}).returningAll().executeTakeFirstOrThrow(),subtype:t},id:Z8}},R=(x)=>{let T8=null;if(x.owner_entity_id!==null)T8=Z.get(x.owner_entity_id)??null;let u=null;if(x.config)try{u=JSON.parse(x.config).allowedValues||null}catch(r){}let{entity:t,mutationApi:p}=Cu.create({id:x.object_id,name:x.name,ownerEntityId:T8,label:x.label,description:x.description,primitiveType:x.primitive_type,required:x.required===1,multiplicity:x.multiplicity,isSystem:x.is_system===1,allowedValues:u,createdAt:x.created_at,updatedAt:x.updated_at});return{entity:t,mutationApi:p,pk:x.id}},C=(x)=>{let u={int:"int_fields",string:"string_fields",text:"text_fields",date:"date_fields",float:"float_fields",object_ref:"obj_ref_fields"}[x];if(!u)throw Error(`Unknown primitive type: ${x}`);return u},L=async(x,T8,u,t,p,r=0)=>{let o=C(t);if(t==="object_ref"){let $8=await x.selectFrom("entities").select("id").where("object_id","=",p).where("deleted_at","is",null).executeTakeFirst();if(!$8)throw I.validation(`Target entity not found: ${p}`,"INVALID_REFERENCE");await x.insertInto(o).values({entity_id:T8,field_definition_id:u,target_entity_id:$8.id,ordinal:r}).execute()}else{let $8=p;if(t==="int")$8=typeof p==="string"?parseInt(p,10):p;else if(t==="float")$8=typeof p==="string"?parseFloat(p):p;if(await x.insertInto(o).values({entity_id:T8,field_definition_id:u,value:$8,ordinal:r}).execute(),t==="text"&&$8!==null&&$8!=="")await h1`
|
|
503
|
+
`.execute($)};var nZ6=()=>new Date().toISOString(),y6=nZ6;var oZ6=async($,K,q,Y)=>{if(!await $.selectFrom("sequences").select("next_value").where("scope_type","=",K).where("scope_id",q===null?"is":"=",q).where("type_code","=",Y).executeTakeFirst())await $.insertInto("sequences").values({scope_type:K,scope_id:q,type_code:Y,next_value:1}).execute();let z=await $.selectFrom("sequences").select("next_value").where("scope_type","=",K).where("scope_id",q===null?"is":"=",q).where("type_code","=",Y).executeTakeFirstOrThrow();return await $.updateTable("sequences").set((W)=>({next_value:W("next_value","+",1)})).where("scope_type","=",K).where("scope_id",q===null?"is":"=",q).where("type_code","=",Y).execute(),z.next_value},A1=Object.freeze({nextSeq:oZ6});var aZ6=Object.freeze([{name:"agent",label:"Agent",description:"Agent type (claude or codex)"},{name:"model",label:"Model",description:"Model name (optional)"},{name:"status",label:"Status",description:"Job status (pending/running/completed/error)"},{name:"startedAt",label:"Started At",description:"Job start timestamp",primitiveType:"date"},{name:"completedAt",label:"Completed At",description:"Job completion timestamp",primitiveType:"date"},{name:"tokensUsed",label:"Tokens Used",description:"Total tokens used by the job",primitiveType:"int"},{name:"exitCode",label:"Exit Code",description:"Process exit code",primitiveType:"int"},{name:"errorMessage",label:"Error Message",description:"Error message if job failed"},{name:"durationMs",label:"Duration (ms)",description:"Job execution duration in milliseconds",primitiveType:"int"},{name:"totalCostUsd",label:"Total Cost (USD)",description:"API cost in USD",primitiveType:"float"},{name:"numTurns",label:"Number of Turns",description:"Number of agent conversation turns",primitiveType:"int"},{name:"sessionId",label:"Session ID",description:"Agent session ID for conversation continuity"},{name:"workingDirectory",label:"Working Directory",description:"Working directory for job execution (optional, defaults to projectPath)"},{name:"pid",label:"PID",description:"Process ID of the running job",primitiveType:"int"},{name:"objectId",label:"Object ID",description:"ID of the entity this job is associated with"},{name:"streaming",label:"Streaming",description:"Enable realtime output streaming (true/false)"}]),qG=aZ6;var rZ6=Object.freeze([{name:"hash",label:"Hash",description:"SHA-256 content hash",required:!0},{name:"mimeType",label:"MIME Type",description:"Content type",required:!0},{name:"sizeBytes",label:"Size (bytes)",description:"File size in bytes",primitiveType:"int",required:!0},{name:"originalFilename",label:"Original Filename",description:"Original upload filename"},{name:"widthPx",label:"Width (px)",description:"Native pixel width",primitiveType:"int"},{name:"heightPx",label:"Height (px)",description:"Native pixel height",primitiveType:"int"},{name:"displayWidth",label:"Display Width",description:"CSS display width",primitiveType:"int"},{name:"displayHeight",label:"Display Height",description:"CSS display height",primitiveType:"int"}]),LM=rZ6;var c78=[{code:"f",name:"Folder",subtype:null},{code:"d",name:"Document",subtype:null},{code:"t",name:"Template",subtype:null},{code:"s",name:"Story",subtype:null},{code:"r",name:"Store",subtype:"local"},{code:"r",name:"Store",subtype:"demux"},{code:"p",name:"Project",subtype:null},{code:"j",name:"Job",subtype:null},{code:"v",name:"Version",subtype:null},{code:"n",name:"field_definition",subtype:null},{code:"a",name:"asset",subtype:null},{code:"f",name:"Document Root Folder",subtype:"root_d",parentCode:"f",parentSubtype:null},{code:"f",name:"Template Root Folder",subtype:"root_t",parentCode:"f",parentSubtype:null},{code:"f",name:"Story Root Folder",subtype:"root_s",parentCode:"f",parentSubtype:null},{code:"f",name:"Job Root Folder",subtype:"root_j",parentCode:"f",parentSubtype:null},{code:"f",name:"Tasks Folder",subtype:"tasks",parentCode:"f",parentSubtype:null},{code:"d",name:"Task",subtype:"task",parentCode:"d",parentSubtype:null},{code:"d",name:"Cartridge",subtype:"cartridge",parentCode:"d",parentSubtype:null},{code:"t",name:"Prompt",subtype:"prompt",parentCode:"t",parentSubtype:null}],l78=async($)=>{return(await $.selectFrom("entity_types").select("id").limit(1).execute()).length>0},t6=async($,K,q=null)=>{return(await $.selectFrom("entity_types").select("id").where("code","=",K).where((J)=>q?J("subtype","=",q):J("subtype","is",null)).executeTakeFirstOrThrow()).id},SM=async($,K,q,Y)=>{let J=y6(),W={d:"root_d",t:"root_t",s:"root_s",j:"root_j"}[Y],H={d:"Documents",t:"Templates",s:"Stories",j:"Jobs"}[Y],O=await t6($,"f",W);if(!await $.selectFrom("sequences").select("next_value").where("scope_type","=","store").where("scope_id","=",K).where("type_code","=","f").executeTakeFirst())await $.insertInto("sequences").values({scope_type:"store",scope_id:K,type_code:"f",next_value:1}).execute();let P=await $.selectFrom("sequences").select("next_value").where("scope_type","=","store").where("scope_id","=",K).where("type_code","=","f").executeTakeFirst();await $.updateTable("sequences").set((v)=>({next_value:v("next_value","+",1)})).where("scope_type","=","store").where("scope_id","=",K).where("type_code","=","f").execute();let w=`${q}f${P.next_value}`,T=await $.insertInto("entities").values({store_id:K,object_id:w,entity_type_id:O,type_code:"f",seq:P.next_value,parent_folder_id:null,parent_object_id:null,name:H,created_at:J,updated_at:J}).returning("id").executeTakeFirstOrThrow(),j={d:"document",t:"template",s:"story",j:"job"}[Y];return T.id},sZ6=async($)=>{for(let K of c78)await $.insertInto("entity_types").values({code:K.code,name:K.name,subtype:K.subtype,parent_type_id:null}).execute();for(let K of c78)if(K.parentCode!==void 0){let q=await $.selectFrom("entity_types").select("id").where("code","=",K.parentCode).where((Y)=>K.parentSubtype===null?Y("subtype","is",null):Y("subtype","=",K.parentSubtype)).executeTakeFirstOrThrow();await $.updateTable("entity_types").set({parent_type_id:q.id}).where("code","=",K.code).where((Y)=>K.subtype===null?Y("subtype","is",null):Y("subtype","=",K.subtype)).execute()}},tZ6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await A1.nextSeq($,"store",K,"n"),W=`${q}n${z}`;await $.insertInto("field_definitions").values({store_id:K,object_id:W,entity_type_id:J,type_code:"n",seq:z,owner_entity_id:null,name:"state",label:"State",description:"Workflow state",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).execute()},eZ6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d","task"),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"state",label:"State",description:"Task workflow state",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:1,sort_order:null}).execute()},$H6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"j",null);for(let W of qG){let Z=await A1.nextSeq($,"store",K,"n"),H=`${q}n${Z}`,O=await $.insertInto("field_definitions").values({store_id:K,object_id:H,entity_type_id:J,type_code:"n",seq:Z,owner_entity_id:null,name:W.name,label:W.label,description:W.description,primitive_type:W.primitiveType||"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:O.id,required:0,sort_order:null}).execute()}},KH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"a",null);for(let W of LM){let Z=await A1.nextSeq($,"store",K,"n"),H=`${q}n${Z}`,O=await $.insertInto("field_definitions").values({store_id:K,object_id:H,entity_type_id:J,type_code:"n",seq:Z,owner_entity_id:null,name:W.name,label:W.label,description:W.description,primitive_type:W.primitiveType||"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:O.id,required:W.required?1:0,sort_order:null}).execute()}},IM=Object.freeze(["prep","spec","design","plan","build","review","done"]),kz=Object.freeze(["waiting","ready","in-progress","done"]),qH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"f","tasks"),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"states",label:"States",description:"Ordered list of valid task states",primitive_type:"string",required:0,multiplicity:"multi",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:1,sort_order:null}).execute()},YH6=async($,K,q,Y)=>{let J=y6(),z=await t6($,"n",null),W=await t6($,"f","root_s"),Z=await A1.nextSeq($,"store",K,"n"),H=`${q}n${Z}`,X=(await $.insertInto("field_definitions").values({store_id:K,object_id:H,entity_type_id:z,type_code:"n",seq:Z,owner_entity_id:null,name:"states",label:"States",description:"Ordered list of valid story states",primitive_type:"string",required:0,multiplicity:"multi",is_system:1,created_at:J,updated_at:J}).returning("id").executeTakeFirstOrThrow()).id;await $.insertInto("class_field_defs").values({store_id:K,class_type_id:W,field_definition_id:X,required:1,sort_order:null}).execute();for(let P=0;P<IM.length;P++)await $.insertInto("string_fields").values({entity_id:Y,field_definition_id:X,value:IM[P],ordinal:P}).execute()},JH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d","task"),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"dependsOn",label:"Depends On",description:"Tasks that block this task",primitive_type:"object_ref",required:0,multiplicity:"multi",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},zH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d","cartridge"),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"synopsis",label:"Synopsis",description:"Brief description of the cartridge",primitive_type:"text",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},WH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d","cartridge"),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"relatedActivities",label:"Related Activities",description:"Associated activity types",primitive_type:"string",required:0,multiplicity:"multi",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},ZH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"t","prompt"),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"associatedType",label:"Associated Type",description:"Entity types this template is associated with",primitive_type:"string",required:0,multiplicity:"multi",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},HH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"s",null),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"flag",label:"Flag",description:"Visual indicator for story attention",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},OH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"s",null),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"activeJobCount",label:"Active Job Count",description:"Number of active jobs associated with this story",primitive_type:"int",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},XH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"s",null),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"statusMessage",label:"Status Message",description:"Agent status message displayed in stories list",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},PH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"s",null),W=await A1.nextSeq($,"store",K,"n"),Z=`${q}n${W}`,H=await $.insertInto("field_definitions").values({store_id:K,object_id:Z,entity_type_id:J,type_code:"n",seq:W,owner_entity_id:null,name:"dateCompleted",label:"Date Completed",description:"Timestamp when story transitioned to done state",primitive_type:"date",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:H.id,required:0,sort_order:null}).execute()},wH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d",null),W=await t6($,"t",null),Z=[{name:"draft_version",label:"Draft Version",description:"Points to current draft version entity"},{name:"latest_published_version",label:"Latest Published Version",description:"Points to most recent published version entity"}];for(let H of[z,W])for(let O of Z){let X=await A1.nextSeq($,"store",K,"n"),P=`${q}n${X}`,w=await $.insertInto("field_definitions").values({store_id:K,object_id:P,entity_type_id:J,type_code:"n",seq:X,owner_entity_id:null,name:O.name,label:O.label,description:O.description,primitive_type:"object_ref",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:H,field_definition_id:w.id,required:0,sort_order:null}).execute()}},TH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d",null),W=await t6($,"t",null),Z=[{name:"edit_session_id",label:"Edit Session ID",description:"UUID of the editing session",primitiveType:"string"},{name:"edit_started_at",label:"Edit Started At",description:"ISO 8601 timestamp when edit lock was acquired",primitiveType:"date"},{name:"edit_last_activity_at",label:"Edit Last Activity At",description:"ISO 8601 timestamp of last activity",primitiveType:"date"}];for(let H of[z,W])for(let O of Z){let X=await A1.nextSeq($,"store",K,"n"),P=`${q}n${X}`,w=await $.insertInto("field_definitions").values({store_id:K,object_id:P,entity_type_id:J,type_code:"n",seq:X,owner_entity_id:null,name:O.name,label:O.label,description:O.description,primitive_type:O.primitiveType,required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:H,field_definition_id:w.id,required:0,sort_order:null}).execute()}},GH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"d",null),W=await t6($,"t",null);for(let Z of[z,W]){let H=await A1.nextSeq($,"store",K,"n"),O=`${q}n${H}`,X=await $.insertInto("field_definitions").values({store_id:K,object_id:O,entity_type_id:J,type_code:"n",seq:H,owner_entity_id:null,name:"size",label:"Size",description:"Content size in bytes",primitive_type:"int",required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:Z,field_definition_id:X.id,required:0,sort_order:null}).execute()}},jH6=async($,K,q)=>{let Y=y6(),J=await t6($,"n",null),z=await t6($,"v",null),W=[{name:"document",label:"Document",description:"Parent document or template entity",primitiveType:"object_ref",required:1},{name:"version_number",label:"Version Number",description:"Version number (1, 2, 3...)",primitiveType:"int",required:1},{name:"published_at",label:"Published At",description:"ISO 8601 timestamp when published (null = draft)",primitiveType:"date",required:0},{name:"content_hash",label:"Content Hash",description:"SHA-256 hex fingerprint of content for change detection",primitiveType:"string",required:0}];for(let Z of W){let H=await A1.nextSeq($,"store",K,"n"),O=`${q}n${H}`,X=await $.insertInto("field_definitions").values({store_id:K,object_id:O,entity_type_id:J,type_code:"n",seq:H,owner_entity_id:null,name:Z.name,label:Z.label,description:Z.description,primitive_type:Z.primitiveType,required:0,multiplicity:"single",is_system:1,created_at:Y,updated_at:Y}).returning("id").executeTakeFirstOrThrow();await $.insertInto("class_field_defs").values({store_id:K,class_type_id:z,field_definition_id:X.id,required:Z.required,sort_order:null}).execute()}},vH6=async($)=>{let K=y6(),q=await t6($,"n",null),Y=await t6($,"r","local");if(!await $.selectFrom("sequences").select("next_value").where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","n").executeTakeFirst())await $.insertInto("sequences").values({scope_type:"global",scope_id:null,type_code:"n",next_value:1}).execute();let z=await $.selectFrom("sequences").select("next_value").where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","n").executeTakeFirstOrThrow();await $.updateTable("sequences").set((H)=>({next_value:H("next_value","+",1)})).where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","n").execute();let W=`_n${z.next_value}`,Z=await $.insertInto("field_definitions").values({store_id:null,object_id:W,entity_type_id:q,type_code:"n",seq:z.next_value,owner_entity_id:null,name:"code",label:"Store Code",description:"Unique code identifying the local store (e.g., A, B)",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:K,updated_at:K}).returning("id").executeTakeFirstOrThrow();return await $.insertInto("class_field_defs").values({store_id:null,class_type_id:Y,field_definition_id:Z.id,required:1,sort_order:null}).execute(),Z.id},VH6=async($)=>{let K=y6(),q=await t6($,"n",null),Y=await t6($,"p",null),J=await $.selectFrom("sequences").select("next_value").where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","n").executeTakeFirstOrThrow();await $.updateTable("sequences").set((Z)=>({next_value:Z("next_value","+",1)})).where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","n").execute();let z=`_n${J.next_value}`,W=await $.insertInto("field_definitions").values({store_id:null,object_id:z,entity_type_id:q,type_code:"n",seq:J.next_value,owner_entity_id:null,name:"path",label:"Project Path",description:"Filesystem path for the project",primitive_type:"string",required:0,multiplicity:"single",is_system:1,created_at:K,updated_at:K}).returning("id").executeTakeFirstOrThrow();return await $.insertInto("class_field_defs").values({store_id:null,class_type_id:Y,field_definition_id:W.id,required:1,sort_order:null}).execute(),W.id},AH6=async($)=>{let K=await vH6($);await VH6($);let q=await $.selectFrom("sequences").select("next_value").where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","r").executeTakeFirstOrThrow();await $.updateTable("sequences").set((O)=>({next_value:O("next_value","+",1)})).where("scope_type","=","global").where("scope_id","is",null).where("type_code","=","r").execute();let Y=`S${q.next_value}`,J=y6(),z=await t6($,"r","local"),Z=(await $.insertInto("entities").values({store_id:null,object_id:Y,entity_type_id:z,type_code:"r",seq:q.next_value,parent_folder_id:null,parent_object_id:null,name:"Shared",created_at:J,updated_at:J}).returning("id").executeTakeFirstOrThrow()).id;await $.insertInto("string_fields").values({entity_id:Z,field_definition_id:K,value:"B",ordinal:0}).execute(),await SM($,Z,"B","d"),await SM($,Z,"B","t");let H=await SM($,Z,"B","s");await SM($,Z,"B","j"),await tZ6($,Z,"B"),await $H6($,Z,"B"),await KH6($,Z,"B"),await eZ6($,Z,"B"),await JH6($,Z,"B"),await zH6($,Z,"B"),await WH6($,Z,"B"),await YH6($,Z,"B",H),await qH6($,Z,"B"),await ZH6($,Z,"B"),await HH6($,Z,"B"),await OH6($,Z,"B"),await XH6($,Z,"B"),await PH6($,Z,"B"),await wH6($,Z,"B"),await TH6($,Z,"B"),await GH6($,Z,"B"),await jH6($,Z,"B"),await $.insertInto("sequences").values({scope_type:"store",scope_id:Z,type_code:"v",next_value:1}).execute()},i78=async($)=>{await sZ6($),await $.insertInto("sequences").values([{scope_type:"global",scope_id:null,type_code:"r",next_value:1},{scope_type:"global",scope_id:null,type_code:"p",next_value:1}]).execute(),await AH6($)};var xM=n6(n78(),1),MH6=($,K)=>{if($)throw Error(K)},o78=($,K)=>{if(xM.default.null($)||xM.default.undefined($))throw Error(`${K} is required`)},_H6=($,K)=>{if(o78($,K),xM.default.empty($))throw Error(`${K} cannot be empty`)},kH6=($,K,...q)=>{if($)throw K(...q)},NH6={condition:MH6,nullish:o78,empty:_H6,factory:kH6},b=NH6;var H_6=typeof Bun<"u",O_6=async($)=>{if(H_6){let{Database:K}=await import("bun:sqlite"),{BunSqliteDialect:q}=await Promise.resolve().then(() => n6(DP8(),1)),Y=new K($);return Y.exec("PRAGMA journal_mode = WAL"),Y.exec("PRAGMA foreign_keys = ON"),new pK({dialect:new q({database:Y})})}else{let q=new(await import("better-sqlite3")).default($);return q.pragma("journal_mode = WAL"),q.pragma("foreign_keys = ON"),new pK({dialect:new gx({database:q})})}},X_6=($,K)=>{if(!z_6($)){if(!K)throw Error(`Database file not found: ${$}`);W_6(Z_6($),{recursive:!0})}},P_6=async($,K)=>{if(!await p78($)){if(!K)throw Error("Database schema not found");await Q78($)}},w_6=async($,K)=>{if(!await l78($)){if(!K)throw Error("Database seed data not found");await i78($)}},T_6=($)=>{let{kyselyFactory:K=O_6}=$??{};return Object.freeze({getDb:async(Y,J)=>{if(b.nullish(Y,"databaseFilepath"),Y!==":memory:")X_6(Y,J);let z=await K(Y);return await P_6(z,J),await w_6(z,J),z}})},hP8={create:T_6};var G_6=($)=>{let{id:K,name:q,createdAt:Y,updatedAt:J}=$,O=Object.freeze({getObjectId:()=>K,getName:()=>q,getCreatedAt:()=>Y,getUpdatedAt:()=>J}),w=Object.freeze({setName:(T)=>{q=T},setUpdatedAt:(T)=>{J=T}});return{entityFns:O,mutationFns:w}},o9=Object.freeze({create:G_6});var j_6=($)=>{let{id:K,name:q,path:Y,createdAt:J,updatedAt:z}=$,{entityFns:W,mutationFns:Z}=o9.create({id:K,name:q,createdAt:J,updatedAt:z}),H=()=>Y,X=Object.freeze({...W,getPath:H,toJSON:()=>({objectId:W.getObjectId(),name:W.getName(),path:H(),createdAt:W.getCreatedAt(),updatedAt:W.getUpdatedAt()})}),w=Object.freeze({...Z,setPath:(T)=>{Y=T}});return{entity:X,mutationApi:w}},EP8=Object.freeze({create:j_6});var v_6=($,K,q)=>{return Object.freeze({getEntity:()=>$,getMutationApi:()=>K,getPk:()=>q})},e6=Object.freeze({create:v_6});EO();y1();var R_6=($)=>$.object_id,SP8=($)=>{if(!$||$.length<2||$[0]!=="P")return null;let K=parseInt($.slice(1),10);return isNaN(K)?null:K},IP8=async($,K)=>{let q=await $.selectFrom("field_definitions").select("id").where("name","=","path").where("store_id","is",null).where("is_system","=",1).executeTakeFirst();if(!q)return null;return(await $.selectFrom("string_fields").select("value").where("entity_id","=",K).where("field_definition_id","=",q.id).executeTakeFirst())?.value??null},C_6=async($,K,q)=>{let Y=await $.selectFrom("field_definitions").select("id").where("name","=","path").where("store_id","is",null).where("is_system","=",1).executeTakeFirstOrThrow();await $.insertInto("string_fields").values({entity_id:K,field_definition_id:Y.id,value:q,ordinal:0}).execute()},Vk=($,K)=>{let q=R_6($),Y=$.id,{entity:J,mutationApi:z}=EP8.create({id:q,name:$.name,path:K,createdAt:$.created_at,updatedAt:$.updated_at});return{entity:J,mutationApi:z,id:q,pk:Y}},D_6=()=>{let $=new Map,K=new Map,q=async(Z,H,{name:O,path:X},P)=>{let w=await z(Z,H,X);b.factory(w,I.validation,`Project with path already exists: ${X}`,"DUPLICATE_PROJECT_PATH");let T=y6(),G=await A1.nextSeq(Z,"global",null,"p"),j=`P${G}`,v=await E6.readEntityTypeId(Z,H,"p",null),M=await Z.insertInto("entities").values({store_id:null,object_id:j,entity_type_id:v,type_code:"p",seq:G,parent_folder_id:null,parent_object_id:null,name:O,created_at:T,updated_at:T}).returningAll().executeTakeFirstOrThrow(),N=M.id;await C_6(Z,N,X);let{entity:k,mutationApi:R,id:C}=Vk(M,X);return P(()=>{$.set(C,e6.create(k,R,N)),K.set(N,C)}),k},Y=async(Z,H,O)=>{let X=$.get(O);if(X)return X.getEntity();let P=SP8(O);if(P===null)return null;let w=await Z.selectFrom("entities").selectAll().where("type_code","=","p").where("seq","=",P).where("deleted_at","is",null).executeTakeFirst();if(!w)return null;let T=await IP8(Z,w.id),{entity:G,mutationApi:j,id:v,pk:M}=Vk(w,T);return $.set(v,e6.create(G,j,M)),K.set(M,v),G},J=async(Z,H,O)=>{let X=$.get(O);if(X)return X.getEntity();if(SP8(O)===null)return null;let w=await Z.selectFrom("entities").selectAll().where("type_code","=","p").where("object_id","=",O).where("deleted_at","is",null).executeTakeFirst();if(!w)return null;let T=await IP8(Z,w.id),{entity:G,mutationApi:j,id:v,pk:M}=Vk(w,T);return $.set(v,e6.create(G,j,M)),K.set(M,v),G},z=async(Z,H,O)=>{let X=await Z.selectFrom("entities").innerJoin("string_fields","string_fields.entity_id","entities.id").innerJoin("field_definitions","field_definitions.id","string_fields.field_definition_id").select(["entities.id","entities.object_id","entities.name","entities.created_at","entities.updated_at","string_fields.value as path"]).where("entities.type_code","=","p").where("entities.deleted_at","is",null).where("field_definitions.name","=","path").where("field_definitions.store_id","is",null).where("field_definitions.is_system","=",1).where("string_fields.value","=",O).executeTakeFirst();if(!X)return null;let{entity:P,mutationApi:w,id:T,pk:G}=Vk(X,X.path),j=$.get(T);if(j)return j.getEntity();return $.set(T,e6.create(P,w,G)),K.set(G,T),P};return Object.freeze({createProject:q,readProject:Y,readProjectByObjectId:J,readProjectByPath:z,evictProject:(Z)=>{let H=$.get(Z);if(H)K.delete(H.getPk());$.delete(Z)}})},xP8=Object.freeze({create:D_6});var h_6=()=>{let $=new Map,K=new Map;return Object.freeze({get:(P)=>$.get(P),getByPk:(P)=>{let w=K.get(P);return w?$.get(w):void 0},has:(P)=>$.has(P),set:(P,w)=>{$.set(P,w),K.set(w.getPk(),P)},remove:(P)=>{let w=$.get(P);if(w)K.delete(w.getPk());$.delete(P)},getIdByPk:(P)=>K.get(P),setIdByPk:(P,w)=>K.set(P,w),clear:()=>{$.clear(),K.clear()},entries:()=>$.entries()})},tz=Object.freeze({create:h_6});var dP8=n6(k4(),1);import{createHash as lP8}from"crypto";EO();var E_6=($)=>{let{id:K,name:q,createdAt:Y,updatedAt:J}=$,{entityFns:z,mutationFns:W}=o9.create({id:K,name:q,createdAt:Y,updatedAt:J}),Z=new Map,X=Object.freeze({...z,getField:(G)=>{return Z.get(G)},getFields:()=>{let G={};for(let[j,v]of Z.entries())G[j]=v;return G}}),T=Object.freeze({...W,setField:(G,j)=>{Z.set(G,j)},removeField:(G)=>{Z.delete(G)}});return{entityFns:X,mutationFns:T}},Ak=Object.freeze({create:E_6});var L_6=($)=>{let{id:K,name:q,parentId:Y,path:J,createdAt:z,updatedAt:W}=$,{entityFns:Z,mutationFns:H}=Ak.create({id:K,name:q,createdAt:z,updatedAt:W}),w=Object.freeze({...Z,getParentId:()=>Y,getPath:()=>J,getIsFolder:()=>!1}),j=Object.freeze({...H,setParentId:(v)=>{Y=v},setPath:(v)=>{J=v}});return{entityFns:w,mutationFns:j}},lJ=Object.freeze({create:L_6});var gP8=($)=>{let{entityFns:K,mutationFns:q}=lJ.create($),Y=$.subtype||null,J=()=>Y,z=()=>K.getParentId()===null,W=()=>!0,H=Object.freeze({...K,getSubtype:J,isRoot:z,getIsFolder:W,toJSON:()=>{let X={};for(let[P,w]of Object.entries(K.getFields()))X[P]=w.toJSON();return{id:K.getObjectId(),parentId:K.getParentId(),name:K.getName(),path:K.getPath(),subtype:J(),createdAt:K.getCreatedAt(),updatedAt:K.getUpdatedAt(),isFolder:W(),isRoot:z(),fields:X}}}),O=Object.freeze({...q});return{entity:H,mutationApi:O}},S_6=($,K,q,Y)=>{return gP8({id:K,parentId:q,name:$.name,path:Y,subtype:$.subtype||null,createdAt:$.created_at,updatedAt:$.updated_at})},YY=Object.freeze({create:gP8,createFromRow:S_6});var yP8=($)=>{let{entityFns:K,mutationFns:q}=lJ.create($),H=Object.freeze({...K,getTypeCode:()=>"s",getSubtype:()=>null,isStory:()=>!0,getIsFolder:()=>!1,toJSON:()=>{let X={};for(let[P,w]of Object.entries(K.getFields()))X[P]=w.toJSON();return{id:K.getObjectId(),parentId:K.getParentId(),name:K.getName(),path:K.getPath(),createdAt:K.getCreatedAt(),updatedAt:K.getUpdatedAt(),type:"s",isStory:!0,isFolder:!1,fields:X}}}),O=Object.freeze({...q});return{entity:H,mutationApi:O}},I_6=($,K,q,Y)=>{return yP8({id:K,parentId:q,name:$.name,path:Y,createdAt:$.created_at,updatedAt:$.updated_at})},LO=Object.freeze({create:yP8,createFromRow:I_6});var bP8=($)=>{let{entityFns:K,mutationFns:q}=lJ.create($),Z=Object.freeze({...K,getTypeCode:()=>"j",isJob:()=>!0,getIsFolder:()=>!1,toJSON:()=>{let O={};for(let[X,P]of Object.entries(K.getFields()))O[X]=P.toJSON();return{id:K.getObjectId(),parentId:K.getParentId(),name:K.getName(),path:K.getPath(),createdAt:K.getCreatedAt(),updatedAt:K.getUpdatedAt(),type:"j",isJob:!0,isFolder:!1,fields:O}}}),H=Object.freeze({...q});return{entity:Z,mutationApi:H}},x_6=($,K,q,Y)=>{return bP8({id:K,parentId:q,name:$.name,path:Y,createdAt:$.created_at,updatedAt:$.updated_at})},Mk=Object.freeze({create:bP8,createFromRow:x_6});var g_6=($)=>{let{entityFns:K,mutationFns:q}=Ak.create({id:$.id,name:$.name,createdAt:$.createdAt,updatedAt:$.updatedAt}),Y=()=>"a",J=()=>!0,z=()=>K.getField("hash")?.getValue(),W=()=>K.getField("mimeType")?.getValue(),Z=()=>K.getField("sizeBytes")?.getValue(),H=()=>K.getField("originalFilename")?.getValue()??null,O=()=>K.getField("widthPx")?.getValue()??null,X=()=>K.getField("heightPx")?.getValue()??null,P=()=>K.getField("displayWidth")?.getValue()??null,w=()=>K.getField("displayHeight")?.getValue()??null,G=Object.freeze({...K,getTypeCode:Y,isAsset:J,getHash:z,getMimeType:W,getSizeBytes:Z,getOriginalFilename:H,getWidthPx:O,getHeightPx:X,getDisplayWidth:P,getDisplayHeight:w,toJSON:()=>({id:K.getObjectId(),type:"a",hash:z(),mimeType:W(),sizeBytes:Z(),originalFilename:H(),widthPx:O(),heightPx:X(),displayWidth:P(),displayHeight:w(),createdAt:K.getCreatedAt(),updatedAt:K.getUpdatedAt()})}),j=Object.freeze({...q});return{entity:G,mutationApi:j}},_k=Object.freeze({create:g_6});var uP8=Object.freeze(["string","object_ref","int","text","date","float"]),y_6=($)=>{let{id:K,name:q,ownerEntityId:Y,label:J,description:z,primitiveType:W,required:Z,multiplicity:H,isSystem:O,allowedValues:X,createdAt:P,updatedAt:w}=$;if(!uP8.includes(W))throw Error(`Invalid primitive type: "${W}". Valid types are: ${uP8.join(", ")}`);let{entityFns:T,mutationFns:G}=o9.create({id:K,name:q,createdAt:P,updatedAt:w}),j=()=>Y,v=()=>J,M=()=>z,N=()=>W,k=()=>Z,R=()=>H,C=()=>O,L=()=>X??null,m=Object.freeze({...T,getOwnerEntityId:j,getLabel:v,getDescription:M,getPrimitiveType:N,getRequired:k,getMultiplicity:R,getIsSystem:C,getAllowedValues:L,toJSON:()=>({id:T.getObjectId(),ownerEntityId:j(),name:T.getName(),label:v(),description:M(),primitiveType:N(),required:k(),multiplicity:R(),isSystem:C(),allowedValues:L(),createdAt:T.getCreatedAt(),updatedAt:T.getUpdatedAt()})}),S=Object.freeze({...G});return{entity:m,mutationApi:S}},Cu=Object.freeze({create:y_6});var b_6=({definition:$,values:K=[]})=>{let q=$,Y=[...K];if(q.getMultiplicity()==="single"&&Y.length>1)throw Error(`Field "${q.getName()}" is single-valued but received ${Y.length} values`);let J=(T=0)=>{return Y[T]},z=()=>{return[...Y]},W=()=>{return q},Z=()=>{return q.getMultiplicity()==="multi"};return Object.freeze({getValue:J,getValues:z,getDefinition:W,isMultiValued:Z,isRequired:()=>{return q.getRequired()},getType:()=>{return q.getPrimitiveType()},getLabel:()=>{return q.getLabel()||q.getName()},getName:()=>{return q.getName()},toJSON:()=>{if(Z())return Y;else return Y[0]}})},kk=Object.freeze({create:b_6});y1();y1();var u_6=($)=>{let K=$.trim();b.factory(!K,I.validation,"Folder name cannot be empty","EMPTY_NAME"),b.factory(K.length>255,I.validation,"Folder name cannot exceed 255 characters","NAME_TOO_LONG");let q=/[/\\:*?"<>|]/;return b.factory(q.test(K),I.validation,'Folder name contains invalid characters: /\\:*?"<>|',"INVALID_CHARS"),K},m_6=($)=>{return $.getParentId()===null},r3=Object.freeze({validateFolderName:u_6,isRootFolder:m_6});y1();var B_6=($)=>{if(!$||$.length<3)return null;let K=$[0],q=$[1],Y=parseInt($.slice(2),10);if(isNaN(Y))return null;return{storeCode:K,typeCode:q,seq:Y}},U_6=($,K,q)=>`${$}${K}${q}`,F_6=($,K)=>{b.factory($!==K,I.validation,`Store code mismatch: expected ${K}, got ${$}`,"STORE_CODE_MISMATCH")},SO=Object.freeze({parseId:B_6,buildId:U_6,validateStoreCode:F_6});var p_6=($)=>{let{publishedVersionNumber:K,hasDraft:q,draftContent:Y,publishedContent:J,...z}=$,{entityFns:W,mutationFns:Z}=lJ.create(z),H=K??null,O=q??!1,X=Y??null,P=J??null,w=null,C=Object.freeze({...W,getPublishedVersionNumber:()=>H,hasDraftContent:()=>O,getDraftContent:()=>X,getPublishedContent:()=>P,getEditState:()=>w,hasPublished:()=>H>0,isBeingEdited:()=>w!==null,getVersionCount:()=>H??0}),E=Object.freeze({...Z,setPublishedVersionNumber:(g)=>{H=g},setHasDraft:(g)=>{O=g},setDraftContent:(g)=>{X=g},setPublishedContent:(g)=>{P=g},setEditState:(g)=>{w=g}});return{entityFns:C,mutationFns:E}},Nk=Object.freeze({create:p_6});var mP8=($)=>{let{subtype:K,...q}=$,{entityFns:Y,mutationFns:J}=Nk.create(q),z=()=>"d",W=()=>K??null,H=Object.freeze({...Y,getTypeCode:z,getSubtype:W,toJSON:()=>{let X={};for(let[P,w]of Object.entries(Y.getFields()))X[P]=w.toJSON();return{id:Y.getObjectId(),parentId:Y.getParentId(),name:Y.getName(),path:Y.getPath(),publishedVersionNumber:Y.getPublishedVersionNumber(),hasDraft:Y.hasDraftContent(),draftContent:Y.getDraftContent(),publishedContent:Y.getPublishedContent(),editState:Y.getEditState(),createdAt:Y.getCreatedAt(),updatedAt:Y.getUpdatedAt(),versionCount:Y.getVersionCount(),isFolder:Y.getIsFolder(),type:z(),subtype:W(),hasPublished:Y.hasPublished(),isBeingEdited:Y.isBeingEdited(),fields:X}}}),O=Object.freeze({...J});return{entity:H,mutationApi:O}},Q_6=($,K,q,Y,J,z,W=null,Z=null)=>{return mP8({id:K,parentId:q,name:$.name,path:Y,publishedVersionNumber:J,hasDraft:z,draftContent:W,publishedContent:Z,createdAt:$.created_at,updatedAt:$.updated_at,subtype:$.subtype||null})},BP8=Object.freeze({create:mP8,createFromRow:Q_6});var UP8=($)=>{let{subtype:K,...q}=$,{entityFns:Y,mutationFns:J}=Nk.create(q),z=()=>"t",W=()=>K??null,H=Object.freeze({...Y,getTypeCode:z,getSubtype:W,toJSON:()=>{let X={};for(let[P,w]of Object.entries(Y.getFields()))X[P]=w.toJSON();return{id:Y.getObjectId(),parentId:Y.getParentId(),name:Y.getName(),path:Y.getPath(),publishedVersionNumber:Y.getPublishedVersionNumber(),hasDraft:Y.hasDraftContent(),draftContent:Y.getDraftContent(),publishedContent:Y.getPublishedContent(),editState:Y.getEditState(),createdAt:Y.getCreatedAt(),updatedAt:Y.getUpdatedAt(),versionCount:Y.getVersionCount(),isFolder:Y.getIsFolder(),type:z(),subtype:W(),hasPublished:Y.hasPublished(),isBeingEdited:Y.isBeingEdited(),fields:X}}}),O=Object.freeze({...J});return{entity:H,mutationApi:O}},c_6=($,K,q,Y,J,z,W=null,Z=null)=>{return UP8({id:K,parentId:q,name:$.name,path:Y,publishedVersionNumber:J,hasDraft:z,draftContent:W,publishedContent:Z,createdAt:$.created_at,updatedAt:$.updated_at,subtype:$.subtype||null})},FP8=Object.freeze({create:UP8,createFromRow:c_6});var pP8=($)=>{let{id:K,documentId:q,versionNumber:Y,publishedAt:J,content:z,createdAt:W,updatedAt:Z}=$,{entityFns:H,mutationFns:O}=o9.create({id:K,name:null,createdAt:W,updatedAt:Z}),X=()=>q,P=()=>Y,w=()=>J,T=()=>z,M=Object.freeze({...H,getDocumentId:X,getVersionNumber:P,getPublishedAt:w,getContent:T,isDraft:()=>J===null,getTypeCode:()=>"v",toJSON:()=>({id:H.getObjectId(),documentId:X(),versionNumber:P(),publishedAt:w(),content:T(),createdAt:H.getCreatedAt(),updatedAt:H.getUpdatedAt()})}),N=Object.freeze({...O});return{entity:M,mutationApi:N}},l_6=($,K,q,Y,J,z=null)=>{return pP8({id:K,documentId:q,versionNumber:Y,publishedAt:J,content:z,createdAt:$.created_at,updatedAt:$.updated_at})},QP8=Object.freeze({create:pP8,createFromRow:l_6});y1();var cP8=($)=>{let K=SO.parseId($);if(!K)throw I.notFound(`Invalid entity ID format: ${$}`,"NOT_FOUND");let{storeCode:q,typeCode:Y,seq:J}=K;return{entityId:`${Y}${J}`,storeCode:q,typeCode:Y,seq:J}},i_6=($)=>{let{typeCode:K}=cP8($);return K},Du={d:BP8.createFromRow,t:FP8.createFromRow,v:QP8.createFromRow},d_6=($)=>{if($==="s")return Du.d;if(!$)return Du.d;let K=Du[$];if(!K)throw Error(`Unknown content type: ${$}`);return K},n_6=($)=>{return{d:"document",t:"template",v:"version"}[$]||"content"},Y1=Object.freeze({resolveEntityId:cP8,getTypeFromId:i_6,getEntityFactory:d_6,getContentTypeLabel:n_6,buildId:SO.buildId,parseId:SO.parseId});var{parseId:W4,buildId:ez,validateStoreCode:o_6}=SO,{validateFolderName:iP8,isRootFolder:Q$4}=r3,v7=dP8.default("caw:stores:db"),iJ=3600000,a_6=({id:$,code:K,name:q,pk:Y,folderCache:J,createdAt:z,updatedAt:W})=>{let Z=new Map,{entityFns:H,mutationFns:O}=o9.create({id:$,name:q,createdAt:z,updatedAt:W}),X=()=>new Set([K]),P=()=>"local",w=()=>K,T=()=>Y,G=()=>({id:$,code:K,name:H.getName(),createdAt:H.getCreatedAt(),updatedAt:H.getUpdatedAt(),type:"local"}),j=(x)=>{o_6(x,K)},v=async(x,T8)=>{if(!T8)return null;if(J){let p=J.get(T8);if(p)return p.getPk()}if(!W4(T8))b.factory(!0,I.validation,`Invalid parent folder ID: ${T8}`,"INVALID_ID");let t=await x.selectFrom("entities").select("id").where("store_id","=",Y).where("object_id","=",T8).where("deleted_at","is",null).executeTakeFirst();return t?t.id:null},M=async(x,T8)=>{let u=await x.selectFrom("entities").select(["name","parent_folder_id","parent_object_id","object_id"]).where("id","=",T8).where("deleted_at","is",null).executeTakeFirst();b.factory(!u,I.notFound,`Entity not found for PK ${T8}`,"ENTITY_NOT_FOUND");let t=u.object_id,p=J?J.get(t):null;if(p){let Z8=p.getEntity();if(Z8.getName()===u.name&&Z8.getParentId()===u.parent_object_id)return Z8.getPath()}if(!u.parent_object_id)return u.name;let r=J?J.get(u.parent_object_id):null;if(r){let G8=r.getEntity().getPath();return G8?`${G8}/${u.name}`:u.name}let o=[u.name],$8=u.parent_folder_id;while($8!==null){let Z8=Z.get($8),G8=Z8&&J?J.get(Z8):null;if(G8){let o8=G8.getEntity().getPath();if(o8){let i8=o8.split("/").filter((A6)=>A6);o.unshift(...i8)}break}let V8=await x.selectFrom("entities").select(["name","parent_folder_id"]).where("id","=",$8).where("deleted_at","is",null).executeTakeFirst();b.factory(!V8,I.notFound,`Folder not found for PK ${$8}`,"FOLDER_NOT_FOUND"),o.unshift(V8.name),$8=V8.parent_folder_id}return o.join("/")},N=async(x,T8)=>{let u=[],t=[T8];while(t.length>0){let p=t.shift(),r=await x.selectFrom("entities").select(["id","type_code"]).where("store_id","=",Y).where("parent_folder_id","=",p).where("deleted_at","is",null).execute();for(let o of r)if(u.push(o.id),o.type_code==="f"||o.type_code==="s"||o.type_code==="j")t.push(o.id)}return u},k=async(x,T8,u,t)=>{let p=y6(),r=await E6.readEntityTypeId(x,{},"f",t),o=await A1.nextSeq(x,"store",Y,"f"),$8=await v(x,T8),Z8=ez(K,"f",o);return{row:{...await x.insertInto("entities").values({store_id:Y,object_id:Z8,entity_type_id:r,type_code:"f",seq:o,parent_folder_id:$8,parent_object_id:T8,name:u,created_at:p,updated_at:p}).returningAll().executeTakeFirstOrThrow(),subtype:t},id:Z8}},R=(x)=>{let T8=null;if(x.owner_entity_id!==null)T8=Z.get(x.owner_entity_id)??null;let u=null;if(x.config)try{u=JSON.parse(x.config).allowedValues||null}catch(r){}let{entity:t,mutationApi:p}=Cu.create({id:x.object_id,name:x.name,ownerEntityId:T8,label:x.label,description:x.description,primitiveType:x.primitive_type,required:x.required===1,multiplicity:x.multiplicity,isSystem:x.is_system===1,allowedValues:u,createdAt:x.created_at,updatedAt:x.updated_at});return{entity:t,mutationApi:p,pk:x.id}},C=(x)=>{let u={int:"int_fields",string:"string_fields",text:"text_fields",date:"date_fields",float:"float_fields",object_ref:"obj_ref_fields"}[x];if(!u)throw Error(`Unknown primitive type: ${x}`);return u},L=async(x,T8,u,t,p,r=0)=>{let o=C(t);if(t==="object_ref"){let $8=await x.selectFrom("entities").select("id").where("object_id","=",p).where("deleted_at","is",null).executeTakeFirst();if(!$8)throw I.validation(`Target entity not found: ${p}`,"INVALID_REFERENCE");await x.insertInto(o).values({entity_id:T8,field_definition_id:u,target_entity_id:$8.id,ordinal:r}).execute()}else{let $8=p;if(t==="int")$8=typeof p==="string"?parseInt(p,10):p;else if(t==="float")$8=typeof p==="string"?parseFloat(p):p;if(await x.insertInto(o).values({entity_id:T8,field_definition_id:u,value:$8,ordinal:r}).execute(),t==="text"&&$8!==null&&$8!=="")await h1`
|
|
504
504
|
INSERT INTO text_fields_fts(value, entity_id, field_definition_id)
|
|
505
505
|
VALUES (${$8}, ${T8}, ${u})
|
|
506
506
|
`.execute(x)}},h=async(x,T8,u,t)=>{if(t==="text")await h1`
|
|
@@ -547,7 +547,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
547
547
|
`),details:{changed:!0,lineNumber:K,checked:q}}},Hv8=($,{lineNumber:K})=>{let q=$===""?[""]:$.split(`
|
|
548
548
|
`),Y=q.length;if(K<1||K>Y)throw I.validation(`Line ${K} is out of range (document has ${Y} lines)`,"LINE_OUT_OF_RANGE");let J=K-1,z=q[J],W=/^(?:[-*+] |\d+\. )\[([ xX])\] .+$/,Z=z.match(W);if(!Z)throw I.validation("Line is not a valid checklist item","NOT_CHECKLIST_ITEM");let H=Z[1]!==" ",O=!H;return q[J]=gm(z,O),{newContent:q.join(`
|
|
549
549
|
`),details:{lineNumber:K,previousStatus:H,newStatus:O}}},Ov8=($,{items:K})=>{if(!K||K.length===0)throw I.validation("Items array cannot be empty","EMPTY_ITEMS");let q=$,Y=[],J=[...K].sort((z,W)=>W.lineNumber-z.lineNumber);for(let z of J){let W=ym(q,z);q=W.newContent,Y.push(W.details)}return Y.reverse(),{newContent:q,details:{items:Y,count:Y.filter((z)=>z.changed).length}}},WN=($,K)=>{switch(K.type){case"replace_first":return NE6($,K);case"replace_all":return fE6($,K);case"replace_regex":return RE6($,K);case"replace_regex_all":return CE6($,K);case"replace_between_markers":return DE6($,K);case"replace_lines":return hE6($,K);case"insert_at":return EE6($,K);case"replace_all_content":return{newContent:K.content,details:{message:"Replaced all content"}};case"append":return LE6($,K);default:throw Error(`Unknown operation type: ${K.type}`)}},Xv8=($,K,q=!1)=>{let Y=WN($,K),J={originalLength:$.length,newLength:Y.newContent.length,changeCount:Y.details.count||Y.details.linesReplaced||Y.details.linesDeleted||1},z={matches:J.changeCount,stats:J};if(!q)z.diff=oO($,Y.newContent);return z};var bm=($,K)=>{let q=R4.detectFullPathPrefix($,K);if(q.valid)return $.slice(q.prefix.length);return $},SE6=({store:$,folderService:K,documentHooks:q,includeResolver:Y,fieldService:J})=>{let z=Y,W=(X8)=>{return X8==="t"?"Template":"Document"},Z=(X8)=>{let P8=X8.getParentId();if(!P8)return!1;try{let{typeCode:k8}=Y1.resolveEntityId(P8);return k8==="j"}catch{return!1}},H=async(X8,P8,k8,x8,l8,n8,e8,W6={})=>{let{createMissing:g8=!0,startingFolderId:U8}=W6,a8=n8??x8;if(k8){let q6=await K.resolvePath(X8,P8,k8,x8,l8,a8,e8,g8,U8),k6=await $.findFolderByName(X8,P8,q6.parentObjectId,q6.name);if(k6)return k6.getObjectId();else{if(!g8)throw I.notFound(`Folder not found: "${q6.name}"`,"FOLDER_NOT_FOUND");return(await $.createFolder(X8,P8,{storeCode:l8,parentId:q6.parentObjectId,name:q6.name},e8)).getObjectId()}}else{if(U8)return U8;return(await $.readRootFolderForType(X8,P8,x8,l8)).getObjectId()}},O=async(X8,P8,k8,x8)=>{let{path:l8,store:n8,content:e8,allowedRoots:W6,validPrefixes:g8,entityType:U8,subtype:a8}=k8;R4.validatePathFormat(l8);let q6=R4.detectFullPathPrefix(l8,g8);b.factory(!q6.valid,I.validation,`Path must start with one of: ${g8.map((c)=>typeof c==="string"?c:c.toString()).join(", ")}`,"INVALID_PATH_PREFIX");let k6=bm(l8,g8);b.factory(!k6||k6.length===0,I.validation,"Path cannot end at tree prefix - provide a path after the prefix","EMPTY_PATH");let I6,J1=null;if(q6.prefix==="Documents/")I6="d";else if(q6.prefix==="Templates/")I6="t";else if(q6.prefix.startsWith("Stories/")){I6="s";let c=q6.prefix.slice(8,-1),C8=(await $.listStories(X8,P8,{storeCode:n8})).find((l)=>l.getName()===c);if(!C8)throw I.notFound(`Story not found: ${c}`,"STORY_NOT_FOUND");J1=C8.getObjectId()}let{parentPath:q4,name:Y4}=v1.parsePath(k6),y8=await H(X8,P8,q4,U8,n8,I6,x8,{startingFolderId:J1});if(I6==="s"){let c=await $.readFolder(X8,P8,{id:y8});if(b.factory(!c,I.notFound,"Parent folder not found","FOLDER_NOT_FOUND"),await R4.validateRootInAllowedTree(X8,P8,c,W6,$),await R4.isInsideTasksFolder(X8,P8,c,$))b.factory(a8!=="task",I.validation,"Only task documents can be created inside a tasks folder","INVALID_DOCUMENT_TYPE")}let u8=W(U8),Q=await $.findContentByName(X8,P8,y8,Y4,U8);return b.factory(Q,I.conflict,`${u8} "${Y4}" already exists in folder`,"DUPLICATE_NAME"),await $.createContent(X8,P8,{storeCode:n8,type:U8,parentId:y8,name:Y4,initialContent:e8,subtype:a8},x8)},X=async(X8,P8,k8,x8)=>{let{root:l8,path:n8,content:e8,allowedRoots:W6,entityType:g8,subtype:U8}=k8,a8=v1.extractStoreCode(l8);R4.validatePathFormat(n8);let q6=await $.readFolder(X8,P8,{id:l8});b.factory(!q6,I.notFound,`Root folder not found: ${l8}`,"FOLDER_NOT_FOUND"),await R4.validateRootInAllowedTree(X8,P8,q6,W6,$);let{parentPath:k6,name:I6}=v1.parsePath(n8),J1;if(k6){let u8=k6.split("/").filter((c)=>c.trim()),Q=q6;for(let c of u8){let d=await $.findFolderByName(X8,P8,Q.getObjectId(),c);if(d)Q=d;else Q=await $.createFolder(X8,P8,{storeCode:a8,parentId:Q.getObjectId(),name:c},x8)}J1=Q.getObjectId()}else J1=l8;let q4=await $.readFolder(X8,P8,{id:J1});if(q4&&await R4.isInsideTasksFolder(X8,P8,q4,$))b.factory(U8!=="task",I.validation,"Only task documents can be created inside a tasks folder","INVALID_DOCUMENT_TYPE");let Y4=W(g8),y8=await $.findContentByName(X8,P8,J1,I6,g8);return b.factory(y8,I.conflict,`${Y4} "${I6}" already exists in folder`,"DUPLICATE_NAME"),await $.createContent(X8,P8,{storeCode:a8,type:g8,parentId:J1,name:I6,initialContent:e8,subtype:U8},x8)},P=async(X8,P8,k8,x8)=>{let{parentId:l8,name:n8,content:e8,allowedRoots:W6,entityType:g8,subtype:U8}=k8,a8=v1.extractStoreCode(l8);R4.validateName(n8);let q6=await $.readFolder(X8,P8,{id:l8});if(b.factory(!q6,I.notFound,`Parent folder not found: ${l8}`,"FOLDER_NOT_FOUND"),await R4.validateRootInAllowedTree(X8,P8,q6,W6,$),await R4.isInsideTasksFolder(X8,P8,q6,$))b.factory(U8!=="task",I.validation,"Only task documents can be created inside a tasks folder","INVALID_DOCUMENT_TYPE");let k6=W(g8),I6=await $.findContentByName(X8,P8,l8,n8,g8);return b.factory(I6,I.conflict,`${k6} "${n8}" already exists in folder`,"DUPLICATE_NAME"),await $.createContent(X8,P8,{storeCode:a8,type:g8,parentId:l8,name:n8,initialContent:e8,subtype:U8},x8)},w=async(X8,P8,k8,x8)=>{let{mode:l8,path:n8,root:e8,parentId:W6,name:g8,store:U8,content:a8,type:q6,tree:k6,subtype:I6,fields:J1}=k8,q4=["d","s","tasks"],Y4=R4.DOCUMENT_PREFIXES;if(I6&&J){let u8=U8??(e8?v1.extractStoreCode(e8):null)??(W6?v1.extractStoreCode(W6):null);if(!u8)throw I.validation("Cannot validate required fields: unable to determine store code from creation parameters","MISSING_STORE_CODE");let Q=q6??"d";await J.validateRequiredFields(X8,P8,{store:u8,code:Q,subtype:I6,fields:J1})}let y8;if(l8==="fullPath")b.factory(!U8,I.validation,"store is required for fullPath mode","MISSING_STORE_CODE"),y8=await O(X8,P8,{path:n8,store:U8,content:a8,allowedRoots:q4,validPrefixes:Y4,entityType:"d",subtype:I6},x8);else if(l8==="rootRelative")b.factory(!e8,I.validation,"root is required for rootRelative mode","MISSING_ROOT"),y8=await X(X8,P8,{root:e8,path:n8,content:a8,allowedRoots:q4,entityType:"d",subtype:I6},x8);else if(l8==="parentName")b.factory(!W6,I.validation,"parentId is required for parentName mode","MISSING_PARENT_ID"),b.factory(!g8,I.validation,"name is required for parentName mode","MISSING_NAME"),y8=await P(X8,P8,{parentId:W6,name:g8,content:a8,allowedRoots:q4,entityType:"d",subtype:I6},x8);else if(q6!==void 0){b.factory(q6!=="d"&&q6!=="t",I.validation,'type must be "d" or "t"',"INVALID_TYPE"),b.factory(!n8||n8==="/",I.validation,"Path cannot be empty","EMPTY_PATH"),b.factory(!U8,I.validation,"store is required","MISSING_STORE_CODE");let{parentPath:u8,name:Q}=v1.parsePath(n8),c=W6??await H(X8,P8,u8,q6,U8,k6,x8),d=W(q6),C8=await $.findContentByName(X8,P8,c,Q,q6);b.factory(C8,I.conflict,`${d} "${Q}" already exists in folder`,"DUPLICATE_NAME"),y8=await $.createContent(X8,P8,{storeCode:U8,type:q6,parentId:c,name:Q,initialContent:a8,subtype:I6},x8)}else throw I.validation("Invalid creation parameters. Use one of: fullPath (path+store), rootRelative (root+path), or parentName (parentId+name)","INVALID_PARAMS");if(J1&&J&&Object.keys(J1).length>0)for(let[u8,Q]of Object.entries(J1))await J.setFieldValue(X8,P8,{entityId:y8.getObjectId(),fieldName:u8,...Array.isArray(Q)?{values:Q}:{value:Q}},x8);return y8},T=async(X8,P8,k8,x8)=>{let{mode:l8,path:n8,root:e8,parentId:W6,name:g8,store:U8,content:a8,subtype:q6}=k8,k6=["t"],I6=R4.TEMPLATE_PREFIXES;if(l8==="fullPath")return b.factory(!U8,I.validation,"store is required for fullPath mode","MISSING_STORE_CODE"),await O(X8,P8,{path:n8,store:U8,content:a8,allowedRoots:k6,validPrefixes:I6,entityType:"t",subtype:q6},x8);if(l8==="rootRelative")return b.factory(!e8,I.validation,"root is required for rootRelative mode","MISSING_ROOT"),await X(X8,P8,{root:e8,path:n8,content:a8,allowedRoots:k6,entityType:"t",subtype:q6},x8);if(l8==="parentName")return b.factory(!W6,I.validation,"parentId is required for parentName mode","MISSING_PARENT_ID"),b.factory(!g8,I.validation,"name is required for parentName mode","MISSING_NAME"),await P(X8,P8,{parentId:W6,name:g8,content:a8,allowedRoots:k6,entityType:"t",subtype:q6},x8);throw I.validation("Invalid creation parameters. Use one of: fullPath (path+store), rootRelative (root+path), or parentName (parentId+name)","INVALID_PARAMS")},G=async(X8,P8,{id:k8,resolveIncludes:x8=!0})=>{let{typeCode:l8}=Y1.resolveEntityId(k8),n8=W(l8),e8=await $.readContent(X8,P8,{id:k8});b.factory(!e8,I.notFound,`${n8} not found: ${k8}`,"NOT_FOUND");let W6=[],g8=e8.getParentId();while(g8){W6.unshift(g8);let a8=await $.readFolder(X8,P8,{id:g8});if(!a8)break;g8=a8.getParentId()}let U8=null;if(x8&&z&&e8.getPublishedContent())U8=await z.resolve(X8,P8,e8.getPublishedContent(),e8.getObjectId());return{entity:e8,ancestorFolderIds:W6,resolvedContent:U8}},j=async(X8,P8,{path:k8,type:x8,storeCode:l8})=>{b.factory(x8!=="d"&&x8!=="t",I.validation,'type must be "d" or "t"',"INVALID_TYPE");let{parentPath:n8,name:e8}=v1.parsePath(k8),W6=[],g8;if(n8){let a8=n8.split("/").filter((k6)=>k6),q6="";for(let k6 of a8){q6=q6?`${q6}/${k6}`:k6;let I6=await $.getFolderByPath(X8,P8,{path:q6,type:x8,storeCode:l8});if(!I6)return null;W6.push(I6.getObjectId())}g8=W6[W6.length-1]}else g8=(await $.readRootFolderForType(X8,P8,x8,l8)).getObjectId();let U8=await $.findContentByName(X8,P8,g8,e8,x8);if(!U8)return null;return{entity:U8,ancestorFolderIds:W6}},v=async(X8,P8,{id:k8,path:x8,parentId:l8,type:n8},e8)=>{b.factory(n8!=="d"&&n8!=="t",I.validation,'type must be "d" or "t"',"INVALID_TYPE");let W6=x8!==void 0&&x8!==null,g8=l8!==void 0&&l8!==null;if(b.factory(W6===g8,I.validation,"Either path OR parentId must be provided, not both or neither","INVALID_PARAMS"),W6)b.factory(x8==="/",I.validation,"Path cannot be empty","EMPTY_PATH");let{entity:U8}=await G(X8,P8,{id:k8}),a8=v1.extractStoreCode(k8),q6=W(n8),k6,I6;if(g8){let Y4=await $.readFolder(X8,P8,{id:l8});b.factory(!Y4,I.notFound,`Parent folder not found: ${l8}`,"PARENT_NOT_FOUND"),k6=U8.getName(),I6=l8}else{let Y4=n8==="t"?R4.TEMPLATE_PREFIXES:R4.DOCUMENT_PREFIXES,y8=bm(x8,Y4),{parentPath:u8,name:Q}=v1.parsePath(y8);k6=Q;let c=v1.parsePath(bm(U8.getPath(),Y4));if(u8===c.parentPath)I6=U8.getParentId();else I6=await H(X8,P8,u8,n8,a8,void 0,e8,{createMissing:!1})}let J1=k6!==U8.getName(),q4=I6!==U8.getParentId();if(!J1&&!q4)return U8;if(J1||q4){let Y4=await $.findContentByName(X8,P8,I6,k6,n8);b.factory(Y4&&Y4.getObjectId()!==k8,I.conflict,`${q6} "${k6}" already exists in target folder`,"DUPLICATE_NAME")}return await $.updateContent(X8,P8,{id:k8,name:J1?k6:void 0,parentId:q4?I6:void 0},e8)},M=async(X8,P8,{id:k8},x8)=>{let{entity:l8}=await G(X8,P8,{id:k8}),n8=await $.deleteContent(X8,P8,{id:k8},x8),{typeCode:e8}=Y1.resolveEntityId(k8);if(e8==="d"&&l8.getSubtype()==="task"&&J){let W6=l8.getParentId(),g8=await $.listContent(X8,P8,{parentId:W6,type:"d"});for(let U8 of g8){if(U8.getObjectId()===k8)continue;if(U8.getSubtype()!=="task")continue;let a8=await $.getFieldValue(X8,P8,{entityId:U8.getObjectId(),fieldName:"dependsOn"});if(!a8)continue;let q6=a8.getValues();if(!q6.includes(k8))continue;let k6=q6.filter((I6)=>I6!==k8);if(k6.length>0)await J.setFieldValue(X8,P8,{entityId:U8.getObjectId(),fieldName:"dependsOn",values:k6},x8,!0);else await J.deleteFieldValue(X8,P8,{entityId:U8.getObjectId(),fieldName:"dependsOn"},x8,!0)}}return n8},N=async(X8,P8,{id:k8,content:x8,sessionId:l8},n8)=>{let{entity:e8}=await G(X8,P8,{id:k8});b.factory(Z(e8),I.validation,"Documents inside jobs are read-only","JOB_DOCUMENT_READ_ONLY");let W6=await $.saveDraft(X8,P8,{id:k8,content:x8,sessionId:l8},n8);if(J){let g8=Buffer.byteLength(x8,"utf8");await J.setFieldValue(X8,P8,{entityId:k8,fieldName:"size",value:String(g8)},n8)}return W6},k=async(X8,P8,{id:k8})=>{let{typeCode:x8}=Y1.resolveEntityId(k8),{entity:l8}=await G(X8,P8,{id:k8}),n8=W(x8),e8=await $.readDraft(X8,P8,{id:k8});return b.factory(!e8,I.notFound,`No draft found for ${n8}: ${k8}`,"DRAFT_NOT_FOUND"),e8},R=async(X8,P8,{id:k8,sessionId:x8},l8)=>{let{entity:n8}=await G(X8,P8,{id:k8,resolveIncludes:!1}),{typeCode:e8}=Y1.resolveEntityId(k8),W6=q.getHook("prePublish",e8);if(W6)await W6(X8,P8,n8,x8,l8);let U8=(await $.readDraft(X8,P8,{id:k8}))?.content??"",a8=await $.publishContent(X8,P8,{id:k8,sessionId:x8},l8);if(J){let q6=Buffer.byteLength(U8,"utf8");await J.setFieldValue(X8,P8,{entityId:k8,fieldName:"size",value:String(q6)},l8)}return a8},C=async(X8,P8,{id:k8},x8)=>{let{entity:l8}=await G(X8,P8,{id:k8}),n8=l8.getPublishedContent()??"",e8=await $.discardDraft(X8,P8,{id:k8},x8);if(J){let W6=Buffer.byteLength(n8,"utf8");await J.setFieldValue(X8,P8,{entityId:k8,fieldName:"size",value:String(W6)},x8)}return e8},L=async(X8,P8,{id:k8,versionNumber:x8})=>{let{typeCode:l8}=Y1.resolveEntityId(k8),{entity:n8}=await G(X8,P8,{id:k8}),e8=W(l8),W6=await $.readVersion(X8,P8,{id:k8,versionNumber:x8});return b.factory(!W6,I.notFound,`Version ${x8} not found for ${e8}: ${k8}`,"VERSION_NOT_FOUND"),W6},h=async(X8,P8,{id:k8})=>{let{entity:x8}=await G(X8,P8,{id:k8});return await $.getVersions(X8,P8,{id:k8})},m=async(X8,P8,{id:k8,sessionId:x8},l8)=>{let{entity:n8}=await G(X8,P8,{id:k8});return await $.setEditState(X8,P8,{id:k8,sessionId:x8},l8)},S=async(X8,P8,{id:k8},x8)=>{let{entity:l8}=await G(X8,P8,{id:k8});return await $.clearEditState(X8,P8,{id:k8},x8)},f=async(X8,P8,{id:k8})=>{let{entity:x8}=await G(X8,P8,{id:k8});return await $.getEditState(X8,P8,{id:k8})},E=async(X8,P8,{parentId:k8,storeCode:x8,type:l8="d"})=>{return await $.listContent(X8,P8,{parentId:k8,storeCode:x8,type:l8})},g=async(X8,P8,{id:k8,operation:x8,preview:l8=!1,ignoreContent:n8=!1,sessionId:e8},W6)=>{let{entity:g8}=await G(X8,P8,{id:k8}),U8=g8.getDraftContent()??g8.getPublishedContent()??"";if(l8)return{preview:!0,...Xv8(U8,x8,n8)};let a8=WN(U8,x8);return await N(X8,P8,{id:k8,content:a8.newContent,sessionId:e8},W6),{applied:!0,details:a8.details}},U=async(X8,P8,{id:k8,operations:x8,preview:l8=!1,ignoreContent:n8=!1,sessionId:e8},W6)=>{let g8=["replace_first","replace_all","replace_regex","replace_regex_all","replace_between_markers","replace_all_content","append"];for(let J1 of x8)if(!g8.includes(J1.type))throw I.validation(`Operation type "${J1.type}" is not batchable. Only line-agnostic operations are allowed in batch mode.`,"NON_BATCHABLE_OPERATION");let{entity:U8}=await G(X8,P8,{id:k8}),a8=U8.getDraftContent()??U8.getPublishedContent()??"",q6=a8,k6=[];for(let J1 of x8){let q4=WN(q6,J1);q6=q4.newContent,k6.push(q4.details)}let I6={originalLength:a8.length,newLength:q6.length,operationsApplied:x8.length};if(l8){let J1={preview:!0,stats:I6,operationResults:k6};if(!n8)J1.diff=oO(a8,q6);return J1}return await N(X8,P8,{id:k8,content:q6,sessionId:e8},W6),{applied:x8.length,results:k6}},e=async(X8,P8,{id:k8,startLine:x8,endLine:l8,includeDraft:n8=!1})=>{let{entity:e8}=await G(X8,P8,{id:k8}),W6=n8?e8.getDraftContent()??e8.getPublishedContent()??"":e8.getPublishedContent()??"";return dO(W6,x8,l8)},j8=async(X8,P8,{id:k8,startMarker:x8,endMarker:l8,inclusive:n8=!1,includeDraft:e8=!1})=>{let{entity:W6}=await G(X8,P8,{id:k8}),g8=e8?W6.getDraftContent()??W6.getPublishedContent()??"":W6.getPublishedContent()??"";return sj8(g8,x8,l8,n8)},H8=async(X8,P8,{id:k8,includeDraft:x8=!1})=>{let{entity:l8}=await G(X8,P8,{id:k8}),n8=x8?l8.getDraftContent()??l8.getPublishedContent()??"":l8.getPublishedContent()??"";return tj8(n8)},p8=async(X8,P8,{id:k8,maxDepth:x8,includeDraft:l8=!1})=>{let{entity:n8}=await G(X8,P8,{id:k8}),e8=l8?n8.getDraftContent()??n8.getPublishedContent()??"":n8.getPublishedContent()??"";return Im(e8,x8)},H6=async(X8,P8,{id:k8,heading:x8,includeHeading:l8=!0,includeDraft:n8=!1})=>{let{entity:e8}=await G(X8,P8,{id:k8}),W6=n8?e8.getDraftContent()??e8.getPublishedContent()??"":e8.getPublishedContent()??"";return xm(W6,x8,l8)},R8=async(X8,P8,{id:k8,includeDraft:x8=!1})=>{let{entity:l8}=await G(X8,P8,{id:k8}),n8=x8?l8.getDraftContent()??l8.getPublishedContent()??"":l8.getPublishedContent()??"";return ej8(n8)},F8=async(X8,P8,{id:k8,section:x8,includeDraft:l8=!1})=>{let{entity:n8}=await G(X8,P8,{id:k8}),e8=l8?n8.getDraftContent()??n8.getPublishedContent()??"":n8.getPublishedContent()??"";return $v8(e8,x8)},B8=(X8,P8)=>{let k8=X8.split(`
|
|
550
|
-
`),l8=k8[P8-1].match(/^(?:[-*+] |\d+\. )\[([ xX])\] (.+)$/),n8=0,e8=/^(?:[-*+] |\d+\. )\[([ xX])\] .+$/;for(let W6=0;W6<P8;W6++)if(e8.test(k8[W6]))n8++;return{text:l8[2],checked:l8[1]!==" ",lineNumber:P8,itemNumber:n8}};return Object.freeze({createDocument:w,createTemplate:T,readDocument:G,readDocumentByPath:j,updateDocumentPath:v,deleteDocument:M,saveDraft:N,readDraft:k,publishDocument:R,discardDraft:C,readVersion:L,getVersions:h,setEditState:m,clearEditState:S,getEditState:f,listDocuments:E,editDocument:g,batchEditDocument:U,readLines:e,readBetweenMarkers:j8,getDocumentStats:H8,readHeadings:p8,readSection:H6,readFrontmatter:R8,readChecklist:F8,checkChecklistItem:async(X8,P8,{id:k8,lineNumber:x8,checked:l8,includeDraft:n8=!1,preview:e8=!1,sessionId:W6},g8)=>{let{entity:U8}=await G(X8,P8,{id:k8}),a8=n8?U8.getDraftContent()??U8.getPublishedContent()??"":U8.getPublishedContent()??"",q6=ym(a8,{lineNumber:x8,checked:l8});if(e8)return{preview:!0,diff:oO(a8,q6.newContent),item:B8(q6.newContent,x8)};return await N(X8,P8,{id:k8,content:q6.newContent,sessionId:W6},g8),{applied:!0,item:B8(q6.newContent,x8)}},toggleChecklistItem:async(X8,P8,{id:k8,lineNumber:x8,includeDraft:l8=!1,preview:n8=!1,sessionId:e8},W6)=>{let{entity:g8}=await G(X8,P8,{id:k8}),U8=l8?g8.getDraftContent()??g8.getPublishedContent()??"":g8.getPublishedContent()??"",a8=Hv8(U8,{lineNumber:x8});if(n8)return{preview:!0,diff:oO(U8,a8.newContent),item:B8(a8.newContent,x8)};return await N(X8,P8,{id:k8,content:a8.newContent,sessionId:e8},W6),{applied:!0,item:B8(a8.newContent,x8)}},batchCheckChecklistItems:async(X8,P8,{id:k8,items:x8,includeDraft:l8=!1,preview:n8=!1,sessionId:e8},W6)=>{let{entity:g8}=await G(X8,P8,{id:k8}),U8=l8?g8.getDraftContent()??g8.getPublishedContent()??"":g8.getPublishedContent()??"",a8=Ov8(U8,{items:x8}),q6=x8.map((k6)=>B8(a8.newContent,k6.lineNumber));if(n8)return{preview:!0,diff:oO(U8,a8.newContent),items:q6,count:a8.details.count};return await N(X8,P8,{id:k8,content:a8.newContent,sessionId:e8},W6),{applied:!0,items:q6,count:a8.details.count}},specialiseDocument:async(X8,P8,{id:k8,subtype:x8,fields:l8},n8)=>{let{entity:e8}=await G(X8,P8,{id:k8});b.factory(e8.getSubtype()!==null,I.validation,`Entity is already specialised to subtype: ${e8.getSubtype()}`,"ALREADY_SPECIALISED");let{storeCode:W6,typeCode:g8}=Y1.resolveEntityId(k8),U8=(await Promise.resolve().then(() => (EO(),LP8))).default;try{await U8.readEntityTypeId(X8,P8,g8,x8)}catch(k6){throw I.validation(`Invalid subtype: ${x8}`,"INVALID_SUBTYPE")}await J.validateRequiredFields(X8,P8,{store:W6,code:g8,subtype:x8,fields:l8});let a8=await $.updateEntityType(X8,P8,{id:k8,subtype:x8},n8);if(l8&&Object.keys(l8).length>0)for(let[k6,I6]of Object.entries(l8))await J.setFieldValue(X8,P8,{entityId:k8,fieldName:k6,...Array.isArray(I6)?{values:I6}:{value:I6}},n8);let{entity:q6}=await G(X8,P8,{id:k8});return{entity:q6}},generaliseDocument:async(X8,P8,{id:k8},x8)=>{let{entity:l8}=await G(X8,P8,{id:k8}),n8=l8.getSubtype();b.factory(n8===null,I.validation,"Entity is already generic (has no subtype)","ALREADY_GENERIC");let e8=await $.readFolder(X8,P8,{id:l8.getParentId()});if(e8&&await R4.isInsideTasksFolder(X8,P8,e8,$))throw I.validation("Cannot generalise entity inside a tasks folder","INVALID_LOCATION");let{typeCode:W6}=Y1.resolveEntityId(k8),g8=await $.getFieldDefinitionsForEntityType(X8,P8,{storeCode:"B",code:W6,subtype:n8}),U8=l8.getFields();for(let q6 of g8){if(q6.inherited)continue;let k6=q6.entity.getName();if(U8&&U8[k6])await J.deleteFieldValue(X8,P8,{entityId:k8,fieldName:k6},x8)}await $.updateEntityType(X8,P8,{id:k8,subtype:null},x8);let{entity:a8}=await G(X8,P8,{id:k8});return{entity:a8}},setIncludeResolver:(X8)=>{z=X8}})},um=Object.freeze({create:SE6});var IE6=()=>{let $=null,K=null,q={prePublish:{d:async(z,W,Z,H,O)=>{if(!$)return;let X=Z.getDraftContent();if(!X)return;let{content:P,pinned:w}=await $.pinIncludes(z,W,X,Z.getObjectId());if(w.length>0)await K.saveDraft(z,W,{id:Z.getObjectId(),content:P,sessionId:H},O)},t:null},postPublish:{},preDelete:{},postCreate:{}};return Object.freeze({getHook:(z,W)=>{return q[z]?.[W]||null},setIncludeResolver:(z,W)=>{$=z,K=W}})},mm=Object.freeze({create:IE6});y1();var Pv8=n6(k4(),1),rJ=Pv8.default("caw:includes"),xE6=({store:$,documentService:K})=>{let q=/<include\s+(?:id="([^"]+)"|path="([^"]+)")(?:\s+version="(\d+)")?\s*\/>/g,Y=(X)=>{let P=X;return P=P.replace(/```[\s\S]*?```/g,(w)=>" ".repeat(w.length)),P=P.replace(/~~~[\s\S]*?~~~/g,(w)=>" ".repeat(w.length)),P=P.replace(/``[^`]+``/g,(w)=>" ".repeat(w.length)),P=P.replace(/`[^`]+`/g,(w)=>" ".repeat(w.length)),P},J=(X)=>{let P=Y(X),w=[],T,G=new RegExp(q.source,"g");while((T=G.exec(P))!==null){let j=X.substring(T.index,T.index+T[0].length),v=new RegExp(q.source).exec(j);if(v)w.push({fullMatch:j,id:v[1],path:v[2],versionStr:v[3],index:T.index})}return w},z=5,W=async(X,P,w,T,G=new Set,j=0)=>{if(rJ("Resolving includes in document, depth=%d, chain=%s, sourceDocId=%s",j,[...G].join(","),T),j>5)throw I.validation("Include depth limit exceeded (max 5 levels)","INCLUDE_DEPTH_EXCEEDED");if(T)G=new Set(G).add(T);let v=J(w);if(rJ("Found %d include directives",v.length),v.length===0)return w;let M=w;for(let N of v){let{fullMatch:k,id:R,path:C,versionStr:L}=N,h=L?parseInt(L,10):null;rJ("Resolving include: id=%s, path=%s, version=%s",R,C,L);try{let m;if(R)m=R;else{let E=T?T.charAt(0):"A",g=await K.readDocumentByPath(X,P,{path:C,type:"d",storeCode:E});if(!g)throw I.notFound(`Included document not found: ${C}`,"INCLUDE_NOT_FOUND");m=g.entity.getObjectId()}if(G.has(m)){let E=[...G,m].join(" -> ");throw I.validation(`Circular include detected: ${E}`,"INCLUDE_CYCLE")}if(h===null)throw I.validation(`Unpinned include found: ${k}. Includes must specify a version.`,"INCLUDE_UNPINNED");let S=await $.readVersion(X,P,{id:m,versionNumber:h});if(!S)throw I.notFound(`Version ${h} not found for included document: ${m}`,"INCLUDE_VERSION_NOT_FOUND");let f=await W(X,P,S.content,m,G,j+1);M=M.replace(k,f)}catch(m){let S=R||C,f=`> **Include Error** - couldn't include ${S}${h?` version ${h}`:""}: ${m.message}`;rJ("Include resolution failed for %s: %s",S,m.message),M=M.replace(k,f)}}return M};return Object.freeze({resolve:W,pinIncludes:async(X,P,w,T)=>{rJ("Auto-pinning unpinned includes in document: %s",T);let G=J(w),j=[],v=w;for(let M of G){let{fullMatch:N,id:k,path:R,versionStr:C}=M;if(C)continue;rJ("Pinning unpinned include: id=%s, path=%s",k,R);let L,h;if(k){L=k;let{entity:S}=await K.readDocument(X,P,{id:k,resolveIncludes:!1});h=S.getPublishedVersionNumber()}else{let S=T?T.charAt(0):"A",f=await K.readDocumentByPath(X,P,{path:R,type:"d",storeCode:S});if(!f)throw I.notFound(`Included document not found: ${R}`,"INCLUDE_NOT_FOUND");L=f.entity.getObjectId(),h=f.entity.getPublishedVersionNumber()}if(!h)throw I.validation(`Cannot pin include - document has no published version: ${L}`,"INCLUDE_NO_VERSION");let m=k?`<include id="${k}" version="${h}" />`:`<include path="${R}" version="${h}" />`;rJ("Pinned include %s to version %d",L,h),v=v.replace(N,m),j.push({id:L,path:R,version:h})}return rJ("Auto-pinned %d unpinned includes",j.length),{content:v,pinned:j}},checkIncludes:async(X,P,w,T)=>{let G=J(w),j=[];for(let v of G){let{id:M,path:N,versionStr:k}=v,R=k?parseInt(k,10):null,C,L;if(M){C=M;let{entity:h}=await K.readDocument(X,P,{id:M,resolveIncludes:!1});L=h.getPublishedVersionNumber()}else{let h=T?T.charAt(0):"A",m=await K.readDocumentByPath(X,P,{path:N,type:"d",storeCode:h});C=m?.entity?.getObjectId(),L=m?.entity?.getPublishedVersionNumber()}j.push({id:C,path:N||null,pinnedVersion:R,latestVersion:L,outdated:R!==null&&L!==null&&R<L})}return j},updateIncludes:async(X,P,w,T)=>{let G=J(w),j=[],v=w;for(let M of G){let{fullMatch:N,id:k,path:R,versionStr:C}=M,L=C?parseInt(C,10):null,h,m;if(k){h=k;let{entity:S}=await K.readDocument(X,P,{id:k,resolveIncludes:!1});m=S.getPublishedVersionNumber()}else{let S=T?T.charAt(0):"A",f=await K.readDocumentByPath(X,P,{path:R,type:"d",storeCode:S});h=f?.entity?.getObjectId(),m=f?.entity?.getPublishedVersionNumber()}if(m&&L!==m){let S=k?`<include id="${k}" version="${m}" />`:`<include path="${R}" version="${m}" />`;v=v.replace(N,S),j.push({id:h,path:R||null,fromVersion:L,toVersion:m})}}return{content:v,updated:j}}})},Bm=Object.freeze({create:xE6});y1();var VA8=n6(Lm(),1),AA8=n6(hB(),1),MA8=($)=>{if(!$)return{parameters:{},target:null,targetPath:null,targetParentId:null,targetName:null,targetRoot:null,targetStore:null,targetJobName:null,targetJobAgent:null,targetJobModel:null,targetJobWorktree:null,targetJobSkipDialog:!1,targetJobStreaming:!1,skipDialog:!1,body:""};let K=VA8.default($),q=K.data?.parameters||{},Y=K.data?.target||null,J=K.data?.targetPath||null,z=K.data?.targetParentId||null,W=K.data?.targetName||null,Z=K.data?.targetRoot||null,H=K.data?.targetStore||null,O=K.data?.targetJobName||null,X=K.data?.targetJobAgent||null,P=K.data?.targetJobModel||null,w=K.data?.targetJobWorktree||null,T=K.data?.targetJobSkipDialog??!1,G=K.data?.targetJobStreaming??!1,j=K.data?.skipDialog??!1,v=K.content;return{parameters:q,target:Y,targetPath:J,targetParentId:z,targetName:W,targetRoot:Z,targetStore:H,targetJobName:O,targetJobAgent:X,targetJobModel:P,targetJobWorktree:w,targetJobSkipDialog:T,targetJobStreaming:G,skipDialog:j,body:v}},Vy6=($)=>{if(!$)return new Set;let K=new Set,q=new Set(["if","unless","each","with","lookup","log"]);try{let Y=AA8.default.parse($),J=(z,W=null,Z=null)=>{if(!z)return;if(z.type==="PathExpression"){if(z.data)return;let H=z.parts.join(".");if(!H||H.startsWith("@"))return;if(W?.type==="BlockStatement"&&Z==="path"||W?.type==="MustacheStatement"&&Z==="path"&&W.params?.length>0){if(q.has(H))return;return}K.add(H)}if(z.program)J(z.program,z,"program");if(z.inverse)J(z.inverse,z,"inverse");if(z.body)z.body.forEach((H)=>J(H,z,"body"));if(z.params)z.params.forEach((H)=>J(H,z,"params"));if(z.hash?.pairs)z.hash.pairs.forEach((H)=>J(H.value,z,"hash"));if(z.path)J(z.path,z,"path")};J(Y)}catch(Y){throw Error(`Invalid Handlebars template: ${Y.message}`)}return K},Ay6=($)=>{if(!$)return{parameters:{},target:null,targetPath:null,targetParentId:null,targetName:null,targetRoot:null,targetStore:null,targetJobName:null,targetJobAgent:null,targetJobModel:null,targetJobWorktree:null,targetJobSkipDialog:!1,targetJobStreaming:!1,skipDialog:!1};let{parameters:K,target:q,targetPath:Y,targetParentId:J,targetName:z,targetRoot:W,targetStore:Z,targetJobName:H,targetJobAgent:O,targetJobModel:X,targetJobWorktree:P,targetJobSkipDialog:w,targetJobStreaming:T,skipDialog:G}=MA8($);return{parameters:K,target:q,targetPath:Y,targetParentId:J,targetName:z,targetRoot:W,targetStore:Z,targetJobName:H,targetJobAgent:O,targetJobModel:X,targetJobWorktree:P,targetJobSkipDialog:w,targetJobStreaming:T,skipDialog:G}},rK=Object.freeze({parseFrontMatter:MA8,extractVariables:Vy6,getParameters:Ay6});var EB=n6(hB(),1),My6=($={})=>{return Object.freeze({renderTemplate:(Y,J={})=>{if(!Y)throw I.validation("Template content cannot be empty","EMPTY_TEMPLATE");let{body:z}=rK.parseFrontMatter(Y),W;try{W=EB.default.compile(z,{noEscape:!0})(J)}catch(Z){throw I.validation(`Failed to render template: ${Z.message}`,"RENDER_ERROR")}return W},extractTemplateParameters:(Y)=>{if(!Y)return{parameters:{},detectedVariables:[],target:null,targetPath:null,targetParentId:null,targetName:null,targetRoot:null,targetStore:null,targetJobName:null,targetJobAgent:null,targetJobModel:null,targetJobWorktree:null,targetJobSkipDialog:!1,targetJobStreaming:!1};let{parameters:J,target:z,targetPath:W,targetParentId:Z,targetName:H,targetRoot:O,targetStore:X,targetJobName:P,targetJobAgent:w,targetJobModel:T,targetJobWorktree:G,targetJobSkipDialog:j,targetJobStreaming:v,body:M}=rK.parseFrontMatter(Y),N=rK.extractVariables(M),k=Array.from(N);return{parameters:J,detectedVariables:k,target:z,targetPath:W,targetParentId:Z,targetName:H,targetRoot:O,targetStore:X,targetJobName:P,targetJobAgent:w,targetJobModel:T,targetJobWorktree:G,targetJobSkipDialog:j,targetJobStreaming:v}}})},LB=Object.freeze({create:My6});import b0 from"node:fs";import _A8 from"node:os";import MN from"node:path";var _y6=({projectStore:$,storeStore:K})=>{return Object.freeze({createProject:async(z,W,{name:Z,path:H},O)=>{if(await $.readProjectByPath(z,W,H)){let m=Error("Project with this path already exists");throw m.code="DUPLICATE_PATH",m}let P=await $.createProject(z,W,{name:Z,path:H},O),w=await K.createLocalStore(z,W,{code:"A",name:"Project"},O);await w.createFolder(z,W,{parentId:null,name:"Documents",subtype:"root_d"},O),await w.createFolder(z,W,{parentId:null,name:"Templates",subtype:"root_t"},O),await w.createFolder(z,W,{parentId:null,name:"Stories",subtype:"root_s"},O),await w.createFolder(z,W,{parentId:null,name:"Jobs",subtype:"root_j"},O),await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,name:"state",label:"State",description:"Workflow state",primitiveType:"string",required:!1,multiplicity:"single",isSystem:!0},O);let T=await w.resolveEntityTypePk(z,W,{code:"f",subtype:"root_s"}),G=await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:T,name:"states",label:"States",description:"Ordered list of valid story states",primitiveType:"string",required:!0,multiplicity:"multi",isSystem:!0},O),v=(await w.readStoryRootFolder(z,W,{storeCode:"A"})).getObjectId();await w.setFieldValue(z,W,{entityId:v,fieldDefinitionId:G.getObjectId(),values:[...IM]},O);let M=await w.resolveEntityTypePk(z,W,{code:"d",subtype:"task"});await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:M,name:"dependsOn",label:"Depends On",description:"Tasks that block this task",primitiveType:"object_ref",required:!1,multiplicity:"multi",isSystem:!0},O);let N=await w.resolveEntityTypePk(z,W,{code:"d",subtype:"cartridge"});await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:N,name:"synopsis",label:"Synopsis",description:"Brief description of the cartridge",primitiveType:"string",required:!1,multiplicity:"single",isSystem:!0},O),await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:N,name:"relatedActivities",label:"Related Activities",description:"Associated activity types",primitiveType:"string",required:!1,multiplicity:"multi",isSystem:!0},O);let k=await w.resolveEntityTypePk(z,W,{code:"f",subtype:"tasks"});await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:k,name:"states",label:"States",description:"Ordered list of valid task states",primitiveType:"string",required:!0,multiplicity:"multi",isSystem:!0},O);let R=await w.resolveEntityTypePk(z,W,{code:"t",subtype:"prompt"});await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:R,name:"associatedType",label:"Associated Type",description:"Entity types this template is associated with",primitiveType:"string",required:!1,multiplicity:"multi",isSystem:!0},O);let C=await w.resolveEntityTypePk(z,W,{code:"s",subtype:null});await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:C,name:"flag",label:"Flag",description:"Visual indicator for story attention",primitiveType:"string",required:!1,multiplicity:"single",isSystem:!0},O),await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:C,name:"activeJobCount",label:"Active Job Count",description:"Number of active jobs associated with this story",primitiveType:"int",required:!1,multiplicity:"single",isSystem:!0},O),await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:C,name:"statusMessage",label:"Status Message",description:"Agent status message displayed in stories list",primitiveType:"string",required:!1,multiplicity:"single",isSystem:!0},O),await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:C,name:"dateCompleted",label:"Date Completed",description:"Timestamp when story transitioned to done state",primitiveType:"date",required:!1,multiplicity:"single",isSystem:!0},O);let L=await K.readSharedStore(z,W),h=await K.createDemuxStore(z,W,{name:Z},O);return await K.addChildToDemux(z,W,{demuxId:h.getObjectId(),childId:w.getObjectId()},O),await K.addChildToDemux(z,W,{demuxId:h.getObjectId(),childId:L.getObjectId()},O),await K.addStoresToProject(z,W,{projectId:P.getObjectId(),rootStoreId:h.getObjectId(),storeIds:[h.getObjectId(),w.getObjectId(),L.getObjectId()]}),P},validateProjectPath:(z)=>{if(!z||typeof z!=="string"){let w=Error("Path is required and must be a non-empty string");throw w.code="VALIDATION_ERROR",w}let W;if(z==="~")W=_A8.homedir();else if(z.startsWith("~/"))W=MN.join(_A8.homedir(),z.slice(2));else W=z;let Z=b0.existsSync(W),H=!1,O=!1,X=!1;if(Z)try{if(H=b0.statSync(W).isDirectory(),H){let T=MN.join(W,".git");try{O=b0.statSync(T).isDirectory()}catch{O=!1}let G=MN.join(W,".claude");try{X=b0.statSync(G).isDirectory()}catch{X=!1}}}catch(w){H=!1}let P=MN.basename(W);return{path:W,exists:Z,isDirectory:H,hasGit:O,hasClaude:X,suggestedName:P}},listProjects:async(z)=>{let W=await z.selectFrom("entities").innerJoin("string_fields","string_fields.entity_id","entities.id").innerJoin("field_definitions","field_definitions.id","string_fields.field_definition_id").select(["entities.id","entities.object_id","entities.name","entities.created_at","entities.updated_at","string_fields.value as path"]).where("entities.type_code","=","p").where("entities.deleted_at","is",null).where("field_definitions.name","=","path").where("field_definitions.store_id","is",null).where("field_definitions.is_system","=",1).where("entities.name","!=","__system__").orderBy("entities.created_at","desc").execute();return await Promise.all(W.map(async(H)=>{let X=(await z.selectFrom("project_stores").innerJoin("entities","entities.id","project_stores.store_id").innerJoin("entity_types","entity_types.id","entities.entity_type_id").leftJoin("string_fields","string_fields.entity_id","entities.id").leftJoin("field_definitions","field_definitions.id","string_fields.field_definition_id").select(["entities.object_id","entities.name","entity_types.subtype","string_fields.value as code"]).where("project_stores.project_id","=",H.id).where("entities.type_code","=","r").where("entity_types.subtype","=","local").where((P)=>P.or([P("field_definitions.name","=","code"),P("field_definitions.name","is",null)])).where("entities.deleted_at","is",null).execute()).map((P)=>({id:P.code==="B"?"store:B":`store:${P.code}:${H.object_id}`,code:P.code,name:P.name}));return{objectId:H.object_id,name:H.name,path:H.path,createdAt:H.created_at,updatedAt:H.updated_at,children:X}}))}})},_N=Object.freeze({create:_y6});var ky6=()=>{let $=[];return{enqueuePostCommitHook:(K)=>{$.push(K)},flush:()=>{for(let K of $)try{K()}catch(q){console.error("Post-commit hook failed:",q)}}}},Ny6=({db:$,folderService:K,fieldService:q,documentService:Y,templateService:J,projectService:z,clipboardService:W,storyService:Z,assetService:H,jobService:O,includeResolver:X,worktreeService:P,entityTypeService:w})=>{let T=async(y8)=>{let u8=ky6(),Q;return await $.transaction().execute(async(c)=>{Q=await y8(c,u8.enqueuePostCommitHook)}),u8.flush(),Q};return Object.freeze({createFolder:async(y8,{mode:u8,store:Q,path:c,root:d,parentId:C8,name:l,type:O8})=>{return T(async(s,v8)=>{return await K.createFolder(s,y8,{mode:u8,store:Q,path:c,root:d,parentId:C8,name:l,type:O8},v8)})},renameFolder:async(y8,{id:u8,name:Q})=>{return T(async(c,d)=>{return await K.renameFolder(c,y8,{id:u8,name:Q},d)})},moveFolder:async(y8,{id:u8,parentId:Q})=>{return T(async(c,d)=>{return await K.moveFolder(c,y8,{id:u8,parentId:Q},d)})},deleteFolder:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await K.deleteFolder(Q,y8,{id:u8},c)})},createProject:async(y8,{name:u8,path:Q})=>{return T(async(c,d)=>{return await z.createProject(c,y8,{name:u8,path:Q},d)})},createFieldDefinition:async(y8,{store:u8,ownerEntityId:Q,ownerEntityTypeCode:c,ownerEntityTypeSubtype:d,name:C8,label:l,description:O8,primitiveType:s,required:v8,multiplicity:W8,isSystem:D8})=>{return T(async(E8,d8)=>{return await q.createFieldDefinition(E8,y8,{store:u8,ownerEntityId:Q,ownerEntityTypeCode:c,ownerEntityTypeSubtype:d,name:C8,label:l,description:O8,primitiveType:s,required:v8,multiplicity:W8,isSystem:D8},d8)})},addFieldToEntity:async(y8,{entityId:u8,fieldDefinitionId:Q,fieldName:c,value:d,values:C8})=>{return T(async(l,O8)=>{return await q.addFieldToEntity(l,y8,{entityId:u8,fieldDefinitionId:Q,fieldName:c,value:d,values:C8},O8)})},updateFieldValue:async(y8,{entityId:u8,fieldDefinitionId:Q,fieldName:c,value:d,values:C8})=>{return T(async(l,O8)=>{return await q.updateFieldValue(l,y8,{entityId:u8,fieldDefinitionId:Q,fieldName:c,value:d,values:C8},O8)})},removeFieldFromEntity:async(y8,{entityId:u8,fieldDefinitionId:Q,fieldName:c})=>{return T(async(d,C8)=>{return await q.removeFieldFromEntity(d,y8,{entityId:u8,fieldDefinitionId:Q,fieldName:c},C8)})},deleteFieldDefinition:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await q.deleteFieldDefinition(Q,y8,{id:u8},c)})},createSubtype:async(y8,{code:u8,subtype:Q,name:c,parentSubtype:d})=>{return T(async(C8,l)=>{return await w.createSubtype(C8,y8,{code:u8,subtype:Q,name:c,parentSubtype:d},l)})},createDocument:async(y8,{mode:u8,store:Q,path:c,root:d,parentId:C8,name:l,type:O8,content:s,tree:v8,subtype:W8,fields:D8})=>{return T(async(E8,d8)=>{return await Y.createDocument(E8,y8,{mode:u8,store:Q,path:c,root:d,parentId:C8,name:l,type:O8,content:s,tree:v8,subtype:W8,fields:D8},d8)})},createTemplate:async(y8,{mode:u8,store:Q,path:c,root:d,parentId:C8,name:l,content:O8,subtype:s})=>{return T(async(v8,W8)=>{return await Y.createTemplate(v8,y8,{mode:u8,store:Q,path:c,root:d,parentId:C8,name:l,content:O8,subtype:s},W8)})},updateDocumentPath:async(y8,{id:u8,path:Q,parentId:c,type:d})=>{return T(async(C8,l)=>{return await Y.updateDocumentPath(C8,y8,{id:u8,path:Q,parentId:c,type:d},l)})},deleteDocument:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Y.deleteDocument(Q,y8,{id:u8},c)})},saveDraft:async(y8,{id:u8,content:Q,sessionId:c})=>{return T(async(d,C8)=>{return await Y.saveDraft(d,y8,{id:u8,content:Q,sessionId:c},C8)})},publishDocument:async(y8,{id:u8,sessionId:Q})=>{return T(async(c,d)=>{return await Y.publishDocument(c,y8,{id:u8,sessionId:Q},d)})},discardDraft:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Y.discardDraft(Q,y8,{id:u8},c)})},setEditState:async(y8,{id:u8,sessionId:Q})=>{return T(async(c,d)=>{return await Y.setEditState(c,y8,{id:u8,sessionId:Q},d)})},clearEditState:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Y.clearEditState(Q,y8,{id:u8},c)})},editDocument:async(y8,{id:u8,operation:Q,preview:c,ignoreContent:d,sessionId:C8})=>{return T(async(l,O8)=>{return await Y.editDocument(l,y8,{id:u8,operation:Q,preview:c,ignoreContent:d,sessionId:C8},O8)})},batchEditDocument:async(y8,{id:u8,operations:Q,preview:c,ignoreContent:d,sessionId:C8})=>{return T(async(l,O8)=>{return await Y.batchEditDocument(l,y8,{id:u8,operations:Q,preview:c,ignoreContent:d,sessionId:C8},O8)})},checkChecklistItem:async(y8,{id:u8,lineNumber:Q,checked:c,includeDraft:d,preview:C8,sessionId:l})=>{return T(async(O8,s)=>{return await Y.checkChecklistItem(O8,y8,{id:u8,lineNumber:Q,checked:c,includeDraft:d,preview:C8,sessionId:l},s)})},toggleChecklistItem:async(y8,{id:u8,lineNumber:Q,includeDraft:c,preview:d,sessionId:C8})=>{return T(async(l,O8)=>{return await Y.toggleChecklistItem(l,y8,{id:u8,lineNumber:Q,includeDraft:c,preview:d,sessionId:C8},O8)})},batchCheckChecklistItems:async(y8,{id:u8,items:Q,includeDraft:c,preview:d,sessionId:C8})=>{return T(async(l,O8)=>{return await Y.batchCheckChecklistItems(l,y8,{id:u8,items:Q,includeDraft:c,preview:d,sessionId:C8},O8)})},specialiseDocument:async(y8,{id:u8,subtype:Q,fields:c})=>{return T(async(d,C8)=>{return await Y.specialiseDocument(d,y8,{id:u8,subtype:Q,fields:c},C8)})},generaliseDocument:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Y.generaliseDocument(Q,y8,{id:u8},c)})},renderTemplate:async(y8,{id:u8,params:Q,target:c,targetOptions:d,sessionId:C8})=>{let{entity:l}=await Y.readDocument($,y8,{id:u8,resolveIncludes:!1});if(!l.getPublishedContent())throw(await Promise.resolve().then(() => (y1(),hO))).default.validation("Template has no published content","NO_PUBLISHED_CONTENT");let O8=l.getPublishedContent(),{target:s,targetPath:v8,targetParentId:W8,targetName:D8,targetRoot:E8,targetStore:d8,targetJobName:m6,targetJobAgent:n4,targetJobModel:k7,targetJobWorktree:p7,targetJobStreaming:W7}=J.extractTemplateParameters(O8),X3=c||s||"stdout",H4=d?.parentId||d?.root||d?.path?{path:d?.path,parentId:d?.parentId,name:d?.name,root:d?.root,store:d?.store,publish:d?.publish}:{path:d?.path||v8,parentId:d?.parentId||W8,name:d?.name||D8,root:d?.root||E8,store:d?.store||d8,publish:d?.publish},Z9=O8;if(X)Z9=await X.resolve($,y8,O8,u8);let _8=J.renderTemplate(Z9,Q||{});if(H4.path)H4.path=J.renderTemplate(H4.path,Q||{});if(H4.name)H4.name=J.renderTemplate(H4.name,Q||{});switch(X3){case"stdout":return{content:_8,target:"stdout"};case"clipboard":return await W.copyToClipboard(_8),{target:"clipboard",message:"Copied to clipboard"};case"document":return T(async(S8,I8)=>{let b8=(await Promise.resolve().then(() => (y1(),hO))).default,G6;if(H4.parentId){if(!H4.name)throw b8.validation("targetOptions.name is required when parentId is provided","MISSING_TARGET_NAME");G6={mode:"parentName",parentId:H4.parentId,name:H4.name,content:_8}}else if(H4.root){if(!H4.path)throw b8.validation("targetOptions.path is required when root is provided","MISSING_TARGET_PATH");G6={mode:"rootRelative",root:H4.root,path:H4.path,content:_8}}else{if(!H4.path)throw b8.validation("targetOptions.path is required for document target","MISSING_TARGET_PATH");G6={mode:"fullPath",store:H4.store||"A",path:H4.path,content:_8}}let x=await Y.createDocument(S8,y8,G6,I8);if(H4.publish)await Y.publishDocument(S8,y8,{id:x.getObjectId(),sessionId:C8},I8);return{content:_8,target:"document",documentId:x.getObjectId(),documentPath:H4.path||H4.name,published:!!H4.publish}});case"job":return T(async(S8,I8)=>{let b8=(await Promise.resolve().then(() => (y1(),hO))).default;if(!_8||!_8.trim())throw b8.validation("Template rendered to empty prompt","MISSING_PROMPT");let G6=d?.jobName||m6,x=d?.jobAgent||n4||"claude",T8=d?.jobModel||k7,u=d?.jobWorktree||p7,t=d?.jobStreaming??W7,p=d?.objectId||Q?.["object-id"],r=null;if(G6)r=J.renderTemplate(G6,Q||{});let o=null;if(u&&P){let{worktrees:G8}=await P.listWorktrees({projectPath:y8.projectPath}),V8=G8.find((N8)=>N8.branch===u);if(!V8)throw b8.validation(`Worktree with branch '${u}' not found`,"WORKTREE_NOT_FOUND");o=V8.path}let $8=v1.extractStoreCode(u8),Z8=await O.createJob(S8,y8,{store:$8,name:r,agent:x,model:T8,prompt:_8,workingDirectory:o,objectId:p,streaming:t},I8);return{target:"job",jobId:Z8.id,jobName:Z8.name}});case"file":throw(await Promise.resolve().then(() => (y1(),hO))).default.validation("file target not yet implemented","NOT_IMPLEMENTED");default:throw(await Promise.resolve().then(() => (y1(),hO))).default.validation(`Unknown target: ${X3}`,"INVALID_TARGET")}},createStory:async(y8,{name:u8,storeCode:Q,state:c})=>{return T(async(d,C8)=>{return await Z.createStory(d,y8,{store:Q,name:u8,state:c},C8)})},renameStory:async(y8,{id:u8,name:Q})=>{return T(async(c,d)=>{return await Z.renameStory(c,y8,{id:u8,name:Q},d)})},updateStoryState:async(y8,{id:u8,state:Q})=>{return T(async(c,d)=>{return await Z.updateStoryState(c,y8,{id:u8,state:Q},d)})},deleteStory:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Z.deleteStory(Q,y8,{id:u8},c)})},incrementStoryJobCount:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Z.incrementActiveJobCount(Q,y8,{id:u8},c)})},decrementStoryJobCount:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Z.decrementActiveJobCount(Q,y8,{id:u8},c)})},createAsset:async(y8,{store:u8,buffer:Q,mimeType:c,originalFilename:d,widthPx:C8,heightPx:l,displayWidth:O8,displayHeight:s})=>{return T(async(v8,W8)=>{return await H.createAsset(v8,y8,{store:u8,buffer:Q,mimeType:c,originalFilename:d,widthPx:C8,heightPx:l,displayWidth:O8,displayHeight:s},W8)})},deleteAsset:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await H.deleteAsset(Q,y8,{id:u8},c)})},createJob:async(y8,{store:u8,name:Q,agent:c,model:d,prompt:C8,workingDirectory:l,objectId:O8,streaming:s})=>{return T(async(v8,W8)=>{return await O.createJob(v8,y8,{store:u8,name:Q,agent:c,model:d,prompt:C8,workingDirectory:l,objectId:O8,streaming:s},W8)})},deleteJob:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await O.deleteJob(Q,y8,{id:u8},c)})},updateJobStatus:async(y8,{id:u8,status:Q,exitCode:c,errorMessage:d})=>{return T(async(C8,l)=>{return await O.updateJobStatus(C8,y8,{id:u8,status:Q,exitCode:c,errorMessage:d},l)})},updateJobOutput:async(y8,{id:u8,output:Q})=>{return T(async(c,d)=>{return await O.updateJobOutput(c,y8,{id:u8,output:Q},d)})},updateJobTokens:async(y8,{id:u8,tokensUsed:Q})=>{return T(async(c,d)=>{return await O.updateJobTokens(c,y8,{id:u8,tokensUsed:Q},d)})},updateJobMetadata:async(y8,{id:u8,durationMs:Q,totalCostUsd:c,numTurns:d,sessionId:C8})=>{return T(async(l,O8)=>{return await O.updateJobMetadata(l,y8,{id:u8,durationMs:Q,totalCostUsd:c,numTurns:d,sessionId:C8},O8)})},continueJob:async(y8,{id:u8,prompt:Q,model:c})=>{return T(async(d,C8)=>{return await O.continueJob(d,y8,{id:u8,prompt:Q,model:c},C8)})},stopJob:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await O.stopJob(Q,y8,{id:u8},c)})},setJobPid:async(y8,{id:u8,pid:Q})=>{return T(async(c,d)=>{return await O.setJobPid(c,y8,{id:u8,pid:Q},d)})},clearJobPid:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await O.clearJobPid(Q,y8,{id:u8},c)})},renameJob:async(y8,{id:u8,name:Q})=>{return T(async(c,d)=>{return await O.renameJob(c,y8,{id:u8,name:Q},d)})}})},SB=Object.freeze({create:Ny6});y1();var LB8=n6(DB8(),1),SB8=n6(k4(),1);import Q$ from"fs/promises";import I$ from"path";import{createWriteStream as F21}from"fs";import p21 from"crypto";var x3=SB8.default("caw:export"),hB8=".caw-exports",EB8=".tmp",Q21=2,c21=({store:$,folderService:K,documentService:q,templateService:Y,storyService:J,assetService:z,assetsDir:W})=>{let Z=()=>{let C=new Date,L=C.getFullYear(),h=String(C.getMonth()+1).padStart(2,"0"),m=String(C.getDate()).padStart(2,"0"),S=String(C.getHours()).padStart(2,"0"),f=String(C.getMinutes()).padStart(2,"0"),E=String(C.getSeconds()).padStart(2,"0");return`${L}-${h}-${m}-${S}${f}${E}`},H=async(C,L)=>{let h=L||(C?I$.join(C,hB8):null);if(!h)throw I.validation("Either exportPath or projectPath must be provided","EXPORT_PATH_REQUIRED");let m=I$.join(h,EB8);try{return await Q$.mkdir(h,{recursive:!0}),await Q$.mkdir(m,{recursive:!0}),h}catch(S){if(S.code==="EACCES")throw I.validation("Permission denied creating export directory","EXPORT_ERROR");if(S.code==="ENOSPC")throw I.validation("Insufficient disk space","EXPORT_ERROR");throw x3("Error creating export directory: [%s] %s",S.code||"UNKNOWN",S.message),I.validation(`Failed to create export directory: ${S.message} (${S.code||"UNKNOWN"})`,"EXPORT_ERROR")}},O=async(C,L,h,m)=>{let S=[],f=async(E,g)=>{let U=await K.listFolderContents(C,L,{folderId:E,type:h,storeCode:m});for(let e of U)if(e.getParentId()!==null)S.push({entity:e,depth:g,contentType:h}),await f(e.getObjectId(),g+1)};return await f(null,0),S},X=async(C,L,h)=>{let m=[],S=[],f=async(E)=>{let g=await q.listDocuments(C,L,{parentId:E,storeCode:h});for(let e of g){let j8=e.getPublishedVersionNumber();if(j8!==null){let H8=await q.readVersion(C,L,{id:e.getObjectId(),versionNumber:j8});m.push({entity:e,version:H8})}else S.push(e)}let U=await K.listFolderContents(C,L,{folderId:E,type:"d",storeCode:h});for(let e of U)await f(e.getObjectId())};return await f(null),{published:m,draftOnly:S}},P=async(C,L,h)=>{let m=[],S=[],f=async(E)=>{let g=await q.listDocuments(C,L,{parentId:E,storeCode:h,type:"t"});for(let e of g){let j8=e.getPublishedVersionNumber();if(j8!==null){let H8=await q.readVersion(C,L,{id:e.getObjectId(),versionNumber:j8});m.push({entity:e,version:H8})}else S.push(e)}let U=await K.listFolderContents(C,L,{folderId:E,type:"t",storeCode:h});for(let e of U)await f(e.getObjectId())};return await f(null),{published:m,draftOnly:S}},w=async(C,L,h)=>{let m=await z.listAssets(C,L,{store:h}),S=[];for(let f of m){let E=f.hash,g=E.substring(0,2),U=I$.join(W,g,E);try{let e=await Q$.readFile(U);S.push({entity:f,buffer:e})}catch(e){if(e.code==="ENOENT"){x3("Warning: Skipping asset %s - blob file missing",f.id);continue}throw e}}return x3("Collected %d assets for export",S.length),S},T=new Set(["draft_version","latest_published_version"]),G=(C)=>{let L=typeof C.getFields==="function"?C.getFields():C.fields;if(!L||typeof L!=="object"||Object.keys(L).length===0)return;let h={};for(let[m,S]of Object.entries(L)){if(T.has(m))continue;let f;if(typeof S?.getValues==="function")f=S.getValues();else if(Array.isArray(S))f=S;else f=[S];h[m]=f.length===1?f[0]:f}return Object.keys(h).length>0?h:void 0},j=async(C,L,h)=>{let m=[],S=[],f={published:[],draftOnly:[]};if(!J)return x3("StoryService not available, skipping story export"),{stories:m,folders:S,documents:f};let E=await J.listStories(C,L,{store:h});x3("Found %d stories for export",E.length);for(let g of E)m.push(g),await v(C,L,g,h,S,f);return{stories:m,folders:S,documents:f}},v=async(C,L,h,m,S,f)=>{let E=h.id||h.getObjectId?.()||h,g=await $.listFolderContents(C,L,{folderId:E,type:"s",storeCode:m});for(let e of g){if(e.getParentId()!==null)S.push({entity:e,contentType:"s"});await v(C,L,e.getObjectId(),m,S,f)}let U=await q.listDocuments(C,L,{parentId:E,storeCode:m});for(let e of U){let j8=e.getPublishedVersionNumber();if(j8!==null){let H8=await q.readVersion(C,L,{id:e.getObjectId(),versionNumber:j8});f.published.push({entity:e,version:H8})}else f.draftOnly.push(e)}},M=async(C)=>{try{await Q$.rm(C,{recursive:!0,force:!0})}catch(L){x3("Warning: Failed to cleanup temp directory: %s",L.message)}};return Object.freeze({listExports:async(C,L,{projectPath:h,exportPath:m})=>{let S=m||(h?I$.join(h,hB8):null);if(!S)throw I.validation("Either exportPath or projectPath must be provided","EXPORT_PATH_REQUIRED");try{let f=await Q$.readdir(S),E=[];for(let g of f)if(g.endsWith(".zip")){let U=I$.join(S,g),e=await Q$.stat(U);E.push({filename:g,timestamp:e.mtime.toISOString(),size:e.size})}return x3("Found %d export files",E.length),E}catch(f){if(f.code==="ENOENT")return[];throw f}},exportPreview:async(C,L,{storeCode:h})=>{let m=await O(C,L,"d",h),S=await O(C,L,"t",h),{published:f,draftOnly:E}=await X(C,L,h),{published:g,draftOnly:U}=await P(C,L,h),j8={assets:(z?await z.listAssets(C,L,{store:h}):[]).map((R8)=>({id:R8.id,originalFilename:R8.originalFilename,mimeType:R8.mimeType,sizeBytes:R8.sizeBytes})),folders:[...m,...S].map((R8)=>({id:R8.entity.getObjectId(),path:R8.entity.getPath(),name:R8.entity.getName()})),documents:f.map((R8)=>({id:R8.entity.getObjectId(),path:R8.entity.getPath(),name:R8.entity.getName()})),templates:g.map((R8)=>({id:R8.entity.getObjectId(),path:R8.entity.getPath(),name:R8.entity.getName()}))},H8={documents:E.map((R8)=>({id:R8.getObjectId(),path:R8.getPath(),name:R8.getName()})),templates:U.map((R8)=>({id:R8.getObjectId(),path:R8.getPath(),name:R8.getName()}))},p8=j8.assets.length+j8.folders.length+j8.documents.length+j8.templates.length,H6=H8.documents.length+H8.templates.length;return x3("Preview: %d published (%d assets), %d draft-only",p8,j8.assets.length,H6),{toExport:j8,draftOnly:H8}},exportDocuments:async(C,L,{storeCode:h,projectPath:m,exportPath:S})=>{x3("Starting export for store %s",h);let f=await H(m,S),E=p21.randomUUID(),g=I$.join(f,EB8,E);await Q$.mkdir(g,{recursive:!0});try{let U=await O(C,L,"d",h),e=await O(C,L,"t",h),j8=[...U,...e],{published:H8,draftOnly:p8}=await X(C,L,h),{published:H6,draftOnly:R8}=await P(C,L,h),F8=z?await w(C,L,h):[],{stories:B8,folders:s8,documents:T6}=await j(C,L,h),N6=[...j8,...s8],X6=[...H8,...T6.published],R6=[...p8,...T6.draftOnly];x3("Found %d folders, %d documents, %d templates, %d assets, %d stories",N6.length,X6.length,H6.length,F8.length,B8.length);let b6={},X8=await $.readStoryRootFolder(C,L,{storeCode:h});if(X8){let g8=X8.toJSON(),U8=G(g8);if(U8&&Object.keys(U8).length>0)b6[X8.getObjectId()]={subtype:"root_s",fields:U8}}let P8=[...F8.map((g8)=>({id:g8.entity.id,type:"asset",hash:g8.entity.hash,mimeType:g8.entity.mimeType,sizeBytes:g8.entity.sizeBytes,originalFilename:g8.entity.originalFilename,widthPx:g8.entity.widthPx,heightPx:g8.entity.heightPx,displayWidth:g8.entity.displayWidth,displayHeight:g8.entity.displayHeight})),...B8.map((g8)=>{let U8={id:g8.id,type:"story",name:g8.name},a8=G(g8);if(a8)U8.fields=a8;return U8}),...N6.map((g8)=>{let U8={id:g8.entity.getObjectId(),type:"folder",path:g8.entity.getPath(),contentType:g8.contentType},a8=g8.entity.getSubtype?.();if(a8)U8.subtype=a8;let q6=G(g8.entity);if(q6)U8.fields=q6;return U8}),...X6.map((g8)=>{let U8={id:g8.entity.getObjectId(),type:"document",path:g8.entity.getPath()},a8=g8.entity.getSubtype?.();if(a8)U8.subtype=a8;else{let k6=g8.entity.getPath(),I6=k6.split("/");if(I6.length>=4&&I6[2]==="tasks")x3('WARN: Document %s in tasks folder missing subtype, inferring "task"',k6),U8.subtype="task"}let q6=G(g8.entity);if(q6)U8.fields=q6;return U8}),...H6.map((g8)=>{let U8={id:g8.entity.getObjectId(),type:"template",path:g8.entity.getPath()},a8=g8.entity.getSubtype?.();if(a8)U8.subtype=a8;let q6=G(g8.entity);if(q6)U8.fields=q6;return U8})],k8={version:Q21,exportedAt:new Date().toISOString(),entities:P8};if(Object.keys(b6).length>0)k8.rootFolderFields=b6;await Q$.writeFile(I$.join(g,"manifest.json"),JSON.stringify(k8,null,2),"utf-8");for(let g8 of N6){if(g8.entity.getParentId()===null)continue;let U8=I$.join(g,g8.entity.getPath());await Q$.mkdir(U8,{recursive:!0})}await Q$.mkdir(I$.join(g,"Documents"),{recursive:!0}),await Q$.mkdir(I$.join(g,"Templates"),{recursive:!0}),await Q$.mkdir(I$.join(g,"Stories"),{recursive:!0});for(let g8 of X6){let U8=I$.join(g,g8.entity.getPath()),a8=g8.version.content;await Q$.mkdir(I$.dirname(U8),{recursive:!0}),await Q$.writeFile(U8,a8,"utf-8")}for(let g8 of H6){let U8=I$.join(g,g8.entity.getPath()),a8=g8.version.content;await Q$.mkdir(I$.dirname(U8),{recursive:!0}),await Q$.writeFile(U8,a8,"utf-8")}if(F8.length>0){let g8=I$.join(g,"assets");await Q$.mkdir(g8,{recursive:!0});for(let U8 of F8){let a8=U8.entity.id,q6=I$.join(g8,`${a8}.bin`);await Q$.writeFile(q6,U8.buffer);let k6=I$.join(g8,`${a8}.json`);await Q$.writeFile(k6,JSON.stringify({id:a8,hash:U8.entity.hash,mimeType:U8.entity.mimeType,sizeBytes:U8.entity.sizeBytes,originalFilename:U8.entity.originalFilename,widthPx:U8.entity.widthPx,heightPx:U8.entity.heightPx,displayWidth:U8.entity.displayWidth,displayHeight:U8.entity.displayHeight},null,2),"utf-8")}}for(let g8 of P8){if(g8.type==="folder"||g8.type==="story")continue;let U8;if(g8.type==="asset")U8=I$.join(g,"assets",`${g8.id}.bin`);else if(g8.type==="document"||g8.type==="template")U8=I$.join(g,g8.path);else{x3("Unknown entity type in validation: %s",g8.type);continue}try{await Q$.access(U8)}catch(a8){throw I.validation(`Manifest entry missing file: ${g8.id||g8.path}`,"EXPORT_VALIDATION_FAILED")}}let x8=`caw-export-${Z()}.zip`,l8=I$.join(f,x8),n8=F21(l8),e8=LB8.default("zip",{zlib:{level:9}});e8.on("error",async(g8)=>{throw await M(g),x3("Zip creation error: %s",g8.message),I.validation(`Export failed: ${g8.message}`,"EXPORT_ERROR")}),e8.pipe(n8),e8.directory(g,!1),await e8.finalize(),await new Promise((g8,U8)=>{n8.on("close",g8),n8.on("error",U8),setTimeout(()=>{U8(Error("Zip creation timeout"))},60000)}),x3("Created zip: %s (%d bytes)",x8,e8.pointer()),await M(g);let W6=P8.length;return x3("Export complete: %s (%d entities)",x8,W6),{success:!0,filename:x8,path:l8,counts:{assets:F8.length,stories:B8.length,folders:N6.length,documents:X6.length,templates:H6.length},draftOnlySkipped:{documents:R6.length,templates:R8.length}}}catch(U){throw await M(g),U}}})},wi=Object.freeze({create:c21});y1();var PU8=n6(OU8(),1),wU8=n6(k4(),1);import Nq from"fs/promises";import O5 from"path";import vz1 from"crypto";var V1=wU8.default("caw:import"),Vi=($)=>{if(!$||typeof $!=="string")throw Error(`Invalid export path: ${$}`);let K={Documents:"d",Templates:"t",Stories:"s"},q=$.indexOf("/");if(q===-1){let z=K[$];if(z)return{path:"",type:z};throw Error(`Invalid export path: ${$}`)}let Y=$.slice(0,q),J=K[Y];if(!J)throw Error(`Unknown root folder: ${Y}`);return{path:$.slice(q+1),type:J}},Vz1=".caw-exports",XU8=".tmp",Az1=[1,2],Mz1=/\b([A-Z][adtfns]\d+)\b/g,_z1=({store:$,folderService:K,documentService:q,templateService:Y,storyService:J,fieldService:z,assetService:W,assetsDir:Z})=>{let H=(v,M)=>{if(!v)return v;return v.replace(Mz1,(N,k)=>{return M[k]??N})},O=(v)=>{if(!Array.isArray(v))return!1;if(v.length!==kz.length)return!0;return!v.every((M,N)=>M===kz[N])},X=async(v,M,N,k,R,C)=>{if(!k||typeof k!=="object"||!z)return;for(let[L,h]of Object.entries(k)){if(L==="activeJobCount")continue;let m=L==="dependsOn",S=h;if(m)if(Array.isArray(h))S=h.map((f)=>R[f]||f);else S=R[h]||h;if(Array.isArray(S))await z.setFieldValue(v,M,{entityId:N,fieldName:L,values:S},C);else await z.setFieldValue(v,M,{entityId:N,fieldName:L,value:S},C)}},P=async(v)=>{try{await Nq.rm(v,{recursive:!0,force:!0})}catch(M){V1("Warning: Failed to cleanup temp directory: %s",M.message)}},w=async(v,M,{storeCode:N})=>{let k=await K.listFolderContents(v,M,{folderId:null,type:"d",storeCode:N}),R=await K.listFolderContents(v,M,{folderId:null,type:"t",storeCode:N}),C=await q.listDocuments(v,M,{parentId:null,storeCode:N,type:"d"}),L=await q.listDocuments(v,M,{parentId:null,storeCode:N,type:"t"}),h=k.length===0&&R.length===0&&C.length===0&&L.length===0;return V1("Store %s empty check: %s",N,h),h},T=async(v,M,{tempPath:N,storeCode:k,idMapping:R,enqueuePostCommitHook:C})=>{let L=O5.join(N,"assets"),h;try{h=await Nq.readdir(L)}catch(f){if(f.code==="ENOENT")return V1("No assets directory in export"),0;throw f}let m=h.filter((f)=>f.endsWith(".json"));if(V1("Found %d assets to import",m.length),!W||!Z){if(m.length>0)throw I.validation("Export contains assets but asset service is not configured","ASSET_SERVICE_MISSING");return 0}let S=0;for(let f of m){let E=O5.join(L,f),g=await Nq.readFile(E,"utf-8"),U=JSON.parse(g),e=f.replace(".json",".bin"),j8=O5.join(L,e),H8=await Nq.readFile(j8),p8=await W.createAsset(v,M,{store:k,buffer:H8,mimeType:U.mimeType,originalFilename:U.originalFilename,widthPx:U.widthPx,heightPx:U.heightPx,displayWidth:U.displayWidth,displayHeight:U.displayHeight},C);R[U.id]=p8.id,S++}return V1("Imported %d assets",S),S},G=async(v,M,{manifest:N,tempPath:k,storeCode:R})=>{return V1("Starting transaction..."),await v.transaction().execute(async(C)=>{let L={},h=(F8)=>{},m=await T(C,M,{tempPath:k,storeCode:R,idMapping:L,enqueuePostCommitHook:h});if(V1("Phase 0 complete - imported %d assets",m),N.rootFolderFields&&z){V1("Phase 0.25: Restoring root folder fields");for(let[F8,B8]of Object.entries(N.rootFolderFields)){let s8;if(B8.subtype==="root_s")s8=await $.readStoryRootFolder(C,M,{storeCode:R});if(s8&&B8.fields){for(let[T6,N6]of Object.entries(B8.fields))if(Array.isArray(N6))await z.setFieldValue(C,M,{entityId:s8.getObjectId(),fieldName:T6,values:N6},h);else await z.setFieldValue(C,M,{entityId:s8.getObjectId(),fieldName:T6,value:N6},h);V1("Restored fields for root folder %s (%s)",s8.getObjectId(),B8.subtype)}}V1("Phase 0.25 complete - restored root folder fields")}let S=N.entities.filter((F8)=>F8.type==="story"),f=0,E={};if(S.length>0&&J){V1("Phase 0.5: Creating %d stories",S.length);let F8=N.entities.filter((B8)=>B8.type==="folder"&&B8.subtype==="tasks");for(let B8 of F8){let s8=B8.path.split("/");if(s8.length>=3&&s8[0]==="Stories"){let T6=s8[1];E[T6]=B8.id}}for(let B8 of S){let s8=B8.fields?.state||"waiting",T6=await J.createStory(C,M,{store:R,name:B8.name,state:s8},h);if(L[B8.id]=T6.id,B8.fields&&N.version>=2)await X(C,M,T6.id,B8.fields,L,h);let N6=E[B8.name];if(N6&&T6.tasksFolder){L[N6]=T6.tasksFolder.id;let X6=N.entities.find((R6)=>R6.id===N6);if(X6?.fields?.states){let R6=X6.fields.states;if(O(Array.isArray(R6)?R6:[R6]))await z.setFieldValue(C,M,{entityId:T6.tasksFolder.id,fieldName:"states",values:Array.isArray(R6)?R6:[R6]},h)}}f++}V1("Phase 0.5 complete - created %d stories",f)}let g=N.entities.filter((F8)=>F8.type==="folder"&&F8.subtype!=="tasks");V1("Phase 1: Creating %d folders (excluding tasks folders)",g.length);let U=0;for(let F8 of g){let{path:B8,type:s8}=Vi(F8.path);if(!B8)continue;if(L[F8.id])continue;let T6;if(s8==="s"){let N6=B8.split("/"),X6=N6[N6.length-1],R6=N6.slice(0,-1).join("/"),b6;if(N6.length===1){V1("Unexpected folder directly under Stories root: %s",B8);continue}else if(N6.length===2){let X8=N6[0],P8=N.entities.find((k8)=>k8.type==="story"&&k8.name===X8);if(P8&&L[P8.id])b6=L[P8.id]}else{let X8=N.entities.find((P8)=>P8.type==="folder"&&P8.path===`Stories/${R6}`);if(X8&&L[X8.id])b6=L[X8.id]}if(!b6){V1("Could not resolve parent for story folder: %s",F8.path);continue}T6=await K.createFolder(C,M,{mode:"parentName",parentId:b6,name:X6},h)}else T6=await K.createFolder(C,M,{store:R,path:B8,type:s8},h);if(L[F8.id]=T6.getObjectId(),F8.fields&&N.version>=2)await X(C,M,T6.getObjectId(),F8.fields,L,h);U++}V1("Phase 1 complete - created %d folders (skipped root folders)",U);let e=N.entities.filter((F8)=>F8.type==="document"),j8=[];V1("Phase 2: Reading %d documents",e.length);for(let F8 of e){let B8=O5.join(k,F8.path),s8=await Nq.readFile(B8,"utf-8");j8.push({oldId:F8.id,path:F8.path,content:s8,subtype:F8.subtype,fields:F8.fields})}V1("Phase 2 complete - read %d documents",j8.length),V1("Phase 3: Creating %d document entities",j8.length);let H8=[];for(let F8 of j8){let{path:B8,type:s8}=Vi(F8.path),T6;if(s8==="s"){let X6=B8.split("/"),R6=X6[0],b6=X6.slice(0,-1).join("/"),X8=X6[X6.length-1],P8=N.entities.find((x8)=>x8.type==="folder"&&x8.path===`Stories/${b6}`),k8;if(P8&&L[P8.id])k8=L[P8.id];else{let x8=N.entities.find((l8)=>l8.type==="story"&&l8.name===R6);if(x8&&L[x8.id])k8=L[x8.id]}if(!k8)throw I.validation(`Cannot resolve parent folder for story document: ${F8.path}`,"IMPORT_RESOLUTION_FAILED");T6={mode:"parentName",parentId:k8,name:X8}}else T6={store:R,path:B8,type:s8};if(F8.subtype)T6.subtype=F8.subtype;else if(s8==="s"){let X6=B8.split("/");if(X6.length>=3&&X6[1]==="tasks")V1('WARN: Document %s in tasks folder missing subtype, inferring "task"',F8.path),T6.subtype="task"}let N6=await q.createDocument(C,M,T6,h);L[F8.oldId]=N6.getObjectId(),H8.push({document:N6,originalContent:F8.content,fields:F8.fields})}V1("Phase 3 complete - created %d document entities",H8.length);let p8=N.entities.filter((F8)=>F8.type==="template"),H6=[];V1("Phase 4: Reading %d templates",p8.length);for(let F8 of p8){let B8=O5.join(k,F8.path),s8=await Nq.readFile(B8,"utf-8");H6.push({oldId:F8.id,path:F8.path,content:s8,subtype:F8.subtype,fields:F8.fields})}V1("Phase 4 complete - read %d templates",H6.length),V1("Phase 5: Creating %d template entities",H6.length);let R8=[];for(let F8 of H6){let{path:B8,type:s8}=Vi(F8.path),T6={store:R,path:B8,type:s8};if(F8.subtype)T6.subtype=F8.subtype;let N6=await q.createDocument(C,M,T6,h);L[F8.oldId]=N6.getObjectId(),R8.push({template:N6,originalContent:F8.content,fields:F8.fields})}V1("Phase 5 complete - created %d template entities",R8.length),V1("Phase 6: Remapping and saving content for %d documents",H8.length);for(let{document:F8,originalContent:B8,fields:s8}of H8){let T6=H(B8,L);if(await q.saveDraft(C,M,{id:F8.getObjectId(),content:T6,sessionId:"import-service"},h),await q.publishDocument(C,M,{id:F8.getObjectId()},h),s8&&N.version>=2)await X(C,M,F8.getObjectId(),s8,L,h)}V1("Phase 6 complete - saved and published %d documents",H8.length),V1("Phase 7: Remapping and saving content for %d templates",R8.length);for(let{template:F8,originalContent:B8,fields:s8}of R8){let T6=H(B8,L);if(await q.saveDraft(C,M,{id:F8.getObjectId(),content:T6,sessionId:"import-service"},h),await q.publishDocument(C,M,{id:F8.getObjectId()},h),s8&&N.version>=2)await X(C,M,F8.getObjectId(),s8,L,h)}return V1("Phase 7 complete - saved and published %d templates",R8.length),V1("Transaction committed successfully"),{success:!0,counts:{assets:m,stories:f,folders:U,documents:H8.length,templates:R8.length},remapped:L}})};return Object.freeze({isStoreEmpty:w,importDocuments:async(v,M,{filename:N,storeCode:k,projectPath:R,exportPath:C})=>{let L=C||(R?O5.join(R,Vz1):null);if(!L)throw I.validation("Either exportPath or projectPath must be provided","EXPORT_PATH_REQUIRED");V1("Starting import from %s to store %s",N,k);let h=O5.join(L,N);try{await Nq.access(h),V1("Zip file found: %s",h)}catch(g){throw I.notFound(`Export file not found: ${N}`,"EXPORT_NOT_FOUND")}V1("Validating zip and manifest...");let m=await w(v,M,{storeCode:k});if(!m)throw I.conflict("Store not empty - import requires empty store","STORE_NOT_EMPTY");V1("Store empty check: %s",m);let S=vz1.randomUUID(),f=O5.join(L,XU8,S),E=O5.join(L,XU8);await Nq.mkdir(E,{recursive:!0});try{new PU8.default(h).extractAllTo(f,!0),V1("Extracted zip to: %s",f)}catch(g){throw I.validation("Corrupted or invalid zip file","IMPORT_VALIDATION_FAILED")}try{let g=O5.join(f,"manifest.json"),U;try{let H8=await Nq.readFile(g,"utf-8");U=JSON.parse(H8)}catch(H8){throw I.validation(`Failed to read manifest: ${H8.message}`,"MANIFEST_READ_FAILED")}if(!Az1.includes(U.version))throw I.validation(`Unsupported manifest version: ${U.version}`,"UNSUPPORTED_VERSION");if(!U.entities||!Array.isArray(U.entities))throw I.validation("Invalid manifest structure","MANIFEST_READ_FAILED");V1("Manifest valid: version=%d, entities=%d",U.version,U.entities.length);for(let H8 of U.entities){if(H8.type==="folder"||H8.type==="story")continue;let p8;if(H8.type==="asset")p8=O5.join(f,"assets",`${H8.id}.bin`);else if(H8.type==="document"||H8.type==="template")p8=O5.join(f,H8.path);else{V1("Unknown entity type in import validation: %s",H8.type);continue}try{await Nq.access(p8)}catch(H6){throw I.validation(`Missing file for manifest entry: ${H8.path||H8.id}`,"IMPORT_VALIDATION_FAILED")}}V1("All content files validated");let e=await G(v,M,{manifest:U,tempPath:f,storeCode:k}),j8=e.counts.folders+e.counts.documents+e.counts.templates;return V1("Import complete: %d entities imported",j8),e}finally{await P(f)}}})},Ai=Object.freeze({create:_z1});var kz1=($)=>{let{name:K,interval:q,execute:Y}=$,J=null,z=!1,W=null,Z=null,H=0,O=null,M=Object.freeze({getName:()=>K,getInterval:()=>q,getIsRunning:()=>z,getLastRun:()=>W,getLastError:()=>Z,getRunCount:()=>H,getNextRun:()=>O}),N=async()=>{try{await Y(),W=new Date().toISOString(),Z=null,H++}catch(h){console.error(`[CronJob] ${K} failed:`,h),Z={message:h.message,timestamp:new Date().toISOString()}}if(z)O=new Date(Date.now()+q).toISOString()},k=()=>{if(J!==null)return;J=setInterval(N,q),z=!0,O=new Date(Date.now()+q).toISOString()},R=()=>{if(J===null)return;clearInterval(J),J=null,z=!1,O=null},L=Object.freeze({start:k,stop:R,restart:()=>{R(),k()}});return{jobFns:M,controlFns:L}},lC=Object.freeze({create:kz1});var TU8=n6(k4(),1),Nz1=TU8.default("caw:cron:cleanup-edit-states"),GU8=async($)=>{let K=new Date(Date.now()-iJ).toISOString();try{let q=await $.selectFrom("field_definitions as fd").innerJoin("class_field_defs as cfd","cfd.field_definition_id","fd.id").innerJoin("entity_types as et","et.id","cfd.class_type_id").select(["fd.id","fd.name","fd.primitive_type"]).where("fd.name","in",["edit_session_id","edit_started_at","edit_last_activity_at"]).where("et.code","in",["d","t"]).where("et.subtype","is",null).execute(),Y=q.filter((O)=>O.name==="edit_last_activity_at").map((O)=>O.id),J=q.filter((O)=>O.name==="edit_session_id").map((O)=>O.id),z=q.filter((O)=>O.name==="edit_started_at").map((O)=>O.id);if(Y.length===0)return{expired:0};let W=await $.selectFrom("date_fields").select(["entity_id"]).where("field_definition_id","in",Y).where("value","<",K).execute();if(W.length===0)return{expired:0};let Z=W.map((O)=>O.entity_id);if(J.length>0)await $.deleteFrom("string_fields").where("entity_id","in",Z).where("field_definition_id","in",J).execute();let H=[...z,...Y];if(H.length>0)await $.deleteFrom("date_fields").where("entity_id","in",Z).where("field_definition_id","in",H).execute();if(W.length>0)Nz1("Cleaned up %d expired edit locks (older than %d minutes)",W.length,iJ/60000);return{expired:W.length}}catch(q){throw console.error("[Cleanup] Failed to cleanup expired edit locks:",q),q}};var fz1=({db:$})=>{let{jobFns:K,controlFns:q}=lC.create({name:"cleanup-stale-edit-states",interval:900000,execute:async()=>{await GU8($)}});return{job:Object.freeze(K),control:q}},jU8=Object.freeze({create:fz1});var Rz1=({db:$})=>{let K=new Map,q=(O,X)=>{let{job:P,control:w}=O.create(X);K.set(P.getName(),{job:P,control:w})},Y=(O)=>{let X=K.get(O);if(!X)throw Error(`Job not found: ${O}`);let P=X.job.getIsRunning();return X.control.start(),{name:O,status:P?"already-running":"started",isRunning:X.job.getIsRunning()}},J=(O)=>{let X=K.get(O);if(!X)throw Error(`Job not found: ${O}`);let P=X.job.getIsRunning();return X.control.stop(),{name:O,status:P?"stopped":"already-stopped",isRunning:X.job.getIsRunning()}},z=(O)=>{let X=K.get(O);if(!X)throw Error(`Job not found: ${O}`);return X.control.restart(),{name:O,status:"restarted",isRunning:X.job.getIsRunning()}},W=()=>{let O=[];for(let[X,{job:P}]of K.entries())O.push({name:P.getName(),interval:P.getInterval(),isRunning:P.getIsRunning(),lastRun:P.getLastRun(),lastError:P.getLastError(),runCount:P.getRunCount(),nextRun:P.getNextRun()});return O},Z=()=>{for(let[O,{control:X}]of K.entries())X.start()},H=()=>{for(let[O,{control:X}]of K.entries())X.stop()};return q(jU8,{db:$}),Object.freeze({register:q,start:Y,stop:J,restart:z,list:W,startAll:Z,stopAll:H})},vU8=Object.freeze({create:Rz1});import sl8 from"node:process";import MU8 from"node:process";import Lz1 from"node:os";import Sz1 from"node:fs";import hz1 from"node:fs";import VU8 from"node:fs";var Mi;function Cz1(){try{return VU8.statSync("/.dockerenv"),!0}catch{return!1}}function Dz1(){try{return VU8.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}function _i(){if(Mi===void 0)Mi=Cz1()||Dz1();return Mi}var ki,Ez1=()=>{try{return hz1.statSync("/run/.containerenv"),!0}catch{return!1}};function iC(){if(ki===void 0)ki=Ez1()||_i();return ki}var AU8=()=>{if(MU8.platform!=="linux")return!1;if(Lz1.release().toLowerCase().includes("microsoft")){if(iC())return!1;return!0}try{return Sz1.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!iC():!1}catch{return!1}},_U8=MU8.env.__IS_WSL_TEST__?AU8:AU8();import Ni from"node:process";function fi(){if(Ni.platform!=="linux")return!1;if(Ni.env.WAYLAND_DISPLAY)return!0;if(Ni.env.XDG_SESSION_TYPE==="wayland")return!0;return!1}function x$($){if(typeof $!=="object"||$===null)return!1;let K=Object.getPrototypeOf($);return(K===null||K===Object.prototype||Object.getPrototypeOf(K)===null)&&!(Symbol.toStringTag in $)&&!(Symbol.iterator in $)}import{fileURLToPath as Iz1}from"node:url";var hP=($,K)=>{let q=Ci(xz1($));if(typeof q!=="string")throw TypeError(`${K} must be a string or a file URL: ${q}.`);return q},xz1=($)=>Ri($)?$.toString():$,Ri=($)=>typeof $!=="string"&&$&&Object.getPrototypeOf($)===String.prototype,Ci=($)=>$ instanceof URL?Iz1($):$;var dC=($,K=[],q={})=>{let Y=hP($,"First argument"),[J,z]=x$(K)?[[],K]:[K,q];if(!Array.isArray(J))throw TypeError(`Second argument must be either an array of arguments or an options object: ${J}`);if(J.some((H)=>typeof H==="object"&&H!==null))throw TypeError(`Second argument must be an array of strings: ${J}`);let W=J.map(String),Z=W.find((H)=>H.includes("\x00"));if(Z!==void 0)throw TypeError(`Arguments cannot contain null bytes ("\\0"): ${Z}`);if(!x$(z))throw TypeError(`Last argument must be an options object: ${z}`);return[Y,W,z]};import{ChildProcess as Uz1}from"node:child_process";import{StringDecoder as gz1}from"node:string_decoder";var{toString:kU8}=Object.prototype,NU8=($)=>kU8.call($)==="[object ArrayBuffer]",J7=($)=>kU8.call($)==="[object Uint8Array]",yY=($)=>new Uint8Array($.buffer,$.byteOffset,$.byteLength),yz1=new TextEncoder,fU8=($)=>yz1.encode($),bz1=new TextDecoder,nC=($)=>bz1.decode($),RU8=($,K)=>{return uz1($,K).join("")},uz1=($,K)=>{if(K==="utf8"&&$.every((z)=>typeof z==="string"))return $;let q=new gz1(K),Y=$.map((z)=>typeof z==="string"?fU8(z):z).map((z)=>q.write(z)),J=q.end();return J===""?Y:[...Y,J]},vv=($)=>{if($.length===1&&J7($[0]))return $[0];return Di(mz1($))},mz1=($)=>$.map((K)=>typeof K==="string"?fU8(K):K),Di=($)=>{let K=new Uint8Array(Bz1($)),q=0;for(let Y of $)K.set(Y,q),q+=Y.length;return K},Bz1=($)=>{let K=0;for(let q of $)K+=q.length;return K};var EU8=($)=>Array.isArray($)&&Array.isArray($.raw),LU8=($,K)=>{let q=[];for(let[z,W]of $.entries())q=Fz1({templates:$,expressions:K,tokens:q,index:z,template:W});if(q.length===0)throw TypeError("Template script must not be empty");let[Y,...J]=q;return[Y,J,{}]},Fz1=({templates:$,expressions:K,tokens:q,index:Y,template:J})=>{if(J===void 0)throw TypeError(`Invalid backslash sequence: ${$.raw[Y]}`);let{nextTokens:z,leadingWhitespaces:W,trailingWhitespaces:Z}=pz1(J,$.raw[Y]),H=DU8(q,z,W);if(Y===K.length)return H;let O=K[Y],X=Array.isArray(O)?O.map((P)=>hU8(P)):[hU8(O)];return DU8(H,X,Z)},pz1=($,K)=>{if(K.length===0)return{nextTokens:[],leadingWhitespaces:!1,trailingWhitespaces:!1};let q=[],Y=0,J=CU8.has(K[0]);for(let W=0,Z=0;W<$.length;W+=1,Z+=1){let H=K[Z];if(CU8.has(H)){if(Y!==W)q.push($.slice(Y,W));Y=W+1}else if(H==="\\"){let O=K[Z+1];if(O===`
|
|
550
|
+
`),l8=k8[P8-1].match(/^(?:[-*+] |\d+\. )\[([ xX])\] (.+)$/),n8=0,e8=/^(?:[-*+] |\d+\. )\[([ xX])\] .+$/;for(let W6=0;W6<P8;W6++)if(e8.test(k8[W6]))n8++;return{text:l8[2],checked:l8[1]!==" ",lineNumber:P8,itemNumber:n8}};return Object.freeze({createDocument:w,createTemplate:T,readDocument:G,readDocumentByPath:j,updateDocumentPath:v,deleteDocument:M,saveDraft:N,readDraft:k,publishDocument:R,discardDraft:C,readVersion:L,getVersions:h,setEditState:m,clearEditState:S,getEditState:f,listDocuments:E,editDocument:g,batchEditDocument:U,readLines:e,readBetweenMarkers:j8,getDocumentStats:H8,readHeadings:p8,readSection:H6,readFrontmatter:R8,readChecklist:F8,checkChecklistItem:async(X8,P8,{id:k8,lineNumber:x8,checked:l8,includeDraft:n8=!1,preview:e8=!1,sessionId:W6},g8)=>{let{entity:U8}=await G(X8,P8,{id:k8}),a8=n8?U8.getDraftContent()??U8.getPublishedContent()??"":U8.getPublishedContent()??"",q6=ym(a8,{lineNumber:x8,checked:l8});if(e8)return{preview:!0,diff:oO(a8,q6.newContent),item:B8(q6.newContent,x8)};return await N(X8,P8,{id:k8,content:q6.newContent,sessionId:W6},g8),{applied:!0,item:B8(q6.newContent,x8)}},toggleChecklistItem:async(X8,P8,{id:k8,lineNumber:x8,includeDraft:l8=!1,preview:n8=!1,sessionId:e8},W6)=>{let{entity:g8}=await G(X8,P8,{id:k8}),U8=l8?g8.getDraftContent()??g8.getPublishedContent()??"":g8.getPublishedContent()??"",a8=Hv8(U8,{lineNumber:x8});if(n8)return{preview:!0,diff:oO(U8,a8.newContent),item:B8(a8.newContent,x8)};return await N(X8,P8,{id:k8,content:a8.newContent,sessionId:e8},W6),{applied:!0,item:B8(a8.newContent,x8)}},batchCheckChecklistItems:async(X8,P8,{id:k8,items:x8,includeDraft:l8=!1,preview:n8=!1,sessionId:e8},W6)=>{let{entity:g8}=await G(X8,P8,{id:k8}),U8=l8?g8.getDraftContent()??g8.getPublishedContent()??"":g8.getPublishedContent()??"",a8=Ov8(U8,{items:x8}),q6=x8.map((k6)=>B8(a8.newContent,k6.lineNumber));if(n8)return{preview:!0,diff:oO(U8,a8.newContent),items:q6,count:a8.details.count};return await N(X8,P8,{id:k8,content:a8.newContent,sessionId:e8},W6),{applied:!0,items:q6,count:a8.details.count}},specialiseDocument:async(X8,P8,{id:k8,subtype:x8,fields:l8},n8)=>{let{entity:e8}=await G(X8,P8,{id:k8});b.factory(e8.getSubtype()!==null,I.validation,`Entity is already specialised to subtype: ${e8.getSubtype()}`,"ALREADY_SPECIALISED");let{storeCode:W6,typeCode:g8}=Y1.resolveEntityId(k8),U8=(await Promise.resolve().then(() => (EO(),LP8))).default;try{await U8.readEntityTypeId(X8,P8,g8,x8)}catch(k6){throw I.validation(`Invalid subtype: ${x8}`,"INVALID_SUBTYPE")}await J.validateRequiredFields(X8,P8,{store:W6,code:g8,subtype:x8,fields:l8});let a8=await $.updateEntityType(X8,P8,{id:k8,subtype:x8},n8);if(l8&&Object.keys(l8).length>0)for(let[k6,I6]of Object.entries(l8))await J.setFieldValue(X8,P8,{entityId:k8,fieldName:k6,...Array.isArray(I6)?{values:I6}:{value:I6}},n8);let{entity:q6}=await G(X8,P8,{id:k8});return{entity:q6}},generaliseDocument:async(X8,P8,{id:k8},x8)=>{let{entity:l8}=await G(X8,P8,{id:k8}),n8=l8.getSubtype();b.factory(n8===null,I.validation,"Entity is already generic (has no subtype)","ALREADY_GENERIC");let e8=await $.readFolder(X8,P8,{id:l8.getParentId()});if(e8&&await R4.isInsideTasksFolder(X8,P8,e8,$))throw I.validation("Cannot generalise entity inside a tasks folder","INVALID_LOCATION");let{typeCode:W6}=Y1.resolveEntityId(k8),g8=await $.getFieldDefinitionsForEntityType(X8,P8,{storeCode:"B",code:W6,subtype:n8}),U8=l8.getFields();for(let q6 of g8){if(q6.inherited)continue;let k6=q6.entity.getName();if(U8&&U8[k6])await J.deleteFieldValue(X8,P8,{entityId:k8,fieldName:k6},x8)}await $.updateEntityType(X8,P8,{id:k8,subtype:null},x8);let{entity:a8}=await G(X8,P8,{id:k8});return{entity:a8}},setIncludeResolver:(X8)=>{z=X8}})},um=Object.freeze({create:SE6});var IE6=()=>{let $=null,K=null,q={prePublish:{d:async(z,W,Z,H,O)=>{if(!$)return;let X=Z.getDraftContent();if(!X)return;let{content:P,pinned:w}=await $.pinIncludes(z,W,X,Z.getObjectId());if(w.length>0)await K.saveDraft(z,W,{id:Z.getObjectId(),content:P,sessionId:H},O)},t:null},postPublish:{},preDelete:{},postCreate:{}};return Object.freeze({getHook:(z,W)=>{return q[z]?.[W]||null},setIncludeResolver:(z,W)=>{$=z,K=W}})},mm=Object.freeze({create:IE6});y1();var Pv8=n6(k4(),1),rJ=Pv8.default("caw:includes"),xE6=({store:$,documentService:K})=>{let q=/<include\s+(?:id="([^"]+)"|path="([^"]+)")(?:\s+version="(\d+)")?\s*\/>/g,Y=(X)=>{let P=X;return P=P.replace(/```[\s\S]*?```/g,(w)=>" ".repeat(w.length)),P=P.replace(/~~~[\s\S]*?~~~/g,(w)=>" ".repeat(w.length)),P=P.replace(/``[^`]+``/g,(w)=>" ".repeat(w.length)),P=P.replace(/`[^`]+`/g,(w)=>" ".repeat(w.length)),P},J=(X)=>{let P=Y(X),w=[],T,G=new RegExp(q.source,"g");while((T=G.exec(P))!==null){let j=X.substring(T.index,T.index+T[0].length),v=new RegExp(q.source).exec(j);if(v)w.push({fullMatch:j,id:v[1],path:v[2],versionStr:v[3],index:T.index})}return w},z=5,W=async(X,P,w,T,G=new Set,j=0)=>{if(rJ("Resolving includes in document, depth=%d, chain=%s, sourceDocId=%s",j,[...G].join(","),T),j>5)throw I.validation("Include depth limit exceeded (max 5 levels)","INCLUDE_DEPTH_EXCEEDED");if(T)G=new Set(G).add(T);let v=J(w);if(rJ("Found %d include directives",v.length),v.length===0)return w;let M=w;for(let N of v){let{fullMatch:k,id:R,path:C,versionStr:L}=N,h=L?parseInt(L,10):null;rJ("Resolving include: id=%s, path=%s, version=%s",R,C,L);try{let m;if(R)m=R;else{let E=T?T.charAt(0):"A",g=await K.readDocumentByPath(X,P,{path:C,type:"d",storeCode:E});if(!g)throw I.notFound(`Included document not found: ${C}`,"INCLUDE_NOT_FOUND");m=g.entity.getObjectId()}if(G.has(m)){let E=[...G,m].join(" -> ");throw I.validation(`Circular include detected: ${E}`,"INCLUDE_CYCLE")}if(h===null)throw I.validation(`Unpinned include found: ${k}. Includes must specify a version.`,"INCLUDE_UNPINNED");let S=await $.readVersion(X,P,{id:m,versionNumber:h});if(!S)throw I.notFound(`Version ${h} not found for included document: ${m}`,"INCLUDE_VERSION_NOT_FOUND");let f=await W(X,P,S.content,m,G,j+1);M=M.replace(k,f)}catch(m){let S=R||C,f=`> **Include Error** - couldn't include ${S}${h?` version ${h}`:""}: ${m.message}`;rJ("Include resolution failed for %s: %s",S,m.message),M=M.replace(k,f)}}return M};return Object.freeze({resolve:W,pinIncludes:async(X,P,w,T)=>{rJ("Auto-pinning unpinned includes in document: %s",T);let G=J(w),j=[],v=w;for(let M of G){let{fullMatch:N,id:k,path:R,versionStr:C}=M;if(C)continue;rJ("Pinning unpinned include: id=%s, path=%s",k,R);let L,h;if(k){L=k;let{entity:S}=await K.readDocument(X,P,{id:k,resolveIncludes:!1});h=S.getPublishedVersionNumber()}else{let S=T?T.charAt(0):"A",f=await K.readDocumentByPath(X,P,{path:R,type:"d",storeCode:S});if(!f)throw I.notFound(`Included document not found: ${R}`,"INCLUDE_NOT_FOUND");L=f.entity.getObjectId(),h=f.entity.getPublishedVersionNumber()}if(!h)throw I.validation(`Cannot pin include - document has no published version: ${L}`,"INCLUDE_NO_VERSION");let m=k?`<include id="${k}" version="${h}" />`:`<include path="${R}" version="${h}" />`;rJ("Pinned include %s to version %d",L,h),v=v.replace(N,m),j.push({id:L,path:R,version:h})}return rJ("Auto-pinned %d unpinned includes",j.length),{content:v,pinned:j}},checkIncludes:async(X,P,w,T)=>{let G=J(w),j=[];for(let v of G){let{id:M,path:N,versionStr:k}=v,R=k?parseInt(k,10):null,C,L;if(M){C=M;let{entity:h}=await K.readDocument(X,P,{id:M,resolveIncludes:!1});L=h.getPublishedVersionNumber()}else{let h=T?T.charAt(0):"A",m=await K.readDocumentByPath(X,P,{path:N,type:"d",storeCode:h});C=m?.entity?.getObjectId(),L=m?.entity?.getPublishedVersionNumber()}j.push({id:C,path:N||null,pinnedVersion:R,latestVersion:L,outdated:R!==null&&L!==null&&R<L})}return j},updateIncludes:async(X,P,w,T)=>{let G=J(w),j=[],v=w;for(let M of G){let{fullMatch:N,id:k,path:R,versionStr:C}=M,L=C?parseInt(C,10):null,h,m;if(k){h=k;let{entity:S}=await K.readDocument(X,P,{id:k,resolveIncludes:!1});m=S.getPublishedVersionNumber()}else{let S=T?T.charAt(0):"A",f=await K.readDocumentByPath(X,P,{path:R,type:"d",storeCode:S});h=f?.entity?.getObjectId(),m=f?.entity?.getPublishedVersionNumber()}if(m&&L!==m){let S=k?`<include id="${k}" version="${m}" />`:`<include path="${R}" version="${m}" />`;v=v.replace(N,S),j.push({id:h,path:R||null,fromVersion:L,toVersion:m})}}return{content:v,updated:j}}})},Bm=Object.freeze({create:xE6});y1();var VA8=n6(Lm(),1),AA8=n6(hB(),1),MA8=($)=>{if(!$)return{parameters:{},target:null,targetPath:null,targetParentId:null,targetName:null,targetRoot:null,targetStore:null,targetJobName:null,targetJobAgent:null,targetJobModel:null,targetJobWorktree:null,targetJobSkipDialog:!1,targetJobStreaming:!1,skipDialog:!1,body:""};let K=VA8.default($),q=K.data?.parameters||{},Y=K.data?.target||null,J=K.data?.targetPath||null,z=K.data?.targetParentId||null,W=K.data?.targetName||null,Z=K.data?.targetRoot||null,H=K.data?.targetStore||null,O=K.data?.targetJobName||null,X=K.data?.targetJobAgent||null,P=K.data?.targetJobModel||null,w=K.data?.targetJobWorktree||null,T=K.data?.targetJobSkipDialog??!1,G=K.data?.targetJobStreaming??!1,j=K.data?.skipDialog??!1,v=K.content;return{parameters:q,target:Y,targetPath:J,targetParentId:z,targetName:W,targetRoot:Z,targetStore:H,targetJobName:O,targetJobAgent:X,targetJobModel:P,targetJobWorktree:w,targetJobSkipDialog:T,targetJobStreaming:G,skipDialog:j,body:v}},Vy6=($)=>{if(!$)return new Set;let K=new Set,q=new Set(["if","unless","each","with","lookup","log"]);try{let Y=AA8.default.parse($),J=(z,W=null,Z=null)=>{if(!z)return;if(z.type==="PathExpression"){if(z.data)return;let H=z.parts.join(".");if(!H||H.startsWith("@"))return;if(W?.type==="BlockStatement"&&Z==="path"||W?.type==="MustacheStatement"&&Z==="path"&&W.params?.length>0){if(q.has(H))return;return}K.add(H)}if(z.program)J(z.program,z,"program");if(z.inverse)J(z.inverse,z,"inverse");if(z.body)z.body.forEach((H)=>J(H,z,"body"));if(z.params)z.params.forEach((H)=>J(H,z,"params"));if(z.hash?.pairs)z.hash.pairs.forEach((H)=>J(H.value,z,"hash"));if(z.path)J(z.path,z,"path")};J(Y)}catch(Y){throw Error(`Invalid Handlebars template: ${Y.message}`)}return K},Ay6=($)=>{if(!$)return{parameters:{},target:null,targetPath:null,targetParentId:null,targetName:null,targetRoot:null,targetStore:null,targetJobName:null,targetJobAgent:null,targetJobModel:null,targetJobWorktree:null,targetJobSkipDialog:!1,targetJobStreaming:!1,skipDialog:!1};let{parameters:K,target:q,targetPath:Y,targetParentId:J,targetName:z,targetRoot:W,targetStore:Z,targetJobName:H,targetJobAgent:O,targetJobModel:X,targetJobWorktree:P,targetJobSkipDialog:w,targetJobStreaming:T,skipDialog:G}=MA8($);return{parameters:K,target:q,targetPath:Y,targetParentId:J,targetName:z,targetRoot:W,targetStore:Z,targetJobName:H,targetJobAgent:O,targetJobModel:X,targetJobWorktree:P,targetJobSkipDialog:w,targetJobStreaming:T,skipDialog:G}},rK=Object.freeze({parseFrontMatter:MA8,extractVariables:Vy6,getParameters:Ay6});var EB=n6(hB(),1),My6=($={})=>{return Object.freeze({renderTemplate:(Y,J={})=>{if(!Y)throw I.validation("Template content cannot be empty","EMPTY_TEMPLATE");let{body:z}=rK.parseFrontMatter(Y),W;try{W=EB.default.compile(z,{noEscape:!0})(J)}catch(Z){throw I.validation(`Failed to render template: ${Z.message}`,"RENDER_ERROR")}return W},extractTemplateParameters:(Y)=>{if(!Y)return{parameters:{},detectedVariables:[],target:null,targetPath:null,targetParentId:null,targetName:null,targetRoot:null,targetStore:null,targetJobName:null,targetJobAgent:null,targetJobModel:null,targetJobWorktree:null,targetJobSkipDialog:!1,targetJobStreaming:!1};let{parameters:J,target:z,targetPath:W,targetParentId:Z,targetName:H,targetRoot:O,targetStore:X,targetJobName:P,targetJobAgent:w,targetJobModel:T,targetJobWorktree:G,targetJobSkipDialog:j,targetJobStreaming:v,body:M}=rK.parseFrontMatter(Y),N=rK.extractVariables(M),k=Array.from(N);return{parameters:J,detectedVariables:k,target:z,targetPath:W,targetParentId:Z,targetName:H,targetRoot:O,targetStore:X,targetJobName:P,targetJobAgent:w,targetJobModel:T,targetJobWorktree:G,targetJobSkipDialog:j,targetJobStreaming:v}}})},LB=Object.freeze({create:My6});import b0 from"node:fs";import _A8 from"node:os";import MN from"node:path";var _y6=({projectStore:$,storeStore:K})=>{return Object.freeze({createProject:async(z,W,{name:Z,path:H},O)=>{if(await $.readProjectByPath(z,W,H)){let m=Error("Project with this path already exists");throw m.code="DUPLICATE_PATH",m}let P=await $.createProject(z,W,{name:Z,path:H},O),w=await K.createLocalStore(z,W,{code:"A",name:"Project"},O);await w.createFolder(z,W,{parentId:null,name:"Documents",subtype:"root_d"},O),await w.createFolder(z,W,{parentId:null,name:"Templates",subtype:"root_t"},O),await w.createFolder(z,W,{parentId:null,name:"Stories",subtype:"root_s"},O),await w.createFolder(z,W,{parentId:null,name:"Jobs",subtype:"root_j"},O),await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,name:"state",label:"State",description:"Workflow state",primitiveType:"string",required:!1,multiplicity:"single",isSystem:!0},O);let T=await w.resolveEntityTypePk(z,W,{code:"f",subtype:"root_s"}),G=await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:T,name:"states",label:"States",description:"Ordered list of valid story states",primitiveType:"string",required:!0,multiplicity:"multi",isSystem:!0},O),v=(await w.readStoryRootFolder(z,W,{storeCode:"A"})).getObjectId();await w.setFieldValue(z,W,{entityId:v,fieldDefinitionId:G.getObjectId(),values:[...IM]},O);let M=await w.resolveEntityTypePk(z,W,{code:"d",subtype:"task"});await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:M,name:"dependsOn",label:"Depends On",description:"Tasks that block this task",primitiveType:"object_ref",required:!1,multiplicity:"multi",isSystem:!0},O);let N=await w.resolveEntityTypePk(z,W,{code:"d",subtype:"cartridge"});await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:N,name:"synopsis",label:"Synopsis",description:"Brief description of the cartridge",primitiveType:"text",required:!1,multiplicity:"single",isSystem:!0},O),await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:N,name:"relatedActivities",label:"Related Activities",description:"Associated activity types",primitiveType:"string",required:!1,multiplicity:"multi",isSystem:!0},O);let k=await w.resolveEntityTypePk(z,W,{code:"f",subtype:"tasks"});await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:k,name:"states",label:"States",description:"Ordered list of valid task states",primitiveType:"string",required:!0,multiplicity:"multi",isSystem:!0},O);let R=await w.resolveEntityTypePk(z,W,{code:"t",subtype:"prompt"});await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:R,name:"associatedType",label:"Associated Type",description:"Entity types this template is associated with",primitiveType:"string",required:!1,multiplicity:"multi",isSystem:!0},O);let C=await w.resolveEntityTypePk(z,W,{code:"s",subtype:null});await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:C,name:"flag",label:"Flag",description:"Visual indicator for story attention",primitiveType:"string",required:!1,multiplicity:"single",isSystem:!0},O),await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:C,name:"activeJobCount",label:"Active Job Count",description:"Number of active jobs associated with this story",primitiveType:"int",required:!1,multiplicity:"single",isSystem:!0},O),await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:C,name:"statusMessage",label:"Status Message",description:"Agent status message displayed in stories list",primitiveType:"string",required:!1,multiplicity:"single",isSystem:!0},O),await w.createFieldDefinition(z,W,{storeCode:"A",ownerEntityId:null,ownerEntityTypePk:C,name:"dateCompleted",label:"Date Completed",description:"Timestamp when story transitioned to done state",primitiveType:"date",required:!1,multiplicity:"single",isSystem:!0},O);let L=await K.readSharedStore(z,W),h=await K.createDemuxStore(z,W,{name:Z},O);return await K.addChildToDemux(z,W,{demuxId:h.getObjectId(),childId:w.getObjectId()},O),await K.addChildToDemux(z,W,{demuxId:h.getObjectId(),childId:L.getObjectId()},O),await K.addStoresToProject(z,W,{projectId:P.getObjectId(),rootStoreId:h.getObjectId(),storeIds:[h.getObjectId(),w.getObjectId(),L.getObjectId()]}),P},validateProjectPath:(z)=>{if(!z||typeof z!=="string"){let w=Error("Path is required and must be a non-empty string");throw w.code="VALIDATION_ERROR",w}let W;if(z==="~")W=_A8.homedir();else if(z.startsWith("~/"))W=MN.join(_A8.homedir(),z.slice(2));else W=z;let Z=b0.existsSync(W),H=!1,O=!1,X=!1;if(Z)try{if(H=b0.statSync(W).isDirectory(),H){let T=MN.join(W,".git");try{O=b0.statSync(T).isDirectory()}catch{O=!1}let G=MN.join(W,".claude");try{X=b0.statSync(G).isDirectory()}catch{X=!1}}}catch(w){H=!1}let P=MN.basename(W);return{path:W,exists:Z,isDirectory:H,hasGit:O,hasClaude:X,suggestedName:P}},listProjects:async(z)=>{let W=await z.selectFrom("entities").innerJoin("string_fields","string_fields.entity_id","entities.id").innerJoin("field_definitions","field_definitions.id","string_fields.field_definition_id").select(["entities.id","entities.object_id","entities.name","entities.created_at","entities.updated_at","string_fields.value as path"]).where("entities.type_code","=","p").where("entities.deleted_at","is",null).where("field_definitions.name","=","path").where("field_definitions.store_id","is",null).where("field_definitions.is_system","=",1).where("entities.name","!=","__system__").orderBy("entities.created_at","desc").execute();return await Promise.all(W.map(async(H)=>{let X=(await z.selectFrom("project_stores").innerJoin("entities","entities.id","project_stores.store_id").innerJoin("entity_types","entity_types.id","entities.entity_type_id").leftJoin("string_fields","string_fields.entity_id","entities.id").leftJoin("field_definitions","field_definitions.id","string_fields.field_definition_id").select(["entities.object_id","entities.name","entity_types.subtype","string_fields.value as code"]).where("project_stores.project_id","=",H.id).where("entities.type_code","=","r").where("entity_types.subtype","=","local").where((P)=>P.or([P("field_definitions.name","=","code"),P("field_definitions.name","is",null)])).where("entities.deleted_at","is",null).execute()).map((P)=>({id:P.code==="B"?"store:B":`store:${P.code}:${H.object_id}`,code:P.code,name:P.name}));return{objectId:H.object_id,name:H.name,path:H.path,createdAt:H.created_at,updatedAt:H.updated_at,children:X}}))}})},_N=Object.freeze({create:_y6});var ky6=()=>{let $=[];return{enqueuePostCommitHook:(K)=>{$.push(K)},flush:()=>{for(let K of $)try{K()}catch(q){console.error("Post-commit hook failed:",q)}}}},Ny6=({db:$,folderService:K,fieldService:q,documentService:Y,templateService:J,projectService:z,clipboardService:W,storyService:Z,assetService:H,jobService:O,includeResolver:X,worktreeService:P,entityTypeService:w})=>{let T=async(y8)=>{let u8=ky6(),Q;return await $.transaction().execute(async(c)=>{Q=await y8(c,u8.enqueuePostCommitHook)}),u8.flush(),Q};return Object.freeze({createFolder:async(y8,{mode:u8,store:Q,path:c,root:d,parentId:C8,name:l,type:O8})=>{return T(async(s,v8)=>{return await K.createFolder(s,y8,{mode:u8,store:Q,path:c,root:d,parentId:C8,name:l,type:O8},v8)})},renameFolder:async(y8,{id:u8,name:Q})=>{return T(async(c,d)=>{return await K.renameFolder(c,y8,{id:u8,name:Q},d)})},moveFolder:async(y8,{id:u8,parentId:Q})=>{return T(async(c,d)=>{return await K.moveFolder(c,y8,{id:u8,parentId:Q},d)})},deleteFolder:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await K.deleteFolder(Q,y8,{id:u8},c)})},createProject:async(y8,{name:u8,path:Q})=>{return T(async(c,d)=>{return await z.createProject(c,y8,{name:u8,path:Q},d)})},createFieldDefinition:async(y8,{store:u8,ownerEntityId:Q,ownerEntityTypeCode:c,ownerEntityTypeSubtype:d,name:C8,label:l,description:O8,primitiveType:s,required:v8,multiplicity:W8,isSystem:D8})=>{return T(async(E8,d8)=>{return await q.createFieldDefinition(E8,y8,{store:u8,ownerEntityId:Q,ownerEntityTypeCode:c,ownerEntityTypeSubtype:d,name:C8,label:l,description:O8,primitiveType:s,required:v8,multiplicity:W8,isSystem:D8},d8)})},addFieldToEntity:async(y8,{entityId:u8,fieldDefinitionId:Q,fieldName:c,value:d,values:C8})=>{return T(async(l,O8)=>{return await q.addFieldToEntity(l,y8,{entityId:u8,fieldDefinitionId:Q,fieldName:c,value:d,values:C8},O8)})},updateFieldValue:async(y8,{entityId:u8,fieldDefinitionId:Q,fieldName:c,value:d,values:C8})=>{return T(async(l,O8)=>{return await q.updateFieldValue(l,y8,{entityId:u8,fieldDefinitionId:Q,fieldName:c,value:d,values:C8},O8)})},removeFieldFromEntity:async(y8,{entityId:u8,fieldDefinitionId:Q,fieldName:c})=>{return T(async(d,C8)=>{return await q.removeFieldFromEntity(d,y8,{entityId:u8,fieldDefinitionId:Q,fieldName:c},C8)})},deleteFieldDefinition:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await q.deleteFieldDefinition(Q,y8,{id:u8},c)})},createSubtype:async(y8,{code:u8,subtype:Q,name:c,parentSubtype:d})=>{return T(async(C8,l)=>{return await w.createSubtype(C8,y8,{code:u8,subtype:Q,name:c,parentSubtype:d},l)})},createDocument:async(y8,{mode:u8,store:Q,path:c,root:d,parentId:C8,name:l,type:O8,content:s,tree:v8,subtype:W8,fields:D8})=>{return T(async(E8,d8)=>{return await Y.createDocument(E8,y8,{mode:u8,store:Q,path:c,root:d,parentId:C8,name:l,type:O8,content:s,tree:v8,subtype:W8,fields:D8},d8)})},createTemplate:async(y8,{mode:u8,store:Q,path:c,root:d,parentId:C8,name:l,content:O8,subtype:s})=>{return T(async(v8,W8)=>{return await Y.createTemplate(v8,y8,{mode:u8,store:Q,path:c,root:d,parentId:C8,name:l,content:O8,subtype:s},W8)})},updateDocumentPath:async(y8,{id:u8,path:Q,parentId:c,type:d})=>{return T(async(C8,l)=>{return await Y.updateDocumentPath(C8,y8,{id:u8,path:Q,parentId:c,type:d},l)})},deleteDocument:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Y.deleteDocument(Q,y8,{id:u8},c)})},saveDraft:async(y8,{id:u8,content:Q,sessionId:c})=>{return T(async(d,C8)=>{return await Y.saveDraft(d,y8,{id:u8,content:Q,sessionId:c},C8)})},publishDocument:async(y8,{id:u8,sessionId:Q})=>{return T(async(c,d)=>{return await Y.publishDocument(c,y8,{id:u8,sessionId:Q},d)})},discardDraft:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Y.discardDraft(Q,y8,{id:u8},c)})},setEditState:async(y8,{id:u8,sessionId:Q})=>{return T(async(c,d)=>{return await Y.setEditState(c,y8,{id:u8,sessionId:Q},d)})},clearEditState:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Y.clearEditState(Q,y8,{id:u8},c)})},editDocument:async(y8,{id:u8,operation:Q,preview:c,ignoreContent:d,sessionId:C8})=>{return T(async(l,O8)=>{return await Y.editDocument(l,y8,{id:u8,operation:Q,preview:c,ignoreContent:d,sessionId:C8},O8)})},batchEditDocument:async(y8,{id:u8,operations:Q,preview:c,ignoreContent:d,sessionId:C8})=>{return T(async(l,O8)=>{return await Y.batchEditDocument(l,y8,{id:u8,operations:Q,preview:c,ignoreContent:d,sessionId:C8},O8)})},checkChecklistItem:async(y8,{id:u8,lineNumber:Q,checked:c,includeDraft:d,preview:C8,sessionId:l})=>{return T(async(O8,s)=>{return await Y.checkChecklistItem(O8,y8,{id:u8,lineNumber:Q,checked:c,includeDraft:d,preview:C8,sessionId:l},s)})},toggleChecklistItem:async(y8,{id:u8,lineNumber:Q,includeDraft:c,preview:d,sessionId:C8})=>{return T(async(l,O8)=>{return await Y.toggleChecklistItem(l,y8,{id:u8,lineNumber:Q,includeDraft:c,preview:d,sessionId:C8},O8)})},batchCheckChecklistItems:async(y8,{id:u8,items:Q,includeDraft:c,preview:d,sessionId:C8})=>{return T(async(l,O8)=>{return await Y.batchCheckChecklistItems(l,y8,{id:u8,items:Q,includeDraft:c,preview:d,sessionId:C8},O8)})},specialiseDocument:async(y8,{id:u8,subtype:Q,fields:c})=>{return T(async(d,C8)=>{return await Y.specialiseDocument(d,y8,{id:u8,subtype:Q,fields:c},C8)})},generaliseDocument:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Y.generaliseDocument(Q,y8,{id:u8},c)})},renderTemplate:async(y8,{id:u8,params:Q,target:c,targetOptions:d,sessionId:C8})=>{let{entity:l}=await Y.readDocument($,y8,{id:u8,resolveIncludes:!1});if(!l.getPublishedContent())throw(await Promise.resolve().then(() => (y1(),hO))).default.validation("Template has no published content","NO_PUBLISHED_CONTENT");let O8=l.getPublishedContent(),{target:s,targetPath:v8,targetParentId:W8,targetName:D8,targetRoot:E8,targetStore:d8,targetJobName:m6,targetJobAgent:n4,targetJobModel:k7,targetJobWorktree:p7,targetJobStreaming:W7}=J.extractTemplateParameters(O8),X3=c||s||"stdout",H4=d?.parentId||d?.root||d?.path?{path:d?.path,parentId:d?.parentId,name:d?.name,root:d?.root,store:d?.store,publish:d?.publish}:{path:d?.path||v8,parentId:d?.parentId||W8,name:d?.name||D8,root:d?.root||E8,store:d?.store||d8,publish:d?.publish},Z9=O8;if(X)Z9=await X.resolve($,y8,O8,u8);let _8=J.renderTemplate(Z9,Q||{});if(H4.path)H4.path=J.renderTemplate(H4.path,Q||{});if(H4.name)H4.name=J.renderTemplate(H4.name,Q||{});switch(X3){case"stdout":return{content:_8,target:"stdout"};case"clipboard":return await W.copyToClipboard(_8),{target:"clipboard",message:"Copied to clipboard"};case"document":return T(async(S8,I8)=>{let b8=(await Promise.resolve().then(() => (y1(),hO))).default,G6;if(H4.parentId){if(!H4.name)throw b8.validation("targetOptions.name is required when parentId is provided","MISSING_TARGET_NAME");G6={mode:"parentName",parentId:H4.parentId,name:H4.name,content:_8}}else if(H4.root){if(!H4.path)throw b8.validation("targetOptions.path is required when root is provided","MISSING_TARGET_PATH");G6={mode:"rootRelative",root:H4.root,path:H4.path,content:_8}}else{if(!H4.path)throw b8.validation("targetOptions.path is required for document target","MISSING_TARGET_PATH");G6={mode:"fullPath",store:H4.store||"A",path:H4.path,content:_8}}let x=await Y.createDocument(S8,y8,G6,I8);if(H4.publish)await Y.publishDocument(S8,y8,{id:x.getObjectId(),sessionId:C8},I8);return{content:_8,target:"document",documentId:x.getObjectId(),documentPath:H4.path||H4.name,published:!!H4.publish}});case"job":return T(async(S8,I8)=>{let b8=(await Promise.resolve().then(() => (y1(),hO))).default;if(!_8||!_8.trim())throw b8.validation("Template rendered to empty prompt","MISSING_PROMPT");let G6=d?.jobName||m6,x=d?.jobAgent||n4||"claude",T8=d?.jobModel||k7,u=d?.jobWorktree||p7,t=d?.jobStreaming??W7,p=d?.objectId||Q?.["object-id"],r=null;if(G6)r=J.renderTemplate(G6,Q||{});let o=null;if(u&&P){let{worktrees:G8}=await P.listWorktrees({projectPath:y8.projectPath}),V8=G8.find((N8)=>N8.branch===u);if(!V8)throw b8.validation(`Worktree with branch '${u}' not found`,"WORKTREE_NOT_FOUND");o=V8.path}let $8=v1.extractStoreCode(u8),Z8=await O.createJob(S8,y8,{store:$8,name:r,agent:x,model:T8,prompt:_8,workingDirectory:o,objectId:p,streaming:t},I8);return{target:"job",jobId:Z8.id,jobName:Z8.name}});case"file":throw(await Promise.resolve().then(() => (y1(),hO))).default.validation("file target not yet implemented","NOT_IMPLEMENTED");default:throw(await Promise.resolve().then(() => (y1(),hO))).default.validation(`Unknown target: ${X3}`,"INVALID_TARGET")}},createStory:async(y8,{name:u8,storeCode:Q,state:c})=>{return T(async(d,C8)=>{return await Z.createStory(d,y8,{store:Q,name:u8,state:c},C8)})},renameStory:async(y8,{id:u8,name:Q})=>{return T(async(c,d)=>{return await Z.renameStory(c,y8,{id:u8,name:Q},d)})},updateStoryState:async(y8,{id:u8,state:Q})=>{return T(async(c,d)=>{return await Z.updateStoryState(c,y8,{id:u8,state:Q},d)})},deleteStory:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Z.deleteStory(Q,y8,{id:u8},c)})},incrementStoryJobCount:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Z.incrementActiveJobCount(Q,y8,{id:u8},c)})},decrementStoryJobCount:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await Z.decrementActiveJobCount(Q,y8,{id:u8},c)})},createAsset:async(y8,{store:u8,buffer:Q,mimeType:c,originalFilename:d,widthPx:C8,heightPx:l,displayWidth:O8,displayHeight:s})=>{return T(async(v8,W8)=>{return await H.createAsset(v8,y8,{store:u8,buffer:Q,mimeType:c,originalFilename:d,widthPx:C8,heightPx:l,displayWidth:O8,displayHeight:s},W8)})},deleteAsset:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await H.deleteAsset(Q,y8,{id:u8},c)})},createJob:async(y8,{store:u8,name:Q,agent:c,model:d,prompt:C8,workingDirectory:l,objectId:O8,streaming:s})=>{return T(async(v8,W8)=>{return await O.createJob(v8,y8,{store:u8,name:Q,agent:c,model:d,prompt:C8,workingDirectory:l,objectId:O8,streaming:s},W8)})},deleteJob:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await O.deleteJob(Q,y8,{id:u8},c)})},updateJobStatus:async(y8,{id:u8,status:Q,exitCode:c,errorMessage:d})=>{return T(async(C8,l)=>{return await O.updateJobStatus(C8,y8,{id:u8,status:Q,exitCode:c,errorMessage:d},l)})},updateJobOutput:async(y8,{id:u8,output:Q})=>{return T(async(c,d)=>{return await O.updateJobOutput(c,y8,{id:u8,output:Q},d)})},updateJobTokens:async(y8,{id:u8,tokensUsed:Q})=>{return T(async(c,d)=>{return await O.updateJobTokens(c,y8,{id:u8,tokensUsed:Q},d)})},updateJobMetadata:async(y8,{id:u8,durationMs:Q,totalCostUsd:c,numTurns:d,sessionId:C8})=>{return T(async(l,O8)=>{return await O.updateJobMetadata(l,y8,{id:u8,durationMs:Q,totalCostUsd:c,numTurns:d,sessionId:C8},O8)})},continueJob:async(y8,{id:u8,prompt:Q,model:c})=>{return T(async(d,C8)=>{return await O.continueJob(d,y8,{id:u8,prompt:Q,model:c},C8)})},stopJob:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await O.stopJob(Q,y8,{id:u8},c)})},setJobPid:async(y8,{id:u8,pid:Q})=>{return T(async(c,d)=>{return await O.setJobPid(c,y8,{id:u8,pid:Q},d)})},clearJobPid:async(y8,{id:u8})=>{return T(async(Q,c)=>{return await O.clearJobPid(Q,y8,{id:u8},c)})},renameJob:async(y8,{id:u8,name:Q})=>{return T(async(c,d)=>{return await O.renameJob(c,y8,{id:u8,name:Q},d)})}})},SB=Object.freeze({create:Ny6});y1();var LB8=n6(DB8(),1),SB8=n6(k4(),1);import Q$ from"fs/promises";import I$ from"path";import{createWriteStream as F21}from"fs";import p21 from"crypto";var x3=SB8.default("caw:export"),hB8=".caw-exports",EB8=".tmp",Q21=2,c21=({store:$,folderService:K,documentService:q,templateService:Y,storyService:J,assetService:z,assetsDir:W})=>{let Z=()=>{let C=new Date,L=C.getFullYear(),h=String(C.getMonth()+1).padStart(2,"0"),m=String(C.getDate()).padStart(2,"0"),S=String(C.getHours()).padStart(2,"0"),f=String(C.getMinutes()).padStart(2,"0"),E=String(C.getSeconds()).padStart(2,"0");return`${L}-${h}-${m}-${S}${f}${E}`},H=async(C,L)=>{let h=L||(C?I$.join(C,hB8):null);if(!h)throw I.validation("Either exportPath or projectPath must be provided","EXPORT_PATH_REQUIRED");let m=I$.join(h,EB8);try{return await Q$.mkdir(h,{recursive:!0}),await Q$.mkdir(m,{recursive:!0}),h}catch(S){if(S.code==="EACCES")throw I.validation("Permission denied creating export directory","EXPORT_ERROR");if(S.code==="ENOSPC")throw I.validation("Insufficient disk space","EXPORT_ERROR");throw x3("Error creating export directory: [%s] %s",S.code||"UNKNOWN",S.message),I.validation(`Failed to create export directory: ${S.message} (${S.code||"UNKNOWN"})`,"EXPORT_ERROR")}},O=async(C,L,h,m)=>{let S=[],f=async(E,g)=>{let U=await K.listFolderContents(C,L,{folderId:E,type:h,storeCode:m});for(let e of U)if(e.getParentId()!==null)S.push({entity:e,depth:g,contentType:h}),await f(e.getObjectId(),g+1)};return await f(null,0),S},X=async(C,L,h)=>{let m=[],S=[],f=async(E)=>{let g=await q.listDocuments(C,L,{parentId:E,storeCode:h});for(let e of g){let j8=e.getPublishedVersionNumber();if(j8!==null){let H8=await q.readVersion(C,L,{id:e.getObjectId(),versionNumber:j8});m.push({entity:e,version:H8})}else S.push(e)}let U=await K.listFolderContents(C,L,{folderId:E,type:"d",storeCode:h});for(let e of U)await f(e.getObjectId())};return await f(null),{published:m,draftOnly:S}},P=async(C,L,h)=>{let m=[],S=[],f=async(E)=>{let g=await q.listDocuments(C,L,{parentId:E,storeCode:h,type:"t"});for(let e of g){let j8=e.getPublishedVersionNumber();if(j8!==null){let H8=await q.readVersion(C,L,{id:e.getObjectId(),versionNumber:j8});m.push({entity:e,version:H8})}else S.push(e)}let U=await K.listFolderContents(C,L,{folderId:E,type:"t",storeCode:h});for(let e of U)await f(e.getObjectId())};return await f(null),{published:m,draftOnly:S}},w=async(C,L,h)=>{let m=await z.listAssets(C,L,{store:h}),S=[];for(let f of m){let E=f.hash,g=E.substring(0,2),U=I$.join(W,g,E);try{let e=await Q$.readFile(U);S.push({entity:f,buffer:e})}catch(e){if(e.code==="ENOENT"){x3("Warning: Skipping asset %s - blob file missing",f.id);continue}throw e}}return x3("Collected %d assets for export",S.length),S},T=new Set(["draft_version","latest_published_version"]),G=(C)=>{let L=typeof C.getFields==="function"?C.getFields():C.fields;if(!L||typeof L!=="object"||Object.keys(L).length===0)return;let h={};for(let[m,S]of Object.entries(L)){if(T.has(m))continue;let f;if(typeof S?.getValues==="function")f=S.getValues();else if(Array.isArray(S))f=S;else f=[S];h[m]=f.length===1?f[0]:f}return Object.keys(h).length>0?h:void 0},j=async(C,L,h)=>{let m=[],S=[],f={published:[],draftOnly:[]};if(!J)return x3("StoryService not available, skipping story export"),{stories:m,folders:S,documents:f};let E=await J.listStories(C,L,{store:h});x3("Found %d stories for export",E.length);for(let g of E)m.push(g),await v(C,L,g,h,S,f);return{stories:m,folders:S,documents:f}},v=async(C,L,h,m,S,f)=>{let E=h.id||h.getObjectId?.()||h,g=await $.listFolderContents(C,L,{folderId:E,type:"s",storeCode:m});for(let e of g){if(e.getParentId()!==null)S.push({entity:e,contentType:"s"});await v(C,L,e.getObjectId(),m,S,f)}let U=await q.listDocuments(C,L,{parentId:E,storeCode:m});for(let e of U){let j8=e.getPublishedVersionNumber();if(j8!==null){let H8=await q.readVersion(C,L,{id:e.getObjectId(),versionNumber:j8});f.published.push({entity:e,version:H8})}else f.draftOnly.push(e)}},M=async(C)=>{try{await Q$.rm(C,{recursive:!0,force:!0})}catch(L){x3("Warning: Failed to cleanup temp directory: %s",L.message)}};return Object.freeze({listExports:async(C,L,{projectPath:h,exportPath:m})=>{let S=m||(h?I$.join(h,hB8):null);if(!S)throw I.validation("Either exportPath or projectPath must be provided","EXPORT_PATH_REQUIRED");try{let f=await Q$.readdir(S),E=[];for(let g of f)if(g.endsWith(".zip")){let U=I$.join(S,g),e=await Q$.stat(U);E.push({filename:g,timestamp:e.mtime.toISOString(),size:e.size})}return x3("Found %d export files",E.length),E}catch(f){if(f.code==="ENOENT")return[];throw f}},exportPreview:async(C,L,{storeCode:h})=>{let m=await O(C,L,"d",h),S=await O(C,L,"t",h),{published:f,draftOnly:E}=await X(C,L,h),{published:g,draftOnly:U}=await P(C,L,h),j8={assets:(z?await z.listAssets(C,L,{store:h}):[]).map((R8)=>({id:R8.id,originalFilename:R8.originalFilename,mimeType:R8.mimeType,sizeBytes:R8.sizeBytes})),folders:[...m,...S].map((R8)=>({id:R8.entity.getObjectId(),path:R8.entity.getPath(),name:R8.entity.getName()})),documents:f.map((R8)=>({id:R8.entity.getObjectId(),path:R8.entity.getPath(),name:R8.entity.getName()})),templates:g.map((R8)=>({id:R8.entity.getObjectId(),path:R8.entity.getPath(),name:R8.entity.getName()}))},H8={documents:E.map((R8)=>({id:R8.getObjectId(),path:R8.getPath(),name:R8.getName()})),templates:U.map((R8)=>({id:R8.getObjectId(),path:R8.getPath(),name:R8.getName()}))},p8=j8.assets.length+j8.folders.length+j8.documents.length+j8.templates.length,H6=H8.documents.length+H8.templates.length;return x3("Preview: %d published (%d assets), %d draft-only",p8,j8.assets.length,H6),{toExport:j8,draftOnly:H8}},exportDocuments:async(C,L,{storeCode:h,projectPath:m,exportPath:S})=>{x3("Starting export for store %s",h);let f=await H(m,S),E=p21.randomUUID(),g=I$.join(f,EB8,E);await Q$.mkdir(g,{recursive:!0});try{let U=await O(C,L,"d",h),e=await O(C,L,"t",h),j8=[...U,...e],{published:H8,draftOnly:p8}=await X(C,L,h),{published:H6,draftOnly:R8}=await P(C,L,h),F8=z?await w(C,L,h):[],{stories:B8,folders:s8,documents:T6}=await j(C,L,h),N6=[...j8,...s8],X6=[...H8,...T6.published],R6=[...p8,...T6.draftOnly];x3("Found %d folders, %d documents, %d templates, %d assets, %d stories",N6.length,X6.length,H6.length,F8.length,B8.length);let b6={},X8=await $.readStoryRootFolder(C,L,{storeCode:h});if(X8){let g8=X8.toJSON(),U8=G(g8);if(U8&&Object.keys(U8).length>0)b6[X8.getObjectId()]={subtype:"root_s",fields:U8}}let P8=[...F8.map((g8)=>({id:g8.entity.id,type:"asset",hash:g8.entity.hash,mimeType:g8.entity.mimeType,sizeBytes:g8.entity.sizeBytes,originalFilename:g8.entity.originalFilename,widthPx:g8.entity.widthPx,heightPx:g8.entity.heightPx,displayWidth:g8.entity.displayWidth,displayHeight:g8.entity.displayHeight})),...B8.map((g8)=>{let U8={id:g8.id,type:"story",name:g8.name},a8=G(g8);if(a8)U8.fields=a8;return U8}),...N6.map((g8)=>{let U8={id:g8.entity.getObjectId(),type:"folder",path:g8.entity.getPath(),contentType:g8.contentType},a8=g8.entity.getSubtype?.();if(a8)U8.subtype=a8;let q6=G(g8.entity);if(q6)U8.fields=q6;return U8}),...X6.map((g8)=>{let U8={id:g8.entity.getObjectId(),type:"document",path:g8.entity.getPath()},a8=g8.entity.getSubtype?.();if(a8)U8.subtype=a8;else{let k6=g8.entity.getPath(),I6=k6.split("/");if(I6.length>=4&&I6[2]==="tasks")x3('WARN: Document %s in tasks folder missing subtype, inferring "task"',k6),U8.subtype="task"}let q6=G(g8.entity);if(q6)U8.fields=q6;return U8}),...H6.map((g8)=>{let U8={id:g8.entity.getObjectId(),type:"template",path:g8.entity.getPath()},a8=g8.entity.getSubtype?.();if(a8)U8.subtype=a8;let q6=G(g8.entity);if(q6)U8.fields=q6;return U8})],k8={version:Q21,exportedAt:new Date().toISOString(),entities:P8};if(Object.keys(b6).length>0)k8.rootFolderFields=b6;await Q$.writeFile(I$.join(g,"manifest.json"),JSON.stringify(k8,null,2),"utf-8");for(let g8 of N6){if(g8.entity.getParentId()===null)continue;let U8=I$.join(g,g8.entity.getPath());await Q$.mkdir(U8,{recursive:!0})}await Q$.mkdir(I$.join(g,"Documents"),{recursive:!0}),await Q$.mkdir(I$.join(g,"Templates"),{recursive:!0}),await Q$.mkdir(I$.join(g,"Stories"),{recursive:!0});for(let g8 of X6){let U8=I$.join(g,g8.entity.getPath()),a8=g8.version.content;await Q$.mkdir(I$.dirname(U8),{recursive:!0}),await Q$.writeFile(U8,a8,"utf-8")}for(let g8 of H6){let U8=I$.join(g,g8.entity.getPath()),a8=g8.version.content;await Q$.mkdir(I$.dirname(U8),{recursive:!0}),await Q$.writeFile(U8,a8,"utf-8")}if(F8.length>0){let g8=I$.join(g,"assets");await Q$.mkdir(g8,{recursive:!0});for(let U8 of F8){let a8=U8.entity.id,q6=I$.join(g8,`${a8}.bin`);await Q$.writeFile(q6,U8.buffer);let k6=I$.join(g8,`${a8}.json`);await Q$.writeFile(k6,JSON.stringify({id:a8,hash:U8.entity.hash,mimeType:U8.entity.mimeType,sizeBytes:U8.entity.sizeBytes,originalFilename:U8.entity.originalFilename,widthPx:U8.entity.widthPx,heightPx:U8.entity.heightPx,displayWidth:U8.entity.displayWidth,displayHeight:U8.entity.displayHeight},null,2),"utf-8")}}for(let g8 of P8){if(g8.type==="folder"||g8.type==="story")continue;let U8;if(g8.type==="asset")U8=I$.join(g,"assets",`${g8.id}.bin`);else if(g8.type==="document"||g8.type==="template")U8=I$.join(g,g8.path);else{x3("Unknown entity type in validation: %s",g8.type);continue}try{await Q$.access(U8)}catch(a8){throw I.validation(`Manifest entry missing file: ${g8.id||g8.path}`,"EXPORT_VALIDATION_FAILED")}}let x8=`caw-export-${Z()}.zip`,l8=I$.join(f,x8),n8=F21(l8),e8=LB8.default("zip",{zlib:{level:9}});e8.on("error",async(g8)=>{throw await M(g),x3("Zip creation error: %s",g8.message),I.validation(`Export failed: ${g8.message}`,"EXPORT_ERROR")}),e8.pipe(n8),e8.directory(g,!1),await e8.finalize(),await new Promise((g8,U8)=>{n8.on("close",g8),n8.on("error",U8),setTimeout(()=>{U8(Error("Zip creation timeout"))},60000)}),x3("Created zip: %s (%d bytes)",x8,e8.pointer()),await M(g);let W6=P8.length;return x3("Export complete: %s (%d entities)",x8,W6),{success:!0,filename:x8,path:l8,counts:{assets:F8.length,stories:B8.length,folders:N6.length,documents:X6.length,templates:H6.length},draftOnlySkipped:{documents:R6.length,templates:R8.length}}}catch(U){throw await M(g),U}}})},wi=Object.freeze({create:c21});y1();var PU8=n6(OU8(),1),wU8=n6(k4(),1);import Nq from"fs/promises";import O5 from"path";import vz1 from"crypto";var V1=wU8.default("caw:import"),Vi=($)=>{if(!$||typeof $!=="string")throw Error(`Invalid export path: ${$}`);let K={Documents:"d",Templates:"t",Stories:"s"},q=$.indexOf("/");if(q===-1){let z=K[$];if(z)return{path:"",type:z};throw Error(`Invalid export path: ${$}`)}let Y=$.slice(0,q),J=K[Y];if(!J)throw Error(`Unknown root folder: ${Y}`);return{path:$.slice(q+1),type:J}},Vz1=".caw-exports",XU8=".tmp",Az1=[1,2],Mz1=/\b([A-Z][adtfns]\d+)\b/g,_z1=({store:$,folderService:K,documentService:q,templateService:Y,storyService:J,fieldService:z,assetService:W,assetsDir:Z})=>{let H=(v,M)=>{if(!v)return v;return v.replace(Mz1,(N,k)=>{return M[k]??N})},O=(v)=>{if(!Array.isArray(v))return!1;if(v.length!==kz.length)return!0;return!v.every((M,N)=>M===kz[N])},X=async(v,M,N,k,R,C)=>{if(!k||typeof k!=="object"||!z)return;for(let[L,h]of Object.entries(k)){if(L==="activeJobCount")continue;let m=L==="dependsOn",S=h;if(m)if(Array.isArray(h))S=h.map((f)=>R[f]||f);else S=R[h]||h;if(Array.isArray(S))await z.setFieldValue(v,M,{entityId:N,fieldName:L,values:S},C);else await z.setFieldValue(v,M,{entityId:N,fieldName:L,value:S},C)}},P=async(v)=>{try{await Nq.rm(v,{recursive:!0,force:!0})}catch(M){V1("Warning: Failed to cleanup temp directory: %s",M.message)}},w=async(v,M,{storeCode:N})=>{let k=await K.listFolderContents(v,M,{folderId:null,type:"d",storeCode:N}),R=await K.listFolderContents(v,M,{folderId:null,type:"t",storeCode:N}),C=await q.listDocuments(v,M,{parentId:null,storeCode:N,type:"d"}),L=await q.listDocuments(v,M,{parentId:null,storeCode:N,type:"t"}),h=k.length===0&&R.length===0&&C.length===0&&L.length===0;return V1("Store %s empty check: %s",N,h),h},T=async(v,M,{tempPath:N,storeCode:k,idMapping:R,enqueuePostCommitHook:C})=>{let L=O5.join(N,"assets"),h;try{h=await Nq.readdir(L)}catch(f){if(f.code==="ENOENT")return V1("No assets directory in export"),0;throw f}let m=h.filter((f)=>f.endsWith(".json"));if(V1("Found %d assets to import",m.length),!W||!Z){if(m.length>0)throw I.validation("Export contains assets but asset service is not configured","ASSET_SERVICE_MISSING");return 0}let S=0;for(let f of m){let E=O5.join(L,f),g=await Nq.readFile(E,"utf-8"),U=JSON.parse(g),e=f.replace(".json",".bin"),j8=O5.join(L,e),H8=await Nq.readFile(j8),p8=await W.createAsset(v,M,{store:k,buffer:H8,mimeType:U.mimeType,originalFilename:U.originalFilename,widthPx:U.widthPx,heightPx:U.heightPx,displayWidth:U.displayWidth,displayHeight:U.displayHeight},C);R[U.id]=p8.id,S++}return V1("Imported %d assets",S),S},G=async(v,M,{manifest:N,tempPath:k,storeCode:R})=>{return V1("Starting transaction..."),await v.transaction().execute(async(C)=>{let L={},h=(F8)=>{},m=await T(C,M,{tempPath:k,storeCode:R,idMapping:L,enqueuePostCommitHook:h});if(V1("Phase 0 complete - imported %d assets",m),N.rootFolderFields&&z){V1("Phase 0.25: Restoring root folder fields");for(let[F8,B8]of Object.entries(N.rootFolderFields)){let s8;if(B8.subtype==="root_s")s8=await $.readStoryRootFolder(C,M,{storeCode:R});if(s8&&B8.fields){for(let[T6,N6]of Object.entries(B8.fields))if(Array.isArray(N6))await z.setFieldValue(C,M,{entityId:s8.getObjectId(),fieldName:T6,values:N6},h);else await z.setFieldValue(C,M,{entityId:s8.getObjectId(),fieldName:T6,value:N6},h);V1("Restored fields for root folder %s (%s)",s8.getObjectId(),B8.subtype)}}V1("Phase 0.25 complete - restored root folder fields")}let S=N.entities.filter((F8)=>F8.type==="story"),f=0,E={};if(S.length>0&&J){V1("Phase 0.5: Creating %d stories",S.length);let F8=N.entities.filter((B8)=>B8.type==="folder"&&B8.subtype==="tasks");for(let B8 of F8){let s8=B8.path.split("/");if(s8.length>=3&&s8[0]==="Stories"){let T6=s8[1];E[T6]=B8.id}}for(let B8 of S){let s8=B8.fields?.state||"waiting",T6=await J.createStory(C,M,{store:R,name:B8.name,state:s8},h);if(L[B8.id]=T6.id,B8.fields&&N.version>=2)await X(C,M,T6.id,B8.fields,L,h);let N6=E[B8.name];if(N6&&T6.tasksFolder){L[N6]=T6.tasksFolder.id;let X6=N.entities.find((R6)=>R6.id===N6);if(X6?.fields?.states){let R6=X6.fields.states;if(O(Array.isArray(R6)?R6:[R6]))await z.setFieldValue(C,M,{entityId:T6.tasksFolder.id,fieldName:"states",values:Array.isArray(R6)?R6:[R6]},h)}}f++}V1("Phase 0.5 complete - created %d stories",f)}let g=N.entities.filter((F8)=>F8.type==="folder"&&F8.subtype!=="tasks");V1("Phase 1: Creating %d folders (excluding tasks folders)",g.length);let U=0;for(let F8 of g){let{path:B8,type:s8}=Vi(F8.path);if(!B8)continue;if(L[F8.id])continue;let T6;if(s8==="s"){let N6=B8.split("/"),X6=N6[N6.length-1],R6=N6.slice(0,-1).join("/"),b6;if(N6.length===1){V1("Unexpected folder directly under Stories root: %s",B8);continue}else if(N6.length===2){let X8=N6[0],P8=N.entities.find((k8)=>k8.type==="story"&&k8.name===X8);if(P8&&L[P8.id])b6=L[P8.id]}else{let X8=N.entities.find((P8)=>P8.type==="folder"&&P8.path===`Stories/${R6}`);if(X8&&L[X8.id])b6=L[X8.id]}if(!b6){V1("Could not resolve parent for story folder: %s",F8.path);continue}T6=await K.createFolder(C,M,{mode:"parentName",parentId:b6,name:X6},h)}else T6=await K.createFolder(C,M,{store:R,path:B8,type:s8},h);if(L[F8.id]=T6.getObjectId(),F8.fields&&N.version>=2)await X(C,M,T6.getObjectId(),F8.fields,L,h);U++}V1("Phase 1 complete - created %d folders (skipped root folders)",U);let e=N.entities.filter((F8)=>F8.type==="document"),j8=[];V1("Phase 2: Reading %d documents",e.length);for(let F8 of e){let B8=O5.join(k,F8.path),s8=await Nq.readFile(B8,"utf-8");j8.push({oldId:F8.id,path:F8.path,content:s8,subtype:F8.subtype,fields:F8.fields})}V1("Phase 2 complete - read %d documents",j8.length),V1("Phase 3: Creating %d document entities",j8.length);let H8=[];for(let F8 of j8){let{path:B8,type:s8}=Vi(F8.path),T6;if(s8==="s"){let X6=B8.split("/"),R6=X6[0],b6=X6.slice(0,-1).join("/"),X8=X6[X6.length-1],P8=N.entities.find((x8)=>x8.type==="folder"&&x8.path===`Stories/${b6}`),k8;if(P8&&L[P8.id])k8=L[P8.id];else{let x8=N.entities.find((l8)=>l8.type==="story"&&l8.name===R6);if(x8&&L[x8.id])k8=L[x8.id]}if(!k8)throw I.validation(`Cannot resolve parent folder for story document: ${F8.path}`,"IMPORT_RESOLUTION_FAILED");T6={mode:"parentName",parentId:k8,name:X8}}else T6={store:R,path:B8,type:s8};if(F8.subtype)T6.subtype=F8.subtype;else if(s8==="s"){let X6=B8.split("/");if(X6.length>=3&&X6[1]==="tasks")V1('WARN: Document %s in tasks folder missing subtype, inferring "task"',F8.path),T6.subtype="task"}let N6=await q.createDocument(C,M,T6,h);L[F8.oldId]=N6.getObjectId(),H8.push({document:N6,originalContent:F8.content,fields:F8.fields})}V1("Phase 3 complete - created %d document entities",H8.length);let p8=N.entities.filter((F8)=>F8.type==="template"),H6=[];V1("Phase 4: Reading %d templates",p8.length);for(let F8 of p8){let B8=O5.join(k,F8.path),s8=await Nq.readFile(B8,"utf-8");H6.push({oldId:F8.id,path:F8.path,content:s8,subtype:F8.subtype,fields:F8.fields})}V1("Phase 4 complete - read %d templates",H6.length),V1("Phase 5: Creating %d template entities",H6.length);let R8=[];for(let F8 of H6){let{path:B8,type:s8}=Vi(F8.path),T6={store:R,path:B8,type:s8};if(F8.subtype)T6.subtype=F8.subtype;let N6=await q.createDocument(C,M,T6,h);L[F8.oldId]=N6.getObjectId(),R8.push({template:N6,originalContent:F8.content,fields:F8.fields})}V1("Phase 5 complete - created %d template entities",R8.length),V1("Phase 6: Remapping and saving content for %d documents",H8.length);for(let{document:F8,originalContent:B8,fields:s8}of H8){let T6=H(B8,L);if(await q.saveDraft(C,M,{id:F8.getObjectId(),content:T6,sessionId:"import-service"},h),await q.publishDocument(C,M,{id:F8.getObjectId()},h),s8&&N.version>=2)await X(C,M,F8.getObjectId(),s8,L,h)}V1("Phase 6 complete - saved and published %d documents",H8.length),V1("Phase 7: Remapping and saving content for %d templates",R8.length);for(let{template:F8,originalContent:B8,fields:s8}of R8){let T6=H(B8,L);if(await q.saveDraft(C,M,{id:F8.getObjectId(),content:T6,sessionId:"import-service"},h),await q.publishDocument(C,M,{id:F8.getObjectId()},h),s8&&N.version>=2)await X(C,M,F8.getObjectId(),s8,L,h)}return V1("Phase 7 complete - saved and published %d templates",R8.length),V1("Transaction committed successfully"),{success:!0,counts:{assets:m,stories:f,folders:U,documents:H8.length,templates:R8.length},remapped:L}})};return Object.freeze({isStoreEmpty:w,importDocuments:async(v,M,{filename:N,storeCode:k,projectPath:R,exportPath:C})=>{let L=C||(R?O5.join(R,Vz1):null);if(!L)throw I.validation("Either exportPath or projectPath must be provided","EXPORT_PATH_REQUIRED");V1("Starting import from %s to store %s",N,k);let h=O5.join(L,N);try{await Nq.access(h),V1("Zip file found: %s",h)}catch(g){throw I.notFound(`Export file not found: ${N}`,"EXPORT_NOT_FOUND")}V1("Validating zip and manifest...");let m=await w(v,M,{storeCode:k});if(!m)throw I.conflict("Store not empty - import requires empty store","STORE_NOT_EMPTY");V1("Store empty check: %s",m);let S=vz1.randomUUID(),f=O5.join(L,XU8,S),E=O5.join(L,XU8);await Nq.mkdir(E,{recursive:!0});try{new PU8.default(h).extractAllTo(f,!0),V1("Extracted zip to: %s",f)}catch(g){throw I.validation("Corrupted or invalid zip file","IMPORT_VALIDATION_FAILED")}try{let g=O5.join(f,"manifest.json"),U;try{let H8=await Nq.readFile(g,"utf-8");U=JSON.parse(H8)}catch(H8){throw I.validation(`Failed to read manifest: ${H8.message}`,"MANIFEST_READ_FAILED")}if(!Az1.includes(U.version))throw I.validation(`Unsupported manifest version: ${U.version}`,"UNSUPPORTED_VERSION");if(!U.entities||!Array.isArray(U.entities))throw I.validation("Invalid manifest structure","MANIFEST_READ_FAILED");V1("Manifest valid: version=%d, entities=%d",U.version,U.entities.length);for(let H8 of U.entities){if(H8.type==="folder"||H8.type==="story")continue;let p8;if(H8.type==="asset")p8=O5.join(f,"assets",`${H8.id}.bin`);else if(H8.type==="document"||H8.type==="template")p8=O5.join(f,H8.path);else{V1("Unknown entity type in import validation: %s",H8.type);continue}try{await Nq.access(p8)}catch(H6){throw I.validation(`Missing file for manifest entry: ${H8.path||H8.id}`,"IMPORT_VALIDATION_FAILED")}}V1("All content files validated");let e=await G(v,M,{manifest:U,tempPath:f,storeCode:k}),j8=e.counts.folders+e.counts.documents+e.counts.templates;return V1("Import complete: %d entities imported",j8),e}finally{await P(f)}}})},Ai=Object.freeze({create:_z1});var kz1=($)=>{let{name:K,interval:q,execute:Y}=$,J=null,z=!1,W=null,Z=null,H=0,O=null,M=Object.freeze({getName:()=>K,getInterval:()=>q,getIsRunning:()=>z,getLastRun:()=>W,getLastError:()=>Z,getRunCount:()=>H,getNextRun:()=>O}),N=async()=>{try{await Y(),W=new Date().toISOString(),Z=null,H++}catch(h){console.error(`[CronJob] ${K} failed:`,h),Z={message:h.message,timestamp:new Date().toISOString()}}if(z)O=new Date(Date.now()+q).toISOString()},k=()=>{if(J!==null)return;J=setInterval(N,q),z=!0,O=new Date(Date.now()+q).toISOString()},R=()=>{if(J===null)return;clearInterval(J),J=null,z=!1,O=null},L=Object.freeze({start:k,stop:R,restart:()=>{R(),k()}});return{jobFns:M,controlFns:L}},lC=Object.freeze({create:kz1});var TU8=n6(k4(),1),Nz1=TU8.default("caw:cron:cleanup-edit-states"),GU8=async($)=>{let K=new Date(Date.now()-iJ).toISOString();try{let q=await $.selectFrom("field_definitions as fd").innerJoin("class_field_defs as cfd","cfd.field_definition_id","fd.id").innerJoin("entity_types as et","et.id","cfd.class_type_id").select(["fd.id","fd.name","fd.primitive_type"]).where("fd.name","in",["edit_session_id","edit_started_at","edit_last_activity_at"]).where("et.code","in",["d","t"]).where("et.subtype","is",null).execute(),Y=q.filter((O)=>O.name==="edit_last_activity_at").map((O)=>O.id),J=q.filter((O)=>O.name==="edit_session_id").map((O)=>O.id),z=q.filter((O)=>O.name==="edit_started_at").map((O)=>O.id);if(Y.length===0)return{expired:0};let W=await $.selectFrom("date_fields").select(["entity_id"]).where("field_definition_id","in",Y).where("value","<",K).execute();if(W.length===0)return{expired:0};let Z=W.map((O)=>O.entity_id);if(J.length>0)await $.deleteFrom("string_fields").where("entity_id","in",Z).where("field_definition_id","in",J).execute();let H=[...z,...Y];if(H.length>0)await $.deleteFrom("date_fields").where("entity_id","in",Z).where("field_definition_id","in",H).execute();if(W.length>0)Nz1("Cleaned up %d expired edit locks (older than %d minutes)",W.length,iJ/60000);return{expired:W.length}}catch(q){throw console.error("[Cleanup] Failed to cleanup expired edit locks:",q),q}};var fz1=({db:$})=>{let{jobFns:K,controlFns:q}=lC.create({name:"cleanup-stale-edit-states",interval:900000,execute:async()=>{await GU8($)}});return{job:Object.freeze(K),control:q}},jU8=Object.freeze({create:fz1});var Rz1=({db:$})=>{let K=new Map,q=(O,X)=>{let{job:P,control:w}=O.create(X);K.set(P.getName(),{job:P,control:w})},Y=(O)=>{let X=K.get(O);if(!X)throw Error(`Job not found: ${O}`);let P=X.job.getIsRunning();return X.control.start(),{name:O,status:P?"already-running":"started",isRunning:X.job.getIsRunning()}},J=(O)=>{let X=K.get(O);if(!X)throw Error(`Job not found: ${O}`);let P=X.job.getIsRunning();return X.control.stop(),{name:O,status:P?"stopped":"already-stopped",isRunning:X.job.getIsRunning()}},z=(O)=>{let X=K.get(O);if(!X)throw Error(`Job not found: ${O}`);return X.control.restart(),{name:O,status:"restarted",isRunning:X.job.getIsRunning()}},W=()=>{let O=[];for(let[X,{job:P}]of K.entries())O.push({name:P.getName(),interval:P.getInterval(),isRunning:P.getIsRunning(),lastRun:P.getLastRun(),lastError:P.getLastError(),runCount:P.getRunCount(),nextRun:P.getNextRun()});return O},Z=()=>{for(let[O,{control:X}]of K.entries())X.start()},H=()=>{for(let[O,{control:X}]of K.entries())X.stop()};return q(jU8,{db:$}),Object.freeze({register:q,start:Y,stop:J,restart:z,list:W,startAll:Z,stopAll:H})},vU8=Object.freeze({create:Rz1});import sl8 from"node:process";import MU8 from"node:process";import Lz1 from"node:os";import Sz1 from"node:fs";import hz1 from"node:fs";import VU8 from"node:fs";var Mi;function Cz1(){try{return VU8.statSync("/.dockerenv"),!0}catch{return!1}}function Dz1(){try{return VU8.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}function _i(){if(Mi===void 0)Mi=Cz1()||Dz1();return Mi}var ki,Ez1=()=>{try{return hz1.statSync("/run/.containerenv"),!0}catch{return!1}};function iC(){if(ki===void 0)ki=Ez1()||_i();return ki}var AU8=()=>{if(MU8.platform!=="linux")return!1;if(Lz1.release().toLowerCase().includes("microsoft")){if(iC())return!1;return!0}try{return Sz1.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!iC():!1}catch{return!1}},_U8=MU8.env.__IS_WSL_TEST__?AU8:AU8();import Ni from"node:process";function fi(){if(Ni.platform!=="linux")return!1;if(Ni.env.WAYLAND_DISPLAY)return!0;if(Ni.env.XDG_SESSION_TYPE==="wayland")return!0;return!1}function x$($){if(typeof $!=="object"||$===null)return!1;let K=Object.getPrototypeOf($);return(K===null||K===Object.prototype||Object.getPrototypeOf(K)===null)&&!(Symbol.toStringTag in $)&&!(Symbol.iterator in $)}import{fileURLToPath as Iz1}from"node:url";var hP=($,K)=>{let q=Ci(xz1($));if(typeof q!=="string")throw TypeError(`${K} must be a string or a file URL: ${q}.`);return q},xz1=($)=>Ri($)?$.toString():$,Ri=($)=>typeof $!=="string"&&$&&Object.getPrototypeOf($)===String.prototype,Ci=($)=>$ instanceof URL?Iz1($):$;var dC=($,K=[],q={})=>{let Y=hP($,"First argument"),[J,z]=x$(K)?[[],K]:[K,q];if(!Array.isArray(J))throw TypeError(`Second argument must be either an array of arguments or an options object: ${J}`);if(J.some((H)=>typeof H==="object"&&H!==null))throw TypeError(`Second argument must be an array of strings: ${J}`);let W=J.map(String),Z=W.find((H)=>H.includes("\x00"));if(Z!==void 0)throw TypeError(`Arguments cannot contain null bytes ("\\0"): ${Z}`);if(!x$(z))throw TypeError(`Last argument must be an options object: ${z}`);return[Y,W,z]};import{ChildProcess as Uz1}from"node:child_process";import{StringDecoder as gz1}from"node:string_decoder";var{toString:kU8}=Object.prototype,NU8=($)=>kU8.call($)==="[object ArrayBuffer]",J7=($)=>kU8.call($)==="[object Uint8Array]",yY=($)=>new Uint8Array($.buffer,$.byteOffset,$.byteLength),yz1=new TextEncoder,fU8=($)=>yz1.encode($),bz1=new TextDecoder,nC=($)=>bz1.decode($),RU8=($,K)=>{return uz1($,K).join("")},uz1=($,K)=>{if(K==="utf8"&&$.every((z)=>typeof z==="string"))return $;let q=new gz1(K),Y=$.map((z)=>typeof z==="string"?fU8(z):z).map((z)=>q.write(z)),J=q.end();return J===""?Y:[...Y,J]},vv=($)=>{if($.length===1&&J7($[0]))return $[0];return Di(mz1($))},mz1=($)=>$.map((K)=>typeof K==="string"?fU8(K):K),Di=($)=>{let K=new Uint8Array(Bz1($)),q=0;for(let Y of $)K.set(Y,q),q+=Y.length;return K},Bz1=($)=>{let K=0;for(let q of $)K+=q.length;return K};var EU8=($)=>Array.isArray($)&&Array.isArray($.raw),LU8=($,K)=>{let q=[];for(let[z,W]of $.entries())q=Fz1({templates:$,expressions:K,tokens:q,index:z,template:W});if(q.length===0)throw TypeError("Template script must not be empty");let[Y,...J]=q;return[Y,J,{}]},Fz1=({templates:$,expressions:K,tokens:q,index:Y,template:J})=>{if(J===void 0)throw TypeError(`Invalid backslash sequence: ${$.raw[Y]}`);let{nextTokens:z,leadingWhitespaces:W,trailingWhitespaces:Z}=pz1(J,$.raw[Y]),H=DU8(q,z,W);if(Y===K.length)return H;let O=K[Y],X=Array.isArray(O)?O.map((P)=>hU8(P)):[hU8(O)];return DU8(H,X,Z)},pz1=($,K)=>{if(K.length===0)return{nextTokens:[],leadingWhitespaces:!1,trailingWhitespaces:!1};let q=[],Y=0,J=CU8.has(K[0]);for(let W=0,Z=0;W<$.length;W+=1,Z+=1){let H=K[Z];if(CU8.has(H)){if(Y!==W)q.push($.slice(Y,W));Y=W+1}else if(H==="\\"){let O=K[Z+1];if(O===`
|
|
551
551
|
`)W-=1,Z+=1;else if(O==="u"&&K[Z+2]==="{")Z=K.indexOf("}",Z+3);else Z+=Qz1[O]??1}}let z=Y===$.length;if(!z)q.push($.slice(Y));return{nextTokens:q,leadingWhitespaces:J,trailingWhitespaces:z}},CU8=new Set([" ","\t","\r",`
|
|
552
552
|
`]),Qz1={x:3,u:5},DU8=($,K,q)=>q||$.length===0||K.length===0?[...$,...K]:[...$.slice(0,-1),`${$.at(-1)}${K[0]}`,...K.slice(1)],hU8=($)=>{let K=typeof $;if(K==="string")return $;if(K==="number")return String($);if(x$($)&&(("stdout"in $)||("isMaxBuffer"in $)))return cz1($);if($ instanceof Uz1||Object.prototype.toString.call($)==="[object Promise]")throw TypeError("Unexpected subprocess in template expression. Please use ${await subprocess} instead of ${subprocess}.");throw TypeError(`Unexpected "${K}" in template expression`)},cz1=({stdout:$})=>{if(typeof $==="string")return $;if(J7($))return nC($);if($===void 0)throw TypeError(`Missing result.stdout in template expression. This is probably due to the previous subprocess' "stdout" option.`);throw TypeError(`Unexpected "${typeof $}" stdout in template expression`)};import{spawnSync as sX1}from"node:child_process";import{debuglog as lz1}from"node:util";import hi from"node:process";var HK=($)=>oC.includes($),oC=[hi.stdin,hi.stdout,hi.stderr],X5=["stdin","stdout","stderr"],aC=($)=>X5[$]??`stdio[${$}]`;var IU8=($)=>{let K={...$};for(let q of Si)K[q]=Ei($,q);return K},Ei=($,K)=>{let q=Array.from({length:iz1($)+1}),Y=dz1($[K],q,K);return sz1(Y,K)},iz1=({stdio:$})=>Array.isArray($)?Math.max($.length,X5.length):X5.length,dz1=($,K,q)=>x$($)?nz1($,K,q):K.fill($),nz1=($,K,q)=>{for(let Y of Object.keys($).sort(oz1))for(let J of az1(Y,q,K))K[J]=$[Y];return K},oz1=($,K)=>SU8($)<SU8(K)?1:-1,SU8=($)=>{if($==="stdout"||$==="stderr")return 0;return $==="all"?2:1},az1=($,K,q)=>{if($==="ipc")return[q.length-1];let Y=Li($);if(Y===void 0||Y===0)throw TypeError(`"${K}.${$}" is invalid.
|
|
553
553
|
It must be "${K}.stdout", "${K}.stderr", "${K}.all", "${K}.ipc", or "${K}.fd3", "${K}.fd4" (and so on).`);if(Y>=q.length)throw TypeError(`"${K}.${$}" is invalid: that file descriptor does not exist.
|
|
@@ -622,7 +622,7 @@ try {
|
|
|
622
622
|
`,n8=P8+l8+R6;o6("runJob: Legacy format - appending output for turn %d",x8),await K.updateJobOutput(X,{id:O,output:n8})}else o6("runJob: New format - writing output to output-%d.md",k),await K.updateJobOutput(X,{id:O,output:R6});if(b6.tokensUsed!==null)await K.updateJobTokens(X,{id:O,tokensUsed:b6.tokensUsed});if(b6.durationMs!==null||b6.totalCostUsd!==null||b6.numTurns!==null||b6.sessionId!==null)await K.updateJobMetadata(X,{id:O,durationMs:b6.durationMs,totalCostUsd:b6.totalCostUsd,numTurns:b6.numTurns,sessionId:b6.sessionId});if(B8===0)await K.updateJobStatus(X,{id:O,status:"completed",exitCode:0});else{let X8=X6.trim()||`Process exited with code ${B8}`;await K.updateJobStatus(X,{id:O,status:"error",exitCode:B8,errorMessage:X8})}o6("runJob: Job %s completed with status %s",O,B8===0?"completed":"error")}catch(R6){o6("runJob: Failed to update job after process close: %s",R6.message);try{await K.updateJobStatus(X,{id:O,status:"error",errorMessage:`Database update failed: ${R6.message}`})}catch(b6){o6("runJob: Failed to set error status for job %s: %s",O,b6.message)}}}),o6("runJob: Process spawned, returning immediately")}})};var Oh=Object.freeze({create:FT1});y1();var ji8=n6(k4(),1);import{spawn as pT1}from"child_process";import{join as QT1}from"path";var i4=ji8.default("caw:worktree-service"),cT1=($)=>{if(!$||!$.trim())return[];let K=[],q=$.trim().split(`
|
|
623
623
|
|
|
624
624
|
`);for(let Y of q){let J=Y.trim().split(`
|
|
625
|
-
`),z={path:null,commit:null,branch:null,isLocked:!1,isMain:!1};for(let W of J)if(W.startsWith("worktree "))z.path=W.slice(9);else if(W.startsWith("HEAD "))z.commit=W.slice(5);else if(W.startsWith("branch ")){let Z=W.slice(7);z.branch=Z.replace("refs/heads/","")}else if(W==="detached");else if(W==="locked")z.isLocked=!0;else if(W.startsWith("locked "))z.isLocked=!0;if(z.path)K.push(z)}if(K.length>0)K[0].isMain=!0;return K},cP=($,K)=>{return new Promise((q)=>{let Y=pT1("git",$,{cwd:K}),J="",z="";Y.stdout.on("data",(W)=>{J+=W.toString()}),Y.stderr.on("data",(W)=>{z+=W.toString()}),Y.on("close",(W)=>{q({stdout:J,stderr:z,exitCode:W})}),Y.on("error",(W)=>{if(W.code==="ENOENT")q({stdout:"",stderr:"git: command not found",exitCode:-1,enoent:!0});else q({stdout:"",stderr:W.message,exitCode:-1})})})},lT1=()=>{let $=async({projectPath:Y})=>{b.factory(!Y,I.validation,"projectPath is required","MISSING_PROJECT_PATH"),i4("listWorktrees: Running git worktree list --porcelain in %s",Y);let J=await cP(["worktree","list","--porcelain"],Y);if(J.enoent)throw i4("listWorktrees: Git not found"),I.validation("Git not installed or not found in PATH","GIT_NOT_FOUND");if(J.stderr&&J.stderr.includes("not a git repository"))return i4("listWorktrees: Not a git repository"),{worktrees:[],isGitProject:!1};if(J.exitCode!==0)throw i4("listWorktrees: Git command failed with exit code %d: %s",J.exitCode,J.stderr),Error(`Git worktree list failed: ${J.stderr||"Unknown error"}`);let z=cT1(J.stdout);i4("listWorktrees: Parsed %d worktrees",z.length);let W=z.filter((Z)=>!Z.isMain).map((Z)=>({branch:Z.branch,path:Z.path,commit:Z.commit,isLocked:Z.isLocked}));return i4("listWorktrees: Returning %d worktrees (excluding main)",W.length),{worktrees:W,isGitProject:!0}},K=async(Y)=>{if(i4("getDefaultBaseBranch: Checking for main branch in %s",Y),(await cP(["show-ref","--verify","--quiet","refs/heads/main"],Y)).exitCode===0)return i4("getDefaultBaseBranch: Detected default branch: main"),"main";if(i4("getDefaultBaseBranch: main not found, checking for master branch"),(await cP(["show-ref","--verify","--quiet","refs/heads/master"],Y)).exitCode===0)return i4("getDefaultBaseBranch: Detected default branch: master"),"master";throw i4("getDefaultBaseBranch: Neither main nor master branch found"),I.validation("No default branch found (neither main nor master exists)","NO_DEFAULT_BRANCH")};return Object.freeze({listWorktrees:$,createWorktree:async({projectPath:Y,branch:J,baseBranch:z})=>{b.factory(!Y,I.validation,"projectPath is required","MISSING_PROJECT_PATH"),b.factory(!J,I.validation,"branch is required","MISSING_BRANCH"),i4("createWorktree: Creating worktree for branch %s in %s",J,Y),i4("createWorktree: Validating branch name: %s",J);let W=await cP(["check-ref-format","--branch",J],Y);if(W.enoent)throw i4("createWorktree: Git not found"),I.validation("Git not installed or not found in PATH","GIT_NOT_FOUND");if(W.exitCode!==0)throw i4("createWorktree: Invalid branch name: %s",J),I.validation(`Invalid branch name: ${J}`,"INVALID_BRANCH_NAME");let Z=z;if(!Z){i4("createWorktree: No baseBranch provided, detecting default");try{Z=await K(Y)}catch(X){if(X.code==="NO_DEFAULT_BRANCH"){let P=await cP(["status","--porcelain"],Y);if(P.stderr&&P.stderr.includes("not a git repository"))throw i4("createWorktree: Not a git repository"),I.validation("Not a git repository","NOT_GIT_REPOSITORY")}throw X}}let H=QT1(Y,"worktree",J);i4("createWorktree: Worktree path will be: %s",H),i4("createWorktree: Running git worktree add %s -b %s %s",H,J,Z);let O=await cP(["worktree","add",H,"-b",J,Z],Y);if(O.enoent)throw i4("createWorktree: Git not found"),I.validation("Git not installed or not found in PATH","GIT_NOT_FOUND");if(O.stderr&&O.stderr.includes("not a git repository"))throw i4("createWorktree: Not a git repository"),I.validation("Not a git repository","NOT_GIT_REPOSITORY");if(O.stderr&&O.stderr.includes("is already checked out"))throw i4("createWorktree: Branch %s is already checked out",J),I.conflict(`Branch '${J}' is already checked out in another worktree`,"BRANCH_ALREADY_CHECKED_OUT");if(O.stderr&&O.stderr.includes("already exists"))throw i4("createWorktree: Branch %s already exists",J),I.conflict(`Branch '${J}' already exists`,"BRANCH_ALREADY_EXISTS");if(O.exitCode!==0)throw i4("createWorktree: Git worktree add failed with exit code %d: %s",O.exitCode,O.stderr),Error(`Git worktree add failed: ${O.stderr||"Unknown error"}`);return i4("createWorktree: Successfully created worktree at %s for branch %s",H,J),{path:H,branch:J}},getDefaultBaseBranch:K})};var vi8=Object.freeze({create:lT1});y1();var Mi8=n6(k4(),1);EO();var Vi8=Mi8.default("caw:entity-type-service"),Ai8=Object.freeze(["d","f","t","s"]),iT1=/^[a-zA-Z][a-zA-Z0-9_]*$/,dT1=({store:$})=>{return Object.freeze({createSubtype:async(q,Y,{code:J,subtype:z,name:W,parentSubtype:Z},H)=>{Vi8("createSubtype called: code=%s, subtype=%s, name=%s, parentSubtype=%s",J,z,W,Z),b.factory(!Ai8.includes(J),I.validation,`Invalid parent type code: ${J}. Must be one of: ${Ai8.join(", ")}`,"INVALID_PARENT_TYPE"),b.factory(!z||!iT1.test(z),I.validation,`Invalid subtype name: ${z}. Must start with letter, contain only alphanumeric and underscores`,"INVALID_SUBTYPE_NAME"),b.factory(!W||!W.trim(),I.validation,"Display name is required","MISSING_NAME");let O=null;if(Z!==void 0)try{O=await E6.readEntityTypeId(q,Y,J,Z)}catch(P){let w=Z===null?`${J}/null`:`${J}/${Z}`;throw I.notFound(`Parent type not found: ${w}`,"PARENT_TYPE_NOT_FOUND")}let X=await $.createEntityType(q,Y,{code:J,subtype:z,name:W,parentTypePk:O});return Vi8("createSubtype succeeded: id=%d, code=%s, subtype=%s, parentTypePk=%s",X.id,J,z,O),X}})},_i8=Object.freeze({create:dT1});y1();var Jn=($)=>{if(!$||$.trim()==="")return $;let K=[],q=$,Y=0,J=/"[^"]*"/g,z;while((z=J.exec($))!==null){if(z.index>Y)K.push({type:"unquoted",content:$.slice(Y,z.index)});K.push({type:"quoted",content:z[0]}),Y=z.index+z[0].length}if(Y<$.length)K.push({type:"unquoted",content:$.slice(Y)});if(K.length===0)K.push({type:"unquoted",content:$});return K.map((Z)=>{if(Z.type==="quoted")return Z.content;return nT1(Z.content)}).join("")},nT1=($)=>{let K=[],q=/(\s+)|(\S+)/g,Y;while((Y=q.exec($))!==null)if(Y[1])K.push({type:"whitespace",content:Y[1]});else if(Y[2])K.push({type:"token",content:Y[2]});return K.map((z,W)=>{if(z.type==="whitespace")return z.content;let Z=z.content;if(Z==="AND"||Z==="OR"||Z==="NOT")return Z;if(Z.startsWith("-")&&Z.length>1){let H=Z.slice(1);if(!ki8(H))return Z;return Ni8(Z)}if(ki8(Z))return Ni8(Z);return Z}).join("")},ki8=($)=>{let K=$.endsWith("*")?$.slice(0,-1):$;if(/^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)+$/.test(K))return!0;if(/^[a-zA-Z0-9]+:[a-zA-Z0-9/:.\-]+$/.test(K))return!0;return!1},Ni8=($)=>{let K="",q=$;if($.startsWith("-"))K="-",q=$.slice(1);let Y="";if(q.endsWith("*"))Y="*",q=q.slice(0,-1);return`${K}"${q}"${Y}`};var oT1=({store:$})=>{return Object.freeze({search:async(Y,J,{query:z,limit:W=20,offset:Z=0,startMarker:H="<mark>",endMarker:O="</mark>",storeCode:X})=>{if(!z||typeof z!=="string"||z.trim()==="")throw I.validation("Search query is required","INVALID_QUERY");if(W!==void 0&&(!Number.isInteger(W)||W<1))throw I.validation("Limit must be a positive integer","INVALID_LIMIT");if(Z!==void 0&&(!Number.isInteger(Z)||Z<0))throw I.validation("Offset must be a non-negative integer","INVALID_OFFSET");let P=Jn(z);return await $.searchContent(Y,J,{query:P,limit:W,offset:Z,startMarker:H,endMarker:O,storeCode:X})},searchTextFields:async(Y,J,{query:z,fieldName:W,storeCode:Z})=>{if(!z||typeof z!=="string"||z.trim()==="")throw I.validation("Search query is required","INVALID_QUERY");let H=Jn(z);return await $.searchTextFields(Y,J,{query:H,fieldName:W,storeCode:Z})}})},fi8=Object.freeze({create:oT1});var Z3=zn.default("caw:core"),Xh=zn.default("caw:story-job-tracking"),rT1=async({envDir:$,databaseFilepath:K,assetsDir:q,lazilyCreateDb:Y,kyselyFactory:J},z)=>{let Z=await hP8.create({kyselyFactory:J}).getDb(K,Y),H=$?aT1.join($,"shared-exports"):null,O=xP8.create(),X=eP8.create(),P=vU8.create({db:Z}),w=el8.create(),T=new Map,G=async(n)=>{if(!n||!/^P\d+$/.test(n))b.factory(!0,I.notFound,`Project not found: ${n}`,"PROJECT_NOT_FOUND");let a=parseInt(n.slice(1),10);b.factory(a<1||a>Number.MAX_SAFE_INTEGER,I.notFound,`Project not found: ${n}`,"PROJECT_NOT_FOUND");let i=await O.readProjectByObjectId(Z,null,n);return b.factory(!i,I.notFound,`Project not found: ${n}`,"PROJECT_NOT_FOUND"),{projCtx:i.getObjectId(),projectPath:i.getPath(),authCtx:null}},j=async(n)=>{let a=T.get(n);if(a)return a;let i=await X.readRootStoreForProject(Z,{},n),J8=Lu.create({store:i}),M8=Su.create({store:i}),Q8=mm.create(),z6=um.create({store:i,folderService:J8,documentHooks:Q8,fieldService:M8}),P6=Bm.create({store:i,documentService:z6});Q8.setIncludeResolver(P6,i),z6.setIncludeResolver(P6);let x6=LB.create(),s6=ed.create({store:i,fieldService:M8}),c6=$n.create({store:i,assetsDir:q}),J4=Oi8.create({store:i,fieldService:M8}),N7=vi8.create(),Q7=_i8.create({store:i}),f5=fi8.create({store:i}),Uq=SB.create({db:Z,folderService:J8,fieldService:M8,documentService:z6,templateService:x6,projectService:null,clipboardService:w,storyService:s6,assetService:c6,jobService:J4,includeResolver:P6,worktreeService:N7,entityTypeService:Q7}),xw=wi.create({store:i,folderService:J8,documentService:z6,templateService:x6,storyService:s6,assetService:c6,assetsDir:q}),BV=Ai.create({store:i,folderService:J8,documentService:z6,templateService:x6,storyService:s6,fieldService:M8,assetService:c6,assetsDir:q}),i2={folderService:J8,fieldService:M8,documentService:z6,templateService:x6,transactionService:Uq,exportService:xw,importService:BV,rootStore:i,storyService:s6,assetService:c6,jobService:J4,worktreeService:N7,includeResolver:P6,searchService:f5};return J4.subscribeAll({onJOB_STARTED:({id:x9})=>{setImmediate(async()=>{try{let H9=(await J4.getJob(Z,{},{id:x9}))?.fields?.objectId;if(H9&&H9.startsWith("As"))Xh("JOB_STARTED: job=%s, objectId=%s - incrementing activeJobCount",x9,H9),await Uq.incrementStoryJobCount({},{id:H9})}catch(tY){Xh("Error handling JOB_STARTED for job %s: %s",x9,tY.message)}})},onJOB_COMPLETED:({id:x9})=>{setImmediate(async()=>{try{let H9=(await J4.getJob(Z,{},{id:x9}))?.fields?.objectId;if(H9&&H9.startsWith("As"))Xh("JOB_COMPLETED: job=%s, objectId=%s - decrementing activeJobCount",x9,H9),await Uq.decrementStoryJobCount({},{id:H9})}catch(tY){Xh("Error handling JOB_COMPLETED for job %s: %s",x9,tY.message)}})}}),T.set(n,i2),i2},v=async()=>{let n=await X.readSharedStore(Z,{}),a=Lu.create({store:n}),i=Su.create({store:n}),J8=mm.create(),M8=um.create({store:n,folderService:a,documentHooks:J8,fieldService:i}),Q8=Bm.create({store:n,documentService:M8});J8.setIncludeResolver(Q8,n),M8.setIncludeResolver(Q8);let z6=LB.create(),P6=ed.create({store:n,fieldService:i}),x6=$n.create({store:n,assetsDir:q}),s6=wi.create({store:n,folderService:a,documentService:M8,templateService:z6,storyService:P6,assetService:x6,assetsDir:q}),c6=Ai.create({store:n,folderService:a,documentService:M8,templateService:z6,storyService:P6,fieldService:i,assetService:x6,assetsDir:q});return{exportService:s6,importService:c6,sharedStore:n}},M=async()=>{return await _N.create({projectStore:O,storeStore:X}).listProjects(Z)},N=async(n)=>{if(!n||!/^P\d+$/.test(n))return null;let a=parseInt(n.slice(1),10);if(a<1||a>Number.MAX_SAFE_INTEGER)return null;return await O.readProjectByObjectId(Z,null,n)},k=async(n,{mode:a,store:i,path:J8,root:M8,parentId:Q8,name:z6,type:P6})=>{let x6=await G(n),{transactionService:s6}=await j(x6.projCtx);return await s6.createFolder(x6,{mode:a,store:i,path:J8,root:M8,parentId:Q8,name:z6,type:P6})},R=async(n,{id:a,name:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.renameFolder(J8,{id:a,name:i})},C=async(n,{id:a,parentId:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.moveFolder(J8,{id:a,parentId:i})},L=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.deleteFolder(i,{id:a})},h=async(n,{id:a})=>{let i=await G(n),{folderService:J8}=await j(i.projCtx);return await J8.readFolder(Z,i,{id:a})},m=async(n,{store:a,path:i,type:J8})=>{let M8=await G(n),{folderService:Q8}=await j(M8.projCtx);return await Q8.getFolderByPath(Z,M8,{path:i,type:J8,storeCode:a})},S=async(n,{id:a})=>{let i=await G(n);if(!Y1.parseId(a))throw I.notFound(`Invalid entity ID format: ${a}`,"NOT_FOUND");let{rootStore:M8}=await j(i.projCtx);return{root:await R4.getRootForEntity(Z,i,a,M8)}},f=async(n,{folderId:a,store:i,type:J8})=>{let M8=await G(n);Z3("listFolderContents: Listing contents for project %s: folderId=%s, store=%s, type=%s",M8.projCtx,a||"root",i,J8);let{folderService:Q8,documentService:z6,rootStore:P6}=await j(M8.projCtx),x6=J8;if(a&&!J8)x6=await E(Z,P6,M8,a,i),Z3("listFolderContents: Inferred type %s from folder %s",x6,a);if(!x6||x6!=="d"&&x6!=="t")x6="d",Z3('listFolderContents: Defaulting effectiveType to "d"');let s6=await Q8.listFolderContents(Z,M8,{folderId:a,storeCode:i,type:x6}),c6=a;if((a===null||a===void 0)&&(x6==="d"||x6==="t"))c6=(await P6.readRootFolderForType(Z,M8,x6,i)).getObjectId(),Z3("listFolderContents: Resolved root folder for type %s: %s",x6,c6);Z3("listFolderContents: Querying content with parentId=%s, store=%s, type=%s",c6,i,x6);let J4=await z6.listDocuments(Z,M8,{parentId:c6,storeCode:i,type:x6});return Z3("listFolderContents: Found %d folders, %d documents",s6?.length||0,J4?.length||0),{folders:s6,documents:J4}},E=async(n,a,i,J8,M8)=>{let Q8=Y1.parseId(J8);if(Q8&&Q8.typeCode==="s")return"d";let z6=await a.readFolder(n,i,{id:J8});if(!z6)return null;let P6=await n.selectFrom("entities").innerJoin("entity_types","entities.entity_type_id","entity_types.id").select(["entity_types.code as entity_type_code","entity_types.subtype as entity_type_subtype"]).where("entities.object_id","=",J8).executeTakeFirst();if(P6?.entity_type_code==="f"&&P6?.entity_type_subtype==="root_d")return"d";if(P6?.entity_type_code==="f"&&P6?.entity_type_subtype==="root_t")return"t";if(P6?.entity_type_code==="f"&&(P6?.entity_type_subtype==="root_s"||P6?.entity_type_subtype==="tasks"))return"d";if(P6?.entity_type_code==="s")return"d";let x6=await a.readRootFolderForType(n,i,"d",M8),s6=await a.readRootFolderForType(n,i,"t",M8),c6=z6;while(c6&&c6.getParentId()!==null){let J4=await a.readFolder(n,i,{id:c6.getParentId()});if(!J4)break;c6=J4}if(c6&&c6.getObjectId()===x6?.getObjectId())return"d";else if(c6&&c6.getObjectId()===s6?.getObjectId())return"t";return null},g=async(n)=>{let a=await G(n),{rootStore:i}=await j(a.projCtx);return i},U=async(n)=>{let a=await G(n),{storyService:i}=await j(a.projCtx);return i},e=async(n)=>{let a=await G(n),{jobService:i}=await j(a.projCtx);return i},j8=async({name:n,path:a})=>{let i=_N.create({projectStore:O,storeStore:X}),J8=SB.create({db:Z,folderService:null,projectService:i}),M8={};return await J8.createProject(M8,{name:n,path:a})},H8=(n)=>{return _N.create({projectStore:O,storeStore:X}).validateProjectPath(n)},p8=(n)=>{T.delete(n)},H6=async(n,{mode:a,store:i,path:J8,root:M8,parentId:Q8,name:z6,type:P6,content:x6,tree:s6,subtype:c6,fields:J4})=>{let N7=await G(n);Z3("createDocument: Creating document in project %s: mode=%s, path=%s, store=%s, type=%s, subtype=%s",N7.projCtx,a,J8,i,P6,c6);let{transactionService:Q7}=await j(N7.projCtx),f5=await Q7.createDocument(N7,{mode:a,store:i,path:J8,root:M8,parentId:Q8,name:z6,type:P6,content:x6,tree:s6,subtype:c6,fields:J4});return Z3("createDocument: Document created: id=%s, path=%s",f5.getObjectId(),f5.getPath()),f5},R8=async(n,{mode:a,store:i,path:J8,root:M8,parentId:Q8,name:z6,content:P6,subtype:x6})=>{let s6=await G(n);Z3("createTemplate: Creating template in project %s: mode=%s, path=%s, store=%s",s6.projCtx,a,J8,i);let{transactionService:c6}=await j(s6.projCtx),J4=await c6.createTemplate(s6,{mode:a,store:i,path:J8,root:M8,parentId:Q8,name:z6,content:P6,subtype:x6});return Z3("createTemplate: Template created: id=%s, path=%s",J4.getObjectId(),J4.getPath()),J4},F8=async(n,{id:a,resolveIncludes:i=!0})=>{let J8=await G(n),{documentService:M8}=await j(J8.projCtx);return await M8.readDocument(Z,J8,{id:a,resolveIncludes:i})},B8=async(n,{path:a,store:i,type:J8,resolveIncludes:M8=!0})=>{let Q8=await G(n),{documentService:z6,includeResolver:P6}=await j(Q8.projCtx),x6=await z6.readDocumentByPath(Z,Q8,{path:a,type:J8,storeCode:i});if(!x6)return null;let{entity:s6,ancestorFolderIds:c6}=x6,J4=null;if(M8&&P6&&s6.getPublishedContent())J4=await P6.resolve(Z,Q8,s6.getPublishedContent(),s6.getObjectId());return{entity:s6,ancestorFolderIds:c6,resolvedContent:J4}},s8=async(n,{id:a})=>{let i=await G(n),{documentService:J8,includeResolver:M8}=await j(i.projCtx),{entity:Q8}=await J8.readDocument(Z,i,{id:a,resolveIncludes:!1}),z6=Q8.getDraftContent()||Q8.getPublishedContent();if(!z6)return[];return await M8.checkIncludes(Z,i,z6,a)},T6=async(n,{id:a})=>{let i=await G(n),{documentService:J8,includeResolver:M8,rootStore:Q8}=await j(i.projCtx),{entity:z6}=await J8.readDocument(Z,i,{id:a,resolveIncludes:!1}),P6=z6.getDraftContent()||z6.getPublishedContent();if(!P6)return{updated:[]};let{content:x6,updated:s6}=await M8.updateIncludes(Z,i,P6,a);if(s6.length>0)await Q8.saveDraft(Z,i,{id:a,content:x6});return{updated:s6}},N6=async(n,{id:a,path:i,parentId:J8,type:M8})=>{let Q8=await G(n),{transactionService:z6}=await j(Q8.projCtx);return await z6.updateDocumentPath(Q8,{id:a,path:i,parentId:J8,type:M8})},X6=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.deleteDocument(i,{id:a})},R6=async(n,{id:a,subtype:i,fields:J8})=>{let M8=await G(n),{transactionService:Q8}=await j(M8.projCtx);return await Q8.specialiseDocument(M8,{id:a,subtype:i,fields:J8})},b6=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.generaliseDocument(i,{id:a})},X8=async(n,{id:a,content:i,sessionId:J8})=>{let M8=await G(n),{transactionService:Q8}=await j(M8.projCtx);return await Q8.saveDraft(M8,{id:a,content:i,sessionId:J8})},P8=async(n,{id:a})=>{let i=await G(n),{documentService:J8}=await j(i.projCtx);return await J8.readDraft(Z,i,{id:a})},k8=async(n,{id:a,sessionId:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.publishDocument(J8,{id:a,sessionId:i})},x8=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.discardDraft(i,{id:a})},l8=async(n,{id:a,sessionId:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.setEditState(J8,{id:a,sessionId:i})},n8=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.clearEditState(i,{id:a})},e8=async(n,{id:a})=>{let i=await G(n),{documentService:J8}=await j(i.projCtx);return await J8.getEditState(Z,i,{id:a})},W6=async(n,{id:a,versionNumber:i})=>{let J8=await G(n),{documentService:M8}=await j(J8.projCtx);return await M8.readVersion(Z,J8,{id:a,versionNumber:i})},g8=async(n,{id:a})=>{let i=await G(n),{documentService:J8}=await j(i.projCtx);return await J8.getVersions(Z,i,{id:a})},U8=async(n,{id:a,operation:i,preview:J8,ignoreContent:M8,sessionId:Q8})=>{let z6=await G(n),{transactionService:P6}=await j(z6.projCtx);return await P6.editDocument(z6,{id:a,operation:i,preview:J8,ignoreContent:M8,sessionId:Q8})},a8=async(n,{id:a,operations:i,preview:J8,ignoreContent:M8,sessionId:Q8})=>{let z6=await G(n),{transactionService:P6}=await j(z6.projCtx);return await P6.batchEditDocument(z6,{id:a,operations:i,preview:J8,ignoreContent:M8,sessionId:Q8})},q6=async(n,{id:a,lineNumber:i,checked:J8,includeDraft:M8,preview:Q8,sessionId:z6})=>{let P6=await G(n),{transactionService:x6}=await j(P6.projCtx);return await x6.checkChecklistItem(P6,{id:a,lineNumber:i,checked:J8,includeDraft:M8,preview:Q8,sessionId:z6})},k6=async(n,{id:a,lineNumber:i,includeDraft:J8,preview:M8,sessionId:Q8})=>{let z6=await G(n),{transactionService:P6}=await j(z6.projCtx);return await P6.toggleChecklistItem(z6,{id:a,lineNumber:i,includeDraft:J8,preview:M8,sessionId:Q8})},I6=async(n,{id:a,items:i,includeDraft:J8,preview:M8,sessionId:Q8})=>{let z6=await G(n),{transactionService:P6}=await j(z6.projCtx);return await P6.batchCheckChecklistItems(z6,{id:a,items:i,includeDraft:J8,preview:M8,sessionId:Q8})},J1=async(n,{id:a,startLine:i,endLine:J8,includeDraft:M8})=>{let Q8=await G(n),{documentService:z6}=await j(Q8.projCtx);return await z6.readLines(Z,Q8,{id:a,startLine:i,endLine:J8,includeDraft:M8})},q4=async(n,{id:a,startMarker:i,endMarker:J8,inclusive:M8,includeDraft:Q8})=>{let z6=await G(n),{documentService:P6}=await j(z6.projCtx);return await P6.readBetweenMarkers(Z,z6,{id:a,startMarker:i,endMarker:J8,inclusive:M8,includeDraft:Q8})},Y4=async(n,{id:a,includeDraft:i})=>{let J8=await G(n),{documentService:M8}=await j(J8.projCtx);return await M8.getDocumentStats(Z,J8,{id:a,includeDraft:i})},y8=async(n,{id:a,maxDepth:i,includeDraft:J8})=>{let M8=await G(n),{documentService:Q8}=await j(M8.projCtx);return await Q8.readHeadings(Z,M8,{id:a,maxDepth:i,includeDraft:J8})},u8=async(n,{id:a,heading:i,includeHeading:J8,includeDraft:M8})=>{let Q8=await G(n),{documentService:z6}=await j(Q8.projCtx);return await z6.readSection(Z,Q8,{id:a,heading:i,includeHeading:J8,includeDraft:M8})},Q=async(n,{id:a,includeDraft:i})=>{let J8=await G(n),{documentService:M8}=await j(J8.projCtx);return await M8.readFrontmatter(Z,J8,{id:a,includeDraft:i})},c=async(n,{id:a,section:i,includeDraft:J8})=>{let M8=await G(n),{documentService:Q8}=await j(M8.projCtx);return await Q8.readChecklist(Z,M8,{id:a,section:i,includeDraft:J8})},d=async(n,{folderId:a,store:i,type:J8="d"})=>{let M8=await G(n),{documentService:Q8}=await j(M8.projCtx);return await Q8.listDocuments(Z,M8,{parentId:a,storeCode:i,type:J8})},C8=async(n,{id:a,params:i,target:J8,targetOptions:M8,sessionId:Q8})=>{let z6=await G(n),{transactionService:P6,jobService:x6,rootStore:s6}=await j(z6.projCtx),c6=await P6.renderTemplate(z6,{id:a,params:i,target:J8,targetOptions:M8,sessionId:Q8});if(c6.target==="job"&&c6.jobId){let J4=Oh.create({jobService:x6,transactionService:P6,store:s6,db:Z,projectPath:z6.projectPath});setImmediate(async()=>{try{await J4.runJob(c6.jobId,z6)}catch(N7){Z3("JobRunner error for job %s: %s",c6.jobId,N7.message);try{await P6.updateJobStatus(z6,{id:c6.jobId,status:"error",errorMessage:N7.message})}catch(Q7){Z3("Failed to update job %s status to error: %s",c6.jobId,Q7.message)}}})}return c6},l=async(n,{id:a})=>{let i=await G(n),{documentService:J8,templateService:M8}=await j(i.projCtx),{entity:Q8}=await J8.readDocument(Z,i,{id:a});if(!Q8.getPublishedContent())return{parameters:{},detectedVariables:[],target:null,targetPath:null};return M8.extractTemplateParameters(Q8.getPublishedContent())},O8=async(n,{typeCode:a,store:i="A"})=>{let J8=await G(n),{rootStore:M8}=await j(J8.projCtx);return{templates:(await M8.findEntitiesByFieldValue(Z,J8,{storeCode:i,typeCode:"t",subtype:"prompt",fieldName:"associatedType",fieldValue:a})).map((z6)=>({id:z6.object_id,name:z6.name,path:z6.path,subtype:z6.subtype}))}},s=async(n,{query:a,fieldName:i,store:J8="A"})=>{let M8=await G(n),{searchService:Q8}=await j(M8.projCtx);return await Q8.searchTextFields(Z,M8,{query:a,fieldName:i,storeCode:J8})},v8=async(n,{query:a,limit:i,offset:J8,startMarker:M8,endMarker:Q8,store:z6="A"})=>{let P6=await G(n),{searchService:x6}=await j(P6.projCtx);return await x6.search(Z,P6,{query:a,limit:i,offset:J8,startMarker:M8,endMarker:Q8,storeCode:z6})},W8=async(n,{store:a,ownerEntityId:i,ownerEntityTypeCode:J8,ownerEntityTypeSubtype:M8,name:Q8,label:z6,description:P6,primitiveType:x6,required:s6,multiplicity:c6,isSystem:J4})=>{let N7=await G(n),{transactionService:Q7}=await j(N7.projCtx);return await Q7.createFieldDefinition(N7,{store:a,ownerEntityId:i,ownerEntityTypeCode:J8,ownerEntityTypeSubtype:M8,name:Q8,label:z6,description:P6,primitiveType:x6,required:s6,multiplicity:c6,isSystem:J4})},D8=async(n,{id:a})=>{let i=await G(n),{fieldService:J8}=await j(i.projCtx);return await J8.readFieldDefinition(Z,i,{id:a})},E8=async(n,{store:a,ownerEntityId:i,includeSystem:J8})=>{let M8=await G(n),{fieldService:Q8}=await j(M8.projCtx);return await Q8.getFieldDefinitionsForOwner(Z,M8,{store:a,ownerEntityId:i,includeSystem:J8})},d8=async(n,{store:a,code:i,subtype:J8})=>{let M8=await G(n),{fieldService:Q8}=await j(M8.projCtx);return await Q8.getFieldDefinitionsForType(Z,M8,{store:a,code:i,subtype:J8})},m6=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.deleteFieldDefinition(i,{id:a})},n4=async(n,{id:a})=>{let i=await G(n),J8=Y1.parseId(a);if(!J8)throw Error(`Cannot parse entity ID: ${a}`);let{rootStore:M8}=await j(i.projCtx),{typeCode:Q8}=J8;switch(Q8){case"f":return await M8.readFolder(Z,i,{id:a});case"d":case"t":return await M8.readContent(Z,i,{id:a});case"s":return await M8.readStory(Z,i,{id:a});case"j":return await M8.readJob(Z,i,{id:a});default:throw Error(`Unsupported entity type code: ${Q8}`)}},k7=async(n,{entityId:a})=>{let i;try{i=await n4(n,{id:a})}catch(J8){if(J8.code==="PROJECT_NOT_FOUND")throw J8;return{}}if(!i)return{};return i.getFields()},p7=async(n,{entityId:a,fieldDefinitionId:i,fieldName:J8,value:M8,values:Q8})=>{let z6=await G(n),{transactionService:P6}=await j(z6.projCtx);return await P6.addFieldToEntity(z6,{entityId:a,fieldDefinitionId:i,fieldName:J8,value:M8,values:Q8})},W7=async(n,{entityId:a,fieldDefinitionId:i,fieldName:J8,value:M8,values:Q8})=>{let z6=await G(n),{transactionService:P6}=await j(z6.projCtx);return await P6.updateFieldValue(z6,{entityId:a,fieldDefinitionId:i,fieldName:J8,value:M8,values:Q8})},X3=async(n,{entityId:a,fieldDefinitionId:i,fieldName:J8})=>{let M8=await G(n),{transactionService:Q8}=await j(M8.projCtx);return await Q8.removeFieldFromEntity(M8,{entityId:a,fieldDefinitionId:i,fieldName:J8})},N5=async(n,{code:a,subtype:i,name:J8,parentSubtype:M8})=>{let Q8=await G(n),{transactionService:z6}=await j(Q8.projCtx);return await z6.createSubtype(Q8,{code:a,subtype:i,name:J8,parentSubtype:M8})},H4=async(n)=>{let a=await G(n),{exportService:i}=await j(a.projCtx);return await i.listExports(Z,a,{projectPath:a.projectPath})},Z9=async(n,{store:a="A"}={})=>{let i=await G(n),{exportService:J8}=await j(i.projCtx);return await J8.exportPreview(Z,i,{storeCode:a})},_8=async(n,{store:a="A",confirm:i=!1}={})=>{let J8=await G(n),{exportService:M8}=await j(J8.projCtx);if(!i)return await M8.exportPreview(Z,J8,{storeCode:a});return await M8.exportDocuments(Z,J8,{storeCode:a,projectPath:J8.projectPath})},L8=async(n,{filename:a,store:i="A"})=>{let J8=await G(n);b.factory(!a,I.validation,"filename is required","FILENAME_REQUIRED");let{importService:M8}=await j(J8.projCtx);return await M8.importDocuments(Z,J8,{filename:a,storeCode:i,projectPath:J8.projectPath})},Y8=async()=>{let{exportService:n}=await v();return await n.listExports(Z,{},{exportPath:H})},S8=async()=>{let{exportService:n}=await v();return await n.exportPreview(Z,{},{storeCode:"B"})},I8=async({confirm:n=!1}={})=>{let{exportService:a}=await v();if(!n)return await a.exportPreview(Z,{},{storeCode:"B"});return await a.exportDocuments(Z,{},{storeCode:"B",exportPath:H})},b8=async({filename:n})=>{b.factory(!n,I.validation,"filename is required","FILENAME_REQUIRED");let{importService:a}=await v();return await a.importDocuments(Z,{},{filename:n,storeCode:"B",exportPath:H})},G6=async(n,{name:a,store:i,state:J8})=>{let M8=await G(n),{transactionService:Q8}=await j(M8.projCtx);return await Q8.createStory(M8,{name:a,storeCode:i,state:J8})},x=async(n,{store:a})=>{let i=await G(n),{storyService:J8}=await j(i.projCtx);return await J8.listStories(Z,i,{store:a})},T8=async(n,{id:a})=>{let i=await G(n),{storyService:J8}=await j(i.projCtx);return await J8.getStory(Z,i,{id:a})},u=async(n,{id:a,state:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.updateStoryState(J8,{id:a,state:i})},t=async(n,{id:a,name:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.renameStory(J8,{id:a,name:i})},p=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.deleteStory(i,{id:a})},r=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.incrementStoryJobCount(i,{id:a})},o=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.decrementStoryJobCount(i,{id:a})},$8=async(n,{store:a,buffer:i,mimeType:J8,originalFilename:M8,widthPx:Q8,heightPx:z6,displayWidth:P6,displayHeight:x6})=>{let s6=await G(n),{transactionService:c6}=await j(s6.projCtx);return await c6.createAsset(s6,{store:a,buffer:i,mimeType:J8,originalFilename:M8,widthPx:Q8,heightPx:z6,displayWidth:P6,displayHeight:x6})},Z8=async(n,{id:a})=>{let i=await G(n),{assetService:J8}=await j(i.projCtx);return await J8.readAsset(Z,i,{id:a})},G8=async(n,{id:a})=>{let i=await G(n),{assetService:J8}=await j(i.projCtx);return await J8.readAssetBinary(Z,i,{id:a})},V8=async(n,{store:a})=>{let i=await G(n),{assetService:J8}=await j(i.projCtx);return await J8.listAssets(Z,i,{store:a})},N8=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.deleteAsset(i,{id:a})},o8=async(n,{name:a,agent:i,model:J8,prompt:M8,store:Q8="A",workingDirectory:z6,objectId:P6,streaming:x6})=>{let s6=await G(n),{transactionService:c6,jobService:J4,rootStore:N7}=await j(s6.projCtx),Q7=await c6.createJob(s6,{store:Q8,name:a,agent:i,model:J8,prompt:M8,workingDirectory:z6,objectId:P6,streaming:x6}),f5=Oh.create({jobService:J4,transactionService:c6,store:N7,db:Z,projectPath:s6.projectPath});return setImmediate(async()=>{try{await f5.runJob(Q7.id,s6)}catch(Uq){Z3("JobRunner error for job %s: %s",Q7.id,Uq.message);try{await c6.updateJobStatus(s6,{id:Q7.id,status:"error",errorMessage:Uq.message})}catch(xw){Z3("Failed to update job %s status to error: %s",Q7.id,xw.message)}}}),Q7},i8=async(n,{store:a="A",status:i})=>{let J8=await G(n),{jobService:M8}=await j(J8.projCtx);return await M8.listJobs(Z,J8,{store:a,status:i})},A6=async(n,{id:a})=>{let i=await G(n),{jobService:J8}=await j(i.projCtx);return await J8.getJob(Z,i,{id:a})},r6=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.deleteJob(i,{id:a})},d6=async(n,{id:a,prompt:i,model:J8})=>{let M8=await G(n),{transactionService:Q8,jobService:z6,rootStore:P6}=await j(M8.projCtx),x6=await Q8.continueJob(M8,{id:a,prompt:i,model:J8}),s6=Oh.create({jobService:z6,transactionService:Q8,store:P6,db:Z,projectPath:M8.projectPath});return setImmediate(async()=>{try{await s6.runJob(x6.id,M8)}catch(c6){Z3("JobRunner error for job %s: %s",x6.id,c6.message);try{await Q8.updateJobStatus(M8,{id:x6.id,status:"error",errorMessage:c6.message})}catch(J4){Z3("Failed to update job %s status to error: %s",x6.id,J4.message)}}}),x6},l6=async(n,{id:a,name:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.renameJob(J8,{id:a,name:i})},l1=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.stopJob(i,{id:a})},a1=async(n,{id:a})=>{let i=await G(n),{jobService:J8}=await j(i.projCtx);return await J8.getProcessStatus(Z,i,{id:a})},y$=async(n)=>{let a=await G(n),{worktreeService:i}=await j(a.projCtx);return await i.listWorktrees({projectPath:a.projectPath})},W$=async(n,{branch:a,baseBranch:i})=>{let J8=await G(n),{worktreeService:M8}=await j(J8.projCtx);return await M8.createWorktree({projectPath:J8.projectPath,branch:a,baseBranch:i})};if(z)z({db:Z,projectStore:O,storeStore:X});return Object.freeze({getProjects:M,getProjectByObjectId:N,createProject:j8,validateProjectPath:H8,createFolder:k,renameFolder:R,moveFolder:C,deleteFolder:L,getFolder:h,getFolderByPath:m,getRootForEntity:S,listFolderContents:f,getRootStore:g,getStoryService:U,getJobService:e,evictProject:p8,getDb:()=>Z,createDocument:H6,createTemplate:R8,readDocument:F8,readDocumentByPath:B8,checkIncludes:s8,updateIncludes:T6,updateDocumentPath:N6,deleteDocument:X6,specialiseDocument:R6,generaliseDocument:b6,saveDraft:X8,readDraft:P8,publishDocument:k8,discardDraft:x8,setEditState:l8,clearEditState:n8,getEditState:e8,readVersion:W6,getVersions:g8,editDocument:U8,batchEditDocument:a8,checkChecklistItem:q6,toggleChecklistItem:k6,batchCheckChecklistItems:I6,listDocuments:d,readLines:J1,readBetweenMarkers:q4,getDocumentStats:Y4,readHeadings:y8,readSection:u8,readFrontmatter:Q,readChecklist:c,renderTemplate:C8,getTemplateParameters:l,listTemplatesByType:O8,searchTextFields:s,searchContent:v8,createFieldDefinition:W8,readFieldDefinition:D8,getFieldDefinitions:E8,getTypeFields:d8,deleteFieldDefinition:m6,getFields:k7,readEntity:n4,addFieldToEntity:p7,updateFieldValue:W7,removeFieldFromEntity:X3,createSubtype:N5,listExports:H4,exportPreview:Z9,exportDocuments:_8,importDocuments:L8,listGlobalExports:Y8,globalExportPreview:S8,globalExportDocuments:I8,globalImportDocuments:b8,createStory:G6,listStories:x,getStory:T8,renameStory:t,updateStoryState:u,deleteStory:p,incrementStoryJobCount:r,decrementStoryJobCount:o,createAsset:$8,readAsset:Z8,readAssetBinary:G8,listAssets:V8,deleteAsset:N8,createJob:o8,listJobs:i8,getJob:A6,deleteJob:r6,continueJob:d6,stopJob:l1,renameJob:l6,getProcessStatus:a1,listWorktrees:y$,createWorktree:W$,listCrons:()=>P.list(),startCron:(n)=>P.start(n),stopCron:(n)=>P.stop(n),restartCron:(n)=>P.restart(n),startAllCrons:()=>P.startAll(),stopAllCrons:()=>P.stopAll(),registerCronJob:(n,a)=>{P.register(n,a)}})},Ri8=Object.freeze({create:rT1});var Ci8=n6(II(),1);import{join as sT1}from"path";var tT1=($,{staticPath:K})=>{return $.use(Ci8.default.static(K)),$.get("*",(q,Y,J)=>{if(q.path.startsWith("/api")||q.path==="/health")return J();Y.sendFile(sT1(K,"index.html"))}),Object.freeze({})},Di8=Object.freeze({create:tT1});var hi8=n6(k4(),1),Ph=hi8.default("caw:api:projects"),eT1=($,{core:K})=>{return $.get("/api/projects",async(q,Y)=>{try{Ph("GET /api/projects - Fetching projects list");let J=await K.getProjects();Ph("GET /api/projects - Returning %d projects",J.length),J.forEach((z)=>{Ph(" - %s (%s) with %d children",z.name,z.objectId,z.children?.length||0)}),Y.json(J)}catch(J){Ph("GET /api/projects - Error: %s",J.message),Y.status(500).json({error:J.message})}}),$.post("/api/projects/validate",async(q,Y)=>{try{let{path:J}=q.body,z=K.validateProjectPath(J);Y.json(z)}catch(J){if(J.code==="VALIDATION_ERROR")return Y.status(400).json({error:J.message,code:"VALIDATION_ERROR"});Y.status(500).json({error:J.message})}}),$.post("/api/projects",async(q,Y)=>{try{let{name:J,path:z}=q.body;if(!J||typeof J!=="string"||J.trim()==="")return Y.status(400).json({error:"Name is required",code:"VALIDATION_ERROR"});if(!z||typeof z!=="string"||z.trim()==="")return Y.status(400).json({error:"Path is required",code:"VALIDATION_ERROR"});if(J.length>255)return Y.status(400).json({error:"Name exceeds maximum length (255)",code:"VALIDATION_ERROR"});let W=await K.createProject({name:J.trim(),path:z.trim()});Y.status(201).json(W.toJSON())}catch(J){if(J.code==="DUPLICATE_PATH")return Y.status(409).json({error:J.message,code:"DUPLICATE_PATH"});console.error("Failed to create project:",J),Y.status(500).json({error:J.message})}}),Object.freeze({})},Ei8=Object.freeze({create:eT1});var Si8=n6(k4(),1);var $G1=($,K)=>{if($.isDomainError){let q=$.code==="UNAUTHORIZED"||$.code==="INVALID_TOKEN"?401:$.code==="NOT_FOUND"||$.code==="PROJECT_NOT_FOUND"||$.code==="EXPORT_NOT_FOUND"||$.code==="STORY_NOT_FOUND"||$.code==="JOB_NOT_FOUND"||$.code==="ASSET_NOT_FOUND"||$.code==="BLOB_NOT_FOUND"||$.code==="STORE_NOT_FOUND"||$.code==="INCLUDE_NOT_FOUND"||$.code==="INCLUDE_VERSION_NOT_FOUND"||$.code==="ENTITY_TYPE_NOT_FOUND"||$.code==="FOLDER_NOT_FOUND"?404:$.code==="CONFLICT"||$.code==="STORE_NOT_EMPTY"||$.code==="EDIT_CONFLICT"||$.code==="DUPLICATE_NAME"||$.code==="BRANCH_ALREADY_CHECKED_OUT"||$.code==="BRANCH_ALREADY_EXISTS"?409:$.code==="EXPORT_ERROR"||$.code==="STORY_ROOT_NOT_FOUND"?500:400;return K.status(q).json({error:$.message,code:$.code})}console.error("Unhandled error:",$),K.status(500).json({error:$.message})},w6=$G1;var w5=Si8.default("caw:api:folders"),Li8=($)=>({folders:$.folders.map((K)=>K.toJSON()),documents:$.documents.map((K)=>K.toJSON())}),KG1=($,{core:K})=>{return $.get("/api/p/:projectId/folders/contents",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z,type:W}=q.query;w5("GET /api/p/%s/folders/contents - Listing root contents: store=%s, type=%s",J,z,W);let Z=await K.listFolderContents(J,{folderId:null,store:z,type:W}),H=Li8(Z);w5("GET /api/p/%s/folders/contents - Found %d folders, %d documents",J,H.folders.length,H.documents.length),Y.json(H)}catch(J){w5("GET /api/p/%s/folders/contents - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/folders/by-path",async(q,Y)=>{try{let{projectId:J}=q.params,{path:z,store:W,type:Z}=q.query,H=await K.getFolderByPath(J,{path:z,store:W,type:Z});if(!H)return Y.status(404).json({error:"Not found"});Y.json(H.toJSON())}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/folders/:id/contents",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{type:W}=q.query;w5("GET /api/p/%s/folders/%s/contents - Listing folder contents: type=%s",J,z,W);let Z=await K.listFolderContents(J,{folderId:z,type:W}),H=Li8(Z);w5("GET /api/p/%s/folders/%s/contents - Found %d folders, %d documents",J,z,H.folders.length,H.documents.length),Y.json(H)}catch(J){w5("GET /api/p/%s/folders/%s/contents - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/folders/:id/root",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;w5("GET /api/p/%s/folders/%s/root - Getting root for entity",J,z);let W=await K.getRootForEntity(J,{id:z});w5("GET /api/p/%s/folders/%s/root - Found root: %s (type=%s, subtype=%s)",J,z,W.root.id,W.root.type,W.root.subtype),Y.json(W)}catch(J){w5("GET /api/p/%s/folders/%s/root - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/folders/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.getFolder(J,{id:z});if(!W)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});Y.json(W.toJSON())}catch(J){w6(J,Y)}}),$.post("/api/p/:projectId/folders",async(q,Y)=>{try{let{projectId:J}=q.params,{path:z,store:W,root:Z,parentId:H,name:O}=q.body,X=z&&W&&!Z&&!H,P=Z&&z&&!W&&!H;if([X,P,H&&O&&!z&&!Z].filter(Boolean).length!==1)return Y.status(400).json({error:"Exactly one creation mode required: (path+store), (root+path), or (parentId+name)",code:"INVALID_PARAMS"});let G;if(X)G="fullPath";else if(P)G="rootRelative";else G="parentName";w5("POST /api/p/%s/folders - Creating folder: mode=%s, path=%s, store=%s, root=%s, parentId=%s, name=%s",J,G,z,W,Z,H,O);let j=await K.createFolder(J,{mode:G,path:z,store:W,root:Z,parentId:H,name:O});w5("POST /api/p/%s/folders - Folder created: id=%s, path=%s",J,j.getObjectId(),j.getPath()),Y.status(201).json(j.toJSON())}catch(J){w5("POST /api/p/%s/folders - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.delete("/api/p/:projectId/folders/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.deleteFolder(J,{id:z});Y.json(W)}catch(J){w6(J,Y)}}),$.patch("/api/p/:projectId/folders/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{name:W,parentId:Z}=q.body;if(W&&Z)return Y.status(400).json({error:"Provide only name or parentId, not both",code:"INVALID_REQUEST"});if(!W&&!Z)return Y.status(400).json({error:"Provide name or parentId",code:"INVALID_REQUEST"});let H;if(W)H=await K.renameFolder(J,{id:z,name:W});else H=await K.moveFolder(J,{id:z,parentId:Z});Y.json(H.toJSON())}catch(J){w6(J,Y)}}),Object.freeze({})},Ii8=Object.freeze({create:KG1});var qG1=($,{core:K})=>{return $.post("/api/p/:projectId/field-definitions",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z,ownerEntityId:W,ownerEntityTypeCode:Z,ownerEntityTypeSubtype:H,name:O,label:X,description:P,primitiveType:w,required:T,multiplicity:G}=q.body,j=await K.createFieldDefinition(J,{store:z,ownerEntityId:W??null,ownerEntityTypeCode:Z,ownerEntityTypeSubtype:H,name:O,label:X??null,description:P??null,primitiveType:w,required:T??!1,multiplicity:G??"single"});Y.status(201).json(j.toJSON())}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/types/:code/:subtype/fields",async(q,Y)=>{try{let{projectId:J,code:z,subtype:W}=q.params,{store:Z}=q.query,H=await K.getTypeFields(J,{store:Z||"A",code:z,subtype:W});Y.json({fields:H.map((O)=>({...O.entity.toJSON(),inherited:O.inherited,sourcePk:O.sourcePk}))})}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/field-definitions/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.readFieldDefinition(J,{id:z});if(!W)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});Y.json(W.toJSON())}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/field-definitions",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z,ownerEntityId:W,includeSystem:Z}=q.query,H=await K.getFieldDefinitions(J,{store:z,ownerEntityId:W??null,includeSystem:Z==="true"});Y.json(H.map((O)=>O.toJSON()))}catch(J){w6(J,Y)}}),$.delete("/api/p/:projectId/field-definitions/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.deleteFieldDefinition(J,{id:z});Y.json(W.toJSON())}catch(J){w6(J,Y)}}),$.put("/api/p/:projectId/entities/:id/fields/:fieldName",async(q,Y)=>{try{let{projectId:J,id:z,fieldName:W}=q.params,{fieldDefinitionId:Z,value:H,values:O}=q.body,X={entityId:z,fieldDefinitionId:Z!==void 0?Z:null,fieldName:W};if(H!==void 0)X.value=H;if(O!==void 0)X.values=O;if((await K.getFields(J,{entityId:z}))?.[W])await K.updateFieldValue(J,X);else await K.addFieldToEntity(J,X);let T=await K.readEntity(J,{id:z});Y.json(T.toJSON())}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/entities/:id/fields",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.getFields(J,{entityId:z}),Z={};for(let[H,O]of Object.entries(W))Z[H]=O.toJSON();Y.json(Z)}catch(J){w6(J,Y)}}),$.delete("/api/p/:projectId/entities/:id/fields/:fieldName",async(q,Y)=>{try{let{projectId:J,id:z,fieldName:W}=q.params,{fieldDefinitionId:Z}=q.query,H={entityId:z,fieldName:W};if(Z!==void 0)H.fieldDefinitionId=Z;await K.removeFieldFromEntity(J,H),Y.status(204).send()}catch(J){w6(J,Y)}}),Object.freeze({})},xi8=Object.freeze({create:qG1});var gi8=n6(k4(),1);var T5=gi8.default("caw:api:documents"),YG1=($,{core:K})=>{return $.post("/api/p/:projectId/documents",async(q,Y)=>{try{let{projectId:J}=q.params,{path:z,store:W,root:Z,parentId:H,name:O,content:X,subtype:P,fields:w}=q.body,T=z&&W&&!Z&&!H,G=Z&&z&&!W&&!H;if([T,G,H&&O&&!z&&!Z].filter(Boolean).length!==1)return Y.status(400).json({error:"Exactly one creation mode required: (path+store), (root+path), or (parentId+name)",code:"INVALID_PARAMS"});let M;if(T)M="fullPath";else if(G)M="rootRelative";else M="parentName";T5("POST /api/p/%s/documents - Creating document: mode=%s, path=%s, store=%s, root=%s, parentId=%s, name=%s, hasContent=%s",J,M,z,W,Z,H,O,!!X);let k=(await K.createDocument(J,{mode:M,path:z,store:W,root:Z,parentId:H,name:O,content:X,subtype:P,fields:w})).toJSON();T5("POST /api/p/%s/documents - Document created: id=%s, path=%s",J,k.id,k.path),Y.status(201).json(k)}catch(J){T5("POST /api/p/%s/documents - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.post("/api/p/:projectId/templates",async(q,Y)=>{try{let{projectId:J}=q.params,{path:z,store:W,root:Z,parentId:H,name:O,content:X,subtype:P}=q.body,w=z&&W&&!Z&&!H,T=Z&&z&&!W&&!H;if([w,T,H&&O&&!z&&!Z].filter(Boolean).length!==1)return Y.status(400).json({error:"Exactly one creation mode required: (path+store), (root+path), or (parentId+name)",code:"INVALID_PARAMS"});let v;if(w)v="fullPath";else if(T)v="rootRelative";else v="parentName";T5("POST /api/p/%s/templates - Creating template: mode=%s, path=%s, store=%s, root=%s, parentId=%s, name=%s, hasContent=%s",J,v,z,W,Z,H,O,!!X);let N=(await K.createTemplate(J,{mode:v,path:z,store:W,root:Z,parentId:H,name:O,content:X,subtype:P})).toJSON();T5("POST /api/p/%s/templates - Template created: id=%s, path=%s",J,N.id,N.path),Y.status(201).json(N)}catch(J){T5("POST /api/p/%s/templates - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/documents/by-path",async(q,Y)=>{try{let{projectId:J}=q.params,{path:z,store:W,type:Z="d",resolveIncludes:H="true"}=q.query,O=await K.readDocumentByPath(J,{path:z,store:W,type:Z,resolveIncludes:H!=="false"});if(!O)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});let{entity:X,ancestorFolderIds:P,resolvedContent:w}=O,T={...X.toJSON(),ancestorFolderIds:P};if(w!==null)T.resolvedContent=w;Y.json(T)}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents",async(q,Y)=>{try{let{projectId:J}=q.params,{folderId:z,store:W,type:Z="d"}=q.query,H=await K.listDocuments(J,{folderId:z??null,store:W,type:Z});Y.json(H.map((O)=>O.toJSON()))}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/templates/by-type/:typeCode",async(q,Y)=>{try{let{projectId:J,typeCode:z}=q.params,{store:W}=q.query,Z=await K.listTemplatesByType(J,{typeCode:z,store:W});Y.json(Z)}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents/:id/parameters",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{entity:W}=await K.readDocument(J,{id:z});if(!W)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});let Z=W.getPublishedContent();if(!Z)return Y.json({id:z,path:W.getPath(),parameters:{},target:null,targetPath:null,targetParentId:null,targetName:null,targetRoot:null,targetStore:null,targetJobName:null,targetJobAgent:null,targetJobModel:null,targetJobWorktree:null,targetJobSkipDialog:!1,skipDialog:!1,detectedVariables:[]});try{let{parameters:H,target:O,targetPath:X,targetParentId:P,targetName:w,targetRoot:T,targetStore:G,targetJobName:j,targetJobAgent:v,targetJobModel:M,targetJobWorktree:N,targetJobSkipDialog:k,skipDialog:R}=rK.getParameters(Z),{body:C}=rK.parseFrontMatter(Z),L=Array.from(rK.extractVariables(C));Y.json({id:z,path:W.getPath(),parameters:H,target:O,targetPath:X,targetParentId:P,targetName:w,targetRoot:T,targetStore:G,targetJobName:j,targetJobAgent:v,targetJobModel:M,targetJobWorktree:N,targetJobSkipDialog:k,skipDialog:R,detectedVariables:L})}catch(H){return Y.json({id:z,path:W.getPath(),parameters:{},target:null,targetPath:null,targetParentId:null,targetName:null,targetRoot:null,targetStore:null,targetJobName:null,targetJobAgent:null,targetJobModel:null,targetJobWorktree:null,targetJobSkipDialog:!1,skipDialog:!1,detectedVariables:[],parseError:H.message})}}catch(J){w6(J,Y)}}),$.post("/api/p/:projectId/documents/:id/render",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{params:W,target:Z,targetOptions:H}=q.body,O=await K.renderTemplate(J,{id:z,params:W,target:Z,targetOptions:H,sessionId:q.sessionId});Y.json(O)}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{resolveIncludes:W="true"}=q.query,{entity:Z,ancestorFolderIds:H,resolvedContent:O}=await K.readDocument(J,{id:z,resolveIncludes:W!=="false"});if(!Z)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});let X={...Z.toJSON(),ancestorFolderIds:H};if(O!==null)X.resolvedContent=O;Y.json(X)}catch(J){w6(J,Y)}}),$.patch("/api/p/:projectId/documents/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{path:W,parentId:Z}=q.body,H=Y1.getTypeFromId(z),O=await K.updateDocumentPath(J,{id:z,path:W,parentId:Z,type:H});Y.json(O.toJSON())}catch(J){w6(J,Y)}}),$.delete("/api/p/:projectId/documents/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.deleteDocument(J,{id:z});Y.json(W)}catch(J){w6(J,Y)}}),$.put("/api/p/:projectId/documents/:id/draft",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{content:W}=q.body,Z=q.sessionId;if(W===void 0)return Y.status(400).json({error:"content is required",code:"MISSING_CONTENT"});let H=await K.saveDraft(J,{id:z,content:W,sessionId:Z});Y.json({id:z,updated:!0,lockLost:H.lockLost??!1})}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents/:id/draft",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.readDraft(J,{id:z});Y.json(W)}catch(J){w6(J,Y)}}),$.post("/api/p/:projectId/documents/:id/publish",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.publishDocument(J,{id:z,sessionId:q.sessionId});Y.json(W)}catch(J){w6(J,Y)}}),$.delete("/api/p/:projectId/documents/:id/draft",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;await K.discardDraft(J,{id:z}),Y.json({id:z,discarded:!0})}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents/:id/versions",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.getVersions(J,{id:z});Y.json(W)}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents/:id/versions/:versionNumber",async(q,Y)=>{try{let{projectId:J,id:z,versionNumber:W}=q.params,Z=await K.readVersion(J,{id:z,versionNumber:parseInt(W,10)});if(!Z)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});Y.json(Z)}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents/:id/edit-state",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.getEditState(J,{id:z});if(!W)return Y.json({locked:!1});Y.json({locked:!0,locked_at:W.startedAt})}catch(J){w6(J,Y)}}),$.post("/api/p/:projectId/documents/:id/edit-state",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=q.sessionId;if(!W)return Y.status(400).json({error:"X-Session-Id header required",code:"MISSING_SESSION_ID"});let Z=await K.setEditState(J,{id:z,sessionId:W});if(!Z.success)return Y.status(409).json(Z);Y.json(Z)}catch(J){w6(J,Y)}}),$.delete("/api/p/:projectId/documents/:id/edit-state",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;await K.clearEditState(J,{id:z}),Y.json({success:!0})}catch(J){w6(J,Y)}}),$.post("/api/p/:projectId/documents/:id/specialise",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{subtype:W,fields:Z}=q.body;T5("POST /api/p/%s/documents/%s/specialise - subtype=%s, hasFields=%s",J,z,W,!!Z);let O=(await K.specialiseDocument(J,{id:z,subtype:W,fields:Z})).entity.toJSON();T5("POST /api/p/%s/documents/%s/specialise - Success: subtype=%s",J,z,O.subtype),Y.json(O)}catch(J){T5("POST /api/p/%s/documents/%s/specialise - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.post("/api/p/:projectId/documents/:id/generalise",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;T5("POST /api/p/%s/documents/%s/generalise",J,z);let Z=(await K.generaliseDocument(J,{id:z})).entity.toJSON();T5("POST /api/p/%s/documents/%s/generalise - Success: subtype=%s",J,z,Z.subtype),Y.json(Z)}catch(J){T5("POST /api/p/%s/documents/%s/generalise - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),Object.freeze({})},yi8=Object.freeze({create:YG1});var bi8=n6(k4(),1);var S9=bi8.default("caw:api:export"),JG1=($,{core:K})=>{return $.get("/api/p/:projectId/exports",async(q,Y)=>{try{let{projectId:J}=q.params;S9("GET /api/p/%s/exports - Listing export files",J);let z=await K.listExports(J);S9("GET /api/p/%s/exports - Found %d export files",J,z.length),Y.json({ok:!0,exports:z})}catch(J){S9("GET /api/p/:projectId/exports - Error: %s",J.message),w6(J,Y)}}),$.get("/api/p/:projectId/export/preview",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z}=q.query;S9("GET /api/p/%s/export/preview - Previewing export: store=%s",J,z);let W=await K.exportPreview(J,{store:z});S9("GET /api/p/%s/export/preview - Preview complete: %d to export, %d draft-only",J,(W.toExport?.folders?.length||0)+(W.toExport?.documents?.length||0)+(W.toExport?.templates?.length||0),(W.draftOnly?.documents?.length||0)+(W.draftOnly?.templates?.length||0)),Y.json(W)}catch(J){S9("GET /api/p/:projectId/export/preview - Error: %s",J.message),w6(J,Y)}}),$.post("/api/p/:projectId/export",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z,confirm:W}=q.body;S9("POST /api/p/%s/export - Export request: store=%s, confirm=%s",J,z,W);let Z=await K.exportDocuments(J,{store:z,confirm:W});if(W)S9("POST /api/p/%s/export - Export complete: %s",J,Z.filename);else S9("POST /api/p/%s/export - Preview returned (confirm=false)",J);Y.json(Z)}catch(J){S9("POST /api/p/:projectId/export - Error: %s",J.message),w6(J,Y)}}),$.post("/api/p/:projectId/import",async(q,Y)=>{try{let{projectId:J}=q.params,{filename:z,store:W}=q.body;S9("POST /api/p/%s/import - Import request: filename=%s, store=%s",J,z,W);let Z=await K.importDocuments(J,{filename:z,store:W});S9("POST /api/p/%s/import - Import complete: %d folders, %d documents, %d templates",J,Z.counts?.folders||0,Z.counts?.documents||0,Z.counts?.templates||0),Y.json({ok:!0,...Z})}catch(J){S9("POST /api/p/:projectId/import - Error: %s",J.message),w6(J,Y)}}),Object.freeze({})},ui8=Object.freeze({create:JG1});var mi8=n6(k4(),1);var I9=mi8.default("caw:api:export"),zG1=($,{core:K})=>{return $.get("/api/shared/exports",async(q,Y)=>{try{I9("GET /api/shared/exports - Listing shared store export files");let J=await K.listGlobalExports();I9("GET /api/shared/exports - Found %d export files",J.length),Y.json({ok:!0,exports:J})}catch(J){I9("GET /api/shared/exports - Error: %s",J.message),w6(J,Y)}}),$.get("/api/shared/export/preview",async(q,Y)=>{try{I9("GET /api/shared/export/preview - Previewing shared store export");let J=await K.globalExportPreview();I9("GET /api/shared/export/preview - Preview complete: %d to export, %d draft-only",(J.toExport?.folders?.length||0)+(J.toExport?.documents?.length||0)+(J.toExport?.templates?.length||0),(J.draftOnly?.documents?.length||0)+(J.draftOnly?.templates?.length||0)),Y.json(J)}catch(J){I9("GET /api/shared/export/preview - Error: %s",J.message),w6(J,Y)}}),$.post("/api/shared/export",async(q,Y)=>{try{let{confirm:J}=q.body;I9("POST /api/shared/export - Export request: confirm=%s",J);let z=await K.globalExportDocuments({confirm:J});if(J)I9("POST /api/shared/export - Export complete: %s",z.filename);else I9("POST /api/shared/export - Preview returned (confirm=false)");Y.json(z)}catch(J){I9("POST /api/shared/export - Error: %s",J.message),w6(J,Y)}}),$.post("/api/shared/import",async(q,Y)=>{try{let{filename:J}=q.body;I9("POST /api/shared/import - Import request: filename=%s",J);let z=await K.globalImportDocuments({filename:J});I9("POST /api/shared/import - Import complete: %d folders, %d documents, %d templates",z.counts?.folders||0,z.counts?.documents||0,z.counts?.templates||0),Y.json({ok:!0,...z})}catch(J){I9("POST /api/shared/import - Error: %s",J.message),w6(J,Y)}}),Object.freeze({})},Bi8=Object.freeze({create:zG1});var Ui8=n6(k4(),1);var G5=Ui8.default("caw:api:stories"),WG1=($,{core:K})=>{return $.post("/api/p/:projectId/stories",async(q,Y)=>{try{let{projectId:J}=q.params,{name:z,store:W="A",state:Z}=q.body;G5("POST /api/p/%s/stories - Creating story: name=%s, store=%s, state=%s",J,z,W,Z);let H=await K.createStory(J,{name:z,store:W,state:Z});Y.status(201).json(H)}catch(J){G5("POST /api/p/%s/stories - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/stories",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z="A"}=q.query;G5("GET /api/p/%s/stories - Listing stories: store=%s",J,z);let W=await K.listStories(J,{store:z});Y.json(W)}catch(J){G5("GET /api/p/%s/stories - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/stories/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;G5("GET /api/p/%s/stories/%s - Getting story",J,z);let W=await K.getStory(J,{id:z});if(!W)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});Y.json(W)}catch(J){G5("GET /api/p/%s/stories/%s - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.patch("/api/p/:projectId/stories/:id/state",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{state:W}=q.body;if(!W)return Y.status(400).json({error:"State is required",code:"MISSING_STATE"});G5("PATCH /api/p/%s/stories/%s/state - Updating state to: %s",J,z,W);let Z=await K.updateStoryState(J,{id:z,state:W});Y.json(Z)}catch(J){G5("PATCH /api/p/%s/stories/%s/state - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.patch("/api/p/:projectId/stories/:id/name",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{name:W}=q.body;if(!W)return Y.status(400).json({error:"Name is required",code:"MISSING_NAME"});G5("PATCH /api/p/%s/stories/%s/name - Renaming to: %s",J,z,W);let Z=await K.renameStory(J,{id:z,name:W});Y.json(Z)}catch(J){G5("PATCH /api/p/%s/stories/%s/name - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.delete("/api/p/:projectId/stories/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;G5("DELETE /api/p/%s/stories/%s - Deleting story",J,z);let W=await K.deleteStory(J,{id:z});Y.json(W)}catch(J){G5("DELETE /api/p/%s/stories/%s - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),Object.freeze({})},Fi8=Object.freeze({create:WG1});var Xo8=n6(k4(),1),Ih=n6(Ho8(),1);var Lq=Xo8.default("caw:api:assets"),Oo8=["image/png","image/jpeg","image/gif","image/webp"],ov1=Ih.default({storage:Ih.default.memoryStorage(),limits:{fileSize:10485760},fileFilter:($,K,q)=>{if(Oo8.includes(K.mimetype))q(null,!0);else q(Error(`Unsupported MIME type: ${K.mimetype}. Allowed: ${Oo8.join(", ")}`))}}),av1=($,{core:K})=>{return $.post("/api/p/:projectId/assets",ov1.single("file"),async(q,Y)=>{try{let{projectId:J}=q.params,{store:z="A"}=q.query,W=q.file;if(!W)return Y.status(400).json({error:"No file uploaded",code:"MISSING_FILE"});let Z=q.body.widthPx?parseInt(q.body.widthPx,10):void 0,H=q.body.heightPx?parseInt(q.body.heightPx,10):void 0,O=q.body.displayWidth?parseInt(q.body.displayWidth,10):void 0,X=q.body.displayHeight?parseInt(q.body.displayHeight,10):void 0;Lq("POST /api/p/%s/assets - Uploading: %s (%s, %d bytes)",J,W.originalname,W.mimetype,W.size);let P=await K.createAsset(J,{store:z,buffer:W.buffer,mimeType:W.mimetype,originalFilename:W.originalname,widthPx:Z,heightPx:H,displayWidth:O,displayHeight:X});Y.status(201).json(P)}catch(J){Lq("POST /api/p/%s/assets - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/assets/:id/binary",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;Lq("GET /api/p/%s/assets/%s/binary - Retrieving binary",J,z);let W=await K.readAssetBinary(J,{id:z});Y.set("Content-Type",W.mimeType),Y.set("Content-Length",W.sizeBytes),Y.set("Cache-Control","public, max-age=31536000, immutable"),Y.set("Content-Disposition",`inline; filename="${W.originalFilename}"`),Y.send(W.buffer)}catch(J){Lq("GET /api/p/%s/assets/%s/binary - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/assets/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;Lq("GET /api/p/%s/assets/%s - Retrieving metadata",J,z);let W=await K.readAsset(J,{id:z});Y.json(W)}catch(J){Lq("GET /api/p/%s/assets/%s - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/assets",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z="A"}=q.query;Lq("GET /api/p/%s/assets - Listing assets for store %s",J,z);let W=await K.listAssets(J,{store:z});Y.json(W)}catch(J){Lq("GET /api/p/%s/assets - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.delete("/api/p/:projectId/assets/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;Lq("DELETE /api/p/%s/assets/%s - Deleting asset",J,z);let W=await K.deleteAsset(J,{id:z});Y.json(W)}catch(J){Lq("DELETE /api/p/%s/assets/%s - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.use("/api/p/:projectId/assets",(q,Y,J,z)=>{if(q instanceof Ih.default.MulterError){if(q.code==="LIMIT_FILE_SIZE")return J.status(400).json({error:"File too large. Maximum size is 10MB.",code:"FILE_TOO_LARGE"});return J.status(400).json({error:q.message,code:"UPLOAD_ERROR"})}if(q.message&&q.message.includes("Unsupported MIME type"))return J.status(400).json({error:q.message,code:"UNSUPPORTED_MIME_TYPE"});z(q)}),Object.freeze({})},Po8=Object.freeze({create:av1});var wo8=n6(k4(),1);var $9=wo8.default("caw:api:jobs"),rv1=($,{core:K})=>{return $.post("/api/p/:projectId/jobs",async(q,Y)=>{try{let{projectId:J}=q.params,{name:z,agent:W,model:Z,prompt:H,store:O="A",workingDirectory:X,objectId:P,streaming:w}=q.body;$9("POST /api/p/%s/jobs - Creating job: agent=%s, model=%s, store=%s, workingDirectory=%s, objectId=%s, streaming=%s",J,W,Z,O,X||"default",P||"none",w||!1);let T=await K.createJob(J,{name:z,agent:W,model:Z,prompt:H,store:O,workingDirectory:X,objectId:P,streaming:w});Y.status(201).json(T)}catch(J){$9("POST /api/p/%s/jobs - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/jobs",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z="A",status:W}=q.query;$9("GET /api/p/%s/jobs - Listing jobs: store=%s, status=%s",J,z,W||"all");let Z=await K.listJobs(J,{store:z,status:W});Y.json(Z)}catch(J){$9("GET /api/p/%s/jobs - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/jobs/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;$9("GET /api/p/%s/jobs/%s - Getting job",J,z);let W=await K.getJob(J,{id:z});if(!W)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});Y.json(W)}catch(J){$9("GET /api/p/%s/jobs/%s - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.post("/api/p/:projectId/jobs/:id/continue",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{prompt:W,model:Z}=q.body;$9("POST /api/p/%s/jobs/%s/continue - Continuing job",J,z);let H=await K.continueJob(J,{id:z,prompt:W,model:Z});Y.json(H)}catch(J){$9("POST /api/p/%s/jobs/%s/continue - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.post("/api/p/:projectId/jobs/:id/stop",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;$9("POST /api/p/%s/jobs/%s/stop - Stopping job",J,z);let W=await K.stopJob(J,{id:z});Y.json(W)}catch(J){$9("POST /api/p/%s/jobs/%s/stop - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/jobs/:id/process-status",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;$9("GET /api/p/%s/jobs/%s/process-status",J,z);let W=await K.getProcessStatus(J,{id:z});Y.json(W)}catch(J){$9("GET /api/p/%s/jobs/%s/process-status - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.patch("/api/p/:projectId/jobs/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{name:W}=q.body;$9("PATCH /api/p/%s/jobs/%s - Renaming job",J,z);let Z=await K.renameJob(J,{id:z,name:W});Y.json(Z)}catch(J){$9("PATCH /api/p/%s/jobs/%s - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),Object.freeze({})},To8=Object.freeze({create:rv1});var Go8=n6(k4(),1);var tP=Go8.default("caw:api:worktrees"),sv1=($,{core:K})=>{return $.get("/api/p/:projectId/worktrees",async(q,Y)=>{try{let{projectId:J}=q.params;tP("GET /api/p/%s/worktrees - Listing worktrees",J);let z=await K.listWorktrees(J);tP("GET /api/p/%s/worktrees - Found %d worktrees, isGitProject=%s",J,z.worktrees.length,z.isGitProject),Y.json(z)}catch(J){tP("GET /api/p/%s/worktrees - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.post("/api/p/:projectId/worktrees",async(q,Y)=>{try{let{projectId:J}=q.params,{branch:z,baseBranch:W}=q.body;tP("POST /api/p/%s/worktrees - Creating worktree: branch=%s, baseBranch=%s",J,z,W||"default");let Z=await K.createWorktree(J,{branch:z,baseBranch:W});tP("POST /api/p/%s/worktrees - Created worktree at %s for branch %s",J,Z.path,Z.branch),Y.status(201).json(Z)}catch(J){tP("POST /api/p/%s/worktrees - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),Object.freeze({})},jo8=Object.freeze({create:sv1});var vo8=n6(k4(),1);var ln=vo8.default("caw:api:search"),tv1=($,{core:K})=>{return $.get("/api/p/:projectId/search",async(q,Y)=>{try{let{projectId:J}=q.params,{q:z,store:W,limit:Z,offset:H}=q.query,O=Z?parseInt(Z,10):20,X=H?parseInt(H,10):0,P=Z?parseInt(Z,10):void 0,w=H?parseInt(H,10):void 0;ln("GET /api/p/%s/search - q=%s, store=%s, limit=%s, offset=%s",J,z,W,Z,H);let T=await K.searchContent(J,{query:z,limit:P,offset:w,store:W});ln("GET /api/p/%s/search - Results count: %d",J,T.length),Y.json({hits:T,limit:O,offset:X})}catch(J){ln("GET /api/p/%s/search - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),Object.freeze({})},Vo8=Object.freeze({create:tv1});var Ao8=n6(k4(),1);var EZ=Ao8.default("caw:api:events"),ev1=($,{core:K})=>{return $.get("/api/p/:projectId/events",async(q,Y)=>{try{let{projectId:J}=q.params;EZ("GET /api/p/%s/events - Client connecting",J);let z=await K.getRootStore(J),W=await K.getStoryService(J),Z=await K.getJobService(J);EZ("GET /api/p/%s/events - Got root store and services, setting up SSE subscription",J),Y.setHeader("Content-Type","text/event-stream"),Y.setHeader("Cache-Control","no-cache"),Y.setHeader("Connection","keep-alive"),Y.flushHeaders(),Y.write(`: connected
|
|
625
|
+
`),z={path:null,commit:null,branch:null,isLocked:!1,isMain:!1};for(let W of J)if(W.startsWith("worktree "))z.path=W.slice(9);else if(W.startsWith("HEAD "))z.commit=W.slice(5);else if(W.startsWith("branch ")){let Z=W.slice(7);z.branch=Z.replace("refs/heads/","")}else if(W==="detached");else if(W==="locked")z.isLocked=!0;else if(W.startsWith("locked "))z.isLocked=!0;if(z.path)K.push(z)}if(K.length>0)K[0].isMain=!0;return K},cP=($,K)=>{return new Promise((q)=>{let Y=pT1("git",$,{cwd:K}),J="",z="";Y.stdout.on("data",(W)=>{J+=W.toString()}),Y.stderr.on("data",(W)=>{z+=W.toString()}),Y.on("close",(W)=>{q({stdout:J,stderr:z,exitCode:W})}),Y.on("error",(W)=>{if(W.code==="ENOENT")q({stdout:"",stderr:"git: command not found",exitCode:-1,enoent:!0});else q({stdout:"",stderr:W.message,exitCode:-1})})})},lT1=()=>{let $=async({projectPath:Y})=>{b.factory(!Y,I.validation,"projectPath is required","MISSING_PROJECT_PATH"),i4("listWorktrees: Running git worktree list --porcelain in %s",Y);let J=await cP(["worktree","list","--porcelain"],Y);if(J.enoent)throw i4("listWorktrees: Git not found"),I.validation("Git not installed or not found in PATH","GIT_NOT_FOUND");if(J.stderr&&J.stderr.includes("not a git repository"))return i4("listWorktrees: Not a git repository"),{worktrees:[],isGitProject:!1};if(J.exitCode!==0)throw i4("listWorktrees: Git command failed with exit code %d: %s",J.exitCode,J.stderr),Error(`Git worktree list failed: ${J.stderr||"Unknown error"}`);let z=cT1(J.stdout);i4("listWorktrees: Parsed %d worktrees",z.length);let W=z.filter((Z)=>!Z.isMain).map((Z)=>({branch:Z.branch,path:Z.path,commit:Z.commit,isLocked:Z.isLocked}));return i4("listWorktrees: Returning %d worktrees (excluding main)",W.length),{worktrees:W,isGitProject:!0}},K=async(Y)=>{if(i4("getDefaultBaseBranch: Checking for main branch in %s",Y),(await cP(["show-ref","--verify","--quiet","refs/heads/main"],Y)).exitCode===0)return i4("getDefaultBaseBranch: Detected default branch: main"),"main";if(i4("getDefaultBaseBranch: main not found, checking for master branch"),(await cP(["show-ref","--verify","--quiet","refs/heads/master"],Y)).exitCode===0)return i4("getDefaultBaseBranch: Detected default branch: master"),"master";throw i4("getDefaultBaseBranch: Neither main nor master branch found"),I.validation("No default branch found (neither main nor master exists)","NO_DEFAULT_BRANCH")};return Object.freeze({listWorktrees:$,createWorktree:async({projectPath:Y,branch:J,baseBranch:z})=>{b.factory(!Y,I.validation,"projectPath is required","MISSING_PROJECT_PATH"),b.factory(!J,I.validation,"branch is required","MISSING_BRANCH"),i4("createWorktree: Creating worktree for branch %s in %s",J,Y),i4("createWorktree: Validating branch name: %s",J);let W=await cP(["check-ref-format","--branch",J],Y);if(W.enoent)throw i4("createWorktree: Git not found"),I.validation("Git not installed or not found in PATH","GIT_NOT_FOUND");if(W.exitCode!==0)throw i4("createWorktree: Invalid branch name: %s",J),I.validation(`Invalid branch name: ${J}`,"INVALID_BRANCH_NAME");let Z=z;if(!Z){i4("createWorktree: No baseBranch provided, detecting default");try{Z=await K(Y)}catch(X){if(X.code==="NO_DEFAULT_BRANCH"){let P=await cP(["status","--porcelain"],Y);if(P.stderr&&P.stderr.includes("not a git repository"))throw i4("createWorktree: Not a git repository"),I.validation("Not a git repository","NOT_GIT_REPOSITORY")}throw X}}let H=QT1(Y,"worktree",J);i4("createWorktree: Worktree path will be: %s",H),i4("createWorktree: Running git worktree add %s -b %s %s",H,J,Z);let O=await cP(["worktree","add",H,"-b",J,Z],Y);if(O.enoent)throw i4("createWorktree: Git not found"),I.validation("Git not installed or not found in PATH","GIT_NOT_FOUND");if(O.stderr&&O.stderr.includes("not a git repository"))throw i4("createWorktree: Not a git repository"),I.validation("Not a git repository","NOT_GIT_REPOSITORY");if(O.stderr&&O.stderr.includes("is already checked out"))throw i4("createWorktree: Branch %s is already checked out",J),I.conflict(`Branch '${J}' is already checked out in another worktree`,"BRANCH_ALREADY_CHECKED_OUT");if(O.stderr&&O.stderr.includes("already exists"))throw i4("createWorktree: Branch %s already exists",J),I.conflict(`Branch '${J}' already exists`,"BRANCH_ALREADY_EXISTS");if(O.exitCode!==0)throw i4("createWorktree: Git worktree add failed with exit code %d: %s",O.exitCode,O.stderr),Error(`Git worktree add failed: ${O.stderr||"Unknown error"}`);return i4("createWorktree: Successfully created worktree at %s for branch %s",H,J),{path:H,branch:J}},getDefaultBaseBranch:K})};var vi8=Object.freeze({create:lT1});y1();var Mi8=n6(k4(),1);EO();var Vi8=Mi8.default("caw:entity-type-service"),Ai8=Object.freeze(["d","f","t","s"]),iT1=/^[a-zA-Z][a-zA-Z0-9_]*$/,dT1=({store:$})=>{return Object.freeze({createSubtype:async(q,Y,{code:J,subtype:z,name:W,parentSubtype:Z},H)=>{Vi8("createSubtype called: code=%s, subtype=%s, name=%s, parentSubtype=%s",J,z,W,Z),b.factory(!Ai8.includes(J),I.validation,`Invalid parent type code: ${J}. Must be one of: ${Ai8.join(", ")}`,"INVALID_PARENT_TYPE"),b.factory(!z||!iT1.test(z),I.validation,`Invalid subtype name: ${z}. Must start with letter, contain only alphanumeric and underscores`,"INVALID_SUBTYPE_NAME"),b.factory(!W||!W.trim(),I.validation,"Display name is required","MISSING_NAME");let O=null;if(Z!==void 0)try{O=await E6.readEntityTypeId(q,Y,J,Z)}catch(P){let w=Z===null?`${J}/null`:`${J}/${Z}`;throw I.notFound(`Parent type not found: ${w}`,"PARENT_TYPE_NOT_FOUND")}let X=await $.createEntityType(q,Y,{code:J,subtype:z,name:W,parentTypePk:O});return Vi8("createSubtype succeeded: id=%d, code=%s, subtype=%s, parentTypePk=%s",X.id,J,z,O),X}})},_i8=Object.freeze({create:dT1});y1();var Jn=($)=>{if(!$||$.trim()==="")return $;let K=[],q=$,Y=0,J=/"[^"]*"/g,z;while((z=J.exec($))!==null){if(z.index>Y)K.push({type:"unquoted",content:$.slice(Y,z.index)});K.push({type:"quoted",content:z[0]}),Y=z.index+z[0].length}if(Y<$.length)K.push({type:"unquoted",content:$.slice(Y)});if(K.length===0)K.push({type:"unquoted",content:$});return K.map((Z)=>{if(Z.type==="quoted")return Z.content;return nT1(Z.content)}).join("")},nT1=($)=>{let K=[],q=/(\s+)|(\S+)/g,Y;while((Y=q.exec($))!==null)if(Y[1])K.push({type:"whitespace",content:Y[1]});else if(Y[2])K.push({type:"token",content:Y[2]});return K.map((z,W)=>{if(z.type==="whitespace")return z.content;let Z=z.content;if(Z==="AND"||Z==="OR"||Z==="NOT")return Z;if(Z.startsWith("-")&&Z.length>1){let H=Z.slice(1);if(!ki8(H))return Z;return Ni8(Z)}if(ki8(Z))return Ni8(Z);return Z}).join("")},ki8=($)=>{let K=$.endsWith("*")?$.slice(0,-1):$;if(/^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)+$/.test(K))return!0;if(/^[a-zA-Z0-9]+:[a-zA-Z0-9/:.\-]+$/.test(K))return!0;if(/^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)+$/.test(K))return!0;return!1},Ni8=($)=>{let K="",q=$;if($.startsWith("-"))K="-",q=$.slice(1);let Y="";if(q.endsWith("*"))Y="*",q=q.slice(0,-1);return`${K}"${q}"${Y}`};var oT1=({store:$})=>{return Object.freeze({search:async(Y,J,{query:z,limit:W=20,offset:Z=0,startMarker:H="<mark>",endMarker:O="</mark>",storeCode:X})=>{if(!z||typeof z!=="string"||z.trim()==="")throw I.validation("Search query is required","INVALID_QUERY");if(W!==void 0&&(!Number.isInteger(W)||W<1))throw I.validation("Limit must be a positive integer","INVALID_LIMIT");if(Z!==void 0&&(!Number.isInteger(Z)||Z<0))throw I.validation("Offset must be a non-negative integer","INVALID_OFFSET");let P=Jn(z);return await $.searchContent(Y,J,{query:P,limit:W,offset:Z,startMarker:H,endMarker:O,storeCode:X})},searchTextFields:async(Y,J,{query:z,fieldName:W,storeCode:Z})=>{if(!z||typeof z!=="string"||z.trim()==="")throw I.validation("Search query is required","INVALID_QUERY");let H=Jn(z);return await $.searchTextFields(Y,J,{query:H,fieldName:W,storeCode:Z})}})},fi8=Object.freeze({create:oT1});var Z3=zn.default("caw:core"),Xh=zn.default("caw:story-job-tracking"),rT1=async({envDir:$,databaseFilepath:K,assetsDir:q,lazilyCreateDb:Y,kyselyFactory:J},z)=>{let Z=await hP8.create({kyselyFactory:J}).getDb(K,Y),H=$?aT1.join($,"shared-exports"):null,O=xP8.create(),X=eP8.create(),P=vU8.create({db:Z}),w=el8.create(),T=new Map,G=async(n)=>{if(!n||!/^P\d+$/.test(n))b.factory(!0,I.notFound,`Project not found: ${n}`,"PROJECT_NOT_FOUND");let a=parseInt(n.slice(1),10);b.factory(a<1||a>Number.MAX_SAFE_INTEGER,I.notFound,`Project not found: ${n}`,"PROJECT_NOT_FOUND");let i=await O.readProjectByObjectId(Z,null,n);return b.factory(!i,I.notFound,`Project not found: ${n}`,"PROJECT_NOT_FOUND"),{projCtx:i.getObjectId(),projectPath:i.getPath(),authCtx:null}},j=async(n)=>{let a=T.get(n);if(a)return a;let i=await X.readRootStoreForProject(Z,{},n),J8=Lu.create({store:i}),M8=Su.create({store:i}),Q8=mm.create(),z6=um.create({store:i,folderService:J8,documentHooks:Q8,fieldService:M8}),P6=Bm.create({store:i,documentService:z6});Q8.setIncludeResolver(P6,i),z6.setIncludeResolver(P6);let x6=LB.create(),s6=ed.create({store:i,fieldService:M8}),c6=$n.create({store:i,assetsDir:q}),J4=Oi8.create({store:i,fieldService:M8}),N7=vi8.create(),Q7=_i8.create({store:i}),f5=fi8.create({store:i}),Uq=SB.create({db:Z,folderService:J8,fieldService:M8,documentService:z6,templateService:x6,projectService:null,clipboardService:w,storyService:s6,assetService:c6,jobService:J4,includeResolver:P6,worktreeService:N7,entityTypeService:Q7}),xw=wi.create({store:i,folderService:J8,documentService:z6,templateService:x6,storyService:s6,assetService:c6,assetsDir:q}),BV=Ai.create({store:i,folderService:J8,documentService:z6,templateService:x6,storyService:s6,fieldService:M8,assetService:c6,assetsDir:q}),i2={folderService:J8,fieldService:M8,documentService:z6,templateService:x6,transactionService:Uq,exportService:xw,importService:BV,rootStore:i,storyService:s6,assetService:c6,jobService:J4,worktreeService:N7,includeResolver:P6,searchService:f5};return J4.subscribeAll({onJOB_STARTED:({id:x9})=>{setImmediate(async()=>{try{let H9=(await J4.getJob(Z,{},{id:x9}))?.fields?.objectId;if(H9&&H9.startsWith("As"))Xh("JOB_STARTED: job=%s, objectId=%s - incrementing activeJobCount",x9,H9),await Uq.incrementStoryJobCount({},{id:H9})}catch(tY){Xh("Error handling JOB_STARTED for job %s: %s",x9,tY.message)}})},onJOB_COMPLETED:({id:x9})=>{setImmediate(async()=>{try{let H9=(await J4.getJob(Z,{},{id:x9}))?.fields?.objectId;if(H9&&H9.startsWith("As"))Xh("JOB_COMPLETED: job=%s, objectId=%s - decrementing activeJobCount",x9,H9),await Uq.decrementStoryJobCount({},{id:H9})}catch(tY){Xh("Error handling JOB_COMPLETED for job %s: %s",x9,tY.message)}})}}),T.set(n,i2),i2},v=async()=>{let n=await X.readSharedStore(Z,{}),a=Lu.create({store:n}),i=Su.create({store:n}),J8=mm.create(),M8=um.create({store:n,folderService:a,documentHooks:J8,fieldService:i}),Q8=Bm.create({store:n,documentService:M8});J8.setIncludeResolver(Q8,n),M8.setIncludeResolver(Q8);let z6=LB.create(),P6=ed.create({store:n,fieldService:i}),x6=$n.create({store:n,assetsDir:q}),s6=wi.create({store:n,folderService:a,documentService:M8,templateService:z6,storyService:P6,assetService:x6,assetsDir:q}),c6=Ai.create({store:n,folderService:a,documentService:M8,templateService:z6,storyService:P6,fieldService:i,assetService:x6,assetsDir:q});return{exportService:s6,importService:c6,sharedStore:n}},M=async()=>{return await _N.create({projectStore:O,storeStore:X}).listProjects(Z)},N=async(n)=>{if(!n||!/^P\d+$/.test(n))return null;let a=parseInt(n.slice(1),10);if(a<1||a>Number.MAX_SAFE_INTEGER)return null;return await O.readProjectByObjectId(Z,null,n)},k=async(n,{mode:a,store:i,path:J8,root:M8,parentId:Q8,name:z6,type:P6})=>{let x6=await G(n),{transactionService:s6}=await j(x6.projCtx);return await s6.createFolder(x6,{mode:a,store:i,path:J8,root:M8,parentId:Q8,name:z6,type:P6})},R=async(n,{id:a,name:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.renameFolder(J8,{id:a,name:i})},C=async(n,{id:a,parentId:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.moveFolder(J8,{id:a,parentId:i})},L=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.deleteFolder(i,{id:a})},h=async(n,{id:a})=>{let i=await G(n),{folderService:J8}=await j(i.projCtx);return await J8.readFolder(Z,i,{id:a})},m=async(n,{store:a,path:i,type:J8})=>{let M8=await G(n),{folderService:Q8}=await j(M8.projCtx);return await Q8.getFolderByPath(Z,M8,{path:i,type:J8,storeCode:a})},S=async(n,{id:a})=>{let i=await G(n);if(!Y1.parseId(a))throw I.notFound(`Invalid entity ID format: ${a}`,"NOT_FOUND");let{rootStore:M8}=await j(i.projCtx);return{root:await R4.getRootForEntity(Z,i,a,M8)}},f=async(n,{folderId:a,store:i,type:J8})=>{let M8=await G(n);Z3("listFolderContents: Listing contents for project %s: folderId=%s, store=%s, type=%s",M8.projCtx,a||"root",i,J8);let{folderService:Q8,documentService:z6,rootStore:P6}=await j(M8.projCtx),x6=J8;if(a&&!J8)x6=await E(Z,P6,M8,a,i),Z3("listFolderContents: Inferred type %s from folder %s",x6,a);if(!x6||x6!=="d"&&x6!=="t")x6="d",Z3('listFolderContents: Defaulting effectiveType to "d"');let s6=await Q8.listFolderContents(Z,M8,{folderId:a,storeCode:i,type:x6}),c6=a;if((a===null||a===void 0)&&(x6==="d"||x6==="t"))c6=(await P6.readRootFolderForType(Z,M8,x6,i)).getObjectId(),Z3("listFolderContents: Resolved root folder for type %s: %s",x6,c6);Z3("listFolderContents: Querying content with parentId=%s, store=%s, type=%s",c6,i,x6);let J4=await z6.listDocuments(Z,M8,{parentId:c6,storeCode:i,type:x6});return Z3("listFolderContents: Found %d folders, %d documents",s6?.length||0,J4?.length||0),{folders:s6,documents:J4}},E=async(n,a,i,J8,M8)=>{let Q8=Y1.parseId(J8);if(Q8&&Q8.typeCode==="s")return"d";let z6=await a.readFolder(n,i,{id:J8});if(!z6)return null;let P6=await n.selectFrom("entities").innerJoin("entity_types","entities.entity_type_id","entity_types.id").select(["entity_types.code as entity_type_code","entity_types.subtype as entity_type_subtype"]).where("entities.object_id","=",J8).executeTakeFirst();if(P6?.entity_type_code==="f"&&P6?.entity_type_subtype==="root_d")return"d";if(P6?.entity_type_code==="f"&&P6?.entity_type_subtype==="root_t")return"t";if(P6?.entity_type_code==="f"&&(P6?.entity_type_subtype==="root_s"||P6?.entity_type_subtype==="tasks"))return"d";if(P6?.entity_type_code==="s")return"d";let x6=await a.readRootFolderForType(n,i,"d",M8),s6=await a.readRootFolderForType(n,i,"t",M8),c6=z6;while(c6&&c6.getParentId()!==null){let J4=await a.readFolder(n,i,{id:c6.getParentId()});if(!J4)break;c6=J4}if(c6&&c6.getObjectId()===x6?.getObjectId())return"d";else if(c6&&c6.getObjectId()===s6?.getObjectId())return"t";return null},g=async(n)=>{let a=await G(n),{rootStore:i}=await j(a.projCtx);return i},U=async(n)=>{let a=await G(n),{storyService:i}=await j(a.projCtx);return i},e=async(n)=>{let a=await G(n),{jobService:i}=await j(a.projCtx);return i},j8=async({name:n,path:a})=>{let i=_N.create({projectStore:O,storeStore:X}),J8=SB.create({db:Z,folderService:null,projectService:i}),M8={};return await J8.createProject(M8,{name:n,path:a})},H8=(n)=>{return _N.create({projectStore:O,storeStore:X}).validateProjectPath(n)},p8=(n)=>{T.delete(n)},H6=async(n,{mode:a,store:i,path:J8,root:M8,parentId:Q8,name:z6,type:P6,content:x6,tree:s6,subtype:c6,fields:J4})=>{let N7=await G(n);Z3("createDocument: Creating document in project %s: mode=%s, path=%s, store=%s, type=%s, subtype=%s",N7.projCtx,a,J8,i,P6,c6);let{transactionService:Q7}=await j(N7.projCtx),f5=await Q7.createDocument(N7,{mode:a,store:i,path:J8,root:M8,parentId:Q8,name:z6,type:P6,content:x6,tree:s6,subtype:c6,fields:J4});return Z3("createDocument: Document created: id=%s, path=%s",f5.getObjectId(),f5.getPath()),f5},R8=async(n,{mode:a,store:i,path:J8,root:M8,parentId:Q8,name:z6,content:P6,subtype:x6})=>{let s6=await G(n);Z3("createTemplate: Creating template in project %s: mode=%s, path=%s, store=%s",s6.projCtx,a,J8,i);let{transactionService:c6}=await j(s6.projCtx),J4=await c6.createTemplate(s6,{mode:a,store:i,path:J8,root:M8,parentId:Q8,name:z6,content:P6,subtype:x6});return Z3("createTemplate: Template created: id=%s, path=%s",J4.getObjectId(),J4.getPath()),J4},F8=async(n,{id:a,resolveIncludes:i=!0})=>{let J8=await G(n),{documentService:M8}=await j(J8.projCtx);return await M8.readDocument(Z,J8,{id:a,resolveIncludes:i})},B8=async(n,{path:a,store:i,type:J8,resolveIncludes:M8=!0})=>{let Q8=await G(n),{documentService:z6,includeResolver:P6}=await j(Q8.projCtx),x6=await z6.readDocumentByPath(Z,Q8,{path:a,type:J8,storeCode:i});if(!x6)return null;let{entity:s6,ancestorFolderIds:c6}=x6,J4=null;if(M8&&P6&&s6.getPublishedContent())J4=await P6.resolve(Z,Q8,s6.getPublishedContent(),s6.getObjectId());return{entity:s6,ancestorFolderIds:c6,resolvedContent:J4}},s8=async(n,{id:a})=>{let i=await G(n),{documentService:J8,includeResolver:M8}=await j(i.projCtx),{entity:Q8}=await J8.readDocument(Z,i,{id:a,resolveIncludes:!1}),z6=Q8.getDraftContent()||Q8.getPublishedContent();if(!z6)return[];return await M8.checkIncludes(Z,i,z6,a)},T6=async(n,{id:a})=>{let i=await G(n),{documentService:J8,includeResolver:M8,rootStore:Q8}=await j(i.projCtx),{entity:z6}=await J8.readDocument(Z,i,{id:a,resolveIncludes:!1}),P6=z6.getDraftContent()||z6.getPublishedContent();if(!P6)return{updated:[]};let{content:x6,updated:s6}=await M8.updateIncludes(Z,i,P6,a);if(s6.length>0)await Q8.saveDraft(Z,i,{id:a,content:x6});return{updated:s6}},N6=async(n,{id:a,path:i,parentId:J8,type:M8})=>{let Q8=await G(n),{transactionService:z6}=await j(Q8.projCtx);return await z6.updateDocumentPath(Q8,{id:a,path:i,parentId:J8,type:M8})},X6=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.deleteDocument(i,{id:a})},R6=async(n,{id:a,subtype:i,fields:J8})=>{let M8=await G(n),{transactionService:Q8}=await j(M8.projCtx);return await Q8.specialiseDocument(M8,{id:a,subtype:i,fields:J8})},b6=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.generaliseDocument(i,{id:a})},X8=async(n,{id:a,content:i,sessionId:J8})=>{let M8=await G(n),{transactionService:Q8}=await j(M8.projCtx);return await Q8.saveDraft(M8,{id:a,content:i,sessionId:J8})},P8=async(n,{id:a})=>{let i=await G(n),{documentService:J8}=await j(i.projCtx);return await J8.readDraft(Z,i,{id:a})},k8=async(n,{id:a,sessionId:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.publishDocument(J8,{id:a,sessionId:i})},x8=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.discardDraft(i,{id:a})},l8=async(n,{id:a,sessionId:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.setEditState(J8,{id:a,sessionId:i})},n8=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.clearEditState(i,{id:a})},e8=async(n,{id:a})=>{let i=await G(n),{documentService:J8}=await j(i.projCtx);return await J8.getEditState(Z,i,{id:a})},W6=async(n,{id:a,versionNumber:i})=>{let J8=await G(n),{documentService:M8}=await j(J8.projCtx);return await M8.readVersion(Z,J8,{id:a,versionNumber:i})},g8=async(n,{id:a})=>{let i=await G(n),{documentService:J8}=await j(i.projCtx);return await J8.getVersions(Z,i,{id:a})},U8=async(n,{id:a,operation:i,preview:J8,ignoreContent:M8,sessionId:Q8})=>{let z6=await G(n),{transactionService:P6}=await j(z6.projCtx);return await P6.editDocument(z6,{id:a,operation:i,preview:J8,ignoreContent:M8,sessionId:Q8})},a8=async(n,{id:a,operations:i,preview:J8,ignoreContent:M8,sessionId:Q8})=>{let z6=await G(n),{transactionService:P6}=await j(z6.projCtx);return await P6.batchEditDocument(z6,{id:a,operations:i,preview:J8,ignoreContent:M8,sessionId:Q8})},q6=async(n,{id:a,lineNumber:i,checked:J8,includeDraft:M8,preview:Q8,sessionId:z6})=>{let P6=await G(n),{transactionService:x6}=await j(P6.projCtx);return await x6.checkChecklistItem(P6,{id:a,lineNumber:i,checked:J8,includeDraft:M8,preview:Q8,sessionId:z6})},k6=async(n,{id:a,lineNumber:i,includeDraft:J8,preview:M8,sessionId:Q8})=>{let z6=await G(n),{transactionService:P6}=await j(z6.projCtx);return await P6.toggleChecklistItem(z6,{id:a,lineNumber:i,includeDraft:J8,preview:M8,sessionId:Q8})},I6=async(n,{id:a,items:i,includeDraft:J8,preview:M8,sessionId:Q8})=>{let z6=await G(n),{transactionService:P6}=await j(z6.projCtx);return await P6.batchCheckChecklistItems(z6,{id:a,items:i,includeDraft:J8,preview:M8,sessionId:Q8})},J1=async(n,{id:a,startLine:i,endLine:J8,includeDraft:M8})=>{let Q8=await G(n),{documentService:z6}=await j(Q8.projCtx);return await z6.readLines(Z,Q8,{id:a,startLine:i,endLine:J8,includeDraft:M8})},q4=async(n,{id:a,startMarker:i,endMarker:J8,inclusive:M8,includeDraft:Q8})=>{let z6=await G(n),{documentService:P6}=await j(z6.projCtx);return await P6.readBetweenMarkers(Z,z6,{id:a,startMarker:i,endMarker:J8,inclusive:M8,includeDraft:Q8})},Y4=async(n,{id:a,includeDraft:i})=>{let J8=await G(n),{documentService:M8}=await j(J8.projCtx);return await M8.getDocumentStats(Z,J8,{id:a,includeDraft:i})},y8=async(n,{id:a,maxDepth:i,includeDraft:J8})=>{let M8=await G(n),{documentService:Q8}=await j(M8.projCtx);return await Q8.readHeadings(Z,M8,{id:a,maxDepth:i,includeDraft:J8})},u8=async(n,{id:a,heading:i,includeHeading:J8,includeDraft:M8})=>{let Q8=await G(n),{documentService:z6}=await j(Q8.projCtx);return await z6.readSection(Z,Q8,{id:a,heading:i,includeHeading:J8,includeDraft:M8})},Q=async(n,{id:a,includeDraft:i})=>{let J8=await G(n),{documentService:M8}=await j(J8.projCtx);return await M8.readFrontmatter(Z,J8,{id:a,includeDraft:i})},c=async(n,{id:a,section:i,includeDraft:J8})=>{let M8=await G(n),{documentService:Q8}=await j(M8.projCtx);return await Q8.readChecklist(Z,M8,{id:a,section:i,includeDraft:J8})},d=async(n,{folderId:a,store:i,type:J8="d"})=>{let M8=await G(n),{documentService:Q8}=await j(M8.projCtx);return await Q8.listDocuments(Z,M8,{parentId:a,storeCode:i,type:J8})},C8=async(n,{id:a,params:i,target:J8,targetOptions:M8,sessionId:Q8})=>{let z6=await G(n),{transactionService:P6,jobService:x6,rootStore:s6}=await j(z6.projCtx),c6=await P6.renderTemplate(z6,{id:a,params:i,target:J8,targetOptions:M8,sessionId:Q8});if(c6.target==="job"&&c6.jobId){let J4=Oh.create({jobService:x6,transactionService:P6,store:s6,db:Z,projectPath:z6.projectPath});setImmediate(async()=>{try{await J4.runJob(c6.jobId,z6)}catch(N7){Z3("JobRunner error for job %s: %s",c6.jobId,N7.message);try{await P6.updateJobStatus(z6,{id:c6.jobId,status:"error",errorMessage:N7.message})}catch(Q7){Z3("Failed to update job %s status to error: %s",c6.jobId,Q7.message)}}})}return c6},l=async(n,{id:a})=>{let i=await G(n),{documentService:J8,templateService:M8}=await j(i.projCtx),{entity:Q8}=await J8.readDocument(Z,i,{id:a});if(!Q8.getPublishedContent())return{parameters:{},detectedVariables:[],target:null,targetPath:null};return M8.extractTemplateParameters(Q8.getPublishedContent())},O8=async(n,{typeCode:a,store:i="A"})=>{let J8=await G(n),{rootStore:M8}=await j(J8.projCtx);return{templates:(await M8.findEntitiesByFieldValue(Z,J8,{storeCode:i,typeCode:"t",subtype:"prompt",fieldName:"associatedType",fieldValue:a})).map((z6)=>({id:z6.object_id,name:z6.name,path:z6.path,subtype:z6.subtype}))}},s=async(n,{query:a,fieldName:i,store:J8="A"})=>{let M8=await G(n),{searchService:Q8}=await j(M8.projCtx);return await Q8.searchTextFields(Z,M8,{query:a,fieldName:i,storeCode:J8})},v8=async(n,{query:a,limit:i,offset:J8,startMarker:M8,endMarker:Q8,store:z6="A"})=>{let P6=await G(n),{searchService:x6}=await j(P6.projCtx);return await x6.search(Z,P6,{query:a,limit:i,offset:J8,startMarker:M8,endMarker:Q8,storeCode:z6})},W8=async(n,{store:a,ownerEntityId:i,ownerEntityTypeCode:J8,ownerEntityTypeSubtype:M8,name:Q8,label:z6,description:P6,primitiveType:x6,required:s6,multiplicity:c6,isSystem:J4})=>{let N7=await G(n),{transactionService:Q7}=await j(N7.projCtx);return await Q7.createFieldDefinition(N7,{store:a,ownerEntityId:i,ownerEntityTypeCode:J8,ownerEntityTypeSubtype:M8,name:Q8,label:z6,description:P6,primitiveType:x6,required:s6,multiplicity:c6,isSystem:J4})},D8=async(n,{id:a})=>{let i=await G(n),{fieldService:J8}=await j(i.projCtx);return await J8.readFieldDefinition(Z,i,{id:a})},E8=async(n,{store:a,ownerEntityId:i,includeSystem:J8})=>{let M8=await G(n),{fieldService:Q8}=await j(M8.projCtx);return await Q8.getFieldDefinitionsForOwner(Z,M8,{store:a,ownerEntityId:i,includeSystem:J8})},d8=async(n,{store:a,code:i,subtype:J8})=>{let M8=await G(n),{fieldService:Q8}=await j(M8.projCtx);return await Q8.getFieldDefinitionsForType(Z,M8,{store:a,code:i,subtype:J8})},m6=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.deleteFieldDefinition(i,{id:a})},n4=async(n,{id:a})=>{let i=await G(n),J8=Y1.parseId(a);if(!J8)throw Error(`Cannot parse entity ID: ${a}`);let{rootStore:M8}=await j(i.projCtx),{typeCode:Q8}=J8;switch(Q8){case"f":return await M8.readFolder(Z,i,{id:a});case"d":case"t":return await M8.readContent(Z,i,{id:a});case"s":return await M8.readStory(Z,i,{id:a});case"j":return await M8.readJob(Z,i,{id:a});default:throw Error(`Unsupported entity type code: ${Q8}`)}},k7=async(n,{entityId:a})=>{let i;try{i=await n4(n,{id:a})}catch(J8){if(J8.code==="PROJECT_NOT_FOUND")throw J8;return{}}if(!i)return{};return i.getFields()},p7=async(n,{entityId:a,fieldDefinitionId:i,fieldName:J8,value:M8,values:Q8})=>{let z6=await G(n),{transactionService:P6}=await j(z6.projCtx);return await P6.addFieldToEntity(z6,{entityId:a,fieldDefinitionId:i,fieldName:J8,value:M8,values:Q8})},W7=async(n,{entityId:a,fieldDefinitionId:i,fieldName:J8,value:M8,values:Q8})=>{let z6=await G(n),{transactionService:P6}=await j(z6.projCtx);return await P6.updateFieldValue(z6,{entityId:a,fieldDefinitionId:i,fieldName:J8,value:M8,values:Q8})},X3=async(n,{entityId:a,fieldDefinitionId:i,fieldName:J8})=>{let M8=await G(n),{transactionService:Q8}=await j(M8.projCtx);return await Q8.removeFieldFromEntity(M8,{entityId:a,fieldDefinitionId:i,fieldName:J8})},N5=async(n,{code:a,subtype:i,name:J8,parentSubtype:M8})=>{let Q8=await G(n),{transactionService:z6}=await j(Q8.projCtx);return await z6.createSubtype(Q8,{code:a,subtype:i,name:J8,parentSubtype:M8})},H4=async(n)=>{let a=await G(n),{exportService:i}=await j(a.projCtx);return await i.listExports(Z,a,{projectPath:a.projectPath})},Z9=async(n,{store:a="A"}={})=>{let i=await G(n),{exportService:J8}=await j(i.projCtx);return await J8.exportPreview(Z,i,{storeCode:a})},_8=async(n,{store:a="A",confirm:i=!1}={})=>{let J8=await G(n),{exportService:M8}=await j(J8.projCtx);if(!i)return await M8.exportPreview(Z,J8,{storeCode:a});return await M8.exportDocuments(Z,J8,{storeCode:a,projectPath:J8.projectPath})},L8=async(n,{filename:a,store:i="A"})=>{let J8=await G(n);b.factory(!a,I.validation,"filename is required","FILENAME_REQUIRED");let{importService:M8}=await j(J8.projCtx);return await M8.importDocuments(Z,J8,{filename:a,storeCode:i,projectPath:J8.projectPath})},Y8=async()=>{let{exportService:n}=await v();return await n.listExports(Z,{},{exportPath:H})},S8=async()=>{let{exportService:n}=await v();return await n.exportPreview(Z,{},{storeCode:"B"})},I8=async({confirm:n=!1}={})=>{let{exportService:a}=await v();if(!n)return await a.exportPreview(Z,{},{storeCode:"B"});return await a.exportDocuments(Z,{},{storeCode:"B",exportPath:H})},b8=async({filename:n})=>{b.factory(!n,I.validation,"filename is required","FILENAME_REQUIRED");let{importService:a}=await v();return await a.importDocuments(Z,{},{filename:n,storeCode:"B",exportPath:H})},G6=async(n,{name:a,store:i,state:J8})=>{let M8=await G(n),{transactionService:Q8}=await j(M8.projCtx);return await Q8.createStory(M8,{name:a,storeCode:i,state:J8})},x=async(n,{store:a})=>{let i=await G(n),{storyService:J8}=await j(i.projCtx);return await J8.listStories(Z,i,{store:a})},T8=async(n,{id:a})=>{let i=await G(n),{storyService:J8}=await j(i.projCtx);return await J8.getStory(Z,i,{id:a})},u=async(n,{id:a,state:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.updateStoryState(J8,{id:a,state:i})},t=async(n,{id:a,name:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.renameStory(J8,{id:a,name:i})},p=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.deleteStory(i,{id:a})},r=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.incrementStoryJobCount(i,{id:a})},o=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.decrementStoryJobCount(i,{id:a})},$8=async(n,{store:a,buffer:i,mimeType:J8,originalFilename:M8,widthPx:Q8,heightPx:z6,displayWidth:P6,displayHeight:x6})=>{let s6=await G(n),{transactionService:c6}=await j(s6.projCtx);return await c6.createAsset(s6,{store:a,buffer:i,mimeType:J8,originalFilename:M8,widthPx:Q8,heightPx:z6,displayWidth:P6,displayHeight:x6})},Z8=async(n,{id:a})=>{let i=await G(n),{assetService:J8}=await j(i.projCtx);return await J8.readAsset(Z,i,{id:a})},G8=async(n,{id:a})=>{let i=await G(n),{assetService:J8}=await j(i.projCtx);return await J8.readAssetBinary(Z,i,{id:a})},V8=async(n,{store:a})=>{let i=await G(n),{assetService:J8}=await j(i.projCtx);return await J8.listAssets(Z,i,{store:a})},N8=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.deleteAsset(i,{id:a})},o8=async(n,{name:a,agent:i,model:J8,prompt:M8,store:Q8="A",workingDirectory:z6,objectId:P6,streaming:x6})=>{let s6=await G(n),{transactionService:c6,jobService:J4,rootStore:N7}=await j(s6.projCtx),Q7=await c6.createJob(s6,{store:Q8,name:a,agent:i,model:J8,prompt:M8,workingDirectory:z6,objectId:P6,streaming:x6}),f5=Oh.create({jobService:J4,transactionService:c6,store:N7,db:Z,projectPath:s6.projectPath});return setImmediate(async()=>{try{await f5.runJob(Q7.id,s6)}catch(Uq){Z3("JobRunner error for job %s: %s",Q7.id,Uq.message);try{await c6.updateJobStatus(s6,{id:Q7.id,status:"error",errorMessage:Uq.message})}catch(xw){Z3("Failed to update job %s status to error: %s",Q7.id,xw.message)}}}),Q7},i8=async(n,{store:a="A",status:i})=>{let J8=await G(n),{jobService:M8}=await j(J8.projCtx);return await M8.listJobs(Z,J8,{store:a,status:i})},A6=async(n,{id:a})=>{let i=await G(n),{jobService:J8}=await j(i.projCtx);return await J8.getJob(Z,i,{id:a})},r6=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.deleteJob(i,{id:a})},d6=async(n,{id:a,prompt:i,model:J8})=>{let M8=await G(n),{transactionService:Q8,jobService:z6,rootStore:P6}=await j(M8.projCtx),x6=await Q8.continueJob(M8,{id:a,prompt:i,model:J8}),s6=Oh.create({jobService:z6,transactionService:Q8,store:P6,db:Z,projectPath:M8.projectPath});return setImmediate(async()=>{try{await s6.runJob(x6.id,M8)}catch(c6){Z3("JobRunner error for job %s: %s",x6.id,c6.message);try{await Q8.updateJobStatus(M8,{id:x6.id,status:"error",errorMessage:c6.message})}catch(J4){Z3("Failed to update job %s status to error: %s",x6.id,J4.message)}}}),x6},l6=async(n,{id:a,name:i})=>{let J8=await G(n),{transactionService:M8}=await j(J8.projCtx);return await M8.renameJob(J8,{id:a,name:i})},l1=async(n,{id:a})=>{let i=await G(n),{transactionService:J8}=await j(i.projCtx);return await J8.stopJob(i,{id:a})},a1=async(n,{id:a})=>{let i=await G(n),{jobService:J8}=await j(i.projCtx);return await J8.getProcessStatus(Z,i,{id:a})},y$=async(n)=>{let a=await G(n),{worktreeService:i}=await j(a.projCtx);return await i.listWorktrees({projectPath:a.projectPath})},W$=async(n,{branch:a,baseBranch:i})=>{let J8=await G(n),{worktreeService:M8}=await j(J8.projCtx);return await M8.createWorktree({projectPath:J8.projectPath,branch:a,baseBranch:i})};if(z)z({db:Z,projectStore:O,storeStore:X});return Object.freeze({getProjects:M,getProjectByObjectId:N,createProject:j8,validateProjectPath:H8,createFolder:k,renameFolder:R,moveFolder:C,deleteFolder:L,getFolder:h,getFolderByPath:m,getRootForEntity:S,listFolderContents:f,getRootStore:g,getStoryService:U,getJobService:e,evictProject:p8,getDb:()=>Z,createDocument:H6,createTemplate:R8,readDocument:F8,readDocumentByPath:B8,checkIncludes:s8,updateIncludes:T6,updateDocumentPath:N6,deleteDocument:X6,specialiseDocument:R6,generaliseDocument:b6,saveDraft:X8,readDraft:P8,publishDocument:k8,discardDraft:x8,setEditState:l8,clearEditState:n8,getEditState:e8,readVersion:W6,getVersions:g8,editDocument:U8,batchEditDocument:a8,checkChecklistItem:q6,toggleChecklistItem:k6,batchCheckChecklistItems:I6,listDocuments:d,readLines:J1,readBetweenMarkers:q4,getDocumentStats:Y4,readHeadings:y8,readSection:u8,readFrontmatter:Q,readChecklist:c,renderTemplate:C8,getTemplateParameters:l,listTemplatesByType:O8,searchTextFields:s,searchContent:v8,createFieldDefinition:W8,readFieldDefinition:D8,getFieldDefinitions:E8,getTypeFields:d8,deleteFieldDefinition:m6,getFields:k7,readEntity:n4,addFieldToEntity:p7,updateFieldValue:W7,removeFieldFromEntity:X3,createSubtype:N5,listExports:H4,exportPreview:Z9,exportDocuments:_8,importDocuments:L8,listGlobalExports:Y8,globalExportPreview:S8,globalExportDocuments:I8,globalImportDocuments:b8,createStory:G6,listStories:x,getStory:T8,renameStory:t,updateStoryState:u,deleteStory:p,incrementStoryJobCount:r,decrementStoryJobCount:o,createAsset:$8,readAsset:Z8,readAssetBinary:G8,listAssets:V8,deleteAsset:N8,createJob:o8,listJobs:i8,getJob:A6,deleteJob:r6,continueJob:d6,stopJob:l1,renameJob:l6,getProcessStatus:a1,listWorktrees:y$,createWorktree:W$,listCrons:()=>P.list(),startCron:(n)=>P.start(n),stopCron:(n)=>P.stop(n),restartCron:(n)=>P.restart(n),startAllCrons:()=>P.startAll(),stopAllCrons:()=>P.stopAll(),registerCronJob:(n,a)=>{P.register(n,a)}})},Ri8=Object.freeze({create:rT1});var Ci8=n6(II(),1);import{join as sT1}from"path";var tT1=($,{staticPath:K})=>{return $.use(Ci8.default.static(K)),$.get("*",(q,Y,J)=>{if(q.path.startsWith("/api")||q.path==="/health")return J();Y.sendFile(sT1(K,"index.html"))}),Object.freeze({})},Di8=Object.freeze({create:tT1});var hi8=n6(k4(),1),Ph=hi8.default("caw:api:projects"),eT1=($,{core:K})=>{return $.get("/api/projects",async(q,Y)=>{try{Ph("GET /api/projects - Fetching projects list");let J=await K.getProjects();Ph("GET /api/projects - Returning %d projects",J.length),J.forEach((z)=>{Ph(" - %s (%s) with %d children",z.name,z.objectId,z.children?.length||0)}),Y.json(J)}catch(J){Ph("GET /api/projects - Error: %s",J.message),Y.status(500).json({error:J.message})}}),$.post("/api/projects/validate",async(q,Y)=>{try{let{path:J}=q.body,z=K.validateProjectPath(J);Y.json(z)}catch(J){if(J.code==="VALIDATION_ERROR")return Y.status(400).json({error:J.message,code:"VALIDATION_ERROR"});Y.status(500).json({error:J.message})}}),$.post("/api/projects",async(q,Y)=>{try{let{name:J,path:z}=q.body;if(!J||typeof J!=="string"||J.trim()==="")return Y.status(400).json({error:"Name is required",code:"VALIDATION_ERROR"});if(!z||typeof z!=="string"||z.trim()==="")return Y.status(400).json({error:"Path is required",code:"VALIDATION_ERROR"});if(J.length>255)return Y.status(400).json({error:"Name exceeds maximum length (255)",code:"VALIDATION_ERROR"});let W=await K.createProject({name:J.trim(),path:z.trim()});Y.status(201).json(W.toJSON())}catch(J){if(J.code==="DUPLICATE_PATH")return Y.status(409).json({error:J.message,code:"DUPLICATE_PATH"});console.error("Failed to create project:",J),Y.status(500).json({error:J.message})}}),Object.freeze({})},Ei8=Object.freeze({create:eT1});var Si8=n6(k4(),1);var $G1=($,K)=>{if($.isDomainError){let q=$.code==="UNAUTHORIZED"||$.code==="INVALID_TOKEN"?401:$.code==="NOT_FOUND"||$.code==="PROJECT_NOT_FOUND"||$.code==="EXPORT_NOT_FOUND"||$.code==="STORY_NOT_FOUND"||$.code==="JOB_NOT_FOUND"||$.code==="ASSET_NOT_FOUND"||$.code==="BLOB_NOT_FOUND"||$.code==="STORE_NOT_FOUND"||$.code==="INCLUDE_NOT_FOUND"||$.code==="INCLUDE_VERSION_NOT_FOUND"||$.code==="ENTITY_TYPE_NOT_FOUND"||$.code==="FOLDER_NOT_FOUND"?404:$.code==="CONFLICT"||$.code==="STORE_NOT_EMPTY"||$.code==="EDIT_CONFLICT"||$.code==="DUPLICATE_NAME"||$.code==="BRANCH_ALREADY_CHECKED_OUT"||$.code==="BRANCH_ALREADY_EXISTS"?409:$.code==="EXPORT_ERROR"||$.code==="STORY_ROOT_NOT_FOUND"?500:400;return K.status(q).json({error:$.message,code:$.code})}console.error("Unhandled error:",$),K.status(500).json({error:$.message})},w6=$G1;var w5=Si8.default("caw:api:folders"),Li8=($)=>({folders:$.folders.map((K)=>K.toJSON()),documents:$.documents.map((K)=>K.toJSON())}),KG1=($,{core:K})=>{return $.get("/api/p/:projectId/folders/contents",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z,type:W}=q.query;w5("GET /api/p/%s/folders/contents - Listing root contents: store=%s, type=%s",J,z,W);let Z=await K.listFolderContents(J,{folderId:null,store:z,type:W}),H=Li8(Z);w5("GET /api/p/%s/folders/contents - Found %d folders, %d documents",J,H.folders.length,H.documents.length),Y.json(H)}catch(J){w5("GET /api/p/%s/folders/contents - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/folders/by-path",async(q,Y)=>{try{let{projectId:J}=q.params,{path:z,store:W,type:Z}=q.query,H=await K.getFolderByPath(J,{path:z,store:W,type:Z});if(!H)return Y.status(404).json({error:"Not found"});Y.json(H.toJSON())}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/folders/:id/contents",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{type:W}=q.query;w5("GET /api/p/%s/folders/%s/contents - Listing folder contents: type=%s",J,z,W);let Z=await K.listFolderContents(J,{folderId:z,type:W}),H=Li8(Z);w5("GET /api/p/%s/folders/%s/contents - Found %d folders, %d documents",J,z,H.folders.length,H.documents.length),Y.json(H)}catch(J){w5("GET /api/p/%s/folders/%s/contents - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/folders/:id/root",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;w5("GET /api/p/%s/folders/%s/root - Getting root for entity",J,z);let W=await K.getRootForEntity(J,{id:z});w5("GET /api/p/%s/folders/%s/root - Found root: %s (type=%s, subtype=%s)",J,z,W.root.id,W.root.type,W.root.subtype),Y.json(W)}catch(J){w5("GET /api/p/%s/folders/%s/root - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/folders/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.getFolder(J,{id:z});if(!W)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});Y.json(W.toJSON())}catch(J){w6(J,Y)}}),$.post("/api/p/:projectId/folders",async(q,Y)=>{try{let{projectId:J}=q.params,{path:z,store:W,root:Z,parentId:H,name:O}=q.body,X=z&&W&&!Z&&!H,P=Z&&z&&!W&&!H;if([X,P,H&&O&&!z&&!Z].filter(Boolean).length!==1)return Y.status(400).json({error:"Exactly one creation mode required: (path+store), (root+path), or (parentId+name)",code:"INVALID_PARAMS"});let G;if(X)G="fullPath";else if(P)G="rootRelative";else G="parentName";w5("POST /api/p/%s/folders - Creating folder: mode=%s, path=%s, store=%s, root=%s, parentId=%s, name=%s",J,G,z,W,Z,H,O);let j=await K.createFolder(J,{mode:G,path:z,store:W,root:Z,parentId:H,name:O});w5("POST /api/p/%s/folders - Folder created: id=%s, path=%s",J,j.getObjectId(),j.getPath()),Y.status(201).json(j.toJSON())}catch(J){w5("POST /api/p/%s/folders - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.delete("/api/p/:projectId/folders/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.deleteFolder(J,{id:z});Y.json(W)}catch(J){w6(J,Y)}}),$.patch("/api/p/:projectId/folders/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{name:W,parentId:Z}=q.body;if(W&&Z)return Y.status(400).json({error:"Provide only name or parentId, not both",code:"INVALID_REQUEST"});if(!W&&!Z)return Y.status(400).json({error:"Provide name or parentId",code:"INVALID_REQUEST"});let H;if(W)H=await K.renameFolder(J,{id:z,name:W});else H=await K.moveFolder(J,{id:z,parentId:Z});Y.json(H.toJSON())}catch(J){w6(J,Y)}}),Object.freeze({})},Ii8=Object.freeze({create:KG1});var qG1=($,{core:K})=>{return $.post("/api/p/:projectId/field-definitions",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z,ownerEntityId:W,ownerEntityTypeCode:Z,ownerEntityTypeSubtype:H,name:O,label:X,description:P,primitiveType:w,required:T,multiplicity:G}=q.body,j=await K.createFieldDefinition(J,{store:z,ownerEntityId:W??null,ownerEntityTypeCode:Z,ownerEntityTypeSubtype:H,name:O,label:X??null,description:P??null,primitiveType:w,required:T??!1,multiplicity:G??"single"});Y.status(201).json(j.toJSON())}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/types/:code/:subtype/fields",async(q,Y)=>{try{let{projectId:J,code:z,subtype:W}=q.params,{store:Z}=q.query,H=await K.getTypeFields(J,{store:Z||"A",code:z,subtype:W});Y.json({fields:H.map((O)=>({...O.entity.toJSON(),inherited:O.inherited,sourcePk:O.sourcePk}))})}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/field-definitions/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.readFieldDefinition(J,{id:z});if(!W)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});Y.json(W.toJSON())}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/field-definitions",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z,ownerEntityId:W,includeSystem:Z}=q.query,H=await K.getFieldDefinitions(J,{store:z,ownerEntityId:W??null,includeSystem:Z==="true"});Y.json(H.map((O)=>O.toJSON()))}catch(J){w6(J,Y)}}),$.delete("/api/p/:projectId/field-definitions/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.deleteFieldDefinition(J,{id:z});Y.json(W.toJSON())}catch(J){w6(J,Y)}}),$.put("/api/p/:projectId/entities/:id/fields/:fieldName",async(q,Y)=>{try{let{projectId:J,id:z,fieldName:W}=q.params,{fieldDefinitionId:Z,value:H,values:O}=q.body,X={entityId:z,fieldDefinitionId:Z!==void 0?Z:null,fieldName:W};if(H!==void 0)X.value=H;if(O!==void 0)X.values=O;if((await K.getFields(J,{entityId:z}))?.[W])await K.updateFieldValue(J,X);else await K.addFieldToEntity(J,X);let T=await K.readEntity(J,{id:z});Y.json(T.toJSON())}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/entities/:id/fields",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.getFields(J,{entityId:z}),Z={};for(let[H,O]of Object.entries(W))Z[H]=O.toJSON();Y.json(Z)}catch(J){w6(J,Y)}}),$.delete("/api/p/:projectId/entities/:id/fields/:fieldName",async(q,Y)=>{try{let{projectId:J,id:z,fieldName:W}=q.params,{fieldDefinitionId:Z}=q.query,H={entityId:z,fieldName:W};if(Z!==void 0)H.fieldDefinitionId=Z;await K.removeFieldFromEntity(J,H),Y.status(204).send()}catch(J){w6(J,Y)}}),Object.freeze({})},xi8=Object.freeze({create:qG1});var gi8=n6(k4(),1);var T5=gi8.default("caw:api:documents"),YG1=($,{core:K})=>{return $.post("/api/p/:projectId/documents",async(q,Y)=>{try{let{projectId:J}=q.params,{path:z,store:W,root:Z,parentId:H,name:O,content:X,subtype:P,fields:w}=q.body,T=z&&W&&!Z&&!H,G=Z&&z&&!W&&!H;if([T,G,H&&O&&!z&&!Z].filter(Boolean).length!==1)return Y.status(400).json({error:"Exactly one creation mode required: (path+store), (root+path), or (parentId+name)",code:"INVALID_PARAMS"});let M;if(T)M="fullPath";else if(G)M="rootRelative";else M="parentName";T5("POST /api/p/%s/documents - Creating document: mode=%s, path=%s, store=%s, root=%s, parentId=%s, name=%s, hasContent=%s",J,M,z,W,Z,H,O,!!X);let k=(await K.createDocument(J,{mode:M,path:z,store:W,root:Z,parentId:H,name:O,content:X,subtype:P,fields:w})).toJSON();T5("POST /api/p/%s/documents - Document created: id=%s, path=%s",J,k.id,k.path),Y.status(201).json(k)}catch(J){T5("POST /api/p/%s/documents - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.post("/api/p/:projectId/templates",async(q,Y)=>{try{let{projectId:J}=q.params,{path:z,store:W,root:Z,parentId:H,name:O,content:X,subtype:P}=q.body,w=z&&W&&!Z&&!H,T=Z&&z&&!W&&!H;if([w,T,H&&O&&!z&&!Z].filter(Boolean).length!==1)return Y.status(400).json({error:"Exactly one creation mode required: (path+store), (root+path), or (parentId+name)",code:"INVALID_PARAMS"});let v;if(w)v="fullPath";else if(T)v="rootRelative";else v="parentName";T5("POST /api/p/%s/templates - Creating template: mode=%s, path=%s, store=%s, root=%s, parentId=%s, name=%s, hasContent=%s",J,v,z,W,Z,H,O,!!X);let N=(await K.createTemplate(J,{mode:v,path:z,store:W,root:Z,parentId:H,name:O,content:X,subtype:P})).toJSON();T5("POST /api/p/%s/templates - Template created: id=%s, path=%s",J,N.id,N.path),Y.status(201).json(N)}catch(J){T5("POST /api/p/%s/templates - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/documents/by-path",async(q,Y)=>{try{let{projectId:J}=q.params,{path:z,store:W,type:Z="d",resolveIncludes:H="true"}=q.query,O=await K.readDocumentByPath(J,{path:z,store:W,type:Z,resolveIncludes:H!=="false"});if(!O)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});let{entity:X,ancestorFolderIds:P,resolvedContent:w}=O,T={...X.toJSON(),ancestorFolderIds:P};if(w!==null)T.resolvedContent=w;Y.json(T)}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents",async(q,Y)=>{try{let{projectId:J}=q.params,{folderId:z,store:W,type:Z="d"}=q.query,H=await K.listDocuments(J,{folderId:z??null,store:W,type:Z});Y.json(H.map((O)=>O.toJSON()))}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/templates/by-type/:typeCode",async(q,Y)=>{try{let{projectId:J,typeCode:z}=q.params,{store:W}=q.query,Z=await K.listTemplatesByType(J,{typeCode:z,store:W});Y.json(Z)}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents/:id/parameters",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{entity:W}=await K.readDocument(J,{id:z});if(!W)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});let Z=W.getPublishedContent();if(!Z)return Y.json({id:z,path:W.getPath(),parameters:{},target:null,targetPath:null,targetParentId:null,targetName:null,targetRoot:null,targetStore:null,targetJobName:null,targetJobAgent:null,targetJobModel:null,targetJobWorktree:null,targetJobSkipDialog:!1,skipDialog:!1,detectedVariables:[]});try{let{parameters:H,target:O,targetPath:X,targetParentId:P,targetName:w,targetRoot:T,targetStore:G,targetJobName:j,targetJobAgent:v,targetJobModel:M,targetJobWorktree:N,targetJobSkipDialog:k,skipDialog:R}=rK.getParameters(Z),{body:C}=rK.parseFrontMatter(Z),L=Array.from(rK.extractVariables(C));Y.json({id:z,path:W.getPath(),parameters:H,target:O,targetPath:X,targetParentId:P,targetName:w,targetRoot:T,targetStore:G,targetJobName:j,targetJobAgent:v,targetJobModel:M,targetJobWorktree:N,targetJobSkipDialog:k,skipDialog:R,detectedVariables:L})}catch(H){return Y.json({id:z,path:W.getPath(),parameters:{},target:null,targetPath:null,targetParentId:null,targetName:null,targetRoot:null,targetStore:null,targetJobName:null,targetJobAgent:null,targetJobModel:null,targetJobWorktree:null,targetJobSkipDialog:!1,skipDialog:!1,detectedVariables:[],parseError:H.message})}}catch(J){w6(J,Y)}}),$.post("/api/p/:projectId/documents/:id/render",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{params:W,target:Z,targetOptions:H}=q.body,O=await K.renderTemplate(J,{id:z,params:W,target:Z,targetOptions:H,sessionId:q.sessionId});Y.json(O)}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{resolveIncludes:W="true"}=q.query,{entity:Z,ancestorFolderIds:H,resolvedContent:O}=await K.readDocument(J,{id:z,resolveIncludes:W!=="false"});if(!Z)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});let X={...Z.toJSON(),ancestorFolderIds:H};if(O!==null)X.resolvedContent=O;Y.json(X)}catch(J){w6(J,Y)}}),$.patch("/api/p/:projectId/documents/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{path:W,parentId:Z}=q.body,H=Y1.getTypeFromId(z),O=await K.updateDocumentPath(J,{id:z,path:W,parentId:Z,type:H});Y.json(O.toJSON())}catch(J){w6(J,Y)}}),$.delete("/api/p/:projectId/documents/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.deleteDocument(J,{id:z});Y.json(W)}catch(J){w6(J,Y)}}),$.put("/api/p/:projectId/documents/:id/draft",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{content:W}=q.body,Z=q.sessionId;if(W===void 0)return Y.status(400).json({error:"content is required",code:"MISSING_CONTENT"});let H=await K.saveDraft(J,{id:z,content:W,sessionId:Z});Y.json({id:z,updated:!0,lockLost:H.lockLost??!1})}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents/:id/draft",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.readDraft(J,{id:z});Y.json(W)}catch(J){w6(J,Y)}}),$.post("/api/p/:projectId/documents/:id/publish",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.publishDocument(J,{id:z,sessionId:q.sessionId});Y.json(W)}catch(J){w6(J,Y)}}),$.delete("/api/p/:projectId/documents/:id/draft",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;await K.discardDraft(J,{id:z}),Y.json({id:z,discarded:!0})}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents/:id/versions",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.getVersions(J,{id:z});Y.json(W)}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents/:id/versions/:versionNumber",async(q,Y)=>{try{let{projectId:J,id:z,versionNumber:W}=q.params,Z=await K.readVersion(J,{id:z,versionNumber:parseInt(W,10)});if(!Z)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});Y.json(Z)}catch(J){w6(J,Y)}}),$.get("/api/p/:projectId/documents/:id/edit-state",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=await K.getEditState(J,{id:z});if(!W)return Y.json({locked:!1});Y.json({locked:!0,locked_at:W.startedAt})}catch(J){w6(J,Y)}}),$.post("/api/p/:projectId/documents/:id/edit-state",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,W=q.sessionId;if(!W)return Y.status(400).json({error:"X-Session-Id header required",code:"MISSING_SESSION_ID"});let Z=await K.setEditState(J,{id:z,sessionId:W});if(!Z.success)return Y.status(409).json(Z);Y.json(Z)}catch(J){w6(J,Y)}}),$.delete("/api/p/:projectId/documents/:id/edit-state",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;await K.clearEditState(J,{id:z}),Y.json({success:!0})}catch(J){w6(J,Y)}}),$.post("/api/p/:projectId/documents/:id/specialise",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{subtype:W,fields:Z}=q.body;T5("POST /api/p/%s/documents/%s/specialise - subtype=%s, hasFields=%s",J,z,W,!!Z);let O=(await K.specialiseDocument(J,{id:z,subtype:W,fields:Z})).entity.toJSON();T5("POST /api/p/%s/documents/%s/specialise - Success: subtype=%s",J,z,O.subtype),Y.json(O)}catch(J){T5("POST /api/p/%s/documents/%s/specialise - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.post("/api/p/:projectId/documents/:id/generalise",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;T5("POST /api/p/%s/documents/%s/generalise",J,z);let Z=(await K.generaliseDocument(J,{id:z})).entity.toJSON();T5("POST /api/p/%s/documents/%s/generalise - Success: subtype=%s",J,z,Z.subtype),Y.json(Z)}catch(J){T5("POST /api/p/%s/documents/%s/generalise - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),Object.freeze({})},yi8=Object.freeze({create:YG1});var bi8=n6(k4(),1);var S9=bi8.default("caw:api:export"),JG1=($,{core:K})=>{return $.get("/api/p/:projectId/exports",async(q,Y)=>{try{let{projectId:J}=q.params;S9("GET /api/p/%s/exports - Listing export files",J);let z=await K.listExports(J);S9("GET /api/p/%s/exports - Found %d export files",J,z.length),Y.json({ok:!0,exports:z})}catch(J){S9("GET /api/p/:projectId/exports - Error: %s",J.message),w6(J,Y)}}),$.get("/api/p/:projectId/export/preview",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z}=q.query;S9("GET /api/p/%s/export/preview - Previewing export: store=%s",J,z);let W=await K.exportPreview(J,{store:z});S9("GET /api/p/%s/export/preview - Preview complete: %d to export, %d draft-only",J,(W.toExport?.folders?.length||0)+(W.toExport?.documents?.length||0)+(W.toExport?.templates?.length||0),(W.draftOnly?.documents?.length||0)+(W.draftOnly?.templates?.length||0)),Y.json(W)}catch(J){S9("GET /api/p/:projectId/export/preview - Error: %s",J.message),w6(J,Y)}}),$.post("/api/p/:projectId/export",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z,confirm:W}=q.body;S9("POST /api/p/%s/export - Export request: store=%s, confirm=%s",J,z,W);let Z=await K.exportDocuments(J,{store:z,confirm:W});if(W)S9("POST /api/p/%s/export - Export complete: %s",J,Z.filename);else S9("POST /api/p/%s/export - Preview returned (confirm=false)",J);Y.json(Z)}catch(J){S9("POST /api/p/:projectId/export - Error: %s",J.message),w6(J,Y)}}),$.post("/api/p/:projectId/import",async(q,Y)=>{try{let{projectId:J}=q.params,{filename:z,store:W}=q.body;S9("POST /api/p/%s/import - Import request: filename=%s, store=%s",J,z,W);let Z=await K.importDocuments(J,{filename:z,store:W});S9("POST /api/p/%s/import - Import complete: %d folders, %d documents, %d templates",J,Z.counts?.folders||0,Z.counts?.documents||0,Z.counts?.templates||0),Y.json({ok:!0,...Z})}catch(J){S9("POST /api/p/:projectId/import - Error: %s",J.message),w6(J,Y)}}),Object.freeze({})},ui8=Object.freeze({create:JG1});var mi8=n6(k4(),1);var I9=mi8.default("caw:api:export"),zG1=($,{core:K})=>{return $.get("/api/shared/exports",async(q,Y)=>{try{I9("GET /api/shared/exports - Listing shared store export files");let J=await K.listGlobalExports();I9("GET /api/shared/exports - Found %d export files",J.length),Y.json({ok:!0,exports:J})}catch(J){I9("GET /api/shared/exports - Error: %s",J.message),w6(J,Y)}}),$.get("/api/shared/export/preview",async(q,Y)=>{try{I9("GET /api/shared/export/preview - Previewing shared store export");let J=await K.globalExportPreview();I9("GET /api/shared/export/preview - Preview complete: %d to export, %d draft-only",(J.toExport?.folders?.length||0)+(J.toExport?.documents?.length||0)+(J.toExport?.templates?.length||0),(J.draftOnly?.documents?.length||0)+(J.draftOnly?.templates?.length||0)),Y.json(J)}catch(J){I9("GET /api/shared/export/preview - Error: %s",J.message),w6(J,Y)}}),$.post("/api/shared/export",async(q,Y)=>{try{let{confirm:J}=q.body;I9("POST /api/shared/export - Export request: confirm=%s",J);let z=await K.globalExportDocuments({confirm:J});if(J)I9("POST /api/shared/export - Export complete: %s",z.filename);else I9("POST /api/shared/export - Preview returned (confirm=false)");Y.json(z)}catch(J){I9("POST /api/shared/export - Error: %s",J.message),w6(J,Y)}}),$.post("/api/shared/import",async(q,Y)=>{try{let{filename:J}=q.body;I9("POST /api/shared/import - Import request: filename=%s",J);let z=await K.globalImportDocuments({filename:J});I9("POST /api/shared/import - Import complete: %d folders, %d documents, %d templates",z.counts?.folders||0,z.counts?.documents||0,z.counts?.templates||0),Y.json({ok:!0,...z})}catch(J){I9("POST /api/shared/import - Error: %s",J.message),w6(J,Y)}}),Object.freeze({})},Bi8=Object.freeze({create:zG1});var Ui8=n6(k4(),1);var G5=Ui8.default("caw:api:stories"),WG1=($,{core:K})=>{return $.post("/api/p/:projectId/stories",async(q,Y)=>{try{let{projectId:J}=q.params,{name:z,store:W="A",state:Z}=q.body;G5("POST /api/p/%s/stories - Creating story: name=%s, store=%s, state=%s",J,z,W,Z);let H=await K.createStory(J,{name:z,store:W,state:Z});Y.status(201).json(H)}catch(J){G5("POST /api/p/%s/stories - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/stories",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z="A"}=q.query;G5("GET /api/p/%s/stories - Listing stories: store=%s",J,z);let W=await K.listStories(J,{store:z});Y.json(W)}catch(J){G5("GET /api/p/%s/stories - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/stories/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;G5("GET /api/p/%s/stories/%s - Getting story",J,z);let W=await K.getStory(J,{id:z});if(!W)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});Y.json(W)}catch(J){G5("GET /api/p/%s/stories/%s - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.patch("/api/p/:projectId/stories/:id/state",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{state:W}=q.body;if(!W)return Y.status(400).json({error:"State is required",code:"MISSING_STATE"});G5("PATCH /api/p/%s/stories/%s/state - Updating state to: %s",J,z,W);let Z=await K.updateStoryState(J,{id:z,state:W});Y.json(Z)}catch(J){G5("PATCH /api/p/%s/stories/%s/state - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.patch("/api/p/:projectId/stories/:id/name",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{name:W}=q.body;if(!W)return Y.status(400).json({error:"Name is required",code:"MISSING_NAME"});G5("PATCH /api/p/%s/stories/%s/name - Renaming to: %s",J,z,W);let Z=await K.renameStory(J,{id:z,name:W});Y.json(Z)}catch(J){G5("PATCH /api/p/%s/stories/%s/name - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.delete("/api/p/:projectId/stories/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;G5("DELETE /api/p/%s/stories/%s - Deleting story",J,z);let W=await K.deleteStory(J,{id:z});Y.json(W)}catch(J){G5("DELETE /api/p/%s/stories/%s - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),Object.freeze({})},Fi8=Object.freeze({create:WG1});var Xo8=n6(k4(),1),Ih=n6(Ho8(),1);var Lq=Xo8.default("caw:api:assets"),Oo8=["image/png","image/jpeg","image/gif","image/webp"],ov1=Ih.default({storage:Ih.default.memoryStorage(),limits:{fileSize:10485760},fileFilter:($,K,q)=>{if(Oo8.includes(K.mimetype))q(null,!0);else q(Error(`Unsupported MIME type: ${K.mimetype}. Allowed: ${Oo8.join(", ")}`))}}),av1=($,{core:K})=>{return $.post("/api/p/:projectId/assets",ov1.single("file"),async(q,Y)=>{try{let{projectId:J}=q.params,{store:z="A"}=q.query,W=q.file;if(!W)return Y.status(400).json({error:"No file uploaded",code:"MISSING_FILE"});let Z=q.body.widthPx?parseInt(q.body.widthPx,10):void 0,H=q.body.heightPx?parseInt(q.body.heightPx,10):void 0,O=q.body.displayWidth?parseInt(q.body.displayWidth,10):void 0,X=q.body.displayHeight?parseInt(q.body.displayHeight,10):void 0;Lq("POST /api/p/%s/assets - Uploading: %s (%s, %d bytes)",J,W.originalname,W.mimetype,W.size);let P=await K.createAsset(J,{store:z,buffer:W.buffer,mimeType:W.mimetype,originalFilename:W.originalname,widthPx:Z,heightPx:H,displayWidth:O,displayHeight:X});Y.status(201).json(P)}catch(J){Lq("POST /api/p/%s/assets - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/assets/:id/binary",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;Lq("GET /api/p/%s/assets/%s/binary - Retrieving binary",J,z);let W=await K.readAssetBinary(J,{id:z});Y.set("Content-Type",W.mimeType),Y.set("Content-Length",W.sizeBytes),Y.set("Cache-Control","public, max-age=31536000, immutable"),Y.set("Content-Disposition",`inline; filename="${W.originalFilename}"`),Y.send(W.buffer)}catch(J){Lq("GET /api/p/%s/assets/%s/binary - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/assets/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;Lq("GET /api/p/%s/assets/%s - Retrieving metadata",J,z);let W=await K.readAsset(J,{id:z});Y.json(W)}catch(J){Lq("GET /api/p/%s/assets/%s - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/assets",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z="A"}=q.query;Lq("GET /api/p/%s/assets - Listing assets for store %s",J,z);let W=await K.listAssets(J,{store:z});Y.json(W)}catch(J){Lq("GET /api/p/%s/assets - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.delete("/api/p/:projectId/assets/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;Lq("DELETE /api/p/%s/assets/%s - Deleting asset",J,z);let W=await K.deleteAsset(J,{id:z});Y.json(W)}catch(J){Lq("DELETE /api/p/%s/assets/%s - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.use("/api/p/:projectId/assets",(q,Y,J,z)=>{if(q instanceof Ih.default.MulterError){if(q.code==="LIMIT_FILE_SIZE")return J.status(400).json({error:"File too large. Maximum size is 10MB.",code:"FILE_TOO_LARGE"});return J.status(400).json({error:q.message,code:"UPLOAD_ERROR"})}if(q.message&&q.message.includes("Unsupported MIME type"))return J.status(400).json({error:q.message,code:"UNSUPPORTED_MIME_TYPE"});z(q)}),Object.freeze({})},Po8=Object.freeze({create:av1});var wo8=n6(k4(),1);var $9=wo8.default("caw:api:jobs"),rv1=($,{core:K})=>{return $.post("/api/p/:projectId/jobs",async(q,Y)=>{try{let{projectId:J}=q.params,{name:z,agent:W,model:Z,prompt:H,store:O="A",workingDirectory:X,objectId:P,streaming:w}=q.body;$9("POST /api/p/%s/jobs - Creating job: agent=%s, model=%s, store=%s, workingDirectory=%s, objectId=%s, streaming=%s",J,W,Z,O,X||"default",P||"none",w||!1);let T=await K.createJob(J,{name:z,agent:W,model:Z,prompt:H,store:O,workingDirectory:X,objectId:P,streaming:w});Y.status(201).json(T)}catch(J){$9("POST /api/p/%s/jobs - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/jobs",async(q,Y)=>{try{let{projectId:J}=q.params,{store:z="A",status:W}=q.query;$9("GET /api/p/%s/jobs - Listing jobs: store=%s, status=%s",J,z,W||"all");let Z=await K.listJobs(J,{store:z,status:W});Y.json(Z)}catch(J){$9("GET /api/p/%s/jobs - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/jobs/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;$9("GET /api/p/%s/jobs/%s - Getting job",J,z);let W=await K.getJob(J,{id:z});if(!W)return Y.status(404).json({error:"Not found",code:"NOT_FOUND"});Y.json(W)}catch(J){$9("GET /api/p/%s/jobs/%s - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.post("/api/p/:projectId/jobs/:id/continue",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{prompt:W,model:Z}=q.body;$9("POST /api/p/%s/jobs/%s/continue - Continuing job",J,z);let H=await K.continueJob(J,{id:z,prompt:W,model:Z});Y.json(H)}catch(J){$9("POST /api/p/%s/jobs/%s/continue - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.post("/api/p/:projectId/jobs/:id/stop",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;$9("POST /api/p/%s/jobs/%s/stop - Stopping job",J,z);let W=await K.stopJob(J,{id:z});Y.json(W)}catch(J){$9("POST /api/p/%s/jobs/%s/stop - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.get("/api/p/:projectId/jobs/:id/process-status",async(q,Y)=>{try{let{projectId:J,id:z}=q.params;$9("GET /api/p/%s/jobs/%s/process-status",J,z);let W=await K.getProcessStatus(J,{id:z});Y.json(W)}catch(J){$9("GET /api/p/%s/jobs/%s/process-status - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),$.patch("/api/p/:projectId/jobs/:id",async(q,Y)=>{try{let{projectId:J,id:z}=q.params,{name:W}=q.body;$9("PATCH /api/p/%s/jobs/%s - Renaming job",J,z);let Z=await K.renameJob(J,{id:z,name:W});Y.json(Z)}catch(J){$9("PATCH /api/p/%s/jobs/%s - Error: %s",q.params.projectId,q.params.id,J.message),w6(J,Y)}}),Object.freeze({})},To8=Object.freeze({create:rv1});var Go8=n6(k4(),1);var tP=Go8.default("caw:api:worktrees"),sv1=($,{core:K})=>{return $.get("/api/p/:projectId/worktrees",async(q,Y)=>{try{let{projectId:J}=q.params;tP("GET /api/p/%s/worktrees - Listing worktrees",J);let z=await K.listWorktrees(J);tP("GET /api/p/%s/worktrees - Found %d worktrees, isGitProject=%s",J,z.worktrees.length,z.isGitProject),Y.json(z)}catch(J){tP("GET /api/p/%s/worktrees - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),$.post("/api/p/:projectId/worktrees",async(q,Y)=>{try{let{projectId:J}=q.params,{branch:z,baseBranch:W}=q.body;tP("POST /api/p/%s/worktrees - Creating worktree: branch=%s, baseBranch=%s",J,z,W||"default");let Z=await K.createWorktree(J,{branch:z,baseBranch:W});tP("POST /api/p/%s/worktrees - Created worktree at %s for branch %s",J,Z.path,Z.branch),Y.status(201).json(Z)}catch(J){tP("POST /api/p/%s/worktrees - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),Object.freeze({})},jo8=Object.freeze({create:sv1});var vo8=n6(k4(),1);var ln=vo8.default("caw:api:search"),tv1=($,{core:K})=>{return $.get("/api/p/:projectId/search",async(q,Y)=>{try{let{projectId:J}=q.params,{q:z,store:W,limit:Z,offset:H}=q.query,O=Z?parseInt(Z,10):20,X=H?parseInt(H,10):0,P=Z?parseInt(Z,10):void 0,w=H?parseInt(H,10):void 0;ln("GET /api/p/%s/search - q=%s, store=%s, limit=%s, offset=%s",J,z,W,Z,H);let T=await K.searchContent(J,{query:z,limit:P,offset:w,store:W});ln("GET /api/p/%s/search - Results count: %d",J,T.length),Y.json({hits:T,limit:O,offset:X})}catch(J){ln("GET /api/p/%s/search - Error: %s",q.params.projectId,J.message),w6(J,Y)}}),Object.freeze({})},Vo8=Object.freeze({create:tv1});var Ao8=n6(k4(),1);var EZ=Ao8.default("caw:api:events"),ev1=($,{core:K})=>{return $.get("/api/p/:projectId/events",async(q,Y)=>{try{let{projectId:J}=q.params;EZ("GET /api/p/%s/events - Client connecting",J);let z=await K.getRootStore(J),W=await K.getStoryService(J),Z=await K.getJobService(J);EZ("GET /api/p/%s/events - Got root store and services, setting up SSE subscription",J),Y.setHeader("Content-Type","text/event-stream"),Y.setHeader("Cache-Control","no-cache"),Y.setHeader("Connection","keep-alive"),Y.flushHeaders(),Y.write(`: connected
|
|
626
626
|
|
|
627
627
|
`);let H=!1,O=(w,T)=>{if(H)return;try{EZ("SSE sending event: %s with data: %o",w,T),Y.write(`event: ${w}
|
|
628
628
|
`),Y.write(`data: ${JSON.stringify(T)}
|