@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.
- package/dist/replay-AiChatProvider-BWL86hXh.js +6 -0
- package/dist/{replay-AiChatProvider-COJYrrQ6.js → replay-AiChatProvider-CY3b_ggu.js} +376 -376
- package/dist/{replay-AiChatSqliteDBStorage-BenAoLmM.js → replay-AiChatSqliteDBStorage-BtV53vvj.js} +1 -1
- package/dist/{replay-AiChatSqliteDBStorage-CBeRerfX.js → replay-AiChatSqliteDBStorage-CjzLqUwK.js} +6 -6
- package/dist/{replay-AiPanel-BN1uduZr.js → replay-AiPanel-B3HBaMPh.js} +712 -715
- package/dist/replay-AiPanel-BzaoPsXZ.js +742 -0
- package/dist/replay-FileWatcher-BFtAqsmL.js +1 -0
- package/dist/replay-FileWatcher-d1_qKRfS.js +364 -0
- package/dist/{replay-HistorySqliteDBStorage-CtF6-vY8.js → replay-HistorySqliteDBStorage-Bi5vBQ2T.js} +2 -2
- package/dist/replay-SemanticSearchService-CTWesmRy.js +1 -0
- package/dist/{replay-SemanticSearchService-OutwGWqD.js → replay-SemanticSearchService-DcR4Q6w6.js} +27 -31
- package/dist/{replay-SqliteDBStorage-CrB-WSIX.js → replay-SqliteDBStorage-BeDAsnlF.js} +1 -1
- package/dist/{replay-SqliteDBStorage-Cn8L_KB1.js → replay-SqliteDBStorage-BlVDbZhU.js} +49 -49
- package/dist/{replay-StepContextSqliteDBStorage-BfAAKDwA.js → replay-StepContextSqliteDBStorage-BkB2NM27.js} +2 -2
- package/dist/replay-TauriFileSystemAdapter-B_VaAUfL.js +1 -0
- package/dist/replay-TauriFileSystemAdapter-Cu-Q6QS_.js +108 -0
- package/dist/replay-TauriRootStorage-Cidjagk-.js +1 -0
- package/dist/{replay-TauriRootStorage-DHVdmo5Z.js → replay-TauriRootStorage-DVeU3RvV.js} +213 -212
- package/dist/{replay-agent-loop-vzQUCpCA.js → replay-agent-loop-B42P9R-q.js} +1 -1
- package/dist/{replay-agent-loop-cbxVIXnO.js → replay-agent-loop-DweKWrQp.js} +11 -11
- package/dist/{replay-ai-chat-mappers-pb8lpkUD.js → replay-ai-chat-mappers-Cno0s3T8.js} +1 -1
- package/dist/{replay-ai-chat-mappers-BnAf2rpg.js → replay-ai-chat-mappers-DusPRQPG.js} +3 -3
- package/dist/{replay-ai-message-parts.schema-E9u9-nqr.js → replay-ai-message-parts.schema-DKLf0SiG.js} +1 -1
- package/dist/{replay-create-model-Dr80k74P.js → replay-create-model-CeSlm24x.js} +4 -4
- package/dist/{replay-create-model-CqA612v0.js → replay-create-model-DdPq1CIm.js} +3 -3
- package/dist/{replay-db-Bq7IGfIa.js → replay-db-Bj8Qpvpw.js} +1 -1
- package/dist/{replay-db-C8RC-t2R.js → replay-db-he8XQjrM.js} +1 -1
- package/dist/{replay-external-resolver-D6WP4NJY.js → replay-external-resolver-BRs5F07f.js} +7 -7
- package/dist/{replay-external-resolver-Bw7R-LTs.js → replay-external-resolver-gQ0egbx7.js} +1 -1
- package/dist/{replay-history.schema-5ce6X0R1.js → replay-history.schema-B0lLwmdG.js} +3 -3
- package/dist/replay-index-B1qPs-GR.js +4 -0
- package/dist/replay-index-C2b91LJZ.js +7013 -0
- package/dist/{replay-index-CI5L8ebr.js → replay-index-CA6OI1Qg.js} +1 -1
- package/dist/replay-index-CYphcClc.js +1 -0
- package/dist/{replay-index-BizzVzWT.js → replay-index-DRb3mixV.js} +65435 -63900
- package/dist/replay-index-Dtxwps1s.js +574 -0
- package/dist/replay-index-NgGicGfR.js +1 -0
- package/dist/{replay-index-BFdS3tY7.js → replay-index-uF3nFq_Y.js} +1 -1
- package/dist/{replay-indexes-CfsvVMi_.js → replay-indexes-B3PJtgeh.js} +43 -43
- package/dist/replay-lint-C2hyYWRS.js +177 -0
- package/dist/{replay-lint-q7b2-PPR.js → replay-lint-gY_wyYPJ.js} +17581 -21140
- package/dist/{replay-lint-graphql-CYl9hbRz.js → replay-lint-graphql-BA9t8-Ua.js} +1 -1
- package/dist/{replay-lint-graphql-C_f79j2l.js → replay-lint-graphql-DDrnrINc.js} +1 -1
- package/dist/replay-periodic-revalidation-BbAt74oL.js +21 -0
- package/dist/replay-periodic-revalidation-kmD2RQn1.js +1 -0
- package/dist/replay-resolve-BJ_AY-Mn.js +47 -0
- package/dist/{replay-resolve-Km_DObpf.js → replay-resolve-_V8uYdTK.js} +470 -468
- package/dist/replay-respect-run-CLLZoRh1.js +8392 -0
- package/dist/replay-respect-run-qOz91QPQ.js +82 -0
- package/dist/replay-step-context.schema-BOprzd6Z.js +21 -0
- package/dist/{replay-tauri-path-BrtMOZvF.js → replay-tauri-path-lH8t5rdX.js} +1 -1
- package/dist/replay-tauri-path-twTA2lKs.js +22 -0
- package/dist/replay-useAiChatQueries-BIqM2KQW.js +215 -0
- package/dist/{replay-useAiChatQueries-BR1eEjUB.js → replay-useAiChatQueries-yCsYY1j2.js} +1583 -1371
- package/dist/{replay-validate-key-CZSwxFid.js → replay-validate-key-Bh41yY9h.js} +2 -2
- package/dist/{replay-validate-key-Cox-cRT6.js → replay-validate-key-_oaOw5Jy.js} +1 -1
- package/dist/replay.cjs +1 -1
- package/dist/replay.d.ts +10 -3
- package/dist/replay.js +14 -14
- package/package.json +20 -13
- package/dist/replay-AiChatProvider-DjEmmTbN.js +0 -6
- package/dist/replay-AiPanel-FAJJA4QT.js +0 -742
- package/dist/replay-FileWatcher-DDlINC06.js +0 -1
- package/dist/replay-FileWatcher-paEMsDuu.js +0 -352
- package/dist/replay-SemanticSearchService-DwIcsNYC.js +0 -1
- package/dist/replay-TauriFileSystemAdapter-CocGBrH_.js +0 -99
- package/dist/replay-TauriFileSystemAdapter-q89YsNXx.js +0 -1
- package/dist/replay-TauriRootStorage-CZXVp2Zw.js +0 -1
- package/dist/replay-index-B3sCvU48.js +0 -1
- package/dist/replay-index-D3evrr0U.js +0 -6982
- package/dist/replay-index-DZwTSW3m.js +0 -25
- package/dist/replay-index-DsAn0c_r.js +0 -1
- package/dist/replay-index-bspotqBs.js +0 -504
- package/dist/replay-lint-D5d7AeDU.js +0 -184
- package/dist/replay-periodic-revalidation-BoyLQHtg.js +0 -1
- package/dist/replay-periodic-revalidation-Dsp-n7ui.js +0 -21
- package/dist/replay-resolve-CftMmcPx.js +0 -47
- package/dist/replay-respect-run-CfbJ-uak.js +0 -8200
- package/dist/replay-respect-run-DBe6ZUcc.js +0 -78
- package/dist/replay-step-context.schema-DBk4jufr.js +0 -21
- package/dist/replay-tauri-path-Ek8BSAa0.js +0 -22
- package/dist/replay-useAiChatQueries-DjjzEorX.js +0 -215
|
@@ -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-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-
|
|
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-
|
|
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 =
|
|
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 {
|
|
2
|
-
import { O as
|
|
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
|
-
|
|
8
|
+
P as OAuth2Error,
|
|
9
9
|
o as REUNITE_AI_PROVIDER,
|
|
10
10
|
b as Replay,
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
R as ReplayOverlay,
|
|
12
|
+
d as SpanStatusCode,
|
|
13
13
|
p as TelemetryClient,
|
|
14
|
-
|
|
14
|
+
m as applyThemeToDOM,
|
|
15
15
|
n as createResource,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
y as getCurrentTheme,
|
|
17
|
+
C as handleOAuth2Redirect,
|
|
18
|
+
A as loadAgentLoop,
|
|
19
19
|
i as makeProviderRecord,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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.
|
|
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/
|
|
55
|
-
"@redocly/
|
|
56
|
-
"@redocly/
|
|
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.
|
|
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
|
-
"
|
|
84
|
-
"js-yaml": "4.3.
|
|
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.
|
|
100
|
+
"vitest": "4.1.11",
|
|
102
101
|
"yaml": "^2.0.0",
|
|
103
|
-
"zod": "^3.25.76"
|
|
104
|
-
|
|
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;
|