@scalar/agent-chat 0.12.44 → 0.12.45

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 (78) hide show
  1. package/dist/App.test.d.ts +2 -0
  2. package/dist/App.test.d.ts.map +1 -0
  3. package/dist/App.vue.d.ts +4 -0
  4. package/dist/App.vue.d.ts.map +1 -1
  5. package/dist/App.vue.js.map +1 -1
  6. package/dist/App.vue.script.js +2 -0
  7. package/dist/App.vue.script.js.map +1 -1
  8. package/dist/Chat.vue.d.ts.map +1 -1
  9. package/dist/Chat.vue.js.map +1 -1
  10. package/dist/Chat.vue.script.js +13 -5
  11. package/dist/Chat.vue.script.js.map +1 -1
  12. package/dist/components/UploadSection.vue.js +1 -1
  13. package/dist/components/UploadSection.vue.js.map +1 -1
  14. package/dist/components/UploadSection.vue.script.js +2 -2
  15. package/dist/components/UploadSection.vue.script.js.map +1 -1
  16. package/dist/entities/tools/get-openapi-specs-summary.d.ts +3 -2
  17. package/dist/entities/tools/get-openapi-specs-summary.d.ts.map +1 -1
  18. package/dist/entities/tools/get-openapi-specs-summary.js.map +1 -1
  19. package/dist/entities/tools/search-openapi-operations.d.ts +2 -1
  20. package/dist/entities/tools/search-openapi-operations.d.ts.map +1 -1
  21. package/dist/entities/tools/search-openapi-operations.js.map +1 -1
  22. package/dist/helpers/get-search-result-labels.d.ts +3 -0
  23. package/dist/helpers/get-search-result-labels.d.ts.map +1 -0
  24. package/dist/helpers/get-search-result-labels.js +38 -0
  25. package/dist/helpers/get-search-result-labels.js.map +1 -0
  26. package/dist/helpers/get-search-result-labels.test.d.ts +2 -0
  27. package/dist/helpers/get-search-result-labels.test.d.ts.map +1 -0
  28. package/dist/helpers.d.ts +0 -3
  29. package/dist/helpers.d.ts.map +1 -1
  30. package/dist/helpers.js +2 -5
  31. package/dist/helpers.js.map +1 -1
  32. package/dist/hooks/use-agent-key-documents.js +1 -1
  33. package/dist/hooks/use-agent-key-documents.js.map +1 -1
  34. package/dist/hooks/use-upload-tmp-document.d.ts +1 -1
  35. package/dist/hooks/use-upload-tmp-document.d.ts.map +1 -1
  36. package/dist/hooks/use-upload-tmp-document.js +24 -17
  37. package/dist/hooks/use-upload-tmp-document.js.map +1 -1
  38. package/dist/package.json +2 -1
  39. package/dist/registry/add-documents-to-store.d.ts.map +1 -1
  40. package/dist/registry/add-documents-to-store.js.map +1 -1
  41. package/dist/state/state.d.ts +5 -1
  42. package/dist/state/state.d.ts.map +1 -1
  43. package/dist/state/state.js +15 -6
  44. package/dist/state/state.js.map +1 -1
  45. package/dist/state/state.test.d.ts +2 -0
  46. package/dist/state/state.test.d.ts.map +1 -0
  47. package/dist/style.css +79 -71
  48. package/dist/views/Chat/Messages/AskForAuthentication.vue.d.ts.map +1 -1
  49. package/dist/views/Chat/Messages/AskForAuthentication.vue.js +1 -1
  50. package/dist/views/Chat/Messages/AskForAuthentication.vue.js.map +1 -1
  51. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js +44 -35
  52. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js.map +1 -1
  53. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.d.ts.map +1 -1
  54. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js +1 -1
  55. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js.map +1 -1
  56. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js +8 -3
  57. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js.map +1 -1
  58. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.d.ts.map +1 -1
  59. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.js +1 -1
  60. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.js.map +1 -1
  61. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.script.js +6 -9
  62. package/dist/views/Chat/Messages/SearchOpenAPIOperationsTool.vue.script.js.map +1 -1
  63. package/dist/views/PromptForm.vue.d.ts.map +1 -1
  64. package/dist/views/PromptForm.vue.js +1 -1
  65. package/dist/views/PromptForm.vue.js.map +1 -1
  66. package/dist/views/PromptForm.vue.script.js +0 -1
  67. package/dist/views/PromptForm.vue.script.js.map +1 -1
  68. package/dist/views/Settings/Settings.vue.d.ts.map +1 -1
  69. package/dist/views/Settings/Settings.vue.js +1 -1
  70. package/dist/views/Settings/Settings.vue.js.map +1 -1
  71. package/dist/views/Settings/Settings.vue.script.js +10 -6
  72. package/dist/views/Settings/Settings.vue.script.js.map +1 -1
  73. package/dist/views/Start.vue.js +1 -1
  74. package/dist/views/Start.vue.js.map +1 -1
  75. package/dist/views/Start.vue.script.js +1 -1
  76. package/dist/views/Start.vue.script.js.map +1 -1
  77. package/dist/vue-styles.css +71 -71
  78. package/package.json +7 -6
@@ -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 { coerce, object, string, validate } from '@scalar/validation'\nimport { ref } from 'vue'\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\nconst tmpDocSchema = object({\n namespace: string(),\n slug: string(),\n})\n\nexport function getTmpDocFromLocalStorage() {\n const tmpDoc = localStorage.getItem(TMP_DOC_LS_KEY)\n if (!tmpDoc) {\n return\n }\n\n return coerce(tmpDocSchema, 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 uploadResponseSchema = object({ url: string(), namespace: string(), slug: string() })\n\n if (!validate(uploadResponseSchema, json)) {\n uploadState.value = {\n type: 'error',\n error: 'Failed to process document.',\n }\n return\n }\n\n const uploadData = coerce(uploadResponseSchema, json)\n\n uploadState.value = {\n type: 'processing',\n }\n const embeddingStatusResponse = await fetch(\n createUrl(`/vector/registry/embeddings/${uploadData.namespace}/${uploadData.slug}`),\n {\n method: 'GET',\n },\n )\n\n saveTmpDocumentInLocalStorage({\n namespace: uploadData.namespace,\n slug: uploadData.slug,\n })\n\n await state.addDocument({\n namespace: uploadData.namespace,\n slug: uploadData.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 = uploadData.url\n\n setTimeout(() => {\n uploadState.value = undefined\n }, SHOW_UPLOAD_SUCCESS_DELAY)\n\n return uploadData\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,4BAA4B;AASlC,IAAM,iBAAiB;AAEvB,SAAS,8BAA8B,EAAE,WAAW,QAA6C;CAC/F,aAAa,QAAQ,gBAAgB,KAAK,UAAU;EAAE;EAAW;CAAK,CAAC,CAAC;AAC1E;AAEA,IAAM,eAAe,OAAO;CAC1B,WAAW,OAAO;CAClB,MAAM,OAAO;AACf,CAAC;AAED,SAAgB,4BAA4B;CAC1C,MAAM,SAAS,aAAa,QAAQ,cAAc;CAClD,IAAI,CAAC,QACH;CAGF,OAAO,OAAO,cAAc,KAAK,MAAM,MAAM,CAAC;AAChD;AAEA,SAAgB,+BAA+B;CAE7C,IAAI,CADW,aAAa,QAAQ,cAC/B,GACH;CAGF,aAAa,WAAW,cAAc;AACxC;;;;AAKA,SAAgB,uBAAuB;CACrC,MAAM,QAAQ,SAAS;CACvB,MAAM,cAAc,IAA4B;CAEhD,SAAS,UAAU,MAAc;EAC/B,MAAM,UAAU,GAAG,MAAM,UAAU;EACnC,OAAO,gBAAgB,MAAM,kBAAkB,OAAO;CACxD;CAEA,eAAe,mBAAmB,UAAkB,UAAU,OAAO;EACnE,IAAI;GACF,YAAY,QAAQ,EAClB,MAAM,YACR;GAEA,MAAM,WAAW,MAAM,MAAM,UAAU,0BAA0B,UAAU,kBAAkB,IAAI,GAAG;IAClG,QAAQ;IACR,SAAS,EACP,gBAAgB,mBAClB;IACA,MAAM,KAAK,UAAU,EAAE,SAAS,CAAC;GACnC,CAAC;GAED,IAAI,CAAC,SAAS,IAAI;IAChB,YAAY,QAAQ;KAClB,MAAM;KACN,OAAO;IACT;IAEA;GACF;GAEA,MAAM,OAAO,MAAM,SAAS,KAAK;GAEjC,MAAM,uBAAuB,OAAO;IAAE,KAAK,OAAO;IAAG,WAAW,OAAO;IAAG,MAAM,OAAO;GAAE,CAAC;GAE1F,IAAI,CAAC,SAAS,sBAAsB,IAAI,GAAG;IACzC,YAAY,QAAQ;KAClB,MAAM;KACN,OAAO;IACT;IACA;GACF;GAEA,MAAM,aAAa,OAAO,sBAAsB,IAAI;GAEpD,YAAY,QAAQ,EAClB,MAAM,aACR;GACA,MAAM,0BAA0B,MAAM,MACpC,UAAU,+BAA+B,WAAW,UAAU,GAAG,WAAW,MAAM,GAClF,EACE,QAAQ,MACV,CACF;GAEA,8BAA8B;IAC5B,WAAW,WAAW;IACtB,MAAM,WAAW;GACnB,CAAC;GAED,MAAM,MAAM,YAAY;IACtB,WAAW,WAAW;IACtB,MAAM,WAAW;IACjB,WAAW;IACX,KAAK;GACP,CAAC;GAED,IAAI,CAAC,wBAAwB,IAAI;IAC/B,YAAY,QAAQ;KAClB,MAAM;KACN,OAAO;IACT;IACA;GACF;GAEA,YAAY,QAAQ,EAAE,MAAM,OAAO;GACnC,MAAM,uBAAuB,QAAQ,WAAW;GAEhD,iBAAiB;IACf,YAAY,QAAQ,KAAA;GACtB,GAAG,yBAAyB;GAE5B,OAAO;EACT,QAAQ;GACN,YAAY,QAAQ;IAAE,MAAM;IAAS,OAAO;GAA0C;GACtF;EACF;CACF;CAEA,OAAO;EACL;EACA;CACF;AACF"}
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 { coerce, object, string, validate } from '@scalar/validation'\nimport { onScopeDispose } from 'vue'\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\nconst tmpDocSchema = object({\n namespace: string(),\n slug: string(),\n})\n\nexport function getTmpDocFromLocalStorage() {\n const tmpDoc = localStorage.getItem(TMP_DOC_LS_KEY)\n if (!tmpDoc) {\n return\n }\n\n return coerce(tmpDocSchema, 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 API description.\n */\nexport function useUploadTmpDocument() {\n const state = useState()\n const { uploadState } = state\n const controller = new AbortController()\n onScopeDispose(() => controller.abort())\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 signal: controller.signal,\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 API description.',\n }\n\n return\n }\n\n const json = await response.json()\n\n const uploadResponseSchema = object({ url: string(), namespace: string(), slug: string() })\n\n if (!validate(uploadResponseSchema, json)) {\n uploadState.value = {\n type: 'error',\n error: 'Failed to process document.',\n }\n return\n }\n\n const uploadData = coerce(uploadResponseSchema, json)\n\n uploadState.value = {\n type: 'processing',\n }\n const embeddingStatusResponse = await fetch(\n createUrl(`/vector/registry/embeddings/${uploadData.namespace}/${uploadData.slug}`),\n {\n method: 'GET',\n signal: controller.signal,\n },\n )\n\n if (!embeddingStatusResponse.ok) {\n uploadState.value = {\n type: 'error',\n error: 'Failed to embed document.',\n }\n return\n }\n\n await state.addDocument({\n namespace: uploadData.namespace,\n slug: uploadData.slug,\n removable: false,\n tmp: true,\n })\n\n if (controller.signal.aborted) {\n return\n }\n saveTmpDocumentInLocalStorage({ namespace: uploadData.namespace, slug: uploadData.slug })\n uploadState.value = { type: 'done' }\n state.uploadedTmpDocumentUrl.value = uploadData.url\n\n setTimeout(() => {\n uploadState.value = undefined\n }, SHOW_UPLOAD_SUCCESS_DELAY)\n\n return uploadData\n } catch {\n if (controller.signal.aborted) {\n return\n }\n uploadState.value = { type: 'error', error: 'Failed to upload your API description.' }\n return\n }\n }\n\n return {\n uploadTempDocument,\n uploadState,\n }\n}\n"],"mappings":";;;;;AAMA,IAAM,4BAA4B;AASlC,IAAM,iBAAiB;AAEvB,SAAS,8BAA8B,EAAE,WAAW,QAA6C;CAC/F,aAAa,QAAQ,gBAAgB,KAAK,UAAU;EAAE;EAAW;CAAK,CAAC,CAAC;AAC1E;AAEA,IAAM,eAAe,OAAO;CAC1B,WAAW,OAAO;CAClB,MAAM,OAAO;AACf,CAAC;AAED,SAAgB,4BAA4B;CAC1C,MAAM,SAAS,aAAa,QAAQ,cAAc;CAClD,IAAI,CAAC,QACH;CAGF,OAAO,OAAO,cAAc,KAAK,MAAM,MAAM,CAAC;AAChD;AAEA,SAAgB,+BAA+B;CAE7C,IAAI,CADW,aAAa,QAAQ,cAC/B,GACH;CAGF,aAAa,WAAW,cAAc;AACxC;;;;AAKA,SAAgB,uBAAuB;CACrC,MAAM,QAAQ,SAAS;CACvB,MAAM,EAAE,gBAAgB;CACxB,MAAM,aAAa,IAAI,gBAAgB;CACvC,qBAAqB,WAAW,MAAM,CAAC;CAEvC,SAAS,UAAU,MAAc;EAC/B,MAAM,UAAU,GAAG,MAAM,UAAU;EACnC,OAAO,gBAAgB,MAAM,kBAAkB,OAAO;CACxD;CAEA,eAAe,mBAAmB,UAAkB,UAAU,OAAO;EACnE,IAAI;GACF,YAAY,QAAQ,EAClB,MAAM,YACR;GAEA,MAAM,WAAW,MAAM,MAAM,UAAU,0BAA0B,UAAU,kBAAkB,IAAI,GAAG;IAClG,QAAQ;IACR,QAAQ,WAAW;IACnB,SAAS,EACP,gBAAgB,mBAClB;IACA,MAAM,KAAK,UAAU,EAAE,SAAS,CAAC;GACnC,CAAC;GAED,IAAI,CAAC,SAAS,IAAI;IAChB,YAAY,QAAQ;KAClB,MAAM;KACN,OAAO;IACT;IAEA;GACF;GAEA,MAAM,OAAO,MAAM,SAAS,KAAK;GAEjC,MAAM,uBAAuB,OAAO;IAAE,KAAK,OAAO;IAAG,WAAW,OAAO;IAAG,MAAM,OAAO;GAAE,CAAC;GAE1F,IAAI,CAAC,SAAS,sBAAsB,IAAI,GAAG;IACzC,YAAY,QAAQ;KAClB,MAAM;KACN,OAAO;IACT;IACA;GACF;GAEA,MAAM,aAAa,OAAO,sBAAsB,IAAI;GAEpD,YAAY,QAAQ,EAClB,MAAM,aACR;GASA,IAAI,EAAC,MARiC,MACpC,UAAU,+BAA+B,WAAW,UAAU,GAAG,WAAW,MAAM,GAClF;IACE,QAAQ;IACR,QAAQ,WAAW;GACrB,CACF,EAAA,CAE6B,IAAI;IAC/B,YAAY,QAAQ;KAClB,MAAM;KACN,OAAO;IACT;IACA;GACF;GAEA,MAAM,MAAM,YAAY;IACtB,WAAW,WAAW;IACtB,MAAM,WAAW;IACjB,WAAW;IACX,KAAK;GACP,CAAC;GAED,IAAI,WAAW,OAAO,SACpB;GAEF,8BAA8B;IAAE,WAAW,WAAW;IAAW,MAAM,WAAW;GAAK,CAAC;GACxF,YAAY,QAAQ,EAAE,MAAM,OAAO;GACnC,MAAM,uBAAuB,QAAQ,WAAW;GAEhD,iBAAiB;IACf,YAAY,QAAQ,KAAA;GACtB,GAAG,yBAAyB;GAE5B,OAAO;EACT,QAAQ;GACN,IAAI,WAAW,OAAO,SACpB;GAEF,YAAY,QAAQ;IAAE,MAAM;IAAS,OAAO;GAAyC;GACrF;EACF;CACF;CAEA,OAAO;EACL;EACA;CACF;AACF"}
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.12.44",
13
+ "version": "0.12.45",
14
14
  "engines": {
15
15
  "node": ">=22"
16
16
  },
@@ -80,6 +80,7 @@
80
80
  "@tailwindcss/vite": "catalog:*",
81
81
  "@types/jsdom": "catalog:*",
82
82
  "@vitejs/plugin-vue": "catalog:*",
83
+ "@vue/test-utils": "catalog:*",
83
84
  "hono": "catalog:*",
84
85
  "jsdom": "catalog:*",
85
86
  "tailwindcss": "catalog:*",
@@ -1 +1 @@
1
- {"version":3,"file":"add-documents-to-store.d.ts","sourceRoot":"","sources":["../../src/registry/add-documents-to-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAE9B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAI/D,eAAO,MAAM,YAAY;eAYV,MAAM;UACX,MAAM;oBACI,cAAc;qBACb,MAAM,MAAM;uBACV,GAAG,CAAC,WAAW,EAAE,CAAC;iBACxB,MAAM;YACX,OAAO,CAAC,yBAAyB,CAAC;SACrC,GAAG;gBACI,OAAO;;;;;;;;;;;;;;;;;;;;;gHA6DtB,CAAA"}
1
+ {"version":3,"file":"add-documents-to-store.d.ts","sourceRoot":"","sources":["../../src/registry/add-documents-to-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAE5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAE9B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAI/D,eAAO,MAAM,YAAY;eAYV,MAAM;UACX,MAAM;oBACI,cAAc;qBACb,MAAM,MAAM;uBACV,GAAG,CAAC,WAAW,EAAE,CAAC;iBACxB,MAAM;YACX,OAAO,CAAC,yBAAyB,CAAC;SACrC,GAAG;gBACI,OAAO;;;;;;;;;;;;;;;;;;;;;gHA6DtB,CAAA"}
@@ -1 +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 { openApiDocument } from '@scalar/workspace-store/plugins/bundler'\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 getAccessToken,\n registryUrl,\n config,\n api,\n removable,\n }: {\n namespace: string\n slug: string\n workspaceStore: WorkspaceStore\n getAccessToken?: () => string\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 headers: {\n headers: HeadersInit\n domains: string[]\n }[] = []\n\n const token = getAccessToken?.()\n\n if (token) {\n headers.push({\n domains: [new URL(registryUrl).host],\n headers: {\n 'x-scalar-auth': token,\n },\n })\n }\n\n const document: OpenAPIV3_1.Document = await bundle(url.toString(), {\n plugins: [\n openApiDocument(),\n fetchUrls({\n headers,\n }),\n ],\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":";;;;;;;;AAeA,IAAa,eAAe,EAAE,OAC5B,OAAO,EACL,WACA,MACA,gBACA,mBACA,gBACA,aACA,QACA,KACA,gBAWI;CACJ,MAAM,oBAAoB,MAAM,IAAI,YAAY;EAC9C;EACA;CACF,CAAC;CAED,IAAI,CAAC,kBAAkB,SACrB,OAAO;CAGT,kBAAkB,MAAM,KAAK;EAAE,GAAG,kBAAkB;EAAM;CAAU,CAAC;CAErE,MAAM,MAAM,IAAI,IAAI,KAAK,UAAU,QAAQ,KAAK,UAAU,WAAW;CAErE,MAAM,UAGA,CAAC;CAEP,MAAM,QAAQ,iBAAiB;CAE/B,IAAI,OACF,QAAQ,KAAK;EACX,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,IAAI;EACnC,SAAS,EACP,iBAAiB,MACnB;CACF,CAAC;CAGH,MAAM,WAAiC,MAAM,OAAO,IAAI,SAAS,GAAG;EAClE,SAAS,CACP,gBAAgB,GAChB,UAAU,EACR,QACF,CAAC,CACH;EACA,WAAW;CACb,CAAC;CAED,MAAM,eAAe,mBAAmB,WAAW,IAAI;CAEvD,MAAM,eAAe,YACnB;EACE,MAAM;EACN;CACF,GACA,MACF;CAEA,eAAe,OAAO,4BAA4B,YAAY;CAE9D,8BAA8B;EAAE;EAAc;CAAe,CAAC;CAE9D,OAAO;EACL,SAAS;EACT,MAAM,kBAAkB;CAC1B;AACF,IACC,kBAAkB,YAAY,2BAA2B,aAAa,CACzE"}
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 { AsyncApiDocument } from '@scalar/types/asyncapi/3.1'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport { openApiDocument } from '@scalar/workspace-store/plugins/bundler'\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 getAccessToken,\n registryUrl,\n config,\n api,\n removable,\n }: {\n namespace: string\n slug: string\n workspaceStore: WorkspaceStore\n getAccessToken?: () => string\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 headers: {\n headers: HeadersInit\n domains: string[]\n }[] = []\n\n const token = getAccessToken?.()\n\n if (token) {\n headers.push({\n domains: [new URL(registryUrl).host],\n headers: {\n 'x-scalar-auth': token,\n },\n })\n }\n\n const document: OpenAPIV3_1.Document | AsyncApiDocument = await bundle(url.toString(), {\n plugins: [\n openApiDocument(),\n fetchUrls({\n headers,\n }),\n ],\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":";;;;;;;;AAgBA,IAAa,eAAe,EAAE,OAC5B,OAAO,EACL,WACA,MACA,gBACA,mBACA,gBACA,aACA,QACA,KACA,gBAWI;CACJ,MAAM,oBAAoB,MAAM,IAAI,YAAY;EAC9C;EACA;CACF,CAAC;CAED,IAAI,CAAC,kBAAkB,SACrB,OAAO;CAGT,kBAAkB,MAAM,KAAK;EAAE,GAAG,kBAAkB;EAAM;CAAU,CAAC;CAErE,MAAM,MAAM,IAAI,IAAI,KAAK,UAAU,QAAQ,KAAK,UAAU,WAAW;CAErE,MAAM,UAGA,CAAC;CAEP,MAAM,QAAQ,iBAAiB;CAE/B,IAAI,OACF,QAAQ,KAAK;EACX,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,IAAI;EACnC,SAAS,EACP,iBAAiB,MACnB;CACF,CAAC;CAGH,MAAM,WAAoD,MAAM,OAAO,IAAI,SAAS,GAAG;EACrF,SAAS,CACP,gBAAgB,GAChB,UAAU,EACR,QACF,CAAC,CACH;EACA,WAAW;CACb,CAAC;CAED,MAAM,eAAe,mBAAmB,WAAW,IAAI;CAEvD,MAAM,eAAe,YACnB;EACE,MAAM;EACN;CACF,GACA,MACF;CAEA,eAAe,OAAO,4BAA4B,YAAY;CAE9D,8BAA8B;EAAE;EAAc;CAAe,CAAC;CAE9D,OAAO;EACL,SAAS;EACT,MAAM,kBAAkB;CAC1B;AACF,IACC,kBAAkB,YAAY,2BAA2B,aAAa,CACzE"}
@@ -11,6 +11,7 @@ import type { ASK_FOR_AUTHENTICATION_TOOL_NAME, AskForAuthenticationInput } from
11
11
  import { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME, type ExecuteClientSideRequestToolInput, type ExecuteClientSideRequestToolOutput } from '../entities/tools/execute-request.js';
12
12
  import type { GetOpenAPISpecsSummaryToolOutput, SUMMARIZE_OPENAPI_SPECS_TOOL_NAME } from '../entities/tools/get-openapi-specs-summary.js';
13
13
  import type { SEARCH_OPENAPI_OPERATIONS_TOOL_NAME, SearchOpenAPIOperationsToolInput, SearchOpenAPIOperationsToolOutput } from '../entities/tools/search-openapi-operations.js';
14
+ import { type UploadTmpDocumentState } from '../hooks/use-upload-tmp-document.js';
14
15
  import type { ChatMode } from '../types';
15
16
  export type RegistryDocument = {
16
17
  namespace: string;
@@ -75,12 +76,14 @@ type State = {
75
76
  getAccessToken?: () => string;
76
77
  getAgentKey?: () => string;
77
78
  api: Api;
79
+ uploadState: Ref<UploadTmpDocumentState | undefined>;
78
80
  uploadedTmpDocumentUrl: Ref<string | undefined>;
79
81
  curatedDocuments: Ref<ApiMetadata[]>;
80
82
  getActiveDocumentJson?: () => string;
83
+ getActiveDocumentContext?: () => string | undefined;
81
84
  hideAddApi?: boolean;
82
85
  };
83
- export declare function createState({ initialRegistryDocuments, registryUrl, dashboardUrl, platformProxyUrl, baseUrl, mode, isLoggedIn, getAccessToken, getAgentKey, getActiveDocumentJson, prefilledMessageRef, hideAddApi, }: {
86
+ export declare function createState({ initialRegistryDocuments, registryUrl, dashboardUrl, platformProxyUrl, baseUrl, mode, isLoggedIn, getAccessToken, getAgentKey, getActiveDocumentJson, getActiveDocumentContext, prefilledMessageRef, hideAddApi, }: {
84
87
  initialRegistryDocuments: {
85
88
  namespace: string;
86
89
  slug: string;
@@ -94,6 +97,7 @@ export declare function createState({ initialRegistryDocuments, registryUrl, das
94
97
  getAccessToken?: () => string;
95
98
  getAgentKey?: () => string;
96
99
  getActiveDocumentJson?: () => string;
100
+ getActiveDocumentContext?: () => string | undefined;
97
101
  prefilledMessageRef?: Ref<string>;
98
102
  hideAddApi?: boolean;
99
103
  }): State;
@@ -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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"}
@@ -17,6 +17,7 @@ import { apiReferenceConfigurationSchema } from "@scalar/schemas/api-reference";
17
17
  import { coerce } from "@scalar/validation";
18
18
  import { createWorkspaceStore } from "@scalar/workspace-store/client";
19
19
  import { createWorkspaceEventBus } from "@scalar/workspace-store/events";
20
+ import { isAsyncApiDocument } from "@scalar/workspace-store/schemas/type-guards";
20
21
  import { DefaultChatTransport, lastAssistantMessageIsCompleteWithToolCalls } from "ai";
21
22
  import { n } from "neverpanic";
22
23
  //#region src/state/state.ts
@@ -35,6 +36,15 @@ function createChat({ registryDocuments, workspaceStore, baseUrl, proxyUrl, getA
35
36
  }),
36
37
  async onToolCall({ toolCall }) {
37
38
  if (toolCall.dynamic) return;
39
+ if ((toolCall.toolName === "execute-request" || toolCall.toolName === "ask-for-authentication") && isAsyncApiDocument(workspaceStore.workspace.documents[toolCall.input.documentName])) {
40
+ chat.addToolOutput({
41
+ tool: toolCall.toolName,
42
+ toolCallId: toolCall.toolCallId,
43
+ state: "output-error",
44
+ errorText: "Live AsyncAPI messaging and authentication are not supported in Ask AI. Ask for an explanation or code example instead."
45
+ });
46
+ return;
47
+ }
38
48
  if (toolCall.toolName === "execute-request" && toolCall.input.method.toLowerCase() === "get") await executeRequestTool({
39
49
  documentSettings: createDocumentSettings(workspaceStore),
40
50
  input: toolCall.input,
@@ -46,7 +56,7 @@ function createChat({ registryDocuments, workspaceStore, baseUrl, proxyUrl, getA
46
56
  });
47
57
  return chat;
48
58
  }
49
- function createState({ initialRegistryDocuments, registryUrl, dashboardUrl, platformProxyUrl, baseUrl, mode, isLoggedIn, getAccessToken, getAgentKey, getActiveDocumentJson, prefilledMessageRef, hideAddApi }) {
59
+ function createState({ initialRegistryDocuments, registryUrl, dashboardUrl, platformProxyUrl, baseUrl, mode, isLoggedIn, getAccessToken, getAgentKey, getActiveDocumentJson, getActiveDocumentContext, prefilledMessageRef, hideAddApi }) {
50
60
  const prompt = ref(prefilledMessageRef?.value ?? "");
51
61
  const registryDocuments = ref([]);
52
62
  const pendingDocuments = reactive({});
@@ -78,11 +88,8 @@ function createState({ initialRegistryDocuments, registryUrl, dashboardUrl, plat
78
88
  watch(() => chat.status, () => {
79
89
  if (chat.status === "streaming") prompt.value = "";
80
90
  });
81
- if (prefilledMessageRef) watch(prefilledMessageRef, async (val) => {
82
- if (val) {
83
- prompt.value = val;
84
- if (terms.accepted.value) await chat.sendMessage({ text: prompt.value });
85
- }
91
+ if (prefilledMessageRef) watch(prefilledMessageRef, (val) => {
92
+ if (val) prompt.value = val;
86
93
  });
87
94
  const settingsModal = useModal();
88
95
  async function addDocument({ namespace, slug, removable = true, tmp = false }) {
@@ -180,9 +187,11 @@ function createState({ initialRegistryDocuments, registryUrl, dashboardUrl, plat
180
187
  getAccessToken,
181
188
  getAgentKey,
182
189
  api,
190
+ uploadState: ref(),
183
191
  uploadedTmpDocumentUrl,
184
192
  curatedDocuments,
185
193
  getActiveDocumentJson,
194
+ getActiveDocumentContext,
186
195
  hideAddApi
187
196
  };
188
197
  }
@@ -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/modal'\nimport { apiReferenceConfigurationSchema } from '@scalar/schemas/api-reference'\nimport type { ApiReferenceConfigurationRaw } from '@scalar/types/api-reference'\nimport { useToasts } from '@scalar/use-toasts'\nimport { coerce } from '@scalar/validation'\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 GetOpenAPISpecsSummaryToolOutput,\n SUMMARIZE_OPENAPI_SPECS_TOOL_NAME,\n} from '@/entities/tools/get-openapi-specs-summary'\nimport type {\n SEARCH_OPENAPI_OPERATIONS_TOOL_NAME,\n SearchOpenAPIOperationsToolInput,\n SearchOpenAPIOperationsToolOutput,\n} from '@/entities/tools/search-openapi-operations'\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 [SEARCH_OPENAPI_OPERATIONS_TOOL_NAME]: {\n input: SearchOpenAPIOperationsToolInput\n output: SearchOpenAPIOperationsToolOutput\n }\n [EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME]: {\n input: ExecuteClientSideRequestToolInput\n output: ExecuteClientSideRequestToolOutput\n }\n [SUMMARIZE_OPENAPI_SPECS_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 }),\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 coerce(apiReferenceConfigurationSchema, {\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 getAccessToken,\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 getAccessToken,\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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"}
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/modal'\nimport { apiReferenceConfigurationSchema } from '@scalar/schemas/api-reference'\nimport type { ApiReferenceConfigurationRaw } from '@scalar/types/api-reference'\nimport { useToasts } from '@scalar/use-toasts'\nimport { coerce } from '@scalar/validation'\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 { isAsyncApiDocument } from '@scalar/workspace-store/schemas/type-guards'\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 GetOpenAPISpecsSummaryToolOutput,\n SUMMARIZE_OPENAPI_SPECS_TOOL_NAME,\n} from '@/entities/tools/get-openapi-specs-summary'\nimport type {\n SEARCH_OPENAPI_OPERATIONS_TOOL_NAME,\n SearchOpenAPIOperationsToolInput,\n SearchOpenAPIOperationsToolOutput,\n} from '@/entities/tools/search-openapi-operations'\nimport { createDocumentSettings } from '@/helpers'\nimport { useTermsAndConditions } from '@/hooks/use-term-and-conditions'\nimport { type UploadTmpDocumentState, 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 [SEARCH_OPENAPI_OPERATIONS_TOOL_NAME]: {\n input: SearchOpenAPIOperationsToolInput\n output: SearchOpenAPIOperationsToolOutput\n }\n [EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME]: {\n input: ExecuteClientSideRequestToolInput\n output: ExecuteClientSideRequestToolOutput\n }\n [SUMMARIZE_OPENAPI_SPECS_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 uploadState: Ref<UploadTmpDocumentState | undefined>\n uploadedTmpDocumentUrl: Ref<string | undefined>\n curatedDocuments: Ref<ApiMetadata[]>\n getActiveDocumentJson?: () => string\n getActiveDocumentContext?: () => string | undefined\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 }),\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.toolName === 'ask-for-authentication') &&\n isAsyncApiDocument(workspaceStore.workspace.documents[toolCall.input.documentName])\n ) {\n // Tool callbacks run inside the stream queue; enqueue the result without waiting on that queue.\n void chat.addToolOutput({\n tool: toolCall.toolName,\n toolCallId: toolCall.toolCallId,\n state: 'output-error',\n errorText:\n 'Live AsyncAPI messaging and authentication are not supported in Ask AI. Ask for an explanation or code example instead.',\n })\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 getActiveDocumentContext,\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 getActiveDocumentContext?: () => string | undefined\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 coerce(apiReferenceConfigurationSchema, {\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, (val) => {\n if (val) {\n prompt.value = val\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 getAccessToken,\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 getAccessToken,\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 uploadState: ref<UploadTmpDocumentState>(),\n uploadedTmpDocumentUrl,\n curatedDocuments,\n getActiveDocumentJson,\n getActiveDocumentContext,\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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=state.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.test.d.ts","sourceRoot":"","sources":["../../src/state/state.test.ts"],"names":[],"mappings":""}