aline-ai 0.6.5__py3-none-any.whl → 0.6.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.
- {aline_ai-0.6.5.dist-info → aline_ai-0.6.7.dist-info}/METADATA +1 -1
- {aline_ai-0.6.5.dist-info → aline_ai-0.6.7.dist-info}/RECORD +41 -34
- realign/__init__.py +1 -1
- realign/agent_names.py +79 -0
- realign/claude_hooks/stop_hook.py +3 -0
- realign/claude_hooks/terminal_state.py +43 -1
- realign/claude_hooks/user_prompt_submit_hook.py +3 -0
- realign/cli.py +62 -0
- realign/codex_detector.py +18 -3
- realign/codex_home.py +65 -16
- realign/codex_terminal_linker.py +18 -7
- realign/commands/agent.py +109 -0
- realign/commands/doctor.py +74 -1
- realign/commands/export_shares.py +448 -0
- realign/commands/import_shares.py +203 -1
- realign/commands/search.py +58 -29
- realign/commands/sync_agent.py +347 -0
- realign/dashboard/app.py +9 -9
- realign/dashboard/clipboard.py +54 -0
- realign/dashboard/screens/__init__.py +4 -0
- realign/dashboard/screens/agent_detail.py +333 -0
- realign/dashboard/screens/create_agent_info.py +244 -0
- realign/dashboard/screens/event_detail.py +6 -27
- realign/dashboard/styles/dashboard.tcss +22 -28
- realign/dashboard/tmux_manager.py +36 -10
- realign/dashboard/widgets/__init__.py +2 -2
- realign/dashboard/widgets/agents_panel.py +1248 -0
- realign/dashboard/widgets/events_table.py +4 -27
- realign/dashboard/widgets/sessions_table.py +4 -27
- realign/db/base.py +69 -0
- realign/db/locks.py +4 -0
- realign/db/schema.py +111 -2
- realign/db/sqlite_db.py +360 -2
- realign/events/agent_summarizer.py +157 -0
- realign/events/session_summarizer.py +25 -0
- realign/watcher_core.py +193 -5
- realign/worker_core.py +59 -1
- realign/dashboard/widgets/terminal_panel.py +0 -1653
- {aline_ai-0.6.5.dist-info → aline_ai-0.6.7.dist-info}/WHEEL +0 -0
- {aline_ai-0.6.5.dist-info → aline_ai-0.6.7.dist-info}/entry_points.txt +0 -0
- {aline_ai-0.6.5.dist-info → aline_ai-0.6.7.dist-info}/licenses/LICENSE +0 -0
- {aline_ai-0.6.5.dist-info → aline_ai-0.6.7.dist-info}/top_level.txt +0 -0
|
@@ -156,75 +156,69 @@ Tab:hover {
|
|
|
156
156
|
background: $surface-lighten-1;
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
/*
|
|
160
|
-
|
|
159
|
+
/* Agents tab: compact layout matching terminal panel */
|
|
160
|
+
AgentsPanel {
|
|
161
161
|
padding: 0 1;
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
|
|
164
|
+
AgentsPanel:focus {
|
|
165
165
|
border: none;
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
-
|
|
168
|
+
AgentsPanel .summary {
|
|
169
169
|
background: transparent;
|
|
170
170
|
border: none;
|
|
171
171
|
padding: 0;
|
|
172
172
|
margin: 0 0 1 0;
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
|
|
175
|
+
AgentsPanel .list {
|
|
176
176
|
background: transparent;
|
|
177
177
|
border: none;
|
|
178
178
|
padding: 0;
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
|
|
181
|
+
AgentsPanel Button {
|
|
182
182
|
min-width: 0;
|
|
183
183
|
background: transparent;
|
|
184
184
|
border: none;
|
|
185
185
|
padding: 0 1;
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
-
|
|
188
|
+
AgentsPanel Button:hover {
|
|
189
189
|
background: $surface-lighten-1;
|
|
190
190
|
}
|
|
191
191
|
|
|
192
|
-
|
|
193
|
-
background: $primary;
|
|
194
|
-
color: $text;
|
|
195
|
-
text-style: bold;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
TerminalPanel .terminal-row Button.terminal-switch {
|
|
192
|
+
AgentsPanel .agent-row Button.agent-name {
|
|
199
193
|
text-align: left;
|
|
200
|
-
content-align: left
|
|
194
|
+
content-align: left middle;
|
|
201
195
|
}
|
|
202
196
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
width:
|
|
206
|
-
min-width: 3;
|
|
197
|
+
AgentsPanel .agent-row Button.agent-create {
|
|
198
|
+
width: auto;
|
|
199
|
+
min-width: 8;
|
|
207
200
|
}
|
|
208
201
|
|
|
209
|
-
|
|
202
|
+
AgentsPanel .agent-row Button.agent-delete {
|
|
210
203
|
padding: 0;
|
|
211
204
|
width: 3;
|
|
212
205
|
min-width: 3;
|
|
213
206
|
}
|
|
214
207
|
|
|
215
|
-
|
|
208
|
+
AgentsPanel .terminal-list {
|
|
209
|
+
background: transparent;
|
|
216
210
|
border: none;
|
|
217
211
|
padding: 0;
|
|
218
|
-
|
|
219
|
-
overflow-y: auto;
|
|
212
|
+
margin: 0 0 1 2;
|
|
220
213
|
}
|
|
221
214
|
|
|
222
|
-
|
|
215
|
+
AgentsPanel .terminal-row Button.terminal-switch {
|
|
223
216
|
text-align: left;
|
|
224
|
-
content-align: left
|
|
217
|
+
content-align: left top;
|
|
225
218
|
}
|
|
226
219
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
220
|
+
AgentsPanel .terminal-row Button.terminal-close {
|
|
221
|
+
padding: 0;
|
|
222
|
+
width: 3;
|
|
223
|
+
min-width: 3;
|
|
230
224
|
}
|
|
@@ -776,16 +776,42 @@ def list_inner_windows() -> list[InnerWindow]:
|
|
|
776
776
|
|
|
777
777
|
if terminal_id:
|
|
778
778
|
persisted = state.get(terminal_id) or {}
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
if
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
if
|
|
788
|
-
|
|
779
|
+
updates: dict[str, str] = {}
|
|
780
|
+
persisted_provider = (persisted.get("provider") or "").strip()
|
|
781
|
+
if persisted_provider and persisted_provider != (provider or "").strip():
|
|
782
|
+
provider = persisted_provider
|
|
783
|
+
updates[OPT_PROVIDER] = persisted_provider
|
|
784
|
+
if not provider and persisted_provider:
|
|
785
|
+
provider = persisted_provider
|
|
786
|
+
persisted_session_type = (persisted.get("session_type") or "").strip()
|
|
787
|
+
if persisted_session_type and persisted_session_type != (session_type or "").strip():
|
|
788
|
+
session_type = persisted_session_type
|
|
789
|
+
updates[OPT_SESSION_TYPE] = persisted_session_type
|
|
790
|
+
if not session_type and persisted_session_type:
|
|
791
|
+
session_type = persisted_session_type
|
|
792
|
+
persisted_session_id = (persisted.get("session_id") or "").strip()
|
|
793
|
+
if persisted_session_id and persisted_session_id != (session_id or "").strip():
|
|
794
|
+
session_id = persisted_session_id
|
|
795
|
+
updates[OPT_SESSION_ID] = persisted_session_id
|
|
796
|
+
if not session_id and persisted_session_id:
|
|
797
|
+
session_id = persisted_session_id
|
|
798
|
+
persisted_transcript = (persisted.get("transcript_path") or "").strip()
|
|
799
|
+
if persisted_transcript and persisted_transcript != (transcript_path or "").strip():
|
|
800
|
+
transcript_path = persisted_transcript
|
|
801
|
+
updates[OPT_TRANSCRIPT_PATH] = persisted_transcript
|
|
802
|
+
if not transcript_path and persisted_transcript:
|
|
803
|
+
transcript_path = persisted_transcript
|
|
804
|
+
persisted_context = (persisted.get("context_id") or "").strip()
|
|
805
|
+
if persisted_context and persisted_context != (context_id or "").strip():
|
|
806
|
+
context_id = persisted_context
|
|
807
|
+
updates[OPT_CONTEXT_ID] = persisted_context
|
|
808
|
+
if not context_id and persisted_context:
|
|
809
|
+
context_id = persisted_context
|
|
810
|
+
if updates:
|
|
811
|
+
try:
|
|
812
|
+
set_inner_window_options(window_id, updates)
|
|
813
|
+
except Exception:
|
|
814
|
+
pass
|
|
789
815
|
|
|
790
816
|
transcript_session_id = _session_id_from_transcript_path(transcript_path)
|
|
791
817
|
if transcript_session_id:
|
|
@@ -8,7 +8,7 @@ from .events_table import EventsTable
|
|
|
8
8
|
from .config_panel import ConfigPanel
|
|
9
9
|
from .search_panel import SearchPanel
|
|
10
10
|
from .openable_table import OpenableDataTable
|
|
11
|
-
from .
|
|
11
|
+
from .agents_panel import AgentsPanel
|
|
12
12
|
|
|
13
13
|
__all__ = [
|
|
14
14
|
"AlineHeader",
|
|
@@ -19,5 +19,5 @@ __all__ = [
|
|
|
19
19
|
"ConfigPanel",
|
|
20
20
|
"SearchPanel",
|
|
21
21
|
"OpenableDataTable",
|
|
22
|
-
"
|
|
22
|
+
"AgentsPanel",
|
|
23
23
|
]
|