@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.
- package/dist/{replay-AiChatProvider-CVvR1kSd.js → replay-AiChatProvider-Dub7iVgM.js} +273 -271
- package/dist/replay-AiChatProvider-e4PWUCRp.js +6 -0
- package/dist/{replay-AiChatSqliteDBStorage-DVJ9f2EK.js → replay-AiChatSqliteDBStorage-CpjwxLnF.js} +1 -1
- package/dist/{replay-AiChatSqliteDBStorage-BFHRKFlk.js → replay-AiChatSqliteDBStorage-DbxNU-ot.js} +1 -1
- package/dist/replay-AiPanel-B_zDmo55.js +868 -0
- package/dist/{replay-AiPanel-CynVcVmm.js → replay-AiPanel-DuRA2zAt.js} +1226 -1114
- package/dist/{replay-SqliteDBStorage-eRBPh4E8.js → replay-SqliteDBStorage-BrNleq7S.js} +1 -1
- package/dist/{replay-SqliteDBStorage-CSz7NYH4.js → replay-SqliteDBStorage-CafBNNLB.js} +1 -1
- package/dist/{replay-agent-loop-CEZz1kj-.js → replay-agent-loop-CV0s4022.js} +48 -48
- package/dist/{replay-agent-loop-C60p47KY.js → replay-agent-loop-CzV79Gr1.js} +1 -1
- package/dist/{replay-ai-chat-mappers-BAHU6JIc.js → replay-ai-chat-mappers-BNsR30dS.js} +1 -1
- package/dist/{replay-ai-chat-mappers-Dqg-QVZy.js → replay-ai-chat-mappers-BWeZN6p_.js} +1 -1
- package/dist/{replay-create-model-C2NQtDcL.js → replay-create-model-CEDEaJC8.js} +3 -3
- package/dist/{replay-create-model-CUL-l-eX.js → replay-create-model-CmRk68RD.js} +2 -2
- package/dist/{replay-db-C4jAfGtc.js → replay-db-BfSnfWcb.js} +8 -8
- package/dist/{replay-db-Dw-X2WGx.js → replay-db-CM8OLcFK.js} +21 -21
- package/dist/{replay-external-resolver-DAkLV0nr.js → replay-external-resolver-G86hjAvS.js} +2 -2
- package/dist/{replay-external-resolver-DN_PWq_2.js → replay-external-resolver-bdSEZsNk.js} +1 -1
- package/dist/{replay-index-BmX1FPBL.js → replay-index-BmotNqNI.js} +1170 -1148
- package/dist/replay-index-Bsag-eKM.js +1 -0
- package/dist/replay-index-C6SJPGDO.js +23 -0
- package/dist/replay-index-CUs62_1f.js +1 -0
- package/dist/{replay-index-rRWvC2pp.js → replay-index-C_eJVbPZ.js} +1 -1
- package/dist/{replay-index-O_Pq5an3.js → replay-index-Cd9LaUVx.js} +23380 -22731
- package/dist/{replay-index-m00jnWFr.js → replay-index-D58Mg6_y.js} +1 -1
- package/dist/{replay-index-DR1uVBvc.js → replay-index-DYtNY0OY.js} +42 -41
- package/dist/replay-lint-CxwKILeF.js +184 -0
- package/dist/{replay-lint-CcVVykW7.js → replay-lint-YfaLafO6.js} +8246 -8047
- package/dist/{replay-lint-graphql-DlD7bblx.js → replay-lint-graphql-BRrk1UK5.js} +1 -1
- package/dist/{replay-lint-graphql-5cGt2KR_.js → replay-lint-graphql-GtbZklco.js} +1 -1
- package/dist/replay-resolve-Bza6lozO.js +47 -0
- package/dist/{replay-resolve-Ca3DUbGq.js → replay-resolve-Rb3XjiUd.js} +919 -908
- package/dist/{replay-respect-run-eSRzH2dk.js → replay-respect-run-BB0VXCz-.js} +1605 -1555
- package/dist/replay-respect-run-Pkoy4Q3P.js +78 -0
- package/dist/{replay-tauri-path-C-oxFOHe.js → replay-tauri-path-B8tT4cGY.js} +2 -2
- package/dist/{replay-tauri-path-CKcvIl_h.js → replay-tauri-path-yOFqWleH.js} +1 -1
- package/dist/{replay-useAiChatQueries-CVTxcu2Z.js → replay-useAiChatQueries-1fqZwVTj.js} +71 -48
- package/dist/{replay-useAiChatQueries-vdKvbmp2.js → replay-useAiChatQueries-B7ZcWDmG.js} +1111 -990
- package/dist/{replay-validate-key-VkgZoK1f.js → replay-validate-key-C8-nF61w.js} +1 -1
- package/dist/{replay-validate-key-CwIopif3.js → replay-validate-key-qJOuAQJK.js} +2 -2
- package/dist/replay.cjs +1 -1
- package/dist/replay.d.ts +35 -5
- package/dist/replay.js +10 -10
- package/package.json +4 -4
- package/dist/replay-AiChatProvider-BGXsZqW2.js +0 -6
- package/dist/replay-AiPanel-qVp_s4gD.js +0 -849
- package/dist/replay-index-DSKZHOXq.js +0 -1
- package/dist/replay-index-DT5gdiBA.js +0 -21
- package/dist/replay-index-qZlgEmbq.js +0 -1
- package/dist/replay-lint-ON47l7Vu.js +0 -184
- package/dist/replay-resolve-BTzo-fSv.js +0 -47
- 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-
|
|
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-
|
|
2
|
-
import { M as s } from "./replay-index-
|
|
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-
|
|
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,
|
|
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
|
-
|
|
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 {
|
|
2
|
-
import { O as
|
|
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
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
24
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
57
|
-
"@redocly/respect-core": "2.
|
|
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;
|