glaip-sdk 0.7.28__py3-none-any.whl → 0.7.30__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.
- glaip_sdk/cli/slash/tui/remote_runs_app.py +21 -11
- glaip_sdk/utils/import_resolver.py +38 -1
- {glaip_sdk-0.7.28.dist-info → glaip_sdk-0.7.30.dist-info}/METADATA +1 -1
- {glaip_sdk-0.7.28.dist-info → glaip_sdk-0.7.30.dist-info}/RECORD +7 -7
- {glaip_sdk-0.7.28.dist-info → glaip_sdk-0.7.30.dist-info}/WHEEL +0 -0
- {glaip_sdk-0.7.28.dist-info → glaip_sdk-0.7.30.dist-info}/entry_points.txt +0 -0
- {glaip_sdk-0.7.28.dist-info → glaip_sdk-0.7.30.dist-info}/top_level.txt +0 -0
|
@@ -24,7 +24,7 @@ from textual import events
|
|
|
24
24
|
from textual._context import NoActiveAppError
|
|
25
25
|
from textual.app import App, ComposeResult, ScreenStackError
|
|
26
26
|
from textual.binding import Binding
|
|
27
|
-
from textual.containers import Horizontal
|
|
27
|
+
from textual.containers import Horizontal, ScrollableContainer
|
|
28
28
|
from textual.coordinate import Coordinate
|
|
29
29
|
from textual.screen import Screen
|
|
30
30
|
from textual.widgets import DataTable, Footer, Input, RichLog, Static, TextArea
|
|
@@ -161,6 +161,13 @@ class RunsHarlequinScreen(ToastHandlerMixin, ClipboardToastMixin, BackgroundTask
|
|
|
161
161
|
padding: 1;
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
+
#right-pane-body {
|
|
165
|
+
height: 100%;
|
|
166
|
+
overflow-y: auto;
|
|
167
|
+
scrollbar-size: 1 1;
|
|
168
|
+
scrollbar-color: $accent;
|
|
169
|
+
}
|
|
170
|
+
|
|
164
171
|
.pane-title {
|
|
165
172
|
color: $warning;
|
|
166
173
|
text-style: bold;
|
|
@@ -182,16 +189,15 @@ class RunsHarlequinScreen(ToastHandlerMixin, ClipboardToastMixin, BackgroundTask
|
|
|
182
189
|
border: solid $secondary;
|
|
183
190
|
padding: 1;
|
|
184
191
|
margin-bottom: 1;
|
|
185
|
-
height:
|
|
192
|
+
height: auto;
|
|
186
193
|
min-height: 3;
|
|
187
|
-
overflow-y: auto;
|
|
188
194
|
}
|
|
189
195
|
|
|
190
196
|
.step-list {
|
|
191
197
|
border: solid $secondary;
|
|
192
198
|
padding: 1;
|
|
193
|
-
height:
|
|
194
|
-
|
|
199
|
+
height: auto;
|
|
200
|
+
min-height: 5;
|
|
195
201
|
}
|
|
196
202
|
|
|
197
203
|
.status-bar {
|
|
@@ -300,12 +306,14 @@ class RunsHarlequinScreen(ToastHandlerMixin, ClipboardToastMixin, BackgroundTask
|
|
|
300
306
|
self._transcript_log = RichLog(id=RUNS_DETAIL_TRANSCRIPT_ID, wrap=False, classes="step-list")
|
|
301
307
|
self._transcript_log.can_focus = True
|
|
302
308
|
|
|
303
|
-
|
|
304
|
-
right_pane.mount(self.
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
+
self._right_pane_body = ScrollableContainer(id="right-pane-body")
|
|
310
|
+
right_pane.mount(self._right_pane_body)
|
|
311
|
+
self._right_pane_body.mount(self._detail_title)
|
|
312
|
+
self._right_pane_body.mount(self._detail_meta)
|
|
313
|
+
self._right_pane_body.mount(self._input_title)
|
|
314
|
+
self._right_pane_body.mount(self._input_body)
|
|
315
|
+
self._right_pane_body.mount(self._transcript_title)
|
|
316
|
+
self._right_pane_body.mount(self._transcript_log)
|
|
309
317
|
|
|
310
318
|
self._ensure_toast_bus()
|
|
311
319
|
try:
|
|
@@ -423,10 +431,12 @@ class RunsHarlequinScreen(ToastHandlerMixin, ClipboardToastMixin, BackgroundTask
|
|
|
423
431
|
|
|
424
432
|
def action_transcript_page_up(self) -> None:
|
|
425
433
|
"""Scroll the transcript up one page."""
|
|
434
|
+
self._transcript_log.scroll_visible(animate=False)
|
|
426
435
|
self._transcript_log.action_page_up()
|
|
427
436
|
|
|
428
437
|
def action_transcript_page_down(self) -> None:
|
|
429
438
|
"""Scroll the transcript down one page."""
|
|
439
|
+
self._transcript_log.scroll_visible(animate=False)
|
|
430
440
|
self._transcript_log.action_page_down()
|
|
431
441
|
|
|
432
442
|
def action_focus_filter(self) -> None:
|
|
@@ -145,9 +145,31 @@ class ImportResolver:
|
|
|
145
145
|
return self._is_local_package_import(node.module)
|
|
146
146
|
|
|
147
147
|
# Handle simple module imports
|
|
148
|
+
# First, check if it's the package root (matched via project markers)
|
|
149
|
+
if self._is_package_root_import(node.module):
|
|
150
|
+
return True
|
|
151
|
+
|
|
152
|
+
# Then check for local file in tool_dir
|
|
148
153
|
potential_file = self.tool_dir / f"{node.module}.py"
|
|
149
154
|
return potential_file.exists()
|
|
150
155
|
|
|
156
|
+
def _is_package_root_import(self, module_name: str) -> bool:
|
|
157
|
+
"""Check if a simple module name is a package root in the ancestor chain.
|
|
158
|
+
|
|
159
|
+
Args:
|
|
160
|
+
module_name: Simple module name (no dots).
|
|
161
|
+
|
|
162
|
+
Returns:
|
|
163
|
+
True if the module name matches any parent directory that could be a package.
|
|
164
|
+
"""
|
|
165
|
+
# Check all ancestors for a matching directory name
|
|
166
|
+
current = self.tool_dir
|
|
167
|
+
while current != current.parent:
|
|
168
|
+
if module_name == current.name:
|
|
169
|
+
return True
|
|
170
|
+
current = current.parent
|
|
171
|
+
return False
|
|
172
|
+
|
|
151
173
|
def _is_local_relative_import(self, node: ast.ImportFrom) -> bool:
|
|
152
174
|
"""Check if a relative import is local.
|
|
153
175
|
|
|
@@ -366,7 +388,22 @@ class ImportResolver:
|
|
|
366
388
|
"""
|
|
367
389
|
if "." in module_name:
|
|
368
390
|
return self._resolve_dotted_module_path(module_name)
|
|
369
|
-
|
|
391
|
+
|
|
392
|
+
# For simple module names, check if it's a file in tool_dir or an ancestor package
|
|
393
|
+
potential_file = self.tool_dir / f"{module_name}.py"
|
|
394
|
+
if potential_file.exists():
|
|
395
|
+
return potential_file
|
|
396
|
+
|
|
397
|
+
# Check if it's an ancestor package (directory with __init__.py)
|
|
398
|
+
current = self.tool_dir
|
|
399
|
+
while current != current.parent:
|
|
400
|
+
potential_package_init = current / module_name / INIT_FILE
|
|
401
|
+
if potential_package_init.exists():
|
|
402
|
+
return potential_package_init
|
|
403
|
+
current = current.parent
|
|
404
|
+
|
|
405
|
+
# Fallback to the file path (will fail later if not found)
|
|
406
|
+
return potential_file
|
|
370
407
|
|
|
371
408
|
def resolve_relative_import_path(self, node: ast.ImportFrom) -> Path:
|
|
372
409
|
"""Resolve relative import to file path.
|
|
@@ -90,7 +90,7 @@ glaip_sdk/cli/slash/tui/context.py,sha256=mzI4TDXnfZd42osACp5uo10d10y1_A0z6IxRK1
|
|
|
90
90
|
glaip_sdk/cli/slash/tui/indicators.py,sha256=jV3fFvEVWQ0inWJJ-B1fMsdkF0Uq2zwX3xcl0YWPHSE,11768
|
|
91
91
|
glaip_sdk/cli/slash/tui/keybind_registry.py,sha256=_rK05BxTxNudYc4iJ9gDxpgeUkjDAq8rarIT-9A-jyM,6739
|
|
92
92
|
glaip_sdk/cli/slash/tui/loading.py,sha256=Ku7HyQ_h-r2dJQ5aIEaCOi5PUu5gSsYle8oiKHIxfKI,2336
|
|
93
|
-
glaip_sdk/cli/slash/tui/remote_runs_app.py,sha256=
|
|
93
|
+
glaip_sdk/cli/slash/tui/remote_runs_app.py,sha256=FWNbkoSSspunD5WY2N0xlxuwtJOMEftnMQpuU67WLH0,41061
|
|
94
94
|
glaip_sdk/cli/slash/tui/terminal.py,sha256=ZAC3sB17TGpl-GFeRVm_nI8DQTN3pyti3ynlZ41wT_A,12323
|
|
95
95
|
glaip_sdk/cli/slash/tui/toast.py,sha256=UmP0_UAQcp0mOdX1iIS8W3gGDb14Z3kYGmbN_NvYDls,13494
|
|
96
96
|
glaip_sdk/cli/slash/tui/layouts/__init__.py,sha256=KT77pZHa7Wz84QlHYT2mfhQ_AXUA-T0eHv_HtAvc1ac,473
|
|
@@ -179,7 +179,7 @@ glaip_sdk/utils/display.py,sha256=zu3SYqxj9hPyEN8G1vIXv_yXBkV8jLLCXEg2rs8NlzM,44
|
|
|
179
179
|
glaip_sdk/utils/export.py,sha256=1NxxE3wGsA1auzecG5oJw5ELB4VmPljoeIkGhrGOh1I,5006
|
|
180
180
|
glaip_sdk/utils/general.py,sha256=3HSVIopUsIymPaim-kP2lqLX75TkkdIVLe6g3UKabZ0,1507
|
|
181
181
|
glaip_sdk/utils/import_export.py,sha256=RCvoydm_6_L7_J1igcE6IYDunqgS5mQUbWT4VGrytMw,5510
|
|
182
|
-
glaip_sdk/utils/import_resolver.py,sha256=
|
|
182
|
+
glaip_sdk/utils/import_resolver.py,sha256=Vwvg1FoODM15MiQ3A7d3fImSP13bYHOnD8WoxVL49L0,29131
|
|
183
183
|
glaip_sdk/utils/instructions.py,sha256=MTk93lsq3I8aRnvnRMSXXNMzcpnaIM_Pm3Aiiiq3GBc,2997
|
|
184
184
|
glaip_sdk/utils/resource_refs.py,sha256=vF34kyAtFBLnaKnQVrsr2st1JiSxVbIZ4yq0DelJvCI,5966
|
|
185
185
|
glaip_sdk/utils/run_renderer.py,sha256=d_VMI6LbvHPUUeRmGqh5wK_lHqDEIAcym2iqpbtDad0,1365
|
|
@@ -220,8 +220,8 @@ glaip_sdk/utils/rendering/steps/format.py,sha256=Chnq7OBaj8XMeBntSBxrX5zSmrYeGcO
|
|
|
220
220
|
glaip_sdk/utils/rendering/steps/manager.py,sha256=BiBmTeQMQhjRMykgICXsXNYh1hGsss-fH9BIGVMWFi0,13194
|
|
221
221
|
glaip_sdk/utils/rendering/viewer/__init__.py,sha256=XrxmE2cMAozqrzo1jtDFm8HqNtvDcYi2mAhXLXn5CjI,457
|
|
222
222
|
glaip_sdk/utils/rendering/viewer/presenter.py,sha256=mlLMTjnyeyPVtsyrAbz1BJu9lFGQSlS-voZ-_Cuugv0,5725
|
|
223
|
-
glaip_sdk-0.7.
|
|
224
|
-
glaip_sdk-0.7.
|
|
225
|
-
glaip_sdk-0.7.
|
|
226
|
-
glaip_sdk-0.7.
|
|
227
|
-
glaip_sdk-0.7.
|
|
223
|
+
glaip_sdk-0.7.30.dist-info/METADATA,sha256=ge4c5VT6WwDsNDAoXUhM2efYmYwZ7ygCJ2F_jdLujbc,8686
|
|
224
|
+
glaip_sdk-0.7.30.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
225
|
+
glaip_sdk-0.7.30.dist-info/entry_points.txt,sha256=NkhO6FfgX9Zrjn63GuKphf-dLw7KNJvucAcXc7P3aMk,54
|
|
226
|
+
glaip_sdk-0.7.30.dist-info/top_level.txt,sha256=td7yXttiYX2s94-4wFhv-5KdT0rSZ-pnJRSire341hw,10
|
|
227
|
+
glaip_sdk-0.7.30.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|