@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
@@ -1,5 +1,5 @@
1
- import { c as i, g as n } from "./replay-create-model-Dr80k74P.js";
2
- import { M as s } from "./replay-index-BizzVzWT.js";
1
+ import { c as i, g as n } from "./replay-create-model-CeSlm24x.js";
2
+ import { M as s } from "./replay-index-DRb3mixV.js";
3
3
  import { V as l } from "./replay-defaults-CzR6jw9a.js";
4
4
  async function g(a, e, t, o) {
5
5
  try {
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./replay-create-model-CqA612v0.js"),n=require("./replay-index-D3evrr0U.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-DdPq1CIm.js"),n=require("./replay-index-C2b91LJZ.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;
package/dist/replay.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./replay-index-D3evrr0U.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-C2b91LJZ.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
@@ -5,7 +5,6 @@ import { ConfigureServerRequestValues } from '../../node_modules/@redocly/theme/
5
5
  import { Context } from 'react';
6
6
  import { GenerateTextOnFinishCallback } from 'ai';
7
7
  import { GenerateTextOnStepFinishCallback } from 'ai';
8
- import { ImmutableObject } from '@redocly/hookstate-core';
9
8
  import { JSX } from 'react/jsx-runtime';
10
9
  import { NamedExoticComponent } from 'react';
11
10
  import { ReactElement } from 'react';
@@ -188,6 +187,8 @@ declare type InputSettings = {
188
187
  gateEnvironments?: {
189
188
  names: string[];
190
189
  baseEnvironment?: string;
190
+ /** Value names the gate supplied, per environment — the merge cannot say who wrote a key. */
191
+ valueNames?: Record<string, string[]>;
191
192
  };
192
193
  dynamicReplayValues?: ConfigureRequestValues | ConfigureServerRequestValues | null;
193
194
  certificates?: Certificate[];
@@ -200,6 +201,7 @@ declare type InputSettings = {
200
201
  hideOtherSecuritySchemes?: boolean;
201
202
  layout?: ReplayLayout;
202
203
  aiEnabled?: boolean;
204
+ features?: ReplayFeatures;
203
205
  aiProviders?: Partial<Record<AiProviderName, AiProviderConfig>>;
204
206
  };
205
207
 
@@ -774,11 +776,16 @@ export declare type ReplayComponents = {
774
776
  ReplayTopBarActions: ComponentType<ReplayTopBarActionsComponentProps> | null;
775
777
  };
776
778
 
779
+ declare type ReplayFeatures = {
780
+ graphql?: boolean;
781
+ };
782
+
777
783
  declare type ReplayGateComponentProps = {
778
784
  setEnvironmentValues: (envName: string, values: Record<string, PredefinedEnvValue>) => void;
779
785
  setSelectedEnvironment: (envName: string) => void;
780
786
  selectedEnvironment?: string;
781
787
  apiId?: string;
788
+ onClose: () => void;
782
789
  children: ReactNode;
783
790
  };
784
791
 
@@ -814,7 +821,7 @@ export declare type ResolvedTheme = 'light' | 'dark';
814
821
 
815
822
  export declare function resolveTheme(theme: Theme): ResolvedTheme;
816
823
 
817
- declare type Response_2 = ImmutableObject<{
824
+ declare type Response_2 = {
818
825
  headers: [string, string][];
819
826
  cookies: [string, string][];
820
827
  bodyNotStored?: boolean;
@@ -826,7 +833,7 @@ declare type Response_2 = ImmutableObject<{
826
833
  arrayBuffer: ArrayBuffer;
827
834
  download?: ResponseDownload;
828
835
  url?: string;
829
- }>;
836
+ };
830
837
 
831
838
  declare type ResponseDownload = {
832
839
  fileName: string;
package/dist/replay.js CHANGED
@@ -1,25 +1,25 @@
1
- import { X as s, J as r, bk as t, bl as l, H as o, bm as b, bn as d, e as m, bo as p, bp as R, d as n, bq as u, br as y, bs as i, bt as A, E as T, C as h, bu as E, bv as O } from "./replay-index-BizzVzWT.js";
2
- import { O as v, h as I } from "./replay-oauth2-redirect-handler-CqKZB3aV.js";
1
+ import { A as s, ap as r, bF as t, bG as l, R as o, bH as b, bI as R, E as d, bJ as p, bK as m, F as n, bL as y, bM as A, bN as i, bO as u, ao as O, an as T, bP as h, bQ as E } from "./replay-index-DRb3mixV.js";
2
+ import { O as P, h as C } 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
- v as OAuth2Error,
8
+ P as OAuth2Error,
9
9
  o as REUNITE_AI_PROVIDER,
10
10
  b as Replay,
11
- d as ReplayOverlay,
12
- m as SpanStatusCode,
11
+ R as ReplayOverlay,
12
+ d as SpanStatusCode,
13
13
  p as TelemetryClient,
14
- R as applyThemeToDOM,
14
+ m as applyThemeToDOM,
15
15
  n as createResource,
16
- u as getCurrentTheme,
17
- I as handleOAuth2Redirect,
18
- y as loadAgentLoop,
16
+ y as getCurrentTheme,
17
+ C as handleOAuth2Redirect,
18
+ A as loadAgentLoop,
19
19
  i as makeProviderRecord,
20
- A as resolveTheme,
21
- T as useAiPanel,
22
- h as useTelemetry,
23
- E as useTelemetryClient,
24
- O as validateApiKey
20
+ u as resolveTheme,
21
+ O as useAiPanel,
22
+ T as useTelemetry,
23
+ h as useTelemetryClient,
24
+ E as validateApiKey
25
25
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/replay",
3
- "version": "0.28.0-next.1",
3
+ "version": "0.28.0-next.10",
4
4
  "type": "module",
5
5
  "main": "./dist/replay.cjs",
6
6
  "module": "./dist/replay.js",
@@ -16,12 +16,12 @@
16
16
  }
17
17
  },
18
18
  "peerDependencies": {
19
+ "@redocly/theme": "0.69.0-next.10",
19
20
  "@tanstack/react-query": "5.62.3",
20
21
  "react": "^19.2.7",
21
22
  "react-dom": "^19.2.7",
22
23
  "react-router": "^8.3.0",
23
- "styled-components": "^6.4.2",
24
- "@redocly/theme": "0.69.0-next.1"
24
+ "styled-components": "^6.4.2"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@ai-sdk/anthropic": "4.0.4",
@@ -51,10 +51,9 @@
51
51
  "@lezer/highlight": "^1.1.6",
52
52
  "@noble/hashes": "^1.8.0",
53
53
  "@opentelemetry/api": "1.9.1",
54
- "@redocly/hookstate-core": "^4.2.4",
55
- "@redocly/hookstate-devtools": "^4.2.1",
56
- "@redocly/openapi-core": "2.45.0",
57
- "@redocly/respect-core": "2.45.0",
54
+ "@redocly/openapi-core": "2.51.2",
55
+ "@redocly/replay-asyncapi-sdk": "0.0.1",
56
+ "@redocly/respect-core": "2.51.2",
58
57
  "@redocly/vscode-json-languageservice": "^3.4.9",
59
58
  "@tauri-apps/api": "2.4.1",
60
59
  "@tauri-apps/plugin-deep-link": "^2.4.5",
@@ -73,15 +72,15 @@
73
72
  "@uiw/codemirror-theme-material": "^4.21.20",
74
73
  "@uiw/react-codemirror": "^4.21.20",
75
74
  "@vitejs/plugin-react-swc": "4.3.1",
76
- "@vitest/coverage-v8": "4.1.10",
75
+ "@vitest/coverage-v8": "4.1.11",
77
76
  "ai": "7.0.9",
78
77
  "dayjs": "1.11.21",
79
78
  "diff": "^8.0.0",
80
79
  "drizzle-orm": "^0.45.0",
81
80
  "fast-xml-parser": "5.7.3",
82
81
  "idb": "^8.0.2",
83
- "jest-styled-components": "7.2.0",
84
- "js-yaml": "4.3.1",
82
+ "jotai": "^2.16.2",
83
+ "js-yaml": "4.3.2",
85
84
  "json-pointer": "^0.6.2",
86
85
  "json-schema-typed": "^8.0.1",
87
86
  "marked": "^4.0.15",
@@ -98,10 +97,18 @@
98
97
  "vite": "7.3.6",
99
98
  "vite-plugin-dts": "4.5.4",
100
99
  "vite-tsconfig-paths": "4.3.2",
101
- "vitest": "4.1.10",
100
+ "vitest": "4.1.11",
102
101
  "yaml": "^2.0.0",
103
- "zod": "^3.25.76",
104
- "@redocly/replay-asyncapi-sdk": "0.0.1"
102
+ "zod": "^3.25.76"
103
+ },
104
+ "nx": {
105
+ "targets": {
106
+ "vitest:test": {
107
+ "dependsOn": [
108
+ "^build"
109
+ ]
110
+ }
111
+ }
105
112
  },
106
113
  "scripts": {
107
114
  "start": "vite",
@@ -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-D3evrr0U.js"),te=require("./replay-create-model-CqA612v0.js"),pe=require("./replay-agent-loop-vzQUCpCA.js"),ge=require("./replay-db-Bq7IGfIa.js"),m=require("./replay-useAiChatQueries-DjjzEorX.js"),F=require("@tanstack/react-query"),Z=require("./replay-ai-chat-mappers-pb8lpkUD.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,h=n-u;h<=0?(o=c,t.apply(this,l)):s=setTimeout(()=>{o=Date.now(),t.apply(this,l)},h)}}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)},f=(e,t,n)=>(de(e,t,"read from private field"),n?n.call(e):t.get(e)),b=(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)},M=(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 w,Y,J,j,Q,V,B,ne,se,be=class{constructor(e=[]){b(this,w,void 0),b(this,Y,"ready"),b(this,J,void 0),b(this,j,new Set),b(this,Q,new Set),b(this,V,new Set),this.pushMessage=t=>{M(this,w,f(this,w).concat(t)),f(this,B).call(this)},this.popMessage=()=>{M(this,w,f(this,w).slice(0,-1)),f(this,B).call(this)},this.replaceMessage=(t,n)=>{M(this,w,[...f(this,w).slice(0,t),this.snapshot(n),...f(this,w).slice(t+1)]),f(this,B).call(this)},this.snapshot=t=>structuredClone(t),this["~registerMessagesCallback"]=(t,n)=>{const s=n?ye(t,n):t;return f(this,j).add(s),()=>{f(this,j).delete(s)}},this["~registerStatusCallback"]=t=>(f(this,Q).add(t),()=>{f(this,Q).delete(t)}),this["~registerErrorCallback"]=t=>(f(this,V).add(t),()=>{f(this,V).delete(t)}),b(this,B,()=>{f(this,j).forEach(t=>t())}),b(this,ne,()=>{f(this,Q).forEach(t=>t())}),b(this,se,()=>{f(this,V).forEach(t=>t())}),M(this,w,e)}get status(){return f(this,Y)}set status(e){M(this,Y,e),f(this,ne).call(this)}get error(){return f(this,J)}set error(e){M(this,J,e),f(this,se).call(this)}get messages(){return f(this,w)}set messages(e){M(this,w,[...e]),f(this,B).call(this)}};w=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}),b(this,L,void 0),this["~registerMessagesCallback"]=(s,o)=>f(this,L)["~registerMessagesCallback"](s,o),this["~registerStatusCallback"]=s=>f(this,L)["~registerStatusCallback"](s),this["~registerErrorCallback"]=s=>f(this,L)["~registerErrorCallback"](s),M(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,p;return(p=(g=s.current).onToolCall)==null?void 0:p.call(g,d)},onData:d=>{var g,p;return(p=(g=s.current).onData)==null?void 0:p.call(g,d)},onFinish:d=>{var g,p;return(p=(g=s.current).onFinish)==null?void 0:p.call(g,d)},onError:d=>{var g,p;return(p=(g=s.current).onError)==null?void 0:p.call(g,d)},sendAutomaticallyWhen:d=>{var g,p,R;return(R=(p=(g=s.current).sendAutomaticallyWhen)==null?void 0:p.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),h=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(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:T,sendMessage:r.current.sendMessage,regenerate:r.current.regenerate,clearError:r.current.clearError,stop:r.current.stop,error:I,resumeStream:r.current.resumeStream,status:h,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 We(e){if(e.length===0)return"No tabs are open.";const t=e.slice(0,Oe),n=t.map(Ue),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 Ue(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,We(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 h=t({collectionId:o.collectionId,workflowId:o.workflowId});return{...o,workflow:h?h.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=a.useRunWorkflow(),h=i.useRef(n);return h.current=n,{tools:i.useMemo(()=>{const T=new Ce({middlewares:[Xe()]});return m.registerBuiltInTools(T,{[m.reportStatusBlueprint.name]:void 0,[m.runRequestBlueprint.name]:{store:r,settingsState:o},[m.runWorkflowBlueprint.name]:{store:r,runWorkflow:u},[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:()=>h.current},[m.getApiMetadataBlueprint.name]:{store:r}}),T.getToolSet()},[l,t,c,e,s,u,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:h}=et(s),{sendEvent:I}=a.useTelemetry(),T=i.useRef(h),d=i.useRef(s),{isOpen:g,openPanel:p,closePanel:R}=a.useAiPanel(),_=i.useRef(void 0),N=a.useGlobalStore(),S=i.useRef(N);T.current=h,d.current=s,S.current=N;const v=i.useMemo(()=>{_.current?.end();const k=a.trace.getTracer("replay-ai-chat").startSpan("ai.chat.session",{attributes:{conversation_id:n}});_.current=k;const E=a.trace.setSpan(a.context.active(),k);return new pe.AgentLoop({activeConversationId:n,model:d.current,tools:T.current,sendEvent:I,parentCtx:E,getActiveStateMessage:()=>Le(ze(S.current))})},[n,I]);i.useEffect(()=>()=>_.current?.end(),[]);const W=i.useMemo(()=>{if(v)return new te.DirectChatTransport({agent:v.getAgent()})},[v]);i.useEffect(()=>{v.setModel(s)},[v,s]),i.useEffect(()=>{v.registerTools(h)},[v,h]);const{messages:A,setMessages:x,sendMessage:q,status:P,error:G,stop:D,addToolApprovalResponse:$}=Se({id:n,messages:o,transport:W,sendAutomaticallyWhen:te.lastAssistantMessageIsCompleteWithApprovalResponses,onFinish(k){if(!r||!v)return;r({agentLoop:v,chat:this},k)}}),O=i.useMemo(()=>P==="streaming"||P==="submitted",[P]),K=i.useCallback(()=>{c.aiEnabled.get()===!0&&p()},[p,c.aiEnabled]),H=i.useCallback(()=>{R()},[R]),C=i.useCallback(async k=>{const E=k.trim();if(!(!E||!W)){if(s.provider===a.REUNITE_AI_PROVIDER){const y=await u?.();y?.baseUrl&&y?.accessToken&&v.setModel({provider:a.REUNITE_AI_PROVIDER,baseUrl:y.baseUrl,accessToken:y.accessToken})}x(y=>m.hasPendingApprovalMessage(y)?m.denyPendingApprovals(y):y),q({text:E})}},[v,u,s.provider,q,x,W]),U=i.useCallback(()=>{O&&D()},[O,D]);i.useEffect(()=>()=>{D()},[n,D]);const re=i.useCallback(k=>{const E=k(A),y=E.map(z=>z.message),oe=[...A];for(const z of E)oe[z.index]=z.message;x(oe),l?.(y)},[A,l,x]),he=i.useMemo(()=>({messages:A,isStreaming:O,chatStatus:P,chatError:G,sendMessage:C,updateMessages:re,stopGeneration:U,addToolApprovalResponse:$}),[$,G,O,A,C,P,U,re]),fe=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:fe,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(I=>I.id===o);if(!u||u.provider===a.REUNITE_AI_PROVIDER)return c;const h=n?.[u.provider];return!h||!h.apiKey||!h.enabled?c:{provider:u.provider,modelId:u.id,apiKey:h.apiKey}},[o,t,n,s]),selectedModelId:o,selectModel:r}}function ft(){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 pt(e){const{children:t}=e,[n,s]=i.useState(Z.generateAiChatId),[o,r]=i.useState(n),[l,c]=i.useState(null),u=a.useSettingsState(),h=a.useSettingsContext(),{openPanel:I}=a.useAiPanel(),T=o!==n,d=i.useCallback(()=>{const C=Z.generateAiChatId();r(C),s(C)},[]),g=i.useCallback(C=>{r(C)},[]),{data:p}=m.useAiChat(o),R=ft(),_=lt(h.aiProviders),{selectedModelId:N,model:S,selectModel:v}=ht({availableModels:_,aiProviders:h.aiProviders,reuniteAuth:R}),W=ve(),A=at({chatId:n,model:S}),x=it({chatId:n,model:S}),q=ot({chatId:n,model:S,existingTitle:p?.title}),P=i.useCallback((C,U)=>{U.isAbort||(A(C,U),q(C,U))},[A,q]),G=i.useCallback((...C)=>{x(...C)},[x]),D=i.useCallback(C=>{(o===C||n===C)&&d(),W.mutate(C)},[d,n,W,o]),$=p?.id;i.useEffect(()=>{$&&$!==n&&s($)},[$,o,n]);const O=i.useCallback(()=>{c(null)},[]),K=i.useCallback(C=>{u.aiEnabled.get()&&(d(),c(C),I())},[I,d,u.aiEnabled]),H=i.useMemo(()=>({chatId:n,model:S,availableModels:_,selectedModelId:N,selectModel:v,onSettingsOpen:h.onSettingsOpen,title:p?.title??a.defaultAiChatContextValue.title,isLoading:T,selectChat:g,removeChat:D,createNewChat:d,openAiChatWithPresetInput:K,pendingComposerPreset:l,clearPendingComposerPreset:O}),[n,_,p?.title,S,T,g,D,d,K,l,O,N,v,h.onSettingsOpen]);return X.jsx(a.AiChatContext.Provider,{value:H,children:X.jsx(tt,{chatId:n,model:S,initialMessages:p?.messages,onChatFinish:P,onChatMessagesUpdated:G,children:t})})}exports.AiChatProvider=pt;