glaip-sdk 0.0.6a0__py3-none-any.whl → 0.0.7__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.
@@ -121,40 +121,68 @@ class RichStreamRenderer:
121
121
  self.stream_processor.streaming_started_at = self._started_at
122
122
 
123
123
  # Print compact header and user request (parity with old renderer)
124
+ self._render_header(meta)
125
+ self._render_user_query(meta)
126
+
127
+ def _render_header(self, meta: dict[str, Any]) -> None:
128
+ """Render the agent header with metadata."""
129
+ parts = self._build_header_parts(meta)
130
+ self.header_text = " ".join(parts)
131
+
132
+ if not self.header_text:
133
+ return
134
+
135
+ # Use a rule-like header for readability with fallback
136
+ if not self._render_header_rule():
137
+ self._render_header_fallback()
138
+
139
+ def _build_header_parts(self, meta: dict[str, Any]) -> list[str]:
140
+ """Build header text parts from metadata."""
141
+ parts: list[str] = ["🤖"]
142
+ agent_name = meta.get("agent_name", "agent")
143
+ if agent_name:
144
+ parts.append(agent_name)
145
+
146
+ model = meta.get("model", "")
147
+ if model:
148
+ parts.extend(["•", model])
149
+
150
+ run_id = meta.get("run_id", "")
151
+ if run_id:
152
+ parts.extend(["•", run_id])
153
+
154
+ return parts
155
+
156
+ def _render_header_rule(self) -> bool:
157
+ """Render header as a rule. Returns True if successful."""
124
158
  try:
125
- parts: list[str] = ["🤖"]
126
- agent_name = meta.get("agent_name", "agent")
127
- if agent_name:
128
- parts.append(agent_name)
129
- model = meta.get("model", "")
130
- if model:
131
- parts.extend(["•", model])
132
- run_id = meta.get("run_id", "")
133
- if run_id:
134
- parts.extend(["•", run_id])
135
- self.header_text = " ".join(parts)
136
- if self.header_text:
137
- try:
138
- # Use a rule-like header for readability
139
- self.console.rule(self.header_text)
140
- except Exception:
141
- self.console.print(self.header_text)
159
+ self.console.rule(self.header_text)
160
+ return True
161
+ except Exception: # pragma: no cover - defensive fallback
162
+ logger.exception("Failed to render header rule")
163
+ return False
142
164
 
143
- query = (
144
- meta.get("input_message") or meta.get("query") or meta.get("message")
145
- )
146
- if query:
147
- self.console.print(
148
- AIPPanel(
149
- Markdown(f"**Query:** {query}"),
150
- title="User Request",
151
- border_style="yellow",
152
- padding=(0, 1),
153
- )
154
- )
165
+ def _render_header_fallback(self) -> None:
166
+ """Fallback header rendering."""
167
+ try:
168
+ self.console.print(self.header_text)
155
169
  except Exception:
156
- # Non-fatal: header is nice-to-have
157
- pass
170
+ logger.exception("Failed to print header fallback")
171
+
172
+ def _render_user_query(self, meta: dict[str, Any]) -> None:
173
+ """Render the user query panel."""
174
+ query = meta.get("input_message") or meta.get("query") or meta.get("message")
175
+ if not query:
176
+ return
177
+
178
+ self.console.print(
179
+ AIPPanel(
180
+ Markdown(f"**Query:** {query}"),
181
+ title="User Request",
182
+ border_style="yellow",
183
+ padding=(0, 1),
184
+ )
185
+ )
158
186
 
159
187
  def on_event(self, ev: dict[str, Any]) -> None:
160
188
  """Handle streaming events from the backend."""
@@ -230,46 +258,55 @@ class RichStreamRenderer:
230
258
  # Update live display
231
259
  self._ensure_live()
232
260
 
261
+ def _finish_running_steps(self) -> None:
262
+ """Mark any running steps as finished to avoid lingering spinners."""
263
+ for st in list(self.steps.by_id.values()):
264
+ if not is_step_finished(st):
265
+ st.finish(None)
266
+
267
+ def _finish_tool_panels(self) -> None:
268
+ """Mark unfinished tool panels as finished."""
269
+ try:
270
+ items = list(self.tool_panels.items())
271
+ except Exception: # pragma: no cover - defensive guard
272
+ logger.exception("Failed to iterate tool panels during cleanup")
273
+ return
274
+
275
+ for _sid, meta in items:
276
+ if meta.get("status") != "finished":
277
+ meta["status"] = "finished"
278
+
279
+ def _stop_live_display(self) -> None:
280
+ """Stop live display and clean up."""
281
+ self._shutdown_live()
282
+
283
+ def _print_final_panel_if_needed(self) -> None:
284
+ """Print final result panel if verbose mode and content available."""
285
+ if self.verbose and not self.state.printed_final_panel:
286
+ body = ("".join(self.state.buffer) or "").strip()
287
+ if body:
288
+ final_panel = create_final_panel(body, theme=self.cfg.theme)
289
+ self.console.print(final_panel)
290
+ self.state.printed_final_panel = True
291
+
233
292
  def on_complete(self, _stats: RunStats) -> None:
234
293
  """Handle completion event."""
235
294
  self.state.finalizing_ui = True
236
295
 
237
296
  # Mark any running steps as finished to avoid lingering spinners
238
- try:
239
- for st in list(self.steps.by_id.values()):
240
- if not is_step_finished(st):
241
- st.finish(None)
242
- except Exception:
243
- pass
297
+ self._finish_running_steps()
244
298
 
245
299
  # Mark unfinished tool panels as finished
246
- try:
247
- for _sid, meta in list(self.tool_panels.items()):
248
- if meta.get("status") != "finished":
249
- meta["status"] = "finished"
250
- except Exception:
251
- pass
300
+ self._finish_tool_panels()
252
301
 
253
302
  # Final refresh
254
303
  self._ensure_live()
255
304
 
256
305
  # Stop live display
257
- if self.live:
258
- self.live.stop()
259
- self.live = None
306
+ self._stop_live_display()
260
307
 
261
- # If no explicit final_response was printed, but we have buffered content,
262
- # print a final result panel so users still see the outcome (especially in --verbose).
263
- try:
264
- if self.verbose and not self.state.printed_final_panel:
265
- body = ("".join(self.state.buffer) or "").strip()
266
- if body:
267
- final_panel = create_final_panel(body, theme=self.cfg.theme)
268
- self.console.print(final_panel)
269
- self.state.printed_final_panel = True
270
- except Exception:
271
- # Non-fatal; renderer best-effort
272
- pass
308
+ # Print final panel if needed
309
+ self._print_final_panel_if_needed()
273
310
 
274
311
  def _ensure_live(self) -> None:
275
312
  """Ensure live display is updated."""
@@ -441,22 +478,24 @@ class RichStreamRenderer:
441
478
 
442
479
  def _calculate_tool_duration(self, meta: dict[str, Any]) -> float | None:
443
480
  """Calculate tool duration from metadata."""
444
- try:
445
- server_now = self.stream_processor.server_elapsed_time
446
- server_start = meta.get("server_started_at")
447
- dur = None
481
+ server_now = self.stream_processor.server_elapsed_time
482
+ server_start = meta.get("server_started_at")
483
+ dur = None
448
484
 
449
- if isinstance(server_now, int | float) and isinstance(
450
- server_start, int | float
451
- ):
485
+ try:
486
+ if isinstance(server_now, (int, float)) and server_start is not None:
452
487
  dur = max(0.0, float(server_now) - float(server_start))
453
- elif meta.get("started_at") is not None:
454
- dur = max(0.0, float(monotonic() - meta.get("started_at")))
455
-
456
- return dur
457
- except Exception:
488
+ else:
489
+ started_at = meta.get("started_at")
490
+ if started_at is not None:
491
+ started_at_float = float(started_at)
492
+ dur = max(0.0, float(monotonic()) - started_at_float)
493
+ except (TypeError, ValueError):
494
+ logger.exception("Failed to calculate tool duration")
458
495
  return None
459
496
 
497
+ return dur
498
+
460
499
  def _update_tool_metadata(self, meta: dict[str, Any], dur: float | None) -> None:
461
500
  """Update tool metadata with duration information."""
462
501
  if dur is not None:
@@ -510,10 +549,7 @@ class RichStreamRenderer:
510
549
  ) -> float | None:
511
550
  """Get step duration from tool panels."""
512
551
  tool_sid = f"tool_{finished_tool_name}_{task_id}_{context_id}"
513
- try:
514
- return self.tool_panels.get(tool_sid, {}).get("duration_seconds")
515
- except Exception:
516
- return None
552
+ return self.tool_panels.get(tool_sid, {}).get("duration_seconds")
517
553
 
518
554
  def _finish_delegation_step(
519
555
  self,
@@ -647,27 +683,23 @@ class RichStreamRenderer:
647
683
  self, finished_tool_name: str, task_id: str, context_id: str
648
684
  ) -> None:
649
685
  """Create and print a snapshot for a finished tool."""
650
- try:
651
- tool_sid = f"tool_{finished_tool_name}_{task_id}_{context_id}"
686
+ tool_sid = f"tool_{finished_tool_name}_{task_id}_{context_id}"
652
687
 
653
- if not self._should_create_snapshot(tool_sid):
654
- return
688
+ if not self._should_create_snapshot(tool_sid):
689
+ return
655
690
 
656
- meta = self.tool_panels[tool_sid]
657
- adjusted_title = self._get_snapshot_title(meta, finished_tool_name)
691
+ meta = self.tool_panels[tool_sid]
692
+ adjusted_title = self._get_snapshot_title(meta, finished_tool_name)
658
693
 
659
- # Compose body from chunks and clamp
660
- body_text = "".join(meta.get("chunks") or [])
661
- body_text = self._clamp_snapshot_body(body_text)
694
+ # Compose body from chunks and clamp
695
+ body_text = "".join(meta.get("chunks") or [])
696
+ body_text = self._clamp_snapshot_body(body_text)
662
697
 
663
- snapshot_panel = self._create_snapshot_panel(
664
- adjusted_title, body_text, finished_tool_name
665
- )
698
+ snapshot_panel = self._create_snapshot_panel(
699
+ adjusted_title, body_text, finished_tool_name
700
+ )
666
701
 
667
- self._print_and_mark_snapshot(tool_sid, snapshot_panel)
668
-
669
- except Exception:
670
- pass
702
+ self._print_and_mark_snapshot(tool_sid, snapshot_panel)
671
703
 
672
704
  def _handle_agent_step(
673
705
  self,
@@ -725,21 +757,30 @@ class RichStreamRenderer:
725
757
 
726
758
  def close(self) -> None:
727
759
  """Gracefully stop any live rendering and release resources."""
760
+ self._shutdown_live()
761
+
762
+ def __del__(self) -> None:
763
+ # Destructors must never raise
728
764
  try:
729
- if self.live:
730
- try:
731
- self.live.stop()
732
- finally:
733
- self.live = None
734
- except Exception:
765
+ self._shutdown_live(reset_attr=False)
766
+ except Exception: # pragma: no cover - destructor safety net
735
767
  pass
736
768
 
737
- def __del__(self) -> None:
769
+ def _shutdown_live(self, reset_attr: bool = True) -> None:
770
+ """Stop the live renderer without letting exceptions escape."""
771
+ live = getattr(self, "live", None)
772
+ if not live:
773
+ if reset_attr and not hasattr(self, "live"):
774
+ self.live = None
775
+ return
776
+
738
777
  try:
739
- if self.live:
740
- self.live.stop()
778
+ live.stop()
741
779
  except Exception:
742
- pass
780
+ logger.exception("Failed to stop live display")
781
+ finally:
782
+ if reset_attr:
783
+ self.live = None
743
784
 
744
785
  def _get_analysis_progress_info(self) -> dict[str, Any]:
745
786
  total_steps = len(self.steps.order)
@@ -754,15 +795,9 @@ class RichStreamRenderer:
754
795
  # Prefer server elapsed time when available
755
796
  elapsed = 0.0
756
797
  if isinstance(self.stream_processor.server_elapsed_time, int | float):
757
- try:
758
- elapsed = float(self.stream_processor.server_elapsed_time)
759
- except Exception:
760
- elapsed = 0.0
798
+ elapsed = float(self.stream_processor.server_elapsed_time)
761
799
  elif self._started_at is not None:
762
- try:
763
- elapsed = monotonic() - self._started_at
764
- except Exception:
765
- elapsed = 0.0
800
+ elapsed = monotonic() - self._started_at
766
801
  progress_percent = (
767
802
  int((completed_steps / total_steps) * 100) if total_steps else 0
768
803
  )
@@ -913,10 +948,7 @@ class RichStreamRenderer:
913
948
  ):
914
949
  elapsed = max(0.0, float(server_elapsed) - float(server_start))
915
950
  else:
916
- try:
917
- elapsed = max(0.0, monotonic() - (meta.get("started_at") or 0.0))
918
- except Exception:
919
- elapsed = 0.0
951
+ elapsed = max(0.0, monotonic() - (meta.get("started_at") or 0.0))
920
952
 
921
953
  return self._format_elapsed_time(elapsed)
922
954
 
@@ -1025,17 +1057,14 @@ class RichStreamRenderer:
1025
1057
  if not (tool_name and is_delegation_tool(tool_name)):
1026
1058
  return output
1027
1059
 
1028
- try:
1029
- sub = tool_name
1030
- if tool_name.startswith("delegate_to_"):
1031
- sub = tool_name.replace("delegate_to_", "")
1032
- elif tool_name.startswith("delegate_"):
1033
- sub = tool_name.replace("delegate_", "")
1034
- prefix = f"[{sub}]"
1035
- if output.startswith(prefix):
1036
- return output[len(prefix) :].lstrip()
1037
- except Exception:
1038
- pass
1060
+ sub = tool_name
1061
+ if tool_name.startswith("delegate_to_"):
1062
+ sub = tool_name.replace("delegate_to_", "")
1063
+ elif tool_name.startswith("delegate_"):
1064
+ sub = tool_name.replace("delegate_", "")
1065
+ prefix = f"[{sub}]"
1066
+ if output.startswith(prefix):
1067
+ return output[len(prefix) :].lstrip()
1039
1068
 
1040
1069
  return output
1041
1070
 
@@ -1080,5 +1109,3 @@ class RichStreamRenderer:
1080
1109
  return self._format_string_output(output_value, tool_name)
1081
1110
  else:
1082
1111
  return self._format_other_output(output_value)
1083
-
1084
- # No legacy surface helpers are exposed; use modern interfaces only
@@ -184,7 +184,9 @@ def collect_attributes_for_export(resource: Any) -> dict[str, Any]:
184
184
  """
185
185
 
186
186
  mapping = _coerce_resource_to_mapping(resource)
187
- if mapping is None:
187
+ if (
188
+ mapping is None
189
+ ): # pragma: no cover - defensive fallback when attribute introspection fails
188
190
  items = (
189
191
  (name, _safe_getattr(resource, name))
190
192
  for name in _iter_public_attribute_names(resource)
@@ -218,7 +220,9 @@ def _coerce_resource_to_mapping(resource: Any) -> dict[str, Any] | None:
218
220
  if hasattr(resource, "__dict__"):
219
221
  try:
220
222
  return dict(resource.__dict__)
221
- except Exception:
223
+ except (
224
+ Exception
225
+ ): # pragma: no cover - pathological objects can still defeat coercion
222
226
  return None
223
227
 
224
228
  return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: glaip-sdk
3
- Version: 0.0.6a0
3
+ Version: 0.0.7
4
4
  Summary: Python SDK for GL AIP (GDP Labs AI Agent Package) - Simplified CLI Design
5
5
  License: MIT
6
6
  Author: Raymond Christopher
@@ -1,42 +1,42 @@
1
1
  glaip_sdk/__init__.py,sha256=FD-oTyFUKsTB9xTuGiqvkhuFXfeZ-TspjkeXERglha8,370
2
- glaip_sdk/_version.py,sha256=Rb9YLDvK1DXCVFrjlLDbtucpwKh_PyCnmZ-ia9VX3Cc,1650
2
+ glaip_sdk/_version.py,sha256=tGkFWAVu2ry4Hy7j-u7ophGbPRX8y-ngBbXDhN1VBIQ,2007
3
3
  glaip_sdk/branding.py,sha256=d-yGCYbUcdOlEH87E5PmGIyj6uBywsnf-Yd7zs__mUs,5371
4
4
  glaip_sdk/cli/__init__.py,sha256=xCCfuF1Yc7mpCDcfhHZTX0vizvtrDSLeT8MJ3V7m5A0,156
5
5
  glaip_sdk/cli/agent_config.py,sha256=VHjebw68wAdhGUzYdPH8qz10oADZPRgUQcPW6F7iHIU,2421
6
6
  glaip_sdk/cli/commands/__init__.py,sha256=x0CZlZbZHoHvuzfoTWIyEch6WmNnbPzxajrox6riYp0,173
7
- glaip_sdk/cli/commands/agents.py,sha256=cYkNAFDFTH5EDP4KTcJ8gEdLDxzEMI0OZQDkeyNs-TY,37378
8
- glaip_sdk/cli/commands/configure.py,sha256=SQziXzUE4-6G6Prd6rPizV1kFN9uCuUjDhfVAn8cAWU,7469
9
- glaip_sdk/cli/commands/mcps.py,sha256=USSjitNOmlLw8Jgt0WqnhnMBmuuoQRXiJjARD9qS_l0,12868
7
+ glaip_sdk/cli/commands/agents.py,sha256=xiFKK76AeqkHyyQo7asdqNDy_VqbIzFHBUEvdE6lnwQ,36943
8
+ glaip_sdk/cli/commands/configure.py,sha256=eRDzsaKV4fl2lJt8ieS4g2-xRnaa02eAAPW8xBf-tqA,7507
9
+ glaip_sdk/cli/commands/mcps.py,sha256=ZfmFkisXHHqgFH6WU7W5qPvfdt5Dxd5ZFZb_Ml3POoQ,12794
10
10
  glaip_sdk/cli/commands/models.py,sha256=lHEVuXT8Sq239C_2LneV8PimVZSm9DXJKajdSVO-N50,1496
11
- glaip_sdk/cli/commands/tools.py,sha256=ubzSKornMTCVkCvIvMPvWj2vOwGZzIyKysoR5mL20PY,16817
12
- glaip_sdk/cli/display.py,sha256=vFSj385MuesgyUJ7UnXIg6a9N9gL_XJzXjUnFUB6Ufs,8649
11
+ glaip_sdk/cli/commands/tools.py,sha256=Xm_qCe0h2EqhbqNuKTBvow1HMc7MbLYx6j92A6rLwu0,16743
12
+ glaip_sdk/cli/display.py,sha256=Wr86LTdwUaaTceXwi2v5rJAYaWaYYYhnt3PinSSAQP8,8605
13
13
  glaip_sdk/cli/io.py,sha256=GPkw3pQMLBGoD5GH-KlbKpNRlVWFZOXHE17F7V3kQsI,3343
14
14
  glaip_sdk/cli/main.py,sha256=Z1uMlmU72FFXC2ushNTWpemhQWKbIJNFJauH6FOCPqA,11059
15
15
  glaip_sdk/cli/resolution.py,sha256=4PEW_KZfN13k7GGEWpx3dOTywE_d-ujSlUhO4liov5w,1673
16
- glaip_sdk/cli/utils.py,sha256=bm4NqTlHsNXzZbFjXmHJMoV0qv9JPUMVSee47cH3bVw,36667
16
+ glaip_sdk/cli/utils.py,sha256=GQ_VwY374D8aLlySWYdExOZMap7Bb0nFIzS9gRhR5gs,37660
17
17
  glaip_sdk/cli/validators.py,sha256=USbBgY86AwuDHO-Q_g8g7hu-ot4NgITBsWjTWIl62ms,5569
18
18
  glaip_sdk/client/__init__.py,sha256=nYLXfBVTTWwKjP0e63iumPYO4k5FifwWaELQPaPIKIg,188
19
- glaip_sdk/client/agents.py,sha256=SRcj_fvMWjN_AOpOv8iVyF0LuiZqWMidW9pg8O2J3Xc,33892
20
- glaip_sdk/client/base.py,sha256=rn5qPsi-1UzRy2So0Uffg9CBnVY2QUld4suNgSHET_I,12409
19
+ glaip_sdk/client/agents.py,sha256=FSKubF40wptMNIheC3_iawiX2CRbhTcNLFiz4qkPC6k,34659
20
+ glaip_sdk/client/base.py,sha256=O3dv3I7PqY91gH1FehBMRZcSXjwimfeBcJuiXidDmqw,13700
21
21
  glaip_sdk/client/main.py,sha256=LlvYHP7-Hy7Eq1ep1kfk337K-Oue5SdKWJpqYfX9eXY,7993
22
22
  glaip_sdk/client/mcps.py,sha256=yxwrAtztElYDEGhp2EHRpeYUxNsOlTLTqtw9jSKJmcI,8936
23
- glaip_sdk/client/tools.py,sha256=ZvRRbXHvd33XUKqmKAIFSvz_IO-1glTvJNyxOeivK9Q,15962
23
+ glaip_sdk/client/tools.py,sha256=n8DIiOOf1YU_j9JK3Bx2-rDnkpckPi0MI9Ok2s1kwa4,16634
24
24
  glaip_sdk/client/validators.py,sha256=NtPsWjQLjj25LiUnmR-WuS8lL5p4MVRaYT9UVRmj9bo,8809
25
25
  glaip_sdk/config/constants.py,sha256=NgmPqJmpK1wgEds7T-_B6CDUBsvcsmIy27ms-Z8GFgY,902
26
26
  glaip_sdk/exceptions.py,sha256=QTVtwxRHMN4e8gGn0icXphZvdugiRvcSrlMYylwGsDc,1993
27
- glaip_sdk/models.py,sha256=HkX9jwC3eh2bjL4Hj7uwQR1RSz63tzxbMe_n0gLJHjE,8782
27
+ glaip_sdk/models.py,sha256=Ry_Ihd6FuC0JGb0Obd5T3A22AOp2r9xStQisfE8uo8c,8822
28
28
  glaip_sdk/rich_components.py,sha256=pmJd-81OQE8bC9UOXtga5rsax4zphKlzCZ1JoWbbQzQ,803
29
29
  glaip_sdk/utils/__init__.py,sha256=fmVGcUFa7G0CCfSMSqfNU2BqFl36G1gOFyDfTvtJfVw,926
30
30
  glaip_sdk/utils/agent_config.py,sha256=b7_J5DELyk0b_XEoi7tsxbS3wqzAKbMa-3_C-65pPIY,6791
31
- glaip_sdk/utils/client_utils.py,sha256=W1TBD8-f5RRh3CyiSYcTOtn_e6A_msIFXmgHQ0m-YMo,13072
31
+ glaip_sdk/utils/client_utils.py,sha256=M6rZloMKyONaZfI0RtU5tnkibwrIJL5Udw4wPMKkJcw,13588
32
32
  glaip_sdk/utils/display.py,sha256=94s9lYF_8ra8jpeqOkbVrUm8oidtCE6OtucyxLQPKmU,3105
33
33
  glaip_sdk/utils/general.py,sha256=V5hJrIpYDvDsldU_nChHpuvV2AwhFLUI7Qvcaihq_8A,2270
34
- glaip_sdk/utils/import_export.py,sha256=KJ_8wy-Ol92HiKAqO5vUz3Gn257jqWFsq3XEdRH-NXM,5393
34
+ glaip_sdk/utils/import_export.py,sha256=Wxt2QuWI7JexSkkcBOdTgeYs1nly35yppaTNeF28XJo,5400
35
35
  glaip_sdk/utils/rendering/__init__.py,sha256=vXjwk5rPhhfPyD8S0DnV4GFFEtPJp4HCCg1Um9SXfs0,70
36
36
  glaip_sdk/utils/rendering/formatting.py,sha256=_k8tkcobctmHvdygMljZF7-ALGXpD9-hHF1CNtM2KMU,7201
37
37
  glaip_sdk/utils/rendering/models.py,sha256=SS34_00FaoGuSYn-viBkAtIbq7cJNwwPjpxnvyeUmxI,1567
38
38
  glaip_sdk/utils/rendering/renderer/__init__.py,sha256=EXwVBmGkSYcype4ocAXo69Z1kXu0gpNXmhH5LW0_B7A,2939
39
- glaip_sdk/utils/rendering/renderer/base.py,sha256=DgZW55Eu6uj_NsCKa-O4unb7ujnNNaWD-54aPd7y5gU,38872
39
+ glaip_sdk/utils/rendering/renderer/base.py,sha256=4WdvYwsvCBtiIaB-LVteDORyxZN1HCT2jFfU0X0ReXY,39977
40
40
  glaip_sdk/utils/rendering/renderer/config.py,sha256=E4ER8TJJbqr1hcWjkwG7XROqLuccQy4EL99CbuLvSXE,783
41
41
  glaip_sdk/utils/rendering/renderer/console.py,sha256=4cLOw4Q1fkHkApuj6dWW8eYpeYdcT0t2SO5MbVt5UTc,1844
42
42
  glaip_sdk/utils/rendering/renderer/debug.py,sha256=FEYxAu4ZB0CjrJKevqQ2TKDgElA2cf6GqZXCNm12sNQ,3721
@@ -47,9 +47,9 @@ glaip_sdk/utils/rendering/steps.py,sha256=4zdeyKxMbUzCal4-yv8yf18144cs5wwXaxhe6m
47
47
  glaip_sdk/utils/resource_refs.py,sha256=0YzblJNfRhz9xhpaKE9aE68XEV-6_ssr0fIkiMVOka0,5489
48
48
  glaip_sdk/utils/rich_utils.py,sha256=-Ij-1bIJvnVAi6DrfftchIlMcvOTjVmSE0Qqax0EY_s,763
49
49
  glaip_sdk/utils/run_renderer.py,sha256=d_VMI6LbvHPUUeRmGqh5wK_lHqDEIAcym2iqpbtDad0,1365
50
- glaip_sdk/utils/serialization.py,sha256=WlWhvA2PDFGYXVw-OJG3zSKoXCv6gSh2YXgQmah490g,7866
50
+ glaip_sdk/utils/serialization.py,sha256=DAOxi42xgE3EFCcdMLxPhQblL3uWVhndJXA2Jc-UF-I,8051
51
51
  glaip_sdk/utils/validation.py,sha256=QNORcdyvuliEs4EH2_mkDgmoyT9utgl7YNhaf45SEf8,6992
52
- glaip_sdk-0.0.6a0.dist-info/METADATA,sha256=k7ejh3C-HH1B3wTtlzaoxQyv_3CbsEBlvwElArwVQnE,4944
53
- glaip_sdk-0.0.6a0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
54
- glaip_sdk-0.0.6a0.dist-info/entry_points.txt,sha256=EGs8NO8J1fdFMWA3CsF7sKBEvtHb_fujdCoNPhfMouE,47
55
- glaip_sdk-0.0.6a0.dist-info/RECORD,,
52
+ glaip_sdk-0.0.7.dist-info/METADATA,sha256=2NLkepPjdP_WEon0dKF2IZGi3Co6a4rzPznhpP_HAUY,4942
53
+ glaip_sdk-0.0.7.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
54
+ glaip_sdk-0.0.7.dist-info/entry_points.txt,sha256=EGs8NO8J1fdFMWA3CsF7sKBEvtHb_fujdCoNPhfMouE,47
55
+ glaip_sdk-0.0.7.dist-info/RECORD,,