solace-agent-mesh 1.0.8__py3-none-any.whl → 1.1.0__py3-none-any.whl

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.

Potentially problematic release.


This version of solace-agent-mesh might be problematic. Click here for more details.

Files changed (162) hide show
  1. solace_agent_mesh/agent/adk/adk_llm.txt +182 -42
  2. solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +171 -0
  3. solace_agent_mesh/agent/adk/callbacks.py +165 -104
  4. solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +0 -18
  5. solace_agent_mesh/agent/adk/models/models_llm.txt +104 -55
  6. solace_agent_mesh/agent/adk/runner.py +7 -5
  7. solace_agent_mesh/agent/adk/setup.py +11 -0
  8. solace_agent_mesh/agent/adk/stream_parser.py +8 -1
  9. solace_agent_mesh/agent/adk/tool_wrapper.py +10 -3
  10. solace_agent_mesh/agent/agent_llm.txt +355 -18
  11. solace_agent_mesh/agent/protocol/event_handlers.py +433 -296
  12. solace_agent_mesh/agent/protocol/protocol_llm.txt +54 -7
  13. solace_agent_mesh/agent/sac/app.py +1 -1
  14. solace_agent_mesh/agent/sac/component.py +212 -517
  15. solace_agent_mesh/agent/sac/sac_llm.txt +133 -63
  16. solace_agent_mesh/agent/testing/testing_llm.txt +25 -58
  17. solace_agent_mesh/agent/tools/peer_agent_tool.py +15 -11
  18. solace_agent_mesh/agent/tools/tools_llm.txt +234 -69
  19. solace_agent_mesh/agent/utils/artifact_helpers.py +35 -1
  20. solace_agent_mesh/agent/utils/utils_llm.txt +90 -105
  21. solace_agent_mesh/assets/docs/404.html +3 -3
  22. solace_agent_mesh/assets/docs/assets/js/{3d406171.7d02a73b.js → 3d406171.0b9eeed1.js} +1 -1
  23. solace_agent_mesh/assets/docs/assets/js/6e0db977.39a79ca9.js +1 -0
  24. solace_agent_mesh/assets/docs/assets/js/{75384d09.ccd480c4.js → 75384d09.bf78fbdb.js} +1 -1
  25. solace_agent_mesh/assets/docs/assets/js/90dd9cf6.88f385ea.js +1 -0
  26. solace_agent_mesh/assets/docs/assets/js/f284c35a.fb68323a.js +1 -0
  27. solace_agent_mesh/assets/docs/assets/js/main.a75ecc0d.js +2 -0
  28. solace_agent_mesh/assets/docs/assets/js/runtime~main.458efb1d.js +1 -0
  29. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +4 -4
  30. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +4 -4
  31. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +4 -4
  32. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +4 -4
  33. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +4 -4
  34. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +4 -4
  35. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +4 -4
  36. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +4 -4
  37. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +4 -4
  38. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +4 -4
  39. solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/index.html +4 -4
  40. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +4 -4
  41. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +4 -4
  42. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +4 -4
  43. solace_agent_mesh/assets/docs/docs/documentation/migration-guides/a2a-upgrade-to-0.3.0/a2a-gateway-upgrade-to-0.3.0/index.html +105 -0
  44. solace_agent_mesh/assets/docs/docs/documentation/migration-guides/a2a-upgrade-to-0.3.0/a2a-technical-migration-map/index.html +53 -0
  45. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +4 -4
  46. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +8 -8
  47. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +4 -4
  48. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +4 -4
  49. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +4 -4
  50. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rag-integration/index.html +4 -4
  51. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +4 -4
  52. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +4 -4
  53. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +4 -4
  54. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +4 -4
  55. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +4 -4
  56. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +4 -4
  57. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +4 -4
  58. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +4 -4
  59. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +4 -4
  60. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +4 -4
  61. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +4 -4
  62. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +4 -4
  63. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +4 -4
  64. solace_agent_mesh/assets/docs/lunr-index-1756992446316.json +1 -0
  65. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  66. solace_agent_mesh/assets/docs/search-doc-1756992446316.json +1 -0
  67. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  68. solace_agent_mesh/assets/docs/sitemap.xml +1 -1
  69. solace_agent_mesh/cli/__init__.py +1 -1
  70. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +12 -3
  71. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +10 -14
  72. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +2 -15
  73. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +6 -2
  74. solace_agent_mesh/cli/utils.py +15 -0
  75. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-DvlO62me.js → authCallback-BmF2l6vg.js} +1 -1
  76. solace_agent_mesh/client/webui/frontend/static/assets/{client-bp6u3qVZ.js → client-D881Dttc.js} +4 -4
  77. solace_agent_mesh/client/webui/frontend/static/assets/main-C0jZjYa8.js +699 -0
  78. solace_agent_mesh/client/webui/frontend/static/assets/main-CCeG324-.css +1 -0
  79. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +2 -2
  80. solace_agent_mesh/client/webui/frontend/static/index.html +3 -3
  81. solace_agent_mesh/common/a2a/__init__.py +213 -0
  82. solace_agent_mesh/common/a2a/a2a_llm.txt +182 -0
  83. solace_agent_mesh/common/a2a/artifact.py +328 -0
  84. solace_agent_mesh/common/a2a/events.py +183 -0
  85. solace_agent_mesh/common/a2a/message.py +307 -0
  86. solace_agent_mesh/common/a2a/protocol.py +513 -0
  87. solace_agent_mesh/common/a2a/task.py +127 -0
  88. solace_agent_mesh/common/a2a/translation.py +653 -0
  89. solace_agent_mesh/common/a2a/types.py +54 -0
  90. solace_agent_mesh/common/a2a_spec/a2a.json +2576 -0
  91. solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +407 -0
  92. solace_agent_mesh/common/a2a_spec/schemas/agent_progress_update.json +18 -0
  93. solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +31 -0
  94. solace_agent_mesh/common/a2a_spec/schemas/llm_invocation.json +18 -0
  95. solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +235 -0
  96. solace_agent_mesh/common/a2a_spec/schemas/tool_invocation_start.json +26 -0
  97. solace_agent_mesh/common/a2a_spec/schemas/tool_result.json +25 -0
  98. solace_agent_mesh/common/agent_registry.py +1 -1
  99. solace_agent_mesh/common/common_llm.txt +192 -70
  100. solace_agent_mesh/common/data_parts.py +99 -0
  101. solace_agent_mesh/common/middleware/middleware_llm.txt +17 -17
  102. solace_agent_mesh/common/sac/__init__.py +0 -0
  103. solace_agent_mesh/common/sac/sac_llm.txt +71 -0
  104. solace_agent_mesh/common/sac/sam_component_base.py +252 -0
  105. solace_agent_mesh/common/services/providers/providers_llm.txt +51 -84
  106. solace_agent_mesh/common/services/services_llm.txt +206 -26
  107. solace_agent_mesh/common/utils/artifact_utils.py +29 -0
  108. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +176 -80
  109. solace_agent_mesh/common/utils/utils_llm.txt +323 -42
  110. solace_agent_mesh/config_portal/backend/common.py +1 -1
  111. solace_agent_mesh/config_portal/frontend/static/client/assets/{_index-MqsrTd6g.js → _index-Bym6YkMd.js} +74 -24
  112. solace_agent_mesh/config_portal/frontend/static/client/assets/{components-B7lKcHVY.js → components-Rk0n-9cK.js} +1 -1
  113. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-CEumGClk.js → entry.client-mvZjNKiz.js} +1 -1
  114. solace_agent_mesh/config_portal/frontend/static/client/assets/{index-DSo1AH_7.js → index-DzNKzXrc.js} +1 -1
  115. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-d845808d.js +1 -0
  116. solace_agent_mesh/config_portal/frontend/static/client/assets/{root-C4XmHinv.js → root-BWvk5-gF.js} +1 -1
  117. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  118. solace_agent_mesh/core_a2a/core_a2a_llm.txt +10 -8
  119. solace_agent_mesh/core_a2a/service.py +20 -44
  120. solace_agent_mesh/gateway/base/app.py +27 -1
  121. solace_agent_mesh/gateway/base/base_llm.txt +177 -72
  122. solace_agent_mesh/gateway/base/component.py +294 -523
  123. solace_agent_mesh/gateway/gateway_llm.txt +299 -58
  124. solace_agent_mesh/gateway/http_sse/component.py +156 -183
  125. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +29 -29
  126. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +272 -36
  127. solace_agent_mesh/gateway/http_sse/main.py +8 -10
  128. solace_agent_mesh/gateway/http_sse/routers/agents.py +1 -1
  129. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +18 -4
  130. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +231 -5
  131. solace_agent_mesh/gateway/http_sse/routers/sessions.py +12 -7
  132. solace_agent_mesh/gateway/http_sse/routers/tasks.py +116 -169
  133. solace_agent_mesh/gateway/http_sse/services/agent_service.py +1 -1
  134. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +89 -135
  135. solace_agent_mesh/gateway/http_sse/services/task_service.py +2 -5
  136. solace_agent_mesh/solace_agent_mesh_llm.txt +362 -0
  137. solace_agent_mesh/templates/gateway_component_template.py +149 -98
  138. {solace_agent_mesh-1.0.8.dist-info → solace_agent_mesh-1.1.0.dist-info}/METADATA +5 -4
  139. {solace_agent_mesh-1.0.8.dist-info → solace_agent_mesh-1.1.0.dist-info}/RECORD +143 -126
  140. solace_agent_mesh/assets/docs/assets/js/f284c35a.731836ad.js +0 -1
  141. solace_agent_mesh/assets/docs/assets/js/main.6dba4a66.js +0 -2
  142. solace_agent_mesh/assets/docs/assets/js/runtime~main.6415ad00.js +0 -1
  143. solace_agent_mesh/assets/docs/lunr-index-1756153049706.json +0 -1
  144. solace_agent_mesh/assets/docs/search-doc-1756153049706.json +0 -1
  145. solace_agent_mesh/client/webui/frontend/static/assets/main-BCpII1-0.css +0 -1
  146. solace_agent_mesh/client/webui/frontend/static/assets/main-BucUdn9m.js +0 -673
  147. solace_agent_mesh/common/a2a_protocol.py +0 -564
  148. solace_agent_mesh/common/client/__init__.py +0 -4
  149. solace_agent_mesh/common/client/card_resolver.py +0 -21
  150. solace_agent_mesh/common/client/client.py +0 -85
  151. solace_agent_mesh/common/client/client_llm.txt +0 -133
  152. solace_agent_mesh/common/server/__init__.py +0 -4
  153. solace_agent_mesh/common/server/server.py +0 -122
  154. solace_agent_mesh/common/server/server_llm.txt +0 -169
  155. solace_agent_mesh/common/server/task_manager.py +0 -291
  156. solace_agent_mesh/common/server/utils.py +0 -28
  157. solace_agent_mesh/common/types.py +0 -411
  158. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-28271392.js +0 -1
  159. /solace_agent_mesh/assets/docs/assets/js/{main.6dba4a66.js.LICENSE.txt → main.a75ecc0d.js.LICENSE.txt} +0 -0
  160. {solace_agent_mesh-1.0.8.dist-info → solace_agent_mesh-1.1.0.dist-info}/WHEEL +0 -0
  161. {solace_agent_mesh-1.0.8.dist-info → solace_agent_mesh-1.1.0.dist-info}/entry_points.txt +0 -0
  162. {solace_agent_mesh-1.0.8.dist-info → solace_agent_mesh-1.1.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,4 +1,4 @@
1
- var ze=Object.defineProperty;var Be=(e,t,r)=>t in e?ze(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var j=(e,t,r)=>Be(e,typeof t!="symbol"?t+"":t,r);import{p as Ye,A as Xe,D as Ve,i as pe,g as We,h as ve,E as U,r as c,k as Ge,m as we,l as Ke,n as Ze,o as Qe,q as qe,u as ge,s as Ee,N as et,L as tt,F as rt}from"./index-DSo1AH_7.js";var nt=-1,at=-2,it=-3,ot=-4,lt=-5,st=-6,ut=-7,ct="B",dt="D",Se="E",ft="M",ht="N",Re="P",mt="R",yt="S",pt="Y",vt="U",wt="Z",xe=class{constructor(){j(this,"promise");j(this,"resolve");j(this,"reject");this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}};function gt(){const e=new TextDecoder;let t="";return new TransformStream({transform(r,n){const a=e.decode(r,{stream:!0}),i=(t+a).split(`
1
+ var ze=Object.defineProperty;var Be=(e,t,r)=>t in e?ze(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var j=(e,t,r)=>Be(e,typeof t!="symbol"?t+"":t,r);import{p as Ye,A as Xe,D as Ve,i as pe,g as We,h as ve,E as U,r as c,k as Ge,m as we,l as Ke,n as Ze,o as Qe,q as qe,u as ge,s as Ee,N as et,L as tt,F as rt}from"./index-DzNKzXrc.js";var nt=-1,at=-2,it=-3,ot=-4,lt=-5,st=-6,ut=-7,ct="B",dt="D",Se="E",ft="M",ht="N",Re="P",mt="R",yt="S",pt="Y",vt="U",wt="Z",xe=class{constructor(){j(this,"promise");j(this,"resolve");j(this,"reject");this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}};function gt(){const e=new TextDecoder;let t="";return new TransformStream({transform(r,n){const a=e.decode(r,{stream:!0}),i=(t+a).split(`
2
2
  `);t=i.pop()||"";for(const s of i)n.enqueue(s)},flush(r){t&&r.enqueue(t)}})}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var V=typeof window<"u"?window:typeof globalThis<"u"?globalThis:void 0;function K(e){const{hydrated:t,values:r}=this;if(typeof e=="number")return ue.call(this,e);if(!Array.isArray(e)||!e.length)throw new SyntaxError;const n=r.length;for(const a of e)r.push(a);return t.length=r.length,ue.call(this,n)}function ue(e){const{hydrated:t,values:r,deferred:n,plugins:a}=this;let i;const s=[[e,o=>{i=o}]];let l=[];for(;s.length>0;){const[o,h]=s.pop();switch(o){case ut:h(void 0);continue;case lt:h(null);continue;case at:h(NaN);continue;case st:h(1/0);continue;case it:h(-1/0);continue;case ot:h(-0);continue}if(t[o]){h(t[o]);continue}const m=r[o];if(!m||typeof m!="object"){t[o]=m,h(m);continue}if(Array.isArray(m))if(typeof m[0]=="string"){const[u,d,y]=m;switch(u){case dt:h(t[o]=new Date(d));continue;case vt:h(t[o]=new URL(d));continue;case ct:h(t[o]=BigInt(d));continue;case mt:h(t[o]=new RegExp(d,y));continue;case pt:h(t[o]=Symbol.for(d));continue;case yt:const f=new Set;t[o]=f;for(let w=1;w<m.length;w++)s.push([m[w],S=>{f.add(S)}]);h(f);continue;case ft:const p=new Map;t[o]=p;for(let w=1;w<m.length;w+=2){const S=[];s.push([m[w+1],v=>{S[1]=v}]),s.push([m[w],v=>{S[0]=v}]),l.push(()=>{p.set(S[0],S[1])})}h(p);continue;case ht:const g=Object.create(null);t[o]=g;for(const w of Object.keys(d).reverse()){const S=[];s.push([d[w],v=>{S[1]=v}]),s.push([Number(w.slice(1)),v=>{S[0]=v}]),l.push(()=>{g[S[0]]=S[1]})}h(g);continue;case Re:if(t[d])h(t[o]=t[d]);else{const w=new xe;n[d]=w,h(t[o]=w.promise)}continue;case Se:const[,E,b]=m;let x=b&&V&&V[b]?new V[b](E):new Error(E);t[o]=x,h(x);continue;case wt:h(t[o]=t[d]);continue;default:if(Array.isArray(a)){const w=[],S=m.slice(1);for(let v=0;v<S.length;v++){const R=S[v];s.push([R,_=>{w[v]=_}])}l.push(()=>{for(const v of a){const R=v(m[0],...w);if(R){h(t[o]=R.value);return}}throw new SyntaxError});continue}throw new SyntaxError}}else{const u=[];t[o]=u;for(let d=0;d<m.length;d++){const y=m[d];y!==nt&&s.push([y,f=>{u[d]=f}])}h(u);continue}else{const u={};t[o]=u;for(const d of Object.keys(m).reverse()){const y=[];s.push([m[d],f=>{y[1]=f}]),s.push([Number(d.slice(1)),f=>{y[0]=f}]),l.push(()=>{u[y[0]]=y[1]})}h(u);continue}}for(;l.length>0;)l.pop()();return i}async function Et(e,t){const{plugins:r}=t??{},n=new xe,a=e.pipeThrough(gt()).getReader(),i={values:[],hydrated:[],deferred:{},plugins:r},s=await St.call(i,a);let l=n.promise;return s.done?n.resolve():l=Rt.call(i,a).then(n.resolve).catch(o=>{for(const h of Object.values(i.deferred))h.reject(o);n.reject(o)}),{done:l.then(()=>a.closed),value:s.value}}async function St(e){const t=await e.read();if(!t.value)throw new SyntaxError;let r;try{r=JSON.parse(t.value)}catch{throw new SyntaxError}return{done:t.done,value:K.call(this,r)}}async function Rt(e){let t=await e.read();for(;!t.done;){if(!t.value)continue;const r=t.value;switch(r[0]){case Re:{const n=r.indexOf(":"),a=Number(r.slice(1,n)),i=this.deferred[a];if(!i)throw new Error(`Deferred ID ${a} not found in stream`);const s=r.slice(n+1);let l;try{l=JSON.parse(s)}catch{throw new SyntaxError}const o=K.call(this,l);i.resolve(o);break}case Se:{const n=r.indexOf(":"),a=Number(r.slice(1,n)),i=this.deferred[a];if(!i)throw new Error(`Deferred ID ${a} not found in stream`);const s=r.slice(n+1);let l;try{l=JSON.parse(s)}catch{throw new SyntaxError}const o=K.call(this,l);i.reject(o);break}default:throw new SyntaxError}t=await e.read()}}/**
3
3
  * @remix-run/server-runtime v2.16.2
4
4
  *
@@ -1,4 +1,4 @@
1
- import{E as C,m as h,c as M,a as y,r,R as g,b as E,d as S,j as v}from"./index-DSo1AH_7.js";import{i as b,d as F,c as P,s as D,g as k,a as z,b as H,u as L,R as O,e as T}from"./components-B7lKcHVY.js";/**
1
+ import{E as C,m as h,c as M,a as y,r,R as g,b as E,d as S,j as v}from"./index-DzNKzXrc.js";import{i as b,d as F,c as P,s as D,g as k,a as z,b as H,u as L,R as O,e as T}from"./components-Rk0n-9cK.js";/**
2
2
  * @remix-run/react v2.16.2
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
@@ -65,4 +65,4 @@ Error generating stack: `+o.message+`
65
65
  * LICENSE.md file in the root directory of this source tree.
66
66
  *
67
67
  * @license MIT
68
- */function gr(){return gr=Object.assign?Object.assign.bind():function(i){for(var a=1;a<arguments.length;a++){var u=arguments[a];for(var c in u)Object.prototype.hasOwnProperty.call(u,c)&&(i[c]=u[c])}return i},gr.apply(this,arguments)}function Cu(i,a){if(i==null)return{};var u={},c=Object.keys(i),f,h;for(h=0;h<c.length;h++)f=c[h],!(a.indexOf(f)>=0)&&(u[f]=i[f]);return u}const so="get",ou="application/x-www-form-urlencoded";function vo(i){return i!=null&&typeof i.tagName=="string"}function tm(i){return vo(i)&&i.tagName.toLowerCase()==="button"}function nm(i){return vo(i)&&i.tagName.toLowerCase()==="form"}function rm(i){return vo(i)&&i.tagName.toLowerCase()==="input"}function lm(i){return!!(i.metaKey||i.altKey||i.ctrlKey||i.shiftKey)}function im(i,a){return i.button===0&&(!a||a==="_self")&&!lm(i)}function pu(i){return i===void 0&&(i=""),new URLSearchParams(typeof i=="string"||Array.isArray(i)||i instanceof URLSearchParams?i:Object.keys(i).reduce((a,u)=>{let c=i[u];return a.concat(Array.isArray(c)?c.map(f=>[u,f]):[[u,c]])},[]))}function om(i,a){let u=pu(i);return a&&a.forEach((c,f)=>{u.has(f)||a.getAll(f).forEach(h=>{u.append(f,h)})}),u}let oo=null;function am(){if(oo===null)try{new FormData(document.createElement("form"),0),oo=!1}catch{oo=!0}return oo}const um=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function au(i){return i!=null&&!um.has(i)?null:i}function sm(i,a){let u,c,f,h,p;if(nm(i)){let g=i.getAttribute("action");c=g?At(g,a):null,u=i.getAttribute("method")||so,f=au(i.getAttribute("enctype"))||ou,h=new FormData(i)}else if(tm(i)||rm(i)&&(i.type==="submit"||i.type==="image")){let g=i.form;if(g==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let y=i.getAttribute("formaction")||g.getAttribute("action");if(c=y?At(y,a):null,u=i.getAttribute("formmethod")||g.getAttribute("method")||so,f=au(i.getAttribute("formenctype"))||au(g.getAttribute("enctype"))||ou,h=new FormData(g,i),!am()){let{name:x,type:_,value:C}=i;if(_==="image"){let D=x?x+".":"";h.append(D+"x","0"),h.append(D+"y","0")}else x&&h.append(x,C)}}else{if(vo(i))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');u=so,c=null,f=ou,p=i}return h&&f==="text/plain"&&(p=h,h=void 0),{action:c,method:u.toLowerCase(),encType:f,formData:h,body:p}}const cm=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],fm=["aria-current","caseSensitive","className","end","style","to","viewTransition","children"],dm=["fetcherKey","navigate","reloadDocument","replace","state","method","action","onSubmit","relative","preventScrollReset","viewTransition"],pm="6";try{window.__reactRouterVersion=pm}catch{}const Hf=N.createContext({isTransitioning:!1}),hm=N.createContext(new Map),mm="startTransition",Ef=Lp[mm],vm="flushSync",kf=Op[vm];function ym(i){Ef?Ef(i):i()}function Bl(i){kf?kf(i):i()}class gm{constructor(){this.status="pending",this.promise=new Promise((a,u)=>{this.resolve=c=>{this.status==="pending"&&(this.status="resolved",a(c))},this.reject=c=>{this.status==="pending"&&(this.status="rejected",u(c))}})}}function Wm(i){let{fallbackElement:a,router:u,future:c}=i,[f,h]=N.useState(u.state),[p,g]=N.useState(),[y,x]=N.useState({isTransitioning:!1}),[_,C]=N.useState(),[D,I]=N.useState(),[W,V]=N.useState(),U=N.useRef(new Map),{v7_startTransition:fe}=c||{},$=N.useCallback(te=>{fe?ym(te):te()},[fe]),ae=N.useCallback((te,Ee)=>{let{deletedFetchers:se,flushSync:Ue,viewTransitionOpts:De}=Ee;te.fetchers.forEach((Ae,Ze)=>{Ae.data!==void 0&&U.current.set(Ze,Ae.data)}),se.forEach(Ae=>U.current.delete(Ae));let Fe=u.window==null||u.window.document==null||typeof u.window.document.startViewTransition!="function";if(!De||Fe){Ue?Bl(()=>h(te)):$(()=>h(te));return}if(Ue){Bl(()=>{D&&(_&&_.resolve(),D.skipTransition()),x({isTransitioning:!0,flushSync:!0,currentLocation:De.currentLocation,nextLocation:De.nextLocation})});let Ae=u.window.document.startViewTransition(()=>{Bl(()=>h(te))});Ae.finished.finally(()=>{Bl(()=>{C(void 0),I(void 0),g(void 0),x({isTransitioning:!1})})}),Bl(()=>I(Ae));return}D?(_&&_.resolve(),D.skipTransition(),V({state:te,currentLocation:De.currentLocation,nextLocation:De.nextLocation})):(g(te),x({isTransitioning:!0,flushSync:!1,currentLocation:De.currentLocation,nextLocation:De.nextLocation}))},[u.window,D,_,U,$]);N.useLayoutEffect(()=>u.subscribe(ae),[u,ae]),N.useEffect(()=>{y.isTransitioning&&!y.flushSync&&C(new gm)},[y]),N.useEffect(()=>{if(_&&p&&u.window){let te=p,Ee=_.promise,se=u.window.document.startViewTransition(async()=>{$(()=>h(te)),await Ee});se.finished.finally(()=>{C(void 0),I(void 0),g(void 0),x({isTransitioning:!1})}),I(se)}},[$,p,_,u.window]),N.useEffect(()=>{_&&p&&f.location.key===p.location.key&&_.resolve()},[_,D,f.location,p]),N.useEffect(()=>{!y.isTransitioning&&W&&(g(W.state),x({isTransitioning:!0,flushSync:!1,currentLocation:W.currentLocation,nextLocation:W.nextLocation}),V(void 0))},[y.isTransitioning,W]),N.useEffect(()=>{},[]);let le=N.useMemo(()=>({createHref:u.createHref,encodeLocation:u.encodeLocation,go:te=>u.navigate(te),push:(te,Ee,se)=>u.navigate(te,{state:Ee,preventScrollReset:se==null?void 0:se.preventScrollReset}),replace:(te,Ee,se)=>u.navigate(te,{replace:!0,state:Ee,preventScrollReset:se==null?void 0:se.preventScrollReset})}),[u]),Se=u.basename||"/",Oe=N.useMemo(()=>({router:u,navigator:le,static:!1,basename:Se}),[u,le,Se]),T=N.useMemo(()=>({v7_relativeSplatPath:u.future.v7_relativeSplatPath}),[u.future.v7_relativeSplatPath]);return N.useEffect(()=>Jh(c,u.future),[c,u.future]),N.createElement(N.Fragment,null,N.createElement(Ql.Provider,{value:Oe},N.createElement(mo.Provider,{value:f},N.createElement(hm.Provider,{value:U.current},N.createElement(Hf.Provider,{value:y},N.createElement(Zh,{basename:Se,location:f.location,navigationType:f.historyAction,navigator:le,future:T},f.initialized||u.future.v7_partialHydration?N.createElement(wm,{routes:u.routes,future:u.future,state:f}):a))))),null)}const wm=N.memo(Sm);function Sm(i){let{routes:a,future:u,state:c}=i;return Fh(a,void 0,c,u)}const Em=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",km=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,xm=N.forwardRef(function(a,u){let{onClick:c,relative:f,reloadDocument:h,replace:p,state:g,target:y,to:x,preventScrollReset:_,viewTransition:C}=a,D=Cu(a,cm),{basename:I}=N.useContext(Jt),W,V=!1;if(typeof x=="string"&&km.test(x)&&(W=x,Em))try{let ae=new URL(window.location.href),le=x.startsWith("//")?new URL(ae.protocol+x):new URL(x),Se=At(le.pathname,I);le.origin===ae.origin&&Se!=null?x=Se+le.search+le.hash:V=!0}catch{}let U=Nh(x,{relative:f}),fe=Pm(x,{replace:p,state:g,target:y,preventScrollReset:_,relative:f,viewTransition:C});function $(ae){c&&c(ae),ae.defaultPrevented||fe(ae)}return N.createElement("a",gr({},D,{href:W||U,onClick:V||h?c:$,ref:u,target:y}))}),$m=N.forwardRef(function(a,u){let{"aria-current":c="page",caseSensitive:f=!1,className:h="",end:p=!1,style:g,to:y,viewTransition:x,children:_}=a,C=Cu(a,fm),D=Yl(y,{relative:C.relative}),I=Jn(),W=N.useContext(mo),{navigator:V,basename:U}=N.useContext(Jt),fe=W!=null&&Mm(D)&&x===!0,$=V.encodeLocation?V.encodeLocation(D).pathname:D.pathname,ae=I.pathname,le=W&&W.navigation&&W.navigation.location?W.navigation.location.pathname:null;f||(ae=ae.toLowerCase(),le=le?le.toLowerCase():null,$=$.toLowerCase()),le&&U&&(le=At(le,U)||le);const Se=$!=="/"&&$.endsWith("/")?$.length-1:$.length;let Oe=ae===$||!p&&ae.startsWith($)&&ae.charAt(Se)==="/",T=le!=null&&(le===$||!p&&le.startsWith($)&&le.charAt($.length)==="/"),te={isActive:Oe,isPending:T,isTransitioning:fe},Ee=Oe?c:void 0,se;typeof h=="function"?se=h(te):se=[h,Oe?"active":null,T?"pending":null,fe?"transitioning":null].filter(Boolean).join(" ");let Ue=typeof g=="function"?g(te):g;return N.createElement(xm,gr({},C,{"aria-current":Ee,className:se,ref:u,style:Ue,to:y,viewTransition:x}),typeof _=="function"?_(te):_)}),Qm=N.forwardRef((i,a)=>{let{fetcherKey:u,navigate:c,reloadDocument:f,replace:h,state:p,method:g=so,action:y,onSubmit:x,relative:_,preventScrollReset:C,viewTransition:D}=i,I=Cu(i,dm),W=Tm(),V=Dm(y,{relative:_}),U=g.toLowerCase()==="get"?"get":"post",fe=$=>{if(x&&x($),$.defaultPrevented)return;$.preventDefault();let ae=$.nativeEvent.submitter,le=(ae==null?void 0:ae.getAttribute("formmethod"))||g;W(ae||$.currentTarget,{fetcherKey:u,method:le,navigate:c,replace:h,state:p,relative:_,preventScrollReset:C,viewTransition:D})};return N.createElement("form",gr({ref:a,method:U,action:V,onSubmit:f?x:fe},I))});var $l;(function(i){i.UseScrollRestoration="useScrollRestoration",i.UseSubmit="useSubmit",i.UseSubmitFetcher="useSubmitFetcher",i.UseFetcher="useFetcher",i.useViewTransitionState="useViewTransitionState"})($l||($l={}));var hu;(function(i){i.UseFetcher="useFetcher",i.UseFetchers="useFetchers",i.UseScrollRestoration="useScrollRestoration"})(hu||(hu={}));function Pu(i){let a=N.useContext(Ql);return a||ve(!1),a}function Cm(i){let a=N.useContext(mo);return a||ve(!1),a}function Pm(i,a){let{target:u,replace:c,state:f,preventScrollReset:h,relative:p,viewTransition:g}=a===void 0?{}:a,y=Af(),x=Jn(),_=Yl(i,{relative:p});return N.useCallback(C=>{if(im(C,u)){C.preventDefault();let D=c!==void 0?c:Xn(x)===Xn(_);y(i,{replace:D,state:f,preventScrollReset:h,relative:p,viewTransition:g})}},[x,y,_,c,f,u,i,h,p,g])}function Km(i){let a=N.useRef(pu(i)),u=N.useRef(!1),c=Jn(),f=N.useMemo(()=>om(c.search,u.current?null:a.current),[c.search]),h=Af(),p=N.useCallback((g,y)=>{const x=pu(typeof g=="function"?g(f):g);u.current=!0,h("?"+x,y)},[h,f]);return[f,p]}function _m(){if(typeof document>"u")throw new Error("You are calling submit during the server render. Try calling submit within a `useEffect` or callback instead.")}let Rm=0,Lm=()=>"__"+String(++Rm)+"__";function Tm(){let{router:i}=Pu($l.UseSubmit),{basename:a}=N.useContext(Jt),u=Wh();return N.useCallback(function(c,f){f===void 0&&(f={}),_m();let{action:h,method:p,encType:g,formData:y,body:x}=sm(c,a);if(f.navigate===!1){let _=f.fetcherKey||Lm();i.fetch(_,u,f.action||h,{preventScrollReset:f.preventScrollReset,formData:y,body:x,formMethod:f.method||p,formEncType:f.encType||g,flushSync:f.flushSync})}else i.navigate(f.action||h,{preventScrollReset:f.preventScrollReset,formData:y,body:x,formMethod:f.method||p,formEncType:f.encType||g,replace:f.replace,state:f.state,fromRouteId:u,flushSync:f.flushSync,viewTransition:f.viewTransition})},[i,a,u])}function Dm(i,a){let{relative:u}=a===void 0?{}:a,{basename:c}=N.useContext(Jt),f=N.useContext(Sn);f||ve(!1);let[h]=f.matches.slice(-1),p=gr({},Yl(i||".",{relative:u})),g=Jn();if(i==null){p.search=g.search;let y=new URLSearchParams(p.search),x=y.getAll("index");if(x.some(C=>C==="")){y.delete("index"),x.filter(D=>D).forEach(D=>y.append("index",D));let C=y.toString();p.search=C?"?"+C:""}}return(!i||i===".")&&h.route.index&&(p.search=p.search?p.search.replace(/^\?/,"?index&"):"?index"),c!=="/"&&(p.pathname=p.pathname==="/"?c:un([c,p.pathname])),Xn(p)}const xf="react-router-scroll-positions";let ao={};function Ym(i){let{getKey:a,storageKey:u}=i===void 0?{}:i,{router:c}=Pu($l.UseScrollRestoration),{restoreScrollPosition:f,preventScrollReset:h}=Cm(hu.UseScrollRestoration),{basename:p}=N.useContext(Jt),g=Jn(),y=Qh(),x=$h();N.useEffect(()=>(window.history.scrollRestoration="manual",()=>{window.history.scrollRestoration="auto"}),[]),Nm(N.useCallback(()=>{if(x.state==="idle"){let _=(a?a(g,y):null)||g.key;ao[_]=window.scrollY}try{sessionStorage.setItem(u||xf,JSON.stringify(ao))}catch{}window.history.scrollRestoration="auto"},[u,a,x.state,g,y])),typeof document<"u"&&(N.useLayoutEffect(()=>{try{let _=sessionStorage.getItem(u||xf);_&&(ao=JSON.parse(_))}catch{}},[u]),N.useLayoutEffect(()=>{let _=a&&p!=="/"?(D,I)=>a(gr({},D,{pathname:At(D.pathname,p)||D.pathname}),I):a,C=c==null?void 0:c.enableScrollRestoration(ao,()=>window.scrollY,_);return()=>C&&C()},[c,p,a]),N.useLayoutEffect(()=>{if(f!==!1){if(typeof f=="number"){window.scrollTo(0,f);return}if(g.hash){let _=document.getElementById(decodeURIComponent(g.hash.slice(1)));if(_){_.scrollIntoView();return}}h!==!0&&window.scrollTo(0,0)}},[g,f,h]))}function Nm(i,a){let{capture:u}={};N.useEffect(()=>{let c=u!=null?{capture:u}:void 0;return window.addEventListener("pagehide",i,c),()=>{window.removeEventListener("pagehide",i,c)}},[i,u])}function Mm(i,a){a===void 0&&(a={});let u=N.useContext(Hf);u==null&&ve(!1);let{basename:c}=Pu($l.useViewTransitionState),f=Yl(i,{relative:a.relative});if(!u.isTransitioning)return!1;let h=At(u.currentLocation.pathname,c)||u.currentLocation.pathname,p=At(u.nextLocation.pathname,c)||u.nextLocation.pathname;return fo(f.pathname,p)!=null||fo(f.pathname,h)!=null}export{uu as A,jm as D,su as E,Qm as F,xm as L,$m as N,Bm as O,Wm as R,Om as a,Hm as b,Um as c,Mp as d,Qh as e,Ym as f,Fm as g,Im as h,Wl as i,zm as j,Kh as k,Ql as l,mr as m,mo as n,Vm as o,Gn as p,Am as q,N as r,Nh as s,Rp as t,Jn as u,Pf as v,Km as w};
68
+ */function gr(){return gr=Object.assign?Object.assign.bind():function(i){for(var a=1;a<arguments.length;a++){var u=arguments[a];for(var c in u)Object.prototype.hasOwnProperty.call(u,c)&&(i[c]=u[c])}return i},gr.apply(this,arguments)}function Cu(i,a){if(i==null)return{};var u={},c=Object.keys(i),f,h;for(h=0;h<c.length;h++)f=c[h],!(a.indexOf(f)>=0)&&(u[f]=i[f]);return u}const so="get",ou="application/x-www-form-urlencoded";function vo(i){return i!=null&&typeof i.tagName=="string"}function tm(i){return vo(i)&&i.tagName.toLowerCase()==="button"}function nm(i){return vo(i)&&i.tagName.toLowerCase()==="form"}function rm(i){return vo(i)&&i.tagName.toLowerCase()==="input"}function lm(i){return!!(i.metaKey||i.altKey||i.ctrlKey||i.shiftKey)}function im(i,a){return i.button===0&&(!a||a==="_self")&&!lm(i)}function pu(i){return i===void 0&&(i=""),new URLSearchParams(typeof i=="string"||Array.isArray(i)||i instanceof URLSearchParams?i:Object.keys(i).reduce((a,u)=>{let c=i[u];return a.concat(Array.isArray(c)?c.map(f=>[u,f]):[[u,c]])},[]))}function om(i,a){let u=pu(i);return a&&a.forEach((c,f)=>{u.has(f)||a.getAll(f).forEach(h=>{u.append(f,h)})}),u}let oo=null;function am(){if(oo===null)try{new FormData(document.createElement("form"),0),oo=!1}catch{oo=!0}return oo}const um=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function au(i){return i!=null&&!um.has(i)?null:i}function sm(i,a){let u,c,f,h,p;if(nm(i)){let g=i.getAttribute("action");c=g?At(g,a):null,u=i.getAttribute("method")||so,f=au(i.getAttribute("enctype"))||ou,h=new FormData(i)}else if(tm(i)||rm(i)&&(i.type==="submit"||i.type==="image")){let g=i.form;if(g==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let y=i.getAttribute("formaction")||g.getAttribute("action");if(c=y?At(y,a):null,u=i.getAttribute("formmethod")||g.getAttribute("method")||so,f=au(i.getAttribute("formenctype"))||au(g.getAttribute("enctype"))||ou,h=new FormData(g,i),!am()){let{name:x,type:_,value:C}=i;if(_==="image"){let D=x?x+".":"";h.append(D+"x","0"),h.append(D+"y","0")}else x&&h.append(x,C)}}else{if(vo(i))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');u=so,c=null,f=ou,p=i}return h&&f==="text/plain"&&(p=h,h=void 0),{action:c,method:u.toLowerCase(),encType:f,formData:h,body:p}}const cm=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],fm=["aria-current","caseSensitive","className","end","style","to","viewTransition","children"],dm=["fetcherKey","navigate","reloadDocument","replace","state","method","action","onSubmit","relative","preventScrollReset","viewTransition"],pm="6";try{window.__reactRouterVersion=pm}catch{}const Hf=N.createContext({isTransitioning:!1}),hm=N.createContext(new Map),mm="startTransition",Ef=Lp[mm],vm="flushSync",kf=Op[vm];function ym(i){Ef?Ef(i):i()}function Bl(i){kf?kf(i):i()}class gm{constructor(){this.status="pending",this.promise=new Promise((a,u)=>{this.resolve=c=>{this.status==="pending"&&(this.status="resolved",a(c))},this.reject=c=>{this.status==="pending"&&(this.status="rejected",u(c))}})}}function Wm(i){let{fallbackElement:a,router:u,future:c}=i,[f,h]=N.useState(u.state),[p,g]=N.useState(),[y,x]=N.useState({isTransitioning:!1}),[_,C]=N.useState(),[D,I]=N.useState(),[W,V]=N.useState(),U=N.useRef(new Map),{v7_startTransition:fe}=c||{},$=N.useCallback(te=>{fe?ym(te):te()},[fe]),ae=N.useCallback((te,Ee)=>{let{deletedFetchers:se,flushSync:Ue,viewTransitionOpts:De}=Ee;te.fetchers.forEach((Ae,Ze)=>{Ae.data!==void 0&&U.current.set(Ze,Ae.data)}),se.forEach(Ae=>U.current.delete(Ae));let Fe=u.window==null||u.window.document==null||typeof u.window.document.startViewTransition!="function";if(!De||Fe){Ue?Bl(()=>h(te)):$(()=>h(te));return}if(Ue){Bl(()=>{D&&(_&&_.resolve(),D.skipTransition()),x({isTransitioning:!0,flushSync:!0,currentLocation:De.currentLocation,nextLocation:De.nextLocation})});let Ae=u.window.document.startViewTransition(()=>{Bl(()=>h(te))});Ae.finished.finally(()=>{Bl(()=>{C(void 0),I(void 0),g(void 0),x({isTransitioning:!1})})}),Bl(()=>I(Ae));return}D?(_&&_.resolve(),D.skipTransition(),V({state:te,currentLocation:De.currentLocation,nextLocation:De.nextLocation})):(g(te),x({isTransitioning:!0,flushSync:!1,currentLocation:De.currentLocation,nextLocation:De.nextLocation}))},[u.window,D,_,U,$]);N.useLayoutEffect(()=>u.subscribe(ae),[u,ae]),N.useEffect(()=>{y.isTransitioning&&!y.flushSync&&C(new gm)},[y]),N.useEffect(()=>{if(_&&p&&u.window){let te=p,Ee=_.promise,se=u.window.document.startViewTransition(async()=>{$(()=>h(te)),await Ee});se.finished.finally(()=>{C(void 0),I(void 0),g(void 0),x({isTransitioning:!1})}),I(se)}},[$,p,_,u.window]),N.useEffect(()=>{_&&p&&f.location.key===p.location.key&&_.resolve()},[_,D,f.location,p]),N.useEffect(()=>{!y.isTransitioning&&W&&(g(W.state),x({isTransitioning:!0,flushSync:!1,currentLocation:W.currentLocation,nextLocation:W.nextLocation}),V(void 0))},[y.isTransitioning,W]),N.useEffect(()=>{},[]);let le=N.useMemo(()=>({createHref:u.createHref,encodeLocation:u.encodeLocation,go:te=>u.navigate(te),push:(te,Ee,se)=>u.navigate(te,{state:Ee,preventScrollReset:se==null?void 0:se.preventScrollReset}),replace:(te,Ee,se)=>u.navigate(te,{replace:!0,state:Ee,preventScrollReset:se==null?void 0:se.preventScrollReset})}),[u]),Se=u.basename||"/",Oe=N.useMemo(()=>({router:u,navigator:le,static:!1,basename:Se}),[u,le,Se]),T=N.useMemo(()=>({v7_relativeSplatPath:u.future.v7_relativeSplatPath}),[u.future.v7_relativeSplatPath]);return N.useEffect(()=>Jh(c,u.future),[c,u.future]),N.createElement(N.Fragment,null,N.createElement(Ql.Provider,{value:Oe},N.createElement(mo.Provider,{value:f},N.createElement(hm.Provider,{value:U.current},N.createElement(Hf.Provider,{value:y},N.createElement(Zh,{basename:Se,location:f.location,navigationType:f.historyAction,navigator:le,future:T},f.initialized||u.future.v7_partialHydration?N.createElement(wm,{routes:u.routes,future:u.future,state:f}):a))))),null)}const wm=N.memo(Sm);function Sm(i){let{routes:a,future:u,state:c}=i;return Fh(a,void 0,c,u)}const Em=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",km=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,xm=N.forwardRef(function(a,u){let{onClick:c,relative:f,reloadDocument:h,replace:p,state:g,target:y,to:x,preventScrollReset:_,viewTransition:C}=a,D=Cu(a,cm),{basename:I}=N.useContext(Jt),W,V=!1;if(typeof x=="string"&&km.test(x)&&(W=x,Em))try{let ae=new URL(window.location.href),le=x.startsWith("//")?new URL(ae.protocol+x):new URL(x),Se=At(le.pathname,I);le.origin===ae.origin&&Se!=null?x=Se+le.search+le.hash:V=!0}catch{}let U=Nh(x,{relative:f}),fe=Pm(x,{replace:p,state:g,target:y,preventScrollReset:_,relative:f,viewTransition:C});function $(ae){c&&c(ae),ae.defaultPrevented||fe(ae)}return N.createElement("a",gr({},D,{href:W||U,onClick:V||h?c:$,ref:u,target:y}))}),$m=N.forwardRef(function(a,u){let{"aria-current":c="page",caseSensitive:f=!1,className:h="",end:p=!1,style:g,to:y,viewTransition:x,children:_}=a,C=Cu(a,fm),D=Yl(y,{relative:C.relative}),I=Jn(),W=N.useContext(mo),{navigator:V,basename:U}=N.useContext(Jt),fe=W!=null&&Mm(D)&&x===!0,$=V.encodeLocation?V.encodeLocation(D).pathname:D.pathname,ae=I.pathname,le=W&&W.navigation&&W.navigation.location?W.navigation.location.pathname:null;f||(ae=ae.toLowerCase(),le=le?le.toLowerCase():null,$=$.toLowerCase()),le&&U&&(le=At(le,U)||le);const Se=$!=="/"&&$.endsWith("/")?$.length-1:$.length;let Oe=ae===$||!p&&ae.startsWith($)&&ae.charAt(Se)==="/",T=le!=null&&(le===$||!p&&le.startsWith($)&&le.charAt($.length)==="/"),te={isActive:Oe,isPending:T,isTransitioning:fe},Ee=Oe?c:void 0,se;typeof h=="function"?se=h(te):se=[h,Oe?"active":null,T?"pending":null,fe?"transitioning":null].filter(Boolean).join(" ");let Ue=typeof g=="function"?g(te):g;return N.createElement(xm,gr({},C,{"aria-current":Ee,className:se,ref:u,style:Ue,to:y,viewTransition:x}),typeof _=="function"?_(te):_)}),Qm=N.forwardRef((i,a)=>{let{fetcherKey:u,navigate:c,reloadDocument:f,replace:h,state:p,method:g=so,action:y,onSubmit:x,relative:_,preventScrollReset:C,viewTransition:D}=i,I=Cu(i,dm),W=Tm(),V=Dm(y,{relative:_}),U=g.toLowerCase()==="get"?"get":"post",fe=$=>{if(x&&x($),$.defaultPrevented)return;$.preventDefault();let ae=$.nativeEvent.submitter,le=(ae==null?void 0:ae.getAttribute("formmethod"))||g;W(ae||$.currentTarget,{fetcherKey:u,method:le,navigate:c,replace:h,state:p,relative:_,preventScrollReset:C,viewTransition:D})};return N.createElement("form",gr({ref:a,method:U,action:V,onSubmit:f?x:fe},I))});var $l;(function(i){i.UseScrollRestoration="useScrollRestoration",i.UseSubmit="useSubmit",i.UseSubmitFetcher="useSubmitFetcher",i.UseFetcher="useFetcher",i.useViewTransitionState="useViewTransitionState"})($l||($l={}));var hu;(function(i){i.UseFetcher="useFetcher",i.UseFetchers="useFetchers",i.UseScrollRestoration="useScrollRestoration"})(hu||(hu={}));function Pu(i){let a=N.useContext(Ql);return a||ve(!1),a}function Cm(i){let a=N.useContext(mo);return a||ve(!1),a}function Pm(i,a){let{target:u,replace:c,state:f,preventScrollReset:h,relative:p,viewTransition:g}=a===void 0?{}:a,y=Af(),x=Jn(),_=Yl(i,{relative:p});return N.useCallback(C=>{if(im(C,u)){C.preventDefault();let D=c!==void 0?c:Xn(x)===Xn(_);y(i,{replace:D,state:f,preventScrollReset:h,relative:p,viewTransition:g})}},[x,y,_,c,f,u,i,h,p,g])}function Km(i){let a=N.useRef(pu(i)),u=N.useRef(!1),c=Jn(),f=N.useMemo(()=>om(c.search,u.current?null:a.current),[c.search]),h=Af(),p=N.useCallback((g,y)=>{const x=pu(typeof g=="function"?g(f):g);u.current=!0,h("?"+x,y)},[h,f]);return[f,p]}function _m(){if(typeof document>"u")throw new Error("You are calling submit during the server render. Try calling submit within a `useEffect` or callback instead.")}let Rm=0,Lm=()=>"__"+String(++Rm)+"__";function Tm(){let{router:i}=Pu($l.UseSubmit),{basename:a}=N.useContext(Jt),u=Wh();return N.useCallback(function(c,f){f===void 0&&(f={}),_m();let{action:h,method:p,encType:g,formData:y,body:x}=sm(c,a);if(f.navigate===!1){let _=f.fetcherKey||Lm();i.fetch(_,u,f.action||h,{preventScrollReset:f.preventScrollReset,formData:y,body:x,formMethod:f.method||p,formEncType:f.encType||g,flushSync:f.flushSync})}else i.navigate(f.action||h,{preventScrollReset:f.preventScrollReset,formData:y,body:x,formMethod:f.method||p,formEncType:f.encType||g,replace:f.replace,state:f.state,fromRouteId:u,flushSync:f.flushSync,viewTransition:f.viewTransition})},[i,a,u])}function Dm(i,a){let{relative:u}=a===void 0?{}:a,{basename:c}=N.useContext(Jt),f=N.useContext(Sn);f||ve(!1);let[h]=f.matches.slice(-1),p=gr({},Yl(i||".",{relative:u})),g=Jn();if(i==null){p.search=g.search;let y=new URLSearchParams(p.search),x=y.getAll("index");if(x.some(C=>C==="")){y.delete("index"),x.filter(D=>D).forEach(D=>y.append("index",D));let C=y.toString();p.search=C?"?"+C:""}}return(!i||i===".")&&h.route.index&&(p.search=p.search?p.search.replace(/^\?/,"?index&"):"?index"),c!=="/"&&(p.pathname=p.pathname==="/"?c:un([c,p.pathname])),Xn(p)}const xf="react-router-scroll-positions";let ao={};function Ym(i){let{getKey:a,storageKey:u}=i===void 0?{}:i,{router:c}=Pu($l.UseScrollRestoration),{restoreScrollPosition:f,preventScrollReset:h}=Cm(hu.UseScrollRestoration),{basename:p}=N.useContext(Jt),g=Jn(),y=Qh(),x=$h();N.useEffect(()=>(window.history.scrollRestoration="manual",()=>{window.history.scrollRestoration="auto"}),[]),Nm(N.useCallback(()=>{if(x.state==="idle"){let _=(a?a(g,y):null)||g.key;ao[_]=window.scrollY}try{sessionStorage.setItem(u||xf,JSON.stringify(ao))}catch{}window.history.scrollRestoration="auto"},[u,a,x.state,g,y])),typeof document<"u"&&(N.useLayoutEffect(()=>{try{let _=sessionStorage.getItem(u||xf);_&&(ao=JSON.parse(_))}catch{}},[u]),N.useLayoutEffect(()=>{let _=a&&p!=="/"?(D,I)=>a(gr({},D,{pathname:At(D.pathname,p)||D.pathname}),I):a,C=c==null?void 0:c.enableScrollRestoration(ao,()=>window.scrollY,_);return()=>C&&C()},[c,p,a]),N.useLayoutEffect(()=>{if(f!==!1){if(typeof f=="number"){window.scrollTo(0,f);return}if(g.hash){let _=document.getElementById(decodeURIComponent(g.hash.slice(1)));if(_){_.scrollIntoView();return}}h!==!0&&window.scrollTo(0,0)}},[g,f,h]))}function Nm(i,a){let{capture:u}={};N.useEffect(()=>{let c=u!=null?{capture:u}:void 0;return window.addEventListener("pagehide",i,c),()=>{window.removeEventListener("pagehide",i,c)}},[i,u])}function Mm(i,a){a===void 0&&(a={});let u=N.useContext(Hf);u==null&&ve(!1);let{basename:c}=Pu($l.useViewTransitionState),f=Yl(i,{relative:a.relative});if(!u.isTransitioning)return!1;let h=At(u.currentLocation.pathname,c)||u.currentLocation.pathname,p=At(u.nextLocation.pathname,c)||u.nextLocation.pathname;return fo(f.pathname,p)!=null||fo(f.pathname,h)!=null}export{uu as A,jm as D,su as E,Qm as F,xm as L,$m as N,Bm as O,Wm as R,Om as a,Hm as b,Um as c,Mp as d,Qh as e,Ym as f,Fm as g,Im as h,Wl as i,zm as j,Kh as k,Ql as l,mr as m,mo as n,Vm as o,Gn as p,Am as q,N as r,Nh as s,Pf as t,Jn as u,Km as v};
@@ -0,0 +1 @@
1
+ window.__remixManifest={"entry":{"module":"/assets/entry.client-mvZjNKiz.js","imports":["/assets/index-DzNKzXrc.js","/assets/components-Rk0n-9cK.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/root-BWvk5-gF.js","imports":["/assets/index-DzNKzXrc.js","/assets/components-Rk0n-9cK.js"],"css":["/assets/root-DxRwaWiE.css"]},"routes/_index":{"id":"routes/_index","parentId":"root","index":true,"hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_index-Bym6YkMd.js","imports":["/assets/index-DzNKzXrc.js"],"css":[]}},"url":"/assets/manifest-d845808d.js","version":"d845808d"};
@@ -1,4 +1,4 @@
1
- import{u as f,e as m,f as y,r as i,j as t,O as x}from"./index-DSo1AH_7.js";import{f as g,_ as S,M as w,L as j,S as k}from"./components-B7lKcHVY.js";/**
1
+ import{u as f,e as m,f as y,r as i,j as t,O as x}from"./index-DzNKzXrc.js";import{f as g,_ as S,M as w,L as j,S as k}from"./components-Rk0n-9cK.js";/**
2
2
  * @remix-run/react v2.16.2
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
@@ -1,7 +1,7 @@
1
1
  <!DOCTYPE html>
2
- <html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/assets/root-DxRwaWiE.css"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&amp;display=swap"/></head><body><p>Loading...</p><link rel="modulepreload" href="/assets/manifest-28271392.js"/><link rel="modulepreload" href="/assets/entry.client-CEumGClk.js"/><link rel="modulepreload" href="/assets/index-DSo1AH_7.js"/><link rel="modulepreload" href="/assets/components-B7lKcHVY.js"/><link rel="modulepreload" href="/assets/root-C4XmHinv.js"/><script>window.__remixContext = {"basename":"/","future":{"v3_fetcherPersist":false,"v3_relativeSplatPath":false,"v3_throwAbortReason":false,"v3_routeConfig":false,"v3_singleFetch":false,"v3_lazyRouteDiscovery":false,"unstable_optimizeDeps":false},"isSpaMode":true,"state":{"loaderData":{"root":null,"routes/_index":null},"actionData":null,"errors":null}};</script><script type="module" async="">import "/assets/manifest-28271392.js";
3
- import * as route0 from "/assets/root-C4XmHinv.js";
2
+ <html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/assets/root-DxRwaWiE.css"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&amp;display=swap"/></head><body><p>Loading...</p><link rel="modulepreload" href="/assets/manifest-d845808d.js"/><link rel="modulepreload" href="/assets/entry.client-mvZjNKiz.js"/><link rel="modulepreload" href="/assets/index-DzNKzXrc.js"/><link rel="modulepreload" href="/assets/components-Rk0n-9cK.js"/><link rel="modulepreload" href="/assets/root-BWvk5-gF.js"/><script>window.__remixContext = {"basename":"/","future":{"v3_fetcherPersist":false,"v3_relativeSplatPath":false,"v3_throwAbortReason":false,"v3_routeConfig":false,"v3_singleFetch":false,"v3_lazyRouteDiscovery":false,"unstable_optimizeDeps":false},"isSpaMode":true,"state":{"loaderData":{"root":null,"routes/_index":null},"actionData":null,"errors":null}};</script><script type="module" async="">import "/assets/manifest-d845808d.js";
3
+ import * as route0 from "/assets/root-BWvk5-gF.js";
4
4
 
5
5
  window.__remixRouteModules = {"root":route0};
6
6
 
7
- import("/assets/entry.client-CEumGClk.js");</script></body></html>
7
+ import("/assets/entry.client-mvZjNKiz.js");</script></body></html>
@@ -11,18 +11,18 @@ The `core_a2a` directory provides a reusable service layer for core Agent-to-Age
11
11
 
12
12
  ### __init__.py
13
13
  **Purpose:** Package initialization for the core A2A service layer
14
- **Import:** `import core_a2a`
14
+ **Import:** `import solace_agent_mesh.core_a2a`
15
15
 
16
16
  No public classes, functions, or constants defined.
17
17
 
18
18
  ### service.py
19
19
  **Purpose:** Provides the main CoreA2AService class for handling A2A protocol operations
20
- **Import:** `from core_a2a.service import CoreA2AService`
20
+ **Import:** `from solace_agent_mesh.core_a2a.service import CoreA2AService`
21
21
 
22
22
  **Classes:**
23
23
  - `CoreA2AService(agent_registry: AgentRegistry, namespace: str)` - Main service class for A2A operations
24
- - `submit_task(agent_name: str, a2a_message: A2AMessage, session_id: str, client_id: str, reply_to_topic: str, user_id: str = "default_user", a2a_user_scopes: Optional[List[str]] = None, metadata_override: Optional[Dict[str, Any]] = None) -> Tuple[str, Dict, Dict]` - Constructs topic, payload, and user properties for non-streaming task requests
25
- - `submit_streaming_task(agent_name: str, a2a_message: A2AMessage, session_id: str, client_id: str, reply_to_topic: str, status_to_topic: str, user_id: str = "default_user", a2a_user_scopes: Optional[List[str]] = None, metadata_override: Optional[Dict[str, Any]] = None) -> Tuple[str, Dict, Dict]` - Constructs topic, payload, and user properties for streaming task requests
24
+ - `submit_task(agent_name: str, a2a_message: A2AMessage, session_id: str, client_id: str, reply_to_topic: str, user_id: str = "default_user", a2a_user_config: Optional[Dict[str, Any]] = None, metadata_override: Optional[Dict[str, Any]] = None) -> Tuple[str, Dict, Dict]` - Constructs topic, payload, and user properties for non-streaming task requests
25
+ - `submit_streaming_task(agent_name: str, a2a_message: A2AMessage, session_id: str, client_id: str, reply_to_topic: str, status_to_topic: str, user_id: str = "default_user", a2a_user_config: Optional[Dict[str, Any]] = None, metadata_override: Optional[Dict[str, Any]] = None) -> Tuple[str, Dict, Dict]` - Constructs topic, payload, and user properties for streaming task requests
26
26
  - `cancel_task(agent_name: str, task_id: str, client_id: str, user_id: str = "default_user") -> Tuple[str, Dict, Dict]` - Constructs topic, payload, and user properties for task cancellation
27
27
  - `get_agent(agent_name: str) -> Optional[AgentCard]` - Retrieves a specific agent card by name from the registry
28
28
  - `get_all_agents() -> List[AgentCard]` - Retrieves all currently discovered agent cards from the registry
@@ -40,9 +40,9 @@ None
40
40
  **Usage Examples:**
41
41
  ```python
42
42
  # Import required dependencies
43
- from core_a2a.service import CoreA2AService
44
- from common.agent_registry import AgentRegistry
45
- from common.types import A2AMessage, AgentCard
43
+ from solace_agent_mesh.core_a2a.service import CoreA2AService
44
+ from solace_agent_mesh.common.agent_registry import AgentRegistry
45
+ from a2a.types import A2AMessage, AgentCard
46
46
 
47
47
  # Initialize the service
48
48
  agent_registry = AgentRegistry()
@@ -85,4 +85,6 @@ all_agents = service.get_all_agents()
85
85
  # Process discovery message
86
86
  agent_card = AgentCard(name="new_agent", description="A new agent")
87
87
  service.process_discovery_message(agent_card)
88
- ```
88
+ ```
89
+
90
+ # content_hash: fcc947b32fa06db11f6cdf1064dfd9a68ee152373677a574602c182fc8c62f56
@@ -8,16 +8,11 @@ from typing import Dict, Optional, Any, List, Tuple
8
8
 
9
9
  from solace_ai_connector.common.log import log
10
10
 
11
- from ..common.types import (
12
- SendTaskRequest,
13
- SendTaskStreamingRequest,
14
- CancelTaskRequest,
15
- TaskIdParams,
16
- TaskSendParams,
11
+ from a2a.types import (
17
12
  Message as A2AMessage,
18
13
  AgentCard,
19
14
  )
20
- from ..common.a2a_protocol import get_agent_request_topic
15
+ from ..common import a2a
21
16
  from ..common.agent_registry import AgentRegistry
22
17
 
23
18
 
@@ -89,25 +84,17 @@ class CoreA2AService:
89
84
  raise ValueError("Missing required parameters for submit_task")
90
85
 
91
86
  try:
92
- params = TaskSendParams(
93
- id=task_id,
94
- sessionId=session_id,
87
+ if not a2a_message.contextId:
88
+ a2a_message.contextId = session_id
89
+
90
+ request = a2a.create_send_message_request(
95
91
  message=a2a_message,
96
- acceptedOutputModes=["text", "data", "file"],
92
+ task_id=task_id,
93
+ metadata=metadata_override,
97
94
  )
95
+ payload = request.model_dump(by_alias=True, exclude_none=True)
98
96
 
99
- current_metadata = params.metadata or {}
100
- if metadata_override:
101
- current_metadata.update(metadata_override)
102
- log.debug(
103
- "%s Merged metadata_override: %s", log_prefix, metadata_override
104
- )
105
- params.metadata = current_metadata if current_metadata else None
106
-
107
- request = SendTaskRequest(params=params)
108
- payload = request.model_dump(exclude_none=True)
109
-
110
- target_topic = get_agent_request_topic(self.namespace, agent_name)
97
+ target_topic = a2a.get_agent_request_topic(self.namespace, agent_name)
111
98
 
112
99
  user_properties = {
113
100
  "replyTo": reply_to_topic,
@@ -189,26 +176,17 @@ class CoreA2AService:
189
176
  raise ValueError("Missing required parameters for submit_streaming_task")
190
177
 
191
178
  try:
179
+ if not a2a_message.contextId:
180
+ a2a_message.contextId = session_id
192
181
 
193
- params = TaskSendParams(
194
- id=task_id,
195
- sessionId=session_id,
182
+ request = a2a.create_send_streaming_message_request(
196
183
  message=a2a_message,
197
- acceptedOutputModes=["text", "data", "file"],
184
+ task_id=task_id,
185
+ metadata=metadata_override,
198
186
  )
187
+ payload = request.model_dump(by_alias=True, exclude_none=True)
199
188
 
200
- current_metadata = params.metadata or {}
201
- if metadata_override:
202
- current_metadata.update(metadata_override)
203
- log.debug(
204
- "%s Merged metadata_override: %s", log_prefix, metadata_override
205
- )
206
- params.metadata = current_metadata if current_metadata else None
207
-
208
- request = SendTaskStreamingRequest(params=params)
209
- payload = request.model_dump(exclude_none=True)
210
-
211
- target_topic = get_agent_request_topic(self.namespace, agent_name)
189
+ target_topic = a2a.get_agent_request_topic(self.namespace, agent_name)
212
190
 
213
191
  user_properties = {
214
192
  "replyTo": reply_to_topic,
@@ -273,12 +251,10 @@ class CoreA2AService:
273
251
  raise ValueError("Missing required parameters for cancel_task")
274
252
 
275
253
  try:
276
- params = TaskIdParams(id=task_id)
277
-
278
- request = CancelTaskRequest(params=params)
279
- payload = request.model_dump(exclude_none=True)
254
+ request = a2a.create_cancel_task_request(task_id=task_id)
255
+ payload = request.model_dump(by_alias=True, exclude_none=True)
280
256
 
281
- target_topic = get_agent_request_topic(self.namespace, agent_name)
257
+ target_topic = a2a.get_agent_request_topic(self.namespace, agent_name)
282
258
 
283
259
  user_properties = {
284
260
  "clientId": client_id,
@@ -11,7 +11,7 @@ from solace_ai_connector.common.utils import deep_merge
11
11
  from solace_ai_connector.flow.app import App
12
12
  from solace_ai_connector.components.component_base import ComponentBase
13
13
 
14
- from ...common.a2a_protocol import (
14
+ from ...common.a2a import (
15
15
  get_discovery_topic,
16
16
  get_gateway_response_subscription_topic,
17
17
  get_gateway_status_subscription_topic,
@@ -64,6 +64,26 @@ BASE_GATEWAY_APP_SCHEMA: Dict[str, List[Dict[str, Any]]] = {
64
64
  "default": 12,
65
65
  "description": "Maximum depth for recursively resolving 'artifact_content' embeds within files.",
66
66
  },
67
+ {
68
+ "name": "artifact_handling_mode",
69
+ "required": False,
70
+ "type": "string",
71
+ "default": "reference",
72
+ "description": (
73
+ "How the gateway handles file parts from clients. "
74
+ "'reference': Save inline file bytes to the artifact store and replace with a URI. "
75
+ "'embed': Resolve file URIs and embed content as bytes. "
76
+ "'passthrough': Send file parts to the agent as-is."
77
+ ),
78
+ "enum": ["reference", "embed", "passthrough"],
79
+ },
80
+ {
81
+ "name": "gateway_max_message_size_bytes",
82
+ "required": False,
83
+ "type": "integer",
84
+ "default": 10_000_000, # 10MB
85
+ "description": "Maximum allowed message size in bytes for messages published by the gateway.",
86
+ },
67
87
  # --- Default User Identity Configuration ---
68
88
  {
69
89
  "name": "default_user_identity",
@@ -200,6 +220,12 @@ class BaseGatewayApp(App):
200
220
  self.gateway_recursive_embed_depth: int = resolved_app_config_block.get(
201
221
  "gateway_recursive_embed_depth", 12
202
222
  )
223
+ self.artifact_handling_mode: str = resolved_app_config_block.get(
224
+ "artifact_handling_mode", "reference"
225
+ )
226
+ self.gateway_max_message_size_bytes: int = resolved_app_config_block.get(
227
+ "gateway_max_message_size_bytes", 10_000_000
228
+ )
203
229
 
204
230
  modified_app_info = app_info.copy()
205
231
  modified_app_info["app_config"] = resolved_app_config_block