From 1eb8c4c78cdcef924c499ee1ae5294019c820bd6 Mon Sep 17 00:00:00 2001 From: Jiaqing Liang Date: Mon, 25 May 2026 13:28:43 +0800 Subject: [PATCH] fix mykey path, add inject-prompt button, harden reload_mykeys --- .gitignore | 3 +++ frontends/desktop_bridge.py | 2 +- frontends/stapp.py | 7 ++++++- llmcore.py | 18 ++++++++++-------- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 8d7f9e8c..9282e4ff 100644 --- a/.gitignore +++ b/.gitignore @@ -66,6 +66,9 @@ memory/L4_raw_sessions/* # Subagent SOP !memory/subagent_sop.md +# Incubator SOP +!memory/incubator_sop.md + # Supervisor SOP !memory/supervisor_sop.md diff --git a/frontends/desktop_bridge.py b/frontends/desktop_bridge.py index 442de46c..6bd96bf2 100644 --- a/frontends/desktop_bridge.py +++ b/frontends/desktop_bridge.py @@ -88,7 +88,7 @@ class AgentManager: @property def mykey_path(self) -> str: - return str(Path(self.ga_root) / "mykey.txt") + return str(Path(self.ga_root) / "mykey.py") def ensure_ga_import_path(self) -> Path: root = Path(self.ga_root).resolve() diff --git a/frontends/stapp.py b/frontends/stapp.py index a19c134a..29b8951e 100644 --- a/frontends/stapp.py +++ b/frontends/stapp.py @@ -94,6 +94,9 @@ def render_sidebar(): st.toast("Desktop pet started") if LANG == 'zh': + if st.button('🎯 给我找点事做'): + st.session_state['_inject_prompt'] = '按照自主行动的规划部分,充分分析我的情况,给我生成一批TODO,务必让我感兴趣' + st.rerun(scope="app") st.divider() if st.button("开始空闲自主行动"): st.session_state.last_reply_time = int(time.time()) - 1800 @@ -257,7 +260,9 @@ _js_ime_fix = ("" if os.name == 'nt' else "f();new MutationObserver(f).observe(d.body,{childList:1,subtree:1})}()") _embed_html(f'', height=0) -if prompt := st.chat_input("any task?"): +_injected = st.session_state.pop('_inject_prompt', None) +prompt = st.chat_input("any task?") or _injected +if prompt: ts = time.strftime("%Y-%m-%d %H:%M:%S") cmd = (prompt or "").strip() def _reset_and_rerun(): diff --git a/llmcore.py b/llmcore.py index 704874fd..c64fa713 100644 --- a/llmcore.py +++ b/llmcore.py @@ -15,19 +15,21 @@ def _load_mykeys(): raise Exception(f'[ERROR] mykey.py found but failed to import: {e}') from e except SyntaxError as e: raise Exception(f'[ERROR] mykey.py has syntax error: {e}') from e - _mykey_path = p = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'mykey.json') + p = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'mykey.json') if not os.path.exists(p): raise Exception('[ERROR] mykey.py not found in sys.path and mykey.json not found. Run "python configure_mykey.py" or copy mykey_template.py to mykey.py and fill in your keys.') - with open(p, encoding='utf-8') as f: return json.load(f) + with open(_mykey_path := p, encoding='utf-8') as f: return json.load(f) _mykey_path = _mykey_mtime = None def reload_mykeys(): global _mykey_mtime - mt = os.stat(_mykey_path).st_mtime_ns if _mykey_path else -1 - if mt == _mykey_mtime: return globals().get('mykeys', {}), False - mk = _load_mykeys(); _mykey_mtime = os.stat(_mykey_path).st_mtime_ns - print(f'[Info] Load mykeys from {_mykey_path}') - globals().update(mykeys=mk) - return mk, True + try: + mt = os.stat(_mykey_path).st_mtime_ns if _mykey_path else -1 + if mt == _mykey_mtime: return globals().get('mykeys', {}), False + mk = _load_mykeys(); _mykey_mtime = os.stat(_mykey_path).st_mtime_ns + print(f'[Info] Load mykeys from {_mykey_path}') + globals().update(mykeys=mk) + return mk, True + except: return globals().get('mykeys', {}), False def __getattr__(name): # once guard in PEP 562 if name == 'mykeys': return reload_mykeys()[0]