Yash030 commited on
Commit
2d394e5
·
1 Parent(s): a8c9dbb

fix: auto-complete dangling active sessions on new session start

Browse files
Files changed (1) hide show
  1. src/functions.py +18 -0
src/functions.py CHANGED
@@ -114,6 +114,22 @@ def fingerprint_id(prefix: str, content: str) -> str:
114
  h = hashlib.sha256(content.strip().lower().encode('utf-8')).hexdigest()
115
  return f"{prefix}_{h[:16]}"
116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  def jaccard_similarity(a: str, b: str) -> float:
118
  tokens_a = [t for t in a.split() if len(t) > 2]
119
  tokens_b = [t for t in b.split() if len(t) > 2]
@@ -724,6 +740,7 @@ def observe(kv: StateKV, payload: Dict[str, Any]) -> Dict[str, Any]:
724
  updates.append({"type": "set", "path": "firstPrompt", "value": trimmed[:200]})
725
  kv.update(KV.sessions, session_id, updates)
726
  else:
 
727
  project = payload.get("project") or "unknown"
728
  cwd = payload.get("cwd") or os.getcwd()
729
  trimmed_prompt = None
@@ -1729,6 +1746,7 @@ def get_session(kv: StateKV, session_id: str) -> Optional[Dict[str, Any]]:
1729
  return s
1730
 
1731
  def create_session(kv: StateKV, session: Dict[str, Any]) -> Dict[str, Any]:
 
1732
  kv.set(KV.sessions, session["id"], session)
1733
  return session
1734
 
 
114
  h = hashlib.sha256(content.strip().lower().encode('utf-8')).hexdigest()
115
  return f"{prefix}_{h[:16]}"
116
 
117
+ def auto_complete_old_active_sessions(kv: StateKV, current_session_id: str) -> int:
118
+ sessions = kv.list(KV.sessions)
119
+ count = 0
120
+ now = datetime.datetime.utcnow().isoformat() + "Z"
121
+ for s in sessions:
122
+ if s.get("id") != current_session_id and s.get("status") == "active":
123
+ s["status"] = "completed"
124
+ if "endedAt" not in s:
125
+ s["endedAt"] = now
126
+ s["updatedAt"] = now
127
+ kv.set(KV.sessions, s["id"], s)
128
+ count += 1
129
+ if count > 0:
130
+ print(f"[session] Auto-completed {count} dangling active sessions.")
131
+ return count
132
+
133
  def jaccard_similarity(a: str, b: str) -> float:
134
  tokens_a = [t for t in a.split() if len(t) > 2]
135
  tokens_b = [t for t in b.split() if len(t) > 2]
 
740
  updates.append({"type": "set", "path": "firstPrompt", "value": trimmed[:200]})
741
  kv.update(KV.sessions, session_id, updates)
742
  else:
743
+ auto_complete_old_active_sessions(kv, session_id)
744
  project = payload.get("project") or "unknown"
745
  cwd = payload.get("cwd") or os.getcwd()
746
  trimmed_prompt = None
 
1746
  return s
1747
 
1748
  def create_session(kv: StateKV, session: Dict[str, Any]) -> Dict[str, Any]:
1749
+ auto_complete_old_active_sessions(kv, session["id"])
1750
  kv.set(KV.sessions, session["id"], session)
1751
  return session
1752