@anvia/studio 0.7.40 → 0.7.42

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 (41) hide show
  1. package/dist/ui/assets/{agents-page-DQSUqZIF.js → agents-page-Bbbg-x2R.js} +2 -2
  2. package/dist/ui/assets/{agents-page-DQSUqZIF.js.map → agents-page-Bbbg-x2R.js.map} +1 -1
  3. package/dist/ui/assets/{badge-DFrH2vyb.js → badge-D7D2A73-.js} +2 -2
  4. package/dist/ui/assets/{badge-DFrH2vyb.js.map → badge-D7D2A73-.js.map} +1 -1
  5. package/dist/ui/assets/{chunk-TIV3WFSR-BCFNcVBW.js → chunk-R6QERZAB-CzentEUZ.js} +2 -2
  6. package/dist/ui/assets/chunk-R6QERZAB-CzentEUZ.js.map +1 -0
  7. package/dist/ui/assets/{evals-page-TgqTalZG.js → evals-page-CR1zsWxS.js} +2 -2
  8. package/dist/ui/assets/{evals-page-TgqTalZG.js.map → evals-page-CR1zsWxS.js.map} +1 -1
  9. package/dist/ui/assets/index-C66C9CGh.js +56 -0
  10. package/dist/ui/assets/{index-CaB9mtgz.js.map → index-C66C9CGh.js.map} +1 -1
  11. package/dist/ui/assets/{knowledge-page-G2p0MC9Q.js → knowledge-page-t_dYi3c5.js} +2 -2
  12. package/dist/ui/assets/{knowledge-page-G2p0MC9Q.js.map → knowledge-page-t_dYi3c5.js.map} +1 -1
  13. package/dist/ui/assets/{mcps-page-BTofFyB1.js → mcps-page-Cd2dn0-7.js} +2 -2
  14. package/dist/ui/assets/{mcps-page-BTofFyB1.js.map → mcps-page-Cd2dn0-7.js.map} +1 -1
  15. package/dist/ui/assets/{memory-page-Dyv23uzY.js → memory-page-f80T-0fS.js} +2 -2
  16. package/dist/ui/assets/{memory-page-Dyv23uzY.js.map → memory-page-f80T-0fS.js.map} +1 -1
  17. package/dist/ui/assets/{pipelines-page-DdItgiZv.js → pipelines-page-DMWimh3n.js} +2 -2
  18. package/dist/ui/assets/{pipelines-page-DdItgiZv.js.map → pipelines-page-DMWimh3n.js.map} +1 -1
  19. package/dist/ui/assets/{renderers-Cr02ATaq.js → renderers-BgRlCTll.js} +34 -34
  20. package/dist/ui/assets/renderers-BgRlCTll.js.map +1 -0
  21. package/dist/ui/assets/{sandboxes-page-DqkqS92e.js → sandboxes-page-CtS1MtOm.js} +2 -2
  22. package/dist/ui/assets/{sandboxes-page-DqkqS92e.js.map → sandboxes-page-CtS1MtOm.js.map} +1 -1
  23. package/dist/ui/assets/{sessions-page-kJcWll7-.js → sessions-page-DPx8oYf3.js} +2 -2
  24. package/dist/ui/assets/{sessions-page-kJcWll7-.js.map → sessions-page-DPx8oYf3.js.map} +1 -1
  25. package/dist/ui/assets/{status-page-RKMaWBCx.js → status-page-CP-rdN2T.js} +2 -2
  26. package/dist/ui/assets/{status-page-RKMaWBCx.js.map → status-page-CP-rdN2T.js.map} +1 -1
  27. package/dist/ui/assets/{tool-runner-9bssZrO4.js → tool-runner-CKSY-Xu1.js} +2 -2
  28. package/dist/ui/assets/{tool-runner-9bssZrO4.js.map → tool-runner-CKSY-Xu1.js.map} +1 -1
  29. package/dist/ui/assets/{tools-page-Mu5-Dl6L.js → tools-page-BgP8S9Cm.js} +2 -2
  30. package/dist/ui/assets/{tools-page-Mu5-Dl6L.js.map → tools-page-BgP8S9Cm.js.map} +1 -1
  31. package/dist/ui/assets/{trace-browser-BT1WTtkX.js → trace-browser-CJNK5BWY.js} +2 -2
  32. package/dist/ui/assets/{trace-browser-BT1WTtkX.js.map → trace-browser-CJNK5BWY.js.map} +1 -1
  33. package/dist/ui/assets/{transcript-item-B0HTdQVL.js → transcript-item-BO57NvIn.js} +2 -2
  34. package/dist/ui/assets/{transcript-item-B0HTdQVL.js.map → transcript-item-BO57NvIn.js.map} +1 -1
  35. package/dist/ui/assets/{utils-BN2yP0LH.js → utils-C9GMruoG.js} +2 -2
  36. package/dist/ui/assets/{utils-BN2yP0LH.js.map → utils-C9GMruoG.js.map} +1 -1
  37. package/dist/ui/index.html +3 -3
  38. package/package.json +15 -15
  39. package/dist/ui/assets/chunk-TIV3WFSR-BCFNcVBW.js.map +0 -1
  40. package/dist/ui/assets/index-CaB9mtgz.js +0 -56
  41. package/dist/ui/assets/renderers-Cr02ATaq.js.map +0 -1
@@ -9,9 +9,9 @@
9
9
  content="Professional Studio interface for Anvia agents, sessions, tools, knowledge, and traces."
10
10
  />
11
11
  <link rel="icon" type="image/png" href="/ui/assets/anvia.png" />
12
- <script type="module" crossorigin src="/ui/assets/index-CaB9mtgz.js"></script>
13
- <link rel="modulepreload" crossorigin href="/ui/assets/utils-BN2yP0LH.js">
14
- <link rel="modulepreload" crossorigin href="/ui/assets/chunk-TIV3WFSR-BCFNcVBW.js">
12
+ <script type="module" crossorigin src="/ui/assets/index-C66C9CGh.js"></script>
13
+ <link rel="modulepreload" crossorigin href="/ui/assets/utils-C9GMruoG.js">
14
+ <link rel="modulepreload" crossorigin href="/ui/assets/chunk-R6QERZAB-CzentEUZ.js">
15
15
  <link rel="modulepreload" crossorigin href="/ui/assets/format-D43vTqrO.js">
16
16
  <link rel="stylesheet" crossorigin href="/ui/assets/index-CQmSyO8y.css">
17
17
  </head>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvia/studio",
3
- "version": "0.7.40",
3
+ "version": "0.7.42",
4
4
  "description": "Studio UI and HTTP runtime for Anvia agents.",
5
5
  "author": "anvia",
6
6
  "maintainer": "Indra Zulfi",
@@ -26,26 +26,26 @@
26
26
  }
27
27
  },
28
28
  "dependencies": {
29
- "@hono/node-server": "^2.0.11",
29
+ "@hono/node-server": "^2.0.12",
30
30
  "@hugeicons/core-free-icons": "^4.2.3",
31
31
  "@hugeicons/react": "^1.1.9",
32
- "@radix-ui/react-alert-dialog": "^1.1.20",
33
- "@radix-ui/react-dialog": "^1.1.20",
34
- "@radix-ui/react-scroll-area": "^1.2.15",
35
- "@radix-ui/react-select": "^2.3.4",
36
- "@radix-ui/react-separator": "^1.1.12",
37
- "@radix-ui/react-slot": "^1.3.0",
32
+ "@radix-ui/react-alert-dialog": "^1.1.23",
33
+ "@radix-ui/react-dialog": "^1.1.23",
34
+ "@radix-ui/react-scroll-area": "^1.2.18",
35
+ "@radix-ui/react-select": "^2.3.7",
36
+ "@radix-ui/react-separator": "^1.1.15",
37
+ "@radix-ui/react-slot": "^1.3.3",
38
38
  "@tanstack/react-router": "1.170.18",
39
39
  "@xyflow/react": "^12.11.2",
40
40
  "class-variance-authority": "^0.7.1",
41
41
  "clsx": "^2.1.1",
42
- "hono": "^4.12.31",
43
- "react": "^19.2.7",
44
- "react-dom": "^19.2.7",
42
+ "hono": "^4.12.32",
43
+ "react": "^19.2.8",
44
+ "react-dom": "^19.2.8",
45
45
  "tailwind-merge": "^3.6.0",
46
- "@anvia/server": "0.5.13",
47
- "@anvia/react": "0.9.2",
48
- "@anvia/react-ui": "0.6.1"
46
+ "@anvia/react": "0.9.3",
47
+ "@anvia/react-ui": "0.6.2",
48
+ "@anvia/server": "0.5.14"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@tailwindcss/typography": "^0.5.19",
@@ -60,7 +60,7 @@
60
60
  "vite": "^8.0.10",
61
61
  "vitest": "^4.0.8",
62
62
  "zod": "^4.4.3",
63
- "@anvia/core": "0.15.0"
63
+ "@anvia/core": "0.16.0"
64
64
  },
65
65
  "peerDependencies": {
66
66
  "@anvia/core": ">=0.13.4 <1.0.0"
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk-TIV3WFSR-BCFNcVBW.js","names":[],"sources":["../../../../core/dist/chunk-TIV3WFSR.js"],"sourcesContent":["// src/completion/json.ts\nfunction isJsonValue(value) {\n return isJsonValueWithAncestors(value, /* @__PURE__ */ new WeakSet());\n}\nfunction isJsonValueWithAncestors(value, ancestors) {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") {\n return true;\n }\n if (typeof value === \"number\") {\n return Number.isFinite(value);\n }\n if (typeof value !== \"object\" || ancestors.has(value)) {\n return false;\n }\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n if (!hasOnlyDenseArrayProperties(value)) {\n return false;\n }\n for (let index = 0; index < value.length; index += 1) {\n if (!isJsonValueWithAncestors(value[index], ancestors)) {\n return false;\n }\n }\n return true;\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n return false;\n }\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== \"string\") {\n return false;\n }\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor === void 0 || !descriptor.enumerable || !(\"value\" in descriptor) || !isJsonValueWithAncestors(descriptor.value, ancestors)) {\n return false;\n }\n }\n return true;\n } catch {\n return false;\n } finally {\n ancestors.delete(value);\n }\n}\nfunction hasOnlyDenseArrayProperties(value) {\n const keys = Reflect.ownKeys(value);\n if (keys.length !== value.length + 1 || keys.at(-1) !== \"length\") {\n return false;\n }\n for (let index = 0; index < value.length; index += 1) {\n const key = String(index);\n if (keys[index] !== key) {\n return false;\n }\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor === void 0 || !descriptor.enumerable || !(\"value\" in descriptor)) {\n return false;\n }\n }\n return true;\n}\n\n// src/completion/types.ts\nvar UserContent = {\n text(text) {\n return { type: \"text\", text };\n },\n imageUrl(url, options = {}) {\n const image = { type: \"image\", source: { type: \"url\", url } };\n if (options.detail !== void 0) {\n image.detail = options.detail;\n }\n return image;\n },\n imageBase64(data, mediaType, options = {}) {\n const image = {\n type: \"image\",\n source: { type: \"base64\", data, mediaType }\n };\n if (options.detail !== void 0) {\n image.detail = options.detail;\n }\n return image;\n },\n documentUrl(url, mediaType, options = {}) {\n return {\n type: \"document\",\n source: options.filename === void 0 ? { type: \"url\", url, mediaType } : { type: \"url\", url, mediaType, filename: options.filename }\n };\n },\n documentBase64(data, mediaType, options = {}) {\n return {\n type: \"document\",\n source: options.filename === void 0 ? { type: \"base64\", data, mediaType } : { type: \"base64\", data, mediaType, filename: options.filename }\n };\n },\n documentText(text) {\n return { type: \"text\", text };\n }\n};\nvar ToolContent = {\n toolResult(id, content, callIdOrOptions, toolName) {\n const normalized = typeof content === \"string\" ? [{ type: \"text\", text: content }] : content;\n const options = normalizeToolResultOptions(callIdOrOptions, toolName);\n const result = { type: \"tool_result\", id, content: normalized };\n if (options.callId !== void 0) {\n result.callId = options.callId;\n }\n if (options.toolName !== void 0) {\n result.toolName = options.toolName;\n }\n return result;\n }\n};\nfunction normalizeToolResultOptions(callIdOrOptions, toolName) {\n if (callIdOrOptions === void 0) {\n return toolName === void 0 ? {} : { toolName };\n }\n if (typeof callIdOrOptions === \"string\") {\n return toolName === void 0 ? { callId: callIdOrOptions } : { callId: callIdOrOptions, toolName };\n }\n return toolName === void 0 ? callIdOrOptions : { ...callIdOrOptions, toolName };\n}\nfunction serializeToolResultOutput(output) {\n if (typeof output === \"string\") {\n return output;\n }\n try {\n const serialized = JSON.stringify(output);\n return serialized === void 0 ? String(output) : serialized;\n } catch {\n return String(output);\n }\n}\nfunction isToolResultContentArray(value) {\n return Array.isArray(value) && value.length > 0 && value.every((item) => {\n if (typeof item !== \"object\" || item === null || !(\"type\" in item)) {\n return false;\n }\n if (item.type === \"text\") {\n return \"text\" in item && typeof item.text === \"string\";\n }\n if (item.type === \"image\") {\n return \"data\" in item && typeof item.data === \"string\" && (!(\"mediaType\" in item) || item.mediaType === void 0 || typeof item.mediaType === \"string\");\n }\n return false;\n });\n}\nvar AssistantContent = {\n text(text) {\n return { type: \"text\", text };\n },\n imageUrl(url, options = {}) {\n const image = { type: \"image\", source: { type: \"url\", url } };\n if (options.detail !== void 0) {\n image.detail = options.detail;\n }\n return image;\n },\n imageBase64(data, mediaType, options = {}) {\n const image = {\n type: \"image\",\n source: { type: \"base64\", data, mediaType }\n };\n if (options.detail !== void 0) {\n image.detail = options.detail;\n }\n return image;\n },\n reasoning(text, id) {\n return id === void 0 ? { type: \"reasoning\", text } : { type: \"reasoning\", text, id };\n },\n reasoningFromContent(content, id) {\n const text = reasoningDisplayText(content);\n const reasoning = { type: \"reasoning\", text, content };\n return id === void 0 ? reasoning : { ...reasoning, id };\n },\n reasoningSummary(text, id) {\n return AssistantContent.reasoningFromContent([{ type: \"summary\", text }], id);\n },\n reasoningEncrypted(data, id) {\n return AssistantContent.reasoningFromContent([{ type: \"encrypted\", data }], id);\n },\n reasoningRedacted(data, id) {\n return AssistantContent.reasoningFromContent([{ type: \"redacted\", data }], id);\n },\n toolCall(id, name, args, callId) {\n const base = {\n type: \"tool_call\",\n id,\n function: {\n name,\n arguments: args\n }\n };\n return callId === void 0 ? base : { ...base, callId };\n }\n};\nfunction reasoningDisplayText(reasoning) {\n const content = Array.isArray(reasoning) ? reasoning : reasoning.content;\n if (content === void 0) {\n return Array.isArray(reasoning) ? \"\" : reasoning.text;\n }\n return content.flatMap((item) => {\n if (item.type === \"text\" || item.type === \"summary\") {\n return [item.text];\n }\n return [];\n }).join(\"\");\n}\nvar Message = {\n system(content, options = {}) {\n return { role: \"system\", content, ...messageMetadata(options) };\n },\n user(content, options = {}) {\n return {\n role: \"user\",\n content: typeof content === \"string\" ? [UserContent.text(content)] : content,\n ...messageMetadata(options)\n };\n },\n assistant(content, idOrOptions) {\n const normalized = typeof content === \"string\" ? [AssistantContent.text(content)] : content;\n const options = typeof idOrOptions === \"string\" ? { id: idOrOptions } : idOrOptions ?? {};\n const metadata = messageMetadata(options).metadata;\n const message = options.id === void 0 ? { role: \"assistant\", content: normalized } : { role: \"assistant\", id: options.id, content: normalized };\n if (metadata !== void 0) {\n message.metadata = metadata;\n }\n return message;\n },\n tool(content, options = {}) {\n return {\n role: \"tool\",\n content: Array.isArray(content) ? content : [content],\n ...messageMetadata(options)\n };\n },\n toolResult(id, output, options = {}) {\n const content = isToolResultContentArray(output) ? output : serializeToolResultOutput(output);\n return Message.tool(\n ToolContent.toolResult(id, content, {\n callId: options.callId,\n toolName: options.toolName\n }),\n { metadata: options.metadata }\n );\n }\n};\nfunction messageMetadata(options) {\n if (options.metadata === void 0) {\n return {};\n }\n if (!isJsonValue(options.metadata)) {\n throw new TypeError(\"Message metadata must be a strict JSON value.\");\n }\n return { metadata: options.metadata };\n}\nvar Usage = {\n empty() {\n return {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n cacheCreationInputTokens: 0\n };\n },\n add(left, right) {\n return {\n inputTokens: left.inputTokens + right.inputTokens,\n outputTokens: left.outputTokens + right.outputTokens,\n totalTokens: left.totalTokens + right.totalTokens,\n cachedInputTokens: left.cachedInputTokens + right.cachedInputTokens,\n cacheCreationInputTokens: left.cacheCreationInputTokens + right.cacheCreationInputTokens\n };\n }\n};\nfunction getAssistantGenerationMetadata(message) {\n if (message.role !== \"assistant\" || !isJsonObjectValue(message.metadata)) {\n return void 0;\n }\n const frameworkMetadata = message.metadata.anvia;\n if (!isJsonObjectValue(frameworkMetadata)) {\n return void 0;\n }\n const generation = frameworkMetadata.generation;\n if (!isJsonObjectValue(generation) || typeof generation.provider !== \"string\" || typeof generation.model !== \"string\" || !isUsageValue(generation.usage)) {\n return void 0;\n }\n return {\n provider: generation.provider,\n model: generation.model,\n usage: { ...generation.usage }\n };\n}\nfunction isJsonObjectValue(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction isUsageValue(value) {\n if (!isJsonObjectValue(value)) {\n return false;\n }\n return isNonnegativeFiniteNumber(value.inputTokens) && isNonnegativeFiniteNumber(value.outputTokens) && isNonnegativeFiniteNumber(value.totalTokens) && isNonnegativeFiniteNumber(value.cachedInputTokens) && isNonnegativeFiniteNumber(value.cacheCreationInputTokens);\n}\nfunction isNonnegativeFiniteNumber(value) {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\nvar CompletionCapabilityError = class extends Error {\n constructor(message) {\n super(message);\n this.name = \"CompletionCapabilityError\";\n }\n};\nfunction assertCompletionRequestSupported(model, request, options = {}) {\n const modelLabel = `${model.provider}:${request.model ?? model.defaultModel}`;\n const capabilities = model.capabilities;\n if (options.streaming === true && !capabilities.streaming) {\n throw new CompletionCapabilityError(`${modelLabel} does not support streaming completions.`);\n }\n if (request.tools.length > 0 && !capabilities.tools) {\n throw new CompletionCapabilityError(`${modelLabel} does not support tool definitions.`);\n }\n if (request.toolChoice !== void 0 && !capabilities.toolChoice) {\n throw new CompletionCapabilityError(`${modelLabel} does not support tool choice.`);\n }\n if (request.outputSchema !== void 0 && !capabilities.outputSchema) {\n throw new CompletionCapabilityError(`${modelLabel} does not support output schemas.`);\n }\n if (!capabilities.imageInput && requestHasImageInput(request)) {\n throw new CompletionCapabilityError(`${modelLabel} does not support image input.`);\n }\n if (!capabilities.documentInput && requestHasFileDocumentInput(request)) {\n throw new CompletionCapabilityError(`${modelLabel} does not support document file input.`);\n }\n}\nfunction textFromAssistantContent(content) {\n return content.flatMap((item) => item.type === \"text\" ? [item.text] : []).join(\"\\n\");\n}\nfunction requestHasImageInput(request) {\n return request.chatHistory.some(\n (message) => message.role === \"system\" ? false : message.content.some((content) => content.type === \"image\")\n );\n}\nfunction requestHasFileDocumentInput(request) {\n return request.chatHistory.some(\n (message) => message.role === \"user\" ? message.content.some(\n (content) => content.type === \"document\" && content.source.type !== \"text\"\n ) : false\n );\n}\n\nexport {\n isJsonValue,\n UserContent,\n ToolContent,\n serializeToolResultOutput,\n isToolResultContentArray,\n AssistantContent,\n reasoningDisplayText,\n Message,\n Usage,\n getAssistantGenerationMetadata,\n CompletionCapabilityError,\n assertCompletionRequestSupported,\n textFromAssistantContent\n};\n//# sourceMappingURL=chunk-TIV3WFSR.js.map"],"mappings":"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"}