1import{y as s,A as m}from"./index-BIYvpNC2.js";import"./vendor-react-DqEQpdJ_.js";import"./vendor-icons-DEPTt6Sl.js";import"./vendor-radix-d0USATb1.js";const p="/api/kanban/board-assistant",i="/api/kanban/board-orchestrator";class _{async generate(a,e,r){if(r&&r.length>0){const o=new FormData;o.append("requirements",a),e&&o.append("conversation_id",e),r.forEach(d=>{o.append("files",d)});const n=await s.upload(`${p}/generate`,o);if(!n.success||!n.data)throw new Error(n.error||"Failed to generate board");return n.data}const t=await s.post(`${p}/generate`,{requirements:a,conversation_id:e});if(!t.success||!t.data)throw new Error(t.error||"Failed to generate board");return t.data}async refine(a,e){const r=await s.post(`${p}/refine`,{feedback:a,conversation_id:e});if(!r.success||!r.data)throw new Error(r.error||"Failed to refine board");return r.data}async create(a){const e=await s.post(`${p}/create`,{board_draft:a});if(!e.success||!e.data)throw new Error(e.error||"Failed to create board");return e.data}async getTools(){const a=await s.get(`${p}/tools`);if(!a.success||!a.data)throw new Error(a.error||"Failed to get tools");return a.data.tools}async clearConversation(a){const e=await s.delete(`${p}/conversations/${a}`);if(!e.success)throw new Error(e.error||"Failed to clear conversation")}async*streamGenerate(a,e,r,t,o,n,d){let f;const v=s.getOrganizationId();let y={...v?{"X-Organization-ID":v}:{}};if(r&&r.length>0){const c=new FormData;c.append("message",a),e&&c.append("conversation_id",e),n&&c.append("source_board_id",n),d&&c.append("mode",d),r.forEach(h=>{c.append("files",h)}),f=c}else f=JSON.stringify({message:a,conversation_id:e,source_board_id:n,mode:d}),y["Content-Type"]="application/json";const u=await fetch(`${m}${i}/stream`,{method:"POST",headers:y,body:f,credentials:"include",signal:o});if(!u.ok)throw new Error(`Stream request failed: ${u.status}`);const l=u.body?.getReader();if(!l)throw new Error("No response body");const E=new TextDecoder;let g="";try{for(;;){if(o?.aborted){l.cancel();break}const{done:c,value:h}=await l.read();if(c)break;g+=E.decode(h,{stream:!0});const $=g.split(` 2`);g=$.pop()||"";for(const b of $)if(b.startsWith("data: "))try{const w=JSON.parse(b.slice(6));t&&t(w),yield w}catch(w){console.warn("Failed to parse SSE event:",w)}}}finally{l.releaseLock()}}async generateV2(a,e,r){if(r&&r.length>0){const o=new FormData;o.append("message",a),e&&o.append("conversation_id",e),r.forEach(d=>{o.append("files",d)});const n=await s.upload(`${i}/generate`,o);if(!n.success||!n.data)throw new Error(n.error||"Failed to generate board");return n.data}const t=await s.post(`${i}/generate`,{message:a,conversation_id:e});if(!t.success||!t.data)throw new Error(t.error||"Failed to generate board");return t.data}async clearConversationV2(a){const e=await s.delete(`${i}/conversations/${a}`);if(!e.success)throw new Error(e.error||"Failed to clear conversation")}async renameConversationV2(a,e){const r=await s.patch(`${i}/conversations/${a}/rename`,{title:e});if(!r.success)throw new Error(r.error||"Failed to rename conversation")}async applyBoardV2(a,e){const r=await s.post(`${i}/apply`,{conversation_id:a,board_draft:e});if(!r.success||!r.data)throw new Error(r.error||"Failed to create board");return{board_id:r.data.board_id??r.data.id,message:"Board created successfully"}}async listConversationsV2(a,e){const r=new URLSearchParams;a&&r.append("limit",a.toString()),e&&r.append("offset",e.toString());const t=await s.get(`${i}/conversations?${r.toString()}`);if(!t.success||!t.data)throw new Error(t.error||"Failed to list conversations");return t.data}async getConversationV2(a){const e=await s.get(`${i}/conversations/${a}`);if(!e.success||!e.data)throw new Error(e.error||"Failed to get conversation");return e.data}async updateConfigValues(a,e){const r=await s.patch(`${i}/conversations/${a}/config-values`,{config_values:e});if(!r.success)throw new Error(r.error||"Failed to update config values")}async getEvents(a,e){const r=new URLSearchParams;e!==void 0&&r.set("after_id",e.toString());const t=`${i}/conversations/${a}/events${r.toString()?`?${r}`:""}`,o=await s.get(t);if(!o.success||!o.data)throw new Error(o.error||"Failed to get events");return o.data.events}}const V=new _;export{V as boardAssistantService};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.