@redocly/replay 0.28.0-next.1 → 0.28.0-next.10

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 (82) hide show
  1. package/dist/replay-AiChatProvider-BWL86hXh.js +6 -0
  2. package/dist/{replay-AiChatProvider-COJYrrQ6.js → replay-AiChatProvider-CY3b_ggu.js} +376 -376
  3. package/dist/{replay-AiChatSqliteDBStorage-BenAoLmM.js → replay-AiChatSqliteDBStorage-BtV53vvj.js} +1 -1
  4. package/dist/{replay-AiChatSqliteDBStorage-CBeRerfX.js → replay-AiChatSqliteDBStorage-CjzLqUwK.js} +6 -6
  5. package/dist/{replay-AiPanel-BN1uduZr.js → replay-AiPanel-B3HBaMPh.js} +712 -715
  6. package/dist/replay-AiPanel-BzaoPsXZ.js +742 -0
  7. package/dist/replay-FileWatcher-BFtAqsmL.js +1 -0
  8. package/dist/replay-FileWatcher-d1_qKRfS.js +364 -0
  9. package/dist/{replay-HistorySqliteDBStorage-CtF6-vY8.js → replay-HistorySqliteDBStorage-Bi5vBQ2T.js} +2 -2
  10. package/dist/replay-SemanticSearchService-CTWesmRy.js +1 -0
  11. package/dist/{replay-SemanticSearchService-OutwGWqD.js → replay-SemanticSearchService-DcR4Q6w6.js} +27 -31
  12. package/dist/{replay-SqliteDBStorage-CrB-WSIX.js → replay-SqliteDBStorage-BeDAsnlF.js} +1 -1
  13. package/dist/{replay-SqliteDBStorage-Cn8L_KB1.js → replay-SqliteDBStorage-BlVDbZhU.js} +49 -49
  14. package/dist/{replay-StepContextSqliteDBStorage-BfAAKDwA.js → replay-StepContextSqliteDBStorage-BkB2NM27.js} +2 -2
  15. package/dist/replay-TauriFileSystemAdapter-B_VaAUfL.js +1 -0
  16. package/dist/replay-TauriFileSystemAdapter-Cu-Q6QS_.js +108 -0
  17. package/dist/replay-TauriRootStorage-Cidjagk-.js +1 -0
  18. package/dist/{replay-TauriRootStorage-DHVdmo5Z.js → replay-TauriRootStorage-DVeU3RvV.js} +213 -212
  19. package/dist/{replay-agent-loop-vzQUCpCA.js → replay-agent-loop-B42P9R-q.js} +1 -1
  20. package/dist/{replay-agent-loop-cbxVIXnO.js → replay-agent-loop-DweKWrQp.js} +11 -11
  21. package/dist/{replay-ai-chat-mappers-pb8lpkUD.js → replay-ai-chat-mappers-Cno0s3T8.js} +1 -1
  22. package/dist/{replay-ai-chat-mappers-BnAf2rpg.js → replay-ai-chat-mappers-DusPRQPG.js} +3 -3
  23. package/dist/{replay-ai-message-parts.schema-E9u9-nqr.js → replay-ai-message-parts.schema-DKLf0SiG.js} +1 -1
  24. package/dist/{replay-create-model-Dr80k74P.js → replay-create-model-CeSlm24x.js} +4 -4
  25. package/dist/{replay-create-model-CqA612v0.js → replay-create-model-DdPq1CIm.js} +3 -3
  26. package/dist/{replay-db-Bq7IGfIa.js → replay-db-Bj8Qpvpw.js} +1 -1
  27. package/dist/{replay-db-C8RC-t2R.js → replay-db-he8XQjrM.js} +1 -1
  28. package/dist/{replay-external-resolver-D6WP4NJY.js → replay-external-resolver-BRs5F07f.js} +7 -7
  29. package/dist/{replay-external-resolver-Bw7R-LTs.js → replay-external-resolver-gQ0egbx7.js} +1 -1
  30. package/dist/{replay-history.schema-5ce6X0R1.js → replay-history.schema-B0lLwmdG.js} +3 -3
  31. package/dist/replay-index-B1qPs-GR.js +4 -0
  32. package/dist/replay-index-C2b91LJZ.js +7013 -0
  33. package/dist/{replay-index-CI5L8ebr.js → replay-index-CA6OI1Qg.js} +1 -1
  34. package/dist/replay-index-CYphcClc.js +1 -0
  35. package/dist/{replay-index-BizzVzWT.js → replay-index-DRb3mixV.js} +65435 -63900
  36. package/dist/replay-index-Dtxwps1s.js +574 -0
  37. package/dist/replay-index-NgGicGfR.js +1 -0
  38. package/dist/{replay-index-BFdS3tY7.js → replay-index-uF3nFq_Y.js} +1 -1
  39. package/dist/{replay-indexes-CfsvVMi_.js → replay-indexes-B3PJtgeh.js} +43 -43
  40. package/dist/replay-lint-C2hyYWRS.js +177 -0
  41. package/dist/{replay-lint-q7b2-PPR.js → replay-lint-gY_wyYPJ.js} +17581 -21140
  42. package/dist/{replay-lint-graphql-CYl9hbRz.js → replay-lint-graphql-BA9t8-Ua.js} +1 -1
  43. package/dist/{replay-lint-graphql-C_f79j2l.js → replay-lint-graphql-DDrnrINc.js} +1 -1
  44. package/dist/replay-periodic-revalidation-BbAt74oL.js +21 -0
  45. package/dist/replay-periodic-revalidation-kmD2RQn1.js +1 -0
  46. package/dist/replay-resolve-BJ_AY-Mn.js +47 -0
  47. package/dist/{replay-resolve-Km_DObpf.js → replay-resolve-_V8uYdTK.js} +470 -468
  48. package/dist/replay-respect-run-CLLZoRh1.js +8392 -0
  49. package/dist/replay-respect-run-qOz91QPQ.js +82 -0
  50. package/dist/replay-step-context.schema-BOprzd6Z.js +21 -0
  51. package/dist/{replay-tauri-path-BrtMOZvF.js → replay-tauri-path-lH8t5rdX.js} +1 -1
  52. package/dist/replay-tauri-path-twTA2lKs.js +22 -0
  53. package/dist/replay-useAiChatQueries-BIqM2KQW.js +215 -0
  54. package/dist/{replay-useAiChatQueries-BR1eEjUB.js → replay-useAiChatQueries-yCsYY1j2.js} +1583 -1371
  55. package/dist/{replay-validate-key-CZSwxFid.js → replay-validate-key-Bh41yY9h.js} +2 -2
  56. package/dist/{replay-validate-key-Cox-cRT6.js → replay-validate-key-_oaOw5Jy.js} +1 -1
  57. package/dist/replay.cjs +1 -1
  58. package/dist/replay.d.ts +10 -3
  59. package/dist/replay.js +14 -14
  60. package/package.json +20 -13
  61. package/dist/replay-AiChatProvider-DjEmmTbN.js +0 -6
  62. package/dist/replay-AiPanel-FAJJA4QT.js +0 -742
  63. package/dist/replay-FileWatcher-DDlINC06.js +0 -1
  64. package/dist/replay-FileWatcher-paEMsDuu.js +0 -352
  65. package/dist/replay-SemanticSearchService-DwIcsNYC.js +0 -1
  66. package/dist/replay-TauriFileSystemAdapter-CocGBrH_.js +0 -99
  67. package/dist/replay-TauriFileSystemAdapter-q89YsNXx.js +0 -1
  68. package/dist/replay-TauriRootStorage-CZXVp2Zw.js +0 -1
  69. package/dist/replay-index-B3sCvU48.js +0 -1
  70. package/dist/replay-index-D3evrr0U.js +0 -6982
  71. package/dist/replay-index-DZwTSW3m.js +0 -25
  72. package/dist/replay-index-DsAn0c_r.js +0 -1
  73. package/dist/replay-index-bspotqBs.js +0 -504
  74. package/dist/replay-lint-D5d7AeDU.js +0 -184
  75. package/dist/replay-periodic-revalidation-BoyLQHtg.js +0 -1
  76. package/dist/replay-periodic-revalidation-Dsp-n7ui.js +0 -21
  77. package/dist/replay-resolve-CftMmcPx.js +0 -47
  78. package/dist/replay-respect-run-CfbJ-uak.js +0 -8200
  79. package/dist/replay-respect-run-DBe6ZUcc.js +0 -78
  80. package/dist/replay-step-context.schema-DBk4jufr.js +0 -21
  81. package/dist/replay-tauri-path-Ek8BSAa0.js +0 -22
  82. package/dist/replay-useAiChatQueries-DjjzEorX.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-C2b91LJZ.js"),te=require("./replay-create-model-DdPq1CIm.js"),fe=require("./replay-agent-loop-B42P9R-q.js"),pe=require("./replay-db-Bj8Qpvpw.js"),v=require("./replay-useAiChatQueries-BIqM2KQW.js"),B=require("@tanstack/react-query"),Z=require("./replay-ai-chat-mappers-Cno0s3T8.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(),p=c-a,h=n-p;h<=0?(a=c,t.apply(this,l)):s=setTimeout(()=>{a=Date.now(),t.apply(this,l)},h)}}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)},d=(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 T,Y,J,j,Q,V,W,ne,se,ye=class{constructor(e=[]){A(this,T,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,T,d(this,T).concat(t)),d(this,W).call(this)},this.popMessage=()=>{R(this,T,d(this,T).slice(0,-1)),d(this,W).call(this)},this.replaceMessage=(t,n)=>{R(this,T,[...d(this,T).slice(0,t),this.snapshot(n),...d(this,T).slice(t+1)]),d(this,W).call(this)},this.snapshot=t=>structuredClone(t),this["~registerMessagesCallback"]=(t,n)=>{const s=n?Te(t,n):t;return d(this,j).add(s),()=>{d(this,j).delete(s)}},this["~registerStatusCallback"]=t=>(d(this,Q).add(t),()=>{d(this,Q).delete(t)}),this["~registerErrorCallback"]=t=>(d(this,V).add(t),()=>{d(this,V).delete(t)}),A(this,W,()=>{d(this,j).forEach(t=>t())}),A(this,ne,()=>{d(this,Q).forEach(t=>t())}),A(this,se,()=>{d(this,V).forEach(t=>t())}),R(this,T,e)}get status(){return d(this,Y)}set status(e){R(this,Y,e),d(this,ne).call(this)}get error(){return d(this,J)}set error(e){R(this,J,e),d(this,se).call(this)}get messages(){return d(this,T)}set messages(e){R(this,T,[...e]),d(this,W).call(this)}};T=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)=>d(this,U)["~registerMessagesCallback"](s,a),this["~registerStatusCallback"]=s=>d(this,U)["~registerStatusCallback"](s),this["~registerErrorCallback"]=s=>d(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]),p=i.useSyncExternalStore(c,()=>r.current.messages,()=>r.current.messages),h=i.useSyncExternalStore(r.current["~registerStatusCallback"],()=>r.current.status,()=>r.current.status),w=i.useSyncExternalStore(r.current["~registerErrorCallback"],()=>r.current.error,()=>r.current.error),I=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:p,setMessages:I,sendMessage:r.current.sendMessage,regenerate:r.current.regenerate,clearError:r.current.clearError,stop:r.current.stop,error:w,resumeStream:r.current.resumeStream,status:h,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:p}=t.data;return{...a,label:p??`${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(),p=o.useRunWorkflow(),h=i.useRef(n);return h.current=n,{tools:i.useMemo(()=>{const I=new ge({middlewares:[Je()]});return v.registerBuiltInTools(I,{[v.reportStatusBlueprint.name]:void 0,[v.runRequestBlueprint.name]:{settings:a,store:r},[v.runWorkflowBlueprint.name]:{store:r,runWorkflow:p},[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:()=>h.current},[v.getApiMetadataBlueprint.name]:{store:r}}),I.getToolSet()},[l,t,c,e,s,p,a,r])}}function et(e){const{children:t,chatId:n,model:s,initialMessages:a,onChatFinish:r,onChatMessagesUpdated:l}=e,c=o.useSettings(),{getReuniteAuth:p}=o.useSettingsContext(),{tools:h}=Ze(s),{sendEvent:w}=o.useTelemetry(),I=i.useRef(h),u=i.useRef(s),{isOpen:g,openPanel:f,closePanel:_}=o.useAiPanel(),P=i.useRef(void 0),L=o.useStore();I.current=h,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:I.current,sendEvent:w,parentCtx:M,getActiveStateMessage:()=>Be(Ge(L))})},[n,w,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(h)},[C,h]);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 p?.();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,p,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 p=l instanceof Function?l(c):l;return lt(e,p),p})},[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),l=t.some(p=>p.id===a)?a:o.REUNITE_MODEL_OPTION.id;return{model:i.useMemo(()=>{const p={provider:o.REUNITE_AI_PROVIDER,baseUrl:s.baseUrl,accessToken:s.accessToken},h=t.find(I=>I.id===l);if(!h||h.provider===o.REUNITE_AI_PROVIDER)return p;const w=n?.[h.provider];return!w||!w.apiKey||!w.enabled?p:{provider:h.provider,modelId:h.id,apiKey:w.apiKey}},[l,t,n,s]),selectedModelId:l,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),p=o.useSettings(),h=o.useSettingsContext(),{openPanel:w}=o.useAiPanel(),I=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(h.aiProviders),{selectedModelId:L,model:C,selectModel:x}=dt({availableModels:P,aiProviders:h.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=>{p.aiEnabled&&(u(),c(m),w())},[w,u,p.aiEnabled]),G=i.useMemo(()=>({chatId:n,model:C,availableModels:P,selectedModelId:L,selectModel:x,onSettingsOpen:h.onSettingsOpen,title:f?.title??o.defaultAiChatContextValue.title,isLoading:I,selectChat:g,removeChat:N,createNewChat:u,openAiChatWithPresetInput:K,pendingComposerPreset:l,clearPendingComposerPreset:q}),[n,P,f?.title,C,I,g,N,u,K,l,q,L,x,h.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;