openmates 0.15.0-alpha.30 → 0.15.0-alpha.32

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,25 @@ function normalizeUnixSeconds(value, fallback) {
3908
3908
  }
3909
3909
  return value > 1e10 ? Math.floor(value / 1e3) : Math.floor(value);
3910
3910
  }
3911
+ function defaultIdeaBucketProcessingWindowId(date = /* @__PURE__ */ new Date()) {
3912
+ return date.toISOString().slice(0, 10);
3913
+ }
3914
+ function defaultIdeaBucketScheduledSendAt(nowSeconds2) {
3915
+ const date = new Date(nowSeconds2 * 1e3);
3916
+ const sendAt = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate() + 1, 9, 0, 0) / 1e3;
3917
+ return Math.floor(sendAt);
3918
+ }
3919
+ function buildIdeaBucketMarkdown(prompt, ideas) {
3920
+ const blocks = ideas.map((idea) => [
3921
+ `----- Idea ${idea.index} -----`,
3922
+ idea.content.trim(),
3923
+ "-----------------"
3924
+ ].join("\n"));
3925
+ return [prompt.trim(), ...blocks].join("\n\n");
3926
+ }
3927
+ function shouldWaitForTeamAi(message, teamId) {
3928
+ return !teamId || message.toLowerCase().includes("@openmates");
3929
+ }
3911
3930
  function getClientMessagesVersionForSync(cached) {
3912
3931
  if (cached.messages.length === 0) return 0;
3913
3932
  const messagesVersion = typeof cached.details.messages_v === "number" ? cached.details.messages_v : 0;
@@ -4583,6 +4602,9 @@ var MEMORY_TYPE_REGISTRY = {
4583
4602
  properties: { url: { type: "string" }, notes: { type: "string" } }
4584
4603
  }
4585
4604
  };
4605
+ var IDEABUCKET_DEFAULT_PROCESSING_PROMPT = `These are my captured ideas for today. Please process them, group related thoughts, suggest next actions, and ask clarifying questions where needed:
4606
+
4607
+ If an idea requires deeper work, create or suggest sub-chats for focused research, planning, todos, docs, or implementation.`;
4586
4608
  function reconcileAuthoritativeChats(chats, evidence) {
4587
4609
  const deletedIds = new Set(evidence.deleted_chat_ids ?? []);
4588
4610
  const authoritativeIds = evidence.authoritative && evidence.authoritative_chat_ids ? new Set(evidence.authoritative_chat_ids) : null;
@@ -4980,7 +5002,7 @@ var OpenMatesClient = class _OpenMatesClient {
4980
5002
  }
4981
5003
  async approveTeamAccessRequest(teamId, accessRequestId, encryptedTeamKey) {
4982
5004
  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());
5005
+ 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
5006
  if (!response.ok || !response.data.membership) throw new Error(`Team access approval failed with HTTP ${response.status}`);
4985
5007
  return response.data.membership;
4986
5008
  }
@@ -5066,7 +5088,7 @@ var OpenMatesClient = class _OpenMatesClient {
5066
5088
  this.getCliRequestHeaders()
5067
5089
  );
5068
5090
  if (!response.ok) throw new Error(`${workspaceType} move failed with HTTP ${response.status}`);
5069
- return response.data;
5091
+ return { success: true, ...response.data };
5070
5092
  }
5071
5093
  async getAnonymousFreeUsageStatus() {
5072
5094
  const response = await this.http.get("/v1/anonymous/free-usage/status");
@@ -5762,7 +5784,8 @@ var OpenMatesClient = class _OpenMatesClient {
5762
5784
  await ws.sendAsync("update_draft", {
5763
5785
  chat_id: params.chatId,
5764
5786
  encrypted_draft_md: params.encryptedDraftMd,
5765
- encrypted_draft_preview: params.encryptedDraftPreview ?? null
5787
+ encrypted_draft_preview: params.encryptedDraftPreview ?? null,
5788
+ ...params.extraPayload ?? {}
5766
5789
  });
5767
5790
  const response = await receipt;
5768
5791
  const draftV = Number(response.payload.draft_v ?? 0);
@@ -5782,6 +5805,78 @@ var OpenMatesClient = class _OpenMatesClient {
5782
5805
  ws.close();
5783
5806
  }
5784
5807
  }
5808
+ async addIdeaBucketText(params) {
5809
+ const ideaText = params.text.trim();
5810
+ if (!ideaText) throw new Error("IdeaBucket text capture requires non-empty text.");
5811
+ const now = Math.floor(Date.now() / 1e3);
5812
+ const chatId = params.chatId ?? randomUUID5();
5813
+ const bucketId = params.bucketId ?? defaultIdeaBucketProcessingWindowId();
5814
+ const processingWindowId = bucketId;
5815
+ const scheduledSendAt = params.scheduledSendAt ?? defaultIdeaBucketScheduledSendAt(now);
5816
+ const version = params.version ?? now;
5817
+ const prompt = params.prompt ?? IDEABUCKET_DEFAULT_PROCESSING_PROMPT;
5818
+ const markdown = buildIdeaBucketMarkdown(prompt, [{ index: 1, content: ideaText }]);
5819
+ const preview = `IdeaBucket ${processingWindowId}: ${ideaText.slice(0, 120)}`;
5820
+ const serverProcessablePayload = JSON.stringify({
5821
+ prompt,
5822
+ processing_window_id: processingWindowId,
5823
+ ideas: [{ index: 1, type: "text", text: ideaText }]
5824
+ });
5825
+ const payloadHash = createHash7("sha256").update(serverProcessablePayload).digest("hex");
5826
+ const masterKey = this.getMasterKeyBytes();
5827
+ const encryptedDraftMd = await encryptWithAesGcmCombined(markdown, masterKey);
5828
+ const encryptedPreview = await encryptWithAesGcmCombined(preview, masterKey);
5829
+ const encryptedFutureUserMessage = await encryptWithAesGcmCombined(markdown, masterKey);
5830
+ const encryptedSystemEvent = await encryptWithAesGcmCombined(JSON.stringify({
5831
+ type: "ideabucket_triggered_send",
5832
+ processing_window_id: processingWindowId,
5833
+ source: "openmates_cli"
5834
+ }), masterKey);
5835
+ const serverCacheCiphertext = await encryptWithAesGcmCombined(serverProcessablePayload, masterKey);
5836
+ const encrypted = await this.saveEncryptedDraft({
5837
+ chatId,
5838
+ encryptedDraftMd,
5839
+ encryptedDraftPreview: encryptedPreview,
5840
+ extraPayload: {
5841
+ ideabucket: true,
5842
+ ideabucket_processing_window_id: processingWindowId,
5843
+ ideabucket_processing_version: version,
5844
+ scheduled_send_at: scheduledSendAt,
5845
+ server_vault_encrypted_processing_payload: serverCacheCiphertext,
5846
+ client_encrypted_future_user_message: encryptedFutureUserMessage,
5847
+ client_encrypted_ideabucket_system_event: encryptedSystemEvent,
5848
+ payload_hash: payloadHash
5849
+ }
5850
+ });
5851
+ return {
5852
+ chatId,
5853
+ bucketId,
5854
+ processingWindowId,
5855
+ scheduledSendAt,
5856
+ draftV: encrypted.draftV,
5857
+ processingPayloadSynced: true,
5858
+ payloadHash,
5859
+ markdown,
5860
+ preview
5861
+ };
5862
+ }
5863
+ async getIdeaBucketStatus(bucketId) {
5864
+ this.requireSession();
5865
+ const path = bucketId ? `/v1/ideabucket/buckets/${encodeURIComponent(bucketId)}` : "/v1/ideabucket/buckets";
5866
+ const response = await this.http.get(path, this.getCliRequestHeaders());
5867
+ if (!response.ok) throw new Error(`IdeaBucket status failed with HTTP ${response.status}`);
5868
+ return response.data;
5869
+ }
5870
+ async processIdeaBucketBucket(bucketId, options = {}) {
5871
+ this.requireSession();
5872
+ const response = await this.http.post(
5873
+ `/v1/ideabucket/buckets/${encodeURIComponent(bucketId)}/process`,
5874
+ { now: options.now === true },
5875
+ this.getCliRequestHeaders()
5876
+ );
5877
+ if (!response.ok) throw new Error(`IdeaBucket process failed with HTTP ${response.status}`);
5878
+ return response.data;
5879
+ }
5785
5880
  async listDrafts(forceRefresh = false) {
5786
5881
  if (forceRefresh) await this.reconcileDraftVersions();
5787
5882
  const cache = await this.ensureSynced(forceRefresh);
@@ -6307,6 +6402,7 @@ var OpenMatesClient = class _OpenMatesClient {
6307
6402
  }
6308
6403
  async sendMessage(params) {
6309
6404
  const teamId = this.resolveTeamContext({ teamId: params.teamId, personal: params.personal });
6405
+ const shouldWaitForAi = shouldWaitForTeamAi(params.message, teamId);
6310
6406
  let chatId;
6311
6407
  if (!params.chatId) {
6312
6408
  chatId = randomUUID5();
@@ -6488,7 +6584,7 @@ var OpenMatesClient = class _OpenMatesClient {
6488
6584
  if (encryptedEmbeds.length > 0) {
6489
6585
  messagePayload.encrypted_embeds = encryptedEmbeds;
6490
6586
  }
6491
- let precollectedResponse = params.precollectResponse && params.incognito ? ws.collectAiResponse(messageId, chatId, { onStream: params.onStream, timeoutMs: params.responseTimeoutMs }) : null;
6587
+ let precollectedResponse = params.precollectResponse && params.incognito && shouldWaitForAi ? ws.collectAiResponse(messageId, chatId, { onStream: params.onStream, timeoutMs: params.responseTimeoutMs }) : null;
6492
6588
  if (!params.incognito && chatKeyBytes && encryptedChatKey) {
6493
6589
  const protocolVersion = 1;
6494
6590
  const chatKeyVersion = 1;
@@ -6568,7 +6664,7 @@ var OpenMatesClient = class _OpenMatesClient {
6568
6664
  terminalExpectedMessagesV = ackPayload.committed_messages_v;
6569
6665
  }
6570
6666
  }
6571
- if (params.precollectResponse && !params.incognito) {
6667
+ if (params.precollectResponse && !params.incognito && shouldWaitForAi) {
6572
6668
  precollectedResponse = ws.collectAiResponse(messageId, chatId, {
6573
6669
  onStream: params.onStream,
6574
6670
  timeoutMs: params.responseTimeoutMs,
@@ -6781,7 +6877,9 @@ var OpenMatesClient = class _OpenMatesClient {
6781
6877
  onSubChatEvent: handleSubChatEvent,
6782
6878
  onAppSettingsMemoriesRequest: handleAppSettingsMemoriesRequest
6783
6879
  };
6784
- if (params.incognito) {
6880
+ if (!shouldWaitForAi) {
6881
+ ws.close();
6882
+ } else if (params.incognito) {
6785
6883
  try {
6786
6884
  const resp = await (precollectedResponse ?? ws.collectAiResponse(messageId, chatId, {
6787
6885
  ...streamOpts,
@@ -9009,7 +9107,7 @@ var OpenMatesClient = class _OpenMatesClient {
9009
9107
  */
9010
9108
  async sdkGetMemories(teamId) {
9011
9109
  const response = await this.http.get(
9012
- `/v1/sdk/memories?team_id=${encodeURIComponent(teamId)}`,
9110
+ `/v1/teams/${encodeURIComponent(teamId)}/memories`,
9013
9111
  this.getCliRequestHeaders()
9014
9112
  );
9015
9113
  if (!response.ok) throw new Error(`Team memory list failed with HTTP ${response.status}`);
@@ -14195,10 +14293,114 @@ import { decode as toonDecode } from "@toon-format/toon";
14195
14293
  import { createHash as createHash8, randomBytes as randomBytes4, randomUUID as randomUUID6 } from "crypto";
14196
14294
  import { chmodSync as chmodSync2, existsSync as existsSync5, mkdirSync as mkdirSync3, readFileSync as readFileSync4, writeFileSync as writeFileSync3 } from "fs";
14197
14295
  import { homedir as homedir4 } from "os";
14198
- import { dirname, join as join3 } from "path";
14296
+ import { dirname as dirname2, join as join3 } from "path";
14297
+
14298
+ // src/designIcons.ts
14299
+ import { mkdir, writeFile } from "fs/promises";
14300
+ import { dirname, extname } from "path";
14301
+ import { Resvg } from "@resvg/resvg-js";
14302
+ var ICON_SEGMENT_PATTERN = /^[a-z0-9][a-z0-9._-]*$/i;
14303
+ var ICON_PATH_PATTERN = /^\/v1\/apps\/design\/icons\/iconify\/([a-z0-9][a-z0-9._-]*)\/([a-z0-9][a-z0-9._-]*)\.svg$/i;
14304
+ var HEX_COLOR_PATTERN = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
14305
+ var DEFAULT_PNG_SIZE = 256;
14306
+ var MAX_PNG_SIZE = 4096;
14307
+ async function exportDesignIcon(request) {
14308
+ const svgPath = resolveDesignIconSvgPath(request);
14309
+ const format = resolveDesignIconFormat(request.format, request.outputPath);
14310
+ const color = normalizeDesignIconColor(request.color);
14311
+ if (color && request.palette === true && request.allowPaletteRecolor !== true) {
14312
+ throw new Error("Palette icons cannot be recolored unless allowPaletteRecolor is true");
14313
+ }
14314
+ const fetched = await request.fetchSvg(svgPath);
14315
+ const svg = applyDesignIconColor(decodeFetchedSvg(fetched), color);
14316
+ const data = format === "svg" ? new TextEncoder().encode(svg) : renderDesignIconPng(svg, request);
14317
+ const result = {
14318
+ format,
14319
+ contentType: format === "svg" ? "image/svg+xml" : "image/png",
14320
+ data,
14321
+ svg,
14322
+ svgPath,
14323
+ outputPath: request.outputPath
14324
+ };
14325
+ if (request.outputPath) {
14326
+ await writeExportFile(request.outputPath, data);
14327
+ }
14328
+ return result;
14329
+ }
14330
+ function resolveDesignIconSvgPath(options) {
14331
+ if (options.svgPath) {
14332
+ const trimmed = options.svgPath.trim();
14333
+ if (!ICON_PATH_PATTERN.test(trimmed)) {
14334
+ throw new Error("svgPath must be an OpenMates Design Iconify SVG path");
14335
+ }
14336
+ return trimmed;
14337
+ }
14338
+ const prefix = options.prefix?.trim();
14339
+ const name = options.name?.trim();
14340
+ if (!prefix || !name) {
14341
+ throw new Error("Provide either svgPath or both prefix and name");
14342
+ }
14343
+ if (!ICON_SEGMENT_PATTERN.test(prefix) || !ICON_SEGMENT_PATTERN.test(name)) {
14344
+ throw new Error("Icon prefix and name may contain only letters, numbers, dots, underscores, and dashes");
14345
+ }
14346
+ return `/v1/apps/design/icons/iconify/${encodeURIComponent(prefix)}/${encodeURIComponent(name)}.svg`;
14347
+ }
14348
+ function normalizeDesignIconColor(color) {
14349
+ if (color === void 0) return void 0;
14350
+ const trimmed = color.trim();
14351
+ if (!HEX_COLOR_PATTERN.test(trimmed)) {
14352
+ throw new Error("Icon color must be a hex color such as #111827");
14353
+ }
14354
+ return trimmed;
14355
+ }
14356
+ function applyDesignIconColor(svg, color) {
14357
+ if (!color) return svg;
14358
+ const withCurrentColor = svg.replace(/\bcurrentColor\b/g, color);
14359
+ return withCurrentColor.replace(/<svg\b([^>]*)>/i, (match, attrs) => {
14360
+ if (/\scolor\s*=/.test(attrs)) {
14361
+ return match.replace(/\scolor\s*=\s*(['"])[^'"]*\1/i, ` color="${color}"`);
14362
+ }
14363
+ return `<svg${attrs} color="${color}">`;
14364
+ });
14365
+ }
14366
+ function resolveDesignIconFormat(format, outputPath) {
14367
+ if (format) return format;
14368
+ const extension = outputPath ? extname(outputPath).toLowerCase() : ".svg";
14369
+ return extension === ".png" ? "png" : "svg";
14370
+ }
14371
+ function decodeFetchedSvg(value) {
14372
+ if (typeof value === "string") return value;
14373
+ return new TextDecoder().decode(value);
14374
+ }
14375
+ function renderDesignIconPng(svg, options) {
14376
+ const width = normalizePngSize(options.width, "width");
14377
+ const height = normalizePngSize(options.height, "height");
14378
+ const size = normalizePngSize(options.size, "size") ?? DEFAULT_PNG_SIZE;
14379
+ const fitTo = width ? { mode: "width", value: width } : height ? { mode: "height", value: height } : { mode: "width", value: size };
14380
+ return new Uint8Array(new Resvg(svg, { fitTo, logLevel: "off" }).render().asPng());
14381
+ }
14382
+ function normalizePngSize(value, label) {
14383
+ if (value === void 0) return void 0;
14384
+ if (!Number.isInteger(value) || value <= 0 || value > MAX_PNG_SIZE) {
14385
+ throw new Error(`PNG ${label} must be an integer from 1 to ${MAX_PNG_SIZE}`);
14386
+ }
14387
+ return value;
14388
+ }
14389
+ async function writeExportFile(path, data) {
14390
+ const directory = dirname(path);
14391
+ if (directory && directory !== ".") {
14392
+ await mkdir(directory, { recursive: true });
14393
+ }
14394
+ await writeFile(path, data);
14395
+ }
14396
+
14397
+ // src/sdk.ts
14199
14398
  var DEFAULT_API_URL2 = "https://api.openmates.org";
14200
14399
  var DEFAULT_RECOVERY_POLL_INTERVAL_MS = 500;
14201
14400
  var DEFAULT_RECOVERY_TIMEOUT_MS = 6e4;
14401
+ var IDEABUCKET_DEFAULT_PROCESSING_PROMPT2 = `These are my captured ideas for today. Please process them, group related thoughts, suggest next actions, and ask clarifying questions where needed:
14402
+
14403
+ If an idea requires deeper work, create or suggest sub-chats for focused research, planning, todos, docs, or implementation.`;
14202
14404
  var OpenMatesConfigError = class extends Error {
14203
14405
  constructor(message) {
14204
14406
  super(message);
@@ -14223,10 +14425,12 @@ var OpenMates = class {
14223
14425
  chats;
14224
14426
  connectedAccounts;
14225
14427
  docs;
14428
+ design;
14226
14429
  drafts;
14227
14430
  embeds;
14228
14431
  feedback;
14229
14432
  inspirations;
14433
+ ideabucket;
14230
14434
  apiKeys;
14231
14435
  learningMode;
14232
14436
  memories;
@@ -14237,6 +14441,7 @@ var OpenMates = class {
14237
14441
  settings;
14238
14442
  plans;
14239
14443
  tasks;
14444
+ teams;
14240
14445
  workflows;
14241
14446
  apiKey;
14242
14447
  apiUrl;
@@ -14254,10 +14459,12 @@ var OpenMates = class {
14254
14459
  this.chats = new OpenMatesChats(this);
14255
14460
  this.connectedAccounts = new OpenMatesConnectedAccounts(this);
14256
14461
  this.docs = new OpenMatesDocs(this);
14462
+ this.design = new OpenMatesDesign(this);
14257
14463
  this.drafts = new OpenMatesDrafts(this);
14258
14464
  this.embeds = new OpenMatesEmbeds(this);
14259
14465
  this.feedback = new OpenMatesFeedback(this);
14260
14466
  this.inspirations = new OpenMatesInspirations(this);
14467
+ this.ideabucket = new OpenMatesIdeaBucket(this);
14261
14468
  this.apiKeys = new OpenMatesApiKeys(this);
14262
14469
  this.learningMode = new OpenMatesLearningMode(this);
14263
14470
  this.memories = new OpenMatesMemories(this);
@@ -14268,6 +14475,7 @@ var OpenMates = class {
14268
14475
  this.settings = new OpenMatesSettings(this);
14269
14476
  this.plans = new OpenMatesPlans(this);
14270
14477
  this.tasks = new OpenMatesTasks(this);
14478
+ this.teams = new OpenMatesTeams(this);
14271
14479
  this.workflows = new OpenMatesWorkflows(this);
14272
14480
  }
14273
14481
  async runAppSkill(appId, skillId, input) {
@@ -14515,7 +14723,7 @@ function loadOrCreateDeviceId(customPath) {
14515
14723
  if (stored) return stored;
14516
14724
  }
14517
14725
  const deviceId = randomUUID6();
14518
- mkdirSync3(dirname(path), { recursive: true, mode: 448 });
14726
+ mkdirSync3(dirname2(path), { recursive: true, mode: 448 });
14519
14727
  writeFileSync3(path, `${deviceId}
14520
14728
  `, { encoding: "utf8", mode: 384 });
14521
14729
  chmodSync2(path, 384);
@@ -14838,6 +15046,78 @@ var OpenMatesChats = class {
14838
15046
  return this.send(message, { saveToAccount: false });
14839
15047
  }
14840
15048
  };
15049
+ var OpenMatesIdeaBucket = class {
15050
+ client;
15051
+ constructor(client) {
15052
+ this.client = client;
15053
+ }
15054
+ async add(input) {
15055
+ const payload = await this.buildEncryptedAddPayload(input);
15056
+ const bucketId = String(payload.ideabucket_processing_window_id);
15057
+ return this.client.request(
15058
+ `/v1/sdk/ideabucket/buckets/${encodeURIComponent(bucketId)}/add`,
15059
+ payload
15060
+ );
15061
+ }
15062
+ async status(bucketId) {
15063
+ const path = bucketId ? `/v1/sdk/ideabucket/buckets/${encodeURIComponent(bucketId)}` : "/v1/sdk/ideabucket/buckets";
15064
+ return this.client.get(path);
15065
+ }
15066
+ async process(bucketId, options = {}) {
15067
+ return this.client.request(
15068
+ `/v1/sdk/ideabucket/buckets/${encodeURIComponent(bucketId)}/process`,
15069
+ { now: options.now === true }
15070
+ );
15071
+ }
15072
+ async buildEncryptedAddPayload(input) {
15073
+ const ideaText = input.text.trim();
15074
+ if (!ideaText) throw new OpenMatesConfigError("IdeaBucket add requires non-empty text.");
15075
+ const now = Math.floor(Date.now() / 1e3);
15076
+ const bucketId = input.bucketId ?? new Date(now * 1e3).toISOString().slice(0, 10);
15077
+ const scheduledSendAt = input.scheduledSendAt ?? defaultIdeaBucketScheduledSendAt2(now);
15078
+ const chatId = input.chatId ?? randomUUID6();
15079
+ const prompt = input.prompt ?? IDEABUCKET_DEFAULT_PROCESSING_PROMPT2;
15080
+ const markdown = buildIdeaBucketMarkdown2(prompt, ideaText);
15081
+ const preview = `IdeaBucket ${bucketId}: ${ideaText.slice(0, 120)}`;
15082
+ const serverProcessablePayload = JSON.stringify({
15083
+ prompt,
15084
+ bucket_id: bucketId,
15085
+ processing_window_id: bucketId,
15086
+ ideas: [{ index: 1, type: "text", text: ideaText }]
15087
+ });
15088
+ const payloadHash = createHash8("sha256").update(serverProcessablePayload).digest("hex");
15089
+ const masterKey = await this.client.masterKey();
15090
+ return {
15091
+ chat_id: chatId,
15092
+ encrypted_draft_md: await encryptWithAesGcmCombined(markdown, masterKey),
15093
+ encrypted_draft_preview: await encryptWithAesGcmCombined(preview, masterKey),
15094
+ ideabucket: true,
15095
+ ideabucket_processing_window_id: bucketId,
15096
+ ideabucket_processing_version: now,
15097
+ scheduled_send_at: scheduledSendAt,
15098
+ server_vault_encrypted_processing_payload: await encryptWithAesGcmCombined(serverProcessablePayload, masterKey),
15099
+ client_encrypted_future_user_message: await encryptWithAesGcmCombined(markdown, masterKey),
15100
+ client_encrypted_ideabucket_system_event: await encryptWithAesGcmCombined(JSON.stringify({
15101
+ type: "ideabucket_triggered_send",
15102
+ bucket_id: bucketId,
15103
+ processing_window_id: bucketId,
15104
+ source: "openmates_sdk"
15105
+ }), masterKey),
15106
+ payload_hash: payloadHash
15107
+ };
15108
+ }
15109
+ };
15110
+ function defaultIdeaBucketScheduledSendAt2(nowSeconds2) {
15111
+ const date = new Date(nowSeconds2 * 1e3);
15112
+ return Math.floor(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate() + 1, 9, 0, 0) / 1e3);
15113
+ }
15114
+ function buildIdeaBucketMarkdown2(prompt, ideaText) {
15115
+ return [prompt.trim(), [
15116
+ "----- Idea 1 -----",
15117
+ ideaText.trim(),
15118
+ "-----------------"
15119
+ ].join("\n")].join("\n\n");
15120
+ }
14841
15121
  var OpenMatesDrafts = class {
14842
15122
  client;
14843
15123
  constructor(client) {
@@ -15130,6 +15410,18 @@ var OpenMatesBilling = class {
15130
15410
  return this.client.request("/v1/sdk/billing/auto-topup/low-balance", input);
15131
15411
  }
15132
15412
  };
15413
+ var OpenMatesDesign = class {
15414
+ client;
15415
+ constructor(client) {
15416
+ this.client = client;
15417
+ }
15418
+ async exportIcon(options) {
15419
+ return exportDesignIcon({
15420
+ ...options,
15421
+ fetchSvg: async (path) => (await this.client.getRaw(path)).data
15422
+ });
15423
+ }
15424
+ };
15133
15425
  var OpenMatesNotifications = class {
15134
15426
  client;
15135
15427
  constructor(client) {
@@ -15693,6 +15985,9 @@ var OpenMatesConnectedAccounts = class {
15693
15985
  this.client = client;
15694
15986
  }
15695
15987
  async import(input) {
15988
+ if (input.teamId) {
15989
+ throw new OpenMatesConfigError("Team connected accounts are not supported yet.");
15990
+ }
15696
15991
  const payload = await decryptConnectedAccountCliTransferPayload(input.payload, input.passcode);
15697
15992
  const account = await this.client.get("/v1/sdk/account");
15698
15993
  const userId = typeof account.id === "string" ? account.id : "";
@@ -15707,6 +16002,94 @@ var OpenMatesConnectedAccounts = class {
15707
16002
  return this.client.request("/v1/sdk/connected-accounts/import", { row });
15708
16003
  }
15709
16004
  };
16005
+ var OpenMatesTeams = class {
16006
+ client;
16007
+ constructor(client) {
16008
+ this.client = client;
16009
+ }
16010
+ async list() {
16011
+ const result = await this.client.get("/v1/teams");
16012
+ return result.teams ?? [];
16013
+ }
16014
+ async get(teamId) {
16015
+ const result = await this.client.get(`/v1/teams/${encodeURIComponent(teamId)}`);
16016
+ return result.team ?? result;
16017
+ }
16018
+ async create(input) {
16019
+ const result = await this.client.request("/v1/teams", input);
16020
+ return result.team ?? result;
16021
+ }
16022
+ async update(teamId, input) {
16023
+ const result = await this.client.patch(`/v1/teams/${encodeURIComponent(teamId)}`, input);
16024
+ return result.team ?? result;
16025
+ }
16026
+ async delete(teamId) {
16027
+ return this.client.delete(`/v1/teams/${encodeURIComponent(teamId)}`);
16028
+ }
16029
+ async invite(teamId, input) {
16030
+ const result = await this.client.request(`/v1/teams/${encodeURIComponent(teamId)}/invites`, input);
16031
+ return result.invite ?? result;
16032
+ }
16033
+ async acceptInvite(inviteId, input = {}) {
16034
+ return this.client.request(`/v1/team-invites/${encodeURIComponent(inviteId)}/accept`, input);
16035
+ }
16036
+ async declineInvite(inviteId, input = {}) {
16037
+ return this.client.request(`/v1/team-invites/${encodeURIComponent(inviteId)}/decline`, input);
16038
+ }
16039
+ async accessRequests(teamId, status) {
16040
+ const query = status ? `?status=${encodeURIComponent(status)}` : "";
16041
+ const result = await this.client.get(`/v1/teams/${encodeURIComponent(teamId)}/access-requests${query}`);
16042
+ return result.access_requests ?? [];
16043
+ }
16044
+ async approveAccess(teamId, accessRequestId, input = {}) {
16045
+ const result = await this.client.request(`/v1/teams/${encodeURIComponent(teamId)}/access-requests/${encodeURIComponent(accessRequestId)}/approve`, input);
16046
+ return result.membership ?? result;
16047
+ }
16048
+ async rejectAccess(teamId, accessRequestId, input = {}) {
16049
+ return this.client.request(`/v1/teams/${encodeURIComponent(teamId)}/access-requests/${encodeURIComponent(accessRequestId)}/reject`, input);
16050
+ }
16051
+ async removeMember(teamId, memberUserId, input = {}) {
16052
+ return this.client.request(`/v1/teams/${encodeURIComponent(teamId)}/members/${encodeURIComponent(memberUserId)}/remove`, input);
16053
+ }
16054
+ async billing(teamId) {
16055
+ const result = await this.client.get(`/v1/teams/${encodeURIComponent(teamId)}/billing`);
16056
+ return result.billing ?? result;
16057
+ }
16058
+ async addCredits(teamId, input) {
16059
+ const result = await this.client.request(`/v1/teams/${encodeURIComponent(teamId)}/billing/credits`, input);
16060
+ return result.billing ?? result;
16061
+ }
16062
+ async usage(teamId, memberUserId) {
16063
+ const query = memberUserId ? `?member_user_id=${encodeURIComponent(memberUserId)}` : "";
16064
+ const result = await this.client.get(`/v1/teams/${encodeURIComponent(teamId)}/billing/usage${query}`);
16065
+ return result.usage ?? [];
16066
+ }
16067
+ async memories(teamId) {
16068
+ const result = await this.client.get(`/v1/teams/${encodeURIComponent(teamId)}/memories`);
16069
+ return result.memories ?? [];
16070
+ }
16071
+ async move(workspaceType, objectId, teamId) {
16072
+ const routes = {
16073
+ chat: "chats",
16074
+ project: "projects",
16075
+ task: "user-tasks",
16076
+ plan: "user-plans",
16077
+ workflow: "workflows"
16078
+ };
16079
+ const route = routes[workspaceType];
16080
+ if (!route) throw new OpenMatesConfigError("Unsupported team move workspace type");
16081
+ return this.client.request(
16082
+ `/v1/${route}/${encodeURIComponent(objectId)}/move`,
16083
+ { team_id: teamId, confirmed: true, moved_at: Math.floor(Date.now() / 1e3) }
16084
+ );
16085
+ }
16086
+ async export(teamId, input = {}) {
16087
+ return this.client.request(`/v1/teams/${encodeURIComponent(teamId)}/export`, input);
16088
+ }
16089
+ async import(input) {
16090
+ return this.client.request("/v1/teams/import", input);
16091
+ }
16092
+ };
15710
16093
  var OpenMatesLearningMode = class {
15711
16094
  client;
15712
16095
  constructor(client) {
@@ -15767,7 +16150,7 @@ import { createInterface as createInterface5 } from "readline/promises";
15767
16150
  import { stdin as stdin3, stdout as stdout2 } from "process";
15768
16151
  import { readFileSync as readFileSync10, realpathSync, writeFileSync as writeFileSync7 } from "fs";
15769
16152
  import { fileURLToPath as fileURLToPath2 } from "url";
15770
- import { basename as basename3, dirname as dirname4 } from "path";
16153
+ import { basename as basename3, dirname as dirname5 } from "path";
15771
16154
  import { randomUUID as randomUUID8 } from "crypto";
15772
16155
  import WebSocket2 from "ws";
15773
16156
 
@@ -16485,7 +16868,7 @@ var OutputRedactor = class {
16485
16868
 
16486
16869
  // src/fileEmbed.ts
16487
16870
  import { readFileSync as readFileSync5, statSync, existsSync as existsSync6 } from "fs";
16488
- import { basename, extname, resolve as resolve2 } from "path";
16871
+ import { basename, extname as extname2, resolve as resolve2 } from "path";
16489
16872
  import { homedir as homedir5 } from "os";
16490
16873
  import { createHash as createHash9 } from "crypto";
16491
16874
  var MAX_PER_FILE_SIZE = 100 * 1024 * 1024;
@@ -16592,7 +16975,7 @@ function isEnvFile(filename) {
16592
16975
  return lower === ".env" || lower.startsWith(".env.") || lower === ".envrc";
16593
16976
  }
16594
16977
  function getExt(filename) {
16595
- const ext = extname(filename).toLowerCase();
16978
+ const ext = extname2(filename).toLowerCase();
16596
16979
  return ext.startsWith(".") ? ext.slice(1) : ext;
16597
16980
  }
16598
16981
  function isCodeOrTextFile(filename) {
@@ -18357,7 +18740,7 @@ import { chmodSync as chmodSync3, closeSync, copyFileSync, cpSync, existsSync as
18357
18740
  import { createInterface as createInterface3 } from "readline";
18358
18741
  import { createInterface as createPromptInterface } from "readline/promises";
18359
18742
  import { homedir as homedir6 } from "os";
18360
- import { dirname as dirname2, join as join4, resolve as resolve3 } from "path";
18743
+ import { dirname as dirname3, join as join4, resolve as resolve3 } from "path";
18361
18744
 
18362
18745
  // src/branding.ts
18363
18746
  var OPENMATES_WORDMARK = "OPENMATES";
@@ -19010,10 +19393,10 @@ async function fetchText(url) {
19010
19393
  return response.text();
19011
19394
  }
19012
19395
  function packagedTemplatePath(role) {
19013
- return join4(dirname2(new URL(import.meta.url).pathname), "..", "templates", ROLE_TEMPLATE_FILES[role]);
19396
+ return join4(dirname3(new URL(import.meta.url).pathname), "..", "templates", ROLE_TEMPLATE_FILES[role]);
19014
19397
  }
19015
19398
  function packagedCaddyTemplatePath(role) {
19016
- return join4(dirname2(new URL(import.meta.url).pathname), "..", "templates", "caddy", role, "Caddyfile");
19399
+ return join4(dirname3(new URL(import.meta.url).pathname), "..", "templates", "caddy", role, "Caddyfile");
19017
19400
  }
19018
19401
  function fileHash(path) {
19019
19402
  if (!existsSync7(path)) return null;
@@ -19117,7 +19500,7 @@ function defaultCloneBranchForVersion(version) {
19117
19500
  }
19118
19501
  function hasLlmCredentials(envPath) {
19119
19502
  if (!existsSync7(envPath)) return false;
19120
- if (hasLocalAiModels(dirname2(envPath))) return true;
19503
+ if (hasLocalAiModels(dirname3(envPath))) return true;
19121
19504
  const content = readFileSync6(envPath, "utf-8");
19122
19505
  for (const line of content.split("\n")) {
19123
19506
  const trimmed = line.trim();
@@ -19168,7 +19551,7 @@ function imageBackendConfigPath(installPath) {
19168
19551
  function ensureImageRuntimeConfig(installPath) {
19169
19552
  const configPath = imageBackendConfigPath(installPath);
19170
19553
  if (existsSync7(configPath)) return;
19171
- mkdirSync4(dirname2(configPath), { recursive: true });
19554
+ mkdirSync4(dirname3(configPath), { recursive: true });
19172
19555
  writeFileSync4(configPath, renderFeatureOverrides({ enabled: [], disabled: [] }));
19173
19556
  }
19174
19557
  function readLocalModelOverlay(path) {
@@ -19183,7 +19566,7 @@ function readLocalModelOverlay(path) {
19183
19566
  }
19184
19567
  }
19185
19568
  function writeLocalModelOverlay(path, overlay) {
19186
- mkdirSync4(dirname2(path), { recursive: true });
19569
+ mkdirSync4(dirname3(path), { recursive: true });
19187
19570
  writeFileSync4(path, `${JSON.stringify(overlay, null, 2)}
19188
19571
  `);
19189
19572
  }
@@ -19242,13 +19625,13 @@ function updateStatusFile(installPath, role) {
19242
19625
  }
19243
19626
  function writeUpdateStatus(installPath, role, status) {
19244
19627
  const filePath = updateStatusFile(installPath, role);
19245
- mkdirSync4(dirname2(filePath), { recursive: true, mode: 448 });
19628
+ mkdirSync4(dirname3(filePath), { recursive: true, mode: 448 });
19246
19629
  writeFileSync4(filePath, `${JSON.stringify({ role, updated_at: (/* @__PURE__ */ new Date()).toISOString(), ...status }, null, 2)}
19247
19630
  `, { mode: 384 });
19248
19631
  }
19249
19632
  function copyIfExists(source, destination) {
19250
19633
  if (!existsSync7(source)) return;
19251
- mkdirSync4(dirname2(destination), { recursive: true });
19634
+ mkdirSync4(dirname3(destination), { recursive: true });
19252
19635
  cpSync(source, destination, { recursive: true, force: true });
19253
19636
  }
19254
19637
  function readEnvMap(installPath) {
@@ -20699,7 +21082,7 @@ WARNING: This will replace ${appliedPath} with the packaged ${role} Caddyfile.`)
20699
21082
  const backupPath = `${appliedPath}.openmates-backup-${nowStamp()}`;
20700
21083
  const hadExistingCaddyfile = existsSync7(appliedPath);
20701
21084
  try {
20702
- mkdirSync4(dirname2(appliedPath), { recursive: true });
21085
+ mkdirSync4(dirname3(appliedPath), { recursive: true });
20703
21086
  if (hadExistingCaddyfile) copyFileSync(appliedPath, backupPath);
20704
21087
  copyFileSync(templatePath, appliedPath);
20705
21088
  execSync("systemctl reload caddy", { stdio: "inherit" });
@@ -35945,6 +36328,417 @@ var libraryBookReturnWorkflowChat = {
35945
36328
  }
35946
36329
  };
35947
36330
 
36331
+ // ../ui/src/demo_chats/data/example_chats/dashboard-sidebar-svg-icons.ts
36332
+ var dashboardSidebarSvgIconsChat = {
36333
+ chat_id: "example-dashboard-sidebar-svg-icons",
36334
+ slug: "dashboard-sidebar-svg-icons",
36335
+ title: "example_chats.dashboard_sidebar_svg_icons.title",
36336
+ summary: "example_chats.dashboard_sidebar_svg_icons.summary",
36337
+ icon: "design",
36338
+ category: "design",
36339
+ keywords: ["SVG icons", "dashboard sidebar", "Iconify", "Tabler Icons", "Remix Icon", "Material Symbols", "design"],
36340
+ follow_up_suggestions: [],
36341
+ messages: [
36342
+ {
36343
+ "id": "495cce69-f6d7-45df-a0bf-aa7569dff4c9",
36344
+ "role": "user",
36345
+ "content": "example_chats.dashboard_sidebar_svg_icons.message_1",
36346
+ "created_at": 1784380324
36347
+ },
36348
+ {
36349
+ "id": "3e7b7da9-6bed-568e-a77b-25dcdd836582",
36350
+ "role": "assistant",
36351
+ "content": "example_chats.dashboard_sidebar_svg_icons.message_2",
36352
+ "created_at": 1784380340,
36353
+ "user_message_id": "495cce69-f6d7-45df-a0bf-aa7569dff4c9",
36354
+ "category": "design",
36355
+ "model_name": "Gemini 3 Flash"
36356
+ }
36357
+ ],
36358
+ embeds: [
36359
+ {
36360
+ "embed_id": "955e10f2-2643-4489-a9d0-6ccdad784a58",
36361
+ "type": "sheet",
36362
+ "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',
36363
+ "parent_embed_id": null,
36364
+ "embed_ids": null
36365
+ },
36366
+ {
36367
+ "embed_id": "8a1a3fb8-55d9-4b2a-9746-8b839f748f0b",
36368
+ "type": "icon_result",
36369
+ "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',
36370
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36371
+ "embed_ids": null
36372
+ },
36373
+ {
36374
+ "embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36375
+ "type": "app_skill_use",
36376
+ "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",
36377
+ "parent_embed_id": null,
36378
+ "embed_ids": [
36379
+ "7af01409-8900-4512-808c-7ccccfc33e08",
36380
+ "1e6080e5-d856-4d5f-bfbb-0b180e393277",
36381
+ "d12b7e45-d9ed-49aa-9fe4-2cd53f4831ea",
36382
+ "820aef48-ddeb-4d6c-b701-aaa072e722df",
36383
+ "06faa994-047b-48ee-a07e-381dc747cbb7",
36384
+ "2e88c915-9a87-47c0-80cd-09521e737597",
36385
+ "aac59ece-3361-41ae-a669-d0b55919e086",
36386
+ "b6282388-6a40-47f1-a307-3df121df52ce",
36387
+ "372bef22-d0ee-405c-92af-aa0959c37000",
36388
+ "71718c5a-e055-44c2-8222-f6ccecdb141e",
36389
+ "6cd050ef-1052-4c04-9b96-65ae0e41b3a6",
36390
+ "6a86b245-92b6-4fe6-ac02-12028a05d6d0",
36391
+ "8088d00c-6358-4beb-896f-83a3b6c960fb",
36392
+ "ba22a4bb-59bb-448e-a90b-b47792252ae2",
36393
+ "69143f9c-d9f4-43fa-a3ae-1b79da548cf7",
36394
+ "7e88c868-a968-4225-9056-472157fc5f8d",
36395
+ "e7d6a11c-118e-44d4-987c-a306dcddd0dd",
36396
+ "34452085-11fe-4291-8b41-abe1174304d0",
36397
+ "48c56d96-d8d6-4ae3-a4ff-cda1e6102b16",
36398
+ "cc31a3af-de4a-423c-a2ce-6cdec8b0f266"
36399
+ ]
36400
+ },
36401
+ {
36402
+ "embed_id": "1e6080e5-d856-4d5f-bfbb-0b180e393277",
36403
+ "type": "icon_result",
36404
+ "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',
36405
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36406
+ "embed_ids": null
36407
+ },
36408
+ {
36409
+ "embed_id": "820aef48-ddeb-4d6c-b701-aaa072e722df",
36410
+ "type": "icon_result",
36411
+ "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',
36412
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36413
+ "embed_ids": null
36414
+ },
36415
+ {
36416
+ "embed_id": "06faa994-047b-48ee-a07e-381dc747cbb7",
36417
+ "type": "icon_result",
36418
+ "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',
36419
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36420
+ "embed_ids": null
36421
+ },
36422
+ {
36423
+ "embed_id": "2e88c915-9a87-47c0-80cd-09521e737597",
36424
+ "type": "icon_result",
36425
+ "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',
36426
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36427
+ "embed_ids": null
36428
+ },
36429
+ {
36430
+ "embed_id": "aac59ece-3361-41ae-a669-d0b55919e086",
36431
+ "type": "icon_result",
36432
+ "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',
36433
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36434
+ "embed_ids": null
36435
+ },
36436
+ {
36437
+ "embed_id": "b6282388-6a40-47f1-a307-3df121df52ce",
36438
+ "type": "icon_result",
36439
+ "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',
36440
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36441
+ "embed_ids": null
36442
+ },
36443
+ {
36444
+ "embed_id": "372bef22-d0ee-405c-92af-aa0959c37000",
36445
+ "type": "icon_result",
36446
+ "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',
36447
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36448
+ "embed_ids": null
36449
+ },
36450
+ {
36451
+ "embed_id": "71718c5a-e055-44c2-8222-f6ccecdb141e",
36452
+ "type": "icon_result",
36453
+ "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',
36454
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36455
+ "embed_ids": null
36456
+ },
36457
+ {
36458
+ "embed_id": "6cd050ef-1052-4c04-9b96-65ae0e41b3a6",
36459
+ "type": "icon_result",
36460
+ "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',
36461
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36462
+ "embed_ids": null
36463
+ },
36464
+ {
36465
+ "embed_id": "6a86b245-92b6-4fe6-ac02-12028a05d6d0",
36466
+ "type": "icon_result",
36467
+ "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',
36468
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36469
+ "embed_ids": null
36470
+ },
36471
+ {
36472
+ "embed_id": "8088d00c-6358-4beb-896f-83a3b6c960fb",
36473
+ "type": "icon_result",
36474
+ "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',
36475
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36476
+ "embed_ids": null
36477
+ },
36478
+ {
36479
+ "embed_id": "ba22a4bb-59bb-448e-a90b-b47792252ae2",
36480
+ "type": "icon_result",
36481
+ "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',
36482
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36483
+ "embed_ids": null
36484
+ },
36485
+ {
36486
+ "embed_id": "69143f9c-d9f4-43fa-a3ae-1b79da548cf7",
36487
+ "type": "icon_result",
36488
+ "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',
36489
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36490
+ "embed_ids": null
36491
+ },
36492
+ {
36493
+ "embed_id": "7e88c868-a968-4225-9056-472157fc5f8d",
36494
+ "type": "icon_result",
36495
+ "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',
36496
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36497
+ "embed_ids": null
36498
+ },
36499
+ {
36500
+ "embed_id": "e7d6a11c-118e-44d4-987c-a306dcddd0dd",
36501
+ "type": "icon_result",
36502
+ "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',
36503
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36504
+ "embed_ids": null
36505
+ },
36506
+ {
36507
+ "embed_id": "34452085-11fe-4291-8b41-abe1174304d0",
36508
+ "type": "icon_result",
36509
+ "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',
36510
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36511
+ "embed_ids": null
36512
+ },
36513
+ {
36514
+ "embed_id": "48c56d96-d8d6-4ae3-a4ff-cda1e6102b16",
36515
+ "type": "icon_result",
36516
+ "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',
36517
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36518
+ "embed_ids": null
36519
+ },
36520
+ {
36521
+ "embed_id": "cc31a3af-de4a-423c-a2ce-6cdec8b0f266",
36522
+ "type": "icon_result",
36523
+ "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',
36524
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36525
+ "embed_ids": null
36526
+ },
36527
+ {
36528
+ "embed_id": "203ca579-1246-43c8-bf52-b9dbe656cc5f",
36529
+ "type": "icon_result",
36530
+ "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',
36531
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36532
+ "embed_ids": null
36533
+ },
36534
+ {
36535
+ "embed_id": "f056562c-25ef-4767-8a42-1f6b25e13b5b",
36536
+ "type": "icon_result",
36537
+ "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',
36538
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36539
+ "embed_ids": null
36540
+ },
36541
+ {
36542
+ "embed_id": "d12b7e45-d9ed-49aa-9fe4-2cd53f4831ea",
36543
+ "type": "icon_result",
36544
+ "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',
36545
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36546
+ "embed_ids": null
36547
+ },
36548
+ {
36549
+ "embed_id": "fc1ee4af-5c44-4a8e-9ad1-1aaa5a21f997",
36550
+ "type": "icon_result",
36551
+ "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',
36552
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36553
+ "embed_ids": null
36554
+ },
36555
+ {
36556
+ "embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36557
+ "type": "app_skill_use",
36558
+ "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",
36559
+ "parent_embed_id": null,
36560
+ "embed_ids": [
36561
+ "432db233-a41d-4da8-aa6c-d7dc01f3192a",
36562
+ "7dc95323-2a7d-40b0-a297-94d56baddcc1",
36563
+ "d2e24971-51a5-4d22-9016-34c3e466ed94",
36564
+ "5aa15934-c245-4e76-8d23-81b843e66d0b",
36565
+ "b2a82a7f-16c6-440f-8b43-3571de3fe282",
36566
+ "f9d13968-446c-4d63-b73f-0ffbd2427a41",
36567
+ "2cb06327-1688-4d58-84ff-7c510e79ebcc",
36568
+ "fe7b751c-6700-4c0c-933f-9cecb8703421",
36569
+ "38617c3a-0abb-4470-87ae-7b0d46742ee4",
36570
+ "f658df85-ac0c-4edc-8f55-712e5d303c9c",
36571
+ "432e0453-0853-4e16-81cc-08252c8d6331",
36572
+ "0b740b16-05a8-4eb8-ab2d-8bd51c743ded",
36573
+ "0d55ebe1-9d4e-43ab-86db-fb14aa28f31f",
36574
+ "116e7f4f-85be-4ec8-99aa-c4911627fcbd",
36575
+ "19e3a71e-c61a-4e49-8699-876652054766",
36576
+ "c76d620d-171f-40e7-aa87-06c94f6b7e93",
36577
+ "fc169835-27c4-4579-9c51-2e2028c4e44a",
36578
+ "256c45e1-78f8-46c9-92d0-8898ec673ba9",
36579
+ "e933597d-16ba-46d1-8553-c6c8d7f4b7de",
36580
+ "469e811f-2ec4-44d7-bdff-e6feb1d11390",
36581
+ "203ca579-1246-43c8-bf52-b9dbe656cc5f",
36582
+ "f056562c-25ef-4767-8a42-1f6b25e13b5b",
36583
+ "fc1ee4af-5c44-4a8e-9ad1-1aaa5a21f997",
36584
+ "8a1a3fb8-55d9-4b2a-9746-8b839f748f0b"
36585
+ ]
36586
+ },
36587
+ {
36588
+ "embed_id": "7af01409-8900-4512-808c-7ccccfc33e08",
36589
+ "type": "icon_result",
36590
+ "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',
36591
+ "parent_embed_id": "68b02c14-a329-4772-97d2-d7b168bb50bc",
36592
+ "embed_ids": null
36593
+ },
36594
+ {
36595
+ "embed_id": "e933597d-16ba-46d1-8553-c6c8d7f4b7de",
36596
+ "type": "icon_result",
36597
+ "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',
36598
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36599
+ "embed_ids": null
36600
+ },
36601
+ {
36602
+ "embed_id": "469e811f-2ec4-44d7-bdff-e6feb1d11390",
36603
+ "type": "icon_result",
36604
+ "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',
36605
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36606
+ "embed_ids": null
36607
+ },
36608
+ {
36609
+ "embed_id": "7dc95323-2a7d-40b0-a297-94d56baddcc1",
36610
+ "type": "icon_result",
36611
+ "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',
36612
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36613
+ "embed_ids": null
36614
+ },
36615
+ {
36616
+ "embed_id": "b2a82a7f-16c6-440f-8b43-3571de3fe282",
36617
+ "type": "icon_result",
36618
+ "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',
36619
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36620
+ "embed_ids": null
36621
+ },
36622
+ {
36623
+ "embed_id": "f9d13968-446c-4d63-b73f-0ffbd2427a41",
36624
+ "type": "icon_result",
36625
+ "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',
36626
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36627
+ "embed_ids": null
36628
+ },
36629
+ {
36630
+ "embed_id": "432db233-a41d-4da8-aa6c-d7dc01f3192a",
36631
+ "type": "icon_result",
36632
+ "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',
36633
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36634
+ "embed_ids": null
36635
+ },
36636
+ {
36637
+ "embed_id": "0d55ebe1-9d4e-43ab-86db-fb14aa28f31f",
36638
+ "type": "icon_result",
36639
+ "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',
36640
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36641
+ "embed_ids": null
36642
+ },
36643
+ {
36644
+ "embed_id": "19e3a71e-c61a-4e49-8699-876652054766",
36645
+ "type": "icon_result",
36646
+ "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',
36647
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36648
+ "embed_ids": null
36649
+ },
36650
+ {
36651
+ "embed_id": "fc169835-27c4-4579-9c51-2e2028c4e44a",
36652
+ "type": "icon_result",
36653
+ "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',
36654
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36655
+ "embed_ids": null
36656
+ },
36657
+ {
36658
+ "embed_id": "256c45e1-78f8-46c9-92d0-8898ec673ba9",
36659
+ "type": "icon_result",
36660
+ "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',
36661
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36662
+ "embed_ids": null
36663
+ },
36664
+ {
36665
+ "embed_id": "d2e24971-51a5-4d22-9016-34c3e466ed94",
36666
+ "type": "icon_result",
36667
+ "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',
36668
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36669
+ "embed_ids": null
36670
+ },
36671
+ {
36672
+ "embed_id": "5aa15934-c245-4e76-8d23-81b843e66d0b",
36673
+ "type": "icon_result",
36674
+ "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',
36675
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36676
+ "embed_ids": null
36677
+ },
36678
+ {
36679
+ "embed_id": "2cb06327-1688-4d58-84ff-7c510e79ebcc",
36680
+ "type": "icon_result",
36681
+ "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',
36682
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36683
+ "embed_ids": null
36684
+ },
36685
+ {
36686
+ "embed_id": "38617c3a-0abb-4470-87ae-7b0d46742ee4",
36687
+ "type": "icon_result",
36688
+ "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',
36689
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36690
+ "embed_ids": null
36691
+ },
36692
+ {
36693
+ "embed_id": "f658df85-ac0c-4edc-8f55-712e5d303c9c",
36694
+ "type": "icon_result",
36695
+ "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',
36696
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36697
+ "embed_ids": null
36698
+ },
36699
+ {
36700
+ "embed_id": "432e0453-0853-4e16-81cc-08252c8d6331",
36701
+ "type": "icon_result",
36702
+ "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',
36703
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36704
+ "embed_ids": null
36705
+ },
36706
+ {
36707
+ "embed_id": "fe7b751c-6700-4c0c-933f-9cecb8703421",
36708
+ "type": "icon_result",
36709
+ "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',
36710
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36711
+ "embed_ids": null
36712
+ },
36713
+ {
36714
+ "embed_id": "0b740b16-05a8-4eb8-ab2d-8bd51c743ded",
36715
+ "type": "icon_result",
36716
+ "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',
36717
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36718
+ "embed_ids": null
36719
+ },
36720
+ {
36721
+ "embed_id": "116e7f4f-85be-4ec8-99aa-c4911627fcbd",
36722
+ "type": "icon_result",
36723
+ "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',
36724
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36725
+ "embed_ids": null
36726
+ },
36727
+ {
36728
+ "embed_id": "c76d620d-171f-40e7-aa87-06c94f6b7e93",
36729
+ "type": "icon_result",
36730
+ "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',
36731
+ "parent_embed_id": "f92d6925-690b-4350-9b6a-3a7003f8b947",
36732
+ "embed_ids": null
36733
+ }
36734
+ ],
36735
+ metadata: {
36736
+ featured: true,
36737
+ order: 114,
36738
+ app_skill_examples: ["design.search_icons"]
36739
+ }
36740
+ };
36741
+
35948
36742
  // ../ui/src/demo_chats/exampleChatData.ts
35949
36743
  var ALL_EXAMPLE_CHATS = [
35950
36744
  giganticAirplanesChat,
@@ -36040,7 +36834,8 @@ var ALL_EXAMPLE_CHATS = [
36040
36834
  habitGardenWebApplicationChat,
36041
36835
  printableBenchyPhoneStandModelsChat,
36042
36836
  exampleChatTaskPlanningChecklistChat,
36043
- libraryBookReturnWorkflowChat
36837
+ libraryBookReturnWorkflowChat,
36838
+ dashboardSidebarSvgIconsChat
36044
36839
  ].sort((a, b) => a.metadata.order - b.metadata.order);
36045
36840
 
36046
36841
  // ../ui/src/i18n/locales/en.json
@@ -37571,6 +38366,14 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
37571
38366
  }
37572
38367
  }
37573
38368
  },
38369
+ design: {
38370
+ search_icons: {
38371
+ text: "Search icons",
38372
+ description: {
38373
+ text: "Find open-source SVG icons from Iconify collections."
38374
+ }
38375
+ }
38376
+ },
37574
38377
  electronics: {
37575
38378
  search_components: {
37576
38379
  text: "Search components",
@@ -43537,6 +44340,20 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
43537
44340
  text: "What live music or performance events are happening in Berlin next week?"
43538
44341
  }
43539
44342
  },
44343
+ dashboard_sidebar_svg_icons: {
44344
+ title: {
44345
+ text: "Dashboard Sidebar SVG Icons"
44346
+ },
44347
+ summary: {
44348
+ text: "A Design app example that finds clean open-source SVG home and settings icons for a dashboard sidebar."
44349
+ },
44350
+ message_1: {
44351
+ 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."
44352
+ },
44353
+ message_2: {
44354
+ 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\nFuer eine klare Dashboard-Seitenleiste eignen sich Icons mit einheitlicher Strichstaerke und minimalistischer Aesthetik. Hier sind mehrere Open-Source-SVG-Optionen aus angesehenen, sauberen UI-Icon-Sets:\n\n### 1. Tabler Icons\n[Tabler Icons](wiki:Tabler) ist ein stark anpassbares, strichbasiertes Set auf einem 24x24-Raster und passt dadurch sehr gut zu modernen Dashboards.\n* **Lizenz:** [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 bietet einen neutralen, professionellen Stil mit "Line"- und "Fill"-Varianten. Das ist ideal, um aktive und inaktive Zustaende in einer Seitenleiste zu unterscheiden.\n* **Lizenz:** [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) sind der moderne Nachfolger von Material Icons und nutzen variable Font-Technologie. Die Varianten "Light" und "Outline" wirken besonders luftig und hochwertig.\n* **Lizenz:** [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 ist ein hochwertiges, webfreundliches Icon-Set mit einfachen und gut ausbalancierten Symbolen.\n* **Lizenz:** [MIT](wiki:MIT_License)\n* **Home:** `boxicons:home` [Home](embed:home-DSR)\n* **Settings:** `boxicons:settings` (Available in the Boxicons collection)\n\n### Zusammenfassungstabelle\n\n```json\n{"type": "sheet", "embed_id": "955e10f2-2643-4489-a9d0-6ccdad784a58"}\n```\n\n**Design-Tipp:** Wenn du diese Icons in einer Seitenleiste nutzt, halte die Strichbreite ueber alle Icons hinweg konsistent. Viele dieser Kollektionen verwenden standardmaessig `2px`, was gut sichtbar bleibt, ohne "schwer" zu wirken.\n\nMoechtest du, dass ich weitere Sidebar-Icons wie "Benutzer", "Analytics" oder "Nachrichten" suche, um das Set zu vervollstaendigen? Ich kann dir auch mit einer [Svelte](/#settings/apps/code)- oder [React](wiki:React_(software))-Seitenleistenkomponente helfen, falls du die UI gerade baust.'
44355
+ }
44356
+ },
43540
44357
  email_verification_sequence_diagram: {
43541
44358
  title: {
43542
44359
  text: "Email Verification Sequence Diagram"
@@ -55697,7 +56514,7 @@ function buildAssistantFeedbackDecision(rating) {
55697
56514
  import { randomUUID as randomUUID7 } from "crypto";
55698
56515
  import { existsSync as existsSync8, mkdtempSync as mkdtempSync2, readFileSync as readFileSync7, readdirSync as readdirSync2, writeFileSync as writeFileSync5 } from "fs";
55699
56516
  import { tmpdir } from "os";
55700
- import { dirname as dirname3, join as join5, resolve as resolve5 } from "path";
56517
+ import { dirname as dirname4, join as join5, resolve as resolve5 } from "path";
55701
56518
  import { fileURLToPath } from "url";
55702
56519
  var DEFAULT_JUDGE_MODEL = "google/gemini-3-flash-preview";
55703
56520
  var DEFAULT_EXTENSIVE_SIZE = 10;
@@ -56549,13 +57366,13 @@ function normalizeModelKey(model) {
56549
57366
  }
56550
57367
  function findProvidersDir() {
56551
57368
  const currentFile = fileURLToPath(import.meta.url);
56552
- let current = dirname3(currentFile);
57369
+ let current = dirname4(currentFile);
56553
57370
  for (let index = 0; index < 8; index += 1) {
56554
57371
  const candidate = join5(current, "backend", "providers");
56555
57372
  if (existsSync8(candidate)) return candidate;
56556
57373
  const parentCandidate = join5(current, "..", "..", "backend", "providers");
56557
57374
  if (existsSync8(parentCandidate)) return resolve5(parentCandidate);
56558
- const next = dirname3(current);
57375
+ const next = dirname4(current);
56559
57376
  if (next === current) break;
56560
57377
  current = next;
56561
57378
  }
@@ -56676,7 +57493,7 @@ function round2(value) {
56676
57493
  return Math.round(value * 100) / 100;
56677
57494
  }
56678
57495
  function defaultImageFixturePath() {
56679
- const fixtureDir = join5(dirname3(fileURLToPath(import.meta.url)), "..", "fixtures");
57496
+ const fixtureDir = join5(dirname4(fileURLToPath(import.meta.url)), "..", "fixtures");
56680
57497
  const fixturePath = join5(fixtureDir, "brandenburger-tor.png");
56681
57498
  if (existsSync8(fixturePath)) return fixturePath;
56682
57499
  const tempDir = mkdtempSync2(join5(tmpdir(), "openmates-benchmark-"));
@@ -58533,6 +59350,10 @@ async function main() {
58533
59350
  printDraftsHelp();
58534
59351
  return;
58535
59352
  }
59353
+ if (command === "ideabucket") {
59354
+ printIdeaBucketHelp();
59355
+ return;
59356
+ }
58536
59357
  if (command === "apps") {
58537
59358
  printAppsHelp();
58538
59359
  return;
@@ -58683,6 +59504,10 @@ async function main() {
58683
59504
  await handleDrafts(client, subcommand, rest, parsed.flags);
58684
59505
  return;
58685
59506
  }
59507
+ if (command === "ideabucket") {
59508
+ await handleIdeaBucket(client, subcommand, rest, parsed.flags);
59509
+ return;
59510
+ }
58686
59511
  if (command === "apps") {
58687
59512
  await handleApps(client, subcommand, rest, parsed.flags);
58688
59513
  return;
@@ -59042,14 +59867,17 @@ async function handleTeams(client, subcommand, rest, flags) {
59042
59867
  if (typeof flags["encrypted-recipient-hint"] === "string") input.encrypted_recipient_hint = flags["encrypted-recipient-hint"];
59043
59868
  if (typeof flags["expires-at"] === "string") input.expires_at = Number.parseInt(flags["expires-at"], 10);
59044
59869
  input.role = parseTeamInviteRole(flags.role);
59870
+ if (typeof flags.email === "string") await client.getTeam(teamId);
59045
59871
  const invite = await client.createTeamInvite(teamId, input);
59046
59872
  if (flags.json === true) printJson2({ invite });
59047
59873
  else printJson2(invite);
59048
59874
  return;
59049
59875
  }
59050
59876
  if (subcommand === "accept-invite") {
59051
- const inviteId = requiredStringFlag(flags.invite ?? rest[0], "<invite-id>");
59052
- const result = await client.acceptTeamInvite(inviteId);
59877
+ const inviteInput = parseTeamInviteInput(requiredStringFlag(flags.invite ?? rest[0], "<invite-id-or-url>"));
59878
+ const inviteSecret = typeof flags.key === "string" ? flags.key : inviteInput.inviteSecret;
59879
+ const recipientEmail = typeof flags.email === "string" ? flags.email : void 0;
59880
+ const result = await client.acceptTeamInvite(inviteInput.inviteId, { inviteSecret, recipientEmail });
59053
59881
  if (flags.json === true) printJson2(result);
59054
59882
  else printJson2(result);
59055
59883
  return;
@@ -59072,7 +59900,7 @@ async function handleTeams(client, subcommand, rest, flags) {
59072
59900
  if (subcommand === "approve-access") {
59073
59901
  const teamId = requireTeamId(rest, flags);
59074
59902
  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>");
59903
+ const encryptedTeamKey = typeof flags["encrypted-team-key"] === "string" ? flags["encrypted-team-key"] : void 0;
59076
59904
  const membership = await client.approveTeamAccessRequest(teamId, accessRequestId, encryptedTeamKey);
59077
59905
  if (flags.json === true) printJson2({ membership });
59078
59906
  else printJson2(membership);
@@ -59162,6 +59990,16 @@ async function handleTeams(client, subcommand, rest, flags) {
59162
59990
  }
59163
59991
  throw new Error(`Unknown teams command '${subcommand}'. Run 'openmates teams --help'.`);
59164
59992
  }
59993
+ function parseTeamInviteInput(value) {
59994
+ try {
59995
+ const url = new URL(value);
59996
+ const inviteId = url.pathname.split("/").filter(Boolean).pop();
59997
+ const fragment = new URLSearchParams(url.hash.replace(/^#/, ""));
59998
+ if (inviteId) return { inviteId, inviteSecret: fragment.get("key") };
59999
+ } catch {
60000
+ }
60001
+ return { inviteId: value, inviteSecret: null };
60002
+ }
59165
60003
  function requireTeamId(rest, flags) {
59166
60004
  return requiredStringFlag(flags.team ?? flags["team-id"] ?? rest[0], "--team <team-id>");
59167
60005
  }
@@ -59413,6 +60251,42 @@ async function handleDrafts(client, subcommand, rest, flags) {
59413
60251
  }
59414
60252
  throw new Error(`Unknown drafts subcommand '${subcommand}'.`);
59415
60253
  }
60254
+ async function handleIdeaBucket(client, subcommand, rest, flags) {
60255
+ if (!subcommand || subcommand === "help" || flags.help === true) {
60256
+ printIdeaBucketHelp();
60257
+ return;
60258
+ }
60259
+ if (subcommand === "add") {
60260
+ const text = rest.join(" ").trim();
60261
+ if (!text) throw new Error("Missing IdeaBucket text for add.");
60262
+ const scheduledSendAt = typeof flags["scheduled-at"] === "string" ? parseUnixSecondsFlag(flags["scheduled-at"], "--scheduled-at") : void 0;
60263
+ printJson2(await client.addIdeaBucketText({
60264
+ text,
60265
+ chatId: typeof flags.chat === "string" ? flags.chat : void 0,
60266
+ bucketId: typeof flags.bucket === "string" ? flags.bucket : void 0,
60267
+ scheduledSendAt,
60268
+ prompt: typeof flags.prompt === "string" ? flags.prompt : void 0
60269
+ }));
60270
+ return;
60271
+ }
60272
+ if (subcommand === "status") {
60273
+ const bucketId = rest[0] ?? (typeof flags.bucket === "string" ? flags.bucket : void 0);
60274
+ printJson2(await client.getIdeaBucketStatus(bucketId));
60275
+ return;
60276
+ }
60277
+ if (subcommand === "process") {
60278
+ const bucketId = rest[0] ?? (typeof flags.bucket === "string" ? flags.bucket : void 0);
60279
+ if (!bucketId) throw new Error("Missing IdeaBucket bucket ID for process.");
60280
+ printJson2(await client.processIdeaBucketBucket(bucketId, { now: flags.now === true }));
60281
+ return;
60282
+ }
60283
+ throw new Error(`Unknown ideabucket subcommand '${subcommand}'.`);
60284
+ }
60285
+ function parseUnixSecondsFlag(value, flagName) {
60286
+ const parsed = Number(value);
60287
+ if (!Number.isFinite(parsed) || parsed <= 0) throw new Error(`Invalid ${flagName}; expected Unix seconds.`);
60288
+ return parsed > 1e10 ? Math.floor(parsed / 1e3) : Math.floor(parsed);
60289
+ }
59416
60290
  async function handleChats(client, subcommand, rest, flags, redactor) {
59417
60291
  if (!subcommand || subcommand === "help" || flags.help === true) {
59418
60292
  printChatsHelp();
@@ -59858,28 +60732,28 @@ ${deleted}/${resolved.length} chat(s) deleted.`);
59858
60732
  } catch {
59859
60733
  }
59860
60734
  }
59861
- const { mkdir, writeFile } = await import("fs/promises");
60735
+ const { mkdir: mkdir2, writeFile: writeFile2 } = await import("fs/promises");
59862
60736
  const { join: join7 } = await import("path");
59863
60737
  if (useZip) {
59864
60738
  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);
60739
+ await mkdir2(tmpDir, { recursive: true });
60740
+ await writeFile2(join7(tmpDir, `${filenameBase}.yml`), yamlContent);
60741
+ await writeFile2(join7(tmpDir, `${filenameBase}.md`), mdContent);
59868
60742
  if (codeEmbeds.length > 0) {
59869
60743
  for (const ce of codeEmbeds) {
59870
60744
  const fpath = ce.filePath ?? ce.filename ?? `${ce.embedId.slice(0, 8)}.${getExtForLang(ce.language)}`;
59871
60745
  const fullPath = join7(tmpDir, "code", fpath);
59872
- await mkdir(fullPath.substring(0, fullPath.lastIndexOf("/")), {
60746
+ await mkdir2(fullPath.substring(0, fullPath.lastIndexOf("/")), {
59873
60747
  recursive: true
59874
60748
  });
59875
- await writeFile(fullPath, ce.content);
60749
+ await writeFile2(fullPath, ce.content);
59876
60750
  }
59877
60751
  }
59878
60752
  if (transcriptEmbeds.length > 0) {
59879
60753
  const tDir = join7(tmpDir, "transcripts");
59880
- await mkdir(tDir, { recursive: true });
60754
+ await mkdir2(tDir, { recursive: true });
59881
60755
  for (const te of transcriptEmbeds) {
59882
- await writeFile(join7(tDir, te.filename), te.content);
60756
+ await writeFile2(join7(tDir, te.filename), te.content);
59883
60757
  }
59884
60758
  }
59885
60759
  const zipPath = join7(outputDir, `${filenameBase}.zip`);
@@ -59898,28 +60772,28 @@ ${deleted}/${resolved.length} chat(s) deleted.`);
59898
60772
  }
59899
60773
  } else {
59900
60774
  const chatDir = join7(outputDir, filenameBase);
59901
- await mkdir(chatDir, { recursive: true });
60775
+ await mkdir2(chatDir, { recursive: true });
59902
60776
  const written = [];
59903
- await writeFile(join7(chatDir, `${filenameBase}.yml`), yamlContent);
60777
+ await writeFile2(join7(chatDir, `${filenameBase}.yml`), yamlContent);
59904
60778
  written.push(`${filenameBase}.yml`);
59905
- await writeFile(join7(chatDir, `${filenameBase}.md`), mdContent);
60779
+ await writeFile2(join7(chatDir, `${filenameBase}.md`), mdContent);
59906
60780
  written.push(`${filenameBase}.md`);
59907
60781
  if (codeEmbeds.length > 0) {
59908
60782
  for (const ce of codeEmbeds) {
59909
60783
  const fpath = ce.filePath ?? ce.filename ?? `${ce.embedId.slice(0, 8)}.${getExtForLang(ce.language)}`;
59910
60784
  const fullPath = join7(chatDir, "code", fpath);
59911
- await mkdir(fullPath.substring(0, fullPath.lastIndexOf("/")), {
60785
+ await mkdir2(fullPath.substring(0, fullPath.lastIndexOf("/")), {
59912
60786
  recursive: true
59913
60787
  });
59914
- await writeFile(fullPath, ce.content);
60788
+ await writeFile2(fullPath, ce.content);
59915
60789
  written.push(`code/${fpath}`);
59916
60790
  }
59917
60791
  }
59918
60792
  if (transcriptEmbeds.length > 0) {
59919
60793
  const tDir = join7(chatDir, "transcripts");
59920
- await mkdir(tDir, { recursive: true });
60794
+ await mkdir2(tDir, { recursive: true });
59921
60795
  for (const te of transcriptEmbeds) {
59922
- await writeFile(join7(tDir, te.filename), te.content);
60796
+ await writeFile2(join7(tDir, te.filename), te.content);
59923
60797
  written.push(`transcripts/${te.filename}`);
59924
60798
  }
59925
60799
  }
@@ -61088,6 +61962,10 @@ The booking_token is shown in the output of:
61088
61962
  await handleModels3dSearch(client, flags, apiKey);
61089
61963
  return;
61090
61964
  }
61965
+ if (subcommand === "design" && rest[0] === "export-icon") {
61966
+ await handleDesignIconExport(client, rest.slice(1), flags, apiKey);
61967
+ return;
61968
+ }
61091
61969
  const generatedCommand = findGeneratedAppSkillCommand(subcommand, rest[0]);
61092
61970
  if (generatedCommand) {
61093
61971
  await handleGeneratedAppSkillCommand(client, generatedCommand, rest.slice(1), flags, apiKey);
@@ -61173,6 +62051,75 @@ async function handleModels3dSearch(client, flags, apiKey) {
61173
62051
  process.exit(1);
61174
62052
  }
61175
62053
  }
62054
+ async function handleDesignIconExport(client, positionals, flags, apiKey) {
62055
+ if (flags.help === true) {
62056
+ printDesignIconExportHelp();
62057
+ return;
62058
+ }
62059
+ const outputPath = stringFlag(flags, "output");
62060
+ if (!outputPath) {
62061
+ console.error(
62062
+ "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"
62063
+ );
62064
+ process.exit(1);
62065
+ }
62066
+ const format = parseDesignIconExportFormat(flags.format);
62067
+ const size = parsePositiveIntegerFlag(flags.size, "--size");
62068
+ const width = parsePositiveIntegerFlag(flags.width, "--width");
62069
+ const height = parsePositiveIntegerFlag(flags.height, "--height");
62070
+ const iconRef = parseDesignIconReference(positionals, flags);
62071
+ try {
62072
+ const result = await exportDesignIcon({
62073
+ ...iconRef,
62074
+ outputPath,
62075
+ format,
62076
+ color: stringFlag(flags, "color"),
62077
+ palette: flags.palette === true,
62078
+ allowPaletteRecolor: flags["allow-palette-recolor"] === true,
62079
+ size,
62080
+ width,
62081
+ height,
62082
+ fetchSvg: async (path) => (await client.getRaw(path, apiKey)).data
62083
+ });
62084
+ if (flags.json === true) {
62085
+ printJson2({
62086
+ success: true,
62087
+ format: result.format,
62088
+ content_type: result.contentType,
62089
+ output_path: result.outputPath,
62090
+ svg_path: result.svgPath,
62091
+ bytes: result.data.byteLength
62092
+ });
62093
+ } else {
62094
+ console.log(`Exported ${result.format.toUpperCase()} icon to ${result.outputPath}`);
62095
+ }
62096
+ } catch (err) {
62097
+ const msg = err instanceof Error ? err.message : String(err);
62098
+ console.error(`\x1B[31m\u2717 Design icon export failed:\x1B[0m ${msg}`);
62099
+ process.exit(1);
62100
+ }
62101
+ }
62102
+ function parseDesignIconReference(positionals, flags) {
62103
+ const svgPath = stringFlag(flags, "svg-path");
62104
+ if (svgPath) return { svgPath };
62105
+ const icon = stringFlag(flags, "icon") ?? positionals[0];
62106
+ if (icon) {
62107
+ const [prefix, name, extra] = icon.split(":");
62108
+ if (!prefix || !name || extra !== void 0) {
62109
+ throw new Error("Icon reference must use prefix:name, such as lucide:home");
62110
+ }
62111
+ return { prefix, name };
62112
+ }
62113
+ return {
62114
+ prefix: stringFlag(flags, "prefix"),
62115
+ name: stringFlag(flags, "name")
62116
+ };
62117
+ }
62118
+ function parseDesignIconExportFormat(value) {
62119
+ if (value === void 0) return void 0;
62120
+ if (value === "svg" || value === "png") return value;
62121
+ throw new Error("--format must be svg or png");
62122
+ }
61176
62123
  async function handleCodeRun(client, flags, apiKey) {
61177
62124
  const requests = await buildCodeRunRequestsFromFlags({
61178
62125
  code: typeof flags.code === "string" ? flags.code : void 0,
@@ -61887,13 +62834,13 @@ function parseYamlScalar(value) {
61887
62834
  return trimmed;
61888
62835
  }
61889
62836
  async function saveDownloadedDocument(document, output) {
61890
- const { mkdir, writeFile } = await import("fs/promises");
61891
- const { join: join7, basename: basename4, dirname: dirname5 } = await import("path");
62837
+ const { mkdir: mkdir2, writeFile: writeFile2 } = await import("fs/promises");
62838
+ const { join: join7, basename: basename4, dirname: dirname6 } = await import("path");
61892
62839
  const target = typeof output === "string" ? output : ".";
61893
62840
  const filename = basename4(document.filename || "document.pdf");
61894
62841
  const filePath = target.endsWith(".pdf") ? target : join7(target, filename);
61895
- await mkdir(dirname5(filePath), { recursive: true });
61896
- await writeFile(filePath, document.data);
62842
+ await mkdir2(dirname6(filePath), { recursive: true });
62843
+ await writeFile2(filePath, document.data);
61897
62844
  return filePath;
61898
62845
  }
61899
62846
  function printMates(json) {
@@ -61974,6 +62921,9 @@ async function handleConnectedAccounts(client, subcommand, flags) {
61974
62921
  printConnectedAccountsHelp();
61975
62922
  return;
61976
62923
  }
62924
+ if (typeof flags.team === "string") {
62925
+ throw new Error("Team connected accounts are not supported yet. Use personal connected accounts or retry after Teams connected-account support ships.");
62926
+ }
61977
62927
  if (subcommand !== "import") {
61978
62928
  throw new Error(`Unknown connected-accounts command '${subcommand}'. Run 'openmates connected-accounts --help'.`);
61979
62929
  }
@@ -62048,8 +62998,8 @@ async function promptPlainText(question) {
62048
62998
  }
62049
62999
  }
62050
63000
  async function writeSecretFile(filePath, content, force = false) {
62051
- const { mkdir, writeFile, stat: stat2 } = await import("fs/promises");
62052
- const { dirname: dirname5 } = await import("path");
63001
+ const { mkdir: mkdir2, writeFile: writeFile2, stat: stat2 } = await import("fs/promises");
63002
+ const { dirname: dirname6 } = await import("path");
62053
63003
  try {
62054
63004
  await stat2(filePath);
62055
63005
  if (!force) throw new Error(`${filePath} already exists. Use --force to overwrite.`);
@@ -62059,8 +63009,8 @@ async function writeSecretFile(filePath, content, force = false) {
62059
63009
  }
62060
63010
  if (error instanceof Error && !("code" in error)) throw error;
62061
63011
  }
62062
- await mkdir(dirname5(filePath), { recursive: true });
62063
- await writeFile(filePath, content, { mode: 384 });
63012
+ await mkdir2(dirname6(filePath), { recursive: true });
63013
+ await writeFile2(filePath, content, { mode: 384 });
62064
63014
  return filePath;
62065
63015
  }
62066
63016
  async function generateProvisioningPassword() {
@@ -65007,6 +65957,7 @@ Commands:
65007
65957
  openmates tasks [--help] Task commands (list, create, board, ...)
65008
65958
  openmates teams [--help] Team lifecycle, membership, billing, and move commands
65009
65959
  openmates drafts [--help] Encrypted draft lifecycle commands
65960
+ openmates ideabucket [--help] IdeaBucket capture, draft/status, and process commands
65010
65961
  openmates apps [--help] App skill commands (list, run, ...)
65011
65962
  openmates workflows [--help] Server-side workflow commands
65012
65963
  openmates mentions [--help] List available @mentions
@@ -65084,6 +66035,8 @@ The CLI prompts for the passcode interactively, validates the provider token wit
65084
66035
  a harmless read, then re-encrypts the account for the currently logged-in CLI
65085
66036
  account before storing it.
65086
66037
 
66038
+ Team connected accounts are not supported in Teams V1 yet.
66039
+
65087
66040
  Options:
65088
66041
  --payload <OMCA1...> Required encrypted import payload from web settings
65089
66042
  --json Output a redacted JSON summary
@@ -65328,10 +66281,10 @@ function printTeamsHelp() {
65328
66281
  openmates teams update <team-id> [--name <encrypted-name>] [--description <encrypted-description>] [--slug <slug>] [--json]
65329
66282
  openmates teams delete <team-id> --yes [--json]
65330
66283
  openmates teams invite <team-id> (--email <email>|--user <user-id>) [--role admin|member|viewer] [--json]
65331
- openmates teams accept-invite <invite-id> [--json]
66284
+ openmates teams accept-invite <invite-id-or-url> [--email <recipient-email>] [--key <fragment-key>] [--json]
65332
66285
  openmates teams decline-invite <invite-id> [--json]
65333
66286
  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]
66287
+ openmates teams approve-access <team-id> <access-request-id> [--encrypted-team-key <value>] [--json]
65335
66288
  openmates teams reject-access <team-id> <access-request-id> [--json]
65336
66289
  openmates teams role <team-id> --user <user-id> --role admin|member|viewer [--json]
65337
66290
  openmates teams remove-member <team-id> --user <user-id> [--json]
@@ -65359,6 +66312,15 @@ function printDraftsHelp() {
65359
66312
  Draft plaintext is encrypted locally with the account master key. Only Format-D
65360
66313
  ciphertext and version metadata are sent to the server or written to CLI cache.`);
65361
66314
  }
66315
+ function printIdeaBucketHelp() {
66316
+ console.log(`IdeaBucket commands:
66317
+ openmates ideabucket add <text> [--chat <uuid>] [--bucket <id>] [--scheduled-at <unix>] [--prompt <text>] [--json]
66318
+ openmates ideabucket status [bucket-id] [--json]
66319
+ openmates ideabucket process <bucket-id> [--now] [--json]
66320
+
66321
+ Adding text updates the encrypted OpenMates IdeaBucket draft for the processing
66322
+ bucket and sends only ciphertext plus sparse non-content metadata to the server.`);
66323
+ }
65362
66324
  function printAppsHelp() {
65363
66325
  console.log(`Apps commands:
65364
66326
  openmates apps list [--json]
@@ -65372,6 +66334,7 @@ function printAppsHelp() {
65372
66334
  openmates apps code run --entry main.py --file main.py [--file requirements.txt]
65373
66335
  openmates apps code run --entry main.py --dir ./project [--exclude node_modules]
65374
66336
  openmates apps models3d search --query benchy [--count 10] [--providers Printables] [--json]
66337
+ openmates apps design export-icon lucide:home --output home.svg [--color '#111827']
65375
66338
  openmates apps travel booking-link --token "<token>" [--context '<json>']
65376
66339
 
65377
66340
  Authentication:
@@ -65388,9 +66351,34 @@ Examples:
65388
66351
  openmates apps examples travel search_connections
65389
66352
  openmates apps code run --language python --filename hello.py --code 'print("Hello from CLI")'
65390
66353
  openmates apps models3d search --query benchy --count 2 --providers Printables --json
66354
+ openmates apps design search_icons --query home --count 12 --json
66355
+ openmates apps design export-icon lucide:home --format png --size 64 --output home.png
65391
66356
  openmates apps travel booking-link --token "<booking_token from search result>"
65392
66357
  openmates apps skill-info web search`);
65393
66358
  }
66359
+ function printDesignIconExportHelp() {
66360
+ console.log(`Design icon export command:
66361
+ openmates apps design export-icon <prefix:name> --output <path> [--color <hex>] [--format svg|png]
66362
+ openmates apps design export-icon --prefix <prefix> --name <name> --output <path>
66363
+ openmates apps design export-icon --svg-path <path> --output <path>
66364
+
66365
+ Options:
66366
+ --output <path> Required local output path.
66367
+ --format svg|png Output format. Defaults from --output extension, otherwise svg.
66368
+ --color <hex> Recolor currentColor-based monotone SVGs locally.
66369
+ --size <px> PNG output width when --format png is used. Default: 256.
66370
+ --width <px> PNG output width override.
66371
+ --height <px> PNG output height override when width is omitted.
66372
+ --palette Treat the icon as a palette icon and reject recolor by default.
66373
+ --allow-palette-recolor
66374
+ Override the palette recolor guard.
66375
+ --api-key <key> Use an API key instead of a stored CLI session.
66376
+ --json Print export metadata as JSON.
66377
+
66378
+ Examples:
66379
+ openmates apps design export-icon lucide:home --output home.svg --color '#111827'
66380
+ openmates apps design export-icon --prefix lucide --name home --format png --size 64 --output home.png`);
66381
+ }
65394
66382
  function printWorkflowsHelp() {
65395
66383
  console.log(`Workflows commands:
65396
66384
  openmates workflows list [--json]
@@ -65585,19 +66573,19 @@ async function handleDocs(client, subcommand, rest, flags) {
65585
66573
  return;
65586
66574
  }
65587
66575
  if (subcommand === "download") {
65588
- const { writeFile, mkdir } = await import("fs/promises");
65589
- const { join: join7, dirname: dirname5 } = await import("path");
66576
+ const { writeFile: writeFile2, mkdir: mkdir2 } = await import("fs/promises");
66577
+ const { join: join7, dirname: dirname6 } = await import("path");
65590
66578
  if (flags.all === true) {
65591
66579
  const outputDir = typeof flags.output === "string" ? flags.output : "./openmates-docs";
65592
66580
  const tree = await client.listDocs();
65593
66581
  const slugs = collectSlugs(tree);
65594
- await mkdir(outputDir, { recursive: true });
66582
+ await mkdir2(outputDir, { recursive: true });
65595
66583
  let count = 0;
65596
66584
  for (const slug2 of slugs) {
65597
66585
  const content2 = await client.getDoc(slug2);
65598
66586
  const filePath = join7(outputDir, `${slug2}.md`);
65599
- await mkdir(dirname5(filePath), { recursive: true });
65600
- await writeFile(filePath, content2, "utf-8");
66587
+ await mkdir2(dirname6(filePath), { recursive: true });
66588
+ await writeFile2(filePath, content2, "utf-8");
65601
66589
  count++;
65602
66590
  process.stderr.write(`\r Downloaded ${count}/${slugs.length}`);
65603
66591
  }
@@ -65616,7 +66604,7 @@ async function handleDocs(client, subcommand, rest, flags) {
65616
66604
  }
65617
66605
  const content = await client.getDoc(slug);
65618
66606
  const filename = typeof flags.output === "string" ? flags.output : `${slug.split("/").pop()}.md`;
65619
- await writeFile(filename, content, "utf-8");
66607
+ await writeFile2(filename, content, "utf-8");
65620
66608
  console.log(`Saved to ${filename}`);
65621
66609
  return;
65622
66610
  }
@@ -65669,7 +66657,7 @@ function isCliEntrypoint() {
65669
66657
  try {
65670
66658
  const invokedPath = realpathSync(entrypoint);
65671
66659
  const modulePath = realpathSync(fileURLToPath2(import.meta.url));
65672
- return invokedPath === modulePath || basename3(invokedPath) === "cli.js" && dirname4(invokedPath) === dirname4(modulePath);
66660
+ return invokedPath === modulePath || basename3(invokedPath) === "cli.js" && dirname5(invokedPath) === dirname5(modulePath);
65673
66661
  } catch {
65674
66662
  return false;
65675
66663
  }