fixes
This commit is contained in:
@@ -214,5 +214,37 @@
|
|||||||
"C:\\Users\\Ed\\AppData\\Local\\Temp\\pytest-of-Ed\\pytest-1044\\test_force_full0\\other.txt": {
|
"C:\\Users\\Ed\\AppData\\Local\\Temp\\pytest-of-Ed\\pytest-1044\\test_force_full0\\other.txt": {
|
||||||
"hash": "04d61c0832f9cbc2a210334352425d2519890a0a5945da96ccc5bd9ff101c4d3",
|
"hash": "04d61c0832f9cbc2a210334352425d2519890a0a5945da96ccc5bd9ff101c4d3",
|
||||||
"summary": "This document is a simple text file containing ten lines of content, with the first eight lines previewed. Its purpose appears to be for basic data storage or as a placeholder.\n\n**Outline:**\n**TXT** \u2014 10 lines\npreview:\n```\nline1\nline2\nline3\nline4\nline5\nline6\nline7\nline8\n```"
|
"summary": "This document is a simple text file containing ten lines of content, with the first eight lines previewed. Its purpose appears to be for basic data storage or as a placeholder.\n\n**Outline:**\n**TXT** \u2014 10 lines\npreview:\n```\nline1\nline2\nline3\nline4\nline5\nline6\nline7\nline8\n```"
|
||||||
|
},
|
||||||
|
"C:\\Users\\Ed\\AppData\\Local\\Temp\\pytest-of-Ed\\pytest-1064\\test_auto_aggregate_skip0\\file1.txt": {
|
||||||
|
"hash": "d0b425e00e15a0d36b9b361f02bab63563aed6cb4665083905386c55d5b679fa",
|
||||||
|
"summary": "This document contains a single line of text, \"content1\". Its purpose and key takeaways are limited to this singular piece of content.\n\n**Outline:**\n**TXT** \u2014 1 lines\npreview:\n```\ncontent1\n```"
|
||||||
|
},
|
||||||
|
"C:\\Users\\Ed\\AppData\\Local\\Temp\\pytest-of-Ed\\pytest-1065\\test_auto_aggregate_skip0\\file1.txt": {
|
||||||
|
"hash": "d0b425e00e15a0d36b9b361f02bab63563aed6cb4665083905386c55d5b679fa",
|
||||||
|
"summary": "This document, `file1.txt`, contains a single line of text: \"content1\". Its purpose is to present this specific content.\n\n**Outline:**\n**TXT** \u2014 1 lines\npreview:\n```\ncontent1\n```"
|
||||||
|
},
|
||||||
|
"C:\\Users\\Ed\\AppData\\Local\\Temp\\pytest-of-Ed\\pytest-1067\\test_auto_aggregate_skip0\\file1.txt": {
|
||||||
|
"hash": "d0b425e00e15a0d36b9b361f02bab63563aed6cb4665083905386c55d5b679fa",
|
||||||
|
"summary": "This document, `file1.txt`, contains a single line of text: \"content1\". Its purpose appears to be to hold this specific piece of content.\n\n**Outline:**\n**TXT** \u2014 1 lines\npreview:\n```\ncontent1\n```"
|
||||||
|
},
|
||||||
|
"C:\\Users\\Ed\\AppData\\Local\\Temp\\pytest-of-Ed\\pytest-1068\\test_auto_aggregate_skip0\\file1.txt": {
|
||||||
|
"hash": "d0b425e00e15a0d36b9b361f02bab63563aed6cb4665083905386c55d5b679fa",
|
||||||
|
"summary": "This document, `file1.txt`, contains a single line of text: \"content1\". Its purpose is to present this specific content.\n\n**Outline:**\n**TXT** \u2014 1 lines\npreview:\n```\ncontent1\n```"
|
||||||
|
},
|
||||||
|
"C:\\Users\\Ed\\AppData\\Local\\Temp\\pytest-of-Ed\\pytest-1069\\test_auto_aggregate_skip0\\file1.txt": {
|
||||||
|
"hash": "d0b425e00e15a0d36b9b361f02bab63563aed6cb4665083905386c55d5b679fa",
|
||||||
|
"summary": "This document, `file1.txt`, contains a single line of text: \"content1\". Its purpose appears to be to hold this specific piece of content.\n\n**Outline:**\n**TXT** \u2014 1 lines\npreview:\n```\ncontent1\n```"
|
||||||
|
},
|
||||||
|
"C:\\Users\\Ed\\AppData\\Local\\Temp\\pytest-of-Ed\\pytest-1070\\test_auto_aggregate_skip0\\file1.txt": {
|
||||||
|
"hash": "d0b425e00e15a0d36b9b361f02bab63563aed6cb4665083905386c55d5b679fa",
|
||||||
|
"summary": "This document, `file1.txt`, contains a single line of text: \"content1\". Its purpose appears to be to hold this specific piece of content.\n\n**Outline:**\n**TXT** \u2014 1 lines\npreview:\n```\ncontent1\n```"
|
||||||
|
},
|
||||||
|
"C:\\Users\\Ed\\AppData\\Local\\Temp\\pytest-of-Ed\\pytest-1071\\test_auto_aggregate_skip0\\file1.txt": {
|
||||||
|
"hash": "d0b425e00e15a0d36b9b361f02bab63563aed6cb4665083905386c55d5b679fa",
|
||||||
|
"summary": "This document contains a single line of text, \"content1\". Its purpose is to present this specific content.\n\n**Outline:**\n**TXT** \u2014 1 lines\npreview:\n```\ncontent1\n```"
|
||||||
|
},
|
||||||
|
"C:\\Users\\Ed\\AppData\\Local\\Temp\\pytest-of-Ed\\pytest-1072\\test_auto_aggregate_skip0\\file1.txt": {
|
||||||
|
"hash": "d0b425e00e15a0d36b9b361f02bab63563aed6cb4665083905386c55d5b679fa",
|
||||||
|
"summary": "This document, `file1.txt`, contains a single line of text: \"content1\". Its purpose appears to be to hold this specific piece of content.\n\n**Outline:**\n**TXT** \u2014 1 lines\npreview:\n```\ncontent1\n```"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -34,7 +34,7 @@ This file tracks all major tracks for the project. Each track has its own detail
|
|||||||
*Link: [./tracks/decouple_gui_log_loading_20260507/](./tracks/decouple_gui_log_loading_20260507/)*
|
*Link: [./tracks/decouple_gui_log_loading_20260507/](./tracks/decouple_gui_log_loading_20260507/)*
|
||||||
*Goal: Move Tkinter directory selection out of AppController and into gui_2.py.*
|
*Goal: Move Tkinter directory selection out of AppController and into gui_2.py.*
|
||||||
|
|
||||||
7. [ ] **Track: Refactor Context Aggregation Pipeline**
|
7. [~] **Track: Refactor Context Aggregation Pipeline**
|
||||||
*Link: [./tracks/refactor_context_aggregation_pipeline_20260507/](./tracks/refactor_context_aggregation_pipeline_20260507/)*
|
*Link: [./tracks/refactor_context_aggregation_pipeline_20260507/](./tracks/refactor_context_aggregation_pipeline_20260507/)*
|
||||||
*Goal: Modernize src/aggregate.py and consolidate legacy tier builders.*
|
*Goal: Modernize src/aggregate.py and consolidate legacy tier builders.*
|
||||||
|
|
||||||
|
|||||||
@@ -44,3 +44,26 @@ PROMPT:
|
|||||||
role: tool
|
role: tool
|
||||||
Here are the results: {"content": "done"}
|
Here are the results: {"content": "done"}
|
||||||
------------------
|
------------------
|
||||||
|
--- MOCK INVOKED ---
|
||||||
|
ARGS: ['tests/mock_gemini_cli.py']
|
||||||
|
PROMPT:
|
||||||
|
PATH: Epic Initialization — please produce tracks
|
||||||
|
------------------
|
||||||
|
--- MOCK INVOKED ---
|
||||||
|
ARGS: ['tests/mock_gemini_cli.py']
|
||||||
|
PROMPT:
|
||||||
|
Please generate the implementation tickets for this track.
|
||||||
|
------------------
|
||||||
|
--- MOCK INVOKED ---
|
||||||
|
ARGS: ['tests/mock_gemini_cli.py']
|
||||||
|
PROMPT:
|
||||||
|
Please read test.txt
|
||||||
|
You are assigned to Ticket T1.
|
||||||
|
Task Description: do something
|
||||||
|
------------------
|
||||||
|
--- MOCK INVOKED ---
|
||||||
|
ARGS: ['tests/mock_gemini_cli.py']
|
||||||
|
PROMPT:
|
||||||
|
role: tool
|
||||||
|
Here are the results: {"content": "done"}
|
||||||
|
------------------
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ active = "main"
|
|||||||
|
|
||||||
[discussions.main]
|
[discussions.main]
|
||||||
git_commit = ""
|
git_commit = ""
|
||||||
last_updated = "2026-05-09T17:31:54"
|
last_updated = "2026-05-10T10:35:34"
|
||||||
history = []
|
history = []
|
||||||
|
|||||||
+4
-1
@@ -189,7 +189,7 @@ class HookHandler(BaseHTTPRequestHandler):
|
|||||||
result["tracks"] = _get_app_attr(app, "tracks", [])
|
result["tracks"] = _get_app_attr(app, "tracks", [])
|
||||||
result["proposed_tracks"] = _get_app_attr(app, "proposed_tracks", [])
|
result["proposed_tracks"] = _get_app_attr(app, "proposed_tracks", [])
|
||||||
result["mma_streams"] = _get_app_attr(app, "mma_streams", {})
|
result["mma_streams"] = _get_app_attr(app, "mma_streams", {})
|
||||||
result["mma_tier_usage"] = _get_app_attr(app, "mma_tier_usage", {})
|
result["tier_usage"] = _get_app_attr(app, "mma_tier_usage", {})
|
||||||
finally: event.set()
|
finally: event.set()
|
||||||
lock = _get_app_attr(app, "_pending_gui_tasks_lock")
|
lock = _get_app_attr(app, "_pending_gui_tasks_lock")
|
||||||
tasks = _get_app_attr(app, "_pending_gui_tasks")
|
tasks = _get_app_attr(app, "_pending_gui_tasks")
|
||||||
@@ -212,6 +212,9 @@ class HookHandler(BaseHTTPRequestHandler):
|
|||||||
result["thinking"] = status in ["sending...", "running powershell..."]
|
result["thinking"] = status in ["sending...", "running powershell..."]
|
||||||
result["live"] = status in ["running powershell...", "fetching url...", "searching web...", "powershell done, awaiting AI..."]
|
result["live"] = status in ["running powershell...", "fetching url...", "searching web...", "powershell done, awaiting AI..."]
|
||||||
result["prior"] = _get_app_attr(app, "is_viewing_prior_session", False)
|
result["prior"] = _get_app_attr(app, "is_viewing_prior_session", False)
|
||||||
|
perf = _get_app_attr(app, "perf_monitor")
|
||||||
|
if perf:
|
||||||
|
result.update(perf.get_metrics())
|
||||||
finally: event.set()
|
finally: event.set()
|
||||||
lock = _get_app_attr(app, "_pending_gui_tasks_lock")
|
lock = _get_app_attr(app, "_pending_gui_tasks_lock")
|
||||||
tasks = _get_app_attr(app, "_pending_gui_tasks")
|
tasks = _get_app_attr(app, "_pending_gui_tasks")
|
||||||
|
|||||||
@@ -216,7 +216,6 @@ class AppController:
|
|||||||
"Tier 3": {"input": 0, "output": 0, "provider": "gemini", "model": "gemini-2.5-flash-lite", "tool_preset": None},
|
"Tier 3": {"input": 0, "output": 0, "provider": "gemini", "model": "gemini-2.5-flash-lite", "tool_preset": None},
|
||||||
"Tier 4": {"input": 0, "output": 0, "provider": "gemini", "model": "gemini-2.5-flash-lite", "tool_preset": None},
|
"Tier 4": {"input": 0, "output": 0, "provider": "gemini", "model": "gemini-2.5-flash-lite", "tool_preset": None},
|
||||||
}
|
}
|
||||||
self.perf_monitor: performance_monitor.PerformanceMonitor = performance_monitor.PerformanceMonitor()
|
|
||||||
self._last_telemetry_time: float = 0.0
|
self._last_telemetry_time: float = 0.0
|
||||||
self._pending_gui_tasks: List[Dict[str, Any]] = []
|
self._pending_gui_tasks: List[Dict[str, Any]] = []
|
||||||
self._api_event_queue: List[Dict[str, Any]] = []
|
self._api_event_queue: List[Dict[str, Any]] = []
|
||||||
@@ -858,8 +857,13 @@ class AppController:
|
|||||||
for tier, data in new_usage.items():
|
for tier, data in new_usage.items():
|
||||||
if tier in self.mma_tier_usage:
|
if tier in self.mma_tier_usage:
|
||||||
# Update usage counts but keep selected model/provider if not in update
|
# Update usage counts but keep selected model/provider if not in update
|
||||||
self.mma_tier_usage[tier]["input"] = data.get("input", self.mma_tier_usage[tier]["input"])
|
input_val = data.get("input")
|
||||||
self.mma_tier_usage[tier]["output"] = data.get("output", self.mma_tier_usage[tier]["output"])
|
if input_val is not None:
|
||||||
|
self.mma_tier_usage[tier]["input"] = input_val
|
||||||
|
|
||||||
|
output_val = data.get("output")
|
||||||
|
if output_val is not None:
|
||||||
|
self.mma_tier_usage[tier]["output"] = output_val
|
||||||
if "model" in data: self.mma_tier_usage[tier]["model"] = data["model"]
|
if "model" in data: self.mma_tier_usage[tier]["model"] = data["model"]
|
||||||
if "provider" in data: self.mma_tier_usage[tier]["provider"] = data["provider"]
|
if "provider" in data: self.mma_tier_usage[tier]["provider"] = data["provider"]
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ Integration:
|
|||||||
- Exposed via Hook API at /api/performance
|
- Exposed via Hook API at /api/performance
|
||||||
"""
|
"""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
import sys
|
||||||
import time
|
import time
|
||||||
import psutil
|
import psutil
|
||||||
import threading
|
import threading
|
||||||
@@ -241,6 +242,7 @@ class PerformanceMonitor:
|
|||||||
cpu = self._cpu_percent
|
cpu = self._cpu_percent
|
||||||
ilag = self._input_lag_ms
|
ilag = self._input_lag_ms
|
||||||
last_calc_fps = self._last_calculated_fps
|
last_calc_fps = self._last_calculated_fps
|
||||||
|
total_frames = float(self._frame_count)
|
||||||
timings_snapshot = dict(self._component_timings)
|
timings_snapshot = dict(self._component_timings)
|
||||||
counts_snapshot = dict(self._component_counts)
|
counts_snapshot = dict(self._component_counts)
|
||||||
max_snapshot = dict(self._component_max)
|
max_snapshot = dict(self._component_max)
|
||||||
@@ -254,7 +256,8 @@ class PerformanceMonitor:
|
|||||||
'cpu_percent': cpu,
|
'cpu_percent': cpu,
|
||||||
'cpu_percent_avg': self._get_avg('cpu_percent'),
|
'cpu_percent_avg': self._get_avg('cpu_percent'),
|
||||||
'input_lag_ms': ilag,
|
'input_lag_ms': ilag,
|
||||||
'input_lag_ms_avg': self._get_avg('input_lag_ms')
|
'input_lag_ms_avg': self._get_avg('input_lag_ms'),
|
||||||
|
'total_frames': total_frames
|
||||||
}
|
}
|
||||||
for name, elapsed in timings_snapshot.items():
|
for name, elapsed in timings_snapshot.items():
|
||||||
metrics[f'time_{name}_ms'] = elapsed
|
metrics[f'time_{name}_ms'] = elapsed
|
||||||
|
|||||||
Reference in New Issue
Block a user