@xopcai/xopc 0.0.252 → 0.0.253

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/src/inbound-processor.js +2 -2
  3. package/dist/extensions/telegram/src/plugin.js +3 -2
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{activity-store-w3eq3YpP.js → activity-store-CeS1bgXP.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-k039rbUz.js → agent-avatar-dicebear-BdF3HhCW.js} +1 -1
  7. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Bs34Kp0K.js +1 -0
  8. package/dist/gateway/static/root/assets/{agents-Bmth_bSQ.js → agents-DARlgjTm.js} +1 -1
  9. package/dist/gateway/static/root/assets/{api-2joIfbrH.js → api-zMPeC0yU.js} +1 -1
  10. package/dist/gateway/static/root/assets/{app-management-settings-panel-ByJ4kiD0.js → app-management-settings-panel-BaAFln8W.js} +1 -1
  11. package/dist/gateway/static/root/assets/{appearance-settings-BK2Jga-B.js → appearance-settings-CXvsoBlw.js} +1 -1
  12. package/dist/gateway/static/root/assets/{apps-page-B3ky7cWU.js → apps-page-BhgvfBJT.js} +1 -1
  13. package/dist/gateway/static/root/assets/{archive-plugin-DMDKtYpi.js → archive-plugin-C0o_mVQI.js} +1 -1
  14. package/dist/gateway/static/root/assets/{attachment-load-B764Ql3Z.js → attachment-load-B5Ry3tGL.js} +1 -1
  15. package/dist/gateway/static/root/assets/{automations-page-D-sO8CZe.js → automations-page-DY5QAEQd.js} +1 -1
  16. package/dist/gateway/static/root/assets/automations-workspace-BzX4lILP.js +6 -0
  17. package/dist/gateway/static/root/assets/{binary-plugins-fxtzYRpv.js → binary-plugins-BydpEgBA.js} +1 -1
  18. package/dist/gateway/static/root/assets/{block-editor-Bcjtvckh.js → block-editor-D0CpUOMo.js} +3 -3
  19. package/dist/gateway/static/root/assets/{browser-automation-inputs-BSmnusjD.js → browser-automation-inputs-DzbTsGI6.js} +1 -1
  20. package/dist/gateway/static/root/assets/{browser-automations-page-DC_OQIBk.js → browser-automations-page-D7fZYjni.js} +1 -1
  21. package/dist/gateway/static/root/assets/{browser-settings-page-C1FojyG6.js → browser-settings-page-BBdMqxl0.js} +1 -1
  22. package/dist/gateway/static/root/assets/capabilities-settings-panel-D_WfftDW.js +7 -0
  23. package/dist/gateway/static/root/assets/channels-settings-bdRLT9KA.js +1 -0
  24. package/dist/gateway/static/root/assets/{channels-status-swr-BuWjIG_a.js → channels-status-swr-BGGRTkn6.js} +1 -1
  25. package/dist/gateway/static/root/assets/{chat-terminal-dock-5SevEo_I.js → chat-terminal-dock-_CP4nvlg.js} +1 -1
  26. package/dist/gateway/static/root/assets/connectors-page-CPDjU5wU.js +2 -0
  27. package/dist/gateway/static/root/assets/{cron-expression-DtsfalBM.js → cron-expression-g2U8Rllf.js} +1 -1
  28. package/dist/gateway/static/root/assets/{date-picker-tDEQV5TP.js → date-picker-SmVlhtj_.js} +1 -1
  29. package/dist/gateway/static/root/assets/{dependency-picker-HhNwg0Y2.js → dependency-picker-D-0gcbbM.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-acU4Li-C.js → desktop-pet-Cl3JRIu6.js} +1 -1
  31. package/dist/gateway/static/root/assets/{desktop-pet-settings-R84AR0Pe.js → desktop-pet-settings-D7kvWQ9H.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-debug-page-CrLlRkSN.js → extension-debug-page-DtP2tJHY.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-page-BH5lmZXE.js → extension-page-CphZDdoT.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-settings-page-BscjNAd1.js → extension-settings-page-CsxVLV4-.js} +1 -1
  35. package/dist/gateway/static/root/assets/{gateway-config-swr-9HidFZUd.js → gateway-config-swr-BW3Bx-aV.js} +1 -1
  36. package/dist/gateway/static/root/assets/gateway-settings-DxBZ05dX.js +1 -0
  37. package/dist/gateway/static/root/assets/{gateway-startup-retry-DRCPXONr.js → gateway-startup-retry-DAq74TZe.js} +1 -1
  38. package/dist/gateway/static/root/assets/{heartbeat-settings-K5Zhl2rx.js → heartbeat-settings-DWcKsIoZ.js} +1 -1
  39. package/dist/gateway/static/root/assets/home-page-BdvLZKQZ.js +1 -0
  40. package/dist/gateway/static/root/assets/{image-generation-api-CR6Kle8H.js → image-generation-api-MPuaXDRs.js} +1 -1
  41. package/dist/gateway/static/root/assets/index-C7RDs6S-.js +74 -0
  42. package/dist/gateway/static/root/assets/index-Cu8xqZQ9.css +2 -0
  43. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-B1QR49-7.js → keyboard-shortcuts-settings-CfhaTqgE.js} +1 -1
  44. package/dist/gateway/static/root/assets/{local-app-workbench-page-wicoV-ti.js → local-app-workbench-page-CR6asX7L.js} +1 -1
  45. package/dist/gateway/static/root/assets/{local-apps-page-C74It-T8.js → local-apps-page-g01W3kEK.js} +1 -1
  46. package/dist/gateway/static/root/assets/{locale-store-BfZGZKSs.js → locale-store-BkeaPZpn.js} +1 -1
  47. package/dist/gateway/static/root/assets/{logs-page-xX-7S49A.js → logs-page-ZP4QTWoC.js} +1 -1
  48. package/dist/gateway/static/root/assets/{management-settings-1kNnYL97.js → management-settings-DeGxJF_Z.js} +1 -1
  49. package/dist/gateway/static/root/assets/markdown-view-Ca7BRBLL.js +201 -0
  50. package/dist/gateway/static/root/assets/{media-plugins-B5c0AoS1.js → media-plugins-FmOhmzlD.js} +1 -1
  51. package/dist/gateway/static/root/assets/messages-C72stReU.js +3 -0
  52. package/dist/gateway/static/root/assets/{mobile-pairing-wizard-CsIZqK51.js → mobile-pairing-wizard-BXNbn05L.js} +1 -1
  53. package/dist/gateway/static/root/assets/note-detail-panel-EeVeF4II.js +5 -0
  54. package/dist/gateway/static/root/assets/notes-page-D7bMff96.js +8 -0
  55. package/dist/gateway/static/root/assets/{page-tabs-CqJN6Ljz.js → page-tabs-pyukZ1PJ.js} +1 -1
  56. package/dist/gateway/static/root/assets/{preview-open-alternatives-DqRIGxf4.js → preview-open-alternatives-slFHoMUe.js} +1 -1
  57. package/dist/gateway/static/root/assets/{product-open-page-DE2nPE_K.js → product-open-page-CXa3FNNk.js} +1 -1
  58. package/dist/gateway/static/root/assets/project-detail-page-BDF88VdN.js +1 -0
  59. package/dist/gateway/static/root/assets/projects-page-DeTD6pu1.js +1 -0
  60. package/dist/gateway/static/root/assets/{registry-api-Bpy8XX-5.js → registry-api-CviQoUBf.js} +1 -1
  61. package/dist/gateway/static/root/assets/remote-access-hub-CxKrdQ6a.js +1 -0
  62. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Bb4b74-P.js → runtime-tools-settings-panel-O9D9o7-O.js} +1 -1
  63. package/dist/gateway/static/root/assets/{schema-form-DoPU5j3J.js → schema-form-8FesicnL.js} +1 -1
  64. package/dist/gateway/static/root/assets/sessions-page-DUFJN-2t.js +1 -0
  65. package/dist/gateway/static/root/assets/settings-advanced-gate-CcSYDjaH.js +1 -0
  66. package/dist/gateway/static/root/assets/{settings-form-section-Ci-9WajJ.js → settings-form-section-CBic9TFH.js} +1 -1
  67. package/dist/gateway/static/root/assets/{settings-page-CL_2F95D.js → settings-page-Xz66_Mjg.js} +1 -1
  68. package/dist/gateway/static/root/assets/setup-status-panel-C6DuwrP5.js +1 -0
  69. package/dist/gateway/static/root/assets/{share-preview-page-XUA3oKQX.js → share-preview-page--JpjwB58.js} +1 -1
  70. package/dist/gateway/static/root/assets/shares-settings-CovcdHSC.js +1 -0
  71. package/dist/gateway/static/root/assets/skill-reload-api-CrHagTsE.js +1 -0
  72. package/dist/gateway/static/root/assets/{skills-page-sXXAZDc9.js → skills-page-fVKExKv5.js} +1 -1
  73. package/dist/gateway/static/root/assets/{skills-page.utils-DD79Bl1I.js → skills-page.utils-Yv9u3uJp.js} +1 -1
  74. package/dist/gateway/static/root/assets/{system-settings-panel-BEH64qBV.js → system-settings-panel-CCWjVdc2.js} +1 -1
  75. package/dist/gateway/static/root/assets/task-detail-page-I8hueJnG.js +1 -0
  76. package/dist/gateway/static/root/assets/{theme-store-CISSxU1c.js → theme-store-BtkaVpMm.js} +1 -1
  77. package/dist/gateway/static/root/assets/{tunnel-api-DrKDhnJm.js → tunnel-api-C__W9BaN.js} +1 -1
  78. package/dist/gateway/static/root/assets/{use-autosave-CPYePL-Q.js → use-autosave-Dow9RRcq.js} +1 -1
  79. package/dist/gateway/static/root/assets/user-model-page-CU6nxmoM.js +2 -0
  80. package/dist/gateway/static/root/assets/{voice-api-key-field-DKqzrCXx.js → voice-api-key-field-CvF3lEyx.js} +1 -1
  81. package/dist/gateway/static/root/assets/{voice-config-api-e9xWjwBX.js → voice-config-api-BEUVAyM6.js} +1 -1
  82. package/dist/gateway/static/root/assets/{work-discovery-overlay-kTQug6bq.js → work-discovery-overlay-B9PDfReq.js} +1 -1
  83. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-m9SKj_GT.js → workflow-run-setup-panel-kWGFkhjz.js} +2 -2
  84. package/dist/gateway/static/root/assets/workflows-page-B4Is5E42.js +5 -0
  85. package/dist/gateway/static/root/index.html +10 -10
  86. package/dist/package.js +1 -1
  87. package/dist/packages/realtime-protocol/src/voice.js +6 -1
  88. package/dist/src/agent/agent-manager.js +20 -3
  89. package/dist/src/agent/embedded/execution-context.d.ts +2 -1
  90. package/dist/src/agent/embedded/execution-context.js +10 -4
  91. package/dist/src/agent/embedded/index.d.ts +1 -1
  92. package/dist/src/agent/embedded/index.js +2 -2
  93. package/dist/src/agent/embedded/run-for-session.js +4 -3
  94. package/dist/src/agent/embedded/run-turn.js +22 -3
  95. package/dist/src/agent/embedded/types.d.ts +1 -1
  96. package/dist/src/agent/service/direct-turn-helpers.js +6 -3
  97. package/dist/src/agent/service/process-direct-streaming.js +6 -3
  98. package/dist/src/agent/service.d.ts +2 -0
  99. package/dist/src/agent/service.js +21 -7
  100. package/dist/src/agent/tools/clarify-tool.d.ts +17 -3
  101. package/dist/src/agent/tools/clarify-tool.js +27 -32
  102. package/dist/src/agent/tools/cli-clarify.js +23 -8
  103. package/dist/src/agent/tools/factory.js +14 -4
  104. package/dist/src/automations/domain/validation.d.ts +4 -4
  105. package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -1
  106. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  107. package/dist/src/gateway/chat-stream/mapper.js +5 -1
  108. package/dist/src/gateway/chat-stream/protocol.d.ts +5 -1
  109. package/dist/src/gateway/clarify-runtime.d.ts +7 -5
  110. package/dist/src/gateway/clarify-runtime.js +8 -11
  111. package/dist/src/gateway/ephemeral-clarification-waiter.d.ts +17 -0
  112. package/dist/src/gateway/ephemeral-clarification-waiter.js +46 -0
  113. package/dist/src/gateway/hono/routes/agent-stream.js +44 -18
  114. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +10 -2
  115. package/dist/src/gateway/hono/routes/side-chats.js +24 -4
  116. package/dist/src/gateway/security/gateway-scopes.js +1 -1
  117. package/dist/src/gateway/service/agent-runner.d.ts +25 -36
  118. package/dist/src/gateway/service/agent-runner.js +103 -32
  119. package/dist/src/gateway/service/run-gateway-agent.js +5 -2
  120. package/dist/src/gateway/service/session-input-coordinator.js +4 -1
  121. package/dist/src/gateway/service/sessions-api.js +1 -1
  122. package/dist/src/gateway/service.d.ts +4 -2
  123. package/dist/src/gateway/service.js +26 -10
  124. package/dist/src/gateway/side-chat/manager.d.ts +2 -1
  125. package/dist/src/gateway/side-chat/manager.js +5 -4
  126. package/dist/src/gateway/side-chat/run-service.d.ts +5 -1
  127. package/dist/src/gateway/side-chat/run-service.js +24 -23
  128. package/dist/src/gateway/side-chat/types.d.ts +3 -1
  129. package/dist/src/storage/sqlite/clarification-wait-repository.d.ts +41 -0
  130. package/dist/src/storage/sqlite/clarification-wait-repository.js +418 -0
  131. package/dist/src/storage/sqlite/index.d.ts +2 -1
  132. package/dist/src/storage/sqlite/index.js +2 -1
  133. package/dist/src/storage/sqlite/migrations/154_session_clarification_waits.sql +60 -0
  134. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  135. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  136. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  137. package/dist/src/storage/sqlite/schema.js +1 -1
  138. package/dist/src/storage/sqlite/session-input-repository.d.ts +11 -6
  139. package/dist/src/voice/realtime/agentEngine.js +7 -2
  140. package/dist/src/voice/realtime/runtime.types.d.ts +5 -0
  141. package/package.json +3 -3
  142. package/skills/creative/hatch-pet/SKILL.md +1 -1
  143. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-D4J4oq8p.js +0 -1
  144. package/dist/gateway/static/root/assets/automations-workspace-Ds5-_-9z.js +0 -6
  145. package/dist/gateway/static/root/assets/capabilities-settings-panel-Bs59UCut.js +0 -7
  146. package/dist/gateway/static/root/assets/channels-settings-CM9vNmoo.js +0 -1
  147. package/dist/gateway/static/root/assets/connectors-page-BPZ44D-V.js +0 -2
  148. package/dist/gateway/static/root/assets/gateway-settings-BxLcW6ij.js +0 -1
  149. package/dist/gateway/static/root/assets/home-page-CZAg9RBv.js +0 -1
  150. package/dist/gateway/static/root/assets/index-D4Ykja-U.js +0 -72
  151. package/dist/gateway/static/root/assets/index-zIJ3AXgR.css +0 -2
  152. package/dist/gateway/static/root/assets/markdown-view-DjiwT28p.js +0 -201
  153. package/dist/gateway/static/root/assets/messages-DaIwVWar.js +0 -3
  154. package/dist/gateway/static/root/assets/note-detail-panel-CfWxopl4.js +0 -5
  155. package/dist/gateway/static/root/assets/notes-page-CYN-LCHJ.js +0 -8
  156. package/dist/gateway/static/root/assets/project-detail-page-B5G3LzDq.js +0 -1
  157. package/dist/gateway/static/root/assets/projects-page-CuVK2mKu.js +0 -1
  158. package/dist/gateway/static/root/assets/remote-access-hub-Dnd73xWt.js +0 -1
  159. package/dist/gateway/static/root/assets/sessions-page-XL4LyKZe.js +0 -1
  160. package/dist/gateway/static/root/assets/settings-advanced-gate-0ForzDSS.js +0 -1
  161. package/dist/gateway/static/root/assets/setup-status-panel-DVws6XZc.js +0 -1
  162. package/dist/gateway/static/root/assets/shares-settings-BwDvcacF.js +0 -1
  163. package/dist/gateway/static/root/assets/skill-reload-api-BJjrATqE.js +0 -1
  164. package/dist/gateway/static/root/assets/task-detail-page-0jxMi75O.js +0 -1
  165. package/dist/gateway/static/root/assets/user-model-page-B6zLDfDl.js +0 -2
  166. package/dist/gateway/static/root/assets/workflows-page-Bcd1XqP7.js +0 -5
  167. package/dist/src/gateway/clarify-bridge.d.ts +0 -46
  168. package/dist/src/gateway/clarify-bridge.js +0 -111
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "xopc Browser Bridge",
4
- "version": "0.0.252",
4
+ "version": "0.0.253",
5
5
  "description": "Browser automation bridge for xopc — executes commands in Chrome via the local xopc daemon.",
6
6
  "permissions": [
7
7
  "debugger",
@@ -3,7 +3,7 @@ import { init_logger } from "../../../src/utils/logger.js";
3
3
  import { resolveRoute } from "../../../src/routing/resolve-route.js";
4
4
  import { normalizeTelegramCommandName, parseSlashCommand } from "../../../src/chat-commands/command-parse.js";
5
5
  import { checkMentionInTranscription } from "../../../src/voice/stt/mention.js";
6
- import { tryConsumeTelegramClarifyFreeText } from "../../../src/gateway/clarify-runtime.js";
6
+ import { answerClarificationTextFromChannel } from "../../../src/gateway/clarify-runtime.js";
7
7
  import { buildTelegramUpdateKey, telegramUpdateDedupe } from "./dedupe.js";
8
8
  import "../../../src/routing/index.js";
9
9
  import { resolveTelegramGroupContext } from "./group-config-resolver.js";
@@ -341,7 +341,7 @@ function createInboundProcessor(deps) {
341
341
  attachmentCount: attachments.length,
342
342
  isCommand
343
343
  }, "Processing Telegram message");
344
- if (finalContent.trim().length > 0 && !isCommand && tryConsumeTelegramClarifyFreeText(sessionKey, finalContent.trim())) {
344
+ if (finalContent.trim().length > 0 && !isCommand && answerClarificationTextFromChannel(sessionKey, finalContent.trim(), `telegram:${accountId}:${chatId}:message:${message.message_id}`)) {
345
345
  log.debug({ sessionKey }, "Telegram: consumed message as clarify reply");
346
346
  return;
347
347
  }
@@ -8,7 +8,7 @@ import { resolveStandardPairingPath } from "../../../src/channels/pairing/paths.
8
8
  import { issuePairingChallenge } from "../../../src/channels/pairing/pairing-challenge.js";
9
9
  import { createStandardPairingAdapter } from "../../../src/channels/pairing/pairing-store-adapter.js";
10
10
  import "./pairing-config-resolver.js";
11
- import { submitClarifyChoiceFromChannel } from "../../../src/gateway/clarify-runtime.js";
11
+ import { answerClarificationChoiceFromChannel } from "../../../src/gateway/clarify-runtime.js";
12
12
  import { createTimeoutAbortSignal } from "./timeout-abort.js";
13
13
  import { createInboundDebouncer } from "../../../src/infra/debounce.js";
14
14
  import { getMimeType } from "../../../src/channels/media.js";
@@ -531,7 +531,8 @@ var TelegramChannelPlugin = class {
531
531
  if (lastColon > 0) {
532
532
  const requestId = rest.slice(0, lastColon);
533
533
  const idx = Number.parseInt(rest.slice(lastColon + 1), 10);
534
- if (requestId && Number.isFinite(idx) && submitClarifyChoiceFromChannel(requestId, idx)) {
534
+ const idempotencyKey = `telegram:${_accountId}:callback:${ctx.callbackQuery.id}`;
535
+ if (requestId && Number.isFinite(idx) && answerClarificationChoiceFromChannel(requestId, idx, idempotencyKey)) {
535
536
  await ctx.answerCallbackQuery();
536
537
  return;
537
538
  }
@@ -2,7 +2,7 @@
2
2
  "id": "telegram",
3
3
  "name": "Telegram Channel",
4
4
  "description": "Bundled Telegram Bot channel (private workspace sources; ships inside @xopcai/xopc dist/)",
5
- "version": "0.0.252",
5
+ "version": "0.0.253",
6
6
  "kind": "channel",
7
7
  "main": "src/index.js",
8
8
  "channels": [
@@ -1 +1 @@
1
- import{f as e}from"./locale-store-BfZGZKSs.js";var t=`xopc.activity-center.v1`,n=80,r=720*60*60*1e3;function i(e){return e===`error`?`failed`:e===`warning`?`attention`:`done`}function a(){if(!(typeof window>`u`))return window.location.hash.replace(/^#/,``)||`${window.location.pathname}${window.location.search}`||void 0}function o(){try{let e=globalThis.localStorage?.getItem(t);if(!e)return[];let i=JSON.parse(e);if(!Array.isArray(i.items))return[];let a=Date.now()-r,o=i.items.filter(e=>e&&typeof e.id==`string`&&typeof e.title==`string`).filter(e=>Number.isFinite(e.updatedAt)&&e.updatedAt>=a).slice(0,n);return o.length!==i.items.length&&s(o),o}catch{return[]}}function s(e){try{globalThis.localStorage?.setItem(t,JSON.stringify({items:e}))}catch{}}function c(e){return`${e.toString(36)}-${Math.random().toString(36).slice(2,8)}`}var l=e(e=>({items:o(),add:t=>e(e=>{let r=t.title.trim();if(!r)return e;let o=Date.now(),l=t.tone??`info`,u=t.dedupeKey?e.items.findIndex(e=>e.dedupeKey===t.dedupeKey):-1,d=[{id:u>=0?e.items[u].id:c(o),tone:l,status:t.status??i(l),title:r,message:t.message?.trim()||void 0,source:t.source?.trim()||void 0,href:t.href??a(),dedupeKey:t.dedupeKey,createdAt:u>=0?e.items[u].createdAt:o,updatedAt:o,read:t.read??!1,occurrences:u>=0?e.items[u].occurrences+1:1},...u>=0?e.items.filter((e,t)=>t!==u):e.items].slice(0,n);return s(d),{items:d}}),markAllRead:()=>e(e=>{let t=e.items.map(e=>({...e,read:!0}));return s(t),{items:t}}),remove:t=>e(e=>{let n=e.items.filter(e=>e.id!==t);return s(n),{items:n}}),clearFinished:()=>e(e=>{let t=e.items.filter(e=>e.status!==`done`);return s(t),{items:t}}),clear:()=>{s([]),e({items:[]})}}));function u(e){l.getState().add(e)}export{u as t};
1
+ import{f as e}from"./locale-store-BkeaPZpn.js";var t=`xopc.activity-center.v1`,n=80,r=720*60*60*1e3;function i(e){return e===`error`?`failed`:e===`warning`?`attention`:`done`}function a(){if(!(typeof window>`u`))return window.location.hash.replace(/^#/,``)||`${window.location.pathname}${window.location.search}`||void 0}function o(){try{let e=globalThis.localStorage?.getItem(t);if(!e)return[];let i=JSON.parse(e);if(!Array.isArray(i.items))return[];let a=Date.now()-r,o=i.items.filter(e=>e&&typeof e.id==`string`&&typeof e.title==`string`).filter(e=>Number.isFinite(e.updatedAt)&&e.updatedAt>=a).slice(0,n);return o.length!==i.items.length&&s(o),o}catch{return[]}}function s(e){try{globalThis.localStorage?.setItem(t,JSON.stringify({items:e}))}catch{}}function c(e){return`${e.toString(36)}-${Math.random().toString(36).slice(2,8)}`}var l=e(e=>({items:o(),add:t=>e(e=>{let r=t.title.trim();if(!r)return e;let o=Date.now(),l=t.tone??`info`,u=t.dedupeKey?e.items.findIndex(e=>e.dedupeKey===t.dedupeKey):-1,d=[{id:u>=0?e.items[u].id:c(o),tone:l,status:t.status??i(l),title:r,message:t.message?.trim()||void 0,source:t.source?.trim()||void 0,href:t.href??a(),dedupeKey:t.dedupeKey,createdAt:u>=0?e.items[u].createdAt:o,updatedAt:o,read:t.read??!1,occurrences:u>=0?e.items[u].occurrences+1:1},...u>=0?e.items.filter((e,t)=>t!==u):e.items].slice(0,n);return s(d),{items:d}}),markAllRead:()=>e(e=>{let t=e.items.map(e=>({...e,read:!0}));return s(t),{items:t}}),remove:t=>e(e=>{let n=e.items.filter(e=>e.id!==t);return s(n),{items:n}}),clearFinished:()=>e(e=>{let t=e.items.filter(e=>e.status!==`done`);return s(t),{items:t}}),clear:()=>{s([]),e({items:[]})}}));function u(e){l.getState().add(e)}export{u as t};