agentix-cli 0.53.0 → 0.55.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 (148) hide show
  1. package/apps/mac-voice/Sources/AgentXVoice/AgentClient.swift +26 -0
  2. package/apps/mac-voice/Sources/AgentXVoice/StatusMenu.swift +55 -3
  3. package/apps/mac-voice/Sources/AgentXVoice/main.swift +136 -13
  4. package/dist/{App-R62ZQVSF.js → App-4EM7IPB3.js} +2 -2
  5. package/dist/{ChatApp-AS567EFE.js → ChatApp-FYTEEGSU.js} +2 -2
  6. package/dist/{agent-H4NB4BUA.js → agent-RZ46ZB4W.js} +2 -2
  7. package/dist/{board-dashboard-E3MUVNVQ.js → board-dashboard-NRRYCDZW.js} +1097 -215
  8. package/dist/board-dashboard-NRRYCDZW.js.map +1 -0
  9. package/dist/chunk-2D3RYIDU.js +3 -0
  10. package/dist/chunk-2D3RYIDU.js.map +1 -0
  11. package/dist/{chunk-KB7YIM3W.js → chunk-4HEVSWO3.js} +2 -2
  12. package/dist/{chunk-7DPKPBRJ.js → chunk-6AK6WKE5.js} +2 -2
  13. package/dist/{chunk-TH5KNJLA.js → chunk-723K4SAW.js} +2 -2
  14. package/dist/{chunk-OMTRHHZJ.js → chunk-76AHNHWC.js} +44 -45
  15. package/dist/chunk-76AHNHWC.js.map +1 -0
  16. package/dist/{chunk-KJWBQZT7.js → chunk-C3VRBEJ7.js} +2 -2
  17. package/dist/{chunk-C5JXPMTW.js → chunk-CELYD5QW.js} +2 -2
  18. package/dist/{chunk-FSZXY53Z.js → chunk-D3LSPFHK.js} +2 -2
  19. package/dist/chunk-EJ5ISSWW.js +151 -0
  20. package/dist/chunk-EJ5ISSWW.js.map +1 -0
  21. package/dist/{chunk-FS4WBYY3.js → chunk-EZN2YXRY.js} +2 -2
  22. package/dist/{chunk-QU6ZUKAD.js → chunk-GSOL2LW6.js} +2 -2
  23. package/dist/{chunk-7OWXFLAM.js → chunk-JC5Q5MPI.js} +171 -164
  24. package/dist/chunk-JC5Q5MPI.js.map +1 -0
  25. package/dist/{chunk-SABOPOYX.js → chunk-K4RDE6YU.js} +211 -197
  26. package/dist/chunk-K4RDE6YU.js.map +1 -0
  27. package/dist/{ntfy-ZY2NPGBA.js → chunk-KZKDVIOE.js} +3 -3
  28. package/dist/chunk-KZKDVIOE.js.map +1 -0
  29. package/dist/{chunk-VD4TMPJI.js → chunk-LKJSPO3S.js} +2 -2
  30. package/dist/{chunk-NF52Q3TV.js → chunk-M4AG2YNX.js} +2 -2
  31. package/dist/{chunk-WKTFP3SK.js → chunk-NO2HOK4B.js} +2 -2
  32. package/dist/{chunk-KFG6WWFS.js → chunk-O3XG2NVR.js} +18 -18
  33. package/dist/{chunk-KFG6WWFS.js.map → chunk-O3XG2NVR.js.map} +1 -1
  34. package/dist/chunk-QD6IICK7.js +2 -0
  35. package/dist/chunk-QD6IICK7.js.map +1 -0
  36. package/dist/{chunk-PGJL5V6Y.js → chunk-SA23V7WX.js} +2 -2
  37. package/dist/chunk-U4H35SJS.js +15 -0
  38. package/dist/chunk-U4H35SJS.js.map +1 -0
  39. package/dist/chunk-UIVHSYCN.js +29 -0
  40. package/dist/chunk-UIVHSYCN.js.map +1 -0
  41. package/dist/{chunk-6OOK7Y4S.js → chunk-W4YMMWJL.js} +2 -2
  42. package/dist/chunk-WOMQ2VGA.js +5 -0
  43. package/dist/{chunk-OV35MJKS.js.map → chunk-WOMQ2VGA.js.map} +1 -1
  44. package/dist/chunk-WWMFNLKD.js +10 -0
  45. package/dist/chunk-WWMFNLKD.js.map +1 -0
  46. package/dist/chunk-X5C5W3E4.js +3 -0
  47. package/dist/chunk-X5C5W3E4.js.map +1 -0
  48. package/dist/{chunk-CCMM5TP4.js → chunk-XEOAKD5C.js} +2 -2
  49. package/dist/cli.js +1 -1
  50. package/dist/cli.js.map +1 -1
  51. package/dist/client-IA7ZPE56.js +2 -0
  52. package/dist/{compaction-NWPBPWY2.js → compaction-H5U32UU6.js} +2 -2
  53. package/dist/config-HPN2F7LH.js +2 -0
  54. package/dist/config-mutator-7GPTMTVB.js +2 -0
  55. package/dist/doctor-IBWQVQV4.js +2 -0
  56. package/dist/index.d.ts +273 -19
  57. package/dist/index.js +1 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/memory-extract-F76BE6KA.js +2 -0
  60. package/dist/ntfy-52EXHVMD.js +2 -0
  61. package/dist/program-D5TAPSIH.js +2 -0
  62. package/dist/{promote-DJFMTLRC.js → promote-T4UJROEH.js} +2 -2
  63. package/dist/push-HEDA6P3B.js +2 -0
  64. package/dist/push-HEDA6P3B.js.map +1 -0
  65. package/dist/push-keys-2DTD7YNQ.js +2 -0
  66. package/dist/push-store-LXTYULUF.js +2 -0
  67. package/dist/query-VUJC4Y5O.js +2 -0
  68. package/dist/registry-DX2RI7I7.js +2 -0
  69. package/dist/{request-planner-2H7HCUCZ.js → request-planner-B7DE7VJR.js} +2 -2
  70. package/dist/{review-candidates-U7R64OCS.js → review-candidates-4YJHIBAF.js} +2 -2
  71. package/dist/routing-MZG3UODH.js +2 -0
  72. package/dist/schedule-tool-A4OFQ4YZ.js +2 -0
  73. package/dist/scheduler-RHJW2V4M.js +2 -0
  74. package/dist/scheduler-RHJW2V4M.js.map +1 -0
  75. package/dist/seat-2PEI7JRX.js +2 -0
  76. package/dist/seat-2PEI7JRX.js.map +1 -0
  77. package/dist/{select-XGK27RPP.js → select-4KIUR27O.js} +2 -2
  78. package/dist/{set-enabled-7YGN2FAZ.js → set-enabled-SE7HQKPF.js} +2 -2
  79. package/dist/subscriptions-RYVPHVIV.js +2 -0
  80. package/dist/subscriptions-RYVPHVIV.js.map +1 -0
  81. package/dist/{tool-HKDIZ6I4.js → tool-5VMD7IE4.js} +2 -2
  82. package/dist/wiki-2QFLAH4U.js +2 -0
  83. package/dist/wiki-2QFLAH4U.js.map +1 -0
  84. package/package.json +3 -1
  85. package/dist/board-dashboard-E3MUVNVQ.js.map +0 -1
  86. package/dist/chunk-47EEUZBK.js +0 -15
  87. package/dist/chunk-47EEUZBK.js.map +0 -1
  88. package/dist/chunk-7OWXFLAM.js.map +0 -1
  89. package/dist/chunk-D4HAR3L3.js +0 -28
  90. package/dist/chunk-D4HAR3L3.js.map +0 -1
  91. package/dist/chunk-HRBKSZ34.js +0 -2
  92. package/dist/chunk-HRBKSZ34.js.map +0 -1
  93. package/dist/chunk-IDYP7G7Z.js +0 -150
  94. package/dist/chunk-IDYP7G7Z.js.map +0 -1
  95. package/dist/chunk-OMTRHHZJ.js.map +0 -1
  96. package/dist/chunk-OV35MJKS.js +0 -5
  97. package/dist/chunk-SABOPOYX.js.map +0 -1
  98. package/dist/client-XTQDYMOX.js +0 -2
  99. package/dist/config-3SW4V44Z.js +0 -2
  100. package/dist/config-mutator-H32FXUYJ.js +0 -2
  101. package/dist/doctor-J6RCHFVE.js +0 -2
  102. package/dist/memory-extract-MGGXIZTE.js +0 -2
  103. package/dist/ntfy-ZY2NPGBA.js.map +0 -1
  104. package/dist/program-SQTOPCQW.js +0 -2
  105. package/dist/query-UAZUMU4N.js +0 -2
  106. package/dist/registry-4OUBA2TY.js +0 -2
  107. package/dist/routing-LVQH6WOJ.js +0 -2
  108. package/dist/schedule-tool-2BONJVCJ.js +0 -2
  109. package/dist/scheduler-7CEXDECA.js +0 -2
  110. package/dist/seat-2KGFNCIW.js +0 -2
  111. package/dist/wiki-6YT7B5HU.js +0 -2
  112. /package/dist/{App-R62ZQVSF.js.map → App-4EM7IPB3.js.map} +0 -0
  113. /package/dist/{ChatApp-AS567EFE.js.map → ChatApp-FYTEEGSU.js.map} +0 -0
  114. /package/dist/{agent-H4NB4BUA.js.map → agent-RZ46ZB4W.js.map} +0 -0
  115. /package/dist/{chunk-KB7YIM3W.js.map → chunk-4HEVSWO3.js.map} +0 -0
  116. /package/dist/{chunk-7DPKPBRJ.js.map → chunk-6AK6WKE5.js.map} +0 -0
  117. /package/dist/{chunk-TH5KNJLA.js.map → chunk-723K4SAW.js.map} +0 -0
  118. /package/dist/{chunk-KJWBQZT7.js.map → chunk-C3VRBEJ7.js.map} +0 -0
  119. /package/dist/{chunk-C5JXPMTW.js.map → chunk-CELYD5QW.js.map} +0 -0
  120. /package/dist/{chunk-FSZXY53Z.js.map → chunk-D3LSPFHK.js.map} +0 -0
  121. /package/dist/{chunk-FS4WBYY3.js.map → chunk-EZN2YXRY.js.map} +0 -0
  122. /package/dist/{chunk-QU6ZUKAD.js.map → chunk-GSOL2LW6.js.map} +0 -0
  123. /package/dist/{chunk-VD4TMPJI.js.map → chunk-LKJSPO3S.js.map} +0 -0
  124. /package/dist/{chunk-NF52Q3TV.js.map → chunk-M4AG2YNX.js.map} +0 -0
  125. /package/dist/{chunk-WKTFP3SK.js.map → chunk-NO2HOK4B.js.map} +0 -0
  126. /package/dist/{chunk-PGJL5V6Y.js.map → chunk-SA23V7WX.js.map} +0 -0
  127. /package/dist/{chunk-6OOK7Y4S.js.map → chunk-W4YMMWJL.js.map} +0 -0
  128. /package/dist/{chunk-CCMM5TP4.js.map → chunk-XEOAKD5C.js.map} +0 -0
  129. /package/dist/{client-XTQDYMOX.js.map → client-IA7ZPE56.js.map} +0 -0
  130. /package/dist/{compaction-NWPBPWY2.js.map → compaction-H5U32UU6.js.map} +0 -0
  131. /package/dist/{config-3SW4V44Z.js.map → config-HPN2F7LH.js.map} +0 -0
  132. /package/dist/{config-mutator-H32FXUYJ.js.map → config-mutator-7GPTMTVB.js.map} +0 -0
  133. /package/dist/{doctor-J6RCHFVE.js.map → doctor-IBWQVQV4.js.map} +0 -0
  134. /package/dist/{memory-extract-MGGXIZTE.js.map → memory-extract-F76BE6KA.js.map} +0 -0
  135. /package/dist/{program-SQTOPCQW.js.map → ntfy-52EXHVMD.js.map} +0 -0
  136. /package/dist/{promote-DJFMTLRC.js.map → program-D5TAPSIH.js.map} +0 -0
  137. /package/dist/{query-UAZUMU4N.js.map → promote-T4UJROEH.js.map} +0 -0
  138. /package/dist/{registry-4OUBA2TY.js.map → push-keys-2DTD7YNQ.js.map} +0 -0
  139. /package/dist/{routing-LVQH6WOJ.js.map → push-store-LXTYULUF.js.map} +0 -0
  140. /package/dist/{schedule-tool-2BONJVCJ.js.map → query-VUJC4Y5O.js.map} +0 -0
  141. /package/dist/{scheduler-7CEXDECA.js.map → registry-DX2RI7I7.js.map} +0 -0
  142. /package/dist/{request-planner-2H7HCUCZ.js.map → request-planner-B7DE7VJR.js.map} +0 -0
  143. /package/dist/{review-candidates-U7R64OCS.js.map → review-candidates-4YJHIBAF.js.map} +0 -0
  144. /package/dist/{seat-2KGFNCIW.js.map → routing-MZG3UODH.js.map} +0 -0
  145. /package/dist/{wiki-6YT7B5HU.js.map → schedule-tool-A4OFQ4YZ.js.map} +0 -0
  146. /package/dist/{select-XGK27RPP.js.map → select-4KIUR27O.js.map} +0 -0
  147. /package/dist/{set-enabled-7YGN2FAZ.js.map → set-enabled-SE7HQKPF.js.map} +0 -0
  148. /package/dist/{tool-HKDIZ6I4.js.map → tool-5VMD7IE4.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -1635,6 +1635,35 @@ declare const agentConfigSchema: z.ZodObject<{
1635
1635
  * agents or by the operator. It never approves anything: approval of a
1636
1636
  * create/delete request stays operator-only (`agentx schedule approve`). */
1637
1637
  admin: z.ZodOptional<z.ZodBoolean>;
1638
+ /** Events on the bus this agent wants to hear about (issue #165). */
1639
+ subscriptions: z.ZodDefault<z.ZodArray<z.ZodObject<{
1640
+ /** Envelope `kind` ("agent", "run") or `type` ("task:completed"); "*" matches all. */
1641
+ kinds: z.ZodArray<z.ZodString, "many">;
1642
+ /** Only events published for these agent ids. */
1643
+ agents: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1644
+ /** Only events published by these nodes (`node.name`). */
1645
+ nodes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1646
+ /** Only events whose summary contains this text (case-insensitive). */
1647
+ match: z.ZodOptional<z.ZodString>;
1648
+ delivery: z.ZodDefault<z.ZodEnum<["pull", "digest", "wake"]>>;
1649
+ /** wake only: no wake when the agent was already woken this many times
1650
+ * in the past hour. */
1651
+ maxPerHour: z.ZodDefault<z.ZodNumber>;
1652
+ }, "strip", z.ZodTypeAny, {
1653
+ kinds: string[];
1654
+ delivery: "pull" | "digest" | "wake";
1655
+ maxPerHour: number;
1656
+ match?: string | undefined;
1657
+ agents?: string[] | undefined;
1658
+ nodes?: string[] | undefined;
1659
+ }, {
1660
+ kinds: string[];
1661
+ match?: string | undefined;
1662
+ agents?: string[] | undefined;
1663
+ nodes?: string[] | undefined;
1664
+ delivery?: "pull" | "digest" | "wake" | undefined;
1665
+ maxPerHour?: number | undefined;
1666
+ }>, "many">>;
1638
1667
  /** Per-agent third-party integrations registry. Declares which services
1639
1668
  * this agent has credentials for (telegram-bot, hubspot, gitlab-user,
1640
1669
  * gmail, etc.). Secrets stay in env vars / keyring; this block holds
@@ -1802,6 +1831,14 @@ declare const agentConfigSchema: z.ZodObject<{
1802
1831
  intervalMinutes: number;
1803
1832
  };
1804
1833
  access: "private" | "public";
1834
+ subscriptions: {
1835
+ kinds: string[];
1836
+ delivery: "pull" | "digest" | "wake";
1837
+ maxPerHour: number;
1838
+ match?: string | undefined;
1839
+ agents?: string[] | undefined;
1840
+ nodes?: string[] | undefined;
1841
+ }[];
1805
1842
  integrations: {
1806
1843
  enabled: boolean;
1807
1844
  credentials: {
@@ -1890,6 +1927,14 @@ declare const agentConfigSchema: z.ZodObject<{
1890
1927
  } | undefined;
1891
1928
  access?: "private" | "public" | undefined;
1892
1929
  admin?: boolean | undefined;
1930
+ subscriptions?: {
1931
+ kinds: string[];
1932
+ match?: string | undefined;
1933
+ agents?: string[] | undefined;
1934
+ nodes?: string[] | undefined;
1935
+ delivery?: "pull" | "digest" | "wake" | undefined;
1936
+ maxPerHour?: number | undefined;
1937
+ }[] | undefined;
1893
1938
  integrations?: {
1894
1939
  label: string;
1895
1940
  kind: string;
@@ -2357,6 +2402,35 @@ declare const daemonConfigSchema: z.ZodObject<{
2357
2402
  * agents or by the operator. It never approves anything: approval of a
2358
2403
  * create/delete request stays operator-only (`agentx schedule approve`). */
2359
2404
  admin: z.ZodOptional<z.ZodBoolean>;
2405
+ /** Events on the bus this agent wants to hear about (issue #165). */
2406
+ subscriptions: z.ZodDefault<z.ZodArray<z.ZodObject<{
2407
+ /** Envelope `kind` ("agent", "run") or `type` ("task:completed"); "*" matches all. */
2408
+ kinds: z.ZodArray<z.ZodString, "many">;
2409
+ /** Only events published for these agent ids. */
2410
+ agents: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2411
+ /** Only events published by these nodes (`node.name`). */
2412
+ nodes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2413
+ /** Only events whose summary contains this text (case-insensitive). */
2414
+ match: z.ZodOptional<z.ZodString>;
2415
+ delivery: z.ZodDefault<z.ZodEnum<["pull", "digest", "wake"]>>;
2416
+ /** wake only: no wake when the agent was already woken this many times
2417
+ * in the past hour. */
2418
+ maxPerHour: z.ZodDefault<z.ZodNumber>;
2419
+ }, "strip", z.ZodTypeAny, {
2420
+ kinds: string[];
2421
+ delivery: "pull" | "digest" | "wake";
2422
+ maxPerHour: number;
2423
+ match?: string | undefined;
2424
+ agents?: string[] | undefined;
2425
+ nodes?: string[] | undefined;
2426
+ }, {
2427
+ kinds: string[];
2428
+ match?: string | undefined;
2429
+ agents?: string[] | undefined;
2430
+ nodes?: string[] | undefined;
2431
+ delivery?: "pull" | "digest" | "wake" | undefined;
2432
+ maxPerHour?: number | undefined;
2433
+ }>, "many">>;
2360
2434
  /** Per-agent third-party integrations registry. Declares which services
2361
2435
  * this agent has credentials for (telegram-bot, hubspot, gitlab-user,
2362
2436
  * gmail, etc.). Secrets stay in env vars / keyring; this block holds
@@ -2524,6 +2598,14 @@ declare const daemonConfigSchema: z.ZodObject<{
2524
2598
  intervalMinutes: number;
2525
2599
  };
2526
2600
  access: "private" | "public";
2601
+ subscriptions: {
2602
+ kinds: string[];
2603
+ delivery: "pull" | "digest" | "wake";
2604
+ maxPerHour: number;
2605
+ match?: string | undefined;
2606
+ agents?: string[] | undefined;
2607
+ nodes?: string[] | undefined;
2608
+ }[];
2527
2609
  integrations: {
2528
2610
  enabled: boolean;
2529
2611
  credentials: {
@@ -2612,6 +2694,14 @@ declare const daemonConfigSchema: z.ZodObject<{
2612
2694
  } | undefined;
2613
2695
  access?: "private" | "public" | undefined;
2614
2696
  admin?: boolean | undefined;
2697
+ subscriptions?: {
2698
+ kinds: string[];
2699
+ match?: string | undefined;
2700
+ agents?: string[] | undefined;
2701
+ nodes?: string[] | undefined;
2702
+ delivery?: "pull" | "digest" | "wake" | undefined;
2703
+ maxPerHour?: number | undefined;
2704
+ }[] | undefined;
2615
2705
  integrations?: {
2616
2706
  label: string;
2617
2707
  kind: string;
@@ -3073,6 +3163,47 @@ declare const daemonConfigSchema: z.ZodObject<{
3073
3163
  defaultPriority?: number | undefined;
3074
3164
  defaultTitle?: string | undefined;
3075
3165
  }>>;
3166
+ /** Web Push to the phone app (/app) — outbound only. The node that hosts
3167
+ * the app holds the subscriptions and sends; any other node sets
3168
+ * `relayTo` and forwards over the mesh. `chatId` "default" means every
3169
+ * subscribed phone, or a device id (tok_…) for one. */
3170
+ push: z.ZodDefault<z.ZodObject<{
3171
+ enabled: z.ZodDefault<z.ZodBoolean>;
3172
+ /** VAPID key pair written by `agentx app push-keys`. Relative paths
3173
+ * resolve from the folder AgentX runs in (the one holding agentx.json). */
3174
+ keysFile: z.ZodDefault<z.ZodString>;
3175
+ /** Contact for the push services: `mailto:you@example.com` or an
3176
+ * https:// URL. Required on the hosting node. */
3177
+ subject: z.ZodOptional<z.ZodString>;
3178
+ /** Mesh peer (id or name) that hosts the phone app. Set it on every
3179
+ * other node; leave it unset on the host. */
3180
+ relayTo: z.ZodOptional<z.ZodString>;
3181
+ /** How long a push service keeps trying an offline phone. */
3182
+ ttlSeconds: z.ZodDefault<z.ZodNumber>;
3183
+ /** Recent pushes kept for the app's Alerts tab. */
3184
+ keepRecent: z.ZodDefault<z.ZodNumber>;
3185
+ /** Push-service hosts a phone may subscribe with (a host or any
3186
+ * subdomain of it). The daemon POSTs to the stored address, so anything
3187
+ * else is refused. Defaults cover Chrome/Android, Firefox, Safari/iOS
3188
+ * and Edge. */
3189
+ allowedHosts: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
3190
+ }, "strip", z.ZodTypeAny, {
3191
+ enabled: boolean;
3192
+ keysFile: string;
3193
+ ttlSeconds: number;
3194
+ keepRecent: number;
3195
+ allowedHosts: string[];
3196
+ subject?: string | undefined;
3197
+ relayTo?: string | undefined;
3198
+ }, {
3199
+ enabled?: boolean | undefined;
3200
+ keysFile?: string | undefined;
3201
+ subject?: string | undefined;
3202
+ relayTo?: string | undefined;
3203
+ ttlSeconds?: number | undefined;
3204
+ keepRecent?: number | undefined;
3205
+ allowedHosts?: string[] | undefined;
3206
+ }>>;
3076
3207
  webrtc: z.ZodDefault<z.ZodObject<{
3077
3208
  enabled: z.ZodDefault<z.ZodBoolean>;
3078
3209
  /** ICE STUN servers for NAT discovery. Default is Google's public STUN. */
@@ -3231,6 +3362,15 @@ declare const daemonConfigSchema: z.ZodObject<{
3231
3362
  } | undefined;
3232
3363
  }>>;
3233
3364
  }, "strip", z.ZodTypeAny, {
3365
+ push: {
3366
+ enabled: boolean;
3367
+ keysFile: string;
3368
+ ttlSeconds: number;
3369
+ keepRecent: number;
3370
+ allowedHosts: string[];
3371
+ subject?: string | undefined;
3372
+ relayTo?: string | undefined;
3373
+ };
3234
3374
  gitlab: {
3235
3375
  enabled: boolean;
3236
3376
  host: string;
@@ -3353,6 +3493,15 @@ declare const daemonConfigSchema: z.ZodObject<{
3353
3493
  callUrlBase?: string | undefined;
3354
3494
  };
3355
3495
  }, {
3496
+ push?: {
3497
+ enabled?: boolean | undefined;
3498
+ keysFile?: string | undefined;
3499
+ subject?: string | undefined;
3500
+ relayTo?: string | undefined;
3501
+ ttlSeconds?: number | undefined;
3502
+ keepRecent?: number | undefined;
3503
+ allowedHosts?: string[] | undefined;
3504
+ } | undefined;
3356
3505
  gitlab?: {
3357
3506
  enabled?: boolean | undefined;
3358
3507
  token?: string | undefined;
@@ -3775,6 +3924,10 @@ declare const daemonConfigSchema: z.ZodObject<{
3775
3924
  chatId: string;
3776
3925
  accountId?: string | undefined;
3777
3926
  }>>;
3927
+ /** Channel `agentx notify` and Focus digests use when none is given.
3928
+ * Unset: `push` (the phone app) when channels.push is enabled, else
3929
+ * `ntfy`, so upgrading never points notify at a channel that is off. */
3930
+ channel: z.ZodOptional<z.ZodString>;
3778
3931
  /** Notify on these events */
3779
3932
  on: z.ZodDefault<z.ZodObject<{
3780
3933
  taskComplete: z.ZodDefault<z.ZodBoolean>;
@@ -3827,6 +3980,7 @@ declare const daemonConfigSchema: z.ZodObject<{
3827
3980
  taskQueued: boolean;
3828
3981
  };
3829
3982
  longTaskThreshold: number;
3983
+ channel?: string | undefined;
3830
3984
  destination?: {
3831
3985
  channel: string;
3832
3986
  chatId: string;
@@ -3840,6 +3994,7 @@ declare const daemonConfigSchema: z.ZodObject<{
3840
3994
  volume?: number | undefined;
3841
3995
  icon?: string | undefined;
3842
3996
  } | undefined;
3997
+ channel?: string | undefined;
3843
3998
  on?: {
3844
3999
  taskComplete?: boolean | undefined;
3845
4000
  taskError?: boolean | undefined;
@@ -3902,10 +4057,6 @@ declare const daemonConfigSchema: z.ZodObject<{
3902
4057
  } | undefined;
3903
4058
  }>>;
3904
4059
  }, "strip", z.ZodTypeAny, {
3905
- defaultExpiryDays: number;
3906
- maxExpiryDays: number;
3907
- laterHours: number;
3908
- notifyAgent: boolean;
3909
4060
  digest: {
3910
4061
  enabled: boolean;
3911
4062
  time: string;
@@ -3916,11 +4067,11 @@ declare const daemonConfigSchema: z.ZodObject<{
3916
4067
  accountId?: string | undefined;
3917
4068
  } | undefined;
3918
4069
  };
4070
+ defaultExpiryDays: number;
4071
+ maxExpiryDays: number;
4072
+ laterHours: number;
4073
+ notifyAgent: boolean;
3919
4074
  }, {
3920
- defaultExpiryDays?: number | undefined;
3921
- maxExpiryDays?: number | undefined;
3922
- laterHours?: number | undefined;
3923
- notifyAgent?: boolean | undefined;
3924
4075
  digest?: {
3925
4076
  enabled?: boolean | undefined;
3926
4077
  timezone?: string | undefined;
@@ -3931,6 +4082,10 @@ declare const daemonConfigSchema: z.ZodObject<{
3931
4082
  accountId?: string | undefined;
3932
4083
  } | undefined;
3933
4084
  } | undefined;
4085
+ defaultExpiryDays?: number | undefined;
4086
+ maxExpiryDays?: number | undefined;
4087
+ laterHours?: number | undefined;
4088
+ notifyAgent?: boolean | undefined;
3934
4089
  }>>;
3935
4090
  /** What happens to runs a restart cuts off (agents/resume). Chat messages
3936
4091
  * are resumed in their chat; scheduled jobs never are (the next run
@@ -4144,6 +4299,19 @@ declare const daemonConfigSchema: z.ZodObject<{
4144
4299
  timeout?: number | undefined;
4145
4300
  interval?: number | undefined;
4146
4301
  }>>;
4302
+ /** Peer event feed (#166): follow each healthy peer's /events and merge
4303
+ * its own events into this node's bus. `skipTypes` are left out on the
4304
+ * peer's side; per-step agent activity is too chatty to cross the mesh. */
4305
+ feed: z.ZodDefault<z.ZodObject<{
4306
+ enabled: z.ZodDefault<z.ZodBoolean>;
4307
+ skipTypes: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
4308
+ }, "strip", z.ZodTypeAny, {
4309
+ enabled: boolean;
4310
+ skipTypes: string[];
4311
+ }, {
4312
+ enabled?: boolean | undefined;
4313
+ skipTypes?: string[] | undefined;
4314
+ }>>;
4147
4315
  }, "strip", z.ZodTypeAny, {
4148
4316
  enabled: boolean;
4149
4317
  peers: {
@@ -4161,6 +4329,10 @@ declare const daemonConfigSchema: z.ZodObject<{
4161
4329
  timeout: number;
4162
4330
  interval: number;
4163
4331
  };
4332
+ feed: {
4333
+ enabled: boolean;
4334
+ skipTypes: string[];
4335
+ };
4164
4336
  }, {
4165
4337
  enabled?: boolean | undefined;
4166
4338
  peers?: {
@@ -4178,6 +4350,10 @@ declare const daemonConfigSchema: z.ZodObject<{
4178
4350
  timeout?: number | undefined;
4179
4351
  interval?: number | undefined;
4180
4352
  } | undefined;
4353
+ feed?: {
4354
+ enabled?: boolean | undefined;
4355
+ skipTypes?: string[] | undefined;
4356
+ } | undefined;
4181
4357
  }>>;
4182
4358
  /** Voices for agents on mesh peers, keyed by remote agent id. The Mac
4183
4359
  * speaks for them, so their nodes need no ElevenLabs key. Unset fields
@@ -5542,6 +5718,14 @@ declare const daemonConfigSchema: z.ZodObject<{
5542
5718
  intervalMinutes: number;
5543
5719
  };
5544
5720
  access: "private" | "public";
5721
+ subscriptions: {
5722
+ kinds: string[];
5723
+ delivery: "pull" | "digest" | "wake";
5724
+ maxPerHour: number;
5725
+ match?: string | undefined;
5726
+ agents?: string[] | undefined;
5727
+ nodes?: string[] | undefined;
5728
+ }[];
5545
5729
  integrations: {
5546
5730
  enabled: boolean;
5547
5731
  credentials: {
@@ -5618,6 +5802,10 @@ declare const daemonConfigSchema: z.ZodObject<{
5618
5802
  timeout: number;
5619
5803
  interval: number;
5620
5804
  };
5805
+ feed: {
5806
+ enabled: boolean;
5807
+ skipTypes: string[];
5808
+ };
5621
5809
  };
5622
5810
  voice: {
5623
5811
  provider: "system" | "elevenlabs";
@@ -5672,6 +5860,15 @@ declare const daemonConfigSchema: z.ZodObject<{
5672
5860
  baseUrl?: string | undefined;
5673
5861
  }>;
5674
5862
  channels: {
5863
+ push: {
5864
+ enabled: boolean;
5865
+ keysFile: string;
5866
+ ttlSeconds: number;
5867
+ keepRecent: number;
5868
+ allowedHosts: string[];
5869
+ subject?: string | undefined;
5870
+ relayTo?: string | undefined;
5871
+ };
5675
5872
  gitlab: {
5676
5873
  enabled: boolean;
5677
5874
  host: string;
@@ -5850,6 +6047,7 @@ declare const daemonConfigSchema: z.ZodObject<{
5850
6047
  taskQueued: boolean;
5851
6048
  };
5852
6049
  longTaskThreshold: number;
6050
+ channel?: string | undefined;
5853
6051
  destination?: {
5854
6052
  channel: string;
5855
6053
  chatId: string;
@@ -5857,10 +6055,6 @@ declare const daemonConfigSchema: z.ZodObject<{
5857
6055
  } | undefined;
5858
6056
  };
5859
6057
  approvals: {
5860
- defaultExpiryDays: number;
5861
- maxExpiryDays: number;
5862
- laterHours: number;
5863
- notifyAgent: boolean;
5864
6058
  digest: {
5865
6059
  enabled: boolean;
5866
6060
  time: string;
@@ -5871,6 +6065,10 @@ declare const daemonConfigSchema: z.ZodObject<{
5871
6065
  accountId?: string | undefined;
5872
6066
  } | undefined;
5873
6067
  };
6068
+ defaultExpiryDays: number;
6069
+ maxExpiryDays: number;
6070
+ laterHours: number;
6071
+ notifyAgent: boolean;
5874
6072
  };
5875
6073
  reminders: {
5876
6074
  enabled: boolean;
@@ -6172,6 +6370,14 @@ declare const daemonConfigSchema: z.ZodObject<{
6172
6370
  } | undefined;
6173
6371
  access?: "private" | "public" | undefined;
6174
6372
  admin?: boolean | undefined;
6373
+ subscriptions?: {
6374
+ kinds: string[];
6375
+ match?: string | undefined;
6376
+ agents?: string[] | undefined;
6377
+ nodes?: string[] | undefined;
6378
+ delivery?: "pull" | "digest" | "wake" | undefined;
6379
+ maxPerHour?: number | undefined;
6380
+ }[] | undefined;
6175
6381
  integrations?: {
6176
6382
  label: string;
6177
6383
  kind: string;
@@ -6232,6 +6438,10 @@ declare const daemonConfigSchema: z.ZodObject<{
6232
6438
  timeout?: number | undefined;
6233
6439
  interval?: number | undefined;
6234
6440
  } | undefined;
6441
+ feed?: {
6442
+ enabled?: boolean | undefined;
6443
+ skipTypes?: string[] | undefined;
6444
+ } | undefined;
6235
6445
  } | undefined;
6236
6446
  voice?: {
6237
6447
  system?: string | Record<string, string> | undefined;
@@ -6280,6 +6490,15 @@ declare const daemonConfigSchema: z.ZodObject<{
6280
6490
  baseUrl?: string | undefined;
6281
6491
  }> | undefined;
6282
6492
  channels?: {
6493
+ push?: {
6494
+ enabled?: boolean | undefined;
6495
+ keysFile?: string | undefined;
6496
+ subject?: string | undefined;
6497
+ relayTo?: string | undefined;
6498
+ ttlSeconds?: number | undefined;
6499
+ keepRecent?: number | undefined;
6500
+ allowedHosts?: string[] | undefined;
6501
+ } | undefined;
6283
6502
  gitlab?: {
6284
6503
  enabled?: boolean | undefined;
6285
6504
  token?: string | undefined;
@@ -6452,6 +6671,7 @@ declare const daemonConfigSchema: z.ZodObject<{
6452
6671
  volume?: number | undefined;
6453
6672
  icon?: string | undefined;
6454
6673
  } | undefined;
6674
+ channel?: string | undefined;
6455
6675
  on?: {
6456
6676
  taskComplete?: boolean | undefined;
6457
6677
  taskError?: boolean | undefined;
@@ -6465,10 +6685,6 @@ declare const daemonConfigSchema: z.ZodObject<{
6465
6685
  } | undefined;
6466
6686
  } | undefined;
6467
6687
  approvals?: {
6468
- defaultExpiryDays?: number | undefined;
6469
- maxExpiryDays?: number | undefined;
6470
- laterHours?: number | undefined;
6471
- notifyAgent?: boolean | undefined;
6472
6688
  digest?: {
6473
6689
  enabled?: boolean | undefined;
6474
6690
  timezone?: string | undefined;
@@ -6479,6 +6695,10 @@ declare const daemonConfigSchema: z.ZodObject<{
6479
6695
  accountId?: string | undefined;
6480
6696
  } | undefined;
6481
6697
  } | undefined;
6698
+ defaultExpiryDays?: number | undefined;
6699
+ maxExpiryDays?: number | undefined;
6700
+ laterHours?: number | undefined;
6701
+ notifyAgent?: boolean | undefined;
6482
6702
  } | undefined;
6483
6703
  reminders?: {
6484
6704
  enabled?: boolean | undefined;
@@ -6909,6 +7129,9 @@ declare class A2AMesh {
6909
7129
  senderAgentId?: string;
6910
7130
  freshSession?: boolean;
6911
7131
  context?: Record<string, unknown>;
7132
+ /** Aborts the peer call; the peer's /task treats it as a disconnect
7133
+ * and interrupts the run. */
7134
+ signal?: AbortSignal;
6912
7135
  }): AsyncGenerator<{
6913
7136
  event: string;
6914
7137
  data: any;
@@ -7148,6 +7371,10 @@ declare class TypedEventBus {
7148
7371
  private envelopeListeners;
7149
7372
  private ring;
7150
7373
  private node;
7374
+ /** Envelopes taken in from mesh peers, keyed `${node}:${id}`, so the
7375
+ * live stream and a catch-up read never deliver one event twice. Map
7376
+ * insertion order makes the oldest key the first to drop. */
7377
+ private seen;
7151
7378
  constructor();
7152
7379
  /** Set the publishing node name and ring size (daemon boot / reload). */
7153
7380
  configure(opts: {
@@ -7159,6 +7386,19 @@ declare class TypedEventBus {
7159
7386
  emit<E extends EventName>(event: E, payload: AgentXEvents[E]): boolean;
7160
7387
  /** The single publish API. Returns the envelope as delivered. */
7161
7388
  publish(input: PublishInput): EventEnvelope;
7389
+ /** Name this bus publishes under. An envelope whose `node` differs came
7390
+ * from a mesh peer (see ingest). */
7391
+ get nodeName(): string;
7392
+ /** True for envelopes this node published itself. */
7393
+ isLocal(e: EventEnvelope): boolean;
7394
+ /** Take in an envelope published on a mesh peer. It keeps its id, node
7395
+ * and root, lands in the ring and reaches `subscribe` listeners, but
7396
+ * never the typed `on` listeners: the peer records its own traces.
7397
+ * Returns false for an event already taken in, or one that claims to
7398
+ * come from this node (an echo). */
7399
+ ingest(input: EventEnvelope): boolean;
7400
+ /** Whether an event id is still in this node's ring buffer. */
7401
+ hasRecent(id: string): boolean;
7162
7402
  /** Receive every envelope. Returns an unsubscribe function. */
7163
7403
  subscribe(fn: EnvelopeListener): () => void;
7164
7404
  recent(q?: RecentQuery): EventEnvelope[];
@@ -7278,6 +7518,7 @@ declare class AgentXDaemon {
7278
7518
  private hooks;
7279
7519
  private landscape;
7280
7520
  private heartbeat;
7521
+ private stopEventWaker?;
7281
7522
  private business?;
7282
7523
  private httpServer?;
7283
7524
  private attachSweep?;
@@ -7320,6 +7561,8 @@ declare class AgentXDaemon {
7320
7561
  * dashboard) filter by kind / workflow / actor. Created eagerly so
7321
7562
  * early boot events don't fall through. */
7322
7563
  readonly events: EventBus;
7564
+ /** Follows each healthy peer's event feed into the local bus (#166). */
7565
+ private peerFeed?;
7323
7566
  private log;
7324
7567
  private sseClients;
7325
7568
  private configPath?;
@@ -7472,6 +7715,9 @@ declare class AgentXDaemon {
7472
7715
  /** Agent-memory HTTP surface — see memory-api.ts. */
7473
7716
  private handleMemoryApi;
7474
7717
  private handleWorkflowEvent;
7718
+ /** Forwards a push to the mesh peer hosting the phone app (its
7719
+ * /channel/send), for PushRelayAdapter. */
7720
+ private relayPush;
7475
7721
  /** Mesh-callable outbound send. A peer's workflow `action.send` invokes
7476
7722
  * this when the channel lives on this node (e.g. peer-server hosts
7477
7723
  * whatsapp; macbook's workflow forwards here). Just unwraps to the local
@@ -9702,6 +9948,13 @@ declare class AgentRegistry {
9702
9948
  * on WorkflowDispatcher. */
9703
9949
  private workflowAutoRunner?;
9704
9950
  private messageQueue;
9951
+ /**
9952
+ * Voice chats a waiting question has claimed between its wait ending and
9953
+ * the chat being marked running (the rate limiter awaits in between).
9954
+ * Without the claim, two questions waiting on one chat could both see it
9955
+ * free and run at once.
9956
+ */
9957
+ private voiceClaims;
9705
9958
  /** Intent Knowledge Graph classifier. Null when graph.enabled=false. */
9706
9959
  private classifier?;
9707
9960
  private graphStore?;
@@ -9923,6 +10176,9 @@ declare class AgentRegistry {
9923
10176
  channel: string;
9924
10177
  chatId: string;
9925
10178
  } | null;
10179
+ /** Stop every in-flight run of `agentId` in one chat. Used when a streaming
10180
+ * caller disconnects (the phone app's Stop). Returns how many it aborted. */
10181
+ cancelChatTasks(agentId: string, channel: string, chatId: string, reason?: string): number;
9926
10182
  /**
9927
10183
  * Queue a follow-up correction/update for an in-flight task. The message
9928
10184
  * lands in the per-session MessageQueue and is dispatched after the
@@ -9988,9 +10244,7 @@ declare class AgentRegistry {
9988
10244
  byAgent: Record<string, {
9989
10245
  tasks: number;
9990
10246
  input: number;
9991
- output: number; /** Mesh handle. When set, `execute` falls back to a peer that advertises
9992
- * the requested agent before returning "Unknown agent". Duck-typed so
9993
- * we don't create a circular import with src/a2a/mesh.ts. */
10247
+ output: number;
9994
10248
  cacheRead: number;
9995
10249
  cacheCreate: number;
9996
10250
  total: number;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{a as L}from"./chunk-Y57CULGE.js";import{a as St,b as kt,c as vt,d as xt,e as $t,f as Ct,g as Pt,ia as bt,ja as Tt,ka as Mt}from"./chunk-SABOPOYX.js";import"./chunk-D4HAR3L3.js";import"./chunk-TH5KNJLA.js";import"./chunk-LQRBGQIR.js";import"./chunk-ZVP6GB4G.js";import"./chunk-S7CVSKOX.js";import"./chunk-6OOK7Y4S.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-L53FTKEP.js";import{O as yt,l as lt,m as ct,n as dt,o as mt,p as pt}from"./chunk-IDYP7G7Z.js";import"./chunk-C5JXPMTW.js";import"./chunk-N6EWZGIX.js";import"./chunk-WP6KLXTP.js";import"./chunk-DP7RTNDM.js";import{A as D,B as z,C as V,a as ye,b as we,c as Se,d as Ae,e as Ie,f as Oe,g as Ne,h as He,i as je,j as Ue,k as _e,l as I,m as q,n as Be,o as qe,p as Ye,q as O,r as ze,s as Ve,t as Xe,u as x,v as Y,w as Qe,x as Ze,y as et,z as wt}from"./chunk-7DPKPBRJ.js";import{a as B,b as M,c as F}from"./chunk-SFQUP3BP.js";import"./chunk-PGJL5V6Y.js";import{s as ut}from"./chunk-KFG6WWFS.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-FS4WBYY3.js";import"./chunk-KB7YIM3W.js";import"./chunk-DWADWDMU.js";import"./chunk-WKTFP3SK.js";import"./chunk-HRBKSZ34.js";import"./chunk-VWTBHLMX.js";import"./chunk-VD4TMPJI.js";import{a as gt,b as ft,e as ht}from"./chunk-KJWBQZT7.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-QU6ZUKAD.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import{j as it,k as rt,l as at}from"./chunk-NF52Q3TV.js";import"./chunk-72SZI2UW.js";import"./chunk-FX3D7YON.js";import"./chunk-FCPTN6NF.js";import"./chunk-QOYAX2FT.js";import{a as ke,b as ve,c as xe,d as $e,e as Ce,f as Pe,g as be,h as Te,i as Me,j as Re,l as Ee,m as Ge,o as T,p as W}from"./chunk-SZJMS7K4.js";import{a as m,b as G}from"./chunk-7I7IEX4S.js";import{a as Fe,b as Le,c as A,d as De}from"./chunk-VDMYBPYB.js";import{a as Ke,b as Je,e as We}from"./chunk-DSYKYZMT.js";import{k as tt,m as st,n as ot,p as nt}from"./chunk-47EEUZBK.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";W();G();import{execa as Rt}from"execa";import{existsSync as se,promises as X}from"fs";import S from"path";import ie from"node-fetch";async function Et(o,e){let t=o.split("/");if(t.length<2)throw new Error(`Invalid skill package ID: ${o}. Expected format: owner/repo`);let s=t[0],i=t[1],n=t[2];try{let a=n?`${s}/${i}/${n}`:`${s}/${i}`;await Rt("npx",["-y","skills","add",a],{cwd:e,stdio:"pipe"}),m.success(`Installed skill package: ${o}`);let r=S.resolve(e,".skills",`${s}_${i}`);if(se(r))return await ne(r,o);let d=S.resolve(e,".skills");return se(d)?await ne(d,o):[]}catch{return m.info(`Fetching skills directly from GitHub: ${s}/${i}`),await Gt(s,i,n,e)}}async function Gt(o,e,t,s){let i=[];try{let n=`https://api.github.com/repos/${o}/${e}/git/trees/main?recursive=1`,a=await ie(n);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let d=(await a.json()).tree.filter(p=>p.type==="blob"&&p.path.endsWith("SKILL.md"));if(t){let p=d.find(f=>f.path.includes(`/${t}/`)||f.path===`${t}/SKILL.md`);if(p){let f=await oe(o,e,p.path,s);f&&i.push(f)}}else for(let p of d){let f=await oe(o,e,p.path,s);f&&i.push(f)}}catch(n){m.error(`Failed to fetch skills from GitHub: ${n.message}`)}return i}async function oe(o,e,t,s){try{let i=`https://raw.githubusercontent.com/${o}/${e}/main/${t}`,n=await ie(i);if(!n.ok)return null;let a=await n.text(),r=A(a);if(r){r.source="remote",r.packageId=`${o}/${e}`;let d=S.dirname(t),p=S.resolve(s,".skills",`${o}_${e}`,d);await X.mkdir(p,{recursive:!0}),await X.writeFile(S.resolve(p,"SKILL.md"),a),r.path=S.resolve(p,"SKILL.md")}return r}catch{return null}}async function ne(o,e){let t=[],{default:s}=await import("fast-glob"),i=await s.glob("**/SKILL.md",{cwd:o,deep:5});for(let n of i)try{let a=S.resolve(o,n),r=await X.readFile(a,"utf8"),d=A(r);d&&(d.source="remote",d.path=a,d.packageId=e,t.push(d))}catch{}return t}async function At(o,e,t,s,i){let n=["---",`name: ${o}`,`description: ${e}`];if(s?.length){n.push("tags:");for(let a of s)n.push(` - ${a}`)}if(i?.length){n.push("globs:");for(let a of i)n.push(` - ${a}`)}return n.push("---"),`${n.join(`
1
+ import{a as L}from"./chunk-Y57CULGE.js";import{a as St,b as kt,c as vt,d as xt,e as $t,f as Ct,g as Pt,la as bt,ma as Tt,na as Mt}from"./chunk-K4RDE6YU.js";import"./chunk-UIVHSYCN.js";import"./chunk-723K4SAW.js";import"./chunk-S7CVSKOX.js";import"./chunk-LQRBGQIR.js";import"./chunk-ZVP6GB4G.js";import"./chunk-SA23V7WX.js";import"./chunk-W4YMMWJL.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-2D3RYIDU.js";import"./chunk-L53FTKEP.js";import{S as yt,l as lt,m as ct,n as dt,o as mt,p as pt}from"./chunk-EJ5ISSWW.js";import"./chunk-CELYD5QW.js";import"./chunk-WP6KLXTP.js";import"./chunk-N6EWZGIX.js";import"./chunk-DP7RTNDM.js";import{s as ut}from"./chunk-O3XG2NVR.js";import"./chunk-EZN2YXRY.js";import{A as D,B as z,C as V,a as ye,b as we,c as Se,d as Ae,e as Ie,f as Oe,g as Ne,h as He,i as je,j as Ue,k as _e,l as I,m as q,n as Be,o as qe,p as Ye,q as O,r as ze,s as Ve,t as Xe,u as x,v as Y,w as Qe,x as Ze,y as et,z as wt}from"./chunk-6AK6WKE5.js";import{a as B,b as M,c as F}from"./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-4HEVSWO3.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-LKJSPO3S.js";import{a as gt,b as ft,e as ht}from"./chunk-C3VRBEJ7.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-GSOL2LW6.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import{j as it,k as rt,l as at}from"./chunk-M4AG2YNX.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import{a as ke,b as ve,c as xe,d as $e,e as Ce,f as Pe,g as be,h as Te,i as Me,j as Re,l as Ee,m as Ge,o as T,p as W}from"./chunk-SZJMS7K4.js";import{a as m,b as G}from"./chunk-7I7IEX4S.js";import{a as Fe,b as Le,c as A,d as De}from"./chunk-VDMYBPYB.js";import{a as Ke,b as Je,e as We}from"./chunk-DSYKYZMT.js";import{l as tt,n as st,o as ot,q as nt}from"./chunk-U4H35SJS.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";W();G();import{execa as Rt}from"execa";import{existsSync as se,promises as X}from"fs";import S from"path";import ie from"node-fetch";async function Et(o,e){let t=o.split("/");if(t.length<2)throw new Error(`Invalid skill package ID: ${o}. Expected format: owner/repo`);let s=t[0],i=t[1],n=t[2];try{let a=n?`${s}/${i}/${n}`:`${s}/${i}`;await Rt("npx",["-y","skills","add",a],{cwd:e,stdio:"pipe"}),m.success(`Installed skill package: ${o}`);let r=S.resolve(e,".skills",`${s}_${i}`);if(se(r))return await ne(r,o);let d=S.resolve(e,".skills");return se(d)?await ne(d,o):[]}catch{return m.info(`Fetching skills directly from GitHub: ${s}/${i}`),await Gt(s,i,n,e)}}async function Gt(o,e,t,s){let i=[];try{let n=`https://api.github.com/repos/${o}/${e}/git/trees/main?recursive=1`,a=await ie(n);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let d=(await a.json()).tree.filter(p=>p.type==="blob"&&p.path.endsWith("SKILL.md"));if(t){let p=d.find(f=>f.path.includes(`/${t}/`)||f.path===`${t}/SKILL.md`);if(p){let f=await oe(o,e,p.path,s);f&&i.push(f)}}else for(let p of d){let f=await oe(o,e,p.path,s);f&&i.push(f)}}catch(n){m.error(`Failed to fetch skills from GitHub: ${n.message}`)}return i}async function oe(o,e,t,s){try{let i=`https://raw.githubusercontent.com/${o}/${e}/main/${t}`,n=await ie(i);if(!n.ok)return null;let a=await n.text(),r=A(a);if(r){r.source="remote",r.packageId=`${o}/${e}`;let d=S.dirname(t),p=S.resolve(s,".skills",`${o}_${e}`,d);await X.mkdir(p,{recursive:!0}),await X.writeFile(S.resolve(p,"SKILL.md"),a),r.path=S.resolve(p,"SKILL.md")}return r}catch{return null}}async function ne(o,e){let t=[],{default:s}=await import("fast-glob"),i=await s.glob("**/SKILL.md",{cwd:o,deep:5});for(let n of i)try{let a=S.resolve(o,n),r=await X.readFile(a,"utf8"),d=A(r);d&&(d.source="remote",d.path=a,d.packageId=e,t.push(d))}catch{}return t}async function At(o,e,t,s,i){let n=["---",`name: ${o}`,`description: ${e}`];if(s?.length){n.push("tags:");for(let a of s)n.push(` - ${a}`)}if(i?.length){n.push("globs:");for(let a of i)n.push(` - ${a}`)}return n.push("---"),`${n.join(`
2
2
  `)}
3
3
 
4
4
  ${t}`}async function It(o){let{loadLocalSkills:e}=await import("./loader-EVHZ2R73.js");return e(o)}async function Ot(o,e,t,s,i){let a=[{role:"system",content:`You are a skill author for the Agent Skills ecosystem (skills.sh).