@assistant-ui/react-devtools 1.2.7 → 1.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/utils/diff.js
CHANGED
|
@@ -8,7 +8,7 @@ const isPlainObject = (value) => value !== null && typeof value === "object" &&
|
|
|
8
8
|
const diffValues = (before, after, base = "") => {
|
|
9
9
|
if (isPlainObject(before) && isPlainObject(after)) {
|
|
10
10
|
const entries = [];
|
|
11
|
-
const keys = new Set([...Object.keys(before), ...Object.keys(after)]);
|
|
11
|
+
const keys = /* @__PURE__ */ new Set([...Object.keys(before), ...Object.keys(after)]);
|
|
12
12
|
for (const key of keys) {
|
|
13
13
|
const path = base ? `${base}.${key}` : key;
|
|
14
14
|
const hasBefore = key in before;
|
package/dist/utils/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","names":["DiffEntry","path","kind","before","after","isPlainObject","value","Record","Array","isArray","diffValues","base","entries","keys","Set","Object","key","hasBefore","hasAfter","push","JSON","stringify"],"sources":["../../src/utils/diff.ts"],"sourcesContent":["export interface DiffEntry {\n path: string;\n kind: \"added\" | \"removed\" | \"changed\";\n before?: unknown;\n after?: unknown;\n}\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\n\n/**\n * Structural diff of two JSON-safe values by dotted path. Objects recurse\n * key-by-key; arrays and primitives are compared as whole leaves. Used for the\n * opt-in event payload diff, where most payloads are shallow.\n */\nexport const diffValues = (\n before: unknown,\n after: unknown,\n base = \"\",\n): DiffEntry[] => {\n if (isPlainObject(before) && isPlainObject(after)) {\n const entries: DiffEntry[] = [];\n const keys = new Set([...Object.keys(before), ...Object.keys(after)]);\n for (const key of keys) {\n const path = base ? `${base}.${key}` : key;\n const hasBefore = key in before;\n const hasAfter = key in after;\n if (hasBefore && !hasAfter) {\n entries.push({ path, kind: \"removed\", before: before[key] });\n } else if (!hasBefore && hasAfter) {\n entries.push({ path, kind: \"added\", after: after[key] });\n } else {\n entries.push(...diffValues(before[key], after[key], path));\n }\n }\n return entries;\n }\n\n if (JSON.stringify(before) === JSON.stringify(after)) return [];\n return [{ path: base || \"(value)\", kind: \"changed\", before, after }];\n};\n"],"mappings":";AAOA,MAAMK,iBAAiBC,UACrBA,UAAU,QAAQ,OAAOA,UAAU,YAAY,CAACE,MAAMC,QAAQH,KAAK;;;;;;AAOrE,MAAaI,cACXP,QACAC,OACAO,OAAO,OACS;CAChB,IAAIN,cAAcF,MAAM,KAAKE,cAAcD,KAAK,GAAG;EACjD,MAAMQ,UAAuB,CAAA;EAC7B,MAAMC,
|
|
1
|
+
{"version":3,"file":"diff.js","names":["DiffEntry","path","kind","before","after","isPlainObject","value","Record","Array","isArray","diffValues","base","entries","keys","Set","Object","key","hasBefore","hasAfter","push","JSON","stringify"],"sources":["../../src/utils/diff.ts"],"sourcesContent":["export interface DiffEntry {\n path: string;\n kind: \"added\" | \"removed\" | \"changed\";\n before?: unknown;\n after?: unknown;\n}\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\n\n/**\n * Structural diff of two JSON-safe values by dotted path. Objects recurse\n * key-by-key; arrays and primitives are compared as whole leaves. Used for the\n * opt-in event payload diff, where most payloads are shallow.\n */\nexport const diffValues = (\n before: unknown,\n after: unknown,\n base = \"\",\n): DiffEntry[] => {\n if (isPlainObject(before) && isPlainObject(after)) {\n const entries: DiffEntry[] = [];\n const keys = new Set([...Object.keys(before), ...Object.keys(after)]);\n for (const key of keys) {\n const path = base ? `${base}.${key}` : key;\n const hasBefore = key in before;\n const hasAfter = key in after;\n if (hasBefore && !hasAfter) {\n entries.push({ path, kind: \"removed\", before: before[key] });\n } else if (!hasBefore && hasAfter) {\n entries.push({ path, kind: \"added\", after: after[key] });\n } else {\n entries.push(...diffValues(before[key], after[key], path));\n }\n }\n return entries;\n }\n\n if (JSON.stringify(before) === JSON.stringify(after)) return [];\n return [{ path: base || \"(value)\", kind: \"changed\", before, after }];\n};\n"],"mappings":";AAOA,MAAMK,iBAAiBC,UACrBA,UAAU,QAAQ,OAAOA,UAAU,YAAY,CAACE,MAAMC,QAAQH,KAAK;;;;;;AAOrE,MAAaI,cACXP,QACAC,OACAO,OAAO,OACS;CAChB,IAAIN,cAAcF,MAAM,KAAKE,cAAcD,KAAK,GAAG;EACjD,MAAMQ,UAAuB,CAAA;EAC7B,MAAMC,uBAAO,IAAIC,IAAI,CAAC,GAAGC,OAAOF,KAAKV,MAAM,GAAG,GAAGY,OAAOF,KAAKT,KAAK,CAAC,CAAC;EACpE,KAAK,MAAMY,OAAOH,MAAM;GACtB,MAAMZ,OAAOU,OAAO,GAAGA,KAAI,GAAIK,QAAQA;GACvC,MAAMC,YAAYD,OAAOb;GACzB,MAAMe,WAAWF,OAAOZ;GACxB,IAAIa,aAAa,CAACC,UAChBN,QAAQO,KAAK;IAAElB;IAAMC,MAAM;IAAWC,QAAQA,OAAOa;GAAK,CAAC;QACtD,IAAI,CAACC,aAAaC,UACvBN,QAAQO,KAAK;IAAElB;IAAMC,MAAM;IAASE,OAAOA,MAAMY;GAAK,CAAC;QAEvDJ,QAAQO,KAAK,GAAGT,WAAWP,OAAOa,MAAMZ,MAAMY,MAAMf,IAAI,CAAC;EAE7D;EACA,OAAOW;CACT;CAEA,IAAIQ,KAAKC,UAAUlB,MAAM,MAAMiB,KAAKC,UAAUjB,KAAK,GAAG,OAAO,CAAA;CAC7D,OAAO,CAAC;EAAEH,MAAMU,QAAQ;EAAWT,MAAM;EAAWC;EAAQC;CAAM,CAAC;AACrE"}
|
|
@@ -29,7 +29,7 @@ const sanitizeForMessage = (value, seen = /* @__PURE__ */ new WeakSet()) => {
|
|
|
29
29
|
return value;
|
|
30
30
|
};
|
|
31
31
|
const REDACTED = "[redacted]";
|
|
32
|
-
const SENSITIVE_KEYS = new Set([
|
|
32
|
+
const SENSITIVE_KEYS = /* @__PURE__ */ new Set([
|
|
33
33
|
"apikey",
|
|
34
34
|
"xapikey",
|
|
35
35
|
"accesskey",
|
|
@@ -56,7 +56,7 @@ const normalizeKey = (key) => key.toLowerCase().replace(/[-_]/g, "");
|
|
|
56
56
|
* `OPENAI_API_KEY` or a custom auth header, so every leaf inside one of these
|
|
57
57
|
* is masked wholesale.
|
|
58
58
|
*/
|
|
59
|
-
const MASK_ALL_KEYS = new Set(["env", "headers"]);
|
|
59
|
+
const MASK_ALL_KEYS = /* @__PURE__ */ new Set(["env", "headers"]);
|
|
60
60
|
/**
|
|
61
61
|
* Mask values whose key names a known credential, and mask every value inside
|
|
62
62
|
* an `env`/`headers` subtree wholesale. Operates on already sanitized plain
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialization.js","names":["ModelContext","SerializedModelContext","normalizeToolList","NormalizedTool","sanitizeForMessage","value","seen","WeakSet","undefined","Date","toISOString","Map","result","Record","key","entry","entries","String","Set","Array","from","map","isArray","has","add","filter","item","delete","Object","REDACTED","SENSITIVE_KEYS","normalizeKey","toLowerCase","replace","MASK_ALL_KEYS","redactSensitive","maskAll","normalized","sanitizeAndRedact","serializeModelContext","context","modelContext","systemValue","system","length","tools","tool","parameters","providerOptions","providerArgs","server","backendDefault","callSettings","config","keys"],"sources":["../../src/utils/serialization.ts"],"sourcesContent":["import type { ModelContext } from \"@assistant-ui/react\";\nimport type { SerializedModelContext } from \"../types\";\nimport { normalizeToolList, type NormalizedTool } from \"./toolNormalization\";\n\nexport const sanitizeForMessage = (\n value: unknown,\n seen = new WeakSet<object>(),\n): unknown => {\n // Early return for primitives\n if (value === null || value === undefined) return value;\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (typeof value === \"function\") {\n return \"[Function]\";\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (value instanceof Map) {\n const result: Record<string, unknown> = {};\n for (const [key, entry] of value.entries()) {\n result[String(key)] = sanitizeForMessage(entry, seen);\n }\n return result;\n }\n if (value instanceof Set) {\n return Array.from(value).map((entry) => sanitizeForMessage(entry, seen));\n }\n if (Array.isArray(value)) {\n if (seen.has(value as unknown as object)) return \"[Circular]\";\n seen.add(value as unknown as object);\n const result = value\n .map((entry) => sanitizeForMessage(entry, seen))\n .filter((item) => item !== undefined);\n seen.delete(value as unknown as object);\n return result;\n }\n if (typeof value === \"object\") {\n if (seen.has(value as object)) return \"[Circular]\";\n seen.add(value as object);\n const result: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(\n value as Record<string, unknown>,\n )) {\n result[key] = sanitizeForMessage(entry, seen);\n }\n seen.delete(value as object);\n return result;\n }\n return value;\n};\n\nexport const REDACTED = \"[redacted]\";\n\nconst SENSITIVE_KEYS = new Set([\n \"apikey\",\n \"xapikey\",\n \"accesskey\",\n \"authorization\",\n \"password\",\n \"passwd\",\n \"secret\",\n \"clientsecret\",\n \"token\",\n \"accesstoken\",\n \"refreshtoken\",\n \"cookie\",\n \"setcookie\",\n \"credential\",\n \"credentials\",\n \"privatekey\",\n \"bearer\",\n \"sessionid\",\n]);\n\nconst normalizeKey = (key: string) => key.toLowerCase().replace(/[-_]/g, \"\");\n\n/**\n * Subtrees that are credential maps with arbitrary, user-defined key names\n * (MCP stdio `env`, HTTP `headers`). Per-key name matching cannot catch\n * `OPENAI_API_KEY` or a custom auth header, so every leaf inside one of these\n * is masked wholesale.\n */\nconst MASK_ALL_KEYS = new Set([\"env\", \"headers\"]);\n\n/**\n * Mask values whose key names a known credential, and mask every value inside\n * an `env`/`headers` subtree wholesale. Operates on already sanitized plain\n * data (primitives, arrays, plain objects). Applied only to config-bearing\n * subtrees, never to a tool's parameters schema, so a schema property literally\n * named `token` is not corrupted.\n */\nexport const redactSensitive = (value: unknown, maskAll = false): unknown => {\n if (Array.isArray(value)) {\n return value.map((entry) => redactSensitive(entry, maskAll));\n }\n if (value && typeof value === \"object\") {\n const result: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(\n value as Record<string, unknown>,\n )) {\n const normalized = normalizeKey(key);\n result[key] =\n maskAll || SENSITIVE_KEYS.has(normalized)\n ? REDACTED\n : redactSensitive(entry, MASK_ALL_KEYS.has(normalized));\n }\n return result;\n }\n return maskAll ? REDACTED : value;\n};\n\nexport const sanitizeAndRedact = (value: unknown): unknown =>\n redactSensitive(sanitizeForMessage(value));\n\nexport const serializeModelContext = (\n context: ModelContext | undefined,\n): SerializedModelContext | undefined => {\n if (!context || typeof context !== \"object\") {\n return undefined;\n }\n\n const modelContext = context as Record<string, unknown>;\n const result: SerializedModelContext = {};\n\n const systemValue = modelContext.system;\n if (typeof systemValue === \"string\" && systemValue.length > 0) {\n result.system = systemValue;\n }\n\n const tools = normalizeToolList(modelContext.tools);\n if (tools.length > 0) {\n result.tools = tools.map((tool): NormalizedTool => {\n return {\n ...tool,\n parameters: sanitizeForMessage(tool.parameters),\n ...(tool.providerOptions !== undefined\n ? { providerOptions: sanitizeAndRedact(tool.providerOptions) }\n : {}),\n ...(tool.providerArgs !== undefined\n ? { providerArgs: sanitizeAndRedact(tool.providerArgs) }\n : {}),\n ...(tool.server !== undefined\n ? { server: sanitizeAndRedact(tool.server) }\n : {}),\n ...(tool.backendDefault !== undefined\n ? { backendDefault: sanitizeForMessage(tool.backendDefault) }\n : {}),\n };\n });\n }\n\n if (modelContext.callSettings !== undefined) {\n const callSettings = sanitizeAndRedact(modelContext.callSettings);\n if (\n callSettings &&\n typeof callSettings === \"object\" &&\n !Array.isArray(callSettings)\n ) {\n result.callSettings = callSettings as Record<string, unknown>;\n }\n }\n\n if (modelContext.config !== undefined) {\n const config = sanitizeAndRedact(modelContext.config);\n if (config && typeof config === \"object\" && !Array.isArray(config)) {\n result.config = config as Record<string, unknown>;\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n};\n"],"mappings":";;AAIA,MAAaI,sBACXC,OACAC,uBAAO,IAAIC,QAAgB,MACf;CAEZ,IAAIF,UAAU,QAAQA,UAAUG,KAAAA,GAAW,OAAOH;CAClD,IACE,OAAOA,UAAU,YACjB,OAAOA,UAAU,YACjB,OAAOA,UAAU,WAEjB,OAAOA;CAET,IAAI,OAAOA,UAAU,YACnB,OAAO;CAET,IAAIA,iBAAiBI,MACnB,OAAOJ,MAAMK,YAAY;CAE3B,IAAIL,iBAAiBM,KAAK;EACxB,MAAMC,SAAkC,CAAC;EACzC,KAAK,MAAM,CAACE,KAAKC,UAAUV,MAAMW,QAAQ,GACvCJ,OAAOK,OAAOH,GAAG,KAAKV,mBAAmBW,OAAOT,IAAI;EAEtD,OAAOM;CACT;CACA,IAAIP,iBAAiBa,KACnB,OAAOC,MAAMC,KAAKf,KAAK,CAAC,CAACgB,KAAKN,UAAUX,mBAAmBW,OAAOT,IAAI,CAAC;CAEzE,IAAIa,MAAMG,QAAQjB,KAAK,GAAG;EACxB,IAAIC,KAAKiB,IAAIlB,KAA0B,GAAG,OAAO;EACjDC,KAAKkB,IAAInB,KAA0B;EACnC,MAAMO,SAASP,MACZgB,KAAKN,UAAUX,mBAAmBW,OAAOT,IAAI,CAAC,CAAC,CAC/CmB,QAAQC,SAASA,SAASlB,KAAAA,CAAS;EACtCF,KAAKqB,OAAOtB,KAA0B;EACtC,OAAOO;CACT;CACA,IAAI,OAAOP,UAAU,UAAU;EAC7B,IAAIC,KAAKiB,IAAIlB,KAAe,GAAG,OAAO;EACtCC,KAAKkB,IAAInB,KAAe;EACxB,MAAMO,SAAkC,CAAC;EACzC,KAAK,MAAM,CAACE,KAAKC,UAAUa,OAAOZ,QAChCX,KACF,GACEO,OAAOE,OAAOV,mBAAmBW,OAAOT,IAAI;EAE9CA,KAAKqB,OAAOtB,KAAe;EAC3B,OAAOO;CACT;CACA,OAAOP;AACT;AAEA,MAAawB,WAAW;AAExB,MAAMC,
|
|
1
|
+
{"version":3,"file":"serialization.js","names":["ModelContext","SerializedModelContext","normalizeToolList","NormalizedTool","sanitizeForMessage","value","seen","WeakSet","undefined","Date","toISOString","Map","result","Record","key","entry","entries","String","Set","Array","from","map","isArray","has","add","filter","item","delete","Object","REDACTED","SENSITIVE_KEYS","normalizeKey","toLowerCase","replace","MASK_ALL_KEYS","redactSensitive","maskAll","normalized","sanitizeAndRedact","serializeModelContext","context","modelContext","systemValue","system","length","tools","tool","parameters","providerOptions","providerArgs","server","backendDefault","callSettings","config","keys"],"sources":["../../src/utils/serialization.ts"],"sourcesContent":["import type { ModelContext } from \"@assistant-ui/react\";\nimport type { SerializedModelContext } from \"../types\";\nimport { normalizeToolList, type NormalizedTool } from \"./toolNormalization\";\n\nexport const sanitizeForMessage = (\n value: unknown,\n seen = new WeakSet<object>(),\n): unknown => {\n // Early return for primitives\n if (value === null || value === undefined) return value;\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (typeof value === \"function\") {\n return \"[Function]\";\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (value instanceof Map) {\n const result: Record<string, unknown> = {};\n for (const [key, entry] of value.entries()) {\n result[String(key)] = sanitizeForMessage(entry, seen);\n }\n return result;\n }\n if (value instanceof Set) {\n return Array.from(value).map((entry) => sanitizeForMessage(entry, seen));\n }\n if (Array.isArray(value)) {\n if (seen.has(value as unknown as object)) return \"[Circular]\";\n seen.add(value as unknown as object);\n const result = value\n .map((entry) => sanitizeForMessage(entry, seen))\n .filter((item) => item !== undefined);\n seen.delete(value as unknown as object);\n return result;\n }\n if (typeof value === \"object\") {\n if (seen.has(value as object)) return \"[Circular]\";\n seen.add(value as object);\n const result: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(\n value as Record<string, unknown>,\n )) {\n result[key] = sanitizeForMessage(entry, seen);\n }\n seen.delete(value as object);\n return result;\n }\n return value;\n};\n\nexport const REDACTED = \"[redacted]\";\n\nconst SENSITIVE_KEYS = new Set([\n \"apikey\",\n \"xapikey\",\n \"accesskey\",\n \"authorization\",\n \"password\",\n \"passwd\",\n \"secret\",\n \"clientsecret\",\n \"token\",\n \"accesstoken\",\n \"refreshtoken\",\n \"cookie\",\n \"setcookie\",\n \"credential\",\n \"credentials\",\n \"privatekey\",\n \"bearer\",\n \"sessionid\",\n]);\n\nconst normalizeKey = (key: string) => key.toLowerCase().replace(/[-_]/g, \"\");\n\n/**\n * Subtrees that are credential maps with arbitrary, user-defined key names\n * (MCP stdio `env`, HTTP `headers`). Per-key name matching cannot catch\n * `OPENAI_API_KEY` or a custom auth header, so every leaf inside one of these\n * is masked wholesale.\n */\nconst MASK_ALL_KEYS = new Set([\"env\", \"headers\"]);\n\n/**\n * Mask values whose key names a known credential, and mask every value inside\n * an `env`/`headers` subtree wholesale. Operates on already sanitized plain\n * data (primitives, arrays, plain objects). Applied only to config-bearing\n * subtrees, never to a tool's parameters schema, so a schema property literally\n * named `token` is not corrupted.\n */\nexport const redactSensitive = (value: unknown, maskAll = false): unknown => {\n if (Array.isArray(value)) {\n return value.map((entry) => redactSensitive(entry, maskAll));\n }\n if (value && typeof value === \"object\") {\n const result: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(\n value as Record<string, unknown>,\n )) {\n const normalized = normalizeKey(key);\n result[key] =\n maskAll || SENSITIVE_KEYS.has(normalized)\n ? REDACTED\n : redactSensitive(entry, MASK_ALL_KEYS.has(normalized));\n }\n return result;\n }\n return maskAll ? REDACTED : value;\n};\n\nexport const sanitizeAndRedact = (value: unknown): unknown =>\n redactSensitive(sanitizeForMessage(value));\n\nexport const serializeModelContext = (\n context: ModelContext | undefined,\n): SerializedModelContext | undefined => {\n if (!context || typeof context !== \"object\") {\n return undefined;\n }\n\n const modelContext = context as Record<string, unknown>;\n const result: SerializedModelContext = {};\n\n const systemValue = modelContext.system;\n if (typeof systemValue === \"string\" && systemValue.length > 0) {\n result.system = systemValue;\n }\n\n const tools = normalizeToolList(modelContext.tools);\n if (tools.length > 0) {\n result.tools = tools.map((tool): NormalizedTool => {\n return {\n ...tool,\n parameters: sanitizeForMessage(tool.parameters),\n ...(tool.providerOptions !== undefined\n ? { providerOptions: sanitizeAndRedact(tool.providerOptions) }\n : {}),\n ...(tool.providerArgs !== undefined\n ? { providerArgs: sanitizeAndRedact(tool.providerArgs) }\n : {}),\n ...(tool.server !== undefined\n ? { server: sanitizeAndRedact(tool.server) }\n : {}),\n ...(tool.backendDefault !== undefined\n ? { backendDefault: sanitizeForMessage(tool.backendDefault) }\n : {}),\n };\n });\n }\n\n if (modelContext.callSettings !== undefined) {\n const callSettings = sanitizeAndRedact(modelContext.callSettings);\n if (\n callSettings &&\n typeof callSettings === \"object\" &&\n !Array.isArray(callSettings)\n ) {\n result.callSettings = callSettings as Record<string, unknown>;\n }\n }\n\n if (modelContext.config !== undefined) {\n const config = sanitizeAndRedact(modelContext.config);\n if (config && typeof config === \"object\" && !Array.isArray(config)) {\n result.config = config as Record<string, unknown>;\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react-devtools",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.8",
|
|
4
4
|
"description": "React development tools for assistant-ui components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"assistant-ui",
|
|
@@ -48,16 +48,16 @@
|
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@tailwindcss/cli": "^4.3.1",
|
|
51
|
-
"@types/node": "^
|
|
51
|
+
"@types/node": "^26.0.0",
|
|
52
52
|
"@types/react": "^19.2.17",
|
|
53
53
|
"@types/react-dom": "^19.2.3",
|
|
54
54
|
"react": "^19.2.7",
|
|
55
55
|
"react-dom": "^19.2.7",
|
|
56
56
|
"tailwindcss": "^4.3.1",
|
|
57
|
-
"vitest": "^4.1.
|
|
58
|
-
"@assistant-ui/
|
|
59
|
-
"@assistant-ui/
|
|
60
|
-
"@assistant-ui/
|
|
57
|
+
"vitest": "^4.1.9",
|
|
58
|
+
"@assistant-ui/tap": "0.9.3",
|
|
59
|
+
"@assistant-ui/x-buildutils": "0.0.16",
|
|
60
|
+
"@assistant-ui/react": "0.14.24"
|
|
61
61
|
},
|
|
62
62
|
"publishConfig": {
|
|
63
63
|
"access": "public",
|