Skip to content

Commit d0d1865

Browse files
authored
Merge branch 'main' into feature/approval-mechanism
2 parents ef8ec81 + 6c999ca commit d0d1865

36 files changed

+1216
-618
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
44
[![Python Unit Tests](https://github.com/google/adk-python/actions/workflows/python-unit-tests.yml/badge.svg)](https://github.com/google/adk-python/actions/workflows/python-unit-tests.yml)
55
[![r/agentdevelopmentkit](https://img.shields.io/badge/Reddit-r%2Fagentdevelopmentkit-FF4500?style=flat&logo=reddit&logoColor=white)](https://www.reddit.com/r/agentdevelopmentkit/)
6+
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/google/adk-python)
67

78
<html>
89
<h2 align="center">

contributing/samples/bigquery/agent.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,15 @@
1717
from google.adk.agents import llm_agent
1818
from google.adk.tools.bigquery import BigQueryCredentialsConfig
1919
from google.adk.tools.bigquery import BigQueryToolset
20+
from google.adk.tools.bigquery.config import BigQueryToolConfig
21+
from google.adk.tools.bigquery.config import WriteMode
2022
import google.auth
2123

2224
RUN_WITH_ADC = False
2325

2426

27+
tool_config = BigQueryToolConfig(write_mode=WriteMode.ALLOWED)
28+
2529
if RUN_WITH_ADC:
2630
# Initialize the tools to use the application default credentials.
2731
application_default_credentials, _ = google.auth.default()
@@ -37,7 +41,9 @@
3741
client_secret=os.getenv("OAUTH_CLIENT_SECRET"),
3842
)
3943

40-
bigquery_toolset = BigQueryToolset(credentials_config=credentials_config)
44+
bigquery_toolset = BigQueryToolset(
45+
credentials_config=credentials_config, bigquery_tool_config=tool_config
46+
)
4147

4248
# The variable name `root_agent` determines what your root agent is for the
4349
# debug CLI
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,15 @@
1+
# Copyright 2025 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
115
from . import agent
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Copyright 2025 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
import os
16+
17+
from dotenv import load_dotenv
18+
from google.adk.agents import Agent
19+
from google.adk.tools.retrieval.vertex_ai_rag_retrieval import VertexAiRagRetrieval
20+
from vertexai.preview import rag
21+
22+
load_dotenv()
23+
24+
ask_vertex_retrieval = VertexAiRagRetrieval(
25+
name="retrieve_rag_documentation",
26+
description=(
27+
"Use this tool to retrieve documentation and reference materials for"
28+
" the question from the RAG corpus,"
29+
),
30+
rag_resources=[
31+
rag.RagResource(
32+
# please fill in your own rag corpus
33+
# e.g. projects/123/locations/us-central1/ragCorpora/456
34+
rag_corpus=os.environ.get("RAG_CORPUS"),
35+
)
36+
],
37+
similarity_top_k=1,
38+
vector_distance_threshold=0.6,
39+
)
40+
41+
root_agent = Agent(
42+
model="gemini-2.0-flash-001",
43+
name="root_agent",
44+
instruction=(
45+
"You are an AI assistant with access to specialized corpus of"
46+
" documents. Your role is to provide accurate and concise answers to"
47+
" questions based on documents that are retrievable using"
48+
" ask_vertex_retrieval."
49+
),
50+
tools=[ask_vertex_retrieval],
51+
)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,15 @@
1+
# Copyright 2025 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
115
from . import agent

src/google/adk/agents/llm_agent.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ class LlmAgent(BaseAgent):
129129
global_instruction: Union[str, InstructionProvider] = ''
130130
"""Instructions for all the agents in the entire agent tree.
131131
132-
global_instruction ONLY takes effect in root agent.
132+
ONLY the global_instruction in root agent will take effect.
133133
134134
For example: use global_instruction to make all agents have a stable identity
135135
or personality.
@@ -204,11 +204,6 @@ class LlmAgent(BaseAgent):
204204
"""
205205
# Advance features - End
206206

207-
# TODO: remove below fields after migration. - Start
208-
# These fields are added back for easier migration.
209-
examples: Optional[ExamplesUnion] = None
210-
# TODO: remove above fields after migration. - End
211-
212207
# Callbacks - Start
213208
before_model_callback: Optional[BeforeModelCallback] = None
214209
"""Callback or list of callbacks to be called before calling the LLM.

src/google/adk/auth/auth_handler.py

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ def exchange_auth_token(
112112

113113
def parse_and_store_auth_response(self, state: State) -> None:
114114

115-
credential_key = self.get_credential_key()
115+
credential_key = "temp:" + self.auth_config.get_credential_key()
116116

117117
state[credential_key] = self.auth_config.exchanged_auth_credential
118118
if not isinstance(
@@ -130,7 +130,7 @@ def _validate(self) -> None:
130130
raise ValueError("auth_scheme is empty.")
131131

132132
def get_auth_response(self, state: State) -> AuthCredential:
133-
credential_key = self.get_credential_key()
133+
credential_key = "temp:" + self.auth_config.get_credential_key()
134134
return state.get(credential_key, None)
135135

136136
def generate_auth_request(self) -> AuthConfig:
@@ -192,29 +192,6 @@ def generate_auth_request(self) -> AuthConfig:
192192
exchanged_auth_credential=exchanged_credential,
193193
)
194194

195-
def get_credential_key(self) -> str:
196-
"""Generates a unique key for the given auth scheme and credential."""
197-
auth_scheme = self.auth_config.auth_scheme
198-
auth_credential = self.auth_config.raw_auth_credential
199-
if auth_scheme.model_extra:
200-
auth_scheme = auth_scheme.model_copy(deep=True)
201-
auth_scheme.model_extra.clear()
202-
scheme_name = (
203-
f"{auth_scheme.type_.name}_{hash(auth_scheme.model_dump_json())}"
204-
if auth_scheme
205-
else ""
206-
)
207-
if auth_credential.model_extra:
208-
auth_credential = auth_credential.model_copy(deep=True)
209-
auth_credential.model_extra.clear()
210-
credential_name = (
211-
f"{auth_credential.auth_type.value}_{hash(auth_credential.model_dump_json())}"
212-
if auth_credential
213-
else ""
214-
)
215-
216-
return f"temp:adk_{scheme_name}_{credential_name}"
217-
218195
def generate_auth_uri(
219196
self,
220197
) -> AuthCredential:

src/google/adk/auth/auth_tool.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
from __future__ import annotations
16+
1517
from .auth_credential import AuthCredential
1618
from .auth_credential import BaseModelWithConfig
1719
from .auth_schemes import AuthScheme
@@ -43,6 +45,34 @@ class AuthConfig(BaseModelWithConfig):
4345
this field to guide the user through the OAuth2 flow and fill auth response in
4446
this field"""
4547

48+
def get_credential_key(self):
49+
"""Generates a hash key based on auth_scheme and raw_auth_credential. This
50+
hash key can be used to store / retrieve exchanged_auth_credential in a
51+
credentials store.
52+
"""
53+
auth_scheme = self.auth_scheme
54+
55+
if auth_scheme.model_extra:
56+
auth_scheme = auth_scheme.model_copy(deep=True)
57+
auth_scheme.model_extra.clear()
58+
scheme_name = (
59+
f"{auth_scheme.type_.name}_{hash(auth_scheme.model_dump_json())}"
60+
if auth_scheme
61+
else ""
62+
)
63+
64+
auth_credential = self.raw_auth_credential
65+
if auth_credential.model_extra:
66+
auth_credential = auth_credential.model_copy(deep=True)
67+
auth_credential.model_extra.clear()
68+
credential_name = (
69+
f"{auth_credential.auth_type.value}_{hash(auth_credential.model_dump_json())}"
70+
if auth_credential
71+
else ""
72+
)
73+
74+
return f"adk_{scheme_name}_{credential_name}"
75+
4676

4777
class AuthToolArguments(BaseModelWithConfig):
4878
"""the arguments for the special long running function tool that is used to

src/google/adk/cli/agent_graph.py

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ def get_node_name(tool_or_agent: Union[BaseAgent, BaseTool]):
6464
if isinstance(tool_or_agent, BaseAgent):
6565
# Added Workflow Agent checks for different agent types
6666
if isinstance(tool_or_agent, SequentialAgent):
67-
return tool_or_agent.name + f' (Sequential Agent)'
67+
return tool_or_agent.name + ' (Sequential Agent)'
6868
elif isinstance(tool_or_agent, LoopAgent):
69-
return tool_or_agent.name + f' (Loop Agent)'
69+
return tool_or_agent.name + ' (Loop Agent)'
7070
elif isinstance(tool_or_agent, ParallelAgent):
71-
return tool_or_agent.name + f' (Parallel Agent)'
71+
return tool_or_agent.name + ' (Parallel Agent)'
7272
else:
7373
return tool_or_agent.name
7474
elif isinstance(tool_or_agent, BaseTool):
@@ -144,49 +144,53 @@ def should_build_agent_cluster(tool_or_agent: Union[BaseAgent, BaseTool]):
144144
)
145145
return False
146146

147-
def build_cluster(child: graphviz.Digraph, agent: BaseAgent, name: str):
148-
if isinstance(agent, LoopAgent) and parent_agent:
147+
async def build_cluster(child: graphviz.Digraph, agent: BaseAgent, name: str):
148+
if isinstance(agent, LoopAgent):
149149
# Draw the edge from the parent agent to the first sub-agent
150-
draw_edge(parent_agent.name, agent.sub_agents[0].name)
150+
if parent_agent:
151+
draw_edge(parent_agent.name, agent.sub_agents[0].name)
151152
length = len(agent.sub_agents)
152-
currLength = 0
153+
curr_length = 0
153154
# Draw the edges between the sub-agents
154155
for sub_agent_int_sequential in agent.sub_agents:
155-
build_graph(child, sub_agent_int_sequential, highlight_pairs)
156+
await build_graph(child, sub_agent_int_sequential, highlight_pairs)
156157
# Draw the edge between the current sub-agent and the next one
157158
# If it's the last sub-agent, draw an edge to the first one to indicating a loop
158159
draw_edge(
159-
agent.sub_agents[currLength].name,
160+
agent.sub_agents[curr_length].name,
160161
agent.sub_agents[
161-
0 if currLength == length - 1 else currLength + 1
162+
0 if curr_length == length - 1 else curr_length + 1
162163
].name,
163164
)
164-
currLength += 1
165-
elif isinstance(agent, SequentialAgent) and parent_agent:
165+
curr_length += 1
166+
elif isinstance(agent, SequentialAgent):
166167
# Draw the edge from the parent agent to the first sub-agent
167-
draw_edge(parent_agent.name, agent.sub_agents[0].name)
168+
if parent_agent:
169+
draw_edge(parent_agent.name, agent.sub_agents[0].name)
168170
length = len(agent.sub_agents)
169-
currLength = 0
171+
curr_length = 0
170172

171173
# Draw the edges between the sub-agents
172174
for sub_agent_int_sequential in agent.sub_agents:
173-
build_graph(child, sub_agent_int_sequential, highlight_pairs)
175+
await build_graph(child, sub_agent_int_sequential, highlight_pairs)
174176
# Draw the edge between the current sub-agent and the next one
175177
# If it's the last sub-agent, don't draw an edge to avoid a loop
176-
draw_edge(
177-
agent.sub_agents[currLength].name,
178-
agent.sub_agents[currLength + 1].name,
179-
) if currLength != length - 1 else None
180-
currLength += 1
178+
if curr_length != length - 1:
179+
draw_edge(
180+
agent.sub_agents[curr_length].name,
181+
agent.sub_agents[curr_length + 1].name,
182+
)
183+
curr_length += 1
181184

182-
elif isinstance(agent, ParallelAgent) and parent_agent:
185+
elif isinstance(agent, ParallelAgent):
183186
# Draw the edge from the parent agent to every sub-agent
184187
for sub_agent in agent.sub_agents:
185-
build_graph(child, sub_agent, highlight_pairs)
186-
draw_edge(parent_agent.name, sub_agent.name)
188+
await build_graph(child, sub_agent, highlight_pairs)
189+
if parent_agent:
190+
draw_edge(parent_agent.name, sub_agent.name)
187191
else:
188192
for sub_agent in agent.sub_agents:
189-
build_graph(child, sub_agent, highlight_pairs)
193+
await build_graph(child, sub_agent, highlight_pairs)
190194
draw_edge(agent.name, sub_agent.name)
191195

192196
child.attr(
@@ -196,21 +200,20 @@ def build_cluster(child: graphviz.Digraph, agent: BaseAgent, name: str):
196200
fontcolor=light_gray,
197201
)
198202

199-
def draw_node(tool_or_agent: Union[BaseAgent, BaseTool]):
203+
async def draw_node(tool_or_agent: Union[BaseAgent, BaseTool]):
200204
name = get_node_name(tool_or_agent)
201205
shape = get_node_shape(tool_or_agent)
202206
caption = get_node_caption(tool_or_agent)
203-
asCluster = should_build_agent_cluster(tool_or_agent)
204-
child = None
207+
as_cluster = should_build_agent_cluster(tool_or_agent)
205208
if highlight_pairs:
206209
for highlight_tuple in highlight_pairs:
207210
if name in highlight_tuple:
208211
# if in highlight, draw highlight node
209-
if asCluster:
212+
if as_cluster:
210213
cluster = graphviz.Digraph(
211214
name='cluster_' + name
212215
) # adding "cluster_" to the name makes the graph render as a cluster subgraph
213-
build_cluster(cluster, agent, name)
216+
await build_cluster(cluster, agent, name)
214217
graph.subgraph(cluster)
215218
else:
216219
graph.node(
@@ -224,12 +227,12 @@ def draw_node(tool_or_agent: Union[BaseAgent, BaseTool]):
224227
)
225228
return
226229
# if not in highlight, draw non-highlight node
227-
if asCluster:
230+
if as_cluster:
228231

229232
cluster = graphviz.Digraph(
230233
name='cluster_' + name
231234
) # adding "cluster_" to the name makes the graph render as a cluster subgraph
232-
build_cluster(cluster, agent, name)
235+
await build_cluster(cluster, agent, name)
233236
graph.subgraph(cluster)
234237

235238
else:
@@ -264,10 +267,9 @@ def draw_edge(from_name, to_name):
264267
else:
265268
graph.edge(from_name, to_name, arrowhead='none', color=light_gray)
266269

267-
draw_node(agent)
270+
await draw_node(agent)
268271
for sub_agent in agent.sub_agents:
269-
270-
build_graph(graph, sub_agent, highlight_pairs, agent)
272+
await build_graph(graph, sub_agent, highlight_pairs, agent)
271273
if not should_build_agent_cluster(
272274
sub_agent
273275
) and not should_build_agent_cluster(
@@ -276,7 +278,7 @@ def draw_edge(from_name, to_name):
276278
draw_edge(agent.name, sub_agent.name)
277279
if isinstance(agent, LlmAgent):
278280
for tool in await agent.canonical_tools():
279-
draw_node(tool)
281+
await draw_node(tool)
280282
draw_edge(agent.name, get_node_name(tool))
281283

282284

src/google/adk/cli/browser/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@
2929
<style>html{color-scheme:dark}html{--mat-sys-background:light-dark(#fcf9f8, #131314);--mat-sys-error:light-dark(#ba1a1a, #ffb4ab);--mat-sys-error-container:light-dark(#ffdad6, #93000a);--mat-sys-inverse-on-surface:light-dark(#f3f0f0, #313030);--mat-sys-inverse-primary:light-dark(#c1c7cd, #595f65);--mat-sys-inverse-surface:light-dark(#313030, #e5e2e2);--mat-sys-on-background:light-dark(#1c1b1c, #e5e2e2);--mat-sys-on-error:light-dark(#ffffff, #690005);--mat-sys-on-error-container:light-dark(#410002, #ffdad6);--mat-sys-on-primary:light-dark(#ffffff, #2b3136);--mat-sys-on-primary-container:light-dark(#161c21, #dde3e9);--mat-sys-on-primary-fixed:light-dark(#161c21, #161c21);--mat-sys-on-primary-fixed-variant:light-dark(#41474d, #41474d);--mat-sys-on-secondary:light-dark(#ffffff, #003061);--mat-sys-on-secondary-container:light-dark(#001b3c, #d5e3ff);--mat-sys-on-secondary-fixed:light-dark(#001b3c, #001b3c);--mat-sys-on-secondary-fixed-variant:light-dark(#0f4784, #0f4784);--mat-sys-on-surface:light-dark(#1c1b1c, #e5e2e2);--mat-sys-on-surface-variant:light-dark(#44474a, #e1e2e6);--mat-sys-on-tertiary:light-dark(#ffffff, #2b3136);--mat-sys-on-tertiary-container:light-dark(#161c21, #dde3e9);--mat-sys-on-tertiary-fixed:light-dark(#161c21, #161c21);--mat-sys-on-tertiary-fixed-variant:light-dark(#41474d, #41474d);--mat-sys-outline:light-dark(#74777b, #8e9194);--mat-sys-outline-variant:light-dark(#c4c7ca, #44474a);--mat-sys-primary:light-dark(#595f65, #c1c7cd);--mat-sys-primary-container:light-dark(#dde3e9, #41474d);--mat-sys-primary-fixed:light-dark(#dde3e9, #dde3e9);--mat-sys-primary-fixed-dim:light-dark(#c1c7cd, #c1c7cd);--mat-sys-scrim:light-dark(#000000, #000000);--mat-sys-secondary:light-dark(#305f9d, #a7c8ff);--mat-sys-secondary-container:light-dark(#d5e3ff, #0f4784);--mat-sys-secondary-fixed:light-dark(#d5e3ff, #d5e3ff);--mat-sys-secondary-fixed-dim:light-dark(#a7c8ff, #a7c8ff);--mat-sys-shadow:light-dark(#000000, #000000);--mat-sys-surface:light-dark(#fcf9f8, #131314);--mat-sys-surface-bright:light-dark(#fcf9f8, #393939);--mat-sys-surface-container:light-dark(#f0eded, #201f20);--mat-sys-surface-container-high:light-dark(#eae7e7, #2a2a2a);--mat-sys-surface-container-highest:light-dark(#e5e2e2, #393939);--mat-sys-surface-container-low:light-dark(#f6f3f3, #1c1b1c);--mat-sys-surface-container-lowest:light-dark(#ffffff, #0e0e0e);--mat-sys-surface-dim:light-dark(#dcd9d9, #131314);--mat-sys-surface-tint:light-dark(#595f65, #c1c7cd);--mat-sys-surface-variant:light-dark(#e1e2e6, #44474a);--mat-sys-tertiary:light-dark(#595f65, #c1c7cd);--mat-sys-tertiary-container:light-dark(#dde3e9, #41474d);--mat-sys-tertiary-fixed:light-dark(#dde3e9, #dde3e9);--mat-sys-tertiary-fixed-dim:light-dark(#c1c7cd, #c1c7cd);--mat-sys-neutral-variant20:#2d3134;--mat-sys-neutral10:#1c1b1c}html{--mat-sys-level0:0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12)}html{--mat-sys-level1:0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12)}html{--mat-sys-level2:0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12)}html{--mat-sys-level3:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12)}html{--mat-sys-level4:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12)}html{--mat-sys-level5:0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12)}html{--mat-sys-corner-extra-large:28px;--mat-sys-corner-extra-large-top:28px 28px 0 0;--mat-sys-corner-extra-small:4px;--mat-sys-corner-extra-small-top:4px 4px 0 0;--mat-sys-corner-full:9999px;--mat-sys-corner-large:16px;--mat-sys-corner-large-end:0 16px 16px 0;--mat-sys-corner-large-start:16px 0 0 16px;--mat-sys-corner-large-top:16px 16px 0 0;--mat-sys-corner-medium:12px;--mat-sys-corner-none:0;--mat-sys-corner-small:8px}html{--mat-sys-dragged-state-layer-opacity:.16;--mat-sys-focus-state-layer-opacity:.12;--mat-sys-hover-state-layer-opacity:.08;--mat-sys-pressed-state-layer-opacity:.12}html{font-family:Google Sans,Helvetica Neue,sans-serif!important}body{height:100vh;margin:0}:root{--mat-sys-primary:black;--mdc-checkbox-selected-icon-color:white;--mat-sys-background:#131314;--mat-tab-header-active-label-text-color:#8AB4F8;--mat-tab-header-active-hover-label-text-color:#8AB4F8;--mat-tab-header-active-focus-label-text-color:#8AB4F8;--mat-tab-header-label-text-weight:500;--mdc-text-button-label-text-color:#89b4f8}:root{--mdc-dialog-container-color:#2b2b2f}:root{--mdc-dialog-subhead-color:white}:root{--mdc-circular-progress-active-indicator-color:#a8c7fa}:root{--mdc-circular-progress-size:80}</style><link rel="stylesheet" href="./styles-4VDSPQ37.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="./styles-4VDSPQ37.css"></noscript></head>
3030
<body>
3131
<app-root></app-root>
32-
<script src="./polyfills-FFHMD2TL.js" type="module"></script><script src="./main-DY547BWY.js" type="module"></script></body>
32+
<script src="./polyfills-FFHMD2TL.js" type="module"></script><script src="./main-76ZXPY2A.js" type="module"></script></body>
3333
</html>

0 commit comments

Comments
 (0)