@scalar/agent-chat 0.9.13 → 0.9.14
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/App.vue.d.ts +2 -0
- package/dist/App.vue.d.ts.map +1 -1
- package/dist/App.vue.js.map +1 -1
- package/dist/App.vue.script.js +2 -0
- package/dist/App.vue.script.js.map +1 -1
- package/dist/api.d.ts +1 -3
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +30 -31
- package/dist/api.js.map +1 -1
- package/dist/client-tools/execute-request.js +9 -9
- package/dist/hooks/use-upload-tmp-document.js +1 -1
- package/dist/hooks/use-upload-tmp-document.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/state/state.d.ts +3 -1
- package/dist/state/state.d.ts.map +1 -1
- package/dist/state/state.js +30 -31
- package/dist/state/state.js.map +1 -1
- package/package.json +7 -7
package/dist/App.vue.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ type __VLS_Props = {
|
|
|
5
5
|
registryDocuments: RegistryDocument[];
|
|
6
6
|
registryUrl: string;
|
|
7
7
|
dashboardUrl: string;
|
|
8
|
+
platformProxyUrl: string;
|
|
8
9
|
baseUrl: string;
|
|
9
10
|
mode?: ChatMode;
|
|
10
11
|
getAccessToken?: () => string;
|
|
@@ -27,6 +28,7 @@ declare const state: {
|
|
|
27
28
|
registryUrl: string;
|
|
28
29
|
dashboardUrl: string;
|
|
29
30
|
baseUrl: string;
|
|
31
|
+
platformProxyUrl: string;
|
|
30
32
|
isLoggedIn?: Ref<boolean>;
|
|
31
33
|
registryDocuments: Ref<import("./entities/index.js").ApiMetadata[]>;
|
|
32
34
|
pendingDocuments: Record<string, boolean>;
|
package/dist/App.vue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.vue.d.ts","sourceRoot":"","sources":["../src/App.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"App.vue.d.ts","sourceRoot":"","sources":["../src/App.vue"],"names":[],"mappings":"AAyEA,OAAO,EAAW,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAGvC,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,KAAK,WAAW,GAAG;IACjB,iBAAiB,EAAE,gBAAgB,EAAE,CAAA;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,MAAM,CAAA;IACpC,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACzB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAC;AAsBF,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;iBA8B2B,CAAC;WACjC,CAAA;;;;;iBAEO,CAAC;;;;;;;;;;;;;CApBZ,CAAA;AAIF,MAAM,MAAM,WAAW,GAAG;IACxB,gBAAgB,EAAE,OAAO,KAAK,CAAC,gBAAgB,CAAA;CAChD,CAAA;AA8CD,QAAA,MAAM,YAAY;;;;kFAIhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
package/dist/App.vue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.vue.js","names":[],"sources":["../src/App.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { provide, type Ref } from 'vue'\n\nimport Chat from '@/Chat.vue'\nimport { createState, STATE_SYMBOL, type RegistryDocument } from '@/state/state'\nimport { type ChatMode } from '@/types'\n\nconst {\n dashboardUrl,\n registryDocuments,\n registryUrl,\n baseUrl,\n mode = 'full',\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n isLoggedIn,\n prefilledMessage,\n hideAddApi,\n} = defineProps<{\n registryDocuments: RegistryDocument[]\n registryUrl: string\n dashboardUrl: string\n baseUrl: string\n mode?: ChatMode\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n isLoggedIn?: Ref<boolean>\n prefilledMessage?: Ref<string>\n hideAddApi?: boolean\n}>()\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst state = createState({\n getActiveDocumentJson,\n initialRegistryDocuments: registryDocuments,\n prefilledMessageRef: prefilledMessage,\n registryUrl,\n baseUrl,\n mode,\n getAccessToken,\n getAgentKey,\n isLoggedIn,\n dashboardUrl,\n hideAddApi,\n})\n\nprovide(STATE_SYMBOL, state)\n\nexport type ChatExposed = {\n addDocumentAsync: typeof state.addDocumentAsync\n}\n\ndefineExpose<ChatExposed>({\n addDocumentAsync: state.addDocumentAsync,\n})\n</script>\n\n<template>\n <Chat @uploadApi=\"$emit('uploadApi')\" />\n</template>\n\n<style scoped></style>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"App.vue.js","names":[],"sources":["../src/App.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { provide, type Ref } from 'vue'\n\nimport Chat from '@/Chat.vue'\nimport { createState, STATE_SYMBOL, type RegistryDocument } from '@/state/state'\nimport { type ChatMode } from '@/types'\n\nconst {\n dashboardUrl,\n platformProxyUrl,\n registryDocuments,\n registryUrl,\n baseUrl,\n mode = 'full',\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n isLoggedIn,\n prefilledMessage,\n hideAddApi,\n} = defineProps<{\n registryDocuments: RegistryDocument[]\n registryUrl: string\n dashboardUrl: string\n platformProxyUrl: string\n baseUrl: string\n mode?: ChatMode\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n isLoggedIn?: Ref<boolean>\n prefilledMessage?: Ref<string>\n hideAddApi?: boolean\n}>()\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst state = createState({\n getActiveDocumentJson,\n initialRegistryDocuments: registryDocuments,\n prefilledMessageRef: prefilledMessage,\n platformProxyUrl,\n registryUrl,\n baseUrl,\n mode,\n getAccessToken,\n getAgentKey,\n isLoggedIn,\n dashboardUrl,\n hideAddApi,\n})\n\nprovide(STATE_SYMBOL, state)\n\nexport type ChatExposed = {\n addDocumentAsync: typeof state.addDocumentAsync\n}\n\ndefineExpose<ChatExposed>({\n addDocumentAsync: state.addDocumentAsync,\n})\n</script>\n\n<template>\n <Chat @uploadApi=\"$emit('uploadApi')\" />\n</template>\n\n<style scoped></style>\n"],"mappings":""}
|
package/dist/App.vue.script.js
CHANGED
|
@@ -8,6 +8,7 @@ var s = /* @__PURE__ */ i({
|
|
|
8
8
|
registryDocuments: {},
|
|
9
9
|
registryUrl: {},
|
|
10
10
|
dashboardUrl: {},
|
|
11
|
+
platformProxyUrl: {},
|
|
11
12
|
baseUrl: {},
|
|
12
13
|
mode: { default: "full" },
|
|
13
14
|
getAccessToken: { type: Function },
|
|
@@ -23,6 +24,7 @@ var s = /* @__PURE__ */ i({
|
|
|
23
24
|
getActiveDocumentJson: i.getActiveDocumentJson,
|
|
24
25
|
initialRegistryDocuments: i.registryDocuments,
|
|
25
26
|
prefilledMessageRef: i.prefilledMessage,
|
|
27
|
+
platformProxyUrl: i.platformProxyUrl,
|
|
26
28
|
registryUrl: i.registryUrl,
|
|
27
29
|
baseUrl: i.baseUrl,
|
|
28
30
|
mode: i.mode,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.vue.script.js","names":["$emit"],"sources":["../src/App.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { provide, type Ref } from 'vue'\n\nimport Chat from '@/Chat.vue'\nimport { createState, STATE_SYMBOL, type RegistryDocument } from '@/state/state'\nimport { type ChatMode } from '@/types'\n\nconst {\n dashboardUrl,\n registryDocuments,\n registryUrl,\n baseUrl,\n mode = 'full',\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n isLoggedIn,\n prefilledMessage,\n hideAddApi,\n} = defineProps<{\n registryDocuments: RegistryDocument[]\n registryUrl: string\n dashboardUrl: string\n baseUrl: string\n mode?: ChatMode\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n isLoggedIn?: Ref<boolean>\n prefilledMessage?: Ref<string>\n hideAddApi?: boolean\n}>()\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst state = createState({\n getActiveDocumentJson,\n initialRegistryDocuments: registryDocuments,\n prefilledMessageRef: prefilledMessage,\n registryUrl,\n baseUrl,\n mode,\n getAccessToken,\n getAgentKey,\n isLoggedIn,\n dashboardUrl,\n hideAddApi,\n})\n\nprovide(STATE_SYMBOL, state)\n\nexport type ChatExposed = {\n addDocumentAsync: typeof state.addDocumentAsync\n}\n\ndefineExpose<ChatExposed>({\n addDocumentAsync: state.addDocumentAsync,\n})\n</script>\n\n<template>\n <Chat @uploadApi=\"$emit('uploadApi')\" />\n</template>\n\n<style scoped></style>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"App.vue.script.js","names":["$emit"],"sources":["../src/App.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { provide, type Ref } from 'vue'\n\nimport Chat from '@/Chat.vue'\nimport { createState, STATE_SYMBOL, type RegistryDocument } from '@/state/state'\nimport { type ChatMode } from '@/types'\n\nconst {\n dashboardUrl,\n platformProxyUrl,\n registryDocuments,\n registryUrl,\n baseUrl,\n mode = 'full',\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n isLoggedIn,\n prefilledMessage,\n hideAddApi,\n} = defineProps<{\n registryDocuments: RegistryDocument[]\n registryUrl: string\n dashboardUrl: string\n platformProxyUrl: string\n baseUrl: string\n mode?: ChatMode\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n isLoggedIn?: Ref<boolean>\n prefilledMessage?: Ref<string>\n hideAddApi?: boolean\n}>()\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst state = createState({\n getActiveDocumentJson,\n initialRegistryDocuments: registryDocuments,\n prefilledMessageRef: prefilledMessage,\n platformProxyUrl,\n registryUrl,\n baseUrl,\n mode,\n getAccessToken,\n getAgentKey,\n isLoggedIn,\n dashboardUrl,\n hideAddApi,\n})\n\nprovide(STATE_SYMBOL, state)\n\nexport type ChatExposed = {\n addDocumentAsync: typeof state.addDocumentAsync\n}\n\ndefineExpose<ChatExposed>({\n addDocumentAsync: state.addDocumentAsync,\n})\n</script>\n\n<template>\n <Chat @uploadApi=\"$emit('uploadApi')\" />\n</template>\n\n<style scoped></style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAuCA,IAAM,IAAQ,EAAY;GACxB,uBAAoB,EAAA;GACpB,0BAA0B,EAAA;GAC1B,qBAAqB,EAAA;GACrB,kBAAe,EAAA;GACf,aAAU,EAAA;GACV,SAAM,EAAA;GACN,MAAG,EAAA;GACH,gBAAa,EAAA;GACb,aAAU,EAAA;GACV,YAAS,EAAA;GACT,cAAW,EAAA;GACX,YAAS,EAAA;GACV,CAAA;SAED,EAAQ,GAAc,EAAK,EAM3B,EAA0B,EACxB,kBAAkB,EAAM,kBACzB,CAAA,kBAIC,EAAwC,GAAA,EAAjC,aAAS,AAAA,EAAA,QAAA,MAAEA,EAAAA,MAAK,YAAA,EAAA,CAAA"}
|
package/dist/api.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Ref } from 'vue';
|
|
2
1
|
export declare function createAuthorizationHeaders({ getAccessToken, getAgentKey, }: {
|
|
3
2
|
getAccessToken?: () => string;
|
|
4
3
|
getAgentKey?: () => string;
|
|
@@ -7,9 +6,8 @@ export declare function createAuthorizationHeaders({ getAccessToken, getAgentKey
|
|
|
7
6
|
Authorization?: string | undefined;
|
|
8
7
|
};
|
|
9
8
|
/** Minimal set of API requests needed for agent chat */
|
|
10
|
-
export declare function createApi({ baseUrl,
|
|
9
|
+
export declare function createApi({ baseUrl, getAccessToken, getAgentKey, }: {
|
|
11
10
|
baseUrl: string;
|
|
12
|
-
proxyUrl: Ref<string>;
|
|
13
11
|
getAccessToken?: () => string;
|
|
14
12
|
getAgentKey?: () => string;
|
|
15
13
|
}): {
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAMA,wBAAgB,0BAA0B,CAAC,EACzC,cAAc,EACd,WAAW,GACZ,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B;;;EAYA;AAED,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,cAAc,EACd,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B;oBA0E8B,MAAM;;;;;;;;;;;;;;;;;;;;;0BASA;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BvE;AAED,MAAM,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAA"}
|
package/dist/api.js
CHANGED
|
@@ -1,37 +1,36 @@
|
|
|
1
1
|
import { createError as e } from "./entities/error/helpers.js";
|
|
2
2
|
import { registryApiMetadata as t } from "./entities/registry/document.js";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import i from "zod";
|
|
3
|
+
import { n } from "neverpanic";
|
|
4
|
+
import r from "zod";
|
|
6
5
|
//#region src/api.ts
|
|
7
|
-
function
|
|
6
|
+
function i({ getAccessToken: e, getAgentKey: t }) {
|
|
8
7
|
let n = e?.(), r = t?.();
|
|
9
8
|
return {
|
|
10
9
|
...n && { Authorization: `Bearer ${n}` },
|
|
11
10
|
...r && { "x-scalar-agent-key": r }
|
|
12
11
|
};
|
|
13
12
|
}
|
|
14
|
-
function
|
|
15
|
-
let
|
|
16
|
-
let
|
|
17
|
-
method:
|
|
18
|
-
...
|
|
19
|
-
headers: { ...
|
|
20
|
-
getAccessToken:
|
|
21
|
-
getAgentKey:
|
|
13
|
+
function a({ baseUrl: a, getAccessToken: o, getAgentKey: s }) {
|
|
14
|
+
let c = n.safeFn(async ({ path: t, method: c = "get", query: l, body: u, responseSchema: d }) => {
|
|
15
|
+
let f = `${a}${t}${l ? `?${new URLSearchParams(l)}` : ""}`, p = await n.fromUnsafe(async () => fetch(f, {
|
|
16
|
+
method: c,
|
|
17
|
+
...u && { body: JSON.stringify(u) },
|
|
18
|
+
headers: { ...i({
|
|
19
|
+
getAccessToken: o,
|
|
20
|
+
getAgentKey: s
|
|
22
21
|
}) }
|
|
23
22
|
}), (t) => e("FAILED_TO_FETCH", t));
|
|
24
|
-
if (!
|
|
25
|
-
let
|
|
26
|
-
if (!
|
|
23
|
+
if (!p.success) return p;
|
|
24
|
+
let m = await n.fromUnsafe(async () => p.data.json(), (t) => e("FAILED_TO_FETCH_DATA", t));
|
|
25
|
+
if (!m.success) return {
|
|
27
26
|
success: !1,
|
|
28
27
|
error: e("UNKNOWN_ERROR", "Unknown error occurred. Please contact support.")
|
|
29
28
|
};
|
|
30
|
-
if (!
|
|
31
|
-
let t =
|
|
32
|
-
message:
|
|
33
|
-
code:
|
|
34
|
-
}).safeParse(
|
|
29
|
+
if (!p.data.ok) {
|
|
30
|
+
let t = r.object({
|
|
31
|
+
message: r.string(),
|
|
32
|
+
code: r.string()
|
|
33
|
+
}).safeParse(m.data);
|
|
35
34
|
return t.success ? {
|
|
36
35
|
success: !1,
|
|
37
36
|
error: e(t.data.code, t.data.message)
|
|
@@ -40,36 +39,36 @@ function o({ baseUrl: o, proxyUrl: s, getAccessToken: c, getAgentKey: l }) {
|
|
|
40
39
|
error: e("UNKNOWN_ERROR", "Unknown error occurred. Please contact support.")
|
|
41
40
|
};
|
|
42
41
|
}
|
|
43
|
-
let
|
|
44
|
-
return
|
|
42
|
+
let h = d.safeParse(m.data);
|
|
43
|
+
return h.success ? {
|
|
45
44
|
success: !0,
|
|
46
|
-
data:
|
|
45
|
+
data: h.data
|
|
47
46
|
} : {
|
|
48
47
|
success: !1,
|
|
49
48
|
error: e("INVALID_RESPONSE", "Invalid response. Please contact support")
|
|
50
49
|
};
|
|
51
50
|
});
|
|
52
51
|
return {
|
|
53
|
-
search: async (e) =>
|
|
52
|
+
search: async (e) => c({
|
|
54
53
|
path: "/vector/registry/search",
|
|
55
54
|
query: { query: e },
|
|
56
|
-
responseSchema:
|
|
55
|
+
responseSchema: r.object({ results: t.array() })
|
|
57
56
|
}),
|
|
58
|
-
getDocument: async (e) =>
|
|
57
|
+
getDocument: async (e) => c({
|
|
59
58
|
path: `/vector/registry/document/${e.namespace}/${e.slug}`,
|
|
60
59
|
responseSchema: t
|
|
61
60
|
}),
|
|
62
|
-
getKeyDocuments: async () =>
|
|
61
|
+
getKeyDocuments: async () => c({
|
|
63
62
|
path: "/vector/registry/documents",
|
|
64
|
-
responseSchema:
|
|
63
|
+
responseSchema: r.object({ documents: t.array() })
|
|
65
64
|
}),
|
|
66
|
-
getCuratedDocuments: async () =>
|
|
65
|
+
getCuratedDocuments: async () => c({
|
|
67
66
|
path: "/vector/registry/curated",
|
|
68
|
-
responseSchema:
|
|
67
|
+
responseSchema: r.object({ results: t.array() })
|
|
69
68
|
})
|
|
70
69
|
};
|
|
71
70
|
}
|
|
72
71
|
//#endregion
|
|
73
|
-
export {
|
|
72
|
+
export { a as createApi, i as createAuthorizationHeaders };
|
|
74
73
|
|
|
75
74
|
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","names":[],"sources":["../src/api.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"api.js","names":[],"sources":["../src/api.ts"],"sourcesContent":["import { n } from 'neverpanic'\nimport z from 'zod'\n\nimport { createError } from '@/entities/error/helpers'\nimport { registryApiMetadata } from '@/entities/registry/document'\n\nexport function createAuthorizationHeaders({\n getAccessToken,\n getAgentKey,\n}: {\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const token = getAccessToken?.()\n const agentKey = getAgentKey?.()\n\n return {\n ...(token && {\n Authorization: `Bearer ${token}`,\n }),\n ...(agentKey && {\n 'x-scalar-agent-key': agentKey,\n }),\n }\n}\n\n/** Minimal set of API requests needed for agent chat */\nexport function createApi({\n baseUrl,\n getAccessToken,\n getAgentKey,\n}: {\n baseUrl: string\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const request = n.safeFn(\n async <T extends z.ZodType>({\n path,\n method = 'get',\n query,\n body,\n responseSchema,\n }: {\n path: string\n method?: string\n query?: Record<string, string>\n body?: object\n responseSchema: T\n }) => {\n const url = `${baseUrl}${path}${query ? `?${new URLSearchParams(query)}` : ''}`\n\n const fetchResult = await n.fromUnsafe(\n async () =>\n fetch(url, {\n method,\n ...(body && { body: JSON.stringify(body) }),\n headers: {\n ...createAuthorizationHeaders({ getAccessToken, getAgentKey }),\n },\n }),\n (originalError) => createError('FAILED_TO_FETCH', originalError),\n )\n\n if (!fetchResult.success) {\n return fetchResult\n }\n\n const fetchDataResult = await n.fromUnsafe(\n async () => fetchResult.data.json(),\n (originalError) => createError('FAILED_TO_FETCH_DATA', originalError),\n )\n\n if (!fetchDataResult.success) {\n return {\n success: false,\n error: createError('UNKNOWN_ERROR', 'Unknown error occurred. Please contact support.'),\n }\n }\n\n if (!fetchResult.data.ok) {\n const serviceError = z.object({ message: z.string(), code: z.string() }).safeParse(fetchDataResult.data)\n\n if (!serviceError.success) {\n return {\n success: false,\n error: createError('UNKNOWN_ERROR', 'Unknown error occurred. Please contact support.'),\n }\n }\n\n return {\n success: false,\n error: createError(serviceError.data.code, serviceError.data.message),\n }\n }\n\n const serviceData = responseSchema.safeParse(fetchDataResult.data)\n\n if (!serviceData.success) {\n return {\n success: false,\n error: createError('INVALID_RESPONSE', 'Invalid response. Please contact support'),\n }\n }\n\n return { success: true, data: serviceData.data }\n },\n )\n\n const search = async (query: string) =>\n request({\n path: '/vector/registry/search',\n query: { query },\n responseSchema: z.object({\n results: registryApiMetadata.array(),\n }),\n })\n\n const getDocument = async (params: { namespace: string; slug: string }) =>\n request({\n path: `/vector/registry/document/${params.namespace}/${params.slug}`,\n responseSchema: registryApiMetadata,\n })\n\n const getKeyDocuments = async () =>\n request({\n path: '/vector/registry/documents',\n responseSchema: z.object({ documents: registryApiMetadata.array() }),\n })\n\n const getCuratedDocuments = async () =>\n request({\n path: '/vector/registry/curated',\n responseSchema: z.object({\n results: registryApiMetadata.array(),\n }),\n })\n\n return {\n search,\n getDocument,\n getKeyDocuments,\n getCuratedDocuments,\n }\n}\n\nexport type Api = ReturnType<typeof createApi>\n"],"mappings":";;;;;AAMA,SAAgB,EAA2B,EACzC,mBACA,kBAIC;CACD,IAAM,IAAQ,KAAkB,EAC1B,IAAW,KAAe;AAEhC,QAAO;EACL,GAAI,KAAS,EACX,eAAe,UAAU,KAC1B;EACD,GAAI,KAAY,EACd,sBAAsB,GACvB;EACF;;AAIH,SAAgB,EAAU,EACxB,YACA,mBACA,kBAKC;CACD,IAAM,IAAU,EAAE,OAChB,OAA4B,EAC1B,SACA,YAAS,OACT,UACA,SACA,wBAOI;EACJ,IAAM,IAAM,GAAG,IAAU,IAAO,IAAQ,IAAI,IAAI,gBAAgB,EAAM,KAAK,MAErE,IAAc,MAAM,EAAE,WAC1B,YACE,MAAM,GAAK;GACT;GACA,GAAI,KAAQ,EAAE,MAAM,KAAK,UAAU,EAAK,EAAE;GAC1C,SAAS,EACP,GAAG,EAA2B;IAAE;IAAgB;IAAa,CAAC,EAC/D;GACF,CAAC,GACH,MAAkB,EAAY,mBAAmB,EAAc,CACjE;AAED,MAAI,CAAC,EAAY,QACf,QAAO;EAGT,IAAM,IAAkB,MAAM,EAAE,WAC9B,YAAY,EAAY,KAAK,MAAM,GAClC,MAAkB,EAAY,wBAAwB,EAAc,CACtE;AAED,MAAI,CAAC,EAAgB,QACnB,QAAO;GACL,SAAS;GACT,OAAO,EAAY,iBAAiB,kDAAkD;GACvF;AAGH,MAAI,CAAC,EAAY,KAAK,IAAI;GACxB,IAAM,IAAe,EAAE,OAAO;IAAE,SAAS,EAAE,QAAQ;IAAE,MAAM,EAAE,QAAQ;IAAE,CAAC,CAAC,UAAU,EAAgB,KAAK;AASxG,UAPK,EAAa,UAOX;IACL,SAAS;IACT,OAAO,EAAY,EAAa,KAAK,MAAM,EAAa,KAAK,QAAQ;IACtE,GATQ;IACL,SAAS;IACT,OAAO,EAAY,iBAAiB,kDAAkD;IACvF;;EASL,IAAM,IAAc,EAAe,UAAU,EAAgB,KAAK;AASlE,SAPK,EAAY,UAOV;GAAE,SAAS;GAAM,MAAM,EAAY;GAAM,GANvC;GACL,SAAS;GACT,OAAO,EAAY,oBAAoB,2CAA2C;GACnF;GAKN;AA+BD,QAAO;EACL,QA9Ba,OAAO,MACpB,EAAQ;GACN,MAAM;GACN,OAAO,EAAE,UAAO;GAChB,gBAAgB,EAAE,OAAO,EACvB,SAAS,EAAoB,OAAO,EACrC,CAAC;GACH,CAAC;EAwBF,aAtBkB,OAAO,MACzB,EAAQ;GACN,MAAM,6BAA6B,EAAO,UAAU,GAAG,EAAO;GAC9D,gBAAgB;GACjB,CAAC;EAmBF,iBAjBsB,YACtB,EAAQ;GACN,MAAM;GACN,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAoB,OAAO,EAAE,CAAC;GACrE,CAAC;EAcF,qBAZ0B,YAC1B,EAAQ;GACN,MAAM;GACN,gBAAgB,EAAE,OAAO,EACvB,SAAS,EAAoB,OAAO,EACrC,CAAC;GACH,CAAC;EAOH"}
|
|
@@ -2,18 +2,18 @@ import { createError as e } from "../entities/error/helpers.js";
|
|
|
2
2
|
import "../entities/tools/constants.js";
|
|
3
3
|
import { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME as t } from "../entities/tools/execute-request.js";
|
|
4
4
|
import { createDocumentName as n } from "../registry/create-document-name.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { n as r } from "neverpanic";
|
|
6
|
+
import { buildRequestSecurity as i, getResolvedUrl as a } from "@scalar/api-client/v2/blocks/operation-block";
|
|
7
|
+
import { redirectToProxy as o } from "@scalar/helpers/url/redirect-to-proxy";
|
|
8
8
|
import s from "truncate-json";
|
|
9
9
|
//#region src/client-tools/execute-request.ts
|
|
10
|
-
var c = 5e4, l =
|
|
10
|
+
var c = 5e4, l = r.safeFn(async (e) => e.headers.get("content-type") === "application/json" ? {
|
|
11
11
|
success: !0,
|
|
12
12
|
data: await e.json()
|
|
13
13
|
} : {
|
|
14
14
|
success: !0,
|
|
15
15
|
data: await e.text()
|
|
16
|
-
}, (t) => e("FAILED_TO_PARSE_RESPONSE_BODY", { originalError: t })), u = (e) => JSON.parse(s(JSON.stringify(e), c).jsonString), d =
|
|
16
|
+
}, (t) => e("FAILED_TO_PARSE_RESPONSE_BODY", { originalError: t })), u = (e) => JSON.parse(s(JSON.stringify(e), c).jsonString), d = r.safeFn(async (t, n) => {
|
|
17
17
|
let r = await fetch(t, n), i = await l(r);
|
|
18
18
|
return r.ok ? i.success ? {
|
|
19
19
|
success: !0,
|
|
@@ -33,7 +33,7 @@ var c = 5e4, l = i.safeFn(async (e) => e.headers.get("content-type") === "applic
|
|
|
33
33
|
};
|
|
34
34
|
}, (t) => e("FAILED_TO_FETCH", { originalError: t }));
|
|
35
35
|
function f({ path: e, activeServer: t, proxyUrl: n }) {
|
|
36
|
-
return
|
|
36
|
+
return o(n, a({
|
|
37
37
|
path: e,
|
|
38
38
|
server: t,
|
|
39
39
|
pathVariables: {},
|
|
@@ -43,7 +43,7 @@ function f({ path: e, activeServer: t, proxyUrl: n }) {
|
|
|
43
43
|
}
|
|
44
44
|
}));
|
|
45
45
|
}
|
|
46
|
-
var p =
|
|
46
|
+
var p = r.safeFn(async ({ documentSettings: r, toolCallId: a, chat: o, proxyUrl: s, input: { method: c, path: l, body: u, headers: p, documentIdentifier: m } }) => {
|
|
47
47
|
let [h, g] = m.split("---");
|
|
48
48
|
if (!h || !g) return {
|
|
49
49
|
success: !1,
|
|
@@ -62,7 +62,7 @@ var p = i.safeFn(async ({ documentSettings: r, toolCallId: i, chat: o, proxyUrl:
|
|
|
62
62
|
slug: g
|
|
63
63
|
})
|
|
64
64
|
};
|
|
65
|
-
let y =
|
|
65
|
+
let y = i(v.securitySchemes), b = {
|
|
66
66
|
method: c,
|
|
67
67
|
body: u,
|
|
68
68
|
...y,
|
|
@@ -77,7 +77,7 @@ var p = i.safeFn(async ({ documentSettings: r, toolCallId: i, chat: o, proxyUrl:
|
|
|
77
77
|
}), b);
|
|
78
78
|
return o.addToolOutput({
|
|
79
79
|
tool: t,
|
|
80
|
-
toolCallId:
|
|
80
|
+
toolCallId: a,
|
|
81
81
|
output: x,
|
|
82
82
|
state: "output-available"
|
|
83
83
|
}), x;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-upload-tmp-document.js","names":[],"sources":["../../src/hooks/use-upload-tmp-document.ts"],"sourcesContent":["import { redirectToProxy } from '@scalar/helpers/url/redirect-to-proxy'\nimport { ref } from 'vue'\nimport { z } from 'zod/mini'\n\nimport { useState } from '@/state/state'\n\nconst SHOW_UPLOAD_SUCCESS_DELAY = 5_000 // 5 seconds\n\nexport type UploadTmpDocumentState =\n | { type: 'error'; error: unknown }\n | { type: 'uploading' }\n | { type: 'processing' }\n | { type: 'loading' }\n | { type: 'done' }\n\nconst TMP_DOC_LS_KEY = 'scalar-tmp-doc'\n\nfunction saveTmpDocumentInLocalStorage({ namespace, slug }: { namespace: string; slug: string }) {\n localStorage.setItem(TMP_DOC_LS_KEY, JSON.stringify({ namespace, slug }))\n}\n\nexport function getTmpDocFromLocalStorage() {\n const tmpDoc = localStorage.getItem(TMP_DOC_LS_KEY)\n if (!tmpDoc) {\n return\n }\n\n return z\n .object({\n namespace: z.string(),\n slug: z.string(),\n })\n .parse(JSON.parse(tmpDoc))\n}\n\nexport function removeTmpDocFromLocalStorage() {\n const tmpDoc = localStorage.getItem(TMP_DOC_LS_KEY)\n if (!tmpDoc) {\n return\n }\n\n localStorage.removeItem(TMP_DOC_LS_KEY)\n}\n\n/**\n * Handle uploading a temporary OpenAPI document.\n */\nexport function useUploadTmpDocument() {\n const state = useState()\n const uploadState = ref<UploadTmpDocumentState>()\n\n function createUrl(path: string) {\n const fullUrl = `${state.baseUrl}${path}`\n return redirectToProxy(state.
|
|
1
|
+
{"version":3,"file":"use-upload-tmp-document.js","names":[],"sources":["../../src/hooks/use-upload-tmp-document.ts"],"sourcesContent":["import { redirectToProxy } from '@scalar/helpers/url/redirect-to-proxy'\nimport { ref } from 'vue'\nimport { z } from 'zod/mini'\n\nimport { useState } from '@/state/state'\n\nconst SHOW_UPLOAD_SUCCESS_DELAY = 5_000 // 5 seconds\n\nexport type UploadTmpDocumentState =\n | { type: 'error'; error: unknown }\n | { type: 'uploading' }\n | { type: 'processing' }\n | { type: 'loading' }\n | { type: 'done' }\n\nconst TMP_DOC_LS_KEY = 'scalar-tmp-doc'\n\nfunction saveTmpDocumentInLocalStorage({ namespace, slug }: { namespace: string; slug: string }) {\n localStorage.setItem(TMP_DOC_LS_KEY, JSON.stringify({ namespace, slug }))\n}\n\nexport function getTmpDocFromLocalStorage() {\n const tmpDoc = localStorage.getItem(TMP_DOC_LS_KEY)\n if (!tmpDoc) {\n return\n }\n\n return z\n .object({\n namespace: z.string(),\n slug: z.string(),\n })\n .parse(JSON.parse(tmpDoc))\n}\n\nexport function removeTmpDocFromLocalStorage() {\n const tmpDoc = localStorage.getItem(TMP_DOC_LS_KEY)\n if (!tmpDoc) {\n return\n }\n\n localStorage.removeItem(TMP_DOC_LS_KEY)\n}\n\n/**\n * Handle uploading a temporary OpenAPI document.\n */\nexport function useUploadTmpDocument() {\n const state = useState()\n const uploadState = ref<UploadTmpDocumentState>()\n\n function createUrl(path: string) {\n const fullUrl = `${state.baseUrl}${path}`\n return redirectToProxy(state.platformProxyUrl, fullUrl)\n }\n\n async function uploadTempDocument(document: string, isAgent = false) {\n try {\n uploadState.value = {\n type: 'uploading',\n }\n\n const response = await fetch(createUrl(`/core/share/upload/apis${isAgent ? '?source=agent' : ''}`), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ document }),\n })\n\n if (!response.ok) {\n uploadState.value = {\n type: 'error',\n error: 'Failed to upload your OpenAPI document.',\n }\n\n return\n }\n\n const json = await response.json()\n\n const { success, data } = z.object({ url: z.string(), namespace: z.string(), slug: z.string() }).safeParse(json)\n\n if (!success) {\n uploadState.value = {\n type: 'error',\n error: 'Failed to process document.',\n }\n return\n }\n\n uploadState.value = {\n type: 'processing',\n }\n const embeddingStatusResponse = await fetch(\n createUrl(`/vector/registry/embeddings/${data.namespace}/${data.slug}`),\n {\n method: 'GET',\n },\n )\n\n saveTmpDocumentInLocalStorage({\n namespace: data.namespace,\n slug: data.slug,\n })\n\n await state.addDocument({\n namespace: data.namespace,\n slug: data.slug,\n removable: false,\n tmp: true,\n })\n\n if (!embeddingStatusResponse.ok) {\n uploadState.value = {\n type: 'error',\n error: 'Failed to embed document.',\n }\n return\n }\n\n uploadState.value = { type: 'done' }\n state.uploadedTmpDocumentUrl.value = data.url\n\n setTimeout(() => {\n uploadState.value = undefined\n }, SHOW_UPLOAD_SUCCESS_DELAY)\n\n return data\n } catch {\n uploadState.value = { type: 'error', error: 'Failed to upload your OpenAPI document.' }\n return\n }\n }\n\n return {\n uploadTempDocument,\n uploadState,\n }\n}\n"],"mappings":";;;;;AAMA,IAAM,IAA4B,KAS5B,IAAiB;AAEvB,SAAS,EAA8B,EAAE,cAAW,WAA6C;AAC/F,cAAa,QAAQ,GAAgB,KAAK,UAAU;EAAE;EAAW;EAAM,CAAC,CAAC;;AAG3E,SAAgB,IAA4B;CAC1C,IAAM,IAAS,aAAa,QAAQ,EAAe;AAC9C,OAIL,QAAO,EACJ,OAAO;EACN,WAAW,EAAE,QAAQ;EACrB,MAAM,EAAE,QAAQ;EACjB,CAAC,CACD,MAAM,KAAK,MAAM,EAAO,CAAC;;AAG9B,SAAgB,IAA+B;AAC9B,cAAa,QAAQ,EAAe,IAKnD,aAAa,WAAW,EAAe;;AAMzC,SAAgB,IAAuB;CACrC,IAAM,IAAQ,GAAU,EAClB,IAAc,GAA6B;CAEjD,SAAS,EAAU,GAAc;EAC/B,IAAM,IAAU,GAAG,EAAM,UAAU;AACnC,SAAO,EAAgB,EAAM,kBAAkB,EAAQ;;CAGzD,eAAe,EAAmB,GAAkB,IAAU,IAAO;AACnE,MAAI;AACF,KAAY,QAAQ,EAClB,MAAM,aACP;GAED,IAAM,IAAW,MAAM,MAAM,EAAU,0BAA0B,IAAU,kBAAkB,KAAK,EAAE;IAClG,QAAQ;IACR,SAAS,EACP,gBAAgB,oBACjB;IACD,MAAM,KAAK,UAAU,EAAE,aAAU,CAAC;IACnC,CAAC;AAEF,OAAI,CAAC,EAAS,IAAI;AAChB,MAAY,QAAQ;KAClB,MAAM;KACN,OAAO;KACR;AAED;;GAGF,IAAM,IAAO,MAAM,EAAS,MAAM,EAE5B,EAAE,YAAS,YAAS,EAAE,OAAO;IAAE,KAAK,EAAE,QAAQ;IAAE,WAAW,EAAE,QAAQ;IAAE,MAAM,EAAE,QAAQ;IAAE,CAAC,CAAC,UAAU,EAAK;AAEhH,OAAI,CAAC,GAAS;AACZ,MAAY,QAAQ;KAClB,MAAM;KACN,OAAO;KACR;AACD;;AAGF,KAAY,QAAQ,EAClB,MAAM,cACP;GACD,IAAM,IAA0B,MAAM,MACpC,EAAU,+BAA+B,EAAK,UAAU,GAAG,EAAK,OAAO,EACvE,EACE,QAAQ,OACT,CACF;AAcD,OAZA,EAA8B;IAC5B,WAAW,EAAK;IAChB,MAAM,EAAK;IACZ,CAAC,EAEF,MAAM,EAAM,YAAY;IACtB,WAAW,EAAK;IAChB,MAAM,EAAK;IACX,WAAW;IACX,KAAK;IACN,CAAC,EAEE,CAAC,EAAwB,IAAI;AAC/B,MAAY,QAAQ;KAClB,MAAM;KACN,OAAO;KACR;AACD;;AAUF,UAPA,EAAY,QAAQ,EAAE,MAAM,QAAQ,EACpC,EAAM,uBAAuB,QAAQ,EAAK,KAE1C,iBAAiB;AACf,MAAY,QAAQ,KAAA;MACnB,EAA0B,EAEtB;UACD;AACN,KAAY,QAAQ;IAAE,MAAM;IAAS,OAAO;IAA2C;AACvF;;;AAIJ,QAAO;EACL;EACA;EACD"}
|
package/dist/package.json
CHANGED
package/dist/state/state.d.ts
CHANGED
|
@@ -48,6 +48,7 @@ type State = {
|
|
|
48
48
|
registryUrl: string;
|
|
49
49
|
dashboardUrl: string;
|
|
50
50
|
baseUrl: string;
|
|
51
|
+
platformProxyUrl: string;
|
|
51
52
|
isLoggedIn?: Ref<boolean>;
|
|
52
53
|
registryDocuments: Ref<ApiMetadata[]>;
|
|
53
54
|
pendingDocuments: Record<string, boolean>;
|
|
@@ -79,13 +80,14 @@ type State = {
|
|
|
79
80
|
getActiveDocumentJson?: () => string;
|
|
80
81
|
hideAddApi?: boolean;
|
|
81
82
|
};
|
|
82
|
-
export declare function createState({ initialRegistryDocuments, registryUrl, dashboardUrl, baseUrl, mode, isLoggedIn, getAccessToken, getAgentKey, getActiveDocumentJson, prefilledMessageRef, hideAddApi, }: {
|
|
83
|
+
export declare function createState({ initialRegistryDocuments, registryUrl, dashboardUrl, platformProxyUrl, baseUrl, mode, isLoggedIn, getAccessToken, getAgentKey, getActiveDocumentJson, prefilledMessageRef, hideAddApi, }: {
|
|
83
84
|
initialRegistryDocuments: {
|
|
84
85
|
namespace: string;
|
|
85
86
|
slug: string;
|
|
86
87
|
}[];
|
|
87
88
|
registryUrl: string;
|
|
88
89
|
dashboardUrl: string;
|
|
90
|
+
platformProxyUrl: string;
|
|
89
91
|
baseUrl: string;
|
|
90
92
|
mode: ChatMode;
|
|
91
93
|
isLoggedIn?: Ref<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,KAAK,UAAU,EAAY,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"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"}
|
package/dist/state/state.js
CHANGED
|
@@ -13,19 +13,18 @@ import { computed as d, inject as f, reactive as p, ref as m, watch as h } from
|
|
|
13
13
|
import { useToasts as g } from "@scalar/use-toasts";
|
|
14
14
|
import { Chat as _ } from "@ai-sdk/vue";
|
|
15
15
|
import { useModal as v } from "@scalar/components";
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { n as T } from "neverpanic";
|
|
16
|
+
import { apiReferenceConfigurationSchema as y } from "@scalar/types/api-reference";
|
|
17
|
+
import { createWorkspaceStore as b } from "@scalar/workspace-store/client";
|
|
18
|
+
import { createWorkspaceEventBus as x } from "@scalar/workspace-store/events";
|
|
19
|
+
import { DefaultChatTransport as S, lastAssistantMessageIsCompleteWithToolCalls as C } from "ai";
|
|
20
|
+
import { n as w } from "neverpanic";
|
|
22
21
|
//#region src/state/state.ts
|
|
23
|
-
var
|
|
24
|
-
function
|
|
22
|
+
var T = Symbol("STATE_SYMBOL"), { toast: E } = g();
|
|
23
|
+
function D({ registryDocuments: e, workspaceStore: t, baseUrl: r, proxyUrl: a, getAccessToken: s, getAgentKey: c }) {
|
|
25
24
|
let l = new _({
|
|
26
|
-
sendAutomaticallyWhen:
|
|
27
|
-
transport: new
|
|
28
|
-
api:
|
|
25
|
+
sendAutomaticallyWhen: C,
|
|
26
|
+
transport: new S({
|
|
27
|
+
api: `${r}/vector/openapi/chat`,
|
|
29
28
|
headers: () => n({
|
|
30
29
|
getAccessToken: s,
|
|
31
30
|
getAgentKey: c
|
|
@@ -47,22 +46,21 @@ function O({ registryDocuments: e, workspaceStore: t, baseUrl: r, proxyUrl: a, g
|
|
|
47
46
|
});
|
|
48
47
|
return l;
|
|
49
48
|
}
|
|
50
|
-
function
|
|
51
|
-
let j = m(k?.value ?? ""), M = m([]), N = p({}), P = m([]), F = m(a.DEFAULT_PROXY_URL), I = d(() => F.value?.trim() || a.DEFAULT_PROXY_URL), L = m(), R = s(), z =
|
|
49
|
+
function O({ initialRegistryDocuments: n, registryUrl: i, dashboardUrl: o, platformProxyUrl: f, baseUrl: g, mode: _, isLoggedIn: S, getAccessToken: C, getAgentKey: T, getActiveDocumentJson: O, prefilledMessageRef: k, hideAddApi: A }) {
|
|
50
|
+
let j = m(k?.value ?? ""), M = m([]), N = p({}), P = m([]), F = m(a.DEFAULT_PROXY_URL), I = d(() => F.value?.trim() || a.DEFAULT_PROXY_URL), L = m(), R = s(), z = x(), B = b({ plugins: [l({ persistAuth: !0 })] }), V = d(() => y.parse({
|
|
52
51
|
proxyUrl: I.value,
|
|
53
52
|
persistAuth: !0
|
|
54
|
-
})), H =
|
|
53
|
+
})), H = D({
|
|
55
54
|
registryDocuments: M,
|
|
56
55
|
workspaceStore: B,
|
|
57
|
-
baseUrl:
|
|
56
|
+
baseUrl: g,
|
|
58
57
|
proxyUrl: I,
|
|
59
58
|
getAccessToken: C,
|
|
60
|
-
getAgentKey:
|
|
59
|
+
getAgentKey: T
|
|
61
60
|
}), U = t({
|
|
62
|
-
baseUrl:
|
|
63
|
-
proxyUrl: I,
|
|
61
|
+
baseUrl: g,
|
|
64
62
|
getAccessToken: C,
|
|
65
|
-
getAgentKey:
|
|
63
|
+
getAgentKey: T
|
|
66
64
|
}), W = d(() => H.status === "submitted" || H.status === "streaming" && !H.lastMessage?.parts.some((e) => e.type === "text"));
|
|
67
65
|
h(() => H.status, () => {
|
|
68
66
|
H.status === "streaming" && (j.value = "");
|
|
@@ -84,13 +82,13 @@ function k({ initialRegistryDocuments: n, registryUrl: i, dashboardUrl: o, baseU
|
|
|
84
82
|
api: U,
|
|
85
83
|
removable: n
|
|
86
84
|
});
|
|
87
|
-
if (N[a] = !1, !o.success) throw r ? (c(), o.error) : (console.warn("[AGENT]: Unable to load document", o.error),
|
|
85
|
+
if (N[a] = !1, !o.success) throw r ? (c(), o.error) : (console.warn("[AGENT]: Unable to load document", o.error), E(`Unable to load the document @${e}/${t}`, "warn"), o.error);
|
|
88
86
|
}
|
|
89
87
|
async function q({ namespace: t, slug: n, removable: r = !0 }) {
|
|
90
88
|
if (M.value.find((e) => e.namespace === t && e.slug === n)) return;
|
|
91
89
|
let a = `@${t}/${n}`;
|
|
92
90
|
N[a] = !0;
|
|
93
|
-
let o = await
|
|
91
|
+
let o = await w.fromUnsafe(() => fetch(`${g}/vector/registry/embeddings/${t}/${n}`, { method: "GET" }), (t) => e("FAILED_TO_GET_EMBEDDING_STATUS", t));
|
|
94
92
|
if (o.success && o.data.ok) {
|
|
95
93
|
let e = await u({
|
|
96
94
|
namespace: t,
|
|
@@ -102,8 +100,8 @@ function k({ initialRegistryDocuments: n, registryUrl: i, dashboardUrl: o, baseU
|
|
|
102
100
|
api: U,
|
|
103
101
|
removable: r
|
|
104
102
|
});
|
|
105
|
-
e.success || (console.warn("[AGENT]: Unable to load document", e.error),
|
|
106
|
-
} else console.warn("[AGENT]: Document could not be embedded"),
|
|
103
|
+
e.success || (console.warn("[AGENT]: Unable to load document", e.error), E(`Unable to load the document @${t}/${n}`, "warn"));
|
|
104
|
+
} else console.warn("[AGENT]: Document could not be embedded"), E(`Unable to embed the document @${t}/${n}`, "warn");
|
|
107
105
|
N[a] = !1;
|
|
108
106
|
}
|
|
109
107
|
function J({ namespace: e, slug: t }) {
|
|
@@ -123,32 +121,33 @@ function k({ initialRegistryDocuments: n, registryUrl: i, dashboardUrl: o, baseU
|
|
|
123
121
|
config: V,
|
|
124
122
|
registryUrl: i,
|
|
125
123
|
dashboardUrl: o,
|
|
126
|
-
|
|
124
|
+
platformProxyUrl: f,
|
|
125
|
+
baseUrl: g,
|
|
127
126
|
registryDocuments: M,
|
|
128
127
|
pendingDocuments: N,
|
|
129
128
|
proxyUrl: I,
|
|
130
129
|
proxyUrlRaw: F,
|
|
131
|
-
mode:
|
|
130
|
+
mode: _,
|
|
132
131
|
terms: R,
|
|
133
|
-
isLoggedIn:
|
|
132
|
+
isLoggedIn: S,
|
|
134
133
|
addDocument: K,
|
|
135
134
|
addDocumentAsync: q,
|
|
136
135
|
removeDocument: J,
|
|
137
136
|
getAccessToken: C,
|
|
138
|
-
getAgentKey:
|
|
137
|
+
getAgentKey: T,
|
|
139
138
|
api: U,
|
|
140
139
|
uploadedTmpDocumentUrl: L,
|
|
141
140
|
curatedDocuments: P,
|
|
142
|
-
getActiveDocumentJson:
|
|
141
|
+
getActiveDocumentJson: O,
|
|
143
142
|
hideAddApi: A
|
|
144
143
|
};
|
|
145
144
|
}
|
|
146
|
-
function
|
|
147
|
-
let e = f(
|
|
145
|
+
function k() {
|
|
146
|
+
let e = f(T);
|
|
148
147
|
if (!e) throw Error("No state provided.");
|
|
149
148
|
return e;
|
|
150
149
|
}
|
|
151
150
|
//#endregion
|
|
152
|
-
export {
|
|
151
|
+
export { T as STATE_SYMBOL, O as createState, k as useState };
|
|
153
152
|
|
|
154
153
|
//# sourceMappingURL=state.js.map
|
package/dist/state/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","names":[],"sources":["../../src/state/state.ts"],"sourcesContent":["import { Chat } from '@ai-sdk/vue'\nimport { type ModalState, useModal } from '@scalar/components'\nimport { redirectToProxy } from '@scalar/helpers/url/redirect-to-proxy'\nimport { type ApiReferenceConfigurationRaw, apiReferenceConfigurationSchema } from '@scalar/types/api-reference'\nimport { useToasts } from '@scalar/use-toasts'\nimport { type WorkspaceStore, createWorkspaceStore } from '@scalar/workspace-store/client'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { createWorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { DefaultChatTransport, type UIDataTypes, type UIMessage, lastAssistantMessageIsCompleteWithToolCalls } from 'ai'\nimport { n } from 'neverpanic'\nimport { type ComputedRef, type InjectionKey, type Ref, computed, inject, reactive, ref, watch } from 'vue'\n\nimport { type Api, createApi, createAuthorizationHeaders } from '@/api'\nimport { executeRequestTool } from '@/client-tools/execute-request'\nimport { URLS } from '@/consts/urls'\nimport { createError } from '@/entities'\nimport type { ApiMetadata } from '@/entities/registry/document'\nimport type {\n ASK_FOR_AUTHENTICATION_TOOL_NAME,\n AskForAuthenticationInput,\n} from '@/entities/tools/ask-for-authentication'\nimport {\n EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME,\n type ExecuteClientSideRequestToolInput,\n type ExecuteClientSideRequestToolOutput,\n} from '@/entities/tools/execute-request'\nimport type {\n GET_MINI_OPENAPI_SPEC_TOOL_NAME,\n GetMiniOpenAPIDocToolInput,\n GetMiniOpenAPIDocToolOutput,\n} from '@/entities/tools/get-mini-openapi-spec'\nimport type {\n GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME,\n GetOpenAPISpecsSummaryToolOutput,\n} from '@/entities/tools/get-openapi-spec-summary'\nimport { createDocumentSettings } from '@/helpers'\nimport { useTermsAndConditions } from '@/hooks/use-term-and-conditions'\nimport { removeTmpDocFromLocalStorage } from '@/hooks/use-upload-tmp-document'\nimport { persistencePlugin } from '@/plugins/persistance'\nimport { loadDocument } from '@/registry/add-documents-to-store'\nimport { createDocumentName } from '@/registry/create-document-name'\nimport type { ChatMode } from '@/types'\n\nexport type RegistryDocument = {\n namespace: string\n slug: string\n}\n\nexport type Tools = {\n [GET_MINI_OPENAPI_SPEC_TOOL_NAME]: {\n input: GetMiniOpenAPIDocToolInput\n output: GetMiniOpenAPIDocToolOutput\n }\n [EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME]: {\n input: ExecuteClientSideRequestToolInput\n output: ExecuteClientSideRequestToolOutput\n }\n [GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME]: {\n input: object\n output: GetOpenAPISpecsSummaryToolOutput\n }\n [ASK_FOR_AUTHENTICATION_TOOL_NAME]: {\n input: AskForAuthenticationInput\n output: unknown\n }\n}\n\nexport const STATE_SYMBOL: InjectionKey<State> = Symbol('STATE_SYMBOL')\n\nconst { toast } = useToasts()\n\ntype State = {\n prompt: Ref<string>\n chat: Chat<UIMessage<unknown, UIDataTypes, Tools>>\n workspaceStore: WorkspaceStore\n loading: ComputedRef<boolean>\n settingsModal: ModalState\n eventBus: WorkspaceEventBus\n proxyUrl: ComputedRef<string>\n proxyUrlRaw: Ref<string | undefined>\n config: ComputedRef<ApiReferenceConfigurationRaw>\n registryUrl: string\n dashboardUrl: string\n baseUrl: string\n isLoggedIn?: Ref<boolean>\n registryDocuments: Ref<ApiMetadata[]>\n pendingDocuments: Record<string, boolean>\n mode: ChatMode\n terms: { accepted: Ref<boolean>; accept: () => void }\n addDocument: (document: { namespace: string; slug: string; removable?: boolean; tmp?: boolean }) => Promise<void>\n addDocumentAsync: (document: { namespace: string; slug: string; removable?: boolean }) => Promise<void>\n removeDocument: (document: { namespace: string; slug: string }) => void\n getAccessToken?: () => string\n getAgentKey?: () => string\n api: Api\n uploadedTmpDocumentUrl: Ref<string | undefined>\n curatedDocuments: Ref<ApiMetadata[]>\n getActiveDocumentJson?: () => string\n hideAddApi?: boolean\n}\n\nfunction createChat({\n registryDocuments,\n workspaceStore,\n baseUrl,\n proxyUrl,\n getAccessToken,\n getAgentKey,\n}: {\n registryDocuments: Ref<ApiMetadata[]>\n workspaceStore: WorkspaceStore\n baseUrl: string\n proxyUrl: ComputedRef<string>\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const chat = new Chat<UIMessage<unknown, UIDataTypes, Tools>>({\n sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls,\n transport: new DefaultChatTransport({\n api: redirectToProxy(proxyUrl.value, `${baseUrl}/vector/openapi/chat`),\n headers: () => createAuthorizationHeaders({ getAccessToken, getAgentKey }),\n body: () => ({\n registryDocuments: registryDocuments.value,\n documentSettings: createDocumentSettings(workspaceStore),\n }),\n }),\n async onToolCall({ toolCall }): Promise<any> {\n if (toolCall.dynamic) {\n return\n }\n\n if (\n toolCall.toolName === EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME &&\n toolCall.input.method.toLowerCase() === 'get'\n ) {\n await executeRequestTool({\n documentSettings: createDocumentSettings(workspaceStore),\n input: toolCall.input,\n toolCallId: toolCall.toolCallId,\n chat,\n proxyUrl: proxyUrl.value,\n })\n }\n },\n })\n\n return chat\n}\n\nexport function createState({\n initialRegistryDocuments,\n registryUrl,\n dashboardUrl,\n baseUrl,\n mode,\n isLoggedIn,\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n prefilledMessageRef,\n hideAddApi,\n}: {\n initialRegistryDocuments: { namespace: string; slug: string }[]\n registryUrl: string\n dashboardUrl: string\n baseUrl: string\n mode: ChatMode\n isLoggedIn?: Ref<boolean>\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n prefilledMessageRef?: Ref<string>\n hideAddApi?: boolean\n}): State {\n const prompt = ref<State['prompt']['value']>(prefilledMessageRef?.value ?? '')\n const registryDocuments = ref<ApiMetadata[]>([])\n const pendingDocuments = reactive<Record<string, boolean>>({})\n const curatedDocuments = ref<ApiMetadata[]>([])\n const proxyUrlRaw = ref<State['proxyUrlRaw']['value']>(URLS.DEFAULT_PROXY_URL)\n const proxyUrl = computed(() => proxyUrlRaw.value?.trim() || URLS.DEFAULT_PROXY_URL)\n const uploadedTmpDocumentUrl = ref<string>()\n const terms = useTermsAndConditions()\n\n const eventBus = createWorkspaceEventBus()\n const workspaceStore = createWorkspaceStore({\n plugins: [\n persistencePlugin({\n persistAuth: true,\n }),\n ],\n })\n\n const config = computed(() =>\n apiReferenceConfigurationSchema.parse({\n proxyUrl: proxyUrl.value,\n persistAuth: true,\n }),\n )\n\n const chat = createChat({\n registryDocuments,\n workspaceStore,\n baseUrl,\n proxyUrl,\n getAccessToken,\n getAgentKey,\n })\n\n const api = createApi({\n baseUrl,\n proxyUrl,\n getAccessToken,\n getAgentKey,\n })\n\n const loading = computed(\n () =>\n chat.status === 'submitted' ||\n (chat.status === 'streaming' && !chat.lastMessage?.parts.some((part) => part.type === 'text')),\n )\n\n watch(\n () => chat.status,\n () => {\n if (chat.status === 'streaming') {\n prompt.value = ''\n }\n },\n )\n\n if (prefilledMessageRef) {\n watch(prefilledMessageRef, async (val) => {\n if (val) {\n prompt.value = val\n if (terms.accepted.value) {\n await chat.sendMessage({ text: prompt.value })\n }\n }\n })\n }\n\n const settingsModal = useModal()\n\n async function addDocument({\n namespace,\n slug,\n removable = true,\n tmp = false,\n }: {\n namespace: string\n slug: string\n removable?: boolean\n tmp?: boolean\n }) {\n const matchingDoc = registryDocuments.value.find((doc) => doc.namespace === namespace && doc.slug === slug)\n\n if (matchingDoc) {\n return\n }\n\n const identifier = `@${namespace}/${slug}`\n\n pendingDocuments[identifier] = true\n\n const loadDocumentResult = await loadDocument({\n namespace,\n slug,\n workspaceStore,\n registryUrl,\n registryDocuments,\n config: config.value,\n api,\n removable,\n })\n\n pendingDocuments[identifier] = false\n\n if (!loadDocumentResult.success) {\n /**\n * If we are unable to load a document, we just remove it\n * from tmp local storage, do not warn the user.\n */\n if (tmp) {\n removeTmpDocFromLocalStorage()\n throw loadDocumentResult.error\n }\n\n console.warn('[AGENT]: Unable to load document', loadDocumentResult.error)\n toast(`Unable to load the document @${namespace}/${slug}`, 'warn')\n throw loadDocumentResult.error\n }\n }\n\n /**\n * Waits for document to be available in embeddings\n * and adds to the list\n */\n async function addDocumentAsync({\n namespace,\n slug,\n removable = true,\n }: {\n namespace: string\n slug: string\n removable?: boolean\n }) {\n const matchingDoc = registryDocuments.value.find((doc) => doc.namespace === namespace && doc.slug === slug)\n\n if (matchingDoc) {\n return\n }\n\n const identifier = `@${namespace}/${slug}`\n\n pendingDocuments[identifier] = true\n\n const embeddingStatusResponse = await n.fromUnsafe(\n () =>\n fetch(redirectToProxy(proxyUrl.value, `${baseUrl}/vector/registry/embeddings/${namespace}/${slug}`), {\n method: 'GET',\n }),\n (originalError) => createError('FAILED_TO_GET_EMBEDDING_STATUS', originalError),\n )\n\n if (embeddingStatusResponse.success && embeddingStatusResponse.data.ok) {\n const loadDocumentResult = await loadDocument({\n namespace,\n slug,\n workspaceStore,\n registryUrl,\n registryDocuments,\n config: config.value,\n api,\n removable,\n })\n\n if (!loadDocumentResult.success) {\n console.warn('[AGENT]: Unable to load document', loadDocumentResult.error)\n toast(`Unable to load the document @${namespace}/${slug}`, 'warn')\n }\n } else {\n console.warn('[AGENT]: Document could not be embedded')\n toast(`Unable to embed the document @${namespace}/${slug}`, 'warn')\n }\n\n pendingDocuments[identifier] = false\n }\n\n function removeDocument({ namespace, slug }: { namespace: string; slug: string }) {\n registryDocuments.value = registryDocuments.value.filter(\n (doc) => !(doc.namespace === namespace && doc.slug === slug),\n )\n\n workspaceStore.deleteDocument(createDocumentName(namespace, slug))\n }\n\n initialRegistryDocuments.forEach(({ namespace, slug }) => addDocument({ namespace, slug, removable: false }))\n\n return {\n prompt,\n chat,\n workspaceStore,\n eventBus,\n loading,\n settingsModal,\n config,\n registryUrl,\n dashboardUrl,\n baseUrl,\n registryDocuments,\n pendingDocuments,\n proxyUrl,\n proxyUrlRaw,\n mode,\n terms,\n isLoggedIn,\n addDocument,\n addDocumentAsync,\n removeDocument,\n getAccessToken,\n getAgentKey,\n api,\n uploadedTmpDocumentUrl,\n curatedDocuments,\n getActiveDocumentJson,\n hideAddApi,\n }\n}\n\nexport function useState() {\n const state = inject(STATE_SYMBOL)\n\n if (!state) {\n throw new Error('No state provided.')\n }\n\n return state\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state.js","names":[],"sources":["../../src/state/state.ts"],"sourcesContent":["import { Chat } from '@ai-sdk/vue'\nimport { type ModalState, useModal } from '@scalar/components'\nimport { type ApiReferenceConfigurationRaw, apiReferenceConfigurationSchema } from '@scalar/types/api-reference'\nimport { useToasts } from '@scalar/use-toasts'\nimport { type WorkspaceStore, createWorkspaceStore } from '@scalar/workspace-store/client'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { createWorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { DefaultChatTransport, type UIDataTypes, type UIMessage, lastAssistantMessageIsCompleteWithToolCalls } from 'ai'\nimport { n } from 'neverpanic'\nimport { type ComputedRef, type InjectionKey, type Ref, computed, inject, reactive, ref, watch } from 'vue'\n\nimport { type Api, createApi, createAuthorizationHeaders } from '@/api'\nimport { executeRequestTool } from '@/client-tools/execute-request'\nimport { URLS } from '@/consts/urls'\nimport { createError } from '@/entities'\nimport type { ApiMetadata } from '@/entities/registry/document'\nimport type {\n ASK_FOR_AUTHENTICATION_TOOL_NAME,\n AskForAuthenticationInput,\n} from '@/entities/tools/ask-for-authentication'\nimport {\n EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME,\n type ExecuteClientSideRequestToolInput,\n type ExecuteClientSideRequestToolOutput,\n} from '@/entities/tools/execute-request'\nimport type {\n GET_MINI_OPENAPI_SPEC_TOOL_NAME,\n GetMiniOpenAPIDocToolInput,\n GetMiniOpenAPIDocToolOutput,\n} from '@/entities/tools/get-mini-openapi-spec'\nimport type {\n GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME,\n GetOpenAPISpecsSummaryToolOutput,\n} from '@/entities/tools/get-openapi-spec-summary'\nimport { createDocumentSettings } from '@/helpers'\nimport { useTermsAndConditions } from '@/hooks/use-term-and-conditions'\nimport { removeTmpDocFromLocalStorage } from '@/hooks/use-upload-tmp-document'\nimport { persistencePlugin } from '@/plugins/persistance'\nimport { loadDocument } from '@/registry/add-documents-to-store'\nimport { createDocumentName } from '@/registry/create-document-name'\nimport type { ChatMode } from '@/types'\n\nexport type RegistryDocument = {\n namespace: string\n slug: string\n}\n\nexport type Tools = {\n [GET_MINI_OPENAPI_SPEC_TOOL_NAME]: {\n input: GetMiniOpenAPIDocToolInput\n output: GetMiniOpenAPIDocToolOutput\n }\n [EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME]: {\n input: ExecuteClientSideRequestToolInput\n output: ExecuteClientSideRequestToolOutput\n }\n [GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME]: {\n input: object\n output: GetOpenAPISpecsSummaryToolOutput\n }\n [ASK_FOR_AUTHENTICATION_TOOL_NAME]: {\n input: AskForAuthenticationInput\n output: unknown\n }\n}\n\nexport const STATE_SYMBOL: InjectionKey<State> = Symbol('STATE_SYMBOL')\n\nconst { toast } = useToasts()\n\ntype State = {\n prompt: Ref<string>\n chat: Chat<UIMessage<unknown, UIDataTypes, Tools>>\n workspaceStore: WorkspaceStore\n loading: ComputedRef<boolean>\n settingsModal: ModalState\n eventBus: WorkspaceEventBus\n proxyUrl: ComputedRef<string>\n proxyUrlRaw: Ref<string | undefined>\n config: ComputedRef<ApiReferenceConfigurationRaw>\n registryUrl: string\n dashboardUrl: string\n baseUrl: string\n platformProxyUrl: string\n isLoggedIn?: Ref<boolean>\n registryDocuments: Ref<ApiMetadata[]>\n pendingDocuments: Record<string, boolean>\n mode: ChatMode\n terms: { accepted: Ref<boolean>; accept: () => void }\n addDocument: (document: { namespace: string; slug: string; removable?: boolean; tmp?: boolean }) => Promise<void>\n addDocumentAsync: (document: { namespace: string; slug: string; removable?: boolean }) => Promise<void>\n removeDocument: (document: { namespace: string; slug: string }) => void\n getAccessToken?: () => string\n getAgentKey?: () => string\n api: Api\n uploadedTmpDocumentUrl: Ref<string | undefined>\n curatedDocuments: Ref<ApiMetadata[]>\n getActiveDocumentJson?: () => string\n hideAddApi?: boolean\n}\n\nfunction createChat({\n registryDocuments,\n workspaceStore,\n baseUrl,\n proxyUrl,\n getAccessToken,\n getAgentKey,\n}: {\n registryDocuments: Ref<ApiMetadata[]>\n workspaceStore: WorkspaceStore\n baseUrl: string\n proxyUrl: ComputedRef<string>\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const chat = new Chat<UIMessage<unknown, UIDataTypes, Tools>>({\n sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls,\n transport: new DefaultChatTransport({\n api: `${baseUrl}/vector/openapi/chat`,\n headers: () => createAuthorizationHeaders({ getAccessToken, getAgentKey }),\n body: () => ({\n registryDocuments: registryDocuments.value,\n documentSettings: createDocumentSettings(workspaceStore),\n }),\n }),\n async onToolCall({ toolCall }): Promise<any> {\n if (toolCall.dynamic) {\n return\n }\n\n if (\n toolCall.toolName === EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME &&\n toolCall.input.method.toLowerCase() === 'get'\n ) {\n await executeRequestTool({\n documentSettings: createDocumentSettings(workspaceStore),\n input: toolCall.input,\n toolCallId: toolCall.toolCallId,\n chat,\n proxyUrl: proxyUrl.value,\n })\n }\n },\n })\n\n return chat\n}\n\nexport function createState({\n initialRegistryDocuments,\n registryUrl,\n dashboardUrl,\n platformProxyUrl,\n baseUrl,\n mode,\n isLoggedIn,\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n prefilledMessageRef,\n hideAddApi,\n}: {\n initialRegistryDocuments: { namespace: string; slug: string }[]\n registryUrl: string\n dashboardUrl: string\n platformProxyUrl: string\n baseUrl: string\n mode: ChatMode\n isLoggedIn?: Ref<boolean>\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n prefilledMessageRef?: Ref<string>\n hideAddApi?: boolean\n}): State {\n const prompt = ref<State['prompt']['value']>(prefilledMessageRef?.value ?? '')\n const registryDocuments = ref<ApiMetadata[]>([])\n const pendingDocuments = reactive<Record<string, boolean>>({})\n const curatedDocuments = ref<ApiMetadata[]>([])\n const proxyUrlRaw = ref<State['proxyUrlRaw']['value']>(URLS.DEFAULT_PROXY_URL)\n const proxyUrl = computed(() => proxyUrlRaw.value?.trim() || URLS.DEFAULT_PROXY_URL)\n const uploadedTmpDocumentUrl = ref<string>()\n const terms = useTermsAndConditions()\n\n const eventBus = createWorkspaceEventBus()\n const workspaceStore = createWorkspaceStore({\n plugins: [\n persistencePlugin({\n persistAuth: true,\n }),\n ],\n })\n\n const config = computed(() =>\n apiReferenceConfigurationSchema.parse({\n proxyUrl: proxyUrl.value,\n persistAuth: true,\n }),\n )\n\n const chat = createChat({\n registryDocuments,\n workspaceStore,\n baseUrl,\n proxyUrl,\n getAccessToken,\n getAgentKey,\n })\n\n const api = createApi({\n baseUrl,\n getAccessToken,\n getAgentKey,\n })\n\n const loading = computed(\n () =>\n chat.status === 'submitted' ||\n (chat.status === 'streaming' && !chat.lastMessage?.parts.some((part) => part.type === 'text')),\n )\n\n watch(\n () => chat.status,\n () => {\n if (chat.status === 'streaming') {\n prompt.value = ''\n }\n },\n )\n\n if (prefilledMessageRef) {\n watch(prefilledMessageRef, async (val) => {\n if (val) {\n prompt.value = val\n if (terms.accepted.value) {\n await chat.sendMessage({ text: prompt.value })\n }\n }\n })\n }\n\n const settingsModal = useModal()\n\n async function addDocument({\n namespace,\n slug,\n removable = true,\n tmp = false,\n }: {\n namespace: string\n slug: string\n removable?: boolean\n tmp?: boolean\n }) {\n const matchingDoc = registryDocuments.value.find((doc) => doc.namespace === namespace && doc.slug === slug)\n\n if (matchingDoc) {\n return\n }\n\n const identifier = `@${namespace}/${slug}`\n\n pendingDocuments[identifier] = true\n\n const loadDocumentResult = await loadDocument({\n namespace,\n slug,\n workspaceStore,\n registryUrl,\n registryDocuments,\n config: config.value,\n api,\n removable,\n })\n\n pendingDocuments[identifier] = false\n\n if (!loadDocumentResult.success) {\n /**\n * If we are unable to load a document, we just remove it\n * from tmp local storage, do not warn the user.\n */\n if (tmp) {\n removeTmpDocFromLocalStorage()\n throw loadDocumentResult.error\n }\n\n console.warn('[AGENT]: Unable to load document', loadDocumentResult.error)\n toast(`Unable to load the document @${namespace}/${slug}`, 'warn')\n throw loadDocumentResult.error\n }\n }\n\n /**\n * Waits for document to be available in embeddings\n * and adds to the list\n */\n async function addDocumentAsync({\n namespace,\n slug,\n removable = true,\n }: {\n namespace: string\n slug: string\n removable?: boolean\n }) {\n const matchingDoc = registryDocuments.value.find((doc) => doc.namespace === namespace && doc.slug === slug)\n\n if (matchingDoc) {\n return\n }\n\n const identifier = `@${namespace}/${slug}`\n\n pendingDocuments[identifier] = true\n\n const embeddingStatusResponse = await n.fromUnsafe(\n () =>\n fetch(`${baseUrl}/vector/registry/embeddings/${namespace}/${slug}`, {\n method: 'GET',\n }),\n (originalError) => createError('FAILED_TO_GET_EMBEDDING_STATUS', originalError),\n )\n\n if (embeddingStatusResponse.success && embeddingStatusResponse.data.ok) {\n const loadDocumentResult = await loadDocument({\n namespace,\n slug,\n workspaceStore,\n registryUrl,\n registryDocuments,\n config: config.value,\n api,\n removable,\n })\n\n if (!loadDocumentResult.success) {\n console.warn('[AGENT]: Unable to load document', loadDocumentResult.error)\n toast(`Unable to load the document @${namespace}/${slug}`, 'warn')\n }\n } else {\n console.warn('[AGENT]: Document could not be embedded')\n toast(`Unable to embed the document @${namespace}/${slug}`, 'warn')\n }\n\n pendingDocuments[identifier] = false\n }\n\n function removeDocument({ namespace, slug }: { namespace: string; slug: string }) {\n registryDocuments.value = registryDocuments.value.filter(\n (doc) => !(doc.namespace === namespace && doc.slug === slug),\n )\n\n workspaceStore.deleteDocument(createDocumentName(namespace, slug))\n }\n\n initialRegistryDocuments.forEach(({ namespace, slug }) => addDocument({ namespace, slug, removable: false }))\n\n return {\n prompt,\n chat,\n workspaceStore,\n eventBus,\n loading,\n settingsModal,\n config,\n registryUrl,\n dashboardUrl,\n platformProxyUrl,\n baseUrl,\n registryDocuments,\n pendingDocuments,\n proxyUrl,\n proxyUrlRaw,\n mode,\n terms,\n isLoggedIn,\n addDocument,\n addDocumentAsync,\n removeDocument,\n getAccessToken,\n getAgentKey,\n api,\n uploadedTmpDocumentUrl,\n curatedDocuments,\n getActiveDocumentJson,\n hideAddApi,\n }\n}\n\nexport function useState() {\n const state = inject(STATE_SYMBOL)\n\n if (!state) {\n throw new Error('No state provided.')\n }\n\n return state\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"url": "git+https://github.com/scalar/scalar.git",
|
|
11
11
|
"directory": "packages/agent-chat"
|
|
12
12
|
},
|
|
13
|
-
"version": "0.9.
|
|
13
|
+
"version": "0.9.14",
|
|
14
14
|
"engines": {
|
|
15
15
|
"node": ">=22"
|
|
16
16
|
},
|
|
@@ -50,16 +50,16 @@
|
|
|
50
50
|
"vue": "^3.5.26",
|
|
51
51
|
"whatwg-mimetype": "4.0.0",
|
|
52
52
|
"zod": "^4.3.5",
|
|
53
|
-
"@scalar/
|
|
53
|
+
"@scalar/api-client": "2.39.1",
|
|
54
54
|
"@scalar/helpers": "0.4.2",
|
|
55
|
-
"@scalar/
|
|
55
|
+
"@scalar/components": "0.21.1",
|
|
56
|
+
"@scalar/icons": "0.7.0",
|
|
56
57
|
"@scalar/json-magic": "0.12.4",
|
|
57
|
-
"@scalar/icons": "0.6.4",
|
|
58
|
-
"@scalar/openapi-types": "0.6.1",
|
|
59
58
|
"@scalar/themes": "0.15.1",
|
|
60
|
-
"@scalar/types": "0.
|
|
59
|
+
"@scalar/openapi-types": "0.6.1",
|
|
60
|
+
"@scalar/types": "0.7.5",
|
|
61
61
|
"@scalar/use-toasts": "0.10.1",
|
|
62
|
-
"@scalar/workspace-store": "0.41.
|
|
62
|
+
"@scalar/workspace-store": "0.41.1"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@modelcontextprotocol/sdk": "1.26.0",
|