openmates 0.15.0-alpha.30 → 0.15.0-alpha.31

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.
@@ -3908,6 +3908,9 @@ function normalizeUnixSeconds(value, fallback) {
3908
3908
  }
3909
3909
  return value > 1e10 ? Math.floor(value / 1e3) : Math.floor(value);
3910
3910
  }
3911
+ function shouldWaitForTeamAi(message, teamId) {
3912
+ return !teamId || message.toLowerCase().includes("@openmates");
3913
+ }
3911
3914
  function getClientMessagesVersionForSync(cached) {
3912
3915
  if (cached.messages.length === 0) return 0;
3913
3916
  const messagesVersion = typeof cached.details.messages_v === "number" ? cached.details.messages_v : 0;
@@ -4980,7 +4983,7 @@ var OpenMatesClient = class _OpenMatesClient {
4980
4983
  }
4981
4984
  async approveTeamAccessRequest(teamId, accessRequestId, encryptedTeamKey) {
4982
4985
  this.requireSession();
4983
- const response = await this.http.post(`/v1/teams/${encodeURIComponent(teamId)}/access-requests/${encodeURIComponent(accessRequestId)}/approve`, { encrypted_team_key: encryptedTeamKey, approved_at: Math.floor(Date.now() / 1e3) }, this.getCliRequestHeaders());
4986
+ const response = await this.http.post(`/v1/teams/${encodeURIComponent(teamId)}/access-requests/${encodeURIComponent(accessRequestId)}/approve`, { ...encryptedTeamKey ? { encrypted_team_key: encryptedTeamKey } : {}, approved_at: Math.floor(Date.now() / 1e3) }, this.getCliRequestHeaders());
4984
4987
  if (!response.ok || !response.data.membership) throw new Error(`Team access approval failed with HTTP ${response.status}`);
4985
4988
  return response.data.membership;
4986
4989
  }
@@ -6307,6 +6310,7 @@ var OpenMatesClient = class _OpenMatesClient {
6307
6310
  }
6308
6311
  async sendMessage(params) {
6309
6312
  const teamId = this.resolveTeamContext({ teamId: params.teamId, personal: params.personal });
6313
+ const shouldWaitForAi = shouldWaitForTeamAi(params.message, teamId);
6310
6314
  let chatId;
6311
6315
  if (!params.chatId) {
6312
6316
  chatId = randomUUID5();
@@ -6488,7 +6492,7 @@ var OpenMatesClient = class _OpenMatesClient {
6488
6492
  if (encryptedEmbeds.length > 0) {
6489
6493
  messagePayload.encrypted_embeds = encryptedEmbeds;
6490
6494
  }
6491
- let precollectedResponse = params.precollectResponse && params.incognito ? ws.collectAiResponse(messageId, chatId, { onStream: params.onStream, timeoutMs: params.responseTimeoutMs }) : null;
6495
+ let precollectedResponse = params.precollectResponse && params.incognito && shouldWaitForAi ? ws.collectAiResponse(messageId, chatId, { onStream: params.onStream, timeoutMs: params.responseTimeoutMs }) : null;
6492
6496
  if (!params.incognito && chatKeyBytes && encryptedChatKey) {
6493
6497
  const protocolVersion = 1;
6494
6498
  const chatKeyVersion = 1;
@@ -6568,7 +6572,7 @@ var OpenMatesClient = class _OpenMatesClient {
6568
6572
  terminalExpectedMessagesV = ackPayload.committed_messages_v;
6569
6573
  }
6570
6574
  }
6571
- if (params.precollectResponse && !params.incognito) {
6575
+ if (params.precollectResponse && !params.incognito && shouldWaitForAi) {
6572
6576
  precollectedResponse = ws.collectAiResponse(messageId, chatId, {
6573
6577
  onStream: params.onStream,
6574
6578
  timeoutMs: params.responseTimeoutMs,
@@ -6781,7 +6785,9 @@ var OpenMatesClient = class _OpenMatesClient {
6781
6785
  onSubChatEvent: handleSubChatEvent,
6782
6786
  onAppSettingsMemoriesRequest: handleAppSettingsMemoriesRequest
6783
6787
  };
6784
- if (params.incognito) {
6788
+ if (!shouldWaitForAi) {
6789
+ ws.close();
6790
+ } else if (params.incognito) {
6785
6791
  try {
6786
6792
  const resp = await (precollectedResponse ?? ws.collectAiResponse(messageId, chatId, {
6787
6793
  ...streamOpts,
@@ -14195,7 +14201,108 @@ import { decode as toonDecode } from "@toon-format/toon";
14195
14201
  import { createHash as createHash8, randomBytes as randomBytes4, randomUUID as randomUUID6 } from "crypto";
14196
14202
  import { chmodSync as chmodSync2, existsSync as existsSync5, mkdirSync as mkdirSync3, readFileSync as readFileSync4, writeFileSync as writeFileSync3 } from "fs";
14197
14203
  import { homedir as homedir4 } from "os";
14198
- import { dirname, join as join3 } from "path";
14204
+ import { dirname as dirname2, join as join3 } from "path";
14205
+
14206
+ // src/designIcons.ts
14207
+ import { mkdir, writeFile } from "fs/promises";
14208
+ import { dirname, extname } from "path";
14209
+ import { Resvg } from "@resvg/resvg-js";
14210
+ var ICON_SEGMENT_PATTERN = /^[a-z0-9][a-z0-9._-]*$/i;
14211
+ var ICON_PATH_PATTERN = /^\/v1\/apps\/design\/icons\/iconify\/([a-z0-9][a-z0-9._-]*)\/([a-z0-9][a-z0-9._-]*)\.svg$/i;
14212
+ var HEX_COLOR_PATTERN = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
14213
+ var DEFAULT_PNG_SIZE = 256;
14214
+ var MAX_PNG_SIZE = 4096;
14215
+ async function exportDesignIcon(request) {
14216
+ const svgPath = resolveDesignIconSvgPath(request);
14217
+ const format = resolveDesignIconFormat(request.format, request.outputPath);
14218
+ const color = normalizeDesignIconColor(request.color);
14219
+ if (color && request.palette === true && request.allowPaletteRecolor !== true) {
14220
+ throw new Error("Palette icons cannot be recolored unless allowPaletteRecolor is true");
14221
+ }
14222
+ const fetched = await request.fetchSvg(svgPath);
14223
+ const svg = applyDesignIconColor(decodeFetchedSvg(fetched), color);
14224
+ const data = format === "svg" ? new TextEncoder().encode(svg) : renderDesignIconPng(svg, request);
14225
+ const result = {
14226
+ format,
14227
+ contentType: format === "svg" ? "image/svg+xml" : "image/png",
14228
+ data,
14229
+ svg,
14230
+ svgPath,
14231
+ outputPath: request.outputPath
14232
+ };
14233
+ if (request.outputPath) {
14234
+ await writeExportFile(request.outputPath, data);
14235
+ }
14236
+ return result;
14237
+ }
14238
+ function resolveDesignIconSvgPath(options) {
14239
+ if (options.svgPath) {
14240
+ const trimmed = options.svgPath.trim();
14241
+ if (!ICON_PATH_PATTERN.test(trimmed)) {
14242
+ throw new Error("svgPath must be an OpenMates Design Iconify SVG path");
14243
+ }
14244
+ return trimmed;
14245
+ }
14246
+ const prefix = options.prefix?.trim();
14247
+ const name = options.name?.trim();
14248
+ if (!prefix || !name) {
14249
+ throw new Error("Provide either svgPath or both prefix and name");
14250
+ }
14251
+ if (!ICON_SEGMENT_PATTERN.test(prefix) || !ICON_SEGMENT_PATTERN.test(name)) {
14252
+ throw new Error("Icon prefix and name may contain only letters, numbers, dots, underscores, and dashes");
14253
+ }
14254
+ return `/v1/apps/design/icons/iconify/${encodeURIComponent(prefix)}/${encodeURIComponent(name)}.svg`;
14255
+ }
14256
+ function normalizeDesignIconColor(color) {
14257
+ if (color === void 0) return void 0;
14258
+ const trimmed = color.trim();
14259
+ if (!HEX_COLOR_PATTERN.test(trimmed)) {
14260
+ throw new Error("Icon color must be a hex color such as #111827");
14261
+ }
14262
+ return trimmed;
14263
+ }
14264
+ function applyDesignIconColor(svg, color) {
14265
+ if (!color) return svg;
14266
+ const withCurrentColor = svg.replace(/\bcurrentColor\b/g, color);
14267
+ return withCurrentColor.replace(/<svg\b([^>]*)>/i, (match, attrs) => {
14268
+ if (/\scolor\s*=/.test(attrs)) {
14269
+ return match.replace(/\scolor\s*=\s*(['"])[^'"]*\1/i, ` color="${color}"`);
14270
+ }
14271
+ return `<svg${attrs} color="${color}">`;
14272
+ });
14273
+ }
14274
+ function resolveDesignIconFormat(format, outputPath) {
14275
+ if (format) return format;
14276
+ const extension = outputPath ? extname(outputPath).toLowerCase() : ".svg";
14277
+ return extension === ".png" ? "png" : "svg";
14278
+ }
14279
+ function decodeFetchedSvg(value) {
14280
+ if (typeof value === "string") return value;
14281
+ return new TextDecoder().decode(value);
14282
+ }
14283
+ function renderDesignIconPng(svg, options) {
14284
+ const width = normalizePngSize(options.width, "width");
14285
+ const height = normalizePngSize(options.height, "height");
14286
+ const size = normalizePngSize(options.size, "size") ?? DEFAULT_PNG_SIZE;
14287
+ const fitTo = width ? { mode: "width", value: width } : height ? { mode: "height", value: height } : { mode: "width", value: size };
14288
+ return new Uint8Array(new Resvg(svg, { fitTo, logLevel: "off" }).render().asPng());
14289
+ }
14290
+ function normalizePngSize(value, label) {
14291
+ if (value === void 0) return void 0;
14292
+ if (!Number.isInteger(value) || value <= 0 || value > MAX_PNG_SIZE) {
14293
+ throw new Error(`PNG ${label} must be an integer from 1 to ${MAX_PNG_SIZE}`);
14294
+ }
14295
+ return value;
14296
+ }
14297
+ async function writeExportFile(path, data) {
14298
+ const directory = dirname(path);
14299
+ if (directory && directory !== ".") {
14300
+ await mkdir(directory, { recursive: true });
14301
+ }
14302
+ await writeFile(path, data);
14303
+ }
14304
+
14305
+ // src/sdk.ts
14199
14306
  var DEFAULT_API_URL2 = "https://api.openmates.org";
14200
14307
  var DEFAULT_RECOVERY_POLL_INTERVAL_MS = 500;
14201
14308
  var DEFAULT_RECOVERY_TIMEOUT_MS = 6e4;
@@ -14223,6 +14330,7 @@ var OpenMates = class {
14223
14330
  chats;
14224
14331
  connectedAccounts;
14225
14332
  docs;
14333
+ design;
14226
14334
  drafts;
14227
14335
  embeds;
14228
14336
  feedback;
@@ -14254,6 +14362,7 @@ var OpenMates = class {
14254
14362
  this.chats = new OpenMatesChats(this);
14255
14363
  this.connectedAccounts = new OpenMatesConnectedAccounts(this);
14256
14364
  this.docs = new OpenMatesDocs(this);
14365
+ this.design = new OpenMatesDesign(this);
14257
14366
  this.drafts = new OpenMatesDrafts(this);
14258
14367
  this.embeds = new OpenMatesEmbeds(this);
14259
14368
  this.feedback = new OpenMatesFeedback(this);
@@ -14515,7 +14624,7 @@ function loadOrCreateDeviceId(customPath) {
14515
14624
  if (stored) return stored;
14516
14625
  }
14517
14626
  const deviceId = randomUUID6();
14518
- mkdirSync3(dirname(path), { recursive: true, mode: 448 });
14627
+ mkdirSync3(dirname2(path), { recursive: true, mode: 448 });
14519
14628
  writeFileSync3(path, `${deviceId}
14520
14629
  `, { encoding: "utf8", mode: 384 });
14521
14630
  chmodSync2(path, 384);
@@ -15130,6 +15239,18 @@ var OpenMatesBilling = class {
15130
15239
  return this.client.request("/v1/sdk/billing/auto-topup/low-balance", input);
15131
15240
  }
15132
15241
  };
15242
+ var OpenMatesDesign = class {
15243
+ client;
15244
+ constructor(client) {
15245
+ this.client = client;
15246
+ }
15247
+ async exportIcon(options) {
15248
+ return exportDesignIcon({
15249
+ ...options,
15250
+ fetchSvg: async (path) => (await this.client.getRaw(path)).data
15251
+ });
15252
+ }
15253
+ };
15133
15254
  var OpenMatesNotifications = class {
15134
15255
  client;
15135
15256
  constructor(client) {
@@ -15767,7 +15888,7 @@ import { createInterface as createInterface5 } from "readline/promises";
15767
15888
  import { stdin as stdin3, stdout as stdout2 } from "process";
15768
15889
  import { readFileSync as readFileSync10, realpathSync, writeFileSync as writeFileSync7 } from "fs";
15769
15890
  import { fileURLToPath as fileURLToPath2 } from "url";
15770
- import { basename as basename3, dirname as dirname4 } from "path";
15891
+ import { basename as basename3, dirname as dirname5 } from "path";
15771
15892
  import { randomUUID as randomUUID8 } from "crypto";
15772
15893
  import WebSocket2 from "ws";
15773
15894
 
@@ -16485,7 +16606,7 @@ var OutputRedactor = class {
16485
16606
 
16486
16607
  // src/fileEmbed.ts
16487
16608
  import { readFileSync as readFileSync5, statSync, existsSync as existsSync6 } from "fs";
16488
- import { basename, extname, resolve as resolve2 } from "path";
16609
+ import { basename, extname as extname2, resolve as resolve2 } from "path";
16489
16610
  import { homedir as homedir5 } from "os";
16490
16611
  import { createHash as createHash9 } from "crypto";
16491
16612
  var MAX_PER_FILE_SIZE = 100 * 1024 * 1024;
@@ -16592,7 +16713,7 @@ function isEnvFile(filename) {
16592
16713
  return lower === ".env" || lower.startsWith(".env.") || lower === ".envrc";
16593
16714
  }
16594
16715
  function getExt(filename) {
16595
- const ext = extname(filename).toLowerCase();
16716
+ const ext = extname2(filename).toLowerCase();
16596
16717
  return ext.startsWith(".") ? ext.slice(1) : ext;
16597
16718
  }
16598
16719
  function isCodeOrTextFile(filename) {
@@ -18357,7 +18478,7 @@ import { chmodSync as chmodSync3, closeSync, copyFileSync, cpSync, existsSync as
18357
18478
  import { createInterface as createInterface3 } from "readline";
18358
18479
  import { createInterface as createPromptInterface } from "readline/promises";
18359
18480
  import { homedir as homedir6 } from "os";
18360
- import { dirname as dirname2, join as join4, resolve as resolve3 } from "path";
18481
+ import { dirname as dirname3, join as join4, resolve as resolve3 } from "path";
18361
18482
 
18362
18483
  // src/branding.ts
18363
18484
  var OPENMATES_WORDMARK = "OPENMATES";
@@ -19010,10 +19131,10 @@ async function fetchText(url) {
19010
19131
  return response.text();
19011
19132
  }
19012
19133
  function packagedTemplatePath(role) {
19013
- return join4(dirname2(new URL(import.meta.url).pathname), "..", "templates", ROLE_TEMPLATE_FILES[role]);
19134
+ return join4(dirname3(new URL(import.meta.url).pathname), "..", "templates", ROLE_TEMPLATE_FILES[role]);
19014
19135
  }
19015
19136
  function packagedCaddyTemplatePath(role) {
19016
- return join4(dirname2(new URL(import.meta.url).pathname), "..", "templates", "caddy", role, "Caddyfile");
19137
+ return join4(dirname3(new URL(import.meta.url).pathname), "..", "templates", "caddy", role, "Caddyfile");
19017
19138
  }
19018
19139
  function fileHash(path) {
19019
19140
  if (!existsSync7(path)) return null;
@@ -19117,7 +19238,7 @@ function defaultCloneBranchForVersion(version) {
19117
19238
  }
19118
19239
  function hasLlmCredentials(envPath) {
19119
19240
  if (!existsSync7(envPath)) return false;
19120
- if (hasLocalAiModels(dirname2(envPath))) return true;
19241
+ if (hasLocalAiModels(dirname3(envPath))) return true;
19121
19242
  const content = readFileSync6(envPath, "utf-8");
19122
19243
  for (const line of content.split("\n")) {
19123
19244
  const trimmed = line.trim();
@@ -19168,7 +19289,7 @@ function imageBackendConfigPath(installPath) {
19168
19289
  function ensureImageRuntimeConfig(installPath) {
19169
19290
  const configPath = imageBackendConfigPath(installPath);
19170
19291
  if (existsSync7(configPath)) return;
19171
- mkdirSync4(dirname2(configPath), { recursive: true });
19292
+ mkdirSync4(dirname3(configPath), { recursive: true });
19172
19293
  writeFileSync4(configPath, renderFeatureOverrides({ enabled: [], disabled: [] }));
19173
19294
  }
19174
19295
  function readLocalModelOverlay(path) {
@@ -19183,7 +19304,7 @@ function readLocalModelOverlay(path) {
19183
19304
  }
19184
19305
  }
19185
19306
  function writeLocalModelOverlay(path, overlay) {
19186
- mkdirSync4(dirname2(path), { recursive: true });
19307
+ mkdirSync4(dirname3(path), { recursive: true });
19187
19308
  writeFileSync4(path, `${JSON.stringify(overlay, null, 2)}
19188
19309
  `);
19189
19310
  }
@@ -19242,13 +19363,13 @@ function updateStatusFile(installPath, role) {
19242
19363
  }
19243
19364
  function writeUpdateStatus(installPath, role, status) {
19244
19365
  const filePath = updateStatusFile(installPath, role);
19245
- mkdirSync4(dirname2(filePath), { recursive: true, mode: 448 });
19366
+ mkdirSync4(dirname3(filePath), { recursive: true, mode: 448 });
19246
19367
  writeFileSync4(filePath, `${JSON.stringify({ role, updated_at: (/* @__PURE__ */ new Date()).toISOString(), ...status }, null, 2)}
19247
19368
  `, { mode: 384 });
19248
19369
  }
19249
19370
  function copyIfExists(source, destination) {
19250
19371
  if (!existsSync7(source)) return;
19251
- mkdirSync4(dirname2(destination), { recursive: true });
19372
+ mkdirSync4(dirname3(destination), { recursive: true });
19252
19373
  cpSync(source, destination, { recursive: true, force: true });
19253
19374
  }
19254
19375
  function readEnvMap(installPath) {
@@ -20699,7 +20820,7 @@ WARNING: This will replace ${appliedPath} with the packaged ${role} Caddyfile.`)
20699
20820
  const backupPath = `${appliedPath}.openmates-backup-${nowStamp()}`;
20700
20821
  const hadExistingCaddyfile = existsSync7(appliedPath);
20701
20822
  try {
20702
- mkdirSync4(dirname2(appliedPath), { recursive: true });
20823
+ mkdirSync4(dirname3(appliedPath), { recursive: true });
20703
20824
  if (hadExistingCaddyfile) copyFileSync(appliedPath, backupPath);
20704
20825
  copyFileSync(templatePath, appliedPath);
20705
20826
  execSync("systemctl reload caddy", { stdio: "inherit" });
@@ -35945,6 +36066,417 @@ var libraryBookReturnWorkflowChat = {
35945
36066
  }
35946
36067
  };
35947
36068
 
36069
+ // ../ui/src/demo_chats/data/example_chats/dashboard-sidebar-svg-icons.ts
36070
+ var dashboardSidebarSvgIconsChat = {
36071
+ chat_id: "example-dashboard-sidebar-svg-icons",
36072
+ slug: "dashboard-sidebar-svg-icons",
36073
+ title: "example_chats.dashboard_sidebar_svg_icons.title",
36074
+ summary: "example_chats.dashboard_sidebar_svg_icons.summary",
36075
+ icon: "design",
36076
+ category: "design",
36077
+ keywords: ["SVG icons", "dashboard sidebar", "Iconify", "Tabler Icons", "Remix Icon", "Material Symbols", "design"],
36078
+ follow_up_suggestions: [],
36079
+ messages: [
36080
+ {
36081
+ "id": "495cce69-f6d7-45df-a0bf-aa7569dff4c9",
36082
+ "role": "user",
36083
+ "content": "example_chats.dashboard_sidebar_svg_icons.message_1",
36084
+ "created_at": 1784380324
36085
+ },
36086
+ {
36087
+ "id": "3e7b7da9-6bed-568e-a77b-25dcdd836582",
36088
+ "role": "assistant",
36089
+ "content": "example_chats.dashboard_sidebar_svg_icons.message_2",
36090
+ "created_at": 1784380340,
36091
+ "user_message_id": "495cce69-f6d7-45df-a0bf-aa7569dff4c9",
36092
+ "category": "design",
36093
+ "model_name": "Gemini 3 Flash"
36094
+ }
36095
+ ],
36096
+ embeds: [
36097
+ {
36098
+ "embed_id": "955e10f2-2643-4489-a9d0-6ccdad784a58",
36099
+ "type": "sheet",
36100
+ "content": 'type: sheet\napp_id: sheets\nskill_id: sheet\ntable: "| Collection | Style | License |\\n| :--- | :--- | :--- |\\n| **Tabler Icons** | Minimalist Stroke | MIT |\\n| **Remix Icon** | Professional Neutral | Apache 2.0 |\\n| **Material Symbols** | Modern Geometric | Apache 2.0 |\\n| **Boxicons** | Web Friendly | MIT |"\ntitle: ""\nembed_ref: sheet-955e10\nstatus: finished\nrow_count: 4\ncol_count: 3',
36101
+ "parent_embed_id": null,
36102
+ "embed_ids": null
36103
+ },
36104
+ {
36105
+ "embed_id": "8a1a3fb8-55d9-4b2a-9746-8b839f748f0b",
36106
+ "type": "icon_result",
36107
+ "content": 'icon_id: "ri:home-line"\nprefix: ri\nname: home-line\ndisplay_name: Home Line\ncollection_name: Remix Icon\ncollection_category: UI 24px\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/cyberalien/RemixIcon/blob/master/License"\nauthor_name: Remix Design\nauthor_url: "https://github.com/cyberalien/RemixIcon"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ri/home-line.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-line-vDv\napp_id: design\nskill_id: search_icons',
36108
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36109
+ "embed_ids": null
36110
+ },
36111
+ {
36112
+ "embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36113
+ "type": "app_skill_use",
36114
+ "content": "app_id: design\nskill_id: search_icons\nresult_count: 20\nembed_ids: 7af01409-8900-4512-808c-7ccccfc33e08|1e6080e5-d856-4d5f-bfbb-0b180e393277|d12b7e45-d9ed-49aa-9fe4-2cd53f4831ea|820aef48-ddeb-4d6c-b701-aaa072e722df|06faa994-047b-48ee-a07e-381dc747cbb7|2e88c915-9a87-47c0-80cd-09521e737597|aac59ece-3361-41ae-a669-d0b55919e086|b6282388-6a40-47f1-a307-3df121df52ce|372bef22-d0ee-405c-92af-aa0959c37000|71718c5a-e055-44c2-8222-f6ccecdb141e|6cd050ef-1052-4c04-9b96-65ae0e41b3a6|6a86b245-92b6-4fe6-ac02-12028a05d6d0|8088d00c-6358-4beb-896f-83a3b6c960fb|ba22a4bb-59bb-448e-a90b-b47792252ae2|69143f9c-d9f4-43fa-a3ae-1b79da548cf7|7e88c868-a968-4225-9056-472157fc5f8d|e7d6a11c-118e-44d4-987c-a306dcddd0dd|34452085-11fe-4291-8b41-abe1174304d0|48c56d96-d8d6-4ae3-a4ff-cda1e6102b16|cc31a3af-de4a-423c-a2ce-6cdec8b0f266\nstatus: finished\nembed_id: 68b02c14-a329-4772-97d2-d7b168bb50bc\nquery: settings\nid: 2\nprovider: Iconify\npreview_results[6]{name}:\n settings\n settings-outline\n settings-outline-rounded\n settings-rounded\n settings\n settings-outline",
36115
+ "parent_embed_id": null,
36116
+ "embed_ids": [
36117
+ "7af01409-8900-4512-808c-7ccccfc33e08",
36118
+ "1e6080e5-d856-4d5f-bfbb-0b180e393277",
36119
+ "d12b7e45-d9ed-49aa-9fe4-2cd53f4831ea",
36120
+ "820aef48-ddeb-4d6c-b701-aaa072e722df",
36121
+ "06faa994-047b-48ee-a07e-381dc747cbb7",
36122
+ "2e88c915-9a87-47c0-80cd-09521e737597",
36123
+ "aac59ece-3361-41ae-a669-d0b55919e086",
36124
+ "b6282388-6a40-47f1-a307-3df121df52ce",
36125
+ "372bef22-d0ee-405c-92af-aa0959c37000",
36126
+ "71718c5a-e055-44c2-8222-f6ccecdb141e",
36127
+ "6cd050ef-1052-4c04-9b96-65ae0e41b3a6",
36128
+ "6a86b245-92b6-4fe6-ac02-12028a05d6d0",
36129
+ "8088d00c-6358-4beb-896f-83a3b6c960fb",
36130
+ "ba22a4bb-59bb-448e-a90b-b47792252ae2",
36131
+ "69143f9c-d9f4-43fa-a3ae-1b79da548cf7",
36132
+ "7e88c868-a968-4225-9056-472157fc5f8d",
36133
+ "e7d6a11c-118e-44d4-987c-a306dcddd0dd",
36134
+ "34452085-11fe-4291-8b41-abe1174304d0",
36135
+ "48c56d96-d8d6-4ae3-a4ff-cda1e6102b16",
36136
+ "cc31a3af-de4a-423c-a2ce-6cdec8b0f266"
36137
+ ]
36138
+ },
36139
+ {
36140
+ "embed_id": "1e6080e5-d856-4d5f-bfbb-0b180e393277",
36141
+ "type": "icon_result",
36142
+ "content": 'icon_id: "material-symbols:settings-outline"\nprefix: material-symbols\nname: settings-outline\ndisplay_name: Settings Outline\ncollection_name: Material Symbols\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols/settings-outline.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-outline-HKQ\napp_id: design\nskill_id: search_icons',
36143
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36144
+ "embed_ids": null
36145
+ },
36146
+ {
36147
+ "embed_id": "820aef48-ddeb-4d6c-b701-aaa072e722df",
36148
+ "type": "icon_result",
36149
+ "content": 'icon_id: "material-symbols:settings-rounded"\nprefix: material-symbols\nname: settings-rounded\ndisplay_name: Settings Rounded\ncollection_name: Material Symbols\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols/settings-rounded.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-rounded-iP0\napp_id: design\nskill_id: search_icons',
36150
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36151
+ "embed_ids": null
36152
+ },
36153
+ {
36154
+ "embed_id": "06faa994-047b-48ee-a07e-381dc747cbb7",
36155
+ "type": "icon_result",
36156
+ "content": 'icon_id: "material-symbols-light:settings"\nprefix: material-symbols-light\nname: settings\ndisplay_name: Settings\ncollection_name: Material Symbols Light\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols-light/settings.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-ZK0\napp_id: design\nskill_id: search_icons',
36157
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36158
+ "embed_ids": null
36159
+ },
36160
+ {
36161
+ "embed_id": "2e88c915-9a87-47c0-80cd-09521e737597",
36162
+ "type": "icon_result",
36163
+ "content": 'icon_id: "material-symbols-light:settings-outline"\nprefix: material-symbols-light\nname: settings-outline\ndisplay_name: Settings Outline\ncollection_name: Material Symbols Light\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols-light/settings-outline.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-outline-jak\napp_id: design\nskill_id: search_icons',
36164
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36165
+ "embed_ids": null
36166
+ },
36167
+ {
36168
+ "embed_id": "aac59ece-3361-41ae-a669-d0b55919e086",
36169
+ "type": "icon_result",
36170
+ "content": 'icon_id: "material-symbols-light:settings-outline-rounded"\nprefix: material-symbols-light\nname: settings-outline-rounded\ndisplay_name: Settings Outline Rounded\ncollection_name: Material Symbols Light\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols-light/settings-outline-rounded.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-outline-rounded-bgT\napp_id: design\nskill_id: search_icons',
36171
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36172
+ "embed_ids": null
36173
+ },
36174
+ {
36175
+ "embed_id": "b6282388-6a40-47f1-a307-3df121df52ce",
36176
+ "type": "icon_result",
36177
+ "content": 'icon_id: "material-symbols-light:settings-rounded"\nprefix: material-symbols-light\nname: settings-rounded\ndisplay_name: Settings Rounded\ncollection_name: Material Symbols Light\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols-light/settings-rounded.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-rounded-Lqd\napp_id: design\nskill_id: search_icons',
36178
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36179
+ "embed_ids": null
36180
+ },
36181
+ {
36182
+ "embed_id": "372bef22-d0ee-405c-92af-aa0959c37000",
36183
+ "type": "icon_result",
36184
+ "content": 'icon_id: "ic:baseline-settings"\nprefix: ic\nname: baseline-settings\ndisplay_name: Baseline Settings\ncollection_name: Google Material Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/material-icons/material-icons/blob/master/LICENSE"\nauthor_name: Material Design Authors\nauthor_url: "https://github.com/material-icons/material-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ic/baseline-settings.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: baseline-settings-7Ym\napp_id: design\nskill_id: search_icons',
36185
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36186
+ "embed_ids": null
36187
+ },
36188
+ {
36189
+ "embed_id": "71718c5a-e055-44c2-8222-f6ccecdb141e",
36190
+ "type": "icon_result",
36191
+ "content": 'icon_id: "ic:outline-settings"\nprefix: ic\nname: outline-settings\ndisplay_name: Outline Settings\ncollection_name: Google Material Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/material-icons/material-icons/blob/master/LICENSE"\nauthor_name: Material Design Authors\nauthor_url: "https://github.com/material-icons/material-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ic/outline-settings.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: outline-settings-D7o\napp_id: design\nskill_id: search_icons',
36192
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36193
+ "embed_ids": null
36194
+ },
36195
+ {
36196
+ "embed_id": "6cd050ef-1052-4c04-9b96-65ae0e41b3a6",
36197
+ "type": "icon_result",
36198
+ "content": 'icon_id: "ic:round-settings"\nprefix: ic\nname: round-settings\ndisplay_name: Round Settings\ncollection_name: Google Material Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/material-icons/material-icons/blob/master/LICENSE"\nauthor_name: Material Design Authors\nauthor_url: "https://github.com/material-icons/material-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ic/round-settings.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: round-settings-zU2\napp_id: design\nskill_id: search_icons',
36199
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36200
+ "embed_ids": null
36201
+ },
36202
+ {
36203
+ "embed_id": "6a86b245-92b6-4fe6-ac02-12028a05d6d0",
36204
+ "type": "icon_result",
36205
+ "content": 'icon_id: "ic:sharp-settings"\nprefix: ic\nname: sharp-settings\ndisplay_name: Sharp Settings\ncollection_name: Google Material Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/material-icons/material-icons/blob/master/LICENSE"\nauthor_name: Material Design Authors\nauthor_url: "https://github.com/material-icons/material-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ic/sharp-settings.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: sharp-settings-lFu\napp_id: design\nskill_id: search_icons',
36206
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36207
+ "embed_ids": null
36208
+ },
36209
+ {
36210
+ "embed_id": "8088d00c-6358-4beb-896f-83a3b6c960fb",
36211
+ "type": "icon_result",
36212
+ "content": 'icon_id: "ic:twotone-settings"\nprefix: ic\nname: twotone-settings\ndisplay_name: Twotone Settings\ncollection_name: Google Material Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/material-icons/material-icons/blob/master/LICENSE"\nauthor_name: Material Design Authors\nauthor_url: "https://github.com/material-icons/material-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ic/twotone-settings.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: twotone-settings-pa3\napp_id: design\nskill_id: search_icons',
36213
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36214
+ "embed_ids": null
36215
+ },
36216
+ {
36217
+ "embed_id": "ba22a4bb-59bb-448e-a90b-b47792252ae2",
36218
+ "type": "icon_result",
36219
+ "content": 'icon_id: "mdi:settings"\nprefix: mdi\nname: settings\ndisplay_name: Settings\ncollection_name: Material Design Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/Templarian/MaterialDesign/blob/master/LICENSE"\nauthor_name: Pictogrammers\nauthor_url: "https://github.com/Templarian/MaterialDesign"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/mdi/settings.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-el8\napp_id: design\nskill_id: search_icons',
36220
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36221
+ "embed_ids": null
36222
+ },
36223
+ {
36224
+ "embed_id": "69143f9c-d9f4-43fa-a3ae-1b79da548cf7",
36225
+ "type": "icon_result",
36226
+ "content": 'icon_id: "mdi:settings-outline"\nprefix: mdi\nname: settings-outline\ndisplay_name: Settings Outline\ncollection_name: Material Design Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/Templarian/MaterialDesign/blob/master/LICENSE"\nauthor_name: Pictogrammers\nauthor_url: "https://github.com/Templarian/MaterialDesign"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/mdi/settings-outline.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-outline-Q6n\napp_id: design\nskill_id: search_icons',
36227
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36228
+ "embed_ids": null
36229
+ },
36230
+ {
36231
+ "embed_id": "7e88c868-a968-4225-9056-472157fc5f8d",
36232
+ "type": "icon_result",
36233
+ "content": 'icon_id: "mdi-light:settings"\nprefix: mdi-light\nname: settings\ndisplay_name: Settings\ncollection_name: Material Design Light\ncollection_category: Material\nlicense_title: Open Font License\nlicense_spdx: OFL-1.1\nlicense_url: "https://github.com/Templarian/MaterialDesignLight/blob/master/LICENSE.md"\nauthor_name: Pictogrammers\nauthor_url: "https://github.com/Templarian/MaterialDesignLight"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/mdi-light/settings.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-7f1\napp_id: design\nskill_id: search_icons',
36234
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36235
+ "embed_ids": null
36236
+ },
36237
+ {
36238
+ "embed_id": "e7d6a11c-118e-44d4-987c-a306dcddd0dd",
36239
+ "type": "icon_result",
36240
+ "content": 'icon_id: "tabler:settings"\nprefix: tabler\nname: settings\ndisplay_name: Settings\ncollection_name: Tabler Icons\ncollection_category: UI 24px\nlicense_title: MIT\nlicense_spdx: MIT\nlicense_url: "https://github.com/tabler/tabler-icons/blob/master/LICENSE"\nauthor_name: Pawe\u0142 Kuna\nauthor_url: "https://github.com/tabler/tabler-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/tabler/settings.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-TgF\napp_id: design\nskill_id: search_icons',
36241
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36242
+ "embed_ids": null
36243
+ },
36244
+ {
36245
+ "embed_id": "34452085-11fe-4291-8b41-abe1174304d0",
36246
+ "type": "icon_result",
36247
+ "content": 'icon_id: "tabler:settings-filled"\nprefix: tabler\nname: settings-filled\ndisplay_name: Settings Filled\ncollection_name: Tabler Icons\ncollection_category: UI 24px\nlicense_title: MIT\nlicense_spdx: MIT\nlicense_url: "https://github.com/tabler/tabler-icons/blob/master/LICENSE"\nauthor_name: Pawe\u0142 Kuna\nauthor_url: "https://github.com/tabler/tabler-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/tabler/settings-filled.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-filled-wVZ\napp_id: design\nskill_id: search_icons',
36248
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36249
+ "embed_ids": null
36250
+ },
36251
+ {
36252
+ "embed_id": "48c56d96-d8d6-4ae3-a4ff-cda1e6102b16",
36253
+ "type": "icon_result",
36254
+ "content": 'icon_id: "ri:settings-fill"\nprefix: ri\nname: settings-fill\ndisplay_name: Settings Fill\ncollection_name: Remix Icon\ncollection_category: UI 24px\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/cyberalien/RemixIcon/blob/master/License"\nauthor_name: Remix Design\nauthor_url: "https://github.com/cyberalien/RemixIcon"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ri/settings-fill.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-fill-CPt\napp_id: design\nskill_id: search_icons',
36255
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36256
+ "embed_ids": null
36257
+ },
36258
+ {
36259
+ "embed_id": "cc31a3af-de4a-423c-a2ce-6cdec8b0f266",
36260
+ "type": "icon_result",
36261
+ "content": 'icon_id: "ri:settings-line"\nprefix: ri\nname: settings-line\ndisplay_name: Settings Line\ncollection_name: Remix Icon\ncollection_category: UI 24px\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/cyberalien/RemixIcon/blob/master/License"\nauthor_name: Remix Design\nauthor_url: "https://github.com/cyberalien/RemixIcon"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ri/settings-line.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-line-c3G\napp_id: design\nskill_id: search_icons',
36262
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36263
+ "embed_ids": null
36264
+ },
36265
+ {
36266
+ "embed_id": "203ca579-1246-43c8-bf52-b9dbe656cc5f",
36267
+ "type": "icon_result",
36268
+ "content": 'icon_id: "boxicons:home"\nprefix: boxicons\nname: home\ndisplay_name: Home\ncollection_name: Boxicons\ncollection_category: UI 24px\nlicense_title: MIT\nlicense_spdx: MIT\nlicense_url: "https://github.com/box-icons/boxicons-core/blob/main/LICENSE"\nauthor_name: Boxicons\nauthor_url: "https://github.com/box-icons/boxicons-core"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/boxicons/home.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-DSR\napp_id: design\nskill_id: search_icons',
36269
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36270
+ "embed_ids": null
36271
+ },
36272
+ {
36273
+ "embed_id": "f056562c-25ef-4767-8a42-1f6b25e13b5b",
36274
+ "type": "icon_result",
36275
+ "content": 'icon_id: "boxicons:home-filled"\nprefix: boxicons\nname: home-filled\ndisplay_name: Home Filled\ncollection_name: Boxicons\ncollection_category: UI 24px\nlicense_title: MIT\nlicense_spdx: MIT\nlicense_url: "https://github.com/box-icons/boxicons-core/blob/main/LICENSE"\nauthor_name: Boxicons\nauthor_url: "https://github.com/box-icons/boxicons-core"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/boxicons/home-filled.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-filled-WKO\napp_id: design\nskill_id: search_icons',
36276
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36277
+ "embed_ids": null
36278
+ },
36279
+ {
36280
+ "embed_id": "d12b7e45-d9ed-49aa-9fe4-2cd53f4831ea",
36281
+ "type": "icon_result",
36282
+ "content": 'icon_id: "material-symbols:settings-outline-rounded"\nprefix: material-symbols\nname: settings-outline-rounded\ndisplay_name: Settings Outline Rounded\ncollection_name: Material Symbols\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols/settings-outline-rounded.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-outline-rounded-IqD\napp_id: design\nskill_id: search_icons',
36283
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36284
+ "embed_ids": null
36285
+ },
36286
+ {
36287
+ "embed_id": "fc1ee4af-5c44-4a8e-9ad1-1aaa5a21f997",
36288
+ "type": "icon_result",
36289
+ "content": 'icon_id: "ri:home-fill"\nprefix: ri\nname: home-fill\ndisplay_name: Home Fill\ncollection_name: Remix Icon\ncollection_category: UI 24px\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/cyberalien/RemixIcon/blob/master/License"\nauthor_name: Remix Design\nauthor_url: "https://github.com/cyberalien/RemixIcon"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ri/home-fill.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-fill-ZE4\napp_id: design\nskill_id: search_icons',
36290
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36291
+ "embed_ids": null
36292
+ },
36293
+ {
36294
+ "embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36295
+ "type": "app_skill_use",
36296
+ "content": "app_id: design\nskill_id: search_icons\nresult_count: 24\nembed_ids: 432db233-a41d-4da8-aa6c-d7dc01f3192a|7dc95323-2a7d-40b0-a297-94d56baddcc1|d2e24971-51a5-4d22-9016-34c3e466ed94|5aa15934-c245-4e76-8d23-81b843e66d0b|b2a82a7f-16c6-440f-8b43-3571de3fe282|f9d13968-446c-4d63-b73f-0ffbd2427a41|2cb06327-1688-4d58-84ff-7c510e79ebcc|fe7b751c-6700-4c0c-933f-9cecb8703421|38617c3a-0abb-4470-87ae-7b0d46742ee4|f658df85-ac0c-4edc-8f55-712e5d303c9c|432e0453-0853-4e16-81cc-08252c8d6331|0b740b16-05a8-4eb8-ab2d-8bd51c743ded|0d55ebe1-9d4e-43ab-86db-fb14aa28f31f|116e7f4f-85be-4ec8-99aa-c4911627fcbd|19e3a71e-c61a-4e49-8699-876652054766|c76d620d-171f-40e7-aa87-06c94f6b7e93|fc169835-27c4-4579-9c51-2e2028c4e44a|256c45e1-78f8-46c9-92d0-8898ec673ba9|e933597d-16ba-46d1-8553-c6c8d7f4b7de|469e811f-2ec4-44d7-bdff-e6feb1d11390|203ca579-1246-43c8-bf52-b9dbe656cc5f|f056562c-25ef-4767-8a42-1f6b25e13b5b|fc1ee4af-5c44-4a8e-9ad1-1aaa5a21f997|8a1a3fb8-55d9-4b2a-9746-8b839f748f0b\nstatus: finished\nembed_id: f92d6925-690b-4350-9b6a-3a7003f8b947\nquery: home\nid: 1\nprovider: Iconify\npreview_results[6]{name}:\n home\n home-outline\n home-outline-rounded\n home-rounded\n home\n home-outline",
36297
+ "parent_embed_id": null,
36298
+ "embed_ids": [
36299
+ "432db233-a41d-4da8-aa6c-d7dc01f3192a",
36300
+ "7dc95323-2a7d-40b0-a297-94d56baddcc1",
36301
+ "d2e24971-51a5-4d22-9016-34c3e466ed94",
36302
+ "5aa15934-c245-4e76-8d23-81b843e66d0b",
36303
+ "b2a82a7f-16c6-440f-8b43-3571de3fe282",
36304
+ "f9d13968-446c-4d63-b73f-0ffbd2427a41",
36305
+ "2cb06327-1688-4d58-84ff-7c510e79ebcc",
36306
+ "fe7b751c-6700-4c0c-933f-9cecb8703421",
36307
+ "38617c3a-0abb-4470-87ae-7b0d46742ee4",
36308
+ "f658df85-ac0c-4edc-8f55-712e5d303c9c",
36309
+ "432e0453-0853-4e16-81cc-08252c8d6331",
36310
+ "0b740b16-05a8-4eb8-ab2d-8bd51c743ded",
36311
+ "0d55ebe1-9d4e-43ab-86db-fb14aa28f31f",
36312
+ "116e7f4f-85be-4ec8-99aa-c4911627fcbd",
36313
+ "19e3a71e-c61a-4e49-8699-876652054766",
36314
+ "c76d620d-171f-40e7-aa87-06c94f6b7e93",
36315
+ "fc169835-27c4-4579-9c51-2e2028c4e44a",
36316
+ "256c45e1-78f8-46c9-92d0-8898ec673ba9",
36317
+ "e933597d-16ba-46d1-8553-c6c8d7f4b7de",
36318
+ "469e811f-2ec4-44d7-bdff-e6feb1d11390",
36319
+ "203ca579-1246-43c8-bf52-b9dbe656cc5f",
36320
+ "f056562c-25ef-4767-8a42-1f6b25e13b5b",
36321
+ "fc1ee4af-5c44-4a8e-9ad1-1aaa5a21f997",
36322
+ "8a1a3fb8-55d9-4b2a-9746-8b839f748f0b"
36323
+ ]
36324
+ },
36325
+ {
36326
+ "embed_id": "7af01409-8900-4512-808c-7ccccfc33e08",
36327
+ "type": "icon_result",
36328
+ "content": 'icon_id: "material-symbols:settings"\nprefix: material-symbols\nname: settings\ndisplay_name: Settings\ncollection_name: Material Symbols\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols/settings.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: settings-BrC\napp_id: design\nskill_id: search_icons',
36329
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36330
+ "embed_ids": null
36331
+ },
36332
+ {
36333
+ "embed_id": "e933597d-16ba-46d1-8553-c6c8d7f4b7de",
36334
+ "type": "icon_result",
36335
+ "content": 'icon_id: "tabler:home"\nprefix: tabler\nname: home\ndisplay_name: Home\ncollection_name: Tabler Icons\ncollection_category: UI 24px\nlicense_title: MIT\nlicense_spdx: MIT\nlicense_url: "https://github.com/tabler/tabler-icons/blob/master/LICENSE"\nauthor_name: Pawe\u0142 Kuna\nauthor_url: "https://github.com/tabler/tabler-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/tabler/home.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-EuX\napp_id: design\nskill_id: search_icons',
36336
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36337
+ "embed_ids": null
36338
+ },
36339
+ {
36340
+ "embed_id": "469e811f-2ec4-44d7-bdff-e6feb1d11390",
36341
+ "type": "icon_result",
36342
+ "content": 'icon_id: "tabler:home-filled"\nprefix: tabler\nname: home-filled\ndisplay_name: Home Filled\ncollection_name: Tabler Icons\ncollection_category: UI 24px\nlicense_title: MIT\nlicense_spdx: MIT\nlicense_url: "https://github.com/tabler/tabler-icons/blob/master/LICENSE"\nauthor_name: Pawe\u0142 Kuna\nauthor_url: "https://github.com/tabler/tabler-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/tabler/home-filled.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-filled-Txe\napp_id: design\nskill_id: search_icons',
36343
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36344
+ "embed_ids": null
36345
+ },
36346
+ {
36347
+ "embed_id": "7dc95323-2a7d-40b0-a297-94d56baddcc1",
36348
+ "type": "icon_result",
36349
+ "content": 'icon_id: "material-symbols:home-outline"\nprefix: material-symbols\nname: home-outline\ndisplay_name: Home Outline\ncollection_name: Material Symbols\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols/home-outline.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-outline-94o\napp_id: design\nskill_id: search_icons',
36350
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36351
+ "embed_ids": null
36352
+ },
36353
+ {
36354
+ "embed_id": "b2a82a7f-16c6-440f-8b43-3571de3fe282",
36355
+ "type": "icon_result",
36356
+ "content": 'icon_id: "material-symbols-light:home"\nprefix: material-symbols-light\nname: home\ndisplay_name: Home\ncollection_name: Material Symbols Light\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols-light/home.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-jd5\napp_id: design\nskill_id: search_icons',
36357
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36358
+ "embed_ids": null
36359
+ },
36360
+ {
36361
+ "embed_id": "f9d13968-446c-4d63-b73f-0ffbd2427a41",
36362
+ "type": "icon_result",
36363
+ "content": 'icon_id: "material-symbols-light:home-outline"\nprefix: material-symbols-light\nname: home-outline\ndisplay_name: Home Outline\ncollection_name: Material Symbols Light\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols-light/home-outline.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-outline-3t2\napp_id: design\nskill_id: search_icons',
36364
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36365
+ "embed_ids": null
36366
+ },
36367
+ {
36368
+ "embed_id": "432db233-a41d-4da8-aa6c-d7dc01f3192a",
36369
+ "type": "icon_result",
36370
+ "content": 'icon_id: "material-symbols:home"\nprefix: material-symbols\nname: home\ndisplay_name: Home\ncollection_name: Material Symbols\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols/home.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-X0R\napp_id: design\nskill_id: search_icons',
36371
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36372
+ "embed_ids": null
36373
+ },
36374
+ {
36375
+ "embed_id": "0d55ebe1-9d4e-43ab-86db-fb14aa28f31f",
36376
+ "type": "icon_result",
36377
+ "content": 'icon_id: "ic:twotone-home"\nprefix: ic\nname: twotone-home\ndisplay_name: Twotone Home\ncollection_name: Google Material Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/material-icons/material-icons/blob/master/LICENSE"\nauthor_name: Material Design Authors\nauthor_url: "https://github.com/material-icons/material-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ic/twotone-home.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: twotone-home-qfg\napp_id: design\nskill_id: search_icons',
36378
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36379
+ "embed_ids": null
36380
+ },
36381
+ {
36382
+ "embed_id": "19e3a71e-c61a-4e49-8699-876652054766",
36383
+ "type": "icon_result",
36384
+ "content": 'icon_id: "mdi:home-outline"\nprefix: mdi\nname: home-outline\ndisplay_name: Home Outline\ncollection_name: Material Design Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/Templarian/MaterialDesign/blob/master/LICENSE"\nauthor_name: Pictogrammers\nauthor_url: "https://github.com/Templarian/MaterialDesign"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/mdi/home-outline.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-outline-VyG\napp_id: design\nskill_id: search_icons',
36385
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36386
+ "embed_ids": null
36387
+ },
36388
+ {
36389
+ "embed_id": "fc169835-27c4-4579-9c51-2e2028c4e44a",
36390
+ "type": "icon_result",
36391
+ "content": 'icon_id: "line-md:home"\nprefix: line-md\nname: home\ndisplay_name: Home\ncollection_name: Material Line Icons\ncollection_category: Material\nlicense_title: MIT\nlicense_spdx: MIT\nlicense_url: "https://github.com/cyberalien/line-md/blob/main/license.txt"\nauthor_name: Vjacheslav Trushkin\nauthor_url: "https://github.com/cyberalien/line-md"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/line-md/home.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-IlX\napp_id: design\nskill_id: search_icons',
36392
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36393
+ "embed_ids": null
36394
+ },
36395
+ {
36396
+ "embed_id": "256c45e1-78f8-46c9-92d0-8898ec673ba9",
36397
+ "type": "icon_result",
36398
+ "content": 'icon_id: "line-md:home-twotone"\nprefix: line-md\nname: home-twotone\ndisplay_name: Home Twotone\ncollection_name: Material Line Icons\ncollection_category: Material\nlicense_title: MIT\nlicense_spdx: MIT\nlicense_url: "https://github.com/cyberalien/line-md/blob/main/license.txt"\nauthor_name: Vjacheslav Trushkin\nauthor_url: "https://github.com/cyberalien/line-md"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/line-md/home-twotone.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-twotone-3bU\napp_id: design\nskill_id: search_icons',
36399
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36400
+ "embed_ids": null
36401
+ },
36402
+ {
36403
+ "embed_id": "d2e24971-51a5-4d22-9016-34c3e466ed94",
36404
+ "type": "icon_result",
36405
+ "content": 'icon_id: "material-symbols:home-outline-rounded"\nprefix: material-symbols\nname: home-outline-rounded\ndisplay_name: Home Outline Rounded\ncollection_name: Material Symbols\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols/home-outline-rounded.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-outline-rounded-ipO\napp_id: design\nskill_id: search_icons',
36406
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36407
+ "embed_ids": null
36408
+ },
36409
+ {
36410
+ "embed_id": "5aa15934-c245-4e76-8d23-81b843e66d0b",
36411
+ "type": "icon_result",
36412
+ "content": 'icon_id: "material-symbols:home-rounded"\nprefix: material-symbols\nname: home-rounded\ndisplay_name: Home Rounded\ncollection_name: Material Symbols\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols/home-rounded.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-rounded-tum\napp_id: design\nskill_id: search_icons',
36413
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36414
+ "embed_ids": null
36415
+ },
36416
+ {
36417
+ "embed_id": "2cb06327-1688-4d58-84ff-7c510e79ebcc",
36418
+ "type": "icon_result",
36419
+ "content": 'icon_id: "material-symbols-light:home-outline-rounded"\nprefix: material-symbols-light\nname: home-outline-rounded\ndisplay_name: Home Outline Rounded\ncollection_name: Material Symbols Light\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols-light/home-outline-rounded.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-outline-rounded-Ydw\napp_id: design\nskill_id: search_icons',
36420
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36421
+ "embed_ids": null
36422
+ },
36423
+ {
36424
+ "embed_id": "38617c3a-0abb-4470-87ae-7b0d46742ee4",
36425
+ "type": "icon_result",
36426
+ "content": 'icon_id: "ic:baseline-home"\nprefix: ic\nname: baseline-home\ndisplay_name: Baseline Home\ncollection_name: Google Material Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/material-icons/material-icons/blob/master/LICENSE"\nauthor_name: Material Design Authors\nauthor_url: "https://github.com/material-icons/material-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ic/baseline-home.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: baseline-home-er0\napp_id: design\nskill_id: search_icons',
36427
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36428
+ "embed_ids": null
36429
+ },
36430
+ {
36431
+ "embed_id": "f658df85-ac0c-4edc-8f55-712e5d303c9c",
36432
+ "type": "icon_result",
36433
+ "content": 'icon_id: "ic:outline-home"\nprefix: ic\nname: outline-home\ndisplay_name: Outline Home\ncollection_name: Google Material Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/material-icons/material-icons/blob/master/LICENSE"\nauthor_name: Material Design Authors\nauthor_url: "https://github.com/material-icons/material-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ic/outline-home.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: outline-home-0cO\napp_id: design\nskill_id: search_icons',
36434
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36435
+ "embed_ids": null
36436
+ },
36437
+ {
36438
+ "embed_id": "432e0453-0853-4e16-81cc-08252c8d6331",
36439
+ "type": "icon_result",
36440
+ "content": 'icon_id: "ic:round-home"\nprefix: ic\nname: round-home\ndisplay_name: Round Home\ncollection_name: Google Material Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/material-icons/material-icons/blob/master/LICENSE"\nauthor_name: Material Design Authors\nauthor_url: "https://github.com/material-icons/material-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ic/round-home.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: round-home-ZjJ\napp_id: design\nskill_id: search_icons',
36441
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36442
+ "embed_ids": null
36443
+ },
36444
+ {
36445
+ "embed_id": "fe7b751c-6700-4c0c-933f-9cecb8703421",
36446
+ "type": "icon_result",
36447
+ "content": 'icon_id: "material-symbols-light:home-rounded"\nprefix: material-symbols-light\nname: home-rounded\ndisplay_name: Home Rounded\ncollection_name: Material Symbols Light\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/google/material-design-icons/blob/master/LICENSE"\nauthor_name: Google\nauthor_url: "https://github.com/google/material-design-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/material-symbols-light/home-rounded.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-rounded-68H\napp_id: design\nskill_id: search_icons',
36448
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36449
+ "embed_ids": null
36450
+ },
36451
+ {
36452
+ "embed_id": "0b740b16-05a8-4eb8-ab2d-8bd51c743ded",
36453
+ "type": "icon_result",
36454
+ "content": 'icon_id: "ic:sharp-home"\nprefix: ic\nname: sharp-home\ndisplay_name: Sharp Home\ncollection_name: Google Material Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/material-icons/material-icons/blob/master/LICENSE"\nauthor_name: Material Design Authors\nauthor_url: "https://github.com/material-icons/material-icons"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/ic/sharp-home.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: sharp-home-dpS\napp_id: design\nskill_id: search_icons',
36455
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36456
+ "embed_ids": null
36457
+ },
36458
+ {
36459
+ "embed_id": "116e7f4f-85be-4ec8-99aa-c4911627fcbd",
36460
+ "type": "icon_result",
36461
+ "content": 'icon_id: "mdi:home"\nprefix: mdi\nname: home\ndisplay_name: Home\ncollection_name: Material Design Icons\ncollection_category: Material\nlicense_title: Apache 2.0\nlicense_spdx: Apache-2.0\nlicense_url: "https://github.com/Templarian/MaterialDesign/blob/master/LICENSE"\nauthor_name: Pictogrammers\nauthor_url: "https://github.com/Templarian/MaterialDesign"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/mdi/home.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-HkF\napp_id: design\nskill_id: search_icons',
36462
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36463
+ "embed_ids": null
36464
+ },
36465
+ {
36466
+ "embed_id": "c76d620d-171f-40e7-aa87-06c94f6b7e93",
36467
+ "type": "icon_result",
36468
+ "content": 'icon_id: "mdi-light:home"\nprefix: mdi-light\nname: home\ndisplay_name: Home\ncollection_name: Material Design Light\ncollection_category: Material\nlicense_title: Open Font License\nlicense_spdx: OFL-1.1\nlicense_url: "https://github.com/Templarian/MaterialDesignLight/blob/master/LICENSE.md"\nauthor_name: Pictogrammers\nauthor_url: "https://github.com/Templarian/MaterialDesignLight"\npalette: false\nsvg_path: /v1/apps/design/icons/iconify/mdi-light/home.svg\ntags[0]:\ntype: icon_result\nparent_app_skill_type: app_skill_use\nembed_ref: home-i4c\napp_id: design\nskill_id: search_icons',
36469
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36470
+ "embed_ids": null
36471
+ }
36472
+ ],
36473
+ metadata: {
36474
+ featured: true,
36475
+ order: 114,
36476
+ app_skill_examples: ["design.search_icons"]
36477
+ }
36478
+ };
36479
+
35948
36480
  // ../ui/src/demo_chats/exampleChatData.ts
35949
36481
  var ALL_EXAMPLE_CHATS = [
35950
36482
  giganticAirplanesChat,
@@ -36040,7 +36572,8 @@ var ALL_EXAMPLE_CHATS = [
36040
36572
  habitGardenWebApplicationChat,
36041
36573
  printableBenchyPhoneStandModelsChat,
36042
36574
  exampleChatTaskPlanningChecklistChat,
36043
- libraryBookReturnWorkflowChat
36575
+ libraryBookReturnWorkflowChat,
36576
+ dashboardSidebarSvgIconsChat
36044
36577
  ].sort((a, b) => a.metadata.order - b.metadata.order);
36045
36578
 
36046
36579
  // ../ui/src/i18n/locales/en.json
@@ -37571,6 +38104,14 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
37571
38104
  }
37572
38105
  }
37573
38106
  },
38107
+ design: {
38108
+ search_icons: {
38109
+ text: "Search icons",
38110
+ description: {
38111
+ text: "Find open-source SVG icons from Iconify collections."
38112
+ }
38113
+ }
38114
+ },
37574
38115
  electronics: {
37575
38116
  search_components: {
37576
38117
  text: "Search components",
@@ -43537,6 +44078,20 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
43537
44078
  text: "What live music or performance events are happening in Berlin next week?"
43538
44079
  }
43539
44080
  },
44081
+ dashboard_sidebar_svg_icons: {
44082
+ title: {
44083
+ text: "Dashboard Sidebar SVG Icons"
44084
+ },
44085
+ summary: {
44086
+ text: "A Design app example that finds clean open-source SVG home and settings icons for a dashboard sidebar."
44087
+ },
44088
+ message_1: {
44089
+ text: "Find open-source SVG home and settings icons from clean UI icon sets for a dashboard sidebar. Include the icon names, collections, and licenses."
44090
+ },
44091
+ message_2: {
44092
+ text: '```json\n{"type": "app_skill_use", "embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947", "app_id": "design", "skill_id": "search_icons", "query": "home"}\n```\n\n```json\n{"type": "app_skill_use", "embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc", "app_id": "design", "skill_id": "search_icons", "query": "settings"}\n```\n\nFor a clean dashboard sidebar, you\'ll want icons that have consistent stroke weights and a minimalist aesthetic. Here are several open-source SVG options from highly regarded, clean UI icon sets:\n\n### 1. Tabler Icons\n[Tabler Icons](wiki:Tabler) is a highly customizable, stroke-based set designed on a 24x24 grid, making it perfect for modern dashboards.\n* **License:** [MIT](wiki:MIT_License)\n* **Home:** `tabler:home` [Home](embed:home-EuX)\n* **Settings:** `tabler:settings` [Settings](embed:settings-TgF)\n\n### 2. Remix Icon\nRemix Icon offers a neutral, professional style with both "Line" and "Fill" versions, which is great for indicating active vs. inactive states in a sidebar.\n* **License:** [Apache 2.0](wiki:Apache_License)\n* **Home:** `ri:home-line` [Home Line](embed:home-line-vDv)\n* **Settings:** `ri:settings-line` [Settings Line](embed:settings-line-c3G)\n\n### 3. Material Symbols (Light)\n[Material Symbols](wiki:Material_Design) are the modern successor to Material Icons, offering variable font technology. The "Light" and "Outline" versions provide a very airy, sophisticated look.\n* **License:** [Apache 2.0](wiki:Apache_License)\n* **Home:** `material-symbols-light:home-outline` [Home Outline](embed:home-outline-3t2)\n* **Settings:** `material-symbols-light:settings-outline` [Settings Outline](embed:settings-outline-jak)\n\n### 4. Boxicons\nBoxicons is a high-quality web friendly set of icons that are simple and well-balanced.\n* **License:** [MIT](wiki:MIT_License)\n* **Home:** `boxicons:home` [Home](embed:home-DSR)\n* **Settings:** `boxicons:settings` (Available in the Boxicons collection)\n\n### Summary Table\n\n```json\n{"type": "sheet", "embed_id": "955e10f2-2643-4489-a9d0-6ccdad784a58"}\n```\n\n**Design Tip:** When using these in a sidebar, ensure you keep the stroke width consistent across all icons. Most of these collections default to a `2px` stroke, which works well for visibility without feeling "heavy."\n\nWould you like me to look for other sidebar icons like "Users," "Analytics," or "Messages" to complete your set? I can also help you with a [Svelte](/#settings/apps/code) or [React](wiki:React_(software)) sidebar component if you\'re building the UI now.'
44093
+ }
44094
+ },
43540
44095
  email_verification_sequence_diagram: {
43541
44096
  title: {
43542
44097
  text: "Email Verification Sequence Diagram"
@@ -55697,7 +56252,7 @@ function buildAssistantFeedbackDecision(rating) {
55697
56252
  import { randomUUID as randomUUID7 } from "crypto";
55698
56253
  import { existsSync as existsSync8, mkdtempSync as mkdtempSync2, readFileSync as readFileSync7, readdirSync as readdirSync2, writeFileSync as writeFileSync5 } from "fs";
55699
56254
  import { tmpdir } from "os";
55700
- import { dirname as dirname3, join as join5, resolve as resolve5 } from "path";
56255
+ import { dirname as dirname4, join as join5, resolve as resolve5 } from "path";
55701
56256
  import { fileURLToPath } from "url";
55702
56257
  var DEFAULT_JUDGE_MODEL = "google/gemini-3-flash-preview";
55703
56258
  var DEFAULT_EXTENSIVE_SIZE = 10;
@@ -56549,13 +57104,13 @@ function normalizeModelKey(model) {
56549
57104
  }
56550
57105
  function findProvidersDir() {
56551
57106
  const currentFile = fileURLToPath(import.meta.url);
56552
- let current = dirname3(currentFile);
57107
+ let current = dirname4(currentFile);
56553
57108
  for (let index = 0; index < 8; index += 1) {
56554
57109
  const candidate = join5(current, "backend", "providers");
56555
57110
  if (existsSync8(candidate)) return candidate;
56556
57111
  const parentCandidate = join5(current, "..", "..", "backend", "providers");
56557
57112
  if (existsSync8(parentCandidate)) return resolve5(parentCandidate);
56558
- const next = dirname3(current);
57113
+ const next = dirname4(current);
56559
57114
  if (next === current) break;
56560
57115
  current = next;
56561
57116
  }
@@ -56676,7 +57231,7 @@ function round2(value) {
56676
57231
  return Math.round(value * 100) / 100;
56677
57232
  }
56678
57233
  function defaultImageFixturePath() {
56679
- const fixtureDir = join5(dirname3(fileURLToPath(import.meta.url)), "..", "fixtures");
57234
+ const fixtureDir = join5(dirname4(fileURLToPath(import.meta.url)), "..", "fixtures");
56680
57235
  const fixturePath = join5(fixtureDir, "brandenburger-tor.png");
56681
57236
  if (existsSync8(fixturePath)) return fixturePath;
56682
57237
  const tempDir = mkdtempSync2(join5(tmpdir(), "openmates-benchmark-"));
@@ -59042,14 +59597,17 @@ async function handleTeams(client, subcommand, rest, flags) {
59042
59597
  if (typeof flags["encrypted-recipient-hint"] === "string") input.encrypted_recipient_hint = flags["encrypted-recipient-hint"];
59043
59598
  if (typeof flags["expires-at"] === "string") input.expires_at = Number.parseInt(flags["expires-at"], 10);
59044
59599
  input.role = parseTeamInviteRole(flags.role);
59600
+ if (typeof flags.email === "string") await client.getTeam(teamId);
59045
59601
  const invite = await client.createTeamInvite(teamId, input);
59046
59602
  if (flags.json === true) printJson2({ invite });
59047
59603
  else printJson2(invite);
59048
59604
  return;
59049
59605
  }
59050
59606
  if (subcommand === "accept-invite") {
59051
- const inviteId = requiredStringFlag(flags.invite ?? rest[0], "<invite-id>");
59052
- const result = await client.acceptTeamInvite(inviteId);
59607
+ const inviteInput = parseTeamInviteInput(requiredStringFlag(flags.invite ?? rest[0], "<invite-id-or-url>"));
59608
+ const inviteSecret = typeof flags.key === "string" ? flags.key : inviteInput.inviteSecret;
59609
+ const recipientEmail = typeof flags.email === "string" ? flags.email : void 0;
59610
+ const result = await client.acceptTeamInvite(inviteInput.inviteId, { inviteSecret, recipientEmail });
59053
59611
  if (flags.json === true) printJson2(result);
59054
59612
  else printJson2(result);
59055
59613
  return;
@@ -59072,7 +59630,7 @@ async function handleTeams(client, subcommand, rest, flags) {
59072
59630
  if (subcommand === "approve-access") {
59073
59631
  const teamId = requireTeamId(rest, flags);
59074
59632
  const accessRequestId = requiredStringFlag(flags.request ?? flags["access-request"] ?? rest[1], "<access-request-id>");
59075
- const encryptedTeamKey = requiredStringFlag(flags["encrypted-team-key"], "--encrypted-team-key <value>");
59633
+ const encryptedTeamKey = typeof flags["encrypted-team-key"] === "string" ? flags["encrypted-team-key"] : void 0;
59076
59634
  const membership = await client.approveTeamAccessRequest(teamId, accessRequestId, encryptedTeamKey);
59077
59635
  if (flags.json === true) printJson2({ membership });
59078
59636
  else printJson2(membership);
@@ -59162,6 +59720,16 @@ async function handleTeams(client, subcommand, rest, flags) {
59162
59720
  }
59163
59721
  throw new Error(`Unknown teams command '${subcommand}'. Run 'openmates teams --help'.`);
59164
59722
  }
59723
+ function parseTeamInviteInput(value) {
59724
+ try {
59725
+ const url = new URL(value);
59726
+ const inviteId = url.pathname.split("/").filter(Boolean).pop();
59727
+ const fragment = new URLSearchParams(url.hash.replace(/^#/, ""));
59728
+ if (inviteId) return { inviteId, inviteSecret: fragment.get("key") };
59729
+ } catch {
59730
+ }
59731
+ return { inviteId: value, inviteSecret: null };
59732
+ }
59165
59733
  function requireTeamId(rest, flags) {
59166
59734
  return requiredStringFlag(flags.team ?? flags["team-id"] ?? rest[0], "--team <team-id>");
59167
59735
  }
@@ -59858,28 +60426,28 @@ ${deleted}/${resolved.length} chat(s) deleted.`);
59858
60426
  } catch {
59859
60427
  }
59860
60428
  }
59861
- const { mkdir, writeFile } = await import("fs/promises");
60429
+ const { mkdir: mkdir2, writeFile: writeFile2 } = await import("fs/promises");
59862
60430
  const { join: join7 } = await import("path");
59863
60431
  if (useZip) {
59864
60432
  const tmpDir = join7(outputDir, `.${filenameBase}_tmp`);
59865
- await mkdir(tmpDir, { recursive: true });
59866
- await writeFile(join7(tmpDir, `${filenameBase}.yml`), yamlContent);
59867
- await writeFile(join7(tmpDir, `${filenameBase}.md`), mdContent);
60433
+ await mkdir2(tmpDir, { recursive: true });
60434
+ await writeFile2(join7(tmpDir, `${filenameBase}.yml`), yamlContent);
60435
+ await writeFile2(join7(tmpDir, `${filenameBase}.md`), mdContent);
59868
60436
  if (codeEmbeds.length > 0) {
59869
60437
  for (const ce of codeEmbeds) {
59870
60438
  const fpath = ce.filePath ?? ce.filename ?? `${ce.embedId.slice(0, 8)}.${getExtForLang(ce.language)}`;
59871
60439
  const fullPath = join7(tmpDir, "code", fpath);
59872
- await mkdir(fullPath.substring(0, fullPath.lastIndexOf("/")), {
60440
+ await mkdir2(fullPath.substring(0, fullPath.lastIndexOf("/")), {
59873
60441
  recursive: true
59874
60442
  });
59875
- await writeFile(fullPath, ce.content);
60443
+ await writeFile2(fullPath, ce.content);
59876
60444
  }
59877
60445
  }
59878
60446
  if (transcriptEmbeds.length > 0) {
59879
60447
  const tDir = join7(tmpDir, "transcripts");
59880
- await mkdir(tDir, { recursive: true });
60448
+ await mkdir2(tDir, { recursive: true });
59881
60449
  for (const te of transcriptEmbeds) {
59882
- await writeFile(join7(tDir, te.filename), te.content);
60450
+ await writeFile2(join7(tDir, te.filename), te.content);
59883
60451
  }
59884
60452
  }
59885
60453
  const zipPath = join7(outputDir, `${filenameBase}.zip`);
@@ -59898,28 +60466,28 @@ ${deleted}/${resolved.length} chat(s) deleted.`);
59898
60466
  }
59899
60467
  } else {
59900
60468
  const chatDir = join7(outputDir, filenameBase);
59901
- await mkdir(chatDir, { recursive: true });
60469
+ await mkdir2(chatDir, { recursive: true });
59902
60470
  const written = [];
59903
- await writeFile(join7(chatDir, `${filenameBase}.yml`), yamlContent);
60471
+ await writeFile2(join7(chatDir, `${filenameBase}.yml`), yamlContent);
59904
60472
  written.push(`${filenameBase}.yml`);
59905
- await writeFile(join7(chatDir, `${filenameBase}.md`), mdContent);
60473
+ await writeFile2(join7(chatDir, `${filenameBase}.md`), mdContent);
59906
60474
  written.push(`${filenameBase}.md`);
59907
60475
  if (codeEmbeds.length > 0) {
59908
60476
  for (const ce of codeEmbeds) {
59909
60477
  const fpath = ce.filePath ?? ce.filename ?? `${ce.embedId.slice(0, 8)}.${getExtForLang(ce.language)}`;
59910
60478
  const fullPath = join7(chatDir, "code", fpath);
59911
- await mkdir(fullPath.substring(0, fullPath.lastIndexOf("/")), {
60479
+ await mkdir2(fullPath.substring(0, fullPath.lastIndexOf("/")), {
59912
60480
  recursive: true
59913
60481
  });
59914
- await writeFile(fullPath, ce.content);
60482
+ await writeFile2(fullPath, ce.content);
59915
60483
  written.push(`code/${fpath}`);
59916
60484
  }
59917
60485
  }
59918
60486
  if (transcriptEmbeds.length > 0) {
59919
60487
  const tDir = join7(chatDir, "transcripts");
59920
- await mkdir(tDir, { recursive: true });
60488
+ await mkdir2(tDir, { recursive: true });
59921
60489
  for (const te of transcriptEmbeds) {
59922
- await writeFile(join7(tDir, te.filename), te.content);
60490
+ await writeFile2(join7(tDir, te.filename), te.content);
59923
60491
  written.push(`transcripts/${te.filename}`);
59924
60492
  }
59925
60493
  }
@@ -61088,6 +61656,10 @@ The booking_token is shown in the output of:
61088
61656
  await handleModels3dSearch(client, flags, apiKey);
61089
61657
  return;
61090
61658
  }
61659
+ if (subcommand === "design" && rest[0] === "export-icon") {
61660
+ await handleDesignIconExport(client, rest.slice(1), flags, apiKey);
61661
+ return;
61662
+ }
61091
61663
  const generatedCommand = findGeneratedAppSkillCommand(subcommand, rest[0]);
61092
61664
  if (generatedCommand) {
61093
61665
  await handleGeneratedAppSkillCommand(client, generatedCommand, rest.slice(1), flags, apiKey);
@@ -61173,6 +61745,75 @@ async function handleModels3dSearch(client, flags, apiKey) {
61173
61745
  process.exit(1);
61174
61746
  }
61175
61747
  }
61748
+ async function handleDesignIconExport(client, positionals, flags, apiKey) {
61749
+ if (flags.help === true) {
61750
+ printDesignIconExportHelp();
61751
+ return;
61752
+ }
61753
+ const outputPath = stringFlag(flags, "output");
61754
+ if (!outputPath) {
61755
+ console.error(
61756
+ "Missing --output flag.\n\nUsage:\n openmates apps design export-icon lucide:home --output home.svg [--color '#111827']\n openmates apps design export-icon --prefix lucide --name home --format png --size 64 --output home.png\n"
61757
+ );
61758
+ process.exit(1);
61759
+ }
61760
+ const format = parseDesignIconExportFormat(flags.format);
61761
+ const size = parsePositiveIntegerFlag(flags.size, "--size");
61762
+ const width = parsePositiveIntegerFlag(flags.width, "--width");
61763
+ const height = parsePositiveIntegerFlag(flags.height, "--height");
61764
+ const iconRef = parseDesignIconReference(positionals, flags);
61765
+ try {
61766
+ const result = await exportDesignIcon({
61767
+ ...iconRef,
61768
+ outputPath,
61769
+ format,
61770
+ color: stringFlag(flags, "color"),
61771
+ palette: flags.palette === true,
61772
+ allowPaletteRecolor: flags["allow-palette-recolor"] === true,
61773
+ size,
61774
+ width,
61775
+ height,
61776
+ fetchSvg: async (path) => (await client.getRaw(path, apiKey)).data
61777
+ });
61778
+ if (flags.json === true) {
61779
+ printJson2({
61780
+ success: true,
61781
+ format: result.format,
61782
+ content_type: result.contentType,
61783
+ output_path: result.outputPath,
61784
+ svg_path: result.svgPath,
61785
+ bytes: result.data.byteLength
61786
+ });
61787
+ } else {
61788
+ console.log(`Exported ${result.format.toUpperCase()} icon to ${result.outputPath}`);
61789
+ }
61790
+ } catch (err) {
61791
+ const msg = err instanceof Error ? err.message : String(err);
61792
+ console.error(`\x1B[31m\u2717 Design icon export failed:\x1B[0m ${msg}`);
61793
+ process.exit(1);
61794
+ }
61795
+ }
61796
+ function parseDesignIconReference(positionals, flags) {
61797
+ const svgPath = stringFlag(flags, "svg-path");
61798
+ if (svgPath) return { svgPath };
61799
+ const icon = stringFlag(flags, "icon") ?? positionals[0];
61800
+ if (icon) {
61801
+ const [prefix, name, extra] = icon.split(":");
61802
+ if (!prefix || !name || extra !== void 0) {
61803
+ throw new Error("Icon reference must use prefix:name, such as lucide:home");
61804
+ }
61805
+ return { prefix, name };
61806
+ }
61807
+ return {
61808
+ prefix: stringFlag(flags, "prefix"),
61809
+ name: stringFlag(flags, "name")
61810
+ };
61811
+ }
61812
+ function parseDesignIconExportFormat(value) {
61813
+ if (value === void 0) return void 0;
61814
+ if (value === "svg" || value === "png") return value;
61815
+ throw new Error("--format must be svg or png");
61816
+ }
61176
61817
  async function handleCodeRun(client, flags, apiKey) {
61177
61818
  const requests = await buildCodeRunRequestsFromFlags({
61178
61819
  code: typeof flags.code === "string" ? flags.code : void 0,
@@ -61887,13 +62528,13 @@ function parseYamlScalar(value) {
61887
62528
  return trimmed;
61888
62529
  }
61889
62530
  async function saveDownloadedDocument(document, output) {
61890
- const { mkdir, writeFile } = await import("fs/promises");
61891
- const { join: join7, basename: basename4, dirname: dirname5 } = await import("path");
62531
+ const { mkdir: mkdir2, writeFile: writeFile2 } = await import("fs/promises");
62532
+ const { join: join7, basename: basename4, dirname: dirname6 } = await import("path");
61892
62533
  const target = typeof output === "string" ? output : ".";
61893
62534
  const filename = basename4(document.filename || "document.pdf");
61894
62535
  const filePath = target.endsWith(".pdf") ? target : join7(target, filename);
61895
- await mkdir(dirname5(filePath), { recursive: true });
61896
- await writeFile(filePath, document.data);
62536
+ await mkdir2(dirname6(filePath), { recursive: true });
62537
+ await writeFile2(filePath, document.data);
61897
62538
  return filePath;
61898
62539
  }
61899
62540
  function printMates(json) {
@@ -62048,8 +62689,8 @@ async function promptPlainText(question) {
62048
62689
  }
62049
62690
  }
62050
62691
  async function writeSecretFile(filePath, content, force = false) {
62051
- const { mkdir, writeFile, stat: stat2 } = await import("fs/promises");
62052
- const { dirname: dirname5 } = await import("path");
62692
+ const { mkdir: mkdir2, writeFile: writeFile2, stat: stat2 } = await import("fs/promises");
62693
+ const { dirname: dirname6 } = await import("path");
62053
62694
  try {
62054
62695
  await stat2(filePath);
62055
62696
  if (!force) throw new Error(`${filePath} already exists. Use --force to overwrite.`);
@@ -62059,8 +62700,8 @@ async function writeSecretFile(filePath, content, force = false) {
62059
62700
  }
62060
62701
  if (error instanceof Error && !("code" in error)) throw error;
62061
62702
  }
62062
- await mkdir(dirname5(filePath), { recursive: true });
62063
- await writeFile(filePath, content, { mode: 384 });
62703
+ await mkdir2(dirname6(filePath), { recursive: true });
62704
+ await writeFile2(filePath, content, { mode: 384 });
62064
62705
  return filePath;
62065
62706
  }
62066
62707
  async function generateProvisioningPassword() {
@@ -65328,10 +65969,10 @@ function printTeamsHelp() {
65328
65969
  openmates teams update <team-id> [--name <encrypted-name>] [--description <encrypted-description>] [--slug <slug>] [--json]
65329
65970
  openmates teams delete <team-id> --yes [--json]
65330
65971
  openmates teams invite <team-id> (--email <email>|--user <user-id>) [--role admin|member|viewer] [--json]
65331
- openmates teams accept-invite <invite-id> [--json]
65972
+ openmates teams accept-invite <invite-id-or-url> [--email <recipient-email>] [--key <fragment-key>] [--json]
65332
65973
  openmates teams decline-invite <invite-id> [--json]
65333
65974
  openmates teams access-requests <team-id> [--status pending_access_approval|all] [--json]
65334
- openmates teams approve-access <team-id> <access-request-id> --encrypted-team-key <value> [--json]
65975
+ openmates teams approve-access <team-id> <access-request-id> [--encrypted-team-key <value>] [--json]
65335
65976
  openmates teams reject-access <team-id> <access-request-id> [--json]
65336
65977
  openmates teams role <team-id> --user <user-id> --role admin|member|viewer [--json]
65337
65978
  openmates teams remove-member <team-id> --user <user-id> [--json]
@@ -65372,6 +66013,7 @@ function printAppsHelp() {
65372
66013
  openmates apps code run --entry main.py --file main.py [--file requirements.txt]
65373
66014
  openmates apps code run --entry main.py --dir ./project [--exclude node_modules]
65374
66015
  openmates apps models3d search --query benchy [--count 10] [--providers Printables] [--json]
66016
+ openmates apps design export-icon lucide:home --output home.svg [--color '#111827']
65375
66017
  openmates apps travel booking-link --token "<token>" [--context '<json>']
65376
66018
 
65377
66019
  Authentication:
@@ -65388,9 +66030,34 @@ Examples:
65388
66030
  openmates apps examples travel search_connections
65389
66031
  openmates apps code run --language python --filename hello.py --code 'print("Hello from CLI")'
65390
66032
  openmates apps models3d search --query benchy --count 2 --providers Printables --json
66033
+ openmates apps design search_icons --query home --count 12 --json
66034
+ openmates apps design export-icon lucide:home --format png --size 64 --output home.png
65391
66035
  openmates apps travel booking-link --token "<booking_token from search result>"
65392
66036
  openmates apps skill-info web search`);
65393
66037
  }
66038
+ function printDesignIconExportHelp() {
66039
+ console.log(`Design icon export command:
66040
+ openmates apps design export-icon <prefix:name> --output <path> [--color <hex>] [--format svg|png]
66041
+ openmates apps design export-icon --prefix <prefix> --name <name> --output <path>
66042
+ openmates apps design export-icon --svg-path <path> --output <path>
66043
+
66044
+ Options:
66045
+ --output <path> Required local output path.
66046
+ --format svg|png Output format. Defaults from --output extension, otherwise svg.
66047
+ --color <hex> Recolor currentColor-based monotone SVGs locally.
66048
+ --size <px> PNG output width when --format png is used. Default: 256.
66049
+ --width <px> PNG output width override.
66050
+ --height <px> PNG output height override when width is omitted.
66051
+ --palette Treat the icon as a palette icon and reject recolor by default.
66052
+ --allow-palette-recolor
66053
+ Override the palette recolor guard.
66054
+ --api-key <key> Use an API key instead of a stored CLI session.
66055
+ --json Print export metadata as JSON.
66056
+
66057
+ Examples:
66058
+ openmates apps design export-icon lucide:home --output home.svg --color '#111827'
66059
+ openmates apps design export-icon --prefix lucide --name home --format png --size 64 --output home.png`);
66060
+ }
65394
66061
  function printWorkflowsHelp() {
65395
66062
  console.log(`Workflows commands:
65396
66063
  openmates workflows list [--json]
@@ -65585,19 +66252,19 @@ async function handleDocs(client, subcommand, rest, flags) {
65585
66252
  return;
65586
66253
  }
65587
66254
  if (subcommand === "download") {
65588
- const { writeFile, mkdir } = await import("fs/promises");
65589
- const { join: join7, dirname: dirname5 } = await import("path");
66255
+ const { writeFile: writeFile2, mkdir: mkdir2 } = await import("fs/promises");
66256
+ const { join: join7, dirname: dirname6 } = await import("path");
65590
66257
  if (flags.all === true) {
65591
66258
  const outputDir = typeof flags.output === "string" ? flags.output : "./openmates-docs";
65592
66259
  const tree = await client.listDocs();
65593
66260
  const slugs = collectSlugs(tree);
65594
- await mkdir(outputDir, { recursive: true });
66261
+ await mkdir2(outputDir, { recursive: true });
65595
66262
  let count = 0;
65596
66263
  for (const slug2 of slugs) {
65597
66264
  const content2 = await client.getDoc(slug2);
65598
66265
  const filePath = join7(outputDir, `${slug2}.md`);
65599
- await mkdir(dirname5(filePath), { recursive: true });
65600
- await writeFile(filePath, content2, "utf-8");
66266
+ await mkdir2(dirname6(filePath), { recursive: true });
66267
+ await writeFile2(filePath, content2, "utf-8");
65601
66268
  count++;
65602
66269
  process.stderr.write(`\r Downloaded ${count}/${slugs.length}`);
65603
66270
  }
@@ -65616,7 +66283,7 @@ async function handleDocs(client, subcommand, rest, flags) {
65616
66283
  }
65617
66284
  const content = await client.getDoc(slug);
65618
66285
  const filename = typeof flags.output === "string" ? flags.output : `${slug.split("/").pop()}.md`;
65619
- await writeFile(filename, content, "utf-8");
66286
+ await writeFile2(filename, content, "utf-8");
65620
66287
  console.log(`Saved to ${filename}`);
65621
66288
  return;
65622
66289
  }
@@ -65669,7 +66336,7 @@ function isCliEntrypoint() {
65669
66336
  try {
65670
66337
  const invokedPath = realpathSync(entrypoint);
65671
66338
  const modulePath = realpathSync(fileURLToPath2(import.meta.url));
65672
- return invokedPath === modulePath || basename3(invokedPath) === "cli.js" && dirname4(invokedPath) === dirname4(modulePath);
66339
+ return invokedPath === modulePath || basename3(invokedPath) === "cli.js" && dirname5(invokedPath) === dirname5(modulePath);
65673
66340
  } catch {
65674
66341
  return false;
65675
66342
  }
package/dist/cli.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  getExtForLang,
4
4
  serializeToYaml
5
- } from "./chunk-XG7OFIXM.js";
5
+ } from "./chunk-SWTPHQZU.js";
6
6
  import "./chunk-AXNRPVLE.js";
7
7
  export {
8
8
  getExtForLang,
package/dist/index.d.ts CHANGED
@@ -1237,7 +1237,7 @@ declare class OpenMatesClient {
1237
1237
  success: boolean;
1238
1238
  }>;
1239
1239
  listTeamAccessRequests(teamId: string, status?: string | null): Promise<Record<string, unknown>[]>;
1240
- approveTeamAccessRequest(teamId: string, accessRequestId: string, encryptedTeamKey: string): Promise<Record<string, unknown>>;
1240
+ approveTeamAccessRequest(teamId: string, accessRequestId: string, encryptedTeamKey?: string | null): Promise<Record<string, unknown>>;
1241
1241
  rejectTeamAccessRequest(teamId: string, accessRequestId: string): Promise<{
1242
1242
  success: boolean;
1243
1243
  }>;
@@ -4972,6 +4972,29 @@ declare class GeneratedAppSkills {
4972
4972
  readonly workflows: WorkflowsAppSkills;
4973
4973
  }
4974
4974
 
4975
+ type DesignIconExportFormat = "svg" | "png";
4976
+ interface DesignIconExportOptions {
4977
+ svgPath?: string;
4978
+ prefix?: string;
4979
+ name?: string;
4980
+ format?: DesignIconExportFormat;
4981
+ outputPath?: string;
4982
+ color?: string;
4983
+ palette?: boolean;
4984
+ allowPaletteRecolor?: boolean;
4985
+ size?: number;
4986
+ width?: number;
4987
+ height?: number;
4988
+ }
4989
+ interface DesignIconExportResult {
4990
+ format: DesignIconExportFormat;
4991
+ contentType: "image/svg+xml" | "image/png";
4992
+ data: Uint8Array;
4993
+ svg: string;
4994
+ svgPath: string;
4995
+ outputPath?: string;
4996
+ }
4997
+
4975
4998
  declare const PRIORITY_LEVELS: readonly ["none", "low", "medium", "high", "urgent"];
4976
4999
  type TaskPriorityLevel = typeof PRIORITY_LEVELS[number];
4977
5000
  interface DecryptedUserTask {
@@ -5202,6 +5225,7 @@ declare class OpenMates {
5202
5225
  readonly chats: OpenMatesChats;
5203
5226
  readonly connectedAccounts: OpenMatesConnectedAccounts;
5204
5227
  readonly docs: OpenMatesDocs;
5228
+ readonly design: OpenMatesDesign;
5205
5229
  readonly drafts: OpenMatesDrafts;
5206
5230
  readonly embeds: OpenMatesEmbeds;
5207
5231
  readonly feedback: OpenMatesFeedback;
@@ -5372,6 +5396,11 @@ declare class OpenMatesBilling {
5372
5396
  listPurchasedGiftCards(): Promise<Record<string, unknown>>;
5373
5397
  setLowBalanceAutoTopup(input: Record<string, unknown>): Promise<Record<string, unknown>>;
5374
5398
  }
5399
+ declare class OpenMatesDesign {
5400
+ private readonly client;
5401
+ constructor(client: OpenMates);
5402
+ exportIcon(options: DesignIconExportOptions): Promise<DesignIconExportResult>;
5403
+ }
5375
5404
  declare class OpenMatesNotifications {
5376
5405
  private readonly client;
5377
5406
  constructor(client: OpenMates);
@@ -5594,4 +5623,4 @@ type AssistantFeedbackDecision = {
5594
5623
  };
5595
5624
  declare function buildAssistantFeedbackDecision(rating: number): AssistantFeedbackDecision;
5596
5625
 
5597
- export { APP_SKILL_METADATA, ASSISTANT_FEEDBACK_REPORT_TITLE, ASSISTANT_FEEDBACK_THANKS, type ApiKeyCreateOptions, type ApiKeyCreateResult, type ApiKeyRecord, type AssistantFeedbackDecision, type AuthMethodsStatus, type AuthoritativeChatReconciliation, type BackupCodesResult, type BankTransferOrderDetails, type BankTransferStatus, type CachedChat, type CachedNewChatSuggestion, type ChatCreateOptions, type ChatListOptions, type ChatListPage, type ChatResponse, type CliSignupResult, type DecryptedDraft, type DecryptedEmbed, type DecryptedMemoryEntry, type DecryptedMessage, type DecryptedNewChatSuggestion, type DecryptedUserTask, type DocsFile, type DocsFolder, type DocsSearchResult, type DocsTree, type DraftRecord, type EncryptedChatMetadata, type EncryptedDraft, type EncryptedDraftRecord, type FocusModeSelection, type GiftCardBankTransferStatus, INTEREST_TAG_IDS, type InterestTagId, MATE_NAMES, MEMORY_TYPE_REGISTRY, type MemoryFieldDef, type MemoryTypeDef, OpenMates, OpenMatesApiError, OpenMatesClient, type OpenMatesClientOptions, OpenMatesConfigError, type OpenMatesOptions, type OpenMatesSession, type ProjectSourceCapability, type ProjectSourceCreateInput, type ProjectSourceRecord, type ProjectSourceStatus, type ProjectSourceType, SUPPORT_URL, type SyncCache, type TaskListFilters, type TaskPlainCreateOptions, type TaskPlainUpdateOptions, type TaskRecord, type TopicPreferencesPayload, type TotpSetupStartResult, type WorkflowCapability, type WorkflowDetail, type WorkflowEdge, type WorkflowGraph, type WorkflowNode, type WorkflowNodeRun, type WorkflowNodeType, type WorkflowRunContentRetention, type WorkflowRunContentStorage, type WorkflowRunDetail, type WorkflowSummary, buildAssistantFeedbackDecision, defaultCloneBranchForVersion, deriveAppUrl, normalizeInterestTagIds, reconcileAuthoritativeChats, renderSupportInfo };
5626
+ export { APP_SKILL_METADATA, ASSISTANT_FEEDBACK_REPORT_TITLE, ASSISTANT_FEEDBACK_THANKS, type ApiKeyCreateOptions, type ApiKeyCreateResult, type ApiKeyRecord, type AssistantFeedbackDecision, type AuthMethodsStatus, type AuthoritativeChatReconciliation, type BackupCodesResult, type BankTransferOrderDetails, type BankTransferStatus, type CachedChat, type CachedNewChatSuggestion, type ChatCreateOptions, type ChatListOptions, type ChatListPage, type ChatResponse, type CliSignupResult, type DecryptedDraft, type DecryptedEmbed, type DecryptedMemoryEntry, type DecryptedMessage, type DecryptedNewChatSuggestion, type DecryptedUserTask, type DesignIconExportFormat, type DesignIconExportOptions, type DesignIconExportResult, type DocsFile, type DocsFolder, type DocsSearchResult, type DocsTree, type DraftRecord, type EncryptedChatMetadata, type EncryptedDraft, type EncryptedDraftRecord, type FocusModeSelection, type GiftCardBankTransferStatus, INTEREST_TAG_IDS, type InterestTagId, MATE_NAMES, MEMORY_TYPE_REGISTRY, type MemoryFieldDef, type MemoryTypeDef, OpenMates, OpenMatesApiError, OpenMatesClient, type OpenMatesClientOptions, OpenMatesConfigError, type OpenMatesOptions, type OpenMatesSession, type ProjectSourceCapability, type ProjectSourceCreateInput, type ProjectSourceRecord, type ProjectSourceStatus, type ProjectSourceType, SUPPORT_URL, type SyncCache, type TaskListFilters, type TaskPlainCreateOptions, type TaskPlainUpdateOptions, type TaskRecord, type TopicPreferencesPayload, type TotpSetupStartResult, type WorkflowCapability, type WorkflowDetail, type WorkflowEdge, type WorkflowGraph, type WorkflowNode, type WorkflowNodeRun, type WorkflowNodeType, type WorkflowRunContentRetention, type WorkflowRunContentStorage, type WorkflowRunDetail, type WorkflowSummary, buildAssistantFeedbackDecision, defaultCloneBranchForVersion, deriveAppUrl, normalizeInterestTagIds, reconcileAuthoritativeChats, renderSupportInfo };
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@ import {
18
18
  reconcileAuthoritativeChats,
19
19
  renderSupportInfo,
20
20
  serializeToYaml
21
- } from "./chunk-XG7OFIXM.js";
21
+ } from "./chunk-SWTPHQZU.js";
22
22
  import "./chunk-AXNRPVLE.js";
23
23
  export {
24
24
  APP_SKILL_METADATA,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openmates",
3
- "version": "0.15.0-alpha.30",
3
+ "version": "0.15.0-alpha.31",
4
4
  "description": "OpenMates CLI and SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -63,6 +63,7 @@
63
63
  "access": "public"
64
64
  },
65
65
  "dependencies": {
66
+ "@resvg/resvg-js": "^2.6.2",
66
67
  "@toon-format/toon": "2.1.0",
67
68
  "ahocorasick": "1.0.2",
68
69
  "qrcode-terminal": "^0.12.0",