@redocly/replay 0.27.0-next.5 → 0.27.0-next.7

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 (52) hide show
  1. package/dist/{replay-AiChatProvider-CVvR1kSd.js → replay-AiChatProvider-Dub7iVgM.js} +273 -271
  2. package/dist/replay-AiChatProvider-e4PWUCRp.js +6 -0
  3. package/dist/{replay-AiChatSqliteDBStorage-DVJ9f2EK.js → replay-AiChatSqliteDBStorage-CpjwxLnF.js} +1 -1
  4. package/dist/{replay-AiChatSqliteDBStorage-BFHRKFlk.js → replay-AiChatSqliteDBStorage-DbxNU-ot.js} +1 -1
  5. package/dist/replay-AiPanel-B_zDmo55.js +868 -0
  6. package/dist/{replay-AiPanel-CynVcVmm.js → replay-AiPanel-DuRA2zAt.js} +1226 -1114
  7. package/dist/{replay-SqliteDBStorage-eRBPh4E8.js → replay-SqliteDBStorage-BrNleq7S.js} +1 -1
  8. package/dist/{replay-SqliteDBStorage-CSz7NYH4.js → replay-SqliteDBStorage-CafBNNLB.js} +1 -1
  9. package/dist/{replay-agent-loop-CEZz1kj-.js → replay-agent-loop-CV0s4022.js} +48 -48
  10. package/dist/{replay-agent-loop-C60p47KY.js → replay-agent-loop-CzV79Gr1.js} +1 -1
  11. package/dist/{replay-ai-chat-mappers-BAHU6JIc.js → replay-ai-chat-mappers-BNsR30dS.js} +1 -1
  12. package/dist/{replay-ai-chat-mappers-Dqg-QVZy.js → replay-ai-chat-mappers-BWeZN6p_.js} +1 -1
  13. package/dist/{replay-create-model-C2NQtDcL.js → replay-create-model-CEDEaJC8.js} +3 -3
  14. package/dist/{replay-create-model-CUL-l-eX.js → replay-create-model-CmRk68RD.js} +2 -2
  15. package/dist/{replay-db-C4jAfGtc.js → replay-db-BfSnfWcb.js} +8 -8
  16. package/dist/{replay-db-Dw-X2WGx.js → replay-db-CM8OLcFK.js} +21 -21
  17. package/dist/{replay-external-resolver-DAkLV0nr.js → replay-external-resolver-G86hjAvS.js} +2 -2
  18. package/dist/{replay-external-resolver-DN_PWq_2.js → replay-external-resolver-bdSEZsNk.js} +1 -1
  19. package/dist/{replay-index-BmX1FPBL.js → replay-index-BmotNqNI.js} +1170 -1148
  20. package/dist/replay-index-Bsag-eKM.js +1 -0
  21. package/dist/replay-index-C6SJPGDO.js +23 -0
  22. package/dist/replay-index-CUs62_1f.js +1 -0
  23. package/dist/{replay-index-rRWvC2pp.js → replay-index-C_eJVbPZ.js} +1 -1
  24. package/dist/{replay-index-O_Pq5an3.js → replay-index-Cd9LaUVx.js} +23380 -22731
  25. package/dist/{replay-index-m00jnWFr.js → replay-index-D58Mg6_y.js} +1 -1
  26. package/dist/{replay-index-DR1uVBvc.js → replay-index-DYtNY0OY.js} +42 -41
  27. package/dist/replay-lint-CxwKILeF.js +184 -0
  28. package/dist/{replay-lint-CcVVykW7.js → replay-lint-YfaLafO6.js} +8246 -8047
  29. package/dist/{replay-lint-graphql-DlD7bblx.js → replay-lint-graphql-BRrk1UK5.js} +1 -1
  30. package/dist/{replay-lint-graphql-5cGt2KR_.js → replay-lint-graphql-GtbZklco.js} +1 -1
  31. package/dist/replay-resolve-Bza6lozO.js +47 -0
  32. package/dist/{replay-resolve-Ca3DUbGq.js → replay-resolve-Rb3XjiUd.js} +919 -908
  33. package/dist/{replay-respect-run-eSRzH2dk.js → replay-respect-run-BB0VXCz-.js} +1605 -1555
  34. package/dist/replay-respect-run-Pkoy4Q3P.js +78 -0
  35. package/dist/{replay-tauri-path-C-oxFOHe.js → replay-tauri-path-B8tT4cGY.js} +2 -2
  36. package/dist/{replay-tauri-path-CKcvIl_h.js → replay-tauri-path-yOFqWleH.js} +1 -1
  37. package/dist/{replay-useAiChatQueries-CVTxcu2Z.js → replay-useAiChatQueries-1fqZwVTj.js} +71 -48
  38. package/dist/{replay-useAiChatQueries-vdKvbmp2.js → replay-useAiChatQueries-B7ZcWDmG.js} +1111 -990
  39. package/dist/{replay-validate-key-VkgZoK1f.js → replay-validate-key-C8-nF61w.js} +1 -1
  40. package/dist/{replay-validate-key-CwIopif3.js → replay-validate-key-qJOuAQJK.js} +2 -2
  41. package/dist/replay.cjs +1 -1
  42. package/dist/replay.d.ts +35 -5
  43. package/dist/replay.js +10 -10
  44. package/package.json +4 -4
  45. package/dist/replay-AiChatProvider-BGXsZqW2.js +0 -6
  46. package/dist/replay-AiPanel-qVp_s4gD.js +0 -849
  47. package/dist/replay-index-DSKZHOXq.js +0 -1
  48. package/dist/replay-index-DT5gdiBA.js +0 -21
  49. package/dist/replay-index-qZlgEmbq.js +0 -1
  50. package/dist/replay-lint-ON47l7Vu.js +0 -184
  51. package/dist/replay-resolve-BTzo-fSv.js +0 -47
  52. package/dist/replay-respect-run-BtC2agF9.js +0 -78
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./replay-create-model-CUL-l-eX.js"),n=require("./replay-index-BmX1FPBL.js"),l=require("./replay-defaults-DVvOnvnR.js");async function s(t,a,o,i){try{const e=r.createModel({provider:t,modelId:o,apiKey:a});return await r.generateText({model:e,prompt:l.VALIDATION_PROMPT,maxOutputTokens:n.MAX_OUTPUT_TOKENS_FOR_VALIDATION,abortSignal:i?.abortSignal}),{valid:!0}}catch(e){if(e instanceof Error&&e.name==="AbortError")throw e;return{valid:!1,error:e instanceof Error&&e.message.length>0?e.message:"Validation failed. Please try again."}}}exports.validateApiKey=s;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./replay-create-model-CmRk68RD.js"),n=require("./replay-index-BmotNqNI.js"),l=require("./replay-defaults-DVvOnvnR.js");async function s(t,a,o,i){try{const e=r.createModel({provider:t,modelId:o,apiKey:a});return await r.generateText({model:e,prompt:l.VALIDATION_PROMPT,maxOutputTokens:n.MAX_OUTPUT_TOKENS_FOR_VALIDATION,abortSignal:i?.abortSignal}),{valid:!0}}catch(e){if(e instanceof Error&&e.name==="AbortError")throw e;return{valid:!1,error:e instanceof Error&&e.message.length>0?e.message:"Validation failed. Please try again."}}}exports.validateApiKey=s;
@@ -1,5 +1,5 @@
1
- import { c as i, g as n } from "./replay-create-model-C2NQtDcL.js";
2
- import { M as s } from "./replay-index-O_Pq5an3.js";
1
+ import { c as i, g as n } from "./replay-create-model-CEDEaJC8.js";
2
+ import { M as s } from "./replay-index-Cd9LaUVx.js";
3
3
  import { V as l } from "./replay-defaults-CzR6jw9a.js";
4
4
  async function g(a, e, t, o) {
5
5
  try {
package/dist/replay.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./replay-index-BmX1FPBL.js"),t=require("./replay-oauth2-redirect-handler-Bqw5UUvl.js");exports.AI_PROVIDERS=e.AI_PROVIDERS;exports.AiPanelContext=e.AiPanelContext;exports.EmbeddedReplay=e.EmbeddedReplay;exports.Modal=e.Modal;exports.REUNITE_AI_PROVIDER=e.REUNITE_AI_PROVIDER;exports.Replay=e.Replay;exports.ReplayOverlay=e.ReplayOverlay;Object.defineProperty(exports,"SpanStatusCode",{enumerable:!0,get:()=>e.SpanStatusCode});exports.TelemetryClient=e.TelemetryClient;exports.applyThemeToDOM=e.applyThemeToDOM;exports.createResource=e.createResource;exports.getCurrentTheme=e.getCurrentTheme;exports.loadAgentLoop=e.loadAgentLoop;exports.makeProviderRecord=e.makeProviderRecord;exports.resolveTheme=e.resolveTheme;exports.useAiPanel=e.useAiPanel;exports.useTelemetry=e.useTelemetry;exports.useTelemetryClient=e.useTelemetryClient;exports.validateApiKey=e.validateApiKey;exports.OAuth2Error=t.OAuth2Error;exports.handleOAuth2Redirect=t.handleOAuth2Redirect;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./replay-index-BmotNqNI.js"),t=require("./replay-oauth2-redirect-handler-Bqw5UUvl.js");exports.AI_PROVIDERS=e.AI_PROVIDERS;exports.AiPanelContext=e.AiPanelContext;exports.EmbeddedReplay=e.EmbeddedReplay;exports.Modal=e.Modal;exports.REUNITE_AI_PROVIDER=e.REUNITE_AI_PROVIDER;exports.Replay=e.Replay;exports.ReplayOverlay=e.ReplayOverlay;Object.defineProperty(exports,"SpanStatusCode",{enumerable:!0,get:()=>e.SpanStatusCode});exports.TelemetryClient=e.TelemetryClient;exports.applyThemeToDOM=e.applyThemeToDOM;exports.createResource=e.createResource;exports.getCurrentTheme=e.getCurrentTheme;exports.loadAgentLoop=e.loadAgentLoop;exports.makeProviderRecord=e.makeProviderRecord;exports.resolveTheme=e.resolveTheme;exports.useAiPanel=e.useAiPanel;exports.useTelemetry=e.useTelemetry;exports.useTelemetryClient=e.useTelemetryClient;exports.validateApiKey=e.validateApiKey;exports.OAuth2Error=t.OAuth2Error;exports.handleOAuth2Redirect=t.handleOAuth2Redirect;
package/dist/replay.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { AsyncApiReplay } from '@redocly/replay-asyncapi-sdk';
2
+ import { ComponentType } from 'react';
2
3
  import { ConfigureRequestValues } from '../../node_modules/@redocly/theme/src/ext/configure';
3
4
  import { ConfigureServerRequestValues } from '../../node_modules/@redocly/theme/src/ext/configure';
4
5
  import { Context } from 'react';
@@ -8,6 +9,7 @@ import { ImmutableObject } from '@redocly/hookstate-core';
8
9
  import { JSX } from 'react/jsx-runtime';
9
10
  import { NamedExoticComponent } from 'react';
10
11
  import { ReactElement } from 'react';
12
+ import { ReactNode } from 'react';
11
13
  import { SpanStatusCode } from '@opentelemetry/api';
12
14
  import { SystemModelMessage } from 'ai';
13
15
  import { Context as TelemetryContext } from '@opentelemetry/api';
@@ -177,7 +179,7 @@ declare type InputSettings = {
177
179
  selectedEnvironment?: string;
178
180
  allowedEnvironments?: string[];
179
181
  apiId?: string;
180
- predefinedEnvValues?: Record<string, Record<string, string>>;
182
+ predefinedEnvValues?: Record<string, Record<string, PredefinedEnvValue>>;
181
183
  dynamicReplayValues?: ConfigureRequestValues | ConfigureServerRequestValues | null;
182
184
  certificates?: Certificate[];
183
185
  storageKey?: string;
@@ -672,7 +674,7 @@ declare interface OpenAPIXBadges {
672
674
  position?: 'before' | 'after';
673
675
  }
674
676
 
675
- declare type OperationIn = 'query' | 'header' | 'path' | 'cookie';
677
+ export declare type OperationIn = 'query' | 'header' | 'path' | 'cookie';
676
678
 
677
679
  declare type OperationParameter = {
678
680
  name: string;
@@ -697,7 +699,7 @@ declare type OperationParameterSchema = {
697
699
  enum?: string[];
698
700
  };
699
701
 
700
- export declare type OperationSecurity = {
702
+ declare type OperationSecurity = {
701
703
  id: string;
702
704
  type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';
703
705
  openIdConnectUrl?: string;
@@ -738,6 +740,11 @@ declare type PasswordOAuthFlowsObject = {
738
740
  scopes: Record<string, string>;
739
741
  };
740
742
 
743
+ declare type PredefinedEnvValue = string | {
744
+ value: string;
745
+ isSecret?: boolean;
746
+ };
747
+
741
748
  declare type Referenced<T> = T | OpenAPIRef;
742
749
 
743
750
  export declare function Replay(props: ReplayAppProps): JSX.Element;
@@ -753,6 +760,19 @@ declare type ReplayAppProps = {
753
760
  onSettingsOpen?: (tab?: SettingsTab) => void;
754
761
  };
755
762
 
763
+ export declare type ReplayComponents = {
764
+ ReplayGate: ComponentType<ReplayGateComponentProps> | null;
765
+ ReplayTopBarActions: ComponentType<ReplayTopBarActionsComponentProps> | null;
766
+ };
767
+
768
+ declare type ReplayGateComponentProps = {
769
+ setEnvironmentValues: (envName: string, values: Record<string, PredefinedEnvValue>) => void;
770
+ setSelectedEnvironment: (envName: string) => void;
771
+ selectedEnvironment?: string;
772
+ apiId?: string;
773
+ children: ReactNode;
774
+ };
775
+
756
776
  declare type ReplayLayout = 'default' | 'overlay' | 'preview';
757
777
 
758
778
  export declare type ReplayOnChangeParams = {
@@ -764,12 +784,22 @@ export declare type ReplayOnChangeParams = {
764
784
  }>;
765
785
  };
766
786
 
767
- export declare function ReplayOverlay(props: ReplayOverlayProps): JSX.Element;
787
+ export declare function ReplayOverlay({ ReplayGate: ReplayGateProp, ReplayTopBarActions: ReplayTopBarActionsProp, ...props }: ReplayOverlayProps): JSX.Element;
768
788
 
769
789
  declare type ReplayOverlayProps = {
770
790
  onClose: () => void;
771
791
  onRequestChange?: (props: ReplayOnChangeParams) => void;
772
- } & ReplayAppProps;
792
+ } & ReplayAppProps & Partial<ReplayComponents>;
793
+
794
+ declare type ReplayTopBarActionsComponentProps = {
795
+ environments: ReadonlyArray<{
796
+ name: string;
797
+ }>;
798
+ activeEnvironment: string;
799
+ setEnvironmentValues: (envName: string, values: Record<string, PredefinedEnvValue>) => void;
800
+ setSelectedEnvironment: (envName: string) => void;
801
+ apiId?: string;
802
+ };
773
803
 
774
804
  export declare type ResolvedTheme = 'light' | 'dark';
775
805
 
package/dist/replay.js CHANGED
@@ -1,25 +1,25 @@
1
- import { C as s, q as r, bc as t, bd as l, R as o, be as b, bf as d, w as R, bg as m, bh as n, y as p, bi as y, bj as i, bk as h, bl as u, o as A, n as T, bm as O, bn as C } from "./replay-index-O_Pq5an3.js";
2
- import { O as c, h as I } from "./replay-oauth2-redirect-handler-CqKZB3aV.js";
1
+ import { E as s, r, bd as t, be as l, R as o, bf as b, bg as d, x as R, bh as m, bi as p, z as n, bj as i, bk as y, bl as h, bm as u, p as A, o as T, bn as E, bo as O } from "./replay-index-Cd9LaUVx.js";
2
+ import { O as I, h as P } from "./replay-oauth2-redirect-handler-CqKZB3aV.js";
3
3
  export {
4
4
  s as AI_PROVIDERS,
5
5
  r as AiPanelContext,
6
6
  t as EmbeddedReplay,
7
7
  l as Modal,
8
- c as OAuth2Error,
8
+ I as OAuth2Error,
9
9
  o as REUNITE_AI_PROVIDER,
10
10
  b as Replay,
11
11
  d as ReplayOverlay,
12
12
  R as SpanStatusCode,
13
13
  m as TelemetryClient,
14
- n as applyThemeToDOM,
15
- p as createResource,
16
- y as getCurrentTheme,
17
- I as handleOAuth2Redirect,
18
- i as loadAgentLoop,
14
+ p as applyThemeToDOM,
15
+ n as createResource,
16
+ i as getCurrentTheme,
17
+ P as handleOAuth2Redirect,
18
+ y as loadAgentLoop,
19
19
  h as makeProviderRecord,
20
20
  u as resolveTheme,
21
21
  A as useAiPanel,
22
22
  T as useTelemetry,
23
- O as useTelemetryClient,
24
- C as validateApiKey
23
+ E as useTelemetryClient,
24
+ O as validateApiKey
25
25
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/replay",
3
- "version": "0.27.0-next.5",
3
+ "version": "0.27.0-next.7",
4
4
  "type": "module",
5
5
  "main": "./dist/replay.cjs",
6
6
  "module": "./dist/replay.js",
@@ -21,7 +21,7 @@
21
21
  "react-dom": "^19.2.4",
22
22
  "react-router-dom": "^7.18.1",
23
23
  "styled-components": "^6.4.2",
24
- "@redocly/theme": "0.68.0-next.4"
24
+ "@redocly/theme": "0.68.0-next.5"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@ai-sdk/anthropic": "4.0.4",
@@ -53,8 +53,8 @@
53
53
  "@opentelemetry/api": "1.9.1",
54
54
  "@redocly/hookstate-core": "^4.2.4",
55
55
  "@redocly/hookstate-devtools": "^4.2.1",
56
- "@redocly/openapi-core": "2.40.0",
57
- "@redocly/respect-core": "2.40.0",
56
+ "@redocly/openapi-core": "2.43.1",
57
+ "@redocly/respect-core": "2.43.1",
58
58
  "@redocly/vscode-json-languageservice": "^3.4.9",
59
59
  "@tauri-apps/api": "2.4.1",
60
60
  "@tauri-apps/plugin-dialog": "2.0.0-rc.1",
@@ -1,6 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const X=require("react/jsx-runtime"),i=require("react"),a=require("./replay-index-BmX1FPBL.js"),te=require("./replay-create-model-CUL-l-eX.js"),fe=require("./replay-agent-loop-C60p47KY.js"),ge=require("./replay-db-C4jAfGtc.js"),m=require("./replay-useAiChatQueries-CVTxcu2Z.js"),F=require("@tanstack/react-query"),Z=require("./replay-ai-chat-mappers-Dqg-QVZy.js");class Ce{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=(o,r)=>({isError:!0,error:{message:o,details:r}}),s=this.applyMiddlewares(t.name,t.execute);return(o,r)=>{if(r.abortSignal?.aborted)return n("Tool execution was aborted.");try{const l=s(o,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,o)=>o(t,s),n)}}function ue(){const e=F.useQueryClient();return F.useMutation({async mutationFn(t){const n=Z.buildPersistableUiChat(t);await a.AiChatServiceFactory.getInstance().upsert(n)},onSuccess(){e.invalidateQueries({queryKey:a.aiChatKeys.all()})},onError(t){console.error("Failed to upsert ai chat item:",t)}})}function me(e){const t=F.useQueryClient(),n=a.aiChatKeys.detailTitle(e??"");return F.useMutation({mutationKey:n,async mutationFn(s){if(t.isMutating({mutationKey:n,exact:!0})>1)return;const o=Z.buildPersistableUiChat(s);await a.AiChatServiceFactory.getInstance().upsert(o)},onSuccess(){t.invalidateQueries({queryKey:a.aiChatKeys.all()})},onError(s){console.error("Failed to upsert ai chat item:",s)}})}function ve(){const e=F.useQueryClient();return F.useMutation({async mutationFn(t){await a.AiChatServiceFactory.getInstance().remove(t)},onMutate:async t=>{await e.cancelQueries({queryKey:a.aiChatKeys.all()});const n=e.getQueryData(a.aiChatKeys.all());n&&e.setQueryData(a.aiChatKeys.all(),n.filter(s=>s.id!==t)),e.setQueryData(a.aiChatKeys.detail(t),null),e.setQueriesData({queryKey:a.aiChatKeys.infiniteHistories()},s=>s&&{...s,pages:s.pages.map(o=>({...o,items:o.items.filter(r=>r.id!==t)}))})},onError(t){console.error("Failed to remove ai chat:",t)},onSettled(){e.invalidateQueries({queryKey:a.aiChatKeys.all()})}})}var ee,ae;function we(){if(ae)return ee;ae=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,o=0;return function(...l){clearTimeout(s);const c=Date.now(),u=c-o,p=n-u;p<=0?(o=c,t.apply(this,l)):s=setTimeout(()=>{o=Date.now(),t.apply(this,l)},p)}}return ee=e,ee}var Ie=we();const Te=a.getDefaultExportFromCjs(Ie);var de=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)},h=(e,t,n)=>(de(e,t,"read from private field"),n?n.call(e):t.get(e)),y=(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)},E=(e,t,n,s)=>(de(e,t,"write to private field"),t.set(e,n),n);function ye(e,t){return t!=null?Te(e,t):e}var I,Y,J,j,Q,V,B,ne,se,be=class{constructor(e=[]){y(this,I,void 0),y(this,Y,"ready"),y(this,J,void 0),y(this,j,new Set),y(this,Q,new Set),y(this,V,new Set),this.pushMessage=t=>{E(this,I,h(this,I).concat(t)),h(this,B).call(this)},this.popMessage=()=>{E(this,I,h(this,I).slice(0,-1)),h(this,B).call(this)},this.replaceMessage=(t,n)=>{E(this,I,[...h(this,I).slice(0,t),this.snapshot(n),...h(this,I).slice(t+1)]),h(this,B).call(this)},this.snapshot=t=>structuredClone(t),this["~registerMessagesCallback"]=(t,n)=>{const s=n?ye(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)}),y(this,B,()=>{h(this,j).forEach(t=>t())}),y(this,ne,()=>{h(this,Q).forEach(t=>t())}),y(this,se,()=>{h(this,V).forEach(t=>t())}),E(this,I,e)}get status(){return h(this,Y)}set status(e){E(this,Y,e),h(this,ne).call(this)}get error(){return h(this,J)}set error(e){E(this,J,e),h(this,se).call(this)}get messages(){return h(this,I)}set messages(e){E(this,I,[...e]),h(this,B).call(this)}};I=new WeakMap;Y=new WeakMap;J=new WeakMap;j=new WeakMap;Q=new WeakMap;V=new WeakMap;B=new WeakMap;ne=new WeakMap;se=new WeakMap;var L,ie=class extends te.AbstractChat{constructor({messages:e,...t}){const n=new be(e);super({...t,state:n}),y(this,L,void 0),this["~registerMessagesCallback"]=(s,o)=>h(this,L)["~registerMessagesCallback"](s,o),this["~registerStatusCallback"]=s=>h(this,L)["~registerStatusCallback"](s),this["~registerErrorCallback"]=s=>h(this,L)["~registerErrorCallback"](s),E(this,L,n)}};L=new WeakMap;function Se({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 o={...n,onToolCall:d=>{var g,f;return(f=(g=s.current).onToolCall)==null?void 0:f.call(g,d)},onData:d=>{var g,f;return(f=(g=s.current).onData)==null?void 0:f.call(g,d)},onFinish:d=>{var g,f;return(f=(g=s.current).onFinish)==null?void 0:f.call(g,d)},onError:d=>{var g,f;return(f=(g=s.current).onError)==null?void 0:f.call(g,d)},sendAutomaticallyWhen:d=>{var g,f,R;return(R=(f=(g=s.current).sendAutomaticallyWhen)==null?void 0:f.call(g,d))!=null?R:!1}},r=i.useRef("chat"in n?n.chat:new ie(o));("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 ie(o));const c=i.useCallback(d=>r.current["~registerMessagesCallback"](d,e),[e,r.current.id]),u=i.useSyncExternalStore(c,()=>r.current.messages,()=>r.current.messages),p=i.useSyncExternalStore(r.current["~registerStatusCallback"],()=>r.current.status,()=>r.current.status),w=i.useSyncExternalStore(r.current["~registerErrorCallback"],()=>r.current.error,()=>r.current.error),M=i.useCallback(d=>{typeof d=="function"&&(d=d(r.current.messages)),r.current.messages=d},[r]);return i.useEffect(()=>{t&&r.current.resumeStream()},[t,r]),{id:r.current.id,messages:u,setMessages:M,sendMessage:r.current.sendMessage,regenerate:r.current.regenerate,clearError:r.current.clearError,stop:r.current.stop,error:w,resumeStream:r.current.resumeStream,status:p,addToolResult:r.current.addToolOutput,addToolOutput:r.current.addToolOutput,addToolApprovalResponse:r.current.addToolApprovalResponse}}const Ae=20;function ke(e){if(e.length===0)return"No OpenAPI specs loaded.";const t=e.slice(0,Ae),n=t.map(Ee),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 Ee(e){return[` apiId="${e.apiId}"`,`title="${e.title}"`,e.version?`version="${e.version}"`:null,e.primaryServer?`server="${e.primaryServer}"`:null].filter(Boolean).join(" ")}const Me=30;function Re(e){if(e.length===0)return"No Arazzo collections loaded.";const t=[`Arazzo collections (${e.length}):`];let n=Me,s=0,o=0;for(const l of e){if(n<=0){s+=l.workflows.length,o++;continue}if(t.push(_e(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(` ${xe(c)}`),n--):s++}else s+=l.workflows.length}const r=[s>0?`${s} more workflow(s)`:null,o>0?`${o} more collection(s)`:null].filter(Boolean);return r.length>0&&t.push(` …and ${r.join(", plus ")} not shown.`),t.join(`
3
- `)}function _e(e){const t=e.sourceApiIds.length>0?` apis=[${e.sourceApiIds.join(", ")}]`:"";return` collectionId="${e.collectionId}" title="${e.title}"${t}`}function xe(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($e),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 $e(e){return[`${e.isActive?"*":" "} name="${e.name}"`,`inputs=${e.inputCount}`,`servers=${e.serverCount}`].join(" ")}const Oe=30;function Ue(e){if(e.length===0)return"No tabs are open.";const t=e.slice(0,Oe),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 Be="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 Le(e){const t=`
6
- `.repeat(2),n=[Be,t,Ue(e.tabs),t,ke(e.apis),t,Re(e.collections),t,De(e.environments)].join("");return ge.section("active_state",n)}function Fe(e){return e.apis.get({noproxy:!0}).map(Ne)}function Ne(e){return{apiId:e.id,title:e.info?.title??"Untitled API",version:e.info?.version,primaryServer:e.servers?.[0]?.url}}function qe(e){return e.collections.get({noproxy:!0}).map(Ke)}function Ke(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 je(e){const t=e.environments.get({noproxy:!0}),n=e.activeEnvironmentId.get({noproxy:!0});return t.filter(s=>s.state!==a.ItemState.Draft).map(s=>({name:s.name,isActive:s.name===n,inputCount:s.inputs.length,serverCount:s.servers.length}))}function Qe(e){const t=e.tabsState.tabs.get({noproxy:!0}),n=e.tabsState.activeTabIdx.get({noproxy:!0});return t.map((s,o)=>Ve(e,s,o,o===n))}function Ve(e,t,n,s){const o={tabIndex:n,type:t.data.type,isActive:s,isPreview:t.state===a.TabState.Preview};switch(t.data.type){case a.TabDataType.Collection:{const{collectionId:r}=t.data;return{...o,label:Ge(e,r)??r,collectionId:r}}case a.TabDataType.Workflow:{const{collectionId:r,workflowId:l}=t.data;return{...o,label:l,collectionId:r,workflowId:l}}case a.TabDataType.WorkflowRun:{const{collectionId:r,workflowId:l,historyId:c,label:u}=t.data;return{...o,label:u??`${l} run`,collectionId:r,workflowId:l,isHistory:c!=null}}case a.TabDataType.Step:{const r=t.data;return{...o,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 Ge(e,t){return e.collections.find(s=>s.id.get()===t)?.info.title.get()}function He(e){if(e.stepId)return e.stepId;if(e.draftStep){const t=[a.getStepMethod(e.draftStep),a.getStepUrl(e.draftStep)].filter(Boolean).join(" ");if(t)return t}return"New Request"}function ze(e){return{tabs:Qe(e),apis:Fe(e),collections:qe(e),environments:je(e)}}function Ye(){const{getCollection:e}=a.useCollections(),{getWorkflow:t}=a.useWorkflows(),{getStep:n}=a.useSteps(),{tab:s}=a.useActiveTab(),o=s?.data.get();return i.useMemo(()=>{if(!o)return null;switch(o.type){case a.TabDataType.Collection:const l=e(o.collectionId);return{...o,collection:l?l.get():null};case a.TabDataType.Workflow:const c=t({collectionId:o.collectionId,workflowId:o.workflowId});return{...o,workflow:c?c.get():null};case a.TabDataType.Step:const u=n({collectionId:o.collectionId,workflowId:o.workflowId,stepId:o.stepId});return{...o,step:u?u.get():null};case a.TabDataType.WorkflowRun:const p=t({collectionId:o.collectionId,workflowId:o.workflowId});return{...o,workflow:p?p.get():null}}},[o,e,t,n])}function Je(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 Xe(){return(e,t)=>(n,s)=>t(Je(n),s)}function Ze(){const{getApiOperation:e}=a.useApiOperation(),t=a.useTabHandlers();return i.useMemo(()=>({getApiOperation:e,...t}),[e,t])}function et(e){const{convertOperationToReplayValue:t}=a.useSettingsContext(),n=Ye(),s=Ze(),o=a.useSettingsState(),r=a.useGlobalStore(),{attachApiToCollection:l}=a.useCollections(),{handleCloseByDataId:c}=a.useTabHandlers(),u=i.useRef(n);return u.current=n,{tools:i.useMemo(()=>{const w=new Ce({middlewares:[Xe()]});return m.registerBuiltInTools(w,{[m.reportStatusBlueprint.name]:void 0,[m.runRequestBlueprint.name]:{store:r,settingsState:o},[m.updateSecurityBlueprint.name]:{store:r},[m.updateStepBlueprint.name]:{store:r},[m.manageCollectionBlueprint.name]:{store:r,attachApiToCollection:l,handleCloseByDataId:c,convertOperationToReplayValue:t},[m.manageEnvironmentBlueprint.name]:{store:r},[m.webSearchBlueprint.name]:{model:e},[m.searchBlueprint.name]:{store:r},[m.openTabBlueprint.name]:{store:r,context:s},[m.getCurrentTabBlueprint.name]:{getActiveTabDetailedData:()=>u.current},[m.getApiMetadataBlueprint.name]:{store:r}}),w.getToolSet()},[l,t,c,e,s,o,r])}}function tt(e){const{children:t,chatId:n,model:s,initialMessages:o,onChatFinish:r,onChatMessagesUpdated:l}=e,c=a.useSettingsState(),{getReuniteAuth:u}=a.useSettingsContext(),{tools:p}=et(s),{sendEvent:w}=a.useTelemetry(),M=i.useRef(p),d=i.useRef(s),{isOpen:g,openPanel:f,closePanel:R}=a.useAiPanel(),_=i.useRef(void 0),N=a.useGlobalStore(),b=i.useRef(N);M.current=p,d.current=s,b.current=N;const v=i.useMemo(()=>{_.current?.end();const A=a.trace.getTracer("replay-ai-chat").startSpan("ai.chat.session",{attributes:{conversation_id:n}});_.current=A;const k=a.trace.setSpan(a.context.active(),A);return new fe.AgentLoop({activeConversationId:n,model:d.current,tools:M.current,sendEvent:w,parentCtx:k,getActiveStateMessage:()=>Le(ze(b.current))})},[n,w]);i.useEffect(()=>()=>_.current?.end(),[]);const U=i.useMemo(()=>{if(v)return new te.DirectChatTransport({agent:v.getAgent()})},[v]);i.useEffect(()=>{v.setModel(s)},[v,s]),i.useEffect(()=>{v.registerTools(p)},[v,p]);const{messages:S,setMessages:x,sendMessage:q,status:P,error:G,stop:D,addToolApprovalResponse:$}=Se({id:n,messages:o,transport:U,sendAutomaticallyWhen:te.lastAssistantMessageIsCompleteWithApprovalResponses,onFinish(A){if(!r||!v)return;r({agentLoop:v,chat:this},A)}}),O=i.useMemo(()=>P==="streaming"||P==="submitted",[P]),K=i.useCallback(()=>{c.aiEnabled.get()===!0&&f()},[f,c.aiEnabled]),H=i.useCallback(()=>{R()},[R]),C=i.useCallback(async A=>{const k=A.trim();if(!(!k||!U)){if(s.provider===a.REUNITE_AI_PROVIDER){const T=await u?.();T?.baseUrl&&T?.accessToken&&v.setModel({provider:a.REUNITE_AI_PROVIDER,baseUrl:T.baseUrl,accessToken:T.accessToken})}x(T=>m.hasPendingApprovalMessage(T)?m.denyPendingApprovals(T):T),q({text:k})}},[v,u,s.provider,q,x,U]),W=i.useCallback(()=>{O&&D()},[O,D]);i.useEffect(()=>()=>{D()},[n,D]);const re=i.useCallback(A=>{const k=A(S),T=k.map(z=>z.message),oe=[...S];for(const z of k)oe[z.index]=z.message;x(oe),l?.(T)},[S,l,x]),he=i.useMemo(()=>({messages:S,isStreaming:O,chatStatus:P,chatError:G,sendMessage:C,updateMessages:re,stopGeneration:W,addToolApprovalResponse:$}),[$,G,O,S,C,P,W,re]),pe=i.useMemo(()=>({isOpen:g,openPanel:K,closePanel:H}),[g,K,H]);return X.jsx(m.AiConversationContext.Provider,{value:he,children:X.jsx(a.AiPanelContext.Provider,{value:pe,children:t})})}function nt(e){return e.slice(-2)}function st(e,t){return!!(e||t<1)}function rt(e){return i.useCallback(async(t,n)=>{if(st(e,n.messages.length))return null;const s=n.messages[0],o=m.getMessageTextContent(s.parts);try{return(await t.agentLoop.generateTitle(o)).trim()}catch(r){return console.error("Unable to generate chat title",r),null}},[e])}function ot({chatId:e,model:t,existingTitle:n}){const{mutate:s}=me(e),o=rt(n);return i.useCallback(async(...r)=>{const l=await o(...r);l!==null&&l.length!==0&&s({id:e,model:t,messages:[],title:l})},[o,t,e,s])}function at({chatId:e,model:t}){const{mutate:n}=ue();return i.useCallback((s,o)=>{const r=nt(o.messages);n({id:e,model:t,messages:r})},[t,e,n])}function it({chatId:e,model:t}){const{mutate:n}=ue();return i.useCallback(s=>{s.length!==0&&n({id:e,model:t,messages:s})},[t,e,n])}function lt(e){return i.useMemo(()=>{const t=[a.REUNITE_MODEL_OPTION];if(e){for(const[n,s]of Object.entries(e))if(s.enabled&&s.apiKey){const o=s.models.map(r=>({...r,provider:n}));t.push(...o)}}return t},[e])}function le(e){return typeof e=="function"?e():e}function ce(e,t){try{const n=globalThis.localStorage.getItem(e);return n===null?le(t):n}catch{return le(t)}}function ct(e,t){try{globalThis.localStorage.setItem(e,t)}catch{console.error("Failed to write to localStorage",{key:e,value:t})}}function ut(e,t){const[n,s]=i.useState(()=>ce(e,t)),o=i.useRef(t);o.current=t,i.useEffect(()=>{s(ce(e,o.current))},[e]);const r=i.useCallback(l=>{s(c=>{const u=l instanceof Function?l(c):l;return ct(e,u),u})},[e]);return[n,r]}const dt="replay:ai:selectedModelId";function ht(e){const{availableModels:t,aiProviders:n,reuniteAuth:s}=e,[o,r]=ut(dt,a.REUNITE_MODEL_OPTION.id);return i.useEffect(()=>{t.find(u=>u.id===o)||r(a.REUNITE_MODEL_OPTION.id)},[t,o,r]),{model:i.useMemo(()=>{const c={provider:a.REUNITE_AI_PROVIDER,baseUrl:s.baseUrl,accessToken:s.accessToken},u=t.find(w=>w.id===o);if(!u||u.provider===a.REUNITE_AI_PROVIDER)return c;const p=n?.[u.provider];return!p||!p.apiKey||!p.enabled?c:{provider:u.provider,modelId:u.id,apiKey:p.apiKey}},[o,t,n,s]),selectedModelId:o,selectModel:r}}function pt(){const[e,t]=i.useState({baseUrl:"",accessToken:""}),{getReuniteAuth:n}=a.useSettingsContext();return i.useEffect(()=>{let s=!1;async function o(){const r=await n?.();s||t({baseUrl:r?.baseUrl??"",accessToken:r?.accessToken??""})}return o().catch(()=>{s||t({baseUrl:"",accessToken:""})}),()=>{s=!0}},[n]),e}function ft(e){const{children:t}=e,[n,s]=i.useState(Z.generateAiChatId),[o,r]=i.useState(n),[l,c]=i.useState(null),u=a.useSettingsState(),p=a.useSettingsContext(),{openPanel:w}=a.useAiPanel(),M=o!==n,d=i.useCallback(()=>{const C=Z.generateAiChatId();r(C),s(C)},[]),g=i.useCallback(C=>{r(C)},[]),{data:f}=m.useAiChat(o),R=pt(),_=lt(p.aiProviders),{selectedModelId:N,model:b,selectModel:v}=ht({availableModels:_,aiProviders:p.aiProviders,reuniteAuth:R}),U=ve(),S=at({chatId:n,model:b}),x=it({chatId:n,model:b}),q=ot({chatId:n,model:b,existingTitle:f?.title}),P=i.useCallback((C,W)=>{W.isAbort||(S(C,W),q(C,W))},[S,q]),G=i.useCallback((...C)=>{x(...C)},[x]),D=i.useCallback(C=>{(o===C||n===C)&&d(),U.mutate(C)},[d,n,U,o]),$=f?.id;i.useEffect(()=>{$&&$!==n&&s($)},[$,o,n]);const O=i.useCallback(()=>{c(null)},[]),K=i.useCallback(C=>{u.aiEnabled.get()&&(d(),c(C),w())},[w,d,u.aiEnabled]),H=i.useMemo(()=>({chatId:n,model:b,availableModels:_,selectedModelId:N,selectModel:v,onSettingsOpen:p.onSettingsOpen,title:f?.title??a.defaultAiChatContextValue.title,isLoading:M,selectChat:g,removeChat:D,createNewChat:d,openAiChatWithPresetInput:K,pendingComposerPreset:l,clearPendingComposerPreset:O}),[n,_,f?.title,b,M,g,D,d,K,l,O,N,v,p.onSettingsOpen]);return X.jsx(a.AiChatContext.Provider,{value:H,children:X.jsx(tt,{chatId:n,model:b,initialMessages:f?.messages,onChatFinish:P,onChatMessagesUpdated:G,children:t})})}exports.AiChatProvider=ft;