@redocly/replay 0.28.0-next.4 → 0.28.0-next.6

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.
Files changed (64) hide show
  1. package/dist/{replay-AiChatProvider-BIplPHOS.js → replay-AiChatProvider-Bj2P_hdU.js} +371 -369
  2. package/dist/replay-AiChatProvider-GeumgtIo.js +6 -0
  3. package/dist/{replay-AiChatSqliteDBStorage-Bay95FHW.js → replay-AiChatSqliteDBStorage-0M2Ejnzu.js} +1 -1
  4. package/dist/{replay-AiChatSqliteDBStorage-C-rkQ3jG.js → replay-AiChatSqliteDBStorage-BWJl1qdO.js} +1 -1
  5. package/dist/{replay-AiPanel-DU5aVA3q.js → replay-AiPanel-DfOpKMDQ.js} +709 -712
  6. package/dist/replay-AiPanel-ON_QfwBN.js +742 -0
  7. package/dist/replay-FileWatcher-04GlEkra.js +360 -0
  8. package/dist/replay-FileWatcher-B-T0jz_R.js +1 -0
  9. package/dist/{replay-SemanticSearchService-Dk4UTm2r.js → replay-SemanticSearchService-BQgdj2wy.js} +1 -1
  10. package/dist/{replay-SemanticSearchService-BWwCFW3F.js → replay-SemanticSearchService-CPIb_cUk.js} +7 -7
  11. package/dist/{replay-SqliteDBStorage-BFdjYsG7.js → replay-SqliteDBStorage-Bt2xXqei.js} +1 -1
  12. package/dist/{replay-SqliteDBStorage-DGQjzDy4.js → replay-SqliteDBStorage-vehgvWXZ.js} +1 -1
  13. package/dist/{replay-TauriFileSystemAdapter-CLzYSck7.js → replay-TauriFileSystemAdapter-D2yxrS6Q.js} +1 -1
  14. package/dist/{replay-TauriFileSystemAdapter-C8k9RvT1.js → replay-TauriFileSystemAdapter-YLdtT-Xp.js} +1 -1
  15. package/dist/{replay-TauriRootStorage-C1MIH5ji.js → replay-TauriRootStorage-BE6RmQfE.js} +162 -165
  16. package/dist/replay-TauriRootStorage-DcENVsBJ.js +1 -0
  17. package/dist/{replay-agent-loop-BoEw65rR.js → replay-agent-loop-CvopOugZ.js} +13 -13
  18. package/dist/{replay-agent-loop-Cm1iS9G2.js → replay-agent-loop-UwDSVh-4.js} +1 -1
  19. package/dist/{replay-ai-chat-mappers-IZNFNXug.js → replay-ai-chat-mappers-B7fm-v_w.js} +1 -1
  20. package/dist/{replay-ai-chat-mappers-Csm9vJrG.js → replay-ai-chat-mappers-yKBypIXh.js} +1 -1
  21. package/dist/{replay-create-model-BqvD-0wF.js → replay-create-model-CHahxEJy.js} +3 -3
  22. package/dist/{replay-create-model-Y9UJSztb.js → replay-create-model-CyBZMAWB.js} +4 -4
  23. package/dist/{replay-db-BImXgUGU.js → replay-db-CifZMdnr.js} +5 -5
  24. package/dist/{replay-db-C7FD3opa.js → replay-db-EWL-uAt-.js} +1 -1
  25. package/dist/{replay-external-resolver-CjM7Da6t.js → replay-external-resolver-D5fSfJEm.js} +1 -1
  26. package/dist/{replay-external-resolver-Bj3sLTnz.js → replay-external-resolver-G11iwLVZ.js} +2 -2
  27. package/dist/{replay-index-Dxk-kqkZ.js → replay-index-B2NUTBd8.js} +1 -1
  28. package/dist/{replay-index-CKRKzXMt.js → replay-index-B3MQaIS-.js} +1 -1
  29. package/dist/replay-index-Coy4kD_x.js +7009 -0
  30. package/dist/{replay-index-DJwfdo0s.js → replay-index-CqRiEj9e.js} +1 -1
  31. package/dist/{replay-index-DlTloE6S.js → replay-index-D0mbH_TN.js} +1 -1
  32. package/dist/{replay-index-Cp06WK82.js → replay-index-DDqKE6bs.js} +5 -5
  33. package/dist/{replay-index-xheWgsnj.js → replay-index-DrI9ZFwH.js} +2 -2
  34. package/dist/{replay-index-BH8cTSEK.js → replay-index-Dx8O3ZoA.js} +68783 -67874
  35. package/dist/{replay-lint-BIbkYU09.js → replay-lint-BiOcDIDr.js} +3 -3
  36. package/dist/{replay-lint--iBW-6Vj.js → replay-lint-CAo2fuiZ.js} +3 -3
  37. package/dist/{replay-lint-graphql-EXBI8I89.js → replay-lint-graphql-DAa8UNRg.js} +1 -1
  38. package/dist/{replay-lint-graphql-2b4GIER6.js → replay-lint-graphql-DzI2rUbR.js} +1 -1
  39. package/dist/replay-periodic-revalidation-D18ihfUc.js +1 -0
  40. package/dist/replay-periodic-revalidation-w7mrtjYg.js +22 -0
  41. package/dist/{replay-resolve-D9BUvjqv.js → replay-resolve-CojDRP37.js} +1 -1
  42. package/dist/{replay-resolve-B5yIfyuT.js → replay-resolve-DgAthAfi.js} +1 -1
  43. package/dist/{replay-respect-run-DNFoFnJU.js → replay-respect-run-3ukV7LMg.js} +1 -1
  44. package/dist/{replay-respect-run-Bx46aUHi.js → replay-respect-run-DNvB8rLX.js} +3 -3
  45. package/dist/replay-tauri-path-DM8PdMK8.js +22 -0
  46. package/dist/{replay-tauri-path-C8GiFO5s.js → replay-tauri-path-kr9DtxLs.js} +1 -1
  47. package/dist/{replay-useAiChatQueries-BTuu2xLG.js → replay-useAiChatQueries-BULoKr4E.js} +1564 -1395
  48. package/dist/replay-useAiChatQueries-BdjsFz1P.js +215 -0
  49. package/dist/{replay-validate-key-D4M7QvCw.js → replay-validate-key-CGmguj5X.js} +1 -1
  50. package/dist/{replay-validate-key-CjcIElmE.js → replay-validate-key-DzseOR5a.js} +2 -2
  51. package/dist/replay.cjs +1 -1
  52. package/dist/replay.d.ts +3 -3
  53. package/dist/replay.js +10 -10
  54. package/package.json +12 -5
  55. package/dist/replay-AiChatProvider-TF1u9E5L.js +0 -6
  56. package/dist/replay-AiPanel-DzGN1t86.js +0 -742
  57. package/dist/replay-FileWatcher-XMkIoDEA.js +0 -1
  58. package/dist/replay-FileWatcher-iYbHpwCv.js +0 -352
  59. package/dist/replay-TauriRootStorage-CiGY8MO6.js +0 -1
  60. package/dist/replay-index-BuYoH96w.js +0 -6982
  61. package/dist/replay-periodic-revalidation-BoyLQHtg.js +0 -1
  62. package/dist/replay-periodic-revalidation-Dsp-n7ui.js +0 -21
  63. package/dist/replay-tauri-path-BVoW6En0.js +0 -22
  64. package/dist/replay-useAiChatQueries-BDgjmzz-.js +0 -215
@@ -0,0 +1,6 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const X=require("react/jsx-runtime"),i=require("react"),o=require("./replay-index-Coy4kD_x.js"),te=require("./replay-create-model-CHahxEJy.js"),fe=require("./replay-agent-loop-UwDSVh-4.js"),pe=require("./replay-db-EWL-uAt-.js"),v=require("./replay-useAiChatQueries-BdjsFz1P.js"),B=require("@tanstack/react-query"),Z=require("./replay-ai-chat-mappers-B7fm-v_w.js");class ge{handlers=new Map;middlewares;constructor(t){this.middlewares=t?.middlewares??[]}register(t){this.handlers.set(t.name,t)}getToolSet(){const t={};for(const[n,s]of this.handlers)t[n]=this.buildTool(s);return t}buildTool(t){return{...t.definition,execute:this.wrapExecutor(t)}}wrapExecutor(t){const n=(a,r)=>({isError:!0,error:{message:a,details:r}}),s=this.applyMiddlewares(t.name,t.execute);return(a,r)=>{if(r.abortSignal?.aborted)return n("Tool execution was aborted.");try{const l=s(a,r);return typeof l=="object"&&l!==null&&"then"in l?l.then(c=>c,c=>n(c instanceof Error?c.message:"Unknown tool execution error")):l}catch(l){return n(l instanceof Error?l.message:"Unknown tool execution error")}}}applyMiddlewares(t,n){return this.middlewares.length===0?n:this.middlewares.reduceRight((s,a)=>a(t,s),n)}}function ce(){const e=B.useQueryClient();return B.useMutation({async mutationFn(t){const n=Z.buildPersistableUiChat(t);await o.AiChatServiceFactory.getInstance().upsert(n)},onSuccess(){e.invalidateQueries({queryKey:o.aiChatKeys.all()})},onError(t){console.error("Failed to upsert ai chat item:",t)}})}function Ce(e){const t=B.useQueryClient(),n=o.aiChatKeys.detailTitle(e??"");return B.useMutation({mutationKey:n,async mutationFn(s){if(t.isMutating({mutationKey:n,exact:!0})>1)return;const a=Z.buildPersistableUiChat(s);await o.AiChatServiceFactory.getInstance().upsert(a)},onSuccess(){t.invalidateQueries({queryKey:o.aiChatKeys.all()})},onError(s){console.error("Failed to upsert ai chat item:",s)}})}function me(){const e=B.useQueryClient();return B.useMutation({async mutationFn(t){await o.AiChatServiceFactory.getInstance().remove(t)},onMutate:async t=>{await e.cancelQueries({queryKey:o.aiChatKeys.all()});const n=e.getQueryData(o.aiChatKeys.all());n&&e.setQueryData(o.aiChatKeys.all(),n.filter(s=>s.id!==t)),e.setQueryData(o.aiChatKeys.detail(t),null),e.setQueriesData({queryKey:o.aiChatKeys.infiniteHistories()},s=>s&&{...s,pages:s.pages.map(a=>({...a,items:a.items.filter(r=>r.id!==t)}))})},onError(t){console.error("Failed to remove ai chat:",t)},onSettled(){e.invalidateQueries({queryKey:o.aiChatKeys.all()})}})}var ee,oe;function ve(){if(oe)return ee;oe=1;function e(t,n){if(typeof t!="function")throw new TypeError(`Expected the first argument to be a \`function\`, got \`${typeof t}\`.`);let s,a=0;return function(...l){clearTimeout(s);const c=Date.now(),d=c-a,p=n-d;p<=0?(a=c,t.apply(this,l)):s=setTimeout(()=>{a=Date.now(),t.apply(this,l)},p)}}return ee=e,ee}var we=ve();const Ie=o.getDefaultExportFromCjs(we);var ue=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)},h=(e,t,n)=>(ue(e,t,"read from private field"),n?n.call(e):t.get(e)),A=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},R=(e,t,n,s)=>(ue(e,t,"write to private field"),t.set(e,n),n);function Te(e,t){return t!=null?Ie(e,t):e}var w,Y,J,j,Q,V,W,ne,se,ye=class{constructor(e=[]){A(this,w,void 0),A(this,Y,"ready"),A(this,J,void 0),A(this,j,new Set),A(this,Q,new Set),A(this,V,new Set),this.pushMessage=t=>{R(this,w,h(this,w).concat(t)),h(this,W).call(this)},this.popMessage=()=>{R(this,w,h(this,w).slice(0,-1)),h(this,W).call(this)},this.replaceMessage=(t,n)=>{R(this,w,[...h(this,w).slice(0,t),this.snapshot(n),...h(this,w).slice(t+1)]),h(this,W).call(this)},this.snapshot=t=>structuredClone(t),this["~registerMessagesCallback"]=(t,n)=>{const s=n?Te(t,n):t;return h(this,j).add(s),()=>{h(this,j).delete(s)}},this["~registerStatusCallback"]=t=>(h(this,Q).add(t),()=>{h(this,Q).delete(t)}),this["~registerErrorCallback"]=t=>(h(this,V).add(t),()=>{h(this,V).delete(t)}),A(this,W,()=>{h(this,j).forEach(t=>t())}),A(this,ne,()=>{h(this,Q).forEach(t=>t())}),A(this,se,()=>{h(this,V).forEach(t=>t())}),R(this,w,e)}get status(){return h(this,Y)}set status(e){R(this,Y,e),h(this,ne).call(this)}get error(){return h(this,J)}set error(e){R(this,J,e),h(this,se).call(this)}get messages(){return h(this,w)}set messages(e){R(this,w,[...e]),h(this,W).call(this)}};w=new WeakMap;Y=new WeakMap;J=new WeakMap;j=new WeakMap;Q=new WeakMap;V=new WeakMap;W=new WeakMap;ne=new WeakMap;se=new WeakMap;var U,ae=class extends te.AbstractChat{constructor({messages:e,...t}){const n=new ye(e);super({...t,state:n}),A(this,U,void 0),this["~registerMessagesCallback"]=(s,a)=>h(this,U)["~registerMessagesCallback"](s,a),this["~registerStatusCallback"]=s=>h(this,U)["~registerStatusCallback"](s),this["~registerErrorCallback"]=s=>h(this,U)["~registerErrorCallback"](s),R(this,U,n)}};U=new WeakMap;function Ae({experimental_throttle:e,resume:t=!1,...n}={}){const s=i.useRef("chat"in n?{}:{onToolCall:n.onToolCall,onData:n.onData,onFinish:n.onFinish,onError:n.onError,sendAutomaticallyWhen:n.sendAutomaticallyWhen});"chat"in n||(s.current={onToolCall:n.onToolCall,onData:n.onData,onFinish:n.onFinish,onError:n.onError,sendAutomaticallyWhen:n.sendAutomaticallyWhen});const a={...n,onToolCall:u=>{var g,f;return(f=(g=s.current).onToolCall)==null?void 0:f.call(g,u)},onData:u=>{var g,f;return(f=(g=s.current).onData)==null?void 0:f.call(g,u)},onFinish:u=>{var g,f;return(f=(g=s.current).onFinish)==null?void 0:f.call(g,u)},onError:u=>{var g,f;return(f=(g=s.current).onError)==null?void 0:f.call(g,u)},sendAutomaticallyWhen:u=>{var g,f,_;return(_=(f=(g=s.current).sendAutomaticallyWhen)==null?void 0:f.call(g,u))!=null?_:!1}},r=i.useRef("chat"in n?n.chat:new ae(a));("chat"in n&&n.chat!==r.current||"id"in n&&n.id!=null&&r.current.id!==n.id)&&(r.current="chat"in n?n.chat:new ae(a));const c=i.useCallback(u=>r.current["~registerMessagesCallback"](u,e),[e,r.current.id]),d=i.useSyncExternalStore(c,()=>r.current.messages,()=>r.current.messages),p=i.useSyncExternalStore(r.current["~registerStatusCallback"],()=>r.current.status,()=>r.current.status),I=i.useSyncExternalStore(r.current["~registerErrorCallback"],()=>r.current.error,()=>r.current.error),T=i.useCallback(u=>{typeof u=="function"&&(u=u(r.current.messages)),r.current.messages=u},[r]);return i.useEffect(()=>{t&&r.current.resumeStream()},[t,r]),{id:r.current.id,messages:d,setMessages:T,sendMessage:r.current.sendMessage,regenerate:r.current.regenerate,clearError:r.current.clearError,stop:r.current.stop,error:I,resumeStream:r.current.resumeStream,status:p,addToolResult:r.current.addToolOutput,addToolOutput:r.current.addToolOutput,addToolApprovalResponse:r.current.addToolApprovalResponse}}const be=20;function Se(e){if(e.length===0)return"No OpenAPI specs loaded.";const t=e.slice(0,be),n=t.map(ke),s=e.length-t.length;return s>0&&n.push(` …and ${s} more API(s) not shown.`),[`Loaded APIs (${e.length}):`,...n].join(`
2
+ `)}function ke(e){return[` apiId="${e.apiId}"`,`title="${e.title}"`,e.version?`version="${e.version}"`:null,e.primaryServer?`server="${e.primaryServer}"`:null].filter(Boolean).join(" ")}const Ee=30;function Me(e){if(e.length===0)return"No Arazzo collections loaded.";const t=[`Arazzo collections (${e.length}):`];let n=Ee,s=0,a=0;for(const l of e){if(n<=0){s+=l.workflows.length,a++;continue}if(t.push(Re(l)),n--,l.workflows.length===0)t.push(" (no workflows)");else if(n>=2){t.push(` workflows (${l.workflows.length}):`),n--;for(const c of l.workflows)n>0?(t.push(` ${_e(c)}`),n--):s++}else s+=l.workflows.length}const r=[s>0?`${s} more workflow(s)`:null,a>0?`${a} more collection(s)`:null].filter(Boolean);return r.length>0&&t.push(` …and ${r.join(", plus ")} not shown.`),t.join(`
3
+ `)}function Re(e){const t=e.sourceApiIds.length>0?` apis=[${e.sourceApiIds.join(", ")}]`:"";return` collectionId="${e.collectionId}" title="${e.title}"${t}`}function _e(e){const t=`id="${e.workflowId}"`,n=e.summary?`label="${e.summary}"`:null,s=`[${e.stepCount} step${e.stepCount!==1?"s":""}]`;return[t,n,s].filter(Boolean).join(" ")}const Pe=20;function De(e){if(e.length===0)return"No environments configured.";const t=e.slice(0,Pe),n=t.map(xe),s=e.length-t.length;return s>0&&n.push(` …and ${s} more environment(s) not shown.`),[`Environments (${e.length}); * marks the active environment:`,...n].join(`
4
+ `)}function xe(e){return[`${e.isActive?"*":" "} name="${e.name}"`,`inputs=${e.inputCount}`,`servers=${e.serverCount}`].join(" ")}const $e=30;function Oe(e){if(e.length===0)return"No tabs are open.";const t=e.slice(0,$e),n=t.map(We),s=e.length-t.length;return s>0&&n.push(` …and ${s} more tab(s) not shown.`),[`Open tabs (${e.length}), listed by tabIndex; * marks the active (focused) tab:`,...n].join(`
5
+ `)}function We(e){const t=[e.collectionId?`collectionId="${e.collectionId}"`:null,e.workflowId?`workflowId="${e.workflowId}"`:null,e.stepId?`stepId="${e.stepId}"`:null,e.operationId?`operationId="${e.operationId}"`:null].filter(Boolean),n=[e.isPreview?"preview":null,e.isDraft?"draft":null,e.isHistory?"history":null].filter(Boolean);return[`${e.isActive?"*":" "} ${e.tabIndex}.`,`type="${e.type}"`,`label="${e.label}"`,...t,n.length>0?`(${n.join(", ")})`:null].filter(Boolean).join(" ")}const Ue="Auto-attached snapshot of the user's current Replay UI state. Generated by Replay before each step; not written by the user. It is a shallow summary — use tools to read detailed tab contents when needed.";function Be(e){const t=`
6
+ `.repeat(2),n=[Ue,t,Oe(e.tabs),t,Se(e.apis),t,Me(e.collections),t,De(e.environments)].join("");return pe.section("active_state",n)}function Le(e){return e.map(Fe)}function Fe(e){return{apiId:e.id,title:e.info?.title??"Untitled API",version:e.info?.version,primaryServer:e.servers?.[0]?.url}}function Ne(e){return e.map(qe)}function qe(e){const t=(e.workflows??[]).map(s=>({workflowId:s.workflowId,summary:s.summary,stepCount:s.steps?.length??0})),n=(e.sourceDescriptions??[]).map(s=>s.apiId).filter(Boolean);return{collectionId:e.id,title:e.info?.title??"Untitled Collection",workflows:t,sourceApiIds:n}}function Ke(e,t){return e.filter(n=>n.state!==o.ItemState.Draft).map(n=>({name:n.name,isActive:n.name===t,inputCount:n.inputs.length,serverCount:n.servers.length}))}function je(e,t,n){return e.map((s,a)=>Qe(n,s,a,a===t))}function Qe(e,t,n,s){const a={tabIndex:n,type:t.data.type,isActive:s,isPreview:t.state===o.TabState.Preview};switch(t.data.type){case o.TabDataType.Collection:{const{collectionId:r}=t.data;return{...a,label:Ve(e,r)??r,collectionId:r}}case o.TabDataType.Workflow:{const{collectionId:r,workflowId:l}=t.data;return{...a,label:l,collectionId:r,workflowId:l}}case o.TabDataType.WorkflowRun:{const{collectionId:r,workflowId:l,historyId:c,label:d}=t.data;return{...a,label:d??`${l} run`,collectionId:r,workflowId:l,isHistory:c!=null}}case o.TabDataType.Step:{const r=t.data;return{...a,label:He(r),collectionId:r.collectionId,workflowId:r.workflowId,stepId:r.stepId,operationId:r.draftStep?.operation?.operationId??null,isDraft:!r.collectionId&&!r.workflowId,isHistory:r.historyId!=null}}}}function Ve(e,t){return e.find(n=>n.id===t)?.info.title}function He(e){if(e.stepId)return e.stepId;if(e.draftStep){const t=[o.getStepMethod(e.draftStep),o.getStepUrl(e.draftStep)].filter(Boolean).join(" ");if(t)return t}return"New Request"}function Ge(e){const t=e.get(o.collectionsAtom);return{tabs:je(e.get(o.tabsAtom),e.get(o.activeTabIdxAtom),t),apis:Le(e.get(o.apisAtom)),collections:Ne(t),environments:Ke(e.get(o.environmentsAtom),e.get(o.activeEnvironmentIdAtom))}}function ze(){const e=o.useCollections(),{tab:t}=o.useActiveTab(),n=t?.data??null;return i.useMemo(()=>{if(!n)return null;switch(n.type){case o.TabDataType.Collection:const a=o.findCollection(e,n.collectionId);return{...n,collection:a};case o.TabDataType.Workflow:const r=o.findWorkflow(e,{collectionId:n.collectionId,workflowId:n.workflowId});return{...n,workflow:r};case o.TabDataType.Step:const l=o.findStep(e,{collectionId:n.collectionId,workflowId:n.workflowId,stepId:n.stepId});return{...n,step:l};case o.TabDataType.WorkflowRun:const c=o.findWorkflow(e,{collectionId:n.collectionId,workflowId:n.workflowId});return{...n,workflow:c}}},[n,e])}function Ye(e){if(!e||typeof e!="object"||!("changes"in e)||!Array.isArray(e.changes))return e;const t=e.changes.filter(s=>s&&typeof s=="object"&&"approved"in s&&s.approved===!0),n="meta"in e&&typeof e.meta=="object"?e.meta:{};return{...e,changes:t,meta:{...n,totalChanges:e.changes.length,approvedChanges:t.length}}}function Je(){return(e,t)=>(n,s)=>t(Ye(n),s)}function Xe(){const{getApiOperation:e}=o.useApiOperationGetter(),t=o.useTabHandlers();return i.useMemo(()=>({getApiOperation:e,...t}),[e,t])}function Ze(e){const{convertOperationToReplayValue:t}=o.useSettingsContext(),n=ze(),s=Xe(),a=o.useSettings(),r=o.useStore(),{attachApiToCollection:l}=o.useCollectionActions(),{handleCloseByDataId:c}=o.useTabHandlers(),d=o.useRunWorkflow(),p=i.useRef(n);return p.current=n,{tools:i.useMemo(()=>{const T=new ge({middlewares:[Je()]});return v.registerBuiltInTools(T,{[v.reportStatusBlueprint.name]:void 0,[v.runRequestBlueprint.name]:{settings:a,store:r},[v.runWorkflowBlueprint.name]:{store:r,runWorkflow:d},[v.updateSecurityBlueprint.name]:{store:r},[v.updateStepBlueprint.name]:{store:r},[v.manageCollectionBlueprint.name]:{store:r,attachApiToCollection:l,handleCloseByDataId:c,convertOperationToReplayValue:t},[v.manageEnvironmentBlueprint.name]:{store:r},[v.webSearchBlueprint.name]:{model:e},[v.searchBlueprint.name]:{store:r},[v.openTabBlueprint.name]:{store:r,context:s},[v.getCurrentTabBlueprint.name]:{getActiveTabDetailedData:()=>p.current},[v.getApiMetadataBlueprint.name]:{store:r}}),T.getToolSet()},[l,t,c,e,s,d,a,r])}}function et(e){const{children:t,chatId:n,model:s,initialMessages:a,onChatFinish:r,onChatMessagesUpdated:l}=e,c=o.useSettings(),{getReuniteAuth:d}=o.useSettingsContext(),{tools:p}=Ze(s),{sendEvent:I}=o.useTelemetry(),T=i.useRef(p),u=i.useRef(s),{isOpen:g,openPanel:f,closePanel:_}=o.useAiPanel(),P=i.useRef(void 0),L=o.useStore();T.current=p,u.current=s;const C=i.useMemo(()=>{P.current?.end();const E=o.trace.getTracer("replay-ai-chat").startSpan("ai.chat.session",{attributes:{conversation_id:n}});P.current=E;const M=o.trace.setSpan(o.context.active(),E);return new fe.AgentLoop({activeConversationId:n,model:u.current,tools:T.current,sendEvent:I,parentCtx:M,getActiveStateMessage:()=>Be(Ge(L))})},[n,I,L]);i.useEffect(()=>()=>P.current?.end(),[]);const x=i.useMemo(()=>{if(C)return new te.DirectChatTransport({agent:C.getAgent()})},[C]);i.useEffect(()=>{C.setModel(s)},[C,s]),i.useEffect(()=>{C.registerTools(p)},[C,p]);const{messages:S,setMessages:D,sendMessage:F,status:k,error:H,stop:$,addToolApprovalResponse:N}=Ae({id:n,messages:a,transport:x,sendAutomaticallyWhen:te.lastAssistantMessageIsCompleteWithApprovalResponses,onFinish(E){if(!r||!C)return;r({agentLoop:C,chat:this},E)}}),b=i.useMemo(()=>k==="streaming"||k==="submitted",[k]),q=i.useCallback(()=>{c.aiEnabled===!0&&f()},[f,c.aiEnabled]),K=i.useCallback(()=>{_()},[_]),G=i.useCallback(async E=>{const M=E.trim();if(!(!M||!x)){if(s.provider===o.REUNITE_AI_PROVIDER){const y=await d?.();y?.baseUrl&&y?.accessToken&&C.setModel({provider:o.REUNITE_AI_PROVIDER,baseUrl:y.baseUrl,accessToken:y.accessToken})}D(y=>v.hasPendingApprovalMessage(y)?v.denyPendingApprovals(y):y),F({text:M})}},[C,d,s.provider,F,D,x]),m=i.useCallback(()=>{b&&$()},[b,$]);i.useEffect(()=>()=>{$()},[n,$]);const O=i.useCallback(E=>{const M=E(S),y=M.map(z=>z.message),re=[...S];for(const z of M)re[z.index]=z.message;D(re),l?.(y)},[S,l,D]),de=i.useMemo(()=>({messages:S,isStreaming:b,chatStatus:k,chatError:H,sendMessage:G,updateMessages:O,stopGeneration:m,addToolApprovalResponse:N}),[N,H,b,S,G,k,m,O]),he=i.useMemo(()=>({isOpen:g,openPanel:q,closePanel:K}),[g,q,K]);return X.jsx(v.AiConversationContext.Provider,{value:de,children:X.jsx(o.AiPanelContext.Provider,{value:he,children:t})})}function tt(e){return e.slice(-2)}function nt(e,t){return!!(e||t<1)}function st(e){return i.useCallback(async(t,n)=>{if(nt(e,n.messages.length))return null;const s=n.messages[0],a=v.getMessageTextContent(s.parts);try{return(await t.agentLoop.generateTitle(a)).trim()}catch(r){return console.error("Unable to generate chat title",r),null}},[e])}function rt({chatId:e,model:t,existingTitle:n}){const{mutate:s}=Ce(e),a=st(n);return i.useCallback(async(...r)=>{const l=await a(...r);l!==null&&l.length!==0&&s({id:e,model:t,messages:[],title:l})},[a,t,e,s])}function ot({chatId:e,model:t}){const{mutate:n}=ce();return i.useCallback((s,a)=>{const r=tt(a.messages);n({id:e,model:t,messages:r})},[t,e,n])}function at({chatId:e,model:t}){const{mutate:n}=ce();return i.useCallback(s=>{s.length!==0&&n({id:e,model:t,messages:s})},[t,e,n])}function it(e){return i.useMemo(()=>{const t=[o.REUNITE_MODEL_OPTION];if(e){for(const[n,s]of Object.entries(e))if(s.enabled&&s.apiKey){const a=s.models.map(r=>({...r,provider:n}));t.push(...a)}}return t},[e])}function ie(e){return typeof e=="function"?e():e}function le(e,t){try{const n=globalThis.localStorage.getItem(e);return n===null?ie(t):n}catch{return ie(t)}}function lt(e,t){try{globalThis.localStorage.setItem(e,t)}catch{console.error("Failed to write to localStorage",{key:e,value:t})}}function ct(e,t){const[n,s]=i.useState(()=>le(e,t)),a=i.useRef(t);a.current=t,i.useEffect(()=>{s(le(e,a.current))},[e]);const r=i.useCallback(l=>{s(c=>{const d=l instanceof Function?l(c):l;return lt(e,d),d})},[e]);return[n,r]}const ut="replay:ai:selectedModelId";function dt(e){const{availableModels:t,aiProviders:n,reuniteAuth:s}=e,[a,r]=ct(ut,o.REUNITE_MODEL_OPTION.id);return i.useEffect(()=>{t.find(d=>d.id===a)||r(o.REUNITE_MODEL_OPTION.id)},[t,a,r]),{model:i.useMemo(()=>{const c={provider:o.REUNITE_AI_PROVIDER,baseUrl:s.baseUrl,accessToken:s.accessToken},d=t.find(I=>I.id===a);if(!d||d.provider===o.REUNITE_AI_PROVIDER)return c;const p=n?.[d.provider];return!p||!p.apiKey||!p.enabled?c:{provider:d.provider,modelId:d.id,apiKey:p.apiKey}},[a,t,n,s]),selectedModelId:a,selectModel:r}}function ht(){const[e,t]=i.useState({baseUrl:"",accessToken:""}),{getReuniteAuth:n}=o.useSettingsContext();return i.useEffect(()=>{let s=!1;async function a(){const r=await n?.();s||t({baseUrl:r?.baseUrl??"",accessToken:r?.accessToken??""})}return a().catch(()=>{s||t({baseUrl:"",accessToken:""})}),()=>{s=!0}},[n]),e}function ft(e){const{children:t}=e,[n,s]=i.useState(Z.generateAiChatId),[a,r]=i.useState(n),[l,c]=i.useState(null),d=o.useSettings(),p=o.useSettingsContext(),{openPanel:I}=o.useAiPanel(),T=a!==n,u=i.useCallback(()=>{const m=Z.generateAiChatId();r(m),s(m)},[]),g=i.useCallback(m=>{r(m)},[]),{data:f}=v.useAiChat(a),_=ht(),P=it(p.aiProviders),{selectedModelId:L,model:C,selectModel:x}=dt({availableModels:P,aiProviders:p.aiProviders,reuniteAuth:_}),S=me(),D=ot({chatId:n,model:C}),F=at({chatId:n,model:C}),k=rt({chatId:n,model:C,existingTitle:f?.title}),H=i.useCallback((m,O)=>{O.isAbort||(D(m,O),k(m,O))},[D,k]),$=i.useCallback((...m)=>{F(...m)},[F]),N=i.useCallback(m=>{(a===m||n===m)&&u(),S.mutate(m)},[u,n,S,a]),b=f?.id;i.useEffect(()=>{b&&b!==n&&s(b)},[b,a,n]);const q=i.useCallback(()=>{c(null)},[]),K=i.useCallback(m=>{d.aiEnabled&&(u(),c(m),I())},[I,u,d.aiEnabled]),G=i.useMemo(()=>({chatId:n,model:C,availableModels:P,selectedModelId:L,selectModel:x,onSettingsOpen:p.onSettingsOpen,title:f?.title??o.defaultAiChatContextValue.title,isLoading:T,selectChat:g,removeChat:N,createNewChat:u,openAiChatWithPresetInput:K,pendingComposerPreset:l,clearPendingComposerPreset:q}),[n,P,f?.title,C,T,g,N,u,K,l,q,L,x,p.onSettingsOpen]);return X.jsx(o.AiChatContext.Provider,{value:G,children:X.jsx(et,{chatId:n,model:C,initialMessages:f?.messages,onChatFinish:H,onChatMessagesUpdated:$,children:t})})}exports.AiChatProvider=ft;
@@ -1,7 +1,7 @@
1
1
  import "./replay-history.schema-5ce6X0R1.js";
2
2
  import "./replay-step-context.schema-DBk4jufr.js";
3
3
  import { a as h, b as r, c as n } from "./replay-ai-message-parts.schema-E9u9-nqr.js";
4
- import { c, a as u, d as m } from "./replay-ai-chat-mappers-Csm9vJrG.js";
4
+ import { c, a as u, d as m } from "./replay-ai-chat-mappers-yKBypIXh.js";
5
5
  import { a as l, e, b as y } from "./replay-indexes-CfsvVMi_.js";
6
6
  const g = {
7
7
  orderBy: [l(r.createdAt), l(r.indexWithinInsertBatch)],
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("./replay-history.schema-miM3Etuf.js");require("./replay-step-context.schema-BuuXkAck.js");const i=require("./replay-ai-message-parts.schema-BBdjwldJ.js"),h=require("./replay-ai-chat-mappers-IZNFNXug.js"),s=require("./replay-indexes-Dqjl8m6C.js"),c={orderBy:[s.asc(i.aiMessages.createdAt),s.asc(i.aiMessages.indexWithinInsertBatch)],with:{parts:{orderBy:[s.asc(i.aiMessageParts.index)]}}};class g{constructor(e){this.sqliteDB=e}sqliteDB;async findAll(){return await this.initialize(),(await this.db.query.aiChats.findMany({with:{messages:c}})).map(h.convertAiChatRowToUiChat)}async findRecentChatsPage(e){await this.initialize();const a=e.limit+1,r=await this.db.query.aiChats.findMany({orderBy:(d,{desc:o})=>o(d.updatedAt),limit:a,offset:e.offset}),t=r.slice(0,e.limit),n=r.length>e.limit,w=e.offset+t.length;return{items:t.map(d=>{const o={...d,messages:[]};return h.convertAiChatRowToUiChat(o)}),hasMore:n,nextOffset:w}}async findOne(e){await this.initialize();const a=await this.db.query.aiChats.findFirst({where:s.eq(i.aiChats.id,e),with:{messages:c}});return a&&h.convertAiChatRowToUiChat(a)}async upsert(e){await this.initialize();const a=h.convertUiChatToAiChatRow(e);await this.db.query.aiChats.findFirst({where:s.eq(i.aiChats.id,a.id),columns:{id:!0}})?await this.db.update(i.aiChats).set(a).where(s.eq(i.aiChats.id,a.id)):await this.db.insert(i.aiChats).values(a);for(let t=0;t<e.messages.length;t++)await this.upsertMessageRowAndParts(e.id,t,e.messages[t])}async remove(e){await this.initialize(),await this.db.delete(i.aiChats).where(s.eq(i.aiChats.id,e))}async upsertMessageRowAndParts(e,a,r){const t=await this.db.query.aiMessages.findFirst({where:s.and(s.eq(i.aiMessages.aiChatId,e),s.eq(i.aiMessages.uiId,r.id))}),n=h.convertUiMessageToAiChatMessage(e,a,r,t?.id);t?await this.db.update(i.aiMessages).set({...n,indexWithinInsertBatch:t.indexWithinInsertBatch}).where(s.eq(i.aiMessages.id,t.id)):await this.db.insert(i.aiMessages).values(n),await this.db.delete(i.aiMessageParts).where(s.eq(i.aiMessageParts.aiMessageId,n.id)),n.parts.length>0&&await this.db.insert(i.aiMessageParts).values(n.parts)}get db(){return this.sqliteDB.db}async initialize(){await this.sqliteDB.initialize()}}exports.AiChatSqliteDBStorage=g;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("./replay-history.schema-miM3Etuf.js");require("./replay-step-context.schema-BuuXkAck.js");const i=require("./replay-ai-message-parts.schema-BBdjwldJ.js"),h=require("./replay-ai-chat-mappers-B7fm-v_w.js"),s=require("./replay-indexes-Dqjl8m6C.js"),c={orderBy:[s.asc(i.aiMessages.createdAt),s.asc(i.aiMessages.indexWithinInsertBatch)],with:{parts:{orderBy:[s.asc(i.aiMessageParts.index)]}}};class g{constructor(e){this.sqliteDB=e}sqliteDB;async findAll(){return await this.initialize(),(await this.db.query.aiChats.findMany({with:{messages:c}})).map(h.convertAiChatRowToUiChat)}async findRecentChatsPage(e){await this.initialize();const a=e.limit+1,r=await this.db.query.aiChats.findMany({orderBy:(d,{desc:o})=>o(d.updatedAt),limit:a,offset:e.offset}),t=r.slice(0,e.limit),n=r.length>e.limit,w=e.offset+t.length;return{items:t.map(d=>{const o={...d,messages:[]};return h.convertAiChatRowToUiChat(o)}),hasMore:n,nextOffset:w}}async findOne(e){await this.initialize();const a=await this.db.query.aiChats.findFirst({where:s.eq(i.aiChats.id,e),with:{messages:c}});return a&&h.convertAiChatRowToUiChat(a)}async upsert(e){await this.initialize();const a=h.convertUiChatToAiChatRow(e);await this.db.query.aiChats.findFirst({where:s.eq(i.aiChats.id,a.id),columns:{id:!0}})?await this.db.update(i.aiChats).set(a).where(s.eq(i.aiChats.id,a.id)):await this.db.insert(i.aiChats).values(a);for(let t=0;t<e.messages.length;t++)await this.upsertMessageRowAndParts(e.id,t,e.messages[t])}async remove(e){await this.initialize(),await this.db.delete(i.aiChats).where(s.eq(i.aiChats.id,e))}async upsertMessageRowAndParts(e,a,r){const t=await this.db.query.aiMessages.findFirst({where:s.and(s.eq(i.aiMessages.aiChatId,e),s.eq(i.aiMessages.uiId,r.id))}),n=h.convertUiMessageToAiChatMessage(e,a,r,t?.id);t?await this.db.update(i.aiMessages).set({...n,indexWithinInsertBatch:t.indexWithinInsertBatch}).where(s.eq(i.aiMessages.id,t.id)):await this.db.insert(i.aiMessages).values(n),await this.db.delete(i.aiMessageParts).where(s.eq(i.aiMessageParts.aiMessageId,n.id)),n.parts.length>0&&await this.db.insert(i.aiMessageParts).values(n.parts)}get db(){return this.sqliteDB.db}async initialize(){await this.sqliteDB.initialize()}}exports.AiChatSqliteDBStorage=g;