@scalar/agent-chat 0.9.12 → 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.
Files changed (235) hide show
  1. package/dist/App.vue.d.ts +5 -3
  2. package/dist/App.vue.d.ts.map +1 -1
  3. package/dist/App.vue.js +7 -0
  4. package/dist/App.vue.js.map +1 -0
  5. package/dist/App.vue.script.js +43 -0
  6. package/dist/App.vue.script.js.map +1 -0
  7. package/dist/Chat.vue.js +7 -0
  8. package/dist/Chat.vue.js.map +1 -0
  9. package/dist/Chat.vue.script.js +48 -0
  10. package/dist/Chat.vue.script.js.map +1 -0
  11. package/dist/_virtual/_plugin-vue_export-helper.js +8 -0
  12. package/dist/api.d.ts +1 -3
  13. package/dist/api.d.ts.map +1 -1
  14. package/dist/api.js +74 -0
  15. package/dist/api.js.map +1 -0
  16. package/dist/client-tools/execute-request.d.ts +1 -1
  17. package/dist/client-tools/execute-request.js +88 -0
  18. package/dist/client-tools/execute-request.js.map +1 -0
  19. package/dist/components/ActionsDropdown.vue.js +9 -0
  20. package/dist/components/ActionsDropdown.vue.js.map +1 -0
  21. package/dist/components/ActionsDropdown.vue.script.js +33 -0
  22. package/dist/components/ActionsDropdown.vue.script.js.map +1 -0
  23. package/dist/components/ApprovalSection.vue.js +9 -0
  24. package/dist/components/ApprovalSection.vue.js.map +1 -0
  25. package/dist/components/ApprovalSection.vue.script.js +26 -0
  26. package/dist/components/ApprovalSection.vue.script.js.map +1 -0
  27. package/dist/components/AuthenticationProvided.vue.js +13 -0
  28. package/dist/components/AuthenticationProvided.vue.js.map +1 -0
  29. package/dist/components/AuthenticationRequired.vue.js +13 -0
  30. package/dist/components/AuthenticationRequired.vue.js.map +1 -0
  31. package/dist/components/AutosendPaused.vue.js +13 -0
  32. package/dist/components/AutosendPaused.vue.js.map +1 -0
  33. package/dist/components/BuildingRequest.vue.js +19 -0
  34. package/dist/components/BuildingRequest.vue.js.map +1 -0
  35. package/dist/components/ContextItem.vue.js +9 -0
  36. package/dist/components/ContextItem.vue.js.map +1 -0
  37. package/dist/components/ContextItem.vue.script.js +13 -0
  38. package/dist/components/ContextItem.vue.script.js.map +1 -0
  39. package/dist/components/ErrorMessage.vue.d.ts +1 -1
  40. package/dist/components/ErrorMessage.vue.js +9 -0
  41. package/dist/components/ErrorMessage.vue.js.map +1 -0
  42. package/dist/components/ErrorMessage.vue.script.js +22 -0
  43. package/dist/components/ErrorMessage.vue.script.js.map +1 -0
  44. package/dist/components/FreeMessagesInfoSection.vue.js +9 -0
  45. package/dist/components/FreeMessagesInfoSection.vue.js.map +1 -0
  46. package/dist/components/FreeMessagesInfoSection.vue.script.js +43 -0
  47. package/dist/components/FreeMessagesInfoSection.vue.script.js.map +1 -0
  48. package/dist/components/LoadingMiniOpenAPIDoc.vue.js +13 -0
  49. package/dist/components/LoadingMiniOpenAPIDoc.vue.js.map +1 -0
  50. package/dist/components/LoadingOpenAPISpecsSummary.vue.js +13 -0
  51. package/dist/components/LoadingOpenAPISpecsSummary.vue.js.map +1 -0
  52. package/dist/components/Logo.vue.js +23 -0
  53. package/dist/components/Logo.vue.js.map +1 -0
  54. package/dist/components/PaymentSection.vue.js +9 -0
  55. package/dist/components/PaymentSection.vue.js.map +1 -0
  56. package/dist/components/PaymentSection.vue.script.js +22 -0
  57. package/dist/components/PaymentSection.vue.script.js.map +1 -0
  58. package/dist/components/RequestApproved.vue.js +13 -0
  59. package/dist/components/RequestApproved.vue.js.map +1 -0
  60. package/dist/components/RequestFailed.vue.js +19 -0
  61. package/dist/components/RequestFailed.vue.js.map +1 -0
  62. package/dist/components/RequestPreview.vue.d.ts +1 -1
  63. package/dist/components/RequestPreview.vue.js +9 -0
  64. package/dist/components/RequestPreview.vue.js.map +1 -0
  65. package/dist/components/RequestPreview.vue.script.js +96 -0
  66. package/dist/components/RequestPreview.vue.script.js.map +1 -0
  67. package/dist/components/RequestRejected.vue.js +19 -0
  68. package/dist/components/RequestRejected.vue.js.map +1 -0
  69. package/dist/components/RequestSuccess.vue.js +13 -0
  70. package/dist/components/RequestSuccess.vue.js.map +1 -0
  71. package/dist/components/ResponseBody/ResponseBody.vue.d.ts +1 -1
  72. package/dist/components/ResponseBody/ResponseBody.vue.js +7 -0
  73. package/dist/components/ResponseBody/ResponseBody.vue.js.map +1 -0
  74. package/dist/components/ResponseBody/ResponseBody.vue.script.js +43 -0
  75. package/dist/components/ResponseBody/ResponseBody.vue.script.js.map +1 -0
  76. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js +12 -0
  77. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js.map +1 -0
  78. package/dist/components/ResponseBody/ResponseBodyPreview.vue.d.ts +1 -1
  79. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js +9 -0
  80. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js.map +1 -0
  81. package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js +59 -0
  82. package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js.map +1 -0
  83. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js +7 -0
  84. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js.map +1 -0
  85. package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js +22 -0
  86. package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js.map +1 -0
  87. package/dist/components/ResponseBody/ResponseBodyToggle.vue.js +7 -0
  88. package/dist/components/ResponseBody/ResponseBodyToggle.vue.js.map +1 -0
  89. package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js +23 -0
  90. package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js.map +1 -0
  91. package/dist/components/ResponseBody/helpers/media-types.js +223 -0
  92. package/dist/components/ResponseBody/helpers/media-types.js.map +1 -0
  93. package/dist/components/ResponseBody/helpers/process-response-body.js +33 -0
  94. package/dist/components/ResponseBody/helpers/process-response-body.js.map +1 -0
  95. package/dist/components/SearchPopover.vue.js +9 -0
  96. package/dist/components/SearchPopover.vue.js.map +1 -0
  97. package/dist/components/SearchPopover.vue.script.js +53 -0
  98. package/dist/components/SearchPopover.vue.script.js.map +1 -0
  99. package/dist/components/Selector.vue.js +7 -0
  100. package/dist/components/Selector.vue.js.map +1 -0
  101. package/dist/components/Selector.vue.script.js +62 -0
  102. package/dist/components/Selector.vue.script.js.map +1 -0
  103. package/dist/components/SendingRequest.vue.js +19 -0
  104. package/dist/components/SendingRequest.vue.js.map +1 -0
  105. package/dist/components/ServerSelector.vue.js +7 -0
  106. package/dist/components/ServerSelector.vue.js.map +1 -0
  107. package/dist/components/ServerSelector.vue.script.js +60 -0
  108. package/dist/components/ServerSelector.vue.script.js.map +1 -0
  109. package/dist/components/UploadSection.vue.d.ts +1 -1
  110. package/dist/components/UploadSection.vue.js +9 -0
  111. package/dist/components/UploadSection.vue.js.map +1 -0
  112. package/dist/components/UploadSection.vue.script.js +52 -0
  113. package/dist/components/UploadSection.vue.script.js.map +1 -0
  114. package/dist/consts/urls.js +12 -0
  115. package/dist/consts/urls.js.map +1 -0
  116. package/dist/entities/error/constants.js +6 -0
  117. package/dist/entities/error/constants.js.map +1 -0
  118. package/dist/entities/error/helpers.d.ts +1 -1
  119. package/dist/entities/error/helpers.js +11 -0
  120. package/dist/entities/error/helpers.js.map +1 -0
  121. package/dist/entities/index.d.ts +9 -9
  122. package/dist/entities/index.js +10 -2
  123. package/dist/entities/prompt/constants.js +6 -0
  124. package/dist/entities/prompt/constants.js.map +1 -0
  125. package/dist/entities/registry/document.js +14 -0
  126. package/dist/entities/registry/document.js.map +1 -0
  127. package/dist/entities/tools/ask-for-authentication.js +7 -0
  128. package/dist/entities/tools/ask-for-authentication.js.map +1 -0
  129. package/dist/entities/tools/constants.js +6 -0
  130. package/dist/entities/tools/constants.js.map +1 -0
  131. package/dist/entities/tools/execute-request.d.ts +1 -1
  132. package/dist/entities/tools/execute-request.js +13 -0
  133. package/dist/entities/tools/execute-request.js.map +1 -0
  134. package/dist/entities/tools/get-mini-openapi-spec.js +7 -0
  135. package/dist/entities/tools/get-mini-openapi-spec.js.map +1 -0
  136. package/dist/entities/tools/get-openapi-spec-summary.js +6 -0
  137. package/dist/entities/tools/get-openapi-spec-summary.js.map +1 -0
  138. package/dist/helpers.js +42 -0
  139. package/dist/helpers.js.map +1 -0
  140. package/dist/hooks/use-agent-key-documents.js +24 -0
  141. package/dist/hooks/use-agent-key-documents.js.map +1 -0
  142. package/dist/hooks/use-chat-approvals.d.ts +1 -1
  143. package/dist/hooks/use-chat-approvals.js +38 -0
  144. package/dist/hooks/use-chat-approvals.js.map +1 -0
  145. package/dist/hooks/use-chat-error.js +25 -0
  146. package/dist/hooks/use-chat-error.js.map +1 -0
  147. package/dist/hooks/use-chat-pending-client-tool-parts.js +14 -0
  148. package/dist/hooks/use-chat-pending-client-tool-parts.js.map +1 -0
  149. package/dist/hooks/use-chat-scroll.js +17 -0
  150. package/dist/hooks/use-chat-scroll.js.map +1 -0
  151. package/dist/hooks/use-curated-documents.js +14 -0
  152. package/dist/hooks/use-curated-documents.js.map +1 -0
  153. package/dist/hooks/use-search.d.ts +1 -1
  154. package/dist/hooks/use-search.js +23 -0
  155. package/dist/hooks/use-search.js.map +1 -0
  156. package/dist/hooks/use-signup-link.js +17 -0
  157. package/dist/hooks/use-signup-link.js.map +1 -0
  158. package/dist/hooks/use-term-and-conditions.js +20 -0
  159. package/dist/hooks/use-term-and-conditions.js.map +1 -0
  160. package/dist/hooks/use-upload-tmp-document.js +92 -0
  161. package/dist/hooks/use-upload-tmp-document.js.map +1 -0
  162. package/dist/index.d.ts +2 -2
  163. package/dist/index.js +2 -2065
  164. package/dist/package.json +1 -1
  165. package/dist/plugins/persistance.js +16 -0
  166. package/dist/plugins/persistance.js.map +1 -0
  167. package/dist/registry/add-documents-to-store.d.ts +2 -2
  168. package/dist/registry/add-documents-to-store.js +36 -0
  169. package/dist/registry/add-documents-to-store.js.map +1 -0
  170. package/dist/registry/create-document-name.js +8 -0
  171. package/dist/registry/create-document-name.js.map +1 -0
  172. package/dist/state/state.d.ts +9 -7
  173. package/dist/state/state.d.ts.map +1 -1
  174. package/dist/state/state.js +153 -0
  175. package/dist/state/state.js.map +1 -0
  176. package/dist/views/Catalog/Catalog.vue.js +10 -0
  177. package/dist/views/Catalog/Catalog.vue.js.map +1 -0
  178. package/dist/views/Catalog/Catalog.vue.script.js +50 -0
  179. package/dist/views/Catalog/Catalog.vue.script.js.map +1 -0
  180. package/dist/views/Chat/Chat.vue.js +9 -0
  181. package/dist/views/Chat/Chat.vue.js.map +1 -0
  182. package/dist/views/Chat/Chat.vue.script.js +55 -0
  183. package/dist/views/Chat/Chat.vue.script.js.map +1 -0
  184. package/dist/views/Chat/Messages/AskForAuthentication.vue.d.ts +2 -2
  185. package/dist/views/Chat/Messages/AskForAuthentication.vue.js +9 -0
  186. package/dist/views/Chat/Messages/AskForAuthentication.vue.js.map +1 -0
  187. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js +72 -0
  188. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js.map +1 -0
  189. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.d.ts +2 -2
  190. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js +9 -0
  191. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js.map +1 -0
  192. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js +26 -0
  193. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js.map +1 -0
  194. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.d.ts +2 -2
  195. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.js +9 -0
  196. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.js.map +1 -0
  197. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.script.js +39 -0
  198. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.script.js.map +1 -0
  199. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.d.ts +2 -2
  200. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js +7 -0
  201. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js.map +1 -0
  202. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js +21 -0
  203. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js.map +1 -0
  204. package/dist/views/Chat/Messages/Text.vue.js +7 -0
  205. package/dist/views/Chat/Messages/Text.vue.js.map +1 -0
  206. package/dist/views/Chat/Messages/Text.vue.script.js +14 -0
  207. package/dist/views/Chat/Messages/Text.vue.script.js.map +1 -0
  208. package/dist/views/Layout.vue.js +9 -0
  209. package/dist/views/Layout.vue.js.map +1 -0
  210. package/dist/views/Layout.vue.script.js +25 -0
  211. package/dist/views/Layout.vue.script.js.map +1 -0
  212. package/dist/views/PromptForm.vue.js +9 -0
  213. package/dist/views/PromptForm.vue.js.map +1 -0
  214. package/dist/views/PromptForm.vue.script.js +202 -0
  215. package/dist/views/PromptForm.vue.script.js.map +1 -0
  216. package/dist/views/Settings/Auth.vue.js +7 -0
  217. package/dist/views/Settings/Auth.vue.js.map +1 -0
  218. package/dist/views/Settings/Auth.vue.script.js +63 -0
  219. package/dist/views/Settings/Auth.vue.script.js.map +1 -0
  220. package/dist/views/Settings/DocSettings.vue.js +9 -0
  221. package/dist/views/Settings/DocSettings.vue.js.map +1 -0
  222. package/dist/views/Settings/DocSettings.vue.script.js +48 -0
  223. package/dist/views/Settings/DocSettings.vue.script.js.map +1 -0
  224. package/dist/views/Settings/Settings.vue.js +10 -0
  225. package/dist/views/Settings/Settings.vue.js.map +1 -0
  226. package/dist/views/Settings/Settings.vue.script.js +59 -0
  227. package/dist/views/Settings/Settings.vue.script.js.map +1 -0
  228. package/dist/views/Start.vue.js +9 -0
  229. package/dist/views/Start.vue.js.map +1 -0
  230. package/dist/views/Start.vue.script.js +41 -0
  231. package/dist/views/Start.vue.script.js.map +1 -0
  232. package/package.json +9 -9
  233. package/dist/entities-NWeuOkBB.js +0 -28
  234. package/dist/entities-NWeuOkBB.js.map +0 -1
  235. package/dist/index.js.map +0 -1
package/dist/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.12",
13
+ "version": "0.9.14",
14
14
  "engines": {
15
15
  "node": ">=22"
16
16
  },
@@ -0,0 +1,16 @@
1
+ import { authStorage as e } from "../helpers.js";
2
+ import { debounce as t } from "@scalar/helpers/general/debounce";
3
+ //#region src/plugins/persistance.ts
4
+ var n = ({ debounceDelay: n = 500, maxWait: r = 1e4, persistAuth: i = !1 }) => {
5
+ let { execute: a } = t({
6
+ delay: n,
7
+ maxWait: r
8
+ }), o = e(), s = () => typeof i == "function" ? i() : i;
9
+ return { hooks: { onWorkspaceStateChanges(e) {
10
+ s() && e.type === "auth" && a("auth", () => o.setAuth(e.documentName, e.value));
11
+ } } };
12
+ };
13
+ //#endregion
14
+ export { n as persistencePlugin };
15
+
16
+ //# sourceMappingURL=persistance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistance.js","names":[],"sources":["../../src/plugins/persistance.ts"],"sourcesContent":["import { debounce } from '@scalar/helpers/general/debounce'\nimport type { WorkspacePlugin } from '@scalar/workspace-store/workspace-plugin'\n\nimport { authStorage } from '@/helpers'\n\n/**\n * Plugin to persist workspace state changes with debounced writes.\n */\nexport const persistencePlugin = ({\n debounceDelay = 500,\n maxWait = 10000,\n persistAuth = false,\n}: {\n debounceDelay?: number\n /** Maximum time in milliseconds to wait before forcing execution, even with continuous calls. */\n maxWait?: number\n /**\n * Determines whether authentication details should be persisted.\n * Accepts a boolean or a function that returns a boolean.\n * Allows for conditional persistence logic, e.g., based on environment or user settings.\n */\n persistAuth?: boolean | (() => boolean)\n}): WorkspacePlugin => {\n // Debounced execute function for batching similar state changes\n const { execute } = debounce({ delay: debounceDelay, maxWait })\n const authPersistence = authStorage()\n\n const getPersistAuth = () => {\n if (typeof persistAuth === 'function') {\n return persistAuth()\n }\n\n return persistAuth\n }\n\n return {\n hooks: {\n /**\n * Handles all workspace state change events.\n * Each write is debounced by a key to prevent frequent writes for the same entity.\n */\n onWorkspaceStateChanges(event) {\n // Persist auth\n if (getPersistAuth() && event.type === 'auth') {\n execute('auth', () => authPersistence.setAuth(event.documentName, event.value))\n }\n\n // No action for other event types\n return\n },\n },\n }\n}\n"],"mappings":";;;AAQA,IAAa,KAAqB,EAChC,mBAAgB,KAChB,aAAU,KACV,iBAAc,SAWO;CAErB,IAAM,EAAE,eAAY,EAAS;EAAE,OAAO;EAAe;EAAS,CAAC,EACzD,IAAkB,GAAa,EAE/B,UACA,OAAO,KAAgB,aAClB,GAAa,GAGf;AAGT,QAAO,EACL,OAAO,EAKL,wBAAwB,GAAO;AAE7B,EAAI,GAAgB,IAAI,EAAM,SAAS,UACrC,EAAQ,cAAc,EAAgB,QAAQ,EAAM,cAAc,EAAM,MAAM,CAAC;IAMpF,EACF"}
@@ -1,8 +1,8 @@
1
1
  import type { ApiReferenceConfiguration } from '@scalar/types/api-reference';
2
2
  import type { WorkspaceStore } from '@scalar/workspace-store/client';
3
3
  import type { Ref } from 'vue';
4
- import type { Api } from '../api';
5
- import type { ApiMetadata } from '../entities/registry/document';
4
+ import type { Api } from '../api.js';
5
+ import type { ApiMetadata } from '../entities/registry/document.js';
6
6
  export declare const loadDocument: (args_0: {
7
7
  namespace: string;
8
8
  slug: string;
@@ -0,0 +1,36 @@
1
+ import { createError as e } from "../entities/error/helpers.js";
2
+ import { createDocumentName as t } from "./create-document-name.js";
3
+ import { restoreAuthSecretsFromStorage as n } from "../helpers.js";
4
+ import { n as r } from "neverpanic";
5
+ import { bundle as i } from "@scalar/json-magic/bundle";
6
+ import { fetchUrls as a } from "@scalar/json-magic/bundle/plugins/browser";
7
+ //#region src/registry/add-documents-to-store.ts
8
+ var o = r.safeFn(async ({ namespace: e, slug: r, workspaceStore: o, registryDocuments: s, registryUrl: c, config: l, api: u, removable: d }) => {
9
+ let f = await u.getDocument({
10
+ namespace: e,
11
+ slug: r
12
+ });
13
+ if (!f.success) return f;
14
+ s.value.push({
15
+ ...f.data,
16
+ removable: d
17
+ });
18
+ let p = await i(new URL(`/@${e}/apis/${r}/latest`, c).toString(), {
19
+ plugins: [a()],
20
+ treeShake: !1
21
+ }), m = t(e, r);
22
+ return await o.addDocument({
23
+ name: m,
24
+ document: p
25
+ }, l), o.update("x-scalar-active-document", m), n({
26
+ documentName: m,
27
+ workspaceStore: o
28
+ }), {
29
+ success: !0,
30
+ data: f.data
31
+ };
32
+ }, (t) => e("UNABLE_TO_LOAD_DOCUMENT", t));
33
+ //#endregion
34
+ export { o as loadDocument };
35
+
36
+ //# sourceMappingURL=add-documents-to-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-documents-to-store.js","names":[],"sources":["../../src/registry/add-documents-to-store.ts"],"sourcesContent":["import { bundle } from '@scalar/json-magic/bundle'\nimport { fetchUrls } from '@scalar/json-magic/bundle/plugins/browser'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport type { ApiReferenceConfiguration } from '@scalar/types/api-reference'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport { n } from 'neverpanic'\nimport type { Ref } from 'vue'\n\nimport type { Api } from '@/api'\nimport { createError } from '@/entities'\nimport type { ApiMetadata } from '@/entities/registry/document'\nimport { restoreAuthSecretsFromStorage } from '@/helpers'\nimport { createDocumentName } from '@/registry/create-document-name'\n\nexport const loadDocument = n.safeFn(\n async ({\n namespace,\n slug,\n workspaceStore,\n registryDocuments,\n registryUrl,\n config,\n api,\n removable,\n }: {\n namespace: string\n slug: string\n workspaceStore: WorkspaceStore\n registryDocuments: Ref<ApiMetadata[]>\n registryUrl: string\n config: Partial<ApiReferenceConfiguration>\n api: Api\n removable?: boolean\n }) => {\n const getDocumentResult = await api.getDocument({\n namespace,\n slug,\n })\n\n if (!getDocumentResult.success) {\n return getDocumentResult\n }\n\n registryDocuments.value.push({ ...getDocumentResult.data, removable })\n\n const url = new URL(`/@${namespace}/apis/${slug}/latest`, registryUrl)\n\n const document: OpenAPIV3_1.Document = await bundle(url.toString(), {\n plugins: [fetchUrls()],\n treeShake: false,\n })\n\n const documentName = createDocumentName(namespace, slug)\n\n await workspaceStore.addDocument(\n {\n name: documentName,\n document,\n },\n config,\n )\n\n workspaceStore.update('x-scalar-active-document', documentName)\n\n restoreAuthSecretsFromStorage({ documentName, workspaceStore })\n\n return {\n success: true,\n data: getDocumentResult.data,\n }\n },\n (originalError) => createError('UNABLE_TO_LOAD_DOCUMENT', originalError),\n)\n"],"mappings":";;;;;;;AAcA,IAAa,IAAe,EAAE,OAC5B,OAAO,EACL,cACA,SACA,mBACA,sBACA,gBACA,WACA,QACA,mBAUI;CACJ,IAAM,IAAoB,MAAM,EAAI,YAAY;EAC9C;EACA;EACD,CAAC;AAEF,KAAI,CAAC,EAAkB,QACrB,QAAO;AAGT,GAAkB,MAAM,KAAK;EAAE,GAAG,EAAkB;EAAM;EAAW,CAAC;CAItE,IAAM,IAAiC,MAAM,EAFjC,IAAI,IAAI,KAAK,EAAU,QAAQ,EAAK,UAAU,EAAY,CAEd,UAAU,EAAE;EAClE,SAAS,CAAC,GAAW,CAAC;EACtB,WAAW;EACZ,CAAC,EAEI,IAAe,EAAmB,GAAW,EAAK;AAcxD,QAZA,MAAM,EAAe,YACnB;EACE,MAAM;EACN;EACD,EACD,EACD,EAED,EAAe,OAAO,4BAA4B,EAAa,EAE/D,EAA8B;EAAE;EAAc;EAAgB,CAAC,EAExD;EACL,SAAS;EACT,MAAM,EAAkB;EACzB;IAEF,MAAkB,EAAY,2BAA2B,EAAc,CACzE"}
@@ -0,0 +1,8 @@
1
+ //#region src/registry/create-document-name.ts
2
+ function e(e, t) {
3
+ return `${e}/${t}`;
4
+ }
5
+ //#endregion
6
+ export { e as createDocumentName };
7
+
8
+ //# sourceMappingURL=create-document-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-document-name.js","names":[],"sources":["../../src/registry/create-document-name.ts"],"sourcesContent":["export function createDocumentName(namespace: string, slug: string) {\n return `${namespace}/${slug}`\n}\n"],"mappings":";AAAA,SAAgB,EAAmB,GAAmB,GAAc;AAClE,QAAO,GAAG,EAAU,GAAG"}
@@ -5,12 +5,12 @@ import { type WorkspaceStore } from '@scalar/workspace-store/client';
5
5
  import type { WorkspaceEventBus } from '@scalar/workspace-store/events';
6
6
  import { type UIDataTypes, type UIMessage } from 'ai';
7
7
  import { type ComputedRef, type InjectionKey, type Ref } from 'vue';
8
- import { type Api } from '../api';
9
- import type { ApiMetadata } from '../entities/registry/document';
10
- import type { ASK_FOR_AUTHENTICATION_TOOL_NAME, AskForAuthenticationInput } from '../entities/tools/ask-for-authentication';
11
- import { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME, type ExecuteClientSideRequestToolInput, type ExecuteClientSideRequestToolOutput } from '../entities/tools/execute-request';
12
- import type { GET_MINI_OPENAPI_SPEC_TOOL_NAME, GetMiniOpenAPIDocToolInput, GetMiniOpenAPIDocToolOutput } from '../entities/tools/get-mini-openapi-spec';
13
- import type { GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME, GetOpenAPISpecsSummaryToolOutput } from '../entities/tools/get-openapi-spec-summary';
8
+ import { type Api } from '../api.js';
9
+ import type { ApiMetadata } from '../entities/registry/document.js';
10
+ import type { ASK_FOR_AUTHENTICATION_TOOL_NAME, AskForAuthenticationInput } from '../entities/tools/ask-for-authentication.js';
11
+ import { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME, type ExecuteClientSideRequestToolInput, type ExecuteClientSideRequestToolOutput } from '../entities/tools/execute-request.js';
12
+ import type { GET_MINI_OPENAPI_SPEC_TOOL_NAME, GetMiniOpenAPIDocToolInput, GetMiniOpenAPIDocToolOutput } from '../entities/tools/get-mini-openapi-spec.js';
13
+ import type { GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME, GetOpenAPISpecsSummaryToolOutput } from '../entities/tools/get-openapi-spec-summary.js';
14
14
  import type { ChatMode } from '../types';
15
15
  export type RegistryDocument = {
16
16
  namespace: string;
@@ -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":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ import { createError as e } from "../entities/error/helpers.js";
2
+ import { createApi as t, createAuthorizationHeaders as n } from "../api.js";
3
+ import "../entities/tools/execute-request.js";
4
+ import { createDocumentName as r } from "../registry/create-document-name.js";
5
+ import { executeRequestTool as i } from "../client-tools/execute-request.js";
6
+ import { URLS as a } from "../consts/urls.js";
7
+ import { createDocumentSettings as o } from "../helpers.js";
8
+ import { useTermsAndConditions as s } from "../hooks/use-term-and-conditions.js";
9
+ import { removeTmpDocFromLocalStorage as c } from "../hooks/use-upload-tmp-document.js";
10
+ import { persistencePlugin as l } from "../plugins/persistance.js";
11
+ import { loadDocument as u } from "../registry/add-documents-to-store.js";
12
+ import { computed as d, inject as f, reactive as p, ref as m, watch as h } from "vue";
13
+ import { useToasts as g } from "@scalar/use-toasts";
14
+ import { Chat as _ } from "@ai-sdk/vue";
15
+ import { useModal as v } from "@scalar/components";
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";
21
+ //#region src/state/state.ts
22
+ var T = Symbol("STATE_SYMBOL"), { toast: E } = g();
23
+ function D({ registryDocuments: e, workspaceStore: t, baseUrl: r, proxyUrl: a, getAccessToken: s, getAgentKey: c }) {
24
+ let l = new _({
25
+ sendAutomaticallyWhen: C,
26
+ transport: new S({
27
+ api: `${r}/vector/openapi/chat`,
28
+ headers: () => n({
29
+ getAccessToken: s,
30
+ getAgentKey: c
31
+ }),
32
+ body: () => ({
33
+ registryDocuments: e.value,
34
+ documentSettings: o(t)
35
+ })
36
+ }),
37
+ async onToolCall({ toolCall: e }) {
38
+ e.dynamic || e.toolName === "execute-request" && e.input.method.toLowerCase() === "get" && await i({
39
+ documentSettings: o(t),
40
+ input: e.input,
41
+ toolCallId: e.toolCallId,
42
+ chat: l,
43
+ proxyUrl: a.value
44
+ });
45
+ }
46
+ });
47
+ return l;
48
+ }
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({
51
+ proxyUrl: I.value,
52
+ persistAuth: !0
53
+ })), H = D({
54
+ registryDocuments: M,
55
+ workspaceStore: B,
56
+ baseUrl: g,
57
+ proxyUrl: I,
58
+ getAccessToken: C,
59
+ getAgentKey: T
60
+ }), U = t({
61
+ baseUrl: g,
62
+ getAccessToken: C,
63
+ getAgentKey: T
64
+ }), W = d(() => H.status === "submitted" || H.status === "streaming" && !H.lastMessage?.parts.some((e) => e.type === "text"));
65
+ h(() => H.status, () => {
66
+ H.status === "streaming" && (j.value = "");
67
+ }), k && h(k, async (e) => {
68
+ e && (j.value = e, R.accepted.value && await H.sendMessage({ text: j.value }));
69
+ });
70
+ let G = v();
71
+ async function K({ namespace: e, slug: t, removable: n = !0, tmp: r = !1 }) {
72
+ if (M.value.find((n) => n.namespace === e && n.slug === t)) return;
73
+ let a = `@${e}/${t}`;
74
+ N[a] = !0;
75
+ let o = await u({
76
+ namespace: e,
77
+ slug: t,
78
+ workspaceStore: B,
79
+ registryUrl: i,
80
+ registryDocuments: M,
81
+ config: V.value,
82
+ api: U,
83
+ removable: n
84
+ });
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);
86
+ }
87
+ async function q({ namespace: t, slug: n, removable: r = !0 }) {
88
+ if (M.value.find((e) => e.namespace === t && e.slug === n)) return;
89
+ let a = `@${t}/${n}`;
90
+ N[a] = !0;
91
+ let o = await w.fromUnsafe(() => fetch(`${g}/vector/registry/embeddings/${t}/${n}`, { method: "GET" }), (t) => e("FAILED_TO_GET_EMBEDDING_STATUS", t));
92
+ if (o.success && o.data.ok) {
93
+ let e = await u({
94
+ namespace: t,
95
+ slug: n,
96
+ workspaceStore: B,
97
+ registryUrl: i,
98
+ registryDocuments: M,
99
+ config: V.value,
100
+ api: U,
101
+ removable: r
102
+ });
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");
105
+ N[a] = !1;
106
+ }
107
+ function J({ namespace: e, slug: t }) {
108
+ M.value = M.value.filter((n) => !(n.namespace === e && n.slug === t)), B.deleteDocument(r(e, t));
109
+ }
110
+ return n.forEach(({ namespace: e, slug: t }) => K({
111
+ namespace: e,
112
+ slug: t,
113
+ removable: !1
114
+ })), {
115
+ prompt: j,
116
+ chat: H,
117
+ workspaceStore: B,
118
+ eventBus: z,
119
+ loading: W,
120
+ settingsModal: G,
121
+ config: V,
122
+ registryUrl: i,
123
+ dashboardUrl: o,
124
+ platformProxyUrl: f,
125
+ baseUrl: g,
126
+ registryDocuments: M,
127
+ pendingDocuments: N,
128
+ proxyUrl: I,
129
+ proxyUrlRaw: F,
130
+ mode: _,
131
+ terms: R,
132
+ isLoggedIn: S,
133
+ addDocument: K,
134
+ addDocumentAsync: q,
135
+ removeDocument: J,
136
+ getAccessToken: C,
137
+ getAgentKey: T,
138
+ api: U,
139
+ uploadedTmpDocumentUrl: L,
140
+ curatedDocuments: P,
141
+ getActiveDocumentJson: O,
142
+ hideAddApi: A
143
+ };
144
+ }
145
+ function k() {
146
+ let e = f(T);
147
+ if (!e) throw Error("No state provided.");
148
+ return e;
149
+ }
150
+ //#endregion
151
+ export { T as STATE_SYMBOL, O as createState, k as useState };
152
+
153
+ //# sourceMappingURL=state.js.map
@@ -0,0 +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 { 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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"}
@@ -0,0 +1,10 @@
1
+ import e from "../../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./Catalog.vue.script.js";
3
+ /* empty css */
4
+ /* empty css */
5
+ //#region src/views/Catalog/Catalog.vue
6
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-bc24f891"]]);
7
+ //#endregion
8
+ export { n as default };
9
+
10
+ //# sourceMappingURL=Catalog.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Catalog.vue.js","names":[],"sources":["../../../src/views/Catalog/Catalog.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ScalarIcon,\n ScalarModal,\n ScalarSearchInput,\n type ModalState,\n} from '@scalar/components'\nimport { computed } from 'vue'\n\nimport { useSearch } from '@/hooks/use-search'\nimport { useState } from '@/state/state'\n\ndefineProps<{\n modal: ModalState\n}>()\n\nconst search = useSearch()\n\nconst state = useState()\n\nconst searchOptions = computed(() =>\n search.results.value\n .filter((r) => {\n return !state.registryDocuments.value.some(\n (d) => d.namespace === r.namespace && d.slug === r.slug,\n )\n })\n .map((result) => ({\n ...result,\n label: result.title,\n id: result.id,\n })),\n)\n</script>\n\n<template>\n <ScalarModal\n class=\"catalogModal\"\n :state=\"modal\">\n <ScalarSearchInput\n autofocus\n class=\"searchInput\"\n :modelValue=\"search.query.value\"\n @update:modelValue=\"(v) => (search.query.value = v ?? '')\" />\n <template v-if=\"searchOptions.length\">\n <div class=\"catalog custom-scroll\">\n <button\n v-for=\"option in searchOptions\"\n :key=\"option.id\"\n class=\"item\"\n type=\"button\"\n @click=\"\n () => {\n state.addDocument(option)\n modal.hide()\n }\n \">\n <div class=\"left\">\n <img\n v-if=\"option.logoUrl\"\n class=\"logo\"\n :src=\"option.logoUrl\" />\n <ScalarIcon\n v-else\n class=\"logo\"\n logo=\"Openapi\" />\n </div>\n\n <div class=\"right\">\n <div class=\"item-top\">\n <span>{{ option.title }}</span>\n\n <span class=\"version\">v{{ option.currentVersion }}</span>\n </div>\n\n <span class=\"description\">\n @{{ option.namespace }}/{{ option.slug }}\n </span>\n </div>\n </button>\n </div>\n </template>\n </ScalarModal>\n</template>\n\n<style>\n.catalogModal .scalar-modal-body {\n display: flex;\n flex-direction: column;\n}\n</style>\n\n<style scoped>\n.searchInput {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n margin-bottom: 10px;\n}\n.catalog {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n overflow-y: scroll;\n font-size: var(--scalar-font-size-3);\n}\n.item {\n display: flex;\n padding: 15px;\n gap: 10px;\n align-items: center;\n background-color: var(--scalar-background-2);\n border-radius: var(--scalar-radius-lg);\n transition: background-color 160ms ease;\n}\n.item:hover {\n background-color: color-mix(\n in srgb,\n var(--scalar-background-3),\n transparent 40%\n ) !important;\n}\n.left {\n align-items: center;\n}\n.right {\n display: flex;\n flex-direction: column;\n}\n.logo {\n width: 25px;\n}\n.item-top {\n display: flex;\n gap: 10px;\n}\n.version {\n background: var(--scalar-background-3);\n padding: 2px 5px;\n border-radius: var(--scalar-radius);\n font-size: var(--scalar-font-size-5);\n color: var(--scalar-color-3);\n}\n.description {\n color: var(--scalar-color-2);\n}\n</style>\n"],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import { useState as e } from "../../state/state.js";
2
+ import { useSearch as t } from "../../hooks/use-search.js";
3
+ import { Fragment as n, computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createVNode as c, defineComponent as l, openBlock as u, renderList as d, toDisplayString as f, unref as p, withCtx as m } from "vue";
4
+ import { ScalarIcon as h, ScalarModal as g, ScalarSearchInput as _ } from "@scalar/components";
5
+ //#region src/views/Catalog/Catalog.vue?vue&type=script&setup=true&lang.ts
6
+ var v = {
7
+ key: 0,
8
+ class: "catalog custom-scroll"
9
+ }, y = ["onClick"], b = { class: "left" }, x = ["src"], S = { class: "right" }, C = { class: "item-top" }, w = { class: "version" }, T = { class: "description" }, E = /* @__PURE__ */ l({
10
+ __name: "Catalog",
11
+ props: { modal: {} },
12
+ setup(l) {
13
+ let E = t(), D = e(), O = r(() => E.results.value.filter((e) => !D.registryDocuments.value.some((t) => t.namespace === e.namespace && t.slug === e.slug)).map((e) => ({
14
+ ...e,
15
+ label: e.title,
16
+ id: e.id
17
+ })));
18
+ return (e, t) => (u(), i(p(g), {
19
+ class: "catalogModal",
20
+ state: l.modal
21
+ }, {
22
+ default: m(() => [c(p(_), {
23
+ autofocus: "",
24
+ class: "searchInput",
25
+ modelValue: p(E).query.value,
26
+ "onUpdate:modelValue": t[0] ||= (e) => p(E).query.value = e ?? ""
27
+ }, null, 8, ["modelValue"]), O.value.length ? (u(), o("div", v, [(u(!0), o(n, null, d(O.value, (e) => (u(), o("button", {
28
+ key: e.id,
29
+ class: "item",
30
+ type: "button",
31
+ onClick: () => {
32
+ p(D).addDocument(e), l.modal.hide();
33
+ }
34
+ }, [s("div", b, [e.logoUrl ? (u(), o("img", {
35
+ key: 0,
36
+ class: "logo",
37
+ src: e.logoUrl
38
+ }, null, 8, x)) : (u(), i(p(h), {
39
+ key: 1,
40
+ class: "logo",
41
+ logo: "Openapi"
42
+ }))]), s("div", S, [s("div", C, [s("span", null, f(e.title), 1), s("span", w, "v" + f(e.currentVersion), 1)]), s("span", T, " @" + f(e.namespace) + "/" + f(e.slug), 1)])], 8, y))), 128))])) : a("", !0)]),
43
+ _: 1
44
+ }, 8, ["state"]));
45
+ }
46
+ });
47
+ //#endregion
48
+ export { E as default };
49
+
50
+ //# sourceMappingURL=Catalog.vue.script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Catalog.vue.script.js","names":[],"sources":["../../../src/views/Catalog/Catalog.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ScalarIcon,\n ScalarModal,\n ScalarSearchInput,\n type ModalState,\n} from '@scalar/components'\nimport { computed } from 'vue'\n\nimport { useSearch } from '@/hooks/use-search'\nimport { useState } from '@/state/state'\n\ndefineProps<{\n modal: ModalState\n}>()\n\nconst search = useSearch()\n\nconst state = useState()\n\nconst searchOptions = computed(() =>\n search.results.value\n .filter((r) => {\n return !state.registryDocuments.value.some(\n (d) => d.namespace === r.namespace && d.slug === r.slug,\n )\n })\n .map((result) => ({\n ...result,\n label: result.title,\n id: result.id,\n })),\n)\n</script>\n\n<template>\n <ScalarModal\n class=\"catalogModal\"\n :state=\"modal\">\n <ScalarSearchInput\n autofocus\n class=\"searchInput\"\n :modelValue=\"search.query.value\"\n @update:modelValue=\"(v) => (search.query.value = v ?? '')\" />\n <template v-if=\"searchOptions.length\">\n <div class=\"catalog custom-scroll\">\n <button\n v-for=\"option in searchOptions\"\n :key=\"option.id\"\n class=\"item\"\n type=\"button\"\n @click=\"\n () => {\n state.addDocument(option)\n modal.hide()\n }\n \">\n <div class=\"left\">\n <img\n v-if=\"option.logoUrl\"\n class=\"logo\"\n :src=\"option.logoUrl\" />\n <ScalarIcon\n v-else\n class=\"logo\"\n logo=\"Openapi\" />\n </div>\n\n <div class=\"right\">\n <div class=\"item-top\">\n <span>{{ option.title }}</span>\n\n <span class=\"version\">v{{ option.currentVersion }}</span>\n </div>\n\n <span class=\"description\">\n @{{ option.namespace }}/{{ option.slug }}\n </span>\n </div>\n </button>\n </div>\n </template>\n </ScalarModal>\n</template>\n\n<style>\n.catalogModal .scalar-modal-body {\n display: flex;\n flex-direction: column;\n}\n</style>\n\n<style scoped>\n.searchInput {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n margin-bottom: 10px;\n}\n.catalog {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n overflow-y: scroll;\n font-size: var(--scalar-font-size-3);\n}\n.item {\n display: flex;\n padding: 15px;\n gap: 10px;\n align-items: center;\n background-color: var(--scalar-background-2);\n border-radius: var(--scalar-radius-lg);\n transition: background-color 160ms ease;\n}\n.item:hover {\n background-color: color-mix(\n in srgb,\n var(--scalar-background-3),\n transparent 40%\n ) !important;\n}\n.left {\n align-items: center;\n}\n.right {\n display: flex;\n flex-direction: column;\n}\n.logo {\n width: 25px;\n}\n.item-top {\n display: flex;\n gap: 10px;\n}\n.version {\n background: var(--scalar-background-3);\n padding: 2px 5px;\n border-radius: var(--scalar-radius);\n font-size: var(--scalar-font-size-5);\n color: var(--scalar-color-3);\n}\n.description {\n color: var(--scalar-color-2);\n}\n</style>\n"],"mappings":";;;;;;;;;;;;EAgBA,IAAM,IAAS,GAAU,EAEnB,IAAQ,GAAS,EAEjB,IAAgB,QACpB,EAAO,QAAQ,MACZ,QAAQ,MACA,CAAC,EAAM,kBAAkB,MAAM,MACnC,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,KACrD,CACD,CACA,KAAK,OAAY;GAChB,GAAG;GACH,OAAO,EAAO;GACd,IAAI,EAAO;GACZ,EAAE,CACP;yBAIE,EA8Cc,EAAA,EAAA,EAAA;GA7CZ,OAAM;GACL,OAAO,EAAA;;oBAKuD,CAJ/D,EAI+D,EAAA,EAAA,EAAA;IAH7D,WAAA;IACA,OAAM;IACL,YAAY,EAAA,EAAM,CAAC,MAAM;IACzB,uBAAiB,AAAA,EAAA,QAAG,MAAO,EAAA,EAAM,CAAC,MAAM,QAAQ,KAAC;gCACpC,EAAA,MAAc,UAAA,GAAA,EAC5B,EAmCM,OAnCN,GAmCM,EAAA,EAAA,GAAA,EAlCJ,EAiCS,GAAA,MAAA,EAhCU,EAAA,QAAV,YADT,EAiCS,UAAA;IA/BN,KAAK,EAAO;IACb,OAAM;IACN,MAAK;IACJ,eAAA;AAAkF,KAAxC,EAAA,EAAK,CAAC,YAAY,EAAM,EAAgB,EAAA,MAAM,MAAI;;OAM7F,EASM,OATN,GASM,CAPI,EAAO,WAAA,GAAA,EADf,EAG0B,OAAA;;IADxB,OAAM;IACL,KAAK,EAAO;2BACf,EAGmB,EAAA,EAAA,EAAA;;IADjB,OAAM;IACN,MAAK;UAGT,EAUM,OAVN,GAUM,CATJ,EAIM,OAJN,GAIM,CAHJ,EAA+B,QAAA,MAAA,EAAtB,EAAO,MAAK,EAAA,EAAA,EAErB,EAAyD,QAAzD,GAAsB,MAAC,EAAG,EAAO,eAAc,EAAA,EAAA,CAAA,CAAA,EAGjD,EAEO,QAFP,GAA0B,OACvB,EAAG,EAAO,UAAS,GAAG,MAAC,EAAG,EAAO,KAAI,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,GAAA,EAAA"}
@@ -0,0 +1,9 @@
1
+ import e from "../../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./Chat.vue.script.js";
3
+ /* empty css */
4
+ //#region src/views/Chat/Chat.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-db4ff6c9"]]);
6
+ //#endregion
7
+ export { n as default };
8
+
9
+ //# sourceMappingURL=Chat.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chat.vue.js","names":[],"sources":["../../../src/views/Chat/Chat.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ToolUIPart } from 'ai'\nimport { reactive, toRef } from 'vue'\n\nimport { ASK_FOR_AUTHENTICATION_TOOL_NAME } from '@/entities/tools/ask-for-authentication'\nimport { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME } from '@/entities/tools/execute-request'\nimport { GET_MINI_OPENAPI_SPEC_TOOL_NAME } from '@/entities/tools/get-mini-openapi-spec'\nimport { GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME } from '@/entities/tools/get-openapi-spec-summary'\nimport { useState, type Tools } from '@/state/state'\nimport AskForAuthentication from '@/views/Chat/Messages/AskForAuthentication.vue'\nimport ExecuteRequestTool from '@/views/Chat/Messages/ExecuteRequestTool.vue'\nimport GetMiniOpenAPIDocTool from '@/views/Chat/Messages/GetMiniOpenAPIDocTool.vue'\nimport GetOpenAPISpecsSummary from '@/views/Chat/Messages/GetOpenAPISpecsSummary.vue'\nimport Text from '@/views/Chat/Messages/Text.vue'\nimport PromptForm from '@/views/PromptForm.vue'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'uploadApi'): void\n}>()\n\nconst state = useState()\n</script>\n\n<template>\n <div class=\"chat\">\n <template\n v-for=\"message in state.chat.messages\"\n :key=\"message.id\">\n <template v-if=\"message.role === 'user'\">\n <div\n v-for=\"(part, index) in message.parts\"\n :key=\"`${message.id}-${index}`\"\n class=\"userMessage\">\n <p v-if=\"part.type === 'text'\">{{ part.text }}</p>\n </div>\n </template>\n <template v-if=\"message.role === 'assistant'\">\n <div\n v-for=\"(part, index) in message.parts\"\n :key=\"`${message.id}-${index}`\">\n <Text\n v-if=\"part.type === 'text'\"\n :messagePart=\"toRef(part)\" />\n <ExecuteRequestTool\n v-if=\"part.type.endsWith(EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME)\"\n :messagePart=\"\n toRef(\n part as ToolUIPart<\n Pick<Tools, typeof EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME>\n >,\n )\n \" />\n <GetMiniOpenAPIDocTool\n v-if=\"part.type.endsWith(GET_MINI_OPENAPI_SPEC_TOOL_NAME)\"\n :message=\"reactive(message)\"\n :messagePart=\"\n toRef(\n part as ToolUIPart<\n Pick<Tools, typeof GET_MINI_OPENAPI_SPEC_TOOL_NAME>\n >,\n )\n \" />\n <GetOpenAPISpecsSummary\n v-if=\"part.type.endsWith(GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME)\"\n :message=\"reactive(message)\"\n :messagePart=\"\n toRef(\n part as ToolUIPart<\n Pick<Tools, typeof GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME>\n >,\n )\n \" />\n <AskForAuthentication\n v-if=\"part.type.endsWith(ASK_FOR_AUTHENTICATION_TOOL_NAME)\"\n :message=\"reactive(message)\"\n :messagePart=\"\n toRef(\n part as ToolUIPart<\n Pick<Tools, typeof ASK_FOR_AUTHENTICATION_TOOL_NAME>\n >,\n )\n \" />\n </div>\n </template>\n </template>\n <div class=\"spacer\"></div>\n </div>\n <div class=\"formContainer\">\n <PromptForm\n @submit=\"emit('submit')\"\n @uploadApi=\"emit('uploadApi')\" />\n </div>\n</template>\n\n<style scoped>\n.chat {\n flex: 1;\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 24px 0;\n max-width: 744px;\n}\n\n.userMessage {\n padding-top: 6px;\n padding-bottom: 6px;\n padding-inline: 16px;\n border-radius: 18px;\n background: var(--scalar-background-2);\n width: fit-content;\n max-width: 80%;\n margin-left: auto;\n font-size: 16px;\n line-height: 24px;\n color: var(--scalar-color-1);\n margin-bottom: 12px;\n}\ndiv + .userMessage {\n margin-top: 64px;\n}\n.chat > :deep(div:has(.executeRequestTool)) + div:has(.executeRequestTool) {\n margin-top: -12px;\n}\n.spacer {\n min-height: 280px;\n width: 100%;\n}\n\n.formContainer {\n position: fixed;\n bottom: 20px;\n width: 100%;\n max-width: 744px;\n z-index: 1;\n}\n.chat :deep(.markdown) {\n margin-bottom: 12px;\n}\n</style>\n"],"mappings":""}
@@ -0,0 +1,55 @@
1
+ import "../../entities/tools/ask-for-authentication.js";
2
+ import "../../entities/tools/execute-request.js";
3
+ import "../../entities/tools/get-mini-openapi-spec.js";
4
+ import "../../entities/tools/get-openapi-spec-summary.js";
5
+ import { useState as e } from "../../state/state.js";
6
+ import t from "./Messages/AskForAuthentication.vue.js";
7
+ import n from "./Messages/ExecuteRequestTool.vue.js";
8
+ import r from "./Messages/GetMiniOpenAPIDocTool.vue.js";
9
+ import i from "./Messages/GetOpenAPISpecsSummary.vue.js";
10
+ import a from "./Messages/Text.vue.js";
11
+ import o from "../PromptForm.vue.js";
12
+ import { Fragment as s, createBlock as c, createCommentVNode as l, createElementBlock as u, createElementVNode as d, createVNode as f, defineComponent as p, openBlock as m, reactive as h, renderList as g, toDisplayString as _, toRef as v, unref as y } from "vue";
13
+ //#region src/views/Chat/Chat.vue?vue&type=script&setup=true&lang.ts
14
+ var b = { class: "chat" }, x = { key: 0 }, S = { class: "formContainer" }, C = /* @__PURE__ */ p({
15
+ __name: "Chat",
16
+ emits: ["submit", "uploadApi"],
17
+ setup(p, { emit: C }) {
18
+ let w = C, T = e();
19
+ return (e, p) => (m(), u(s, null, [d("div", b, [(m(!0), u(s, null, g(y(T).chat.messages, (e) => (m(), u(s, { key: e.id }, [e.role === "user" ? (m(!0), u(s, { key: 0 }, g(e.parts, (t, n) => (m(), u("div", {
20
+ key: `${e.id}-${n}`,
21
+ class: "userMessage"
22
+ }, [t.type === "text" ? (m(), u("p", x, _(t.text), 1)) : l("", !0)]))), 128)) : l("", !0), e.role === "assistant" ? (m(!0), u(s, { key: 1 }, g(e.parts, (o, s) => (m(), u("div", { key: `${e.id}-${s}` }, [
23
+ o.type === "text" ? (m(), c(a, {
24
+ key: 0,
25
+ messagePart: v(o)
26
+ }, null, 8, ["messagePart"])) : l("", !0),
27
+ o.type.endsWith(y("execute-request")) ? (m(), c(n, {
28
+ key: 1,
29
+ messagePart: v(o)
30
+ }, null, 8, ["messagePart"])) : l("", !0),
31
+ o.type.endsWith(y("get-mini-openapi-spec")) ? (m(), c(r, {
32
+ key: 2,
33
+ message: h(e),
34
+ messagePart: v(o)
35
+ }, null, 8, ["message", "messagePart"])) : l("", !0),
36
+ o.type.endsWith(y("get-openapi-specs-summary")) ? (m(), c(i, {
37
+ key: 3,
38
+ message: h(e),
39
+ messagePart: v(o)
40
+ }, null, 8, ["message", "messagePart"])) : l("", !0),
41
+ o.type.endsWith(y("ask-for-authentication")) ? (m(), c(t, {
42
+ key: 4,
43
+ message: h(e),
44
+ messagePart: v(o)
45
+ }, null, 8, ["message", "messagePart"])) : l("", !0)
46
+ ]))), 128)) : l("", !0)], 64))), 128)), p[2] ||= d("div", { class: "spacer" }, null, -1)]), d("div", S, [f(o, {
47
+ onSubmit: p[0] ||= (e) => w("submit"),
48
+ onUploadApi: p[1] ||= (e) => w("uploadApi")
49
+ })])], 64));
50
+ }
51
+ });
52
+ //#endregion
53
+ export { C as default };
54
+
55
+ //# sourceMappingURL=Chat.vue.script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chat.vue.script.js","names":[],"sources":["../../../src/views/Chat/Chat.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ToolUIPart } from 'ai'\nimport { reactive, toRef } from 'vue'\n\nimport { ASK_FOR_AUTHENTICATION_TOOL_NAME } from '@/entities/tools/ask-for-authentication'\nimport { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME } from '@/entities/tools/execute-request'\nimport { GET_MINI_OPENAPI_SPEC_TOOL_NAME } from '@/entities/tools/get-mini-openapi-spec'\nimport { GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME } from '@/entities/tools/get-openapi-spec-summary'\nimport { useState, type Tools } from '@/state/state'\nimport AskForAuthentication from '@/views/Chat/Messages/AskForAuthentication.vue'\nimport ExecuteRequestTool from '@/views/Chat/Messages/ExecuteRequestTool.vue'\nimport GetMiniOpenAPIDocTool from '@/views/Chat/Messages/GetMiniOpenAPIDocTool.vue'\nimport GetOpenAPISpecsSummary from '@/views/Chat/Messages/GetOpenAPISpecsSummary.vue'\nimport Text from '@/views/Chat/Messages/Text.vue'\nimport PromptForm from '@/views/PromptForm.vue'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'uploadApi'): void\n}>()\n\nconst state = useState()\n</script>\n\n<template>\n <div class=\"chat\">\n <template\n v-for=\"message in state.chat.messages\"\n :key=\"message.id\">\n <template v-if=\"message.role === 'user'\">\n <div\n v-for=\"(part, index) in message.parts\"\n :key=\"`${message.id}-${index}`\"\n class=\"userMessage\">\n <p v-if=\"part.type === 'text'\">{{ part.text }}</p>\n </div>\n </template>\n <template v-if=\"message.role === 'assistant'\">\n <div\n v-for=\"(part, index) in message.parts\"\n :key=\"`${message.id}-${index}`\">\n <Text\n v-if=\"part.type === 'text'\"\n :messagePart=\"toRef(part)\" />\n <ExecuteRequestTool\n v-if=\"part.type.endsWith(EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME)\"\n :messagePart=\"\n toRef(\n part as ToolUIPart<\n Pick<Tools, typeof EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME>\n >,\n )\n \" />\n <GetMiniOpenAPIDocTool\n v-if=\"part.type.endsWith(GET_MINI_OPENAPI_SPEC_TOOL_NAME)\"\n :message=\"reactive(message)\"\n :messagePart=\"\n toRef(\n part as ToolUIPart<\n Pick<Tools, typeof GET_MINI_OPENAPI_SPEC_TOOL_NAME>\n >,\n )\n \" />\n <GetOpenAPISpecsSummary\n v-if=\"part.type.endsWith(GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME)\"\n :message=\"reactive(message)\"\n :messagePart=\"\n toRef(\n part as ToolUIPart<\n Pick<Tools, typeof GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME>\n >,\n )\n \" />\n <AskForAuthentication\n v-if=\"part.type.endsWith(ASK_FOR_AUTHENTICATION_TOOL_NAME)\"\n :message=\"reactive(message)\"\n :messagePart=\"\n toRef(\n part as ToolUIPart<\n Pick<Tools, typeof ASK_FOR_AUTHENTICATION_TOOL_NAME>\n >,\n )\n \" />\n </div>\n </template>\n </template>\n <div class=\"spacer\"></div>\n </div>\n <div class=\"formContainer\">\n <PromptForm\n @submit=\"emit('submit')\"\n @uploadApi=\"emit('uploadApi')\" />\n </div>\n</template>\n\n<style scoped>\n.chat {\n flex: 1;\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 24px 0;\n max-width: 744px;\n}\n\n.userMessage {\n padding-top: 6px;\n padding-bottom: 6px;\n padding-inline: 16px;\n border-radius: 18px;\n background: var(--scalar-background-2);\n width: fit-content;\n max-width: 80%;\n margin-left: auto;\n font-size: 16px;\n line-height: 24px;\n color: var(--scalar-color-1);\n margin-bottom: 12px;\n}\ndiv + .userMessage {\n margin-top: 64px;\n}\n.chat > :deep(div:has(.executeRequestTool)) + div:has(.executeRequestTool) {\n margin-top: -12px;\n}\n.spacer {\n min-height: 280px;\n width: 100%;\n}\n\n.formContainer {\n position: fixed;\n bottom: 20px;\n width: 100%;\n max-width: 744px;\n z-index: 1;\n}\n.chat :deep(.markdown) {\n margin-bottom: 12px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;EAgBA,IAAM,IAAO,GAKP,IAAQ,GAAS;qCAIrB,EA8DM,OA9DN,GA8DM,EAAA,EAAA,GAAA,EA7DJ,EA2DW,GAAA,MAAA,EA1DS,EAAA,EAAK,CAAC,KAAK,WAAtB,wBACD,EAAQ,IAAA,EAAA,CACE,EAAQ,SAAI,UAAA,EAAA,GAAA,EAC1B,EAKM,GAAA,EAAA,KAAA,GAAA,EAAA,EAJoB,EAAQ,QAAxB,GAAM,YADhB,EAKM,OAAA;GAHH,KAAG,GAAK,EAAQ,GAAE,GAAI;GACvB,OAAM;MACG,EAAK,SAAI,UAAA,GAAA,EAAlB,EAAkD,KAAA,GAAA,EAAhB,EAAK,KAAI,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA,CAAA,CAAA,uBAG/B,EAAQ,SAAI,eAAA,EAAA,GAAA,EAC1B,EA6CM,GAAA,EAAA,KAAA,GAAA,EAAA,EA5CoB,EAAQ,QAAxB,GAAM,YADhB,EA6CM,OAAA,EA3CH,KAAG,GAAK,EAAQ,GAAE,GAAI,KAAA,EAAA;GAEf,EAAK,SAAI,UAAA,GAAA,EADjB,EAE+B,GAAA;;IAA5B,aAAa,EAAM,EAAI;;GAElB,EAAK,KAAK,SAAS,EAAA,kBAAqC,CAAA,IAAA,GAAA,EADhE,EAQM,GAAA;;IANH,aAA4B,EAAuB,EAAA;;GAQ9C,EAAK,KAAK,SAAS,EAAA,wBAA+B,CAAA,IAAA,GAAA,EAD1D,EASM,GAAA;;IAPH,SAAS,EAAS,EAAO;IACzB,aAA4B,EAAuB,EAAA;;GAQ9C,EAAK,KAAK,SAAS,EAAA,4BAAmC,CAAA,IAAA,GAAA,EAD9D,EASM,GAAA;;IAPH,SAAS,EAAS,EAAO;IACzB,aAA4B,EAAuB,EAAA;;GAQ9C,EAAK,KAAK,SAAS,EAAA,yBAAgC,CAAA,IAAA,GAAA,EAD3D,EASM,GAAA;;IAPH,SAAS,EAAS,EAAO;IACzB,aAA4B,EAAuB,EAAA;;mDAU5D,EAA0B,OAAA,EAArB,OAAM,UAAQ,EAAA,MAAA,GAAA,CAAA,CAAA,EAErB,EAIM,OAJN,GAIM,CAHJ,EAEmC,GAAA;GADhC,UAAM,AAAA,EAAA,QAAA,MAAE,EAAI,SAAA;GACZ,aAAS,AAAA,EAAA,QAAA,MAAE,EAAI,YAAA"}
@@ -1,7 +1,7 @@
1
1
  import type { ToolUIPart } from 'ai';
2
2
  import { type Ref } from 'vue';
3
- import { ASK_FOR_AUTHENTICATION_TOOL_NAME } from '../../../entities/tools/ask-for-authentication';
4
- import { type Tools } from '../../../state/state';
3
+ import { ASK_FOR_AUTHENTICATION_TOOL_NAME } from '../../../entities/tools/ask-for-authentication.js';
4
+ import { type Tools } from '../../../state/state.js';
5
5
  type __VLS_Props = {
6
6
  messagePart: Ref<ToolUIPart<Pick<Tools, typeof ASK_FOR_AUTHENTICATION_TOOL_NAME>>>;
7
7
  };
@@ -0,0 +1,9 @@
1
+ import e from "../../../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./AskForAuthentication.vue.script.js";
3
+ /* empty css */
4
+ //#region src/views/Chat/Messages/AskForAuthentication.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-8af07610"]]);
6
+ //#endregion
7
+ export { n as default };
8
+
9
+ //# sourceMappingURL=AskForAuthentication.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskForAuthentication.vue.js","names":[],"sources":["../../../../src/views/Chat/Messages/AskForAuthentication.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { getSelectedServer } from '@scalar/api-client/v2/features/operation'\nimport { getActiveEnvironment, getServers } from '@scalar/api-client/v2/helpers'\nimport { ScalarButton } from '@scalar/components'\nimport { ScalarIconArrowRight } from '@scalar/icons'\nimport type { ToolUIPart } from 'ai'\nimport { computed, type Ref } from 'vue'\n\nimport AuthenticationProvided from '@/components/AuthenticationProvided.vue'\nimport AuthenticationRequired from '@/components/AuthenticationRequired.vue'\nimport { ASK_FOR_AUTHENTICATION_TOOL_NAME } from '@/entities/tools/ask-for-authentication'\nimport { TOOL_NAMESPACE_SLUG_DELIMITER } from '@/entities/tools/constants'\nimport { createDocumentName } from '@/registry/create-document-name'\nimport { useState, type Tools } from '@/state/state'\nimport Auth from '@/views/Settings/Auth.vue'\n\nconst { messagePart } = defineProps<{\n messagePart: Ref<\n ToolUIPart<Pick<Tools, typeof ASK_FOR_AUTHENTICATION_TOOL_NAME>>\n >\n}>()\n\nconst { workspaceStore, eventBus, config, chat } = useState()\n\nconst documentName = computed(() => {\n if (\n !messagePart.value.input?.uniqueIdentifier ||\n messagePart.value.state !== 'input-available'\n ) {\n return\n }\n\n const [namespace, slug] = messagePart.value.input.uniqueIdentifier.split(\n TOOL_NAMESPACE_SLUG_DELIMITER,\n )\n if (!namespace || !slug) {\n return\n }\n\n return createDocumentName(namespace, slug)\n})\n\nconst document = computed(() => {\n if (!documentName.value) {\n return\n }\n\n return workspaceStore.workspace.documents[documentName.value]\n})\n\nconst environment = computed(() => {\n if (!document.value) {\n return\n }\n\n return getActiveEnvironment(workspaceStore, document.value)\n})\n\nconst selectedServer = computed(() => {\n if (!document.value) {\n return\n }\n\n const servers = getServers(document.value.servers, {\n documentUrl: document.value['x-scalar-original-source-url'],\n })\n\n return getSelectedServer(servers, document.value['x-scalar-selected-server'])\n})\n\nconst isAuthenticationExpanded = computed(\n () => documentName.value && environment.value && selectedServer.value,\n)\n\nasync function authorizeClicked() {\n await chat.addToolOutput({\n toolCallId: messagePart.value.toolCallId,\n output: 'Authentication provided.',\n tool: ASK_FOR_AUTHENTICATION_TOOL_NAME,\n state: 'output-available',\n })\n}\n</script>\n\n<template>\n <div\n class=\"askForAuthentication\"\n :class=\"{\n open: isAuthenticationExpanded,\n }\">\n <div class=\"toggleButton\">\n <AuthenticationProvided\n v-if=\"messagePart.value.state === 'output-available'\" />\n <AuthenticationRequired\n v-if=\"messagePart.value.state === 'input-available'\" />\n <ScalarButton\n v-if=\"messagePart.value.state === 'input-available'\"\n class=\"authorizeButton\"\n size=\"xs\"\n @click=\"authorizeClicked\">\n Authorize\n <ScalarIconArrowRight weight=\"bold\" />\n </ScalarButton>\n </div>\n <div class=\"authContent\">\n <div class=\"authContentInner\">\n <Auth\n v-if=\"documentName && document && environment && selectedServer\"\n :authStore=\"workspaceStore.auth\"\n :document\n :environment\n :eventBus\n :name=\"documentName\"\n :options=\"config\"\n :selectedServer />\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.askForAuthentication {\n display: flex;\n flex-direction: column;\n width: 100%;\n position: relative;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n margin-bottom: 12px;\n box-shadow:\n 0 var(--scalar-border-width) 0 var(--scalar-background-1),\n 0 calc(-1 * var(--scalar-border-width)) 0 var(--scalar-background-1);\n padding: 0;\n}\n\n.authContent {\n display: grid;\n grid-template-rows: 0fr;\n min-height: 0;\n overflow: hidden;\n transition: grid-template-rows 0.2s ease-out;\n max-width: 520px;\n margin: auto;\n width: 100%;\n}\n.authContentInner :deep(> div) {\n margin: 36px 0 48px 0;\n}\n.authContent :deep(.markdown) {\n margin-bottom: 0 !important;\n}\n.askForAuthentication.open .authContent {\n grid-template-rows: 1fr;\n}\n\n.continueButton {\n align-self: flex-end;\n}\n\n.toggleButton {\n background: none;\n border: none;\n cursor: pointer;\n text-align: left;\n position: relative;\n display: flex;\n align-items: center;\n color: var(--scalar-color-3);\n justify-content: space-between;\n border-radius: var(--scalar-radius-lg);\n}\n\n.authContentInner {\n min-height: 0;\n overflow: hidden;\n}\n\n.authorizeButton {\n background: var(--scalar-color-blue) !important;\n color: white !important;\n margin: 0 !important;\n z-index: 1;\n display: flex;\n gap: 5px;\n}\n</style>\n"],"mappings":""}