agentix-cli 0.115.0 → 0.116.0

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 (131) hide show
  1. package/apps/mac-voice/Sources/AgentXVoice/AnswerView.swift +24 -2
  2. package/apps/mac-voice/Sources/AgentXVoice/ListenAgain.swift +26 -0
  3. package/apps/mac-voice/Sources/AgentXVoice/main.swift +54 -0
  4. package/dist/{App-6OMMZW2M.js → App-7Z2PWARZ.js} +2 -2
  5. package/dist/{ChatApp-EDDROHNA.js → ChatApp-GFAIRLGZ.js} +2 -2
  6. package/dist/{agent-VPM3EEUB.js → agent-LXLZGVW3.js} +2 -2
  7. package/dist/{board-dashboard-4GQ7RTH3.js → board-dashboard-CPCSSVZE.js} +255 -224
  8. package/dist/board-dashboard-CPCSSVZE.js.map +1 -0
  9. package/dist/chunk-6LCP6SVR.js +482 -0
  10. package/dist/chunk-6LCP6SVR.js.map +1 -0
  11. package/dist/{chunk-MG5LRE5B.js → chunk-7IF3LXAU.js} +2 -2
  12. package/dist/{chunk-7T7IXLLA.js → chunk-AWQIUI7N.js} +2 -2
  13. package/dist/{chunk-5FY7PWXW.js → chunk-B65YTB3T.js} +2 -2
  14. package/dist/chunk-BRL3UPFW.js +2 -0
  15. package/dist/chunk-BRL3UPFW.js.map +1 -0
  16. package/dist/{chunk-EVXL6X2R.js → chunk-CCL73Z2P.js} +56 -56
  17. package/dist/{chunk-EVXL6X2R.js.map → chunk-CCL73Z2P.js.map} +1 -1
  18. package/dist/{chunk-ECBVOIIK.js → chunk-CKYSGX54.js} +171 -171
  19. package/dist/chunk-CKYSGX54.js.map +1 -0
  20. package/dist/chunk-DMHQIACQ.js +3 -0
  21. package/dist/chunk-DMHQIACQ.js.map +1 -0
  22. package/dist/{chunk-K3BG77KK.js → chunk-EKOVLUKH.js} +2 -2
  23. package/dist/{chunk-S4XSVAAG.js → chunk-ELWKTURG.js} +2 -2
  24. package/dist/chunk-EMGB23H5.js +3 -0
  25. package/dist/chunk-EMGB23H5.js.map +1 -0
  26. package/dist/{chunk-IGORU3XR.js → chunk-FBEMUCBO.js} +2 -2
  27. package/dist/{chunk-IGORU3XR.js.map → chunk-FBEMUCBO.js.map} +1 -1
  28. package/dist/chunk-GRMCAO3Q.js +2 -0
  29. package/dist/chunk-GRMCAO3Q.js.map +1 -0
  30. package/dist/{chunk-CJJULHPJ.js → chunk-HOY2GIKV.js} +4 -4
  31. package/dist/{chunk-YE4HKOS5.js → chunk-HSYNOMM2.js} +2 -2
  32. package/dist/{chunk-PITMPRVP.js → chunk-IEZ6OYFJ.js} +2 -2
  33. package/dist/{chunk-BXYKFWAI.js → chunk-J3SIOMDL.js} +2 -2
  34. package/dist/{chunk-PX2AOZ5G.js → chunk-JLCJVPRC.js} +2 -2
  35. package/dist/{chunk-QLB76BGE.js → chunk-KI4CIUVJ.js} +2 -2
  36. package/dist/{chunk-2NYP4OQU.js → chunk-LNY6N73E.js} +4 -4
  37. package/dist/{chunk-2NYP4OQU.js.map → chunk-LNY6N73E.js.map} +1 -1
  38. package/dist/{chunk-KTF4YF4M.js → chunk-R277UDDQ.js} +2 -2
  39. package/dist/{chunk-4STXRZZS.js → chunk-S56ZGAFM.js} +2 -2
  40. package/dist/{chunk-SDOSQ6TJ.js → chunk-UUMNP47Q.js} +2 -2
  41. package/dist/{chunk-UQX2HY5M.js → chunk-WRICEAR6.js} +2 -2
  42. package/dist/{chunk-J5TZ6QGD.js → chunk-Y3CZE54A.js} +2 -2
  43. package/dist/{chunk-BU4LE2RT.js → chunk-YMNQYODO.js} +2 -2
  44. package/dist/cli.js +1 -1
  45. package/dist/{client-VUNPLVCG.js → client-CU5GNTKR.js} +2 -2
  46. package/dist/{config-HE2LGTTG.js → config-ITVBNUWW.js} +2 -2
  47. package/dist/config-mutator-5YRHHA2I.js +2 -0
  48. package/dist/doctor-MLD3XCYE.js +2 -0
  49. package/dist/index.d.ts +17 -4
  50. package/dist/index.js +1 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/{program-53CQJEUZ.js → program-IBOVOVZI.js} +191 -187
  53. package/dist/program-IBOVOVZI.js.map +1 -0
  54. package/dist/{promote-4PPJJ6AW.js → promote-JMJPWZI7.js} +2 -2
  55. package/dist/push-DID6RZYI.js +2 -0
  56. package/dist/push-bridge-IFUQLIMF.js +2 -0
  57. package/dist/push-store-L5QHMSST.js +2 -0
  58. package/dist/{query-ETDKC7WC.js → query-QGPVKGYY.js} +2 -2
  59. package/dist/{registry-AMETOJ3S.js → registry-PZNC5XYT.js} +2 -2
  60. package/dist/{request-planner-VFWWT5XR.js → request-planner-M4IKDZBU.js} +2 -2
  61. package/dist/{review-candidates-2PI4CGZO.js → review-candidates-6DNRBJZ6.js} +2 -2
  62. package/dist/routing-7NSB6O2S.js +2 -0
  63. package/dist/schedule-tool-ZP7H55EL.js +2 -0
  64. package/dist/scheduler-XV5UQQYH.js +2 -0
  65. package/dist/{seat-TVNR245I.js → seat-ZRCUQCUP.js} +2 -2
  66. package/dist/{select-KY7B4HAS.js → select-OLNLTEBR.js} +2 -2
  67. package/dist/{set-enabled-NEINY2I2.js → set-enabled-LG3ESZDC.js} +2 -2
  68. package/dist/token-store-AY6OBDVI.js +2 -0
  69. package/dist/token-store-AY6OBDVI.js.map +1 -0
  70. package/dist/{tool-MQQ2W5LJ.js → tool-RBXRPIBV.js} +2 -2
  71. package/dist/{tool-5JGMWH62.js → tool-S6U42ULD.js} +2 -2
  72. package/dist/wiki-XKQN5CWR.js +2 -0
  73. package/dist/wiki-XKQN5CWR.js.map +1 -0
  74. package/package.json +1 -1
  75. package/dist/board-dashboard-4GQ7RTH3.js.map +0 -1
  76. package/dist/chunk-2QSG53RN.js +0 -482
  77. package/dist/chunk-2QSG53RN.js.map +0 -1
  78. package/dist/chunk-ACFQBLPX.js +0 -3
  79. package/dist/chunk-ACFQBLPX.js.map +0 -1
  80. package/dist/chunk-ECBVOIIK.js.map +0 -1
  81. package/dist/config-mutator-22AVTST2.js +0 -2
  82. package/dist/doctor-6RDRST4G.js +0 -2
  83. package/dist/program-53CQJEUZ.js.map +0 -1
  84. package/dist/push-HEDA6P3B.js +0 -2
  85. package/dist/push-HEDA6P3B.js.map +0 -1
  86. package/dist/push-store-5VJ4FNI4.js +0 -2
  87. package/dist/routing-M7MDLD7Q.js +0 -2
  88. package/dist/schedule-tool-2EQ53IOQ.js +0 -2
  89. package/dist/scheduler-YGVINPZF.js +0 -2
  90. package/dist/token-store-YBSU2DTV.js +0 -2
  91. package/dist/wiki-COAUQ6TQ.js +0 -2
  92. /package/dist/{App-6OMMZW2M.js.map → App-7Z2PWARZ.js.map} +0 -0
  93. /package/dist/{ChatApp-EDDROHNA.js.map → ChatApp-GFAIRLGZ.js.map} +0 -0
  94. /package/dist/{agent-VPM3EEUB.js.map → agent-LXLZGVW3.js.map} +0 -0
  95. /package/dist/{chunk-MG5LRE5B.js.map → chunk-7IF3LXAU.js.map} +0 -0
  96. /package/dist/{chunk-7T7IXLLA.js.map → chunk-AWQIUI7N.js.map} +0 -0
  97. /package/dist/{chunk-5FY7PWXW.js.map → chunk-B65YTB3T.js.map} +0 -0
  98. /package/dist/{chunk-K3BG77KK.js.map → chunk-EKOVLUKH.js.map} +0 -0
  99. /package/dist/{chunk-S4XSVAAG.js.map → chunk-ELWKTURG.js.map} +0 -0
  100. /package/dist/{chunk-CJJULHPJ.js.map → chunk-HOY2GIKV.js.map} +0 -0
  101. /package/dist/{chunk-YE4HKOS5.js.map → chunk-HSYNOMM2.js.map} +0 -0
  102. /package/dist/{chunk-PITMPRVP.js.map → chunk-IEZ6OYFJ.js.map} +0 -0
  103. /package/dist/{chunk-BXYKFWAI.js.map → chunk-J3SIOMDL.js.map} +0 -0
  104. /package/dist/{chunk-PX2AOZ5G.js.map → chunk-JLCJVPRC.js.map} +0 -0
  105. /package/dist/{chunk-QLB76BGE.js.map → chunk-KI4CIUVJ.js.map} +0 -0
  106. /package/dist/{chunk-KTF4YF4M.js.map → chunk-R277UDDQ.js.map} +0 -0
  107. /package/dist/{chunk-4STXRZZS.js.map → chunk-S56ZGAFM.js.map} +0 -0
  108. /package/dist/{chunk-SDOSQ6TJ.js.map → chunk-UUMNP47Q.js.map} +0 -0
  109. /package/dist/{chunk-UQX2HY5M.js.map → chunk-WRICEAR6.js.map} +0 -0
  110. /package/dist/{chunk-J5TZ6QGD.js.map → chunk-Y3CZE54A.js.map} +0 -0
  111. /package/dist/{chunk-BU4LE2RT.js.map → chunk-YMNQYODO.js.map} +0 -0
  112. /package/dist/{client-VUNPLVCG.js.map → client-CU5GNTKR.js.map} +0 -0
  113. /package/dist/{config-HE2LGTTG.js.map → config-ITVBNUWW.js.map} +0 -0
  114. /package/dist/{config-mutator-22AVTST2.js.map → config-mutator-5YRHHA2I.js.map} +0 -0
  115. /package/dist/{doctor-6RDRST4G.js.map → doctor-MLD3XCYE.js.map} +0 -0
  116. /package/dist/{promote-4PPJJ6AW.js.map → promote-JMJPWZI7.js.map} +0 -0
  117. /package/dist/{push-store-5VJ4FNI4.js.map → push-DID6RZYI.js.map} +0 -0
  118. /package/dist/{query-ETDKC7WC.js.map → push-bridge-IFUQLIMF.js.map} +0 -0
  119. /package/dist/{registry-AMETOJ3S.js.map → push-store-L5QHMSST.js.map} +0 -0
  120. /package/dist/{routing-M7MDLD7Q.js.map → query-QGPVKGYY.js.map} +0 -0
  121. /package/dist/{schedule-tool-2EQ53IOQ.js.map → registry-PZNC5XYT.js.map} +0 -0
  122. /package/dist/{request-planner-VFWWT5XR.js.map → request-planner-M4IKDZBU.js.map} +0 -0
  123. /package/dist/{review-candidates-2PI4CGZO.js.map → review-candidates-6DNRBJZ6.js.map} +0 -0
  124. /package/dist/{scheduler-YGVINPZF.js.map → routing-7NSB6O2S.js.map} +0 -0
  125. /package/dist/{seat-TVNR245I.js.map → schedule-tool-ZP7H55EL.js.map} +0 -0
  126. /package/dist/{token-store-YBSU2DTV.js.map → scheduler-XV5UQQYH.js.map} +0 -0
  127. /package/dist/{wiki-COAUQ6TQ.js.map → seat-ZRCUQCUP.js.map} +0 -0
  128. /package/dist/{select-KY7B4HAS.js.map → select-OLNLTEBR.js.map} +0 -0
  129. /package/dist/{set-enabled-NEINY2I2.js.map → set-enabled-LG3ESZDC.js.map} +0 -0
  130. /package/dist/{tool-MQQ2W5LJ.js.map → tool-RBXRPIBV.js.map} +0 -0
  131. /package/dist/{tool-5JGMWH62.js.map → tool-S6U42ULD.js.map} +0 -0
@@ -1,2 +0,0 @@
1
- import{a as c}from"./chunk-KZKDVIOE.js";import"./chunk-QIJLFPWE.js";var m="/app#alerts",h=3e3,f=2,P=40,w=120,x=1e3;function A(i,e="AgentX"){let s=c(i.text||""),r=(i.buttons??[]).filter(t=>t.url&&t.url.length<=x).slice(0,f).map((t,d)=>({action:`b${d}`,title:g(t.label,P),url:t.url})),o={title:g(s.title||e,w),body:s.body,url:r[0]?.url??m,actions:r},a=()=>Buffer.byteLength(JSON.stringify(o),"utf8");if(a()>h){let t=[...o.body],d=a()-h;for(t=t.slice(0,Math.max(0,t.length-d-1)),o.body=t.join("")+"\u2026";a()>h&&t.length>0;)t=t.slice(0,Math.max(0,t.length-32)),o.body=t.join("")+"\u2026"}return o}function g(i,e){let s=[...i];return s.length>e?s.slice(0,e-1).join("")+"\u2026":i}var y=class{constructor(e){this.deps=e;this.log=e.log??console.error.bind(console,"[push]")}name="push";log;async start(){let e=this.deps.store.list().length;this.log(`push: ready (${e} subscribed phone${e===1?"":"s"})${this.deps.keys()?"":" \u2014 no keys yet, run: agentx app push-keys"}`)}async stop(){}onMessage(e){}async send(e){let s=this.deps.keys();if(!s)throw new Error("push: no keys \u2014 run `agentx app push-keys` on this node");let r=(e.chatId||"").trim(),o=r&&r!=="default"?r:void 0,a=[];for(let n of this.deps.store.list(o))this.deps.deviceActive(n.deviceId)&&n.publicKey===s.publicKey?a.push(n):this.deps.store.unsubscribe(n.endpoint);if(a.length===0)throw new Error(o?`push: phone ${o} has not turned on notifications`:"push: no phone has turned on notifications \u2014 open Alerts in the phone app");let t=A(e),d=JSON.stringify(t),v={vapidDetails:{subject:this.deps.subject,publicKey:s.publicKey,privateKey:s.privateKey},TTL:this.deps.ttlSeconds},u=0,l=[];if(await Promise.all(a.map(async n=>{try{await this.deps.sender({endpoint:n.endpoint,keys:{p256dh:n.p256dh,auth:n.auth}},d,v),u++}catch(p){p?.statusCode===404||p?.statusCode===410?(this.deps.store.unsubscribe(n.endpoint),this.log(`push: removed expired subscription for ${n.deviceName}`)):l.push(`${n.deviceName}: ${p?.statusCode?`HTTP ${p.statusCode} `:""}${p?.body||p?.message||p}`.slice(0,200))}})),u===0)throw new Error(`push: not delivered \u2014 ${l.join("; ")||"every subscription had expired"}`);return l.length&&this.log(`push: ${l.length} phone(s) failed: ${l.join("; ")}`),this.deps.store.log({title:t.title,body:t.body,url:t.url,delivered:u,deviceId:o??null},this.deps.keepRecent),String(u)}},b=class{constructor(e,s,r=console.error.bind(console,"[push]")){this.peer=e;this.forward=s;this.log=r}name="push";async start(){this.log(`push: relaying to ${this.peer}`)}async stop(){}onMessage(e){}async send(e){if(e.relayed)throw new Error(`push: this node relays too (channels.push.relayTo = ${this.peer}); set relayTo only on nodes that don't host the phone app`);return this.forward(this.peer,{channel:"push",chatId:e.chatId||"default",text:e.text,...e.buttons?.length?{buttons:e.buttons}:{},relayed:!0})}};export{m as DEFAULT_OPEN_URL,h as MAX_PAYLOAD_BYTES,y as PushAdapter,b as PushRelayAdapter,A as buildPushPayload};
2
- //# sourceMappingURL=push-HEDA6P3B.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/channels/push.ts"],"sourcesContent":["import type { ChannelAdapter, IncomingMessage, OutgoingMessage } from \"./types\"\nimport type { PushStore, PushSubscriptionRow } from \"./push-store\"\nimport type { PushKeys } from \"./push-keys\"\nimport { splitTitle } from \"./ntfy\"\n\n// --- push channel — Web Push to the phone app ---\n//\n// Outbound only, like ntfy, and registered as a ChannelAdapter for the same\n// reason: notifications.destination, POST /send, `agentx notify`, cron\n// failure pings and Focus digests all reach it through router.sendOutbound().\n//\n// One node hosts the phone app (/app) and so holds the subscriptions; it\n// runs PushAdapter. Every other node runs PushRelayAdapter under the same\n// channel name, which forwards to the host over the mesh, so callers never\n// need to know where the phone is paired.\n//\n// Addressing: `chatId` \"default\" (or empty) means every subscribed phone;\n// anything else is one phone's device id (the tok_… id from\n// `agentx app devices`).\n\n/** Where a tap lands when the message has no button of its own. */\nexport const DEFAULT_OPEN_URL = \"/app#alerts\"\n/** Push services refuse payloads over 4096 bytes after encryption (413,\n * which is not retried). The JSON is kept well under that, in bytes. */\nexport const MAX_PAYLOAD_BYTES = 3000\n/** Chrome shows at most two action buttons. */\nconst MAX_ACTIONS = 2\nconst MAX_LABEL = 40\nconst MAX_TITLE = 120\n/** Longer links are dropped rather than cut, since a cut link is broken. */\nconst MAX_URL = 1000\n\nexport interface PushPayload {\n title: string\n body: string\n /** Opened when the notification itself is tapped. */\n url: string\n actions: Array<{ action: string; title: string; url: string }>\n}\n\n/** What web-push's sendNotification needs; injected so tests stay offline. */\nexport type PushSender = (\n sub: { endpoint: string; keys: { p256dh: string; auth: string } },\n payload: string,\n opts: { vapidDetails: { subject: string; publicKey: string; privateKey: string }; TTL: number },\n) => Promise<unknown>\n\nexport interface PushAdapterDeps {\n store: PushStore\n keys: () => PushKeys | null\n /** mailto: or https: contact the push services can reach you at. */\n subject: string\n ttlSeconds: number\n keepRecent: number\n /** False for a phone whose device token was revoked or expired. */\n deviceActive: (deviceId: string) => boolean\n sender: PushSender\n log?: (...args: unknown[]) => void\n}\n\nexport function buildPushPayload(msg: OutgoingMessage, defaultTitle = \"AgentX\"): PushPayload {\n const split = splitTitle(msg.text || \"\")\n const actions = (msg.buttons ?? [])\n .filter((b) => b.url && b.url.length <= MAX_URL)\n .slice(0, MAX_ACTIONS)\n .map((b, i) => ({ action: `b${i}`, title: clip(b.label, MAX_LABEL), url: b.url }))\n const payload: PushPayload = {\n title: clip(split.title || defaultTitle, MAX_TITLE),\n body: split.body,\n url: actions[0]?.url ?? DEFAULT_OPEN_URL,\n actions,\n }\n // Trim the body by bytes, not characters: Arabic, CJK and emoji take\n // several bytes each.\n const size = () => Buffer.byteLength(JSON.stringify(payload), \"utf8\")\n if (size() > MAX_PAYLOAD_BYTES) {\n let chars = [...payload.body]\n const over = size() - MAX_PAYLOAD_BYTES\n chars = chars.slice(0, Math.max(0, chars.length - over - 1))\n payload.body = chars.join(\"\") + \"…\"\n while (size() > MAX_PAYLOAD_BYTES && chars.length > 0) {\n chars = chars.slice(0, Math.max(0, chars.length - 32))\n payload.body = chars.join(\"\") + \"…\"\n }\n }\n return payload\n}\n\nfunction clip(s: string, max: number): string {\n const chars = [...s]\n return chars.length > max ? chars.slice(0, max - 1).join(\"\") + \"…\" : s\n}\n\nexport class PushAdapter implements ChannelAdapter {\n readonly name = \"push\"\n private log: (...args: unknown[]) => void\n\n constructor(private deps: PushAdapterDeps) {\n this.log = deps.log ?? console.error.bind(console, \"[push]\")\n }\n\n async start(): Promise<void> {\n const n = this.deps.store.list().length\n this.log(`push: ready (${n} subscribed phone${n === 1 ? \"\" : \"s\"})${this.deps.keys() ? \"\" : \" — no keys yet, run: agentx app push-keys\"}`)\n }\n\n async stop(): Promise<void> {}\n\n onMessage(_handler: (msg: IncomingMessage) => Promise<void>): void {}\n\n async send(msg: OutgoingMessage): Promise<string | void> {\n const keys = this.deps.keys()\n if (!keys) throw new Error(\"push: no keys — run `agentx app push-keys` on this node\")\n const requested = (msg.chatId || \"\").trim()\n const device = requested && requested !== \"default\" ? requested : undefined\n\n const subs: PushSubscriptionRow[] = []\n for (const s of this.deps.store.list(device)) {\n // A revoked phone stops getting pushes even if its browser never\n // unsubscribed, and a row made with replaced keys can never be\n // delivered; either goes, so it isn't retried every time. The phone\n // re-subscribes with the new key when the app next opens.\n if (this.deps.deviceActive(s.deviceId) && s.publicKey === keys.publicKey) subs.push(s)\n else this.deps.store.unsubscribe(s.endpoint)\n }\n if (subs.length === 0) {\n throw new Error(device\n ? `push: phone ${device} has not turned on notifications`\n : \"push: no phone has turned on notifications — open Alerts in the phone app\")\n }\n\n const payload = buildPushPayload(msg)\n const body = JSON.stringify(payload)\n const opts = {\n vapidDetails: { subject: this.deps.subject, publicKey: keys.publicKey, privateKey: keys.privateKey },\n TTL: this.deps.ttlSeconds,\n }\n let delivered = 0\n const errors: string[] = []\n await Promise.all(subs.map(async (s) => {\n try {\n await this.deps.sender({ endpoint: s.endpoint, keys: { p256dh: s.p256dh, auth: s.auth } }, body, opts)\n delivered++\n } catch (e: any) {\n // 404/410: the browser dropped the subscription (app removed,\n // permission withdrawn). Anything else may be temporary; keep it.\n if (e?.statusCode === 404 || e?.statusCode === 410) {\n this.deps.store.unsubscribe(s.endpoint)\n this.log(`push: removed expired subscription for ${s.deviceName}`)\n } else {\n errors.push(`${s.deviceName}: ${e?.statusCode ? `HTTP ${e.statusCode} ` : \"\"}${e?.body || e?.message || e}`.slice(0, 200))\n }\n }\n }))\n\n if (delivered === 0) throw new Error(`push: not delivered — ${errors.join(\"; \") || \"every subscription had expired\"}`)\n if (errors.length) this.log(`push: ${errors.length} phone(s) failed: ${errors.join(\"; \")}`)\n this.deps.store.log({ title: payload.title, body: payload.body, url: payload.url, delivered, deviceId: device ?? null }, this.deps.keepRecent)\n return String(delivered)\n }\n}\n\n/** Payload for the host's POST /channel/send. */\nexport interface PushRelayPayload {\n channel: \"push\"\n chatId: string\n text: string\n buttons?: OutgoingMessage[\"buttons\"]\n relayed: true\n}\n\n/** The `push` channel on a node that doesn't host the phone app: forwards\n * each message to the host (channels.push.relayTo) over the mesh. */\nexport class PushRelayAdapter implements ChannelAdapter {\n readonly name = \"push\"\n\n constructor(\n private peer: string,\n private forward: (peer: string, payload: PushRelayPayload) => Promise<string | void>,\n private log: (...args: unknown[]) => void = console.error.bind(console, \"[push]\"),\n ) {}\n\n async start(): Promise<void> {\n this.log(`push: relaying to ${this.peer}`)\n }\n\n async stop(): Promise<void> {}\n\n onMessage(_handler: (msg: IncomingMessage) => Promise<void>): void {}\n\n async send(msg: OutgoingMessage & { relayed?: boolean }): Promise<string | void> {\n // Two nodes each set to relay to the other would bounce a message forever.\n if (msg.relayed) throw new Error(`push: this node relays too (channels.push.relayTo = ${this.peer}); set relayTo only on nodes that don't host the phone app`)\n return this.forward(this.peer, {\n channel: \"push\",\n chatId: msg.chatId || \"default\",\n text: msg.text,\n ...(msg.buttons?.length ? { buttons: msg.buttons } : {}),\n relayed: true,\n })\n }\n}\n"],"mappings":"oEAqBO,IAAMA,EAAmB,cAGnBC,EAAoB,IAE3BC,EAAc,EACdC,EAAY,GACZC,EAAY,IAEZC,EAAU,IA8BT,SAASC,EAAiBC,EAAsBC,EAAe,SAAuB,CAC3F,IAAMC,EAAQC,EAAWH,EAAI,MAAQ,EAAE,EACjCI,GAAWJ,EAAI,SAAW,CAAC,GAC9B,OAAQK,GAAMA,EAAE,KAAOA,EAAE,IAAI,QAAUP,CAAO,EAC9C,MAAM,EAAGH,CAAW,EACpB,IAAI,CAACU,EAAGC,KAAO,CAAE,OAAQ,IAAIA,IAAK,MAAOC,EAAKF,EAAE,MAAOT,CAAS,EAAG,IAAKS,EAAE,GAAI,EAAE,EAC7EG,EAAuB,CAC3B,MAAOD,EAAKL,EAAM,OAASD,EAAcJ,CAAS,EAClD,KAAMK,EAAM,KACZ,IAAKE,EAAQ,CAAC,GAAG,KAAOX,EACxB,QAAAW,CACF,EAGMK,EAAO,IAAM,OAAO,WAAW,KAAK,UAAUD,CAAO,EAAG,MAAM,EACpE,GAAIC,EAAK,EAAIf,EAAmB,CAC9B,IAAIgB,EAAQ,CAAC,GAAGF,EAAQ,IAAI,EACtBG,EAAOF,EAAK,EAAIf,EAGtB,IAFAgB,EAAQA,EAAM,MAAM,EAAG,KAAK,IAAI,EAAGA,EAAM,OAASC,EAAO,CAAC,CAAC,EAC3DH,EAAQ,KAAOE,EAAM,KAAK,EAAE,EAAI,SACzBD,EAAK,EAAIf,GAAqBgB,EAAM,OAAS,GAClDA,EAAQA,EAAM,MAAM,EAAG,KAAK,IAAI,EAAGA,EAAM,OAAS,EAAE,CAAC,EACrDF,EAAQ,KAAOE,EAAM,KAAK,EAAE,EAAI,SAGpC,OAAOF,CACT,CAEA,SAASD,EAAKK,EAAWC,EAAqB,CAC5C,IAAMH,EAAQ,CAAC,GAAGE,CAAC,EACnB,OAAOF,EAAM,OAASG,EAAMH,EAAM,MAAM,EAAGG,EAAM,CAAC,EAAE,KAAK,EAAE,EAAI,SAAMD,CACvE,CAEO,IAAME,EAAN,KAA4C,CAIjD,YAAoBC,EAAuB,CAAvB,UAAAA,EAClB,KAAK,IAAMA,EAAK,KAAO,QAAQ,MAAM,KAAK,QAAS,QAAQ,CAC7D,CALS,KAAO,OACR,IAMR,MAAM,OAAuB,CAC3B,IAAMC,EAAI,KAAK,KAAK,MAAM,KAAK,EAAE,OACjC,KAAK,IAAI,gBAAgBA,qBAAqBA,IAAM,EAAI,GAAK,OAAO,KAAK,KAAK,KAAK,EAAI,GAAK,kDAA6C,CAC3I,CAEA,MAAM,MAAsB,CAAC,CAE7B,UAAUC,EAAyD,CAAC,CAEpE,MAAM,KAAKjB,EAA8C,CACvD,IAAMkB,EAAO,KAAK,KAAK,KAAK,EAC5B,GAAI,CAACA,EAAM,MAAM,IAAI,MAAM,8DAAyD,EACpF,IAAMC,GAAanB,EAAI,QAAU,IAAI,KAAK,EACpCoB,EAASD,GAAaA,IAAc,UAAYA,EAAY,OAE5DE,EAA8B,CAAC,EACrC,QAAWT,KAAK,KAAK,KAAK,MAAM,KAAKQ,CAAM,EAKrC,KAAK,KAAK,aAAaR,EAAE,QAAQ,GAAKA,EAAE,YAAcM,EAAK,UAAWG,EAAK,KAAKT,CAAC,EAChF,KAAK,KAAK,MAAM,YAAYA,EAAE,QAAQ,EAE7C,GAAIS,EAAK,SAAW,EAClB,MAAM,IAAI,MAAMD,EACZ,eAAeA,oCACf,gFAA2E,EAGjF,IAAMZ,EAAUT,EAAiBC,CAAG,EAC9BsB,EAAO,KAAK,UAAUd,CAAO,EAC7Be,EAAO,CACX,aAAc,CAAE,QAAS,KAAK,KAAK,QAAS,UAAWL,EAAK,UAAW,WAAYA,EAAK,UAAW,EACnG,IAAK,KAAK,KAAK,UACjB,EACIM,EAAY,EACVC,EAAmB,CAAC,EAiB1B,GAhBA,MAAM,QAAQ,IAAIJ,EAAK,IAAI,MAAOT,GAAM,CACtC,GAAI,CACF,MAAM,KAAK,KAAK,OAAO,CAAE,SAAUA,EAAE,SAAU,KAAM,CAAE,OAAQA,EAAE,OAAQ,KAAMA,EAAE,IAAK,CAAE,EAAGU,EAAMC,CAAI,EACrGC,GACF,OAASE,EAAP,CAGIA,GAAG,aAAe,KAAOA,GAAG,aAAe,KAC7C,KAAK,KAAK,MAAM,YAAYd,EAAE,QAAQ,EACtC,KAAK,IAAI,0CAA0CA,EAAE,YAAY,GAEjEa,EAAO,KAAK,GAAGb,EAAE,eAAec,GAAG,WAAa,QAAQA,EAAE,cAAgB,KAAKA,GAAG,MAAQA,GAAG,SAAWA,IAAI,MAAM,EAAG,GAAG,CAAC,CAE7H,CACF,CAAC,CAAC,EAEEF,IAAc,EAAG,MAAM,IAAI,MAAM,8BAAyBC,EAAO,KAAK,IAAI,GAAK,kCAAkC,EACrH,OAAIA,EAAO,QAAQ,KAAK,IAAI,SAASA,EAAO,2BAA2BA,EAAO,KAAK,IAAI,GAAG,EAC1F,KAAK,KAAK,MAAM,IAAI,CAAE,MAAOjB,EAAQ,MAAO,KAAMA,EAAQ,KAAM,IAAKA,EAAQ,IAAK,UAAAgB,EAAW,SAAUJ,GAAU,IAAK,EAAG,KAAK,KAAK,UAAU,EACtI,OAAOI,CAAS,CACzB,CACF,EAaaG,EAAN,KAAiD,CAGtD,YACUC,EACAC,EACAC,EAAoC,QAAQ,MAAM,KAAK,QAAS,QAAQ,EAChF,CAHQ,UAAAF,EACA,aAAAC,EACA,SAAAC,CACP,CANM,KAAO,OAQhB,MAAM,OAAuB,CAC3B,KAAK,IAAI,qBAAqB,KAAK,MAAM,CAC3C,CAEA,MAAM,MAAsB,CAAC,CAE7B,UAAUb,EAAyD,CAAC,CAEpE,MAAM,KAAKjB,EAAsE,CAE/E,GAAIA,EAAI,QAAS,MAAM,IAAI,MAAM,uDAAuD,KAAK,gEAAgE,EAC7J,OAAO,KAAK,QAAQ,KAAK,KAAM,CAC7B,QAAS,OACT,OAAQA,EAAI,QAAU,UACtB,KAAMA,EAAI,KACV,GAAIA,EAAI,SAAS,OAAS,CAAE,QAASA,EAAI,OAAQ,EAAI,CAAC,EACtD,QAAS,EACX,CAAC,CACH,CACF","names":["DEFAULT_OPEN_URL","MAX_PAYLOAD_BYTES","MAX_ACTIONS","MAX_LABEL","MAX_TITLE","MAX_URL","buildPushPayload","msg","defaultTitle","split","splitTitle","actions","b","i","clip","payload","size","chars","over","s","max","PushAdapter","deps","n","_handler","keys","requested","device","subs","body","opts","delivered","errors","e","PushRelayAdapter","peer","forward","log"]}
@@ -1,2 +0,0 @@
1
- import{a}from"./chunk-2NYP4OQU.js";import"./chunk-JWDJMFU6.js";import"./chunk-QIJLFPWE.js";export{a as PushStore};
2
- //# sourceMappingURL=push-store-5VJ4FNI4.js.map
@@ -1,2 +0,0 @@
1
- import{a,b,c,d,e,f}from"./chunk-SDOSQ6TJ.js";import"./chunk-UQX2HY5M.js";import"./chunk-72SZI2UW.js";import"./chunk-FX3D7YON.js";import"./chunk-FCPTN6NF.js";import"./chunk-2PJKGZWP.js";import"./chunk-7I7IEX4S.js";import"./chunk-IGORU3XR.js";import"./chunk-UIBUZ2N3.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";export{e as DEFAULT_TRIAGE_ACTIONS,a as DOWNGRADE_BELOW,b as channelKeepsConfiguredModel,c as cheapModelForEngine,d as routeTaskModel,f as triageModelFor};
2
- //# sourceMappingURL=routing-M7MDLD7Q.js.map
@@ -1,2 +0,0 @@
1
- import{a,b}from"./chunk-S4XSVAAG.js";import"./chunk-RKPAVWXF.js";import"./chunk-J5TZ6QGD.js";import"./chunk-BXYKFWAI.js";import"./chunk-PX2AOZ5G.js";import"./chunk-FCPTN6NF.js";import"./chunk-7I7IEX4S.js";import"./chunk-IGORU3XR.js";import"./chunk-UIBUZ2N3.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-QIJLFPWE.js";export{b as resolveScheduleCaller,a as runScheduleTool};
2
- //# sourceMappingURL=schedule-tool-2EQ53IOQ.js.map
@@ -1,2 +0,0 @@
1
- import{n as a,o as b,p as c,q as d,r as e,s as f}from"./chunk-BXYKFWAI.js";import"./chunk-PX2AOZ5G.js";import"./chunk-FCPTN6NF.js";import"./chunk-7I7IEX4S.js";import"./chunk-IGORU3XR.js";import"./chunk-UIBUZ2N3.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-QIJLFPWE.js";export{a as AGENT_RUN_TIMEOUT_FLOOR,f as CronScheduler,b as agentRunTimeout,e as cronRunId,d as getNextCronDate,c as runLinkIds};
2
- //# sourceMappingURL=scheduler-YGVINPZF.js.map
@@ -1,2 +0,0 @@
1
- import{a,b,c,d,e}from"./chunk-ACFQBLPX.js";import"./chunk-QIJLFPWE.js";export{a as TOKEN_PREFIX,b as TokenStore,e as extractToken,d as hashToken,c as recordHasScope};
2
- //# sourceMappingURL=token-store-YBSU2DTV.js.map
@@ -1,2 +0,0 @@
1
- import"./chunk-VWTBHLMX.js";import{a as b}from"./chunk-K3BG77KK.js";import{a}from"./chunk-QLB76BGE.js";import"./chunk-CECHWYJ2.js";import{a as c}from"./chunk-KTF4YF4M.js";import"./chunk-BU4LE2RT.js";import"./chunk-WPNRDEHW.js";import"./chunk-2GIDVZ4H.js";import"./chunk-UQX2HY5M.js";import"./chunk-72SZI2UW.js";import"./chunk-FX3D7YON.js";import"./chunk-FCPTN6NF.js";import"./chunk-QOYAX2FT.js";import"./chunk-2PJKGZWP.js";import"./chunk-7I7IEX4S.js";import"./chunk-IGORU3XR.js";import"./chunk-UIBUZ2N3.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";export{b as WikiHub,a as WikiStore,c as agenticQuery};
2
- //# sourceMappingURL=wiki-COAUQ6TQ.js.map