agentix-cli 0.65.0 → 0.66.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 (44) hide show
  1. package/apps/mac-voice/Sources/AgentXVoice/AgentClient.swift +29 -8
  2. package/apps/mac-voice/Sources/AgentXVoice/MiniOrbs.swift +219 -0
  3. package/apps/mac-voice/Sources/AgentXVoice/Panel.swift +32 -3
  4. package/apps/mac-voice/Sources/AgentXVoice/PillBusy.swift +126 -0
  5. package/apps/mac-voice/Sources/AgentXVoice/StatusMenu.swift +53 -12
  6. package/apps/mac-voice/Sources/AgentXVoice/main.swift +49 -3
  7. package/dist/{agent-HUKCS3AK.js → agent-BQ5CCARE.js} +2 -2
  8. package/dist/{board-dashboard-S4V4WR2N.js → board-dashboard-K3P2M7A7.js} +813 -366
  9. package/dist/board-dashboard-K3P2M7A7.js.map +1 -0
  10. package/dist/{chunk-WWMFNLKD.js → chunk-2NYP4OQU.js} +3 -3
  11. package/dist/chunk-2NYP4OQU.js.map +1 -0
  12. package/dist/{chunk-AVDWFQZ5.js → chunk-6CFAF5CH.js} +2 -2
  13. package/dist/{chunk-OTTAKMGC.js → chunk-AWKZ3BF2.js} +3 -3
  14. package/dist/{chunk-HSJRI3NW.js → chunk-BBXBSM4R.js} +148 -148
  15. package/dist/chunk-BBXBSM4R.js.map +1 -0
  16. package/dist/{chunk-LEFRNHZF.js → chunk-EPTZ6JMA.js} +4 -4
  17. package/dist/chunk-JWDJMFU6.js +4 -0
  18. package/dist/chunk-JWDJMFU6.js.map +1 -0
  19. package/dist/{chunk-EOKOGQZG.js → chunk-YDHI2CJG.js} +2 -2
  20. package/dist/{chunk-ECBKTFTL.js → chunk-ZIEUP56T.js} +2 -2
  21. package/dist/cli.js +1 -1
  22. package/dist/index.d.ts +2 -0
  23. package/dist/index.js +1 -1
  24. package/dist/{program-DZCKFNHD.js → program-4W45H3J2.js} +2 -2
  25. package/dist/push-announce-PM5FZJRW.js +3 -0
  26. package/dist/push-announce-PM5FZJRW.js.map +1 -0
  27. package/dist/push-prefs-YOJNTOJF.js +2 -0
  28. package/dist/push-store-5VJ4FNI4.js +2 -0
  29. package/dist/{registry-P7IAAFCX.js → registry-TERSIHOC.js} +2 -2
  30. package/dist/registry-TERSIHOC.js.map +1 -0
  31. package/package.json +1 -1
  32. package/dist/board-dashboard-S4V4WR2N.js.map +0 -1
  33. package/dist/chunk-HSJRI3NW.js.map +0 -1
  34. package/dist/chunk-WWMFNLKD.js.map +0 -1
  35. package/dist/push-store-LXTYULUF.js +0 -2
  36. /package/dist/{agent-HUKCS3AK.js.map → agent-BQ5CCARE.js.map} +0 -0
  37. /package/dist/{chunk-AVDWFQZ5.js.map → chunk-6CFAF5CH.js.map} +0 -0
  38. /package/dist/{chunk-OTTAKMGC.js.map → chunk-AWKZ3BF2.js.map} +0 -0
  39. /package/dist/{chunk-LEFRNHZF.js.map → chunk-EPTZ6JMA.js.map} +0 -0
  40. /package/dist/{chunk-EOKOGQZG.js.map → chunk-YDHI2CJG.js.map} +0 -0
  41. /package/dist/{chunk-ECBKTFTL.js.map → chunk-ZIEUP56T.js.map} +0 -0
  42. /package/dist/{program-DZCKFNHD.js.map → program-4W45H3J2.js.map} +0 -0
  43. /package/dist/{push-store-LXTYULUF.js.map → push-prefs-YOJNTOJF.js.map} +0 -0
  44. /package/dist/{registry-P7IAAFCX.js.map → push-store-5VJ4FNI4.js.map} +0 -0
@@ -1,2 +1,2 @@
1
- import{a}from"./chunk-LEFRNHZF.js";import"./chunk-5WMHW4A6.js";import"./chunk-N42YWYIR.js";import"./chunk-WMDDQVCI.js";import"./chunk-Z3IP66SL.js";import"./chunk-C4CDVE2E.js";import"./chunk-RKPAVWXF.js";import"./chunk-GV7S5BAX.js";import"./chunk-GSX4NK2N.js";import"./chunk-SZDACK6O.js";import"./chunk-HSJRI3NW.js";import"./chunk-EOKOGQZG.js";import"./chunk-5QP56S4O.js";import"./chunk-BYJ3A55Y.js";import"./chunk-LQRBGQIR.js";import"./chunk-ZVP6GB4G.js";import"./chunk-I2SD4XZ6.js";import"./chunk-XT3E5MLX.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-2D3RYIDU.js";import"./chunk-L53FTKEP.js";import"./chunk-OTTAKMGC.js";import"./chunk-ECBKTFTL.js";import"./chunk-WP6KLXTP.js";import"./chunk-N6EWZGIX.js";import"./chunk-DP7RTNDM.js";import"./chunk-BHE5TJSN.js";import"./chunk-EA7H3EUX.js";import"./chunk-AVDWFQZ5.js";import"./chunk-SFQUP3BP.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-LQ5J6COO.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-AZBOYKQA.js";import"./chunk-WGWNVLVW.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-P4GOKVK2.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import"./chunk-PTB2TPOC.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import"./chunk-SZJMS7K4.js";import"./chunk-7I7IEX4S.js";import"./chunk-VDMYBPYB.js";import"./chunk-DSYKYZMT.js";import"./chunk-OVF37EXJ.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";export{a as buildProgram};
2
- //# sourceMappingURL=program-DZCKFNHD.js.map
1
+ import{a}from"./chunk-EPTZ6JMA.js";import"./chunk-5WMHW4A6.js";import"./chunk-WMDDQVCI.js";import"./chunk-Z3IP66SL.js";import"./chunk-N42YWYIR.js";import"./chunk-C4CDVE2E.js";import"./chunk-RKPAVWXF.js";import"./chunk-GV7S5BAX.js";import"./chunk-GSX4NK2N.js";import"./chunk-SZDACK6O.js";import"./chunk-BBXBSM4R.js";import"./chunk-YDHI2CJG.js";import"./chunk-5QP56S4O.js";import"./chunk-ZVP6GB4G.js";import"./chunk-BYJ3A55Y.js";import"./chunk-LQRBGQIR.js";import"./chunk-I2SD4XZ6.js";import"./chunk-XT3E5MLX.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-2D3RYIDU.js";import"./chunk-L53FTKEP.js";import"./chunk-AWKZ3BF2.js";import"./chunk-ZIEUP56T.js";import"./chunk-N6EWZGIX.js";import"./chunk-WP6KLXTP.js";import"./chunk-DP7RTNDM.js";import"./chunk-BHE5TJSN.js";import"./chunk-EA7H3EUX.js";import"./chunk-6CFAF5CH.js";import"./chunk-SFQUP3BP.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-LQ5J6COO.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-AZBOYKQA.js";import"./chunk-WGWNVLVW.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-P4GOKVK2.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import"./chunk-PTB2TPOC.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import"./chunk-SZJMS7K4.js";import"./chunk-7I7IEX4S.js";import"./chunk-VDMYBPYB.js";import"./chunk-DSYKYZMT.js";import"./chunk-OVF37EXJ.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";export{a as buildProgram};
2
+ //# sourceMappingURL=program-4W45H3J2.js.map
@@ -0,0 +1,3 @@
1
+ import"./chunk-QIJLFPWE.js";var h=200;function f(n){let t=n.agentId?`${n.agentId}: ${n.summary}`:n.summary,r=[...t];return r.length>200?r.slice(0,200-1).join("")+"\u2026":t}function l(n){let t=n.now??Date.now,r=n.startedAt??t(),m=n.maxAgeMs??10*6e4,p=n.log??(()=>{}),s=new Set;return n.bus.subscribe(o=>{if(o.kind!=="announce")return;let i=`${o.node}:${o.id}`;if(s.has(i))return;s.add(i),s.size>1e3&&s.delete(s.values().next().value);let u=Date.parse(o.at);if(!Number.isFinite(u)||u<r||u<t()-m)return;let a=[...new Set(n.store.list().map(e=>e.deviceId))].filter(e=>n.prefs.on(e,"announce"));if(a.length===0)return;let g=`Announcement
2
+ ${f(o)}`;for(let e of a)n.send({channel:"push",chatId:e,text:g}).catch(c=>{p(`push: announcement not sent to ${e}: ${c?.message??c}`)})})}export{h as ANNOUNCE_PUSH_MAX,f as announceBody,l as attachAnnouncePush};
3
+ //# sourceMappingURL=push-announce-PM5FZJRW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/channels/push-announce.ts"],"sourcesContent":["import type { EnvelopeListener } from \"@/events/bus\"\nimport type { EventEnvelope } from \"@/events/envelope\"\nimport type { OutgoingMessage } from \"./types\"\nimport type { PushStore } from \"./push-store\"\nimport type { PushPrefs } from \"./push-prefs\"\n\n// --- Push a notification for each new mesh announcement (#268) ---\n//\n// Runs only on the node that hosts the phone app (the one running\n// PushAdapter). Announcements from other nodes reach this node's bus\n// through the peer feed, so listening to the bus covers the whole mesh\n// and each announcement is pushed once, by one node.\n//\n// Not pushed:\n// - the same event twice (key node:id; the bus already refuses repeats\n// from the feed, this guards against a second path in),\n// - anything published before this process started, which is what the\n// feed's first-contact backfill and catch-up reads bring in,\n// - anything older than `maxAgeMs`, so a peer that reconnects after a\n// long outage doesn't fire a stack of stale notifications,\n// - phones that turned \"Notify me of announcements\" off (push_prefs\n// switch \"announce\").\n\n/** Longest announcement text in a notification body. */\nexport const ANNOUNCE_PUSH_MAX = 200\nconst SEEN_MAX = 1000\n\nexport interface AnnouncePushDeps {\n bus: { subscribe(fn: EnvelopeListener): () => void }\n store: Pick<PushStore, \"list\">\n prefs: Pick<PushPrefs, \"on\">\n /** The PushAdapter's send; chatId is one phone's device id. */\n send: (msg: OutgoingMessage) => Promise<unknown>\n /** Events stamped before this are replays. Defaults to attach time. */\n startedAt?: number\n maxAgeMs?: number\n now?: () => number\n log?: (...args: unknown[]) => void\n}\n\nexport function announceBody(e: Pick<EventEnvelope, \"summary\" | \"agentId\">): string {\n const text = e.agentId ? `${e.agentId}: ${e.summary}` : e.summary\n const chars = [...text]\n return chars.length > ANNOUNCE_PUSH_MAX ? chars.slice(0, ANNOUNCE_PUSH_MAX - 1).join(\"\") + \"…\" : text\n}\n\n/** Subscribes to the bus; returns the unsubscribe function. */\nexport function attachAnnouncePush(deps: AnnouncePushDeps): () => void {\n const now = deps.now ?? Date.now\n const startedAt = deps.startedAt ?? now()\n const maxAgeMs = deps.maxAgeMs ?? 10 * 60_000\n const log = deps.log ?? (() => {})\n const seen = new Set<string>()\n\n return deps.bus.subscribe((e) => {\n if (e.kind !== \"announce\") return\n const key = `${e.node}:${e.id}`\n if (seen.has(key)) return\n seen.add(key)\n if (seen.size > SEEN_MAX) seen.delete(seen.values().next().value as string)\n\n const at = Date.parse(e.at)\n if (!Number.isFinite(at) || at < startedAt || at < now() - maxAgeMs) return\n\n const devices = [...new Set(deps.store.list().map((s) => s.deviceId))]\n .filter((id) => deps.prefs.on(id, \"announce\"))\n if (devices.length === 0) return\n const text = `Announcement\\n${announceBody(e)}`\n for (const chatId of devices) {\n deps.send({ channel: \"push\", chatId, text }).catch((err: any) => {\n log(`push: announcement not sent to ${chatId}: ${err?.message ?? err}`)\n })\n }\n })\n}\n"],"mappings":"4BAwBO,IAAMA,EAAoB,IAgB1B,SAASC,EAAaC,EAAuD,CAClF,IAAMC,EAAOD,EAAE,QAAU,GAAGA,EAAE,YAAYA,EAAE,UAAYA,EAAE,QACpDE,EAAQ,CAAC,GAAGD,CAAI,EACtB,OAAOC,EAAM,OAAS,IAAoBA,EAAM,MAAM,EAAG,IAAoB,CAAC,EAAE,KAAK,EAAE,EAAI,SAAMD,CACnG,CAGO,SAASE,EAAmBC,EAAoC,CACrE,IAAMC,EAAMD,EAAK,KAAO,KAAK,IACvBE,EAAYF,EAAK,WAAaC,EAAI,EAClCE,EAAWH,EAAK,UAAY,GAAK,IACjCI,EAAMJ,EAAK,MAAQ,IAAM,CAAC,GAC1BK,EAAO,IAAI,IAEjB,OAAOL,EAAK,IAAI,UAAWJ,GAAM,CAC/B,GAAIA,EAAE,OAAS,WAAY,OAC3B,IAAMU,EAAM,GAAGV,EAAE,QAAQA,EAAE,KAC3B,GAAIS,EAAK,IAAIC,CAAG,EAAG,OACnBD,EAAK,IAAIC,CAAG,EACRD,EAAK,KAAO,KAAUA,EAAK,OAAOA,EAAK,OAAO,EAAE,KAAK,EAAE,KAAe,EAE1E,IAAME,EAAK,KAAK,MAAMX,EAAE,EAAE,EAC1B,GAAI,CAAC,OAAO,SAASW,CAAE,GAAKA,EAAKL,GAAaK,EAAKN,EAAI,EAAIE,EAAU,OAErE,IAAMK,EAAU,CAAC,GAAG,IAAI,IAAIR,EAAK,MAAM,KAAK,EAAE,IAAKS,GAAMA,EAAE,QAAQ,CAAC,CAAC,EAClE,OAAQC,GAAOV,EAAK,MAAM,GAAGU,EAAI,UAAU,CAAC,EAC/C,GAAIF,EAAQ,SAAW,EAAG,OAC1B,IAAMX,EAAO;AAAA,EAAiBF,EAAaC,CAAC,IAC5C,QAAWe,KAAUH,EACnBR,EAAK,KAAK,CAAE,QAAS,OAAQ,OAAAW,EAAQ,KAAAd,CAAK,CAAC,EAAE,MAAOe,GAAa,CAC/DR,EAAI,kCAAkCO,MAAWC,GAAK,SAAWA,GAAK,CACxE,CAAC,CAEL,CAAC,CACH","names":["ANNOUNCE_PUSH_MAX","announceBody","e","text","chars","attachAnnouncePush","deps","now","startedAt","maxAgeMs","log","seen","key","at","devices","s","id","chatId","err"]}
@@ -0,0 +1,2 @@
1
+ import{a,b}from"./chunk-JWDJMFU6.js";import"./chunk-QIJLFPWE.js";export{a as PUSH_PREFS,b as PushPrefs};
2
+ //# sourceMappingURL=push-prefs-YOJNTOJF.js.map
@@ -0,0 +1,2 @@
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 +1,2 @@
1
- import{I as a,J as b,K as c,L as d,M as e,N as f,O as g,P as h,Q as i,R as j,S as k,T as l}from"./chunk-OTTAKMGC.js";import"./chunk-ECBKTFTL.js";import"./chunk-WP6KLXTP.js";import"./chunk-N6EWZGIX.js";import"./chunk-DP7RTNDM.js";import"./chunk-BHE5TJSN.js";import"./chunk-EA7H3EUX.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-LQ5J6COO.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-AZBOYKQA.js";import"./chunk-WGWNVLVW.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-P4GOKVK2.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import"./chunk-PTB2TPOC.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import"./chunk-SZJMS7K4.js";import"./chunk-7I7IEX4S.js";import"./chunk-DSYKYZMT.js";import"./chunk-OVF37EXJ.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";export{k as AgentRegistry,f as TRACE_STEP_SUMMARY_BYTES,c as buildEntryMeta,d as buildEventDigest,e as buildWikiContext,g as clipForTrace,j as emitTraceStepsFromStreamEvent,i as firstMissingRequiredTool,b as getGlobalRegistry,l as richReplyPrompt,a as setGlobalRegistry,h as tallyToolUses};
2
- //# sourceMappingURL=registry-P7IAAFCX.js.map
1
+ import{I as a,J as b,K as c,L as d,M as e,N as f,O as g,P as h,Q as i,R as j,S as k,T as l}from"./chunk-AWKZ3BF2.js";import"./chunk-ZIEUP56T.js";import"./chunk-N6EWZGIX.js";import"./chunk-WP6KLXTP.js";import"./chunk-DP7RTNDM.js";import"./chunk-BHE5TJSN.js";import"./chunk-EA7H3EUX.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-LQ5J6COO.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-AZBOYKQA.js";import"./chunk-WGWNVLVW.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-P4GOKVK2.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import"./chunk-PTB2TPOC.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import"./chunk-SZJMS7K4.js";import"./chunk-7I7IEX4S.js";import"./chunk-DSYKYZMT.js";import"./chunk-OVF37EXJ.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";export{k as AgentRegistry,f as TRACE_STEP_SUMMARY_BYTES,c as buildEntryMeta,d as buildEventDigest,e as buildWikiContext,g as clipForTrace,j as emitTraceStepsFromStreamEvent,i as firstMissingRequiredTool,b as getGlobalRegistry,l as richReplyPrompt,a as setGlobalRegistry,h as tallyToolUses};
2
+ //# sourceMappingURL=registry-TERSIHOC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentix-cli",
3
- "version": "0.65.0",
3
+ "version": "0.66.0",
4
4
  "description": "AI operations layer for small and medium businesses. Routes Telegram, WhatsApp, GitLab, GitHub, crons, webhooks, and mesh tasks to AI agents. Web wizard for operators, CLI for engineers. Self-hosted.",
5
5
  "license": "MIT",
6
6
  "author": {