Private
Public Access
Refactor docstrings to resolve DAG Context with SSDL shape and remove Threading sections
Keeps the ASCII layout map previews, baseline summaries, and state mutation blocks, while cleanly removing Threading & Safety sections and replacing DAG references with SSDL Shape notations.
This commit is contained in:
+36
-114
@@ -311,13 +311,8 @@ class App:
|
|||||||
self.controller, self.perf_monitor, self.history,
|
self.controller, self.perf_monitor, self.history,
|
||||||
self.show_command_palette, self.workspace_manager.
|
self.show_command_palette, self.workspace_manager.
|
||||||
|
|
||||||
DAG Render Context:
|
SSDL Shape:
|
||||||
Called by: main() at startup
|
`[I:init_controller] -> [I:init_workspace] -> [I:load_profiles]`
|
||||||
Calls: AppController.init_state(), AppController.start_services(),
|
|
||||||
WorkspaceManager.load_all_profiles()
|
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread during app startup.
|
|
||||||
|
|
||||||
[C: src/mcp_client.py:_DDGParser.__init__, src/mcp_client.py:_TextExtractor.__init__]
|
[C: src/mcp_client.py:_DDGParser.__init__, src/mcp_client.py:_TextExtractor.__init__]
|
||||||
"""
|
"""
|
||||||
@@ -612,12 +607,8 @@ class App:
|
|||||||
Initializes the ImGui runner (HelloImGui) and starts the main application loop.
|
Initializes the ImGui runner (HelloImGui) and starts the main application loop.
|
||||||
Loads system themes, default styling metrics, fonts, and sets up window docking layouts.
|
Loads system themes, default styling metrics, fonts, and sets up window docking layouts.
|
||||||
|
|
||||||
DAG Render Context:
|
SSDL Shape:
|
||||||
Called by: main()
|
`[I:hello_imgui] -> o-> [I:main_loop]`
|
||||||
Calls: hello_imgui.run(), _profiled_setup_style(), _profiled_post_init(), _load_fonts()
|
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Invokes the blocking GUI loop on the Main Thread.
|
|
||||||
|
|
||||||
[C: simulation/sim_base.py:run_sim, src/mcp_client.py:get_git_diff, src/project_manager.py:get_git_commit, src/rag_engine.py:RAGEngine._search_mcp, src/shell_runner.py:run_powershell, tests/conftest.py:kill_process_tree, tests/conftest.py:live_gui, tests/test_conductor_abort_event.py:test_conductor_abort_event_populated, tests/test_conductor_engine_v2.py:test_conductor_engine_dynamic_parsing_and_execution, tests/test_conductor_engine_v2.py:test_conductor_engine_run_executes_tickets_in_order, tests/test_extended_sims.py:test_ai_settings_sim_live, tests/test_extended_sims.py:test_context_sim_live, tests/test_extended_sims.py:test_execution_sim_live, tests/test_extended_sims.py:test_tools_sim_live, tests/test_external_editor_gui.py:get_vscode_processes, tests/test_external_editor_gui.py:test_vscode_launches_with_diff_view, tests/test_gui_custom_window.py:test_app_window_is_borderless, tests/test_headless_simulation.py:module, tests/test_headless_verification.py:test_headless_verification_error_and_qa_interceptor, tests/test_headless_verification.py:test_headless_verification_full_run, tests/test_mock_gemini_cli.py:run_mock, tests/test_orchestration_logic.py:test_conductor_engine_run, tests/test_parallel_execution.py:test_conductor_engine_pool_integration, tests/test_sim_ai_settings.py:test_ai_settings_simulation_run, tests/test_sim_context.py:test_context_simulation_run, tests/test_sim_execution.py:test_execution_simulation_run, tests/test_sim_tools.py:test_tools_simulation_run]
|
[C: simulation/sim_base.py:run_sim, src/mcp_client.py:get_git_diff, src/project_manager.py:get_git_commit, src/rag_engine.py:RAGEngine._search_mcp, src/shell_runner.py:run_powershell, tests/conftest.py:kill_process_tree, tests/conftest.py:live_gui, tests/test_conductor_abort_event.py:test_conductor_abort_event_populated, tests/test_conductor_engine_v2.py:test_conductor_engine_dynamic_parsing_and_execution, tests/test_conductor_engine_v2.py:test_conductor_engine_run_executes_tickets_in_order, tests/test_extended_sims.py:test_ai_settings_sim_live, tests/test_extended_sims.py:test_context_sim_live, tests/test_extended_sims.py:test_execution_sim_live, tests/test_extended_sims.py:test_tools_sim_live, tests/test_external_editor_gui.py:get_vscode_processes, tests/test_external_editor_gui.py:test_vscode_launches_with_diff_view, tests/test_gui_custom_window.py:test_app_window_is_borderless, tests/test_headless_simulation.py:module, tests/test_headless_verification.py:test_headless_verification_error_and_qa_interceptor, tests/test_headless_verification.py:test_headless_verification_full_run, tests/test_mock_gemini_cli.py:run_mock, tests/test_orchestration_logic.py:test_conductor_engine_run, tests/test_parallel_execution.py:test_conductor_engine_pool_integration, tests/test_sim_ai_settings.py:test_ai_settings_simulation_run, tests/test_sim_context.py:test_context_simulation_run, tests/test_sim_execution.py:test_execution_simulation_run, tests/test_sim_tools.py:test_tools_simulation_run]
|
||||||
"""
|
"""
|
||||||
@@ -844,12 +835,8 @@ class App:
|
|||||||
State Mutations:
|
State Mutations:
|
||||||
None (read-only state capture).
|
None (read-only state capture).
|
||||||
|
|
||||||
DAG Render Context:
|
SSDL Shape:
|
||||||
Called by: _handle_undo(), _handle_redo(), _handle_jump_to_history(), _handle_history_logic()
|
`[Q:ui_state] -> [I:copy] -> [T:snapshot]`
|
||||||
Calls: None
|
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread to avoid concurrent collection mutations.
|
|
||||||
"""
|
"""
|
||||||
from src import history
|
from src import history
|
||||||
import copy
|
import copy
|
||||||
@@ -878,12 +865,8 @@ class App:
|
|||||||
Modifies active UI variables (self.ui_ai_input, self.temperature, self.files, self.context_files, etc.)
|
Modifies active UI variables (self.ui_ai_input, self.temperature, self.files, self.context_files, etc.)
|
||||||
self._is_applying_snapshot (temporarily set to True)
|
self._is_applying_snapshot (temporarily set to True)
|
||||||
|
|
||||||
DAG Render Context:
|
SSDL Shape:
|
||||||
Called by: _handle_undo(), _handle_redo(), _handle_jump_to_history()
|
`[I:lock_flag] -> [S:ui_state] -> [I:unlock]`
|
||||||
Calls: FileItem.from_dict()
|
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread. Sets a lock flag during application.
|
|
||||||
"""
|
"""
|
||||||
self._is_applying_snapshot = True
|
self._is_applying_snapshot = True
|
||||||
try:
|
try:
|
||||||
@@ -927,12 +910,8 @@ class App:
|
|||||||
State Mutations:
|
State Mutations:
|
||||||
self._ini_capture_ready (set to True on first invocation to bypass initial ImGui frame bugs).
|
self._ini_capture_ready (set to True on first invocation to bypass initial ImGui frame bugs).
|
||||||
|
|
||||||
DAG Render Context:
|
SSDL Shape:
|
||||||
Called by: save_workspace_profile()
|
`[Q:ui_states] -> [B:ini_ready] -> [T:profile]`
|
||||||
Calls: imgui.save_ini_settings_to_memory()
|
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread. Defer-not-catch pattern prevents uncatchable C-level crashes.
|
|
||||||
"""
|
"""
|
||||||
if not getattr(self, "_ini_capture_ready", False):
|
if not getattr(self, "_ini_capture_ready", False):
|
||||||
self._ini_capture_ready = True
|
self._ini_capture_ready = True
|
||||||
@@ -971,12 +950,8 @@ class App:
|
|||||||
State Mutations:
|
State Mutations:
|
||||||
Modifies window visibility and panel configuration state variables.
|
Modifies window visibility and panel configuration state variables.
|
||||||
|
|
||||||
DAG Render Context:
|
SSDL Shape:
|
||||||
Called by: load_workspace_profile()
|
`[I:load_ini] -> [S:ui_states]`
|
||||||
Calls: imgui.load_ini_settings_from_memory()
|
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread to apply layout constraints safely.
|
|
||||||
"""
|
"""
|
||||||
imgui.load_ini_settings_from_memory(profile.ini_content)
|
imgui.load_ini_settings_from_memory(profile.ini_content)
|
||||||
self.show_windows.update(profile.show_windows)
|
self.show_windows.update(profile.show_windows)
|
||||||
@@ -1026,12 +1001,8 @@ class App:
|
|||||||
self.history (mutated to record index changes)
|
self.history (mutated to record index changes)
|
||||||
Modifies active UI variables via _apply_snapshot()
|
Modifies active UI variables via _apply_snapshot()
|
||||||
|
|
||||||
DAG Render Context:
|
SSDL Shape:
|
||||||
Called by: _gui_func() (via hotkey Ctrl+Y) or redo button click.
|
`[I:snapshot] -> [B:history] => [I:state]`
|
||||||
Calls: _take_snapshot(), _apply_snapshot(), HistoryManager.redo()
|
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread.
|
|
||||||
"""
|
"""
|
||||||
sys.stderr.write(f"[DEBUG History] _handle_redo called. can_redo={self.history.can_redo}\n")
|
sys.stderr.write(f"[DEBUG History] _handle_redo called. can_redo={self.history.can_redo}\n")
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
@@ -1052,12 +1023,8 @@ class App:
|
|||||||
State Mutations:
|
State Mutations:
|
||||||
runner_params settings are flushed to disk (imgui.save_ini_settings_to_disk).
|
runner_params settings are flushed to disk (imgui.save_ini_settings_to_disk).
|
||||||
|
|
||||||
DAG Render Context:
|
SSDL Shape:
|
||||||
Called by: HelloImGui on exit.
|
`[I:save_ini] -> [I:controller_shutdown]`
|
||||||
Calls: AppController.shutdown()
|
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Executes synchronously on the Main Thread.
|
|
||||||
|
|
||||||
[C: tests/conftest.py:app_instance, tests/conftest.py:mock_app]
|
[C: tests/conftest.py:app_instance, tests/conftest.py:mock_app]
|
||||||
"""
|
"""
|
||||||
@@ -1152,10 +1119,8 @@ class App:
|
|||||||
self.show_command_palette (toggled via Ctrl+Shift+P)
|
self.show_command_palette (toggled via Ctrl+Shift+P)
|
||||||
self._hot_reload_error (updated on Ctrl+Alt+R)
|
self._hot_reload_error (updated on Ctrl+Alt+R)
|
||||||
|
|
||||||
DAG Render Context:
|
SSDL Shape:
|
||||||
Called by: HelloImGui runner loop on every frame.
|
`o-> [I:hotkeys] -> [I:title_bar] -> [I:main_interface] -> [I:modals]`
|
||||||
Calls: render_main_interface(), render_custom_title_bar(),
|
|
||||||
_toggle_command_palette(), _trigger_hot_reload()
|
|
||||||
|
|
||||||
ASCII Layout Map:
|
ASCII Layout Map:
|
||||||
+---------------------------------------------------------+
|
+---------------------------------------------------------+
|
||||||
@@ -1168,11 +1133,7 @@ class App:
|
|||||||
| | | |
|
| | | |
|
||||||
| +----------------+ | [AI] | [Exec clutch] |
|
| +----------------+ | [AI] | [Exec clutch] |
|
||||||
| | Presets | | Analyzing code... | |
|
| | Presets | | Analyzing code... | |
|
||||||
| +----------------+ | | |
|
|
||||||
+--------------------+-------------------+----------------+
|
+--------------------+-------------------+----------------+
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread.
|
|
||||||
"""
|
"""
|
||||||
# One-shot: log when immapp first hands control to our render callback. The
|
# One-shot: log when immapp first hands control to our render callback. The
|
||||||
# span init -> here is window/GL/context creation + the font/style/post_init
|
# span init -> here is window/GL/context creation + the font/style/post_init
|
||||||
@@ -1851,12 +1812,8 @@ def render_diagnostics_panel(app: App) -> None:
|
|||||||
State Mutations:
|
State Mutations:
|
||||||
Updates app.perf_profiling_enabled and visibility in app.show_windows["Diagnostics"].
|
Updates app.perf_profiling_enabled and visibility in app.show_windows["Diagnostics"].
|
||||||
|
|
||||||
DAG Context / Render Flow:
|
SSDL Shape:
|
||||||
Called by: render_main_interface()
|
`[I] -> [B:perf_metrics] => [I:detailed_timings]`
|
||||||
Calls: app.perf_monitor.get_metrics()
|
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread.
|
|
||||||
"""
|
"""
|
||||||
if app.perf_profiling_enabled: app.perf_monitor.start_component("_render_diagnostics_panel")
|
if app.perf_profiling_enabled: app.perf_monitor.start_component("_render_diagnostics_panel")
|
||||||
with imscope.window("Diagnostics", app.show_windows.get("Diagnostics", False)) as (exp, opened):
|
with imscope.window("Diagnostics", app.show_windows.get("Diagnostics", False)) as (exp, opened):
|
||||||
@@ -2360,14 +2317,8 @@ def render_ai_settings_hub(app: App) -> None:
|
|||||||
State Mutations:
|
State Mutations:
|
||||||
None directly (delegated to child panels).
|
None directly (delegated to child panels).
|
||||||
|
|
||||||
DAG Context / Render Flow:
|
SSDL Shape:
|
||||||
Called by: render_main_interface()
|
`[I] -> [B:headers] => [I:sub-panels]`
|
||||||
Calls: render_persona_selector_panel(), render_provider_panel(),
|
|
||||||
render_system_prompts_panel(), render_rag_panel(),
|
|
||||||
render_agent_tools_panel()
|
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread.
|
|
||||||
"""
|
"""
|
||||||
render_persona_selector_panel(app)
|
render_persona_selector_panel(app)
|
||||||
if imgui.collapsing_header("Provider & Model"): render_provider_panel(app)
|
if imgui.collapsing_header("Provider & Model"): render_provider_panel(app)
|
||||||
@@ -2472,12 +2423,8 @@ def render_agent_tools_panel(app: App) -> None:
|
|||||||
State Mutations:
|
State Mutations:
|
||||||
Modifies app.ui_active_tool_preset and local UI flags.
|
Modifies app.ui_active_tool_preset and local UI flags.
|
||||||
|
|
||||||
DAG Context / Render Flow:
|
SSDL Shape:
|
||||||
Called by: render_ai_settings_hub()
|
`[Q:caps] -> [B:tool_calling] => [S:preset]`
|
||||||
Calls: app._get_active_capabilities()
|
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread.
|
|
||||||
"""
|
"""
|
||||||
caps = app._get_active_capabilities()
|
caps = app._get_active_capabilities()
|
||||||
if not caps.tool_calling:
|
if not caps.tool_calling:
|
||||||
@@ -3416,10 +3363,8 @@ def render_context_composition_panel(app: App) -> None:
|
|||||||
app.context_files (adds/removes file records)
|
app.context_files (adds/removes file records)
|
||||||
app.screenshots (adds/removes screen image attachments)
|
app.screenshots (adds/removes screen image attachments)
|
||||||
|
|
||||||
DAG Context / Render Flow:
|
SSDL Shape:
|
||||||
Called by: render_main_interface()
|
`[I:stats] -> [I:batch_actions] -> [I:files_table] -> [I:presets] -> [I:screenshots]`
|
||||||
Calls: render_context_batch_actions(), render_context_files_table(),
|
|
||||||
render_context_presets(), render_context_screenshots()
|
|
||||||
|
|
||||||
ASCII Layout Preview:
|
ASCII Layout Preview:
|
||||||
+-------------------------------------------------------------+
|
+-------------------------------------------------------------+
|
||||||
@@ -3433,9 +3378,6 @@ def render_context_composition_panel(app: App) -> None:
|
|||||||
| > Screenshots |
|
| > Screenshots |
|
||||||
+-------------------------------------------------------------+
|
+-------------------------------------------------------------+
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread.
|
|
||||||
|
|
||||||
[C: tests/test_auto_slices.py:test_add_all_triggers_auto_slices, tests/test_gui_fast_render.py:test_render_context_composition_panel_fast]
|
[C: tests/test_auto_slices.py:test_add_all_triggers_auto_slices, tests/test_gui_fast_render.py:test_render_context_composition_panel_fast]
|
||||||
"""
|
"""
|
||||||
if imgui.collapsing_header("Context Composition##panel"):
|
if imgui.collapsing_header("Context Composition##panel"):
|
||||||
@@ -3460,9 +3402,8 @@ def render_ast_inspector_modal(app: App) -> None:
|
|||||||
app.ui_editing_slices_file.ast_mask (mutated on node click)
|
app.ui_editing_slices_file.ast_mask (mutated on node click)
|
||||||
app.ui_editing_slices_file.custom_slices (mutated on slice modification)
|
app.ui_editing_slices_file.custom_slices (mutated on slice modification)
|
||||||
|
|
||||||
DAG Context / Render Flow:
|
SSDL Shape:
|
||||||
Called by: render_main_interface() (as popup modal render)
|
`[B:open_modal?] -> [Q:outline] -> [I:render_ast_tree]`
|
||||||
Calls: ts_c_get_code_outline(), py_get_code_outline()
|
|
||||||
|
|
||||||
ASCII Layout Preview:
|
ASCII Layout Preview:
|
||||||
+-------------------------------------------------------------+
|
+-------------------------------------------------------------+
|
||||||
@@ -3478,9 +3419,6 @@ def render_ast_inspector_modal(app: App) -> None:
|
|||||||
+--------------------+----------------------------------------+
|
+--------------------+----------------------------------------+
|
||||||
| [Add selected slices] [Close] |
|
| [Add selected slices] [Close] |
|
||||||
+-------------------------------------------------------------+
|
+-------------------------------------------------------------+
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread.
|
|
||||||
"""
|
"""
|
||||||
if getattr(app, 'show_structural_editor_modal', False):
|
if getattr(app, 'show_structural_editor_modal', False):
|
||||||
imgui.open_popup('Structural File Editor')
|
imgui.open_popup('Structural File Editor')
|
||||||
@@ -3739,9 +3677,8 @@ def render_context_files_table(app: App) -> None:
|
|||||||
app.context_files[index].view_mode (Def/Sig/Hide)
|
app.context_files[index].view_mode (Def/Sig/Hide)
|
||||||
app.context_files (elements removed via delete action)
|
app.context_files (elements removed via delete action)
|
||||||
|
|
||||||
DAG Context / Render Flow:
|
SSDL Shape:
|
||||||
Called by: render_context_composition_panel()
|
`[I:group_by_dir] -> o-> [I:dir_node] -> o-> [I:file_row]`
|
||||||
Calls: aggregate.group_files_by_dir()
|
|
||||||
|
|
||||||
ASCII Layout Preview:
|
ASCII Layout Preview:
|
||||||
+-------------------------------------------------------------+
|
+-------------------------------------------------------------+
|
||||||
@@ -3751,9 +3688,6 @@ def render_context_files_table(app: App) -> None:
|
|||||||
| [x] gui_2.py | [Sig v] [Inspect] [X] |
|
| [x] gui_2.py | [Sig v] [Inspect] [X] |
|
||||||
| [x] models.py | [Def v] [Inspect] [X] |
|
| [x] models.py | [Def v] [Inspect] [X] |
|
||||||
+--------------------------------------+----------------------+
|
+--------------------------------------+----------------------+
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread.
|
|
||||||
"""
|
"""
|
||||||
imgui.dummy(imgui.ImVec2(0, 4))
|
imgui.dummy(imgui.ImVec2(0, 4))
|
||||||
grouped_files = aggregate.group_files_by_dir(app.context_files)
|
grouped_files = aggregate.group_files_by_dir(app.context_files)
|
||||||
@@ -4172,9 +4106,8 @@ def render_discussion_entry(app: App, entry: dict, index: int) -> None:
|
|||||||
app.disc_entries[index]['read_mode'] (toggled by header button)
|
app.disc_entries[index]['read_mode'] (toggled by header button)
|
||||||
app.disc_entries[index]['role'] (changed by combo selection)
|
app.disc_entries[index]['role'] (changed by combo selection)
|
||||||
|
|
||||||
DAG Render Context:
|
SSDL Shape:
|
||||||
Called by: _render_discussion_hub() / render_discussion_hub()
|
`[I:header] -> [B:collapsed] => [I:preview] | [I:body] -> [I:footer]`
|
||||||
Calls: render_discussion_entry_read_mode(), thinking_parser.parse()
|
|
||||||
|
|
||||||
ASCII Layout Preview:
|
ASCII Layout Preview:
|
||||||
+-------------------------------------------------------------+
|
+-------------------------------------------------------------+
|
||||||
@@ -4188,9 +4121,6 @@ def render_discussion_entry(app: App, entry: dict, index: int) -> None:
|
|||||||
+-------------------------------------------------------------+
|
+-------------------------------------------------------------+
|
||||||
| [Ins] [Del] [Branch] |
|
| [Ins] [Del] [Branch] |
|
||||||
+-------------------------------------------------------------+
|
+-------------------------------------------------------------+
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread.
|
|
||||||
"""
|
"""
|
||||||
with imscope.id(f"disc_{index}"):
|
with imscope.id(f"disc_{index}"):
|
||||||
role = entry.get("role", "User")
|
role = entry.get("role", "User")
|
||||||
@@ -4286,12 +4216,8 @@ def render_discussion_entry_read_mode(app: App, entry: dict, index: int) -> None
|
|||||||
app.text_viewer_title, app.text_viewer_content, app.text_viewer_type (populated on [Source] click)
|
app.text_viewer_title, app.text_viewer_content, app.text_viewer_type (populated on [Source] click)
|
||||||
app.show_windows["Text Viewer"] (set to True on [Source] click)
|
app.show_windows["Text Viewer"] (set to True on [Source] click)
|
||||||
|
|
||||||
DAG Render Context:
|
SSDL Shape:
|
||||||
Called by: render_discussion_entry()
|
`[I:extract_rag] -> [B:definitions?] => [I:markdown]`
|
||||||
Calls: markdown_helper.render(), mcp_client.read_file()
|
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread.
|
|
||||||
"""
|
"""
|
||||||
with imscope.id(f"read_{index}"):
|
with imscope.id(f"read_{index}"):
|
||||||
content = entry["content"]
|
content = entry["content"]
|
||||||
@@ -4687,18 +4613,14 @@ def render_discussion_entry_controls(app: App) -> None:
|
|||||||
app.ui_auto_add_history (toggled via checkbox)
|
app.ui_auto_add_history (toggled via checkbox)
|
||||||
app.ai_status (updated upon saving)
|
app.ai_status (updated upon saving)
|
||||||
|
|
||||||
DAG Render Context:
|
SSDL Shape:
|
||||||
Called by: render_discussion_hub()
|
`[I:buttons] -> [B:clicks] => [S:entries_or_config]`
|
||||||
Calls: AppController._handle_compress_discussion(), App._flush_to_project()
|
|
||||||
|
|
||||||
ASCII Layout Preview:
|
ASCII Layout Preview:
|
||||||
+-------------------------------------------------------------+
|
+-------------------------------------------------------------+
|
||||||
| [+ Entry] [-All] [+All] [Clear All] [Save] [Compress] |
|
| [+ Entry] [-All] [+All] [Clear All] [Save] [Compress] |
|
||||||
| [x] Auto-add message & response to history |
|
| [x] Auto-add message & response to history |
|
||||||
+-------------------------------------------------------------+
|
+-------------------------------------------------------------+
|
||||||
|
|
||||||
Threading & Safety:
|
|
||||||
Must run synchronously on the Main Thread.
|
|
||||||
"""
|
"""
|
||||||
if imgui.button("+ Entry"): app.disc_entries.append({"role": app.disc_roles[0] if app.disc_roles else "User", "content": "", "collapsed": True, "ts": project_manager.now_ts()})
|
if imgui.button("+ Entry"): app.disc_entries.append({"role": app.disc_roles[0] if app.disc_roles else "User", "content": "", "collapsed": True, "ts": project_manager.now_ts()})
|
||||||
imgui.same_line()
|
imgui.same_line()
|
||||||
|
|||||||
Reference in New Issue
Block a user