@noodleseed/assistant 1.24.0 → 1.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{app-view-element-DDtXu08a.d.ts → app-view-element-BNkQab1B.d.ts} +1 -1
- package/dist/{app-view-element-DSPtyEul.d.cts → app-view-element-DhuiNW_x.d.cts} +1 -1
- package/dist/app-view.cjs +5 -5
- package/dist/app-view.cjs.map +1 -1
- package/dist/app-view.d.cts +3 -3
- package/dist/app-view.d.ts +3 -3
- package/dist/app-view.js +2 -2
- package/dist/{appearance-0nS2LFjb.d.cts → appearance-B6vSg8Ub.d.cts} +4 -0
- package/dist/{appearance-0nS2LFjb.d.ts → appearance-B6vSg8Ub.d.ts} +4 -0
- package/dist/{chunk-5NBHHNI3.js → chunk-5TYS2Q6S.js} +2 -2
- package/dist/{chunk-IBDP6PXQ.js → chunk-7BQHW37I.js} +71 -3
- package/dist/chunk-7BQHW37I.js.map +1 -0
- package/dist/{chunk-XKTUXFGX.js → chunk-CF2SCDLF.js} +6 -6
- package/dist/chunk-CF2SCDLF.js.map +1 -0
- package/dist/{chunk-6PVDV7SO.js → chunk-FJYPE4GC.js} +55 -21
- package/dist/chunk-FJYPE4GC.js.map +1 -0
- package/dist/{client-By4gqB1k.d.cts → client-BkogON2A.d.ts} +11 -1
- package/dist/{client-Cf38TgwN.d.ts → client-C07ppTU_.d.cts} +11 -1
- package/dist/client.cjs +70 -2
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +2 -2
- package/dist/client.d.ts +2 -2
- package/dist/client.js +1 -1
- package/dist/embed.global.js +70 -68
- package/dist/index.cjs +127 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/react/client.cjs +70 -2
- package/dist/react/client.cjs.map +1 -1
- package/dist/react/client.d.cts +2 -2
- package/dist/react/client.d.ts +2 -2
- package/dist/react/client.js +1 -1
- package/dist/react.cjs +127 -25
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +3 -3
- package/dist/react.d.ts +3 -3
- package/dist/react.js +4 -4
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +3 -1
- package/dist/server.d.ts +3 -1
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-6PVDV7SO.js.map +0 -1
- package/dist/chunk-IBDP6PXQ.js.map +0 -1
- package/dist/chunk-XKTUXFGX.js.map +0 -1
- /package/dist/{chunk-5NBHHNI3.js.map → chunk-5TYS2Q6S.js.map} +0 -0
package/dist/react/client.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { b as AssistantPageContext, c as AssistantContext, C as CreateAssistantClientOptions, d as AssistantChatState, A as AssistantClient } from '../client-
|
|
2
|
-
import '../appearance-
|
|
1
|
+
import { b as AssistantPageContext, c as AssistantContext, C as CreateAssistantClientOptions, d as AssistantChatState, A as AssistantClient } from '../client-C07ppTU_.cjs';
|
|
2
|
+
import '../appearance-B6vSg8Ub.cjs';
|
|
3
3
|
import 'ai';
|
|
4
4
|
|
|
5
5
|
type UseNoodleAssistantOptions<TPageContext extends AssistantPageContext = AssistantContext> = CreateAssistantClientOptions<TPageContext> & {
|
package/dist/react/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { b as AssistantPageContext, c as AssistantContext, C as CreateAssistantClientOptions, d as AssistantChatState, A as AssistantClient } from '../client-
|
|
2
|
-
import '../appearance-
|
|
1
|
+
import { b as AssistantPageContext, c as AssistantContext, C as CreateAssistantClientOptions, d as AssistantChatState, A as AssistantClient } from '../client-BkogON2A.js';
|
|
2
|
+
import '../appearance-B6vSg8Ub.js';
|
|
3
3
|
import 'ai';
|
|
4
4
|
|
|
5
5
|
type UseNoodleAssistantOptions<TPageContext extends AssistantPageContext = AssistantContext> = CreateAssistantClientOptions<TPageContext> & {
|
package/dist/react/client.js
CHANGED
package/dist/react.cjs
CHANGED
|
@@ -15197,7 +15197,7 @@ __export(react_exports, {
|
|
|
15197
15197
|
module.exports = __toCommonJS(react_exports);
|
|
15198
15198
|
var import_react2 = require("react");
|
|
15199
15199
|
|
|
15200
|
-
// ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js
|
|
15200
|
+
// ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js
|
|
15201
15201
|
init_v4();
|
|
15202
15202
|
var RELATED_TASK_META_KEY = "io.modelcontextprotocol/related-task";
|
|
15203
15203
|
var JSONRPC_VERSION = "2.0";
|
|
@@ -20594,7 +20594,7 @@ var pipelineType = ZodPipeline.create;
|
|
|
20594
20594
|
// ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/mini/parse.js
|
|
20595
20595
|
init_core2();
|
|
20596
20596
|
|
|
20597
|
-
// ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js
|
|
20597
|
+
// ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js
|
|
20598
20598
|
function isZ4Schema(s2) {
|
|
20599
20599
|
const schema = s2;
|
|
20600
20600
|
return !!schema._zod;
|
|
@@ -20657,7 +20657,7 @@ function getLiteralValue(schema) {
|
|
|
20657
20657
|
return void 0;
|
|
20658
20658
|
}
|
|
20659
20659
|
|
|
20660
|
-
// ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js
|
|
20660
|
+
// ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js
|
|
20661
20661
|
function isTerminal(status) {
|
|
20662
20662
|
return status === "completed" || status === "failed" || status === "cancelled";
|
|
20663
20663
|
}
|
|
@@ -20665,7 +20665,7 @@ function isTerminal(status) {
|
|
|
20665
20665
|
// ../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@4.4.3/node_modules/zod-to-json-schema/dist/esm/parsers/string.js
|
|
20666
20666
|
var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
|
|
20667
20667
|
|
|
20668
|
-
// ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js
|
|
20668
|
+
// ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js
|
|
20669
20669
|
function getMethodLiteral(schema) {
|
|
20670
20670
|
const shape = getObjectShape(schema);
|
|
20671
20671
|
const methodSchema = shape?.method;
|
|
@@ -20686,7 +20686,7 @@ function parseWithCompat(schema, data) {
|
|
|
20686
20686
|
return result.data;
|
|
20687
20687
|
}
|
|
20688
20688
|
|
|
20689
|
-
// ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js
|
|
20689
|
+
// ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_supports-color@7.2.0_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js
|
|
20690
20690
|
var DEFAULT_REQUEST_TIMEOUT_MSEC = 6e4;
|
|
20691
20691
|
var Protocol = class {
|
|
20692
20692
|
constructor(_options) {
|
|
@@ -22458,7 +22458,12 @@ var DEFAULT_APPEARANCE = {
|
|
|
22458
22458
|
sessionIdle: "Assistant session idle",
|
|
22459
22459
|
sessionLoading: "Assistant session loading",
|
|
22460
22460
|
sessionReady: "Assistant session ready",
|
|
22461
|
-
sessionError: "Assistant session unavailable"
|
|
22461
|
+
sessionError: "Assistant session unavailable",
|
|
22462
|
+
signInHeading: "Sign in to continue",
|
|
22463
|
+
signInBody: "",
|
|
22464
|
+
signInAction: "Sign in",
|
|
22465
|
+
// Empty means no sign-up button: authoring the label is the opt-in (ADR 0201, 2026-08-22).
|
|
22466
|
+
signUpAction: ""
|
|
22462
22467
|
},
|
|
22463
22468
|
presentation: {
|
|
22464
22469
|
panel: {
|
|
@@ -27098,6 +27103,9 @@ var AssistantChatStateStore = class {
|
|
|
27098
27103
|
})
|
|
27099
27104
|
);
|
|
27100
27105
|
return;
|
|
27106
|
+
case "auth_requested":
|
|
27107
|
+
this.#writeStandaloneData(() => this.#writeData("sign-in", event.data.id, event.data));
|
|
27108
|
+
return;
|
|
27101
27109
|
case "tool_completed":
|
|
27102
27110
|
this.#writeData("tool-result", event.data.id, event.data);
|
|
27103
27111
|
return;
|
|
@@ -27362,7 +27370,8 @@ function parseSession(value) {
|
|
|
27362
27370
|
const interactions = value.endpoints.interactions;
|
|
27363
27371
|
const apps = value.endpoints.apps;
|
|
27364
27372
|
const sandbox = value.endpoints.sandbox;
|
|
27365
|
-
|
|
27373
|
+
const transcript = value.endpoints.transcript;
|
|
27374
|
+
if (typeof value.token !== "string" || typeof value.expiresAt !== "string" || typeof value.endpoints.turns !== "string" || typeof value.endpoints.toolConfirmations !== "string" || interactions !== void 0 && typeof interactions !== "string" || apps !== void 0 && typeof apps !== "string" || sandbox !== void 0 && typeof sandbox !== "string" || transcript !== void 0 && typeof transcript !== "string") {
|
|
27366
27375
|
throw clientError("session_failed", "Assistant session response is invalid", true);
|
|
27367
27376
|
}
|
|
27368
27377
|
return {
|
|
@@ -27373,7 +27382,8 @@ function parseSession(value) {
|
|
|
27373
27382
|
toolConfirmations: value.endpoints.toolConfirmations,
|
|
27374
27383
|
...typeof interactions === "string" ? { interactions } : {},
|
|
27375
27384
|
...typeof apps === "string" ? { apps } : {},
|
|
27376
|
-
...typeof sandbox === "string" ? { sandbox } : {}
|
|
27385
|
+
...typeof sandbox === "string" ? { sandbox } : {},
|
|
27386
|
+
...typeof transcript === "string" ? { transcript } : {}
|
|
27377
27387
|
},
|
|
27378
27388
|
...isRecord2(value.configuration) ? { configuration: value.configuration } : {},
|
|
27379
27389
|
...isRecord2(value.resume) && typeof value.resume.tool === "string" ? { resume: { tool: value.resume.tool } } : {}
|
|
@@ -27528,6 +27538,43 @@ function sessionSourceKey(options) {
|
|
|
27528
27538
|
return `${options.embedId ?? ""}|${options.serviceUrl ?? ""}|${options.sessionEndpoint ?? ""}`;
|
|
27529
27539
|
}
|
|
27530
27540
|
|
|
27541
|
+
// src/transcript-replay.ts
|
|
27542
|
+
function parseTranscriptEntries(value) {
|
|
27543
|
+
if (typeof value !== "object" || value === null) return [];
|
|
27544
|
+
const entries2 = value.entries;
|
|
27545
|
+
if (!Array.isArray(entries2)) return [];
|
|
27546
|
+
const parsed = [];
|
|
27547
|
+
for (const entry of entries2) {
|
|
27548
|
+
const { role, text: text3 } = entry ?? {};
|
|
27549
|
+
if (role !== "user" && role !== "assistant" || typeof text3 !== "string") return [];
|
|
27550
|
+
parsed.push({ role, text: text3 });
|
|
27551
|
+
}
|
|
27552
|
+
return parsed;
|
|
27553
|
+
}
|
|
27554
|
+
function transcriptReplayEvents(entries2) {
|
|
27555
|
+
const events = [];
|
|
27556
|
+
let open = false;
|
|
27557
|
+
let awaitingAssistant = false;
|
|
27558
|
+
for (const entry of entries2) {
|
|
27559
|
+
if (entry.role === "user") {
|
|
27560
|
+
if (open) events.push({ event: "message_completed", data: {} });
|
|
27561
|
+
events.push({ event: "message_started", data: { message: entry.text } });
|
|
27562
|
+
open = true;
|
|
27563
|
+
awaitingAssistant = true;
|
|
27564
|
+
continue;
|
|
27565
|
+
}
|
|
27566
|
+
if (!open || !awaitingAssistant) {
|
|
27567
|
+
if (open) events.push({ event: "message_completed", data: {} });
|
|
27568
|
+
events.push({ event: "resume_started", data: { tool: "" } });
|
|
27569
|
+
open = true;
|
|
27570
|
+
}
|
|
27571
|
+
events.push({ event: "content", data: { delta: entry.text } });
|
|
27572
|
+
awaitingAssistant = false;
|
|
27573
|
+
}
|
|
27574
|
+
if (open) events.push({ event: "message_completed", data: {} });
|
|
27575
|
+
return events;
|
|
27576
|
+
}
|
|
27577
|
+
|
|
27531
27578
|
// src/transport.ts
|
|
27532
27579
|
var AssistantTransportError = class extends Error {
|
|
27533
27580
|
code = "invalid_response";
|
|
@@ -27698,6 +27745,12 @@ var DefaultAssistantClient = class {
|
|
|
27698
27745
|
await this.#singleFlight(async (signal) => {
|
|
27699
27746
|
if (this.#session) return;
|
|
27700
27747
|
const session = await this.#createSession(signal);
|
|
27748
|
+
if (this.#source.kind !== "public" && session.endpoints.transcript) {
|
|
27749
|
+
try {
|
|
27750
|
+
await this.#replayTranscript(session, signal);
|
|
27751
|
+
} catch {
|
|
27752
|
+
}
|
|
27753
|
+
}
|
|
27701
27754
|
if (session.resume) {
|
|
27702
27755
|
try {
|
|
27703
27756
|
await this.#runChatOperation(signal, () => this.#resumeTurn(session, signal));
|
|
@@ -27706,6 +27759,26 @@ var DefaultAssistantClient = class {
|
|
|
27706
27759
|
}
|
|
27707
27760
|
});
|
|
27708
27761
|
}
|
|
27762
|
+
/** Fetch and re-emit the bounded visible transcript through the standard event path. */
|
|
27763
|
+
async #replayTranscript(session, signal) {
|
|
27764
|
+
const endpoint = session.endpoints.transcript;
|
|
27765
|
+
if (!endpoint) return;
|
|
27766
|
+
const response = await this.#request(
|
|
27767
|
+
endpoint,
|
|
27768
|
+
{
|
|
27769
|
+
method: "POST",
|
|
27770
|
+
headers: authorizedHeaders(session.token, "application/json"),
|
|
27771
|
+
body: "{}",
|
|
27772
|
+
signal
|
|
27773
|
+
},
|
|
27774
|
+
"turn_failed"
|
|
27775
|
+
);
|
|
27776
|
+
if (!response.ok) return;
|
|
27777
|
+
for (const event of transcriptReplayEvents(parseTranscriptEntries(await response.json()))) {
|
|
27778
|
+
this.#emit(event);
|
|
27779
|
+
if (event.event === "message_completed") await this.#chat.flush();
|
|
27780
|
+
}
|
|
27781
|
+
}
|
|
27709
27782
|
/** POST the one-shot resume trigger; a 409 means nothing was pending, which renders as silence. */
|
|
27710
27783
|
async #resumeTurn(session, signal) {
|
|
27711
27784
|
const response = await this.#request(
|
|
@@ -31272,22 +31345,46 @@ function renderMarkdown(text3) {
|
|
|
31272
31345
|
// src/sign-in-card.ts
|
|
31273
31346
|
function createSignInCard(options) {
|
|
31274
31347
|
const card = document.createElement("div");
|
|
31275
|
-
card.className = "
|
|
31348
|
+
card.className = "tool-proposal sign-in";
|
|
31276
31349
|
card.dataset.tool = options.tool;
|
|
31277
31350
|
card.setAttribute("role", "status");
|
|
31278
|
-
const
|
|
31279
|
-
|
|
31351
|
+
const badge = document.createElement("span");
|
|
31352
|
+
badge.className = "sign-in-badge";
|
|
31353
|
+
badge.setAttribute("aria-hidden", "true");
|
|
31354
|
+
card.append(badge);
|
|
31355
|
+
const heading = document.createElement("h3");
|
|
31280
31356
|
heading.textContent = options.labels.heading;
|
|
31281
31357
|
card.append(heading);
|
|
31282
|
-
|
|
31283
|
-
|
|
31284
|
-
|
|
31285
|
-
|
|
31286
|
-
|
|
31287
|
-
|
|
31288
|
-
|
|
31289
|
-
|
|
31290
|
-
|
|
31358
|
+
if (options.labels.body) {
|
|
31359
|
+
const body = document.createElement("p");
|
|
31360
|
+
body.className = "proposal-description";
|
|
31361
|
+
body.textContent = options.labels.body;
|
|
31362
|
+
card.append(body);
|
|
31363
|
+
}
|
|
31364
|
+
const actions = document.createElement("div");
|
|
31365
|
+
actions.className = "proposal-actions";
|
|
31366
|
+
const buttons = [];
|
|
31367
|
+
const act = (intent) => {
|
|
31368
|
+
for (const button2 of buttons) button2.disabled = true;
|
|
31369
|
+
options.onAction(intent);
|
|
31370
|
+
};
|
|
31371
|
+
const signIn = document.createElement("button");
|
|
31372
|
+
signIn.type = "button";
|
|
31373
|
+
signIn.className = "sign-in-action";
|
|
31374
|
+
signIn.textContent = options.labels.action;
|
|
31375
|
+
signIn.addEventListener("click", () => act("sign-in"));
|
|
31376
|
+
buttons.push(signIn);
|
|
31377
|
+
actions.append(signIn);
|
|
31378
|
+
if (options.labels.signUpAction) {
|
|
31379
|
+
const signUp = document.createElement("button");
|
|
31380
|
+
signUp.type = "button";
|
|
31381
|
+
signUp.className = "sign-up-action";
|
|
31382
|
+
signUp.textContent = options.labels.signUpAction;
|
|
31383
|
+
signUp.addEventListener("click", () => act("sign-up"));
|
|
31384
|
+
buttons.push(signUp);
|
|
31385
|
+
actions.append(signUp);
|
|
31386
|
+
}
|
|
31387
|
+
card.append(actions);
|
|
31291
31388
|
return card;
|
|
31292
31389
|
}
|
|
31293
31390
|
|
|
@@ -31493,17 +31590,20 @@ var AssistantElementEventController = class {
|
|
|
31493
31590
|
const messages = this.#host.messages();
|
|
31494
31591
|
if (!messages) return;
|
|
31495
31592
|
this.#proposalCards.get(id)?.remove();
|
|
31593
|
+
const labels = this.#host.labels();
|
|
31496
31594
|
const card = createSignInCard({
|
|
31497
31595
|
tool,
|
|
31498
31596
|
signInTicket,
|
|
31499
31597
|
expiresAt,
|
|
31500
31598
|
labels: {
|
|
31501
|
-
heading:
|
|
31502
|
-
|
|
31599
|
+
heading: labels.signInHeading,
|
|
31600
|
+
body: labels.signInBody,
|
|
31601
|
+
action: labels.signInAction,
|
|
31602
|
+
signUpAction: labels.signUpAction
|
|
31503
31603
|
},
|
|
31504
|
-
|
|
31604
|
+
onAction: (intent) => this.#host.element.dispatchEvent(
|
|
31505
31605
|
new CustomEvent("assistant-sign-in-requested", {
|
|
31506
|
-
detail: { id, tool, signInTicket, expiresAt },
|
|
31606
|
+
detail: { id, tool, signInTicket, expiresAt, intent },
|
|
31507
31607
|
bubbles: true,
|
|
31508
31608
|
composed: true
|
|
31509
31609
|
})
|
|
@@ -31899,8 +31999,10 @@ var ASSISTANT_ELEMENT_STYLES = `<style>
|
|
|
31899
31999
|
.proposal-details .proposal-arguments { margin-top: 4px; }
|
|
31900
32000
|
.proposal-actions { display: flex; flex-wrap: wrap; gap: 8px; justify-content: end; }
|
|
31901
32001
|
.tool-proposal button { min-height: 44px; padding: 9px 16px; border: 1px solid var(--ns-assistant-secondary-button-border, transparent); border-radius: var(--ns-assistant-button-radius, var(--ns-assistant-default-button-radius)); color: var(--ns-assistant-secondary-button-text, var(--ns-assistant-text, var(--ns-assistant-default-text))); background: var(--ns-assistant-secondary-button, var(--ns-assistant-elevated, var(--ns-assistant-default-elevated))); cursor: pointer; font-weight: 600; }
|
|
31902
|
-
.tool-proposal .proposal-accept { color: var(--ns-assistant-primary-button-text, var(--ns-assistant-accent-text, var(--ns-assistant-default-accent-text))); background: var(--ns-assistant-primary-button, var(--ns-assistant-accent, var(--ns-assistant-default-accent))); border-color: var(--ns-assistant-primary-button-border, transparent); }
|
|
32002
|
+
.tool-proposal .proposal-accept, .tool-proposal .sign-in-action { color: var(--ns-assistant-primary-button-text, var(--ns-assistant-accent-text, var(--ns-assistant-default-accent-text))); background: var(--ns-assistant-primary-button, var(--ns-assistant-accent, var(--ns-assistant-default-accent))); border-color: var(--ns-assistant-primary-button-border, transparent); }
|
|
31903
32003
|
.tool-proposal button:disabled { opacity: .55; cursor: not-allowed; }
|
|
32004
|
+
.sign-in .sign-in-badge { display: grid; place-items: center; width: 38px; height: 38px; border-radius: 999px; color: var(--ns-assistant-accent, var(--ns-assistant-default-accent)); background: color-mix(in srgb, var(--ns-assistant-accent, var(--ns-assistant-default-accent)) 12%, transparent); }
|
|
32005
|
+
.sign-in .sign-in-badge::before { content: ''; width: 19px; height: 19px; background: currentColor; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 12a4.5 4.5 0 1 0 0-9 4.5 4.5 0 0 0 0 9Zm0 2.2c-4.3 0-7.8 2.6-7.8 5.8v1h15.6v-1c0-3.2-3.5-5.8-7.8-5.8Z'/%3E%3C/svg%3E") center / contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 12a4.5 4.5 0 1 0 0-9 4.5 4.5 0 0 0 0 9Zm0 2.2c-4.3 0-7.8 2.6-7.8 5.8v1h15.6v-1c0-3.2-3.5-5.8-7.8-5.8Z'/%3E%3C/svg%3E") center / contain no-repeat; }
|
|
31904
32006
|
.tool-proposal button { min-height: 45px; }
|
|
31905
32007
|
.tool-result { display: grid; gap: 10px; margin: 8px 0 16px; padding: 16px; border: 1px solid var(--ns-assistant-divider, var(--ns-assistant-default-divider)); border-radius: var(--ns-assistant-card-radius, 14px); background: var(--ns-assistant-assistant-message, var(--ns-assistant-elevated, var(--ns-assistant-default-elevated))); }
|
|
31906
32008
|
.tool-result > strong { color: var(--ns-assistant-success, var(--ns-assistant-default-success)); }
|