emdash-core 0.1.7__py3-none-any.whl → 0.1.25__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.
Files changed (41) hide show
  1. emdash_core/__init__.py +6 -1
  2. emdash_core/agent/events.py +29 -0
  3. emdash_core/agent/prompts/__init__.py +5 -0
  4. emdash_core/agent/prompts/main_agent.py +22 -2
  5. emdash_core/agent/prompts/plan_mode.py +126 -0
  6. emdash_core/agent/prompts/subagents.py +11 -7
  7. emdash_core/agent/prompts/workflow.py +138 -43
  8. emdash_core/agent/providers/base.py +4 -0
  9. emdash_core/agent/providers/models.py +7 -0
  10. emdash_core/agent/providers/openai_provider.py +74 -2
  11. emdash_core/agent/runner.py +556 -34
  12. emdash_core/agent/skills.py +319 -0
  13. emdash_core/agent/toolkit.py +48 -0
  14. emdash_core/agent/tools/__init__.py +3 -2
  15. emdash_core/agent/tools/modes.py +197 -53
  16. emdash_core/agent/tools/search.py +4 -0
  17. emdash_core/agent/tools/skill.py +193 -0
  18. emdash_core/agent/tools/spec.py +61 -94
  19. emdash_core/agent/tools/tasks.py +15 -78
  20. emdash_core/api/agent.py +7 -7
  21. emdash_core/api/index.py +1 -1
  22. emdash_core/api/projectmd.py +4 -2
  23. emdash_core/api/router.py +2 -0
  24. emdash_core/api/skills.py +241 -0
  25. emdash_core/checkpoint/__init__.py +40 -0
  26. emdash_core/checkpoint/cli.py +175 -0
  27. emdash_core/checkpoint/git_operations.py +250 -0
  28. emdash_core/checkpoint/manager.py +231 -0
  29. emdash_core/checkpoint/models.py +107 -0
  30. emdash_core/checkpoint/storage.py +201 -0
  31. emdash_core/config.py +1 -1
  32. emdash_core/core/config.py +18 -2
  33. emdash_core/graph/schema.py +5 -5
  34. emdash_core/ingestion/orchestrator.py +19 -10
  35. emdash_core/models/agent.py +1 -1
  36. emdash_core/server.py +42 -0
  37. emdash_core/sse/stream.py +1 -0
  38. {emdash_core-0.1.7.dist-info → emdash_core-0.1.25.dist-info}/METADATA +1 -2
  39. {emdash_core-0.1.7.dist-info → emdash_core-0.1.25.dist-info}/RECORD +41 -31
  40. {emdash_core-0.1.7.dist-info → emdash_core-0.1.25.dist-info}/entry_points.txt +1 -0
  41. {emdash_core-0.1.7.dist-info → emdash_core-0.1.25.dist-info}/WHEEL +0 -0
@@ -1,6 +1,6 @@
1
1
  """Orchestrates the complete ingestion pipeline."""
2
2
 
3
- from concurrent.futures import ProcessPoolExecutor, as_completed
3
+ from concurrent.futures import ThreadPoolExecutor, as_completed
4
4
  from pathlib import Path
5
5
  from typing import Callable, Optional
6
6
 
@@ -25,8 +25,6 @@ from ..utils.logger import log
25
25
  def _parse_file_worker(file_path: Path, repo_root: Path) -> FileEntities:
26
26
  """Worker function for parallel file parsing.
27
27
 
28
- This is a module-level function so it can be pickled for ProcessPoolExecutor.
29
-
30
28
  Args:
31
29
  file_path: Path to source file
32
30
  repo_root: Repository root path
@@ -94,7 +92,7 @@ class IngestionOrchestrator:
94
92
 
95
93
  # Acquire write lock for the entire indexing operation
96
94
  with write_lock_context("indexing", timeout=120):
97
- self._run_index(repo_path, incremental, changed_only, skip_git, pr_limit)
95
+ return self._run_index(repo_path, incremental, changed_only, skip_git, pr_limit)
98
96
 
99
97
  def _run_index(
100
98
  self,
@@ -133,7 +131,7 @@ class IngestionOrchestrator:
133
131
  changed_only = False
134
132
  elif last_indexed_commit == current_commit:
135
133
  log.info("No changes since last index - nothing to do")
136
- return
134
+ return {"files": 0, "functions": 0, "classes": 0, "modules": 0, "commits": 0, "authors": 0, "prs": 0, "message": "No changes since last index"}
137
135
  else:
138
136
  extensions = ParserRegistry.get_all_extensions()
139
137
  detector = ChangeDetector(repo, last_indexed_commit)
@@ -141,7 +139,7 @@ class IngestionOrchestrator:
141
139
 
142
140
  if not changed_files:
143
141
  log.info("No relevant file changes detected - nothing to do")
144
- return
142
+ return {"files": 0, "functions": 0, "classes": 0, "modules": 0, "commits": 0, "authors": 0, "prs": 0, "message": "No relevant file changes"}
145
143
 
146
144
  log.info(f"Changes detected: {changed_files.total_changes} files")
147
145
 
@@ -157,7 +155,7 @@ class IngestionOrchestrator:
157
155
  # Parse only added and modified files
158
156
  entities = self._parse_codebase(repo, file_filter=changed_files.all_to_index)
159
157
  else:
160
- log.info("Step 2: Parsing codebase (Layer A)...")
158
+ log.info("Step 2: Indexing codebase (Layer A)...")
161
159
  entities = self._parse_codebase(repo)
162
160
 
163
161
  # Step 3: Extract git history (Layer B)
@@ -201,6 +199,17 @@ class IngestionOrchestrator:
201
199
  log.info("✓ Indexing complete!")
202
200
  self._print_summary(entities, git_data, prs)
203
201
 
202
+ # Return stats for API response
203
+ return {
204
+ "files": len(entities.files),
205
+ "functions": len(entities.functions),
206
+ "classes": len(entities.classes),
207
+ "modules": len(entities.modules),
208
+ "commits": len(git_data.commits) if git_data else 0,
209
+ "authors": len(git_data.authors) if git_data else 0,
210
+ "prs": len(prs) if prs else 0,
211
+ }
212
+
204
213
  def _ensure_database_ready(self):
205
214
  """Ensure database connection and schema are ready."""
206
215
  log.info("Connecting to Kuzu and ensuring schema...")
@@ -350,7 +359,7 @@ class IngestionOrchestrator:
350
359
  last_reported_percent = (current_percent // 10) * 10
351
360
  # Map parsing progress (0-100) to overall progress (10-70)
352
361
  overall_percent = 10 + (last_reported_percent * 0.6)
353
- self._progress_callback(f"Parsing files ({last_reported_percent}%)", overall_percent)
362
+ self._progress_callback("Parsing files", overall_percent)
354
363
 
355
364
  return CodebaseEntities.merge(results)
356
365
 
@@ -373,7 +382,7 @@ class IngestionOrchestrator:
373
382
  last_reported_percent = 0
374
383
  completed = 0
375
384
 
376
- with ProcessPoolExecutor(max_workers=self.config.ingestion.max_workers) as executor:
385
+ with ThreadPoolExecutor(max_workers=self.config.ingestion.max_workers) as executor:
377
386
  # Submit all tasks
378
387
  futures = {
379
388
  executor.submit(_parse_file_worker, file_path, repo_root): file_path
@@ -401,7 +410,7 @@ class IngestionOrchestrator:
401
410
  if current_percent >= last_reported_percent + 10:
402
411
  last_reported_percent = (current_percent // 10) * 10
403
412
  overall_percent = 10 + (last_reported_percent * 0.6)
404
- self._progress_callback(f"Parsing files ({last_reported_percent}%)", overall_percent)
413
+ self._progress_callback("Parsing files", overall_percent)
405
414
 
406
415
  return CodebaseEntities.merge(results)
407
416
 
@@ -26,7 +26,7 @@ class ImageData(BaseModel):
26
26
  class AgentChatOptions(BaseModel):
27
27
  """Options for agent chat."""
28
28
 
29
- max_iterations: int = Field(default=50, description="Maximum agent iterations")
29
+ max_iterations: int = Field(default=100, description="Maximum agent iterations")
30
30
  verbose: bool = Field(default=True, description="Enable verbose output")
31
31
  mode: AgentMode = Field(default=AgentMode.CODE, description="Agent mode")
32
32
  context_threshold: float = Field(
emdash_core/server.py CHANGED
@@ -38,6 +38,47 @@ def _load_env_files(repo_root: Optional[str] = None):
38
38
  load_dotenv(env_path, override=True)
39
39
 
40
40
 
41
+ def _shutdown_executors():
42
+ """Shutdown all module-level thread pool executors and database connections."""
43
+ from concurrent.futures import ThreadPoolExecutor
44
+
45
+ # Import all modules with executors and shut them down
46
+ executor_modules = [
47
+ "emdash_core.api.index",
48
+ "emdash_core.api.auth",
49
+ "emdash_core.api.swarm",
50
+ "emdash_core.api.tasks",
51
+ "emdash_core.api.research",
52
+ "emdash_core.api.spec",
53
+ "emdash_core.api.team",
54
+ "emdash_core.api.review",
55
+ "emdash_core.api.agent",
56
+ "emdash_core.api.projectmd",
57
+ "emdash_core.agent.inprocess_subagent",
58
+ ]
59
+
60
+ for module_name in executor_modules:
61
+ try:
62
+ module = sys.modules.get(module_name)
63
+ if module and hasattr(module, "_executor"):
64
+ executor = getattr(module, "_executor")
65
+ if executor and isinstance(executor, ThreadPoolExecutor):
66
+ executor.shutdown(wait=False)
67
+ except Exception:
68
+ pass # Ignore errors during shutdown
69
+
70
+ # Close database connections
71
+ try:
72
+ from .graph.connection import get_connection, _read_connection
73
+ conn = get_connection()
74
+ if conn:
75
+ conn.close()
76
+ if _read_connection:
77
+ _read_connection.close()
78
+ except Exception:
79
+ pass # Ignore errors during shutdown
80
+
81
+
41
82
  @asynccontextmanager
42
83
  async def lifespan(app: FastAPI):
43
84
  """Application lifespan handler."""
@@ -57,6 +98,7 @@ async def lifespan(app: FastAPI):
57
98
 
58
99
  # Shutdown
59
100
  print("EmDash Core shutting down...")
101
+ _shutdown_executors()
60
102
  if port_file.exists():
61
103
  port_file.unlink()
62
104
 
emdash_core/sse/stream.py CHANGED
@@ -27,6 +27,7 @@ class EventType(str, Enum):
27
27
  # Interaction
28
28
  CLARIFICATION = "clarification"
29
29
  CLARIFICATION_RESPONSE = "clarification_response"
30
+ PLAN_SUBMITTED = "plan_submitted"
30
31
 
31
32
  # Errors
32
33
  ERROR = "error"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: emdash-core
3
- Version: 0.1.7
3
+ Version: 0.1.25
4
4
  Summary: EmDash Core - FastAPI server for code intelligence
5
5
  Author: Em Dash Team
6
6
  Requires-Python: >=3.10,<4.0
@@ -27,7 +27,6 @@ Requires-Dist: pydantic-settings (>=2.0.0,<3.0.0)
27
27
  Requires-Dist: pygithub (>=2.1.1,<3.0.0)
28
28
  Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
29
29
  Requires-Dist: python-louvain (>=0.16,<0.17)
30
- Requires-Dist: scipy (>=1.11.4,<2.0.0)
31
30
  Requires-Dist: sentence-transformers (>=2.2.0)
32
31
  Requires-Dist: sse-starlette (>=2.0.0)
33
32
  Requires-Dist: supabase (>=2.0.0)
@@ -1,10 +1,10 @@
1
- emdash_core/__init__.py,sha256=0dZxdypWrXjxbpwqqe2GVhmjTPgy4HkMJfialtlf3Zk,81
1
+ emdash_core/__init__.py,sha256=2VnFDN5zmKekKBa5rHZY9nz2Dhv2lB_O6dTcz-wyF8s,226
2
2
  emdash_core/agent/__init__.py,sha256=78P3l8dMA9Qepg0b8WMOWobrhmIpzn4Y0TXtgfndQ8E,1061
3
3
  emdash_core/agent/agents.py,sha256=CCsDJSl9Vwhitc71L9oQ6SO_qhhyumI7L07Osmgugcg,5825
4
4
  emdash_core/agent/code_reviewer.py,sha256=oUXcDbk773kwYtcCsUNEjb_ipS9rLeCKIv_IEUiUA9k,16467
5
5
  emdash_core/agent/compaction.py,sha256=_smuIjmzaiblr6viRFByQCekRzoZDTetcaXRLQol8CI,4102
6
6
  emdash_core/agent/context_manager.py,sha256=3HBQFRwsq1bBx6R7FQp7xFsiW0zPLPnOF-8Ox4Y6K44,3676
7
- emdash_core/agent/events.py,sha256=6B31P2peEmvDzJJtC1J6SnBWgtSJ8b29xQSANUzUTko,10272
7
+ emdash_core/agent/events.py,sha256=hIl_w1gUH9kSpA5pGHD30eSdX0BiXYYwIg4Q6vtKRps,11336
8
8
  emdash_core/agent/handlers.py,sha256=3zo76GT3cTfYayK1qvP2NFo14AXHfA36X-yaa7Xm3T0,7135
9
9
  emdash_core/agent/inprocess_subagent.py,sha256=PJ6ItCT9fdT8klIQ0dCZ4g_xPoKrAjT3Ui4z8Mvu6V8,11159
10
10
  emdash_core/agent/mcp/__init__.py,sha256=qzQMJJOgOYVb6X2uyJxTIGgV5x35Dn7H3IglZxToX_c,1081
@@ -12,15 +12,16 @@ emdash_core/agent/mcp/client.py,sha256=_ae6CWRnJfG_mcCcIYZJYbWjajpZC-WmZgsZsRaah
12
12
  emdash_core/agent/mcp/config.py,sha256=JrO7xIC3oSiFlxeTVynKm1pq2CrYdqzTsIJj9neSJLQ,9220
13
13
  emdash_core/agent/mcp/manager.py,sha256=i4OIJyAwfBAw0E8fe6NIOvT-UTf1_hmDbEtIjtAhRjc,15382
14
14
  emdash_core/agent/mcp/tool_factory.py,sha256=jtQJ2TW7KdGVSg3fUp9-rm7MbHjiwWmy0yLfwr0H4qc,6410
15
- emdash_core/agent/prompts/__init__.py,sha256=EMLIp-YC5CL02W4Pk3DPTxMxVM2fE4qM9hX3abDiadE,845
16
- emdash_core/agent/prompts/main_agent.py,sha256=3BTmdRI706yw4j5AASvBKqTY6gIZSFKRytWfPPVd4dg,3399
17
- emdash_core/agent/prompts/subagents.py,sha256=OExWESyPEy7O9kMEiIzuDkKeIPvHX2miieQSPEVG0uc,3863
18
- emdash_core/agent/prompts/workflow.py,sha256=EpLSg8DZaMbOHBpQtmsE94yMkMId-Y0NL6wFnsfCiRI,4112
15
+ emdash_core/agent/prompts/__init__.py,sha256=S1_zixYnt_jYbh_5B-fKRxlBjeHf0GrFp8pqjWoq6J4,975
16
+ emdash_core/agent/prompts/main_agent.py,sha256=4olhwAN0z6Ctq5PLQB9wStv9UQFlHCDpPlprw5KneWI,3941
17
+ emdash_core/agent/prompts/plan_mode.py,sha256=pfkkEqH-FBhIj_e9aJwtBHven35rtAQgFmo070d-R-w,4302
18
+ emdash_core/agent/prompts/subagents.py,sha256=qqjzob4_7gOy8sui04dOymo8yLxyLbaUaqILakkgqO4,4063
19
+ emdash_core/agent/prompts/workflow.py,sha256=ZSEycPrHshG1ItiGIGfRusWti6PRgD82MZqVHl1XQrU,7799
19
20
  emdash_core/agent/providers/__init__.py,sha256=q58ektAl1zwuS3z36ctHfLB8XruYghT97aq_oj1T_G0,776
20
- emdash_core/agent/providers/base.py,sha256=qRHuLOXt5p0v0ewbcKpIANVy46KAG1rsDDyBdSr2NUM,4098
21
+ emdash_core/agent/providers/base.py,sha256=m1Vuac2Gtr191YDkefG_3qD64iIT9Ps2WoZC1LWmfJU,4351
21
22
  emdash_core/agent/providers/factory.py,sha256=F3bKXvZuLOJn--m5eTblUf3_xdzzbnW97YNDDbQBgJQ,3143
22
- emdash_core/agent/providers/models.py,sha256=3klv592DjNgMtR0EZ45-G2ylQNOCC_II_2Ki5POpbFs,8442
23
- emdash_core/agent/providers/openai_provider.py,sha256=2zuTaUFvq3Zkp6cG_r6zFcYpdjLw_SLkOM_gIPNGZGw,15481
23
+ emdash_core/agent/providers/models.py,sha256=0mkkqiXOQKV25GbqJvm-85mPiJx3Cb3jbn3KTV4NbU0,8710
24
+ emdash_core/agent/providers/openai_provider.py,sha256=2LfRj2H46IDfCb_PAFfRjGHItDF_5ZlgPGuef8WYLfo,18670
24
25
  emdash_core/agent/providers/transformers_provider.py,sha256=USSzYIcZrcTAKDKwiNobYUDS024ZVZ34WAuYWGbs9Nk,7167
25
26
  emdash_core/agent/research/__init__.py,sha256=4LU9Skk3sxsDy8GzfOxCjNxxqaxOm94hV5cH-Nyqn7g,1992
26
27
  emdash_core/agent/research/agent.py,sha256=dGjSZL2rsuJmSRpa8060R5gIvX8rIj57Zs21LsBJ-1U,3819
@@ -33,37 +34,39 @@ emdash_core/agent/research/state.py,sha256=P44YUTUhMrAmt--xsj8Hi0SzbDmrLXKPEf83H
33
34
  emdash_core/agent/research/synthesizer.py,sha256=j4UvH8JxUjo7RF-h69tpRERgN6pHSb8qNBOoKrH2Qro,19016
34
35
  emdash_core/agent/reviewer_profile.py,sha256=RkJ_Mk5vbp2U-e0UBWB-k59cHsTzLj0aro22KJVCbss,16075
35
36
  emdash_core/agent/rules.py,sha256=GVwfM6YlRxrPXLZ0h2cZFOx4l_mPPl0Bdwt8oxfMBLI,3014
36
- emdash_core/agent/runner.py,sha256=tb0ILSOYwBEFFLpYmwWyMbNE7N64bKNdFO7wO9i60IM,21787
37
+ emdash_core/agent/runner.py,sha256=2z7v-8XS0ADOGXgAYEqBoLOHaEDlP-dSKDwqeD2EJkU,42811
37
38
  emdash_core/agent/session.py,sha256=Zr7m8IK4-J6CDIMmN2QiSqpDT_O2S-SXu3Qmy9w6dk8,8517
39
+ emdash_core/agent/skills.py,sha256=s62vZgcsI4dt3FlBz7501NV_EbPoHqHGScoRHvCZBGs,8776
38
40
  emdash_core/agent/spec_schema.py,sha256=tmTCrO4zKXkOblW6gRyrQ3_ZdYU-ehnLE8YmZbhPHWQ,1429
39
41
  emdash_core/agent/specification.py,sha256=b1nUQiGT4NiRv42hDkYAXVX_RtsKcHrf4Ae1dx0UVnc,19105
40
42
  emdash_core/agent/subagent.py,sha256=zIlhbHOCUEgYtYLYwiQ7dkSleqI60emyBA-5XLPaH_k,12150
41
43
  emdash_core/agent/subagent_prompts.py,sha256=pJJPXh4FlnE8bt9d-Ruquz6j8W-BS9pMCbXRqpgwq4g,407
42
- emdash_core/agent/toolkit.py,sha256=qEXCvxpd_sJAWJLeU9Qvza3x6GH3NtqEWPmuj11vtOk,16706
44
+ emdash_core/agent/toolkit.py,sha256=iQk9R57h8UInQ0czM41YvXcl63KyyKOLpo4RV7OZTqI,18493
43
45
  emdash_core/agent/toolkits/__init__.py,sha256=HrWyA1M666V0UZ6P7YISnnQg4rblWbIFW_HcMKlHfK4,1814
44
46
  emdash_core/agent/toolkits/base.py,sha256=Z4IMrli7UMi7K3rWhqfph_5vv9Tdnc0M8iCQDgE_3lM,2587
45
47
  emdash_core/agent/toolkits/explore.py,sha256=ymyvLjIXy80h3lb4y_DZ06T0vADCal976qMW19J6N8A,1395
46
48
  emdash_core/agent/toolkits/plan.py,sha256=S5VnewUpSHOgpieiph3EuA_qPOUS7EpG198EuqNVG3o,1820
47
- emdash_core/agent/tools/__init__.py,sha256=r2gI_DjudTku7pIKwcndRxxpawvp5EDm2AuWhL31NPo,2918
49
+ emdash_core/agent/tools/__init__.py,sha256=7OyqgSkyKOrR8YOPb82g6vcngpc5Yf3yrzkJ3sZslzc,2958
48
50
  emdash_core/agent/tools/analytics.py,sha256=tEP_RWFpKGfFW_Yc5inMMjAkDFzpDQ77Ui_Ca7LQu60,14837
49
51
  emdash_core/agent/tools/base.py,sha256=3clLKgR7Og5eDijZJLEcpJS1YV8u1rW_pXr_iwHdxTo,3349
50
52
  emdash_core/agent/tools/coding.py,sha256=plz_prz_lg6JEUzF_yvbADoHSyZ_3i6wdEh7GiS5YOE,14343
51
53
  emdash_core/agent/tools/github_mcp.py,sha256=D4fu_z9j-rL8SHD8TA2tO-ED-8Q4QB_RHQoqsh7Bjy8,16870
52
54
  emdash_core/agent/tools/history.py,sha256=Zaers4Aul9-hrlMaGRcQHwfU2xb7yCjHFHSDtfMe3c4,423
53
- emdash_core/agent/tools/modes.py,sha256=l9xOdG1R13WRCSJnegCh4PUmZLltSPgd144Z0byB0L0,4239
55
+ emdash_core/agent/tools/modes.py,sha256=4E7qGEooiGy46NoInUrnec_6V52jWTr0Br99bu5nyMA,10334
54
56
  emdash_core/agent/tools/plan.py,sha256=RRvZsDHcvvDv6uyDSGhTYIoImZmI_7CCxCarkeSZjbQ,7922
55
57
  emdash_core/agent/tools/plan_write.py,sha256=o4EEHTUr1hRfH3WSjrh3-QTfaJuUhjsQ5bJNBPD_j5Q,4417
56
- emdash_core/agent/tools/search.py,sha256=8687DLMI1qi5Ld1ZpQl5hZG_PcKVQ7iwOoAIEU6Pkbw,14133
57
- emdash_core/agent/tools/spec.py,sha256=QmDbhLfXkYmFhBFNrgPoADmcPWjT5-_wXOwZgjqZeDg,11585
58
+ emdash_core/agent/tools/search.py,sha256=aq5_jc8YT3R3oZtulgvKwmz1oljJom20NfF_q60o60Q,14353
59
+ emdash_core/agent/tools/skill.py,sha256=B7IefgH2DndHXFOaozSnJkhLQj9VQHNJH7-0ovgVmS0,6124
60
+ emdash_core/agent/tools/spec.py,sha256=R9Ib-1epCVrgbOB6C9qYkwvgut94x3P2g4_FM_tMd2M,10022
58
61
  emdash_core/agent/tools/task.py,sha256=-xM2GFdBnchrVNiOHgxa0hWQyvum4sC4QgBf3y5N_64,8906
59
62
  emdash_core/agent/tools/task_output.py,sha256=30EI8JAKBDw6gLmjF8bXAq00yMr-Qk14J7fv2kDVX1c,6421
60
- emdash_core/agent/tools/tasks.py,sha256=VS6VWgJtZiBdC16UigN90GTvKbPCm_PYLuC0r9vLl5w,14764
63
+ emdash_core/agent/tools/tasks.py,sha256=VT-oLFKzswmKu02H1hc_ercJ1blbseCo0Q0qRBh0DjM,11844
61
64
  emdash_core/agent/tools/traversal.py,sha256=qQvHkledo_rT9q9kxk07pijY8XqkR4WWB5pFWVmG01I,20249
62
65
  emdash_core/agent/tools/web.py,sha256=cqm4eiiBzeGCOmQE---uT9zlgsQUX9WY_YYz7wQbK1U,5521
63
66
  emdash_core/analytics/__init__.py,sha256=5ky2djAly3-3lbQmUuNJlJTmBDaXjN2lOUw-OP2F1Zk,98
64
67
  emdash_core/analytics/engine.py,sha256=f1go7SNnSlM_sFUEvmHrD4PTY9G39REBC7w01xdh3as,47738
65
68
  emdash_core/api/__init__.py,sha256=L11AeV6gaCJjlZ8DU_q-lcuZYH9WV3BV4GYq8JF8BuI,92
66
- emdash_core/api/agent.py,sha256=kjNNG2LdISjzOiP9Bdbo4FFxh9GjyA1upQESVQrKhOk,8656
69
+ emdash_core/api/agent.py,sha256=WWIozSfElbwQYJs5bvB6KLMAqZwGkQZJQjD8sHiL7G4,8706
67
70
  emdash_core/api/agents.py,sha256=kInkI6iGnQuRxz5wS9w_Owq-4iceUJgugIOrWGDLkGA,3673
68
71
  emdash_core/api/analyze.py,sha256=cR6wWzqSvp_5cNyUg0qACNF7DYdrcNkzhmRqgaqnd78,7593
69
72
  emdash_core/api/auth.py,sha256=vnhH_xcsoTDYrCDBDytlm0LOV9yDoar04NL5FZKI8JU,4832
@@ -72,22 +75,29 @@ emdash_core/api/db.py,sha256=3Y702OOO-RTMRQxvKaaNW3x2f74agTSdyEKserPjyg4,3162
72
75
  emdash_core/api/embed.py,sha256=fi7bvXRaYJg-lR7dMF6czYgyMi1Hcu4undoCEO6VqEM,4065
73
76
  emdash_core/api/feature.py,sha256=DFqYMAjtmo4jzjdI1u1vWDBU-heCsUl_bziKW7qjheQ,4759
74
77
  emdash_core/api/health.py,sha256=MBFvhauwjoY75omSO-X0jyh1Rr9WSLVy_DkSLpDbFn0,2370
75
- emdash_core/api/index.py,sha256=1rBD496N0sa3rkuiNFzkbeqPWS8XJXtxMIZzdnBsctI,5268
78
+ emdash_core/api/index.py,sha256=7FtyfTvB6K5Yh1mQZ3qlYWQ492QqCA4aTBbdeZBdfb4,5269
76
79
  emdash_core/api/plan.py,sha256=k5b-nhSpo18Y-HI4RAqmabJWvLXTx9tt0cR3PNj9ewQ,3350
77
- emdash_core/api/projectmd.py,sha256=KC0T_8TpKdASWdUGd3SytjuH8YH3cJEMkZgFU2tDg68,5966
80
+ emdash_core/api/projectmd.py,sha256=KJmLpiTNwXK75_ADdUIWl2OfPLZU-WQaffsV1I5F8ZY,6105
78
81
  emdash_core/api/query.py,sha256=90HuhYGRiPtolYMBdlYcgW8DV_SvYo0H2xZ_YUWVPRw,10188
79
82
  emdash_core/api/research.py,sha256=_r0BDkvzLRE2sF4yMQye9IqSeu9yBGlXAYdr-LAlnm8,3511
80
83
  emdash_core/api/review.py,sha256=zOGrwwThZP_himnFyBKCl4mo4gjniuEaWGNWqcKajb0,4766
81
- emdash_core/api/router.py,sha256=f0_80x8HbDC3rvAteSgfjMfq4lmCF7CrK1FAdR0S1uY,1476
84
+ emdash_core/api/router.py,sha256=7dVshcIe4m_T-FlRTRvw1RB8U9-bLPef9GdI42ONMvI,1529
82
85
  emdash_core/api/rules.py,sha256=BbIE_RKX8VGlUqxny0OK-tKoTK58bDBFXBf_1x3yN7g,3242
83
86
  emdash_core/api/search.py,sha256=qPVVTNRExbyG4Ri3X3F5uGpILhlvtH99dHBv7ZVkRIw,3696
87
+ emdash_core/api/skills.py,sha256=8hF7IkM--aMMaNEaa16DoHl-8fBVx8oYCBnnqgsFkuE,6422
84
88
  emdash_core/api/spec.py,sha256=ub09u1mkqpcF-z0Q1YU9FAkJb0LDyV_eG0_KXYLFmuk,2912
85
89
  emdash_core/api/swarm.py,sha256=-CNY-NCVnwes0MlHV5yq_ZUie8pJxt0Fdg4g5R94dKo,6561
86
90
  emdash_core/api/tasks.py,sha256=kyrhSc46wfwM3csOT26Gsx9SNjKSTwC9BQ5qMqe1uaY,3160
87
91
  emdash_core/api/team.py,sha256=nHdsTIQ-ZDlpByNIVpSl4Ahf4q51A_HwQTnnmBq6agA,3308
88
92
  emdash_core/auth/__init__.py,sha256=NpcoEyqtqYwUTKKFwNGKgroPOGtXS5rUpH2D9t2_4TY,290
89
93
  emdash_core/auth/github.py,sha256=__qpcWbi9dWC4W9FQfyJ6KEg7N1gXQW9k9Aub45EQ_o,11269
90
- emdash_core/config.py,sha256=2avAiSrmKRj1kPE3EVQFkrXuBch-SFWAAaVdkTAMR1g,2215
94
+ emdash_core/checkpoint/__init__.py,sha256=hN3CaoH2hqTb-KquSmdQlSyKb_3oFS10UbTgHSQRC5w,1184
95
+ emdash_core/checkpoint/cli.py,sha256=acq2qO6Ea5_a8GSJefPMOP0v8xv5a_afeY8c48z0bXE,5778
96
+ emdash_core/checkpoint/git_operations.py,sha256=cBn7fElPvr_11jmzvnw4ZMSVKBOwKIHuSJ4sSq71n2o,7652
97
+ emdash_core/checkpoint/manager.py,sha256=XHzZxaSw-rOguULtuddPeumhPRlxMJAzSAqFFS-KMgE,7420
98
+ emdash_core/checkpoint/models.py,sha256=0xfpeNHmLgVVzMzSo-C1dm-1bEWBAZvFED_1Du-RptI,3390
99
+ emdash_core/checkpoint/storage.py,sha256=AKUwxeMA05hmxwdRPFivwqv0GWGYgCBlV4m9auzlxpk,5970
100
+ emdash_core/config.py,sha256=i2M9iRxiZQiKlkc1I0goXwI7ac6ABEdku58u_mGbWbA,2216
91
101
  emdash_core/context/__init__.py,sha256=_6hqH8FtCi4Q3OpuC9zDPDEXuBitLxrY20CdookRTsY,1496
92
102
  emdash_core/context/models.py,sha256=eQdjaea5M6iQ-9ZxJ5IVQgiQEPbZz81Xe2B186GuSYI,1304
93
103
  emdash_core/context/providers/__init__.py,sha256=cWokJwYatvihXoyhqM6BHbG4JQeImgWzyjLdj60BqS4,261
@@ -99,7 +109,7 @@ emdash_core/context/reranker.py,sha256=xoajICW7yhxBtq6yJnFDzQXRl0_G8W-ACQyalZ72U
99
109
  emdash_core/context/service.py,sha256=vTSCUoXdNGTTs0ZtMHInX3uG5Wbol-lpCXEn4ICNCDo,9438
100
110
  emdash_core/context/session.py,sha256=XqDELflx7TGosraTU3mBJcZLwD1Ihv2DtuFjeoxjF7A,12424
101
111
  emdash_core/core/__init__.py,sha256=KW97frnmqf5PWHIvYpdZN7aaAPaUXWfsLEEicdZ3g80,1987
102
- emdash_core/core/config.py,sha256=ApiKr5kKwSKWhr08dosZ1EvTMcfZ5PVMo4FsBlP9cac,15474
112
+ emdash_core/core/config.py,sha256=OLI-tbeI8KGzX9GzpL0YcjRJbN1TgCxlaVXSCfkfesU,16044
103
113
  emdash_core/core/exceptions.py,sha256=LA4bsgEmPJUKQiBmrMpbPT6Iatu4xQLdenGMceMD2Yk,1186
104
114
  emdash_core/core/models.py,sha256=U2achHuaaP9Qr2qZEqBvdzpbxNN2z-SJWjjGpBBiCu4,7810
105
115
  emdash_core/core/review_config.py,sha256=pP8d_0D6mzKg2iYLjrbF9XcI8FIPLwZa0onUDUTvgkM,1455
@@ -121,7 +131,7 @@ emdash_core/embeddings/service.py,sha256=nvSpMsqzoEnZA7iwLHwTWMqR3YzeFnbGFrL1RmN
121
131
  emdash_core/graph/__init__.py,sha256=H8Ib_jH6Tu8EGKYw8pAaiFrmMMOvty7AMiOiypbKA4M,530
122
132
  emdash_core/graph/builder.py,sha256=INh81gubFgmow25eNm2Z139p9VAmZhRx9pyylOhJxgw,4531
123
133
  emdash_core/graph/connection.py,sha256=ZhMPQpPv_oQOUzdObfwswnuTivsYs90Mawi6DejbYI8,22113
124
- emdash_core/graph/schema.py,sha256=FqKn-fFF9lcv6MhqcnjNjxcPoLji1gy-UspfInTOHaE,13296
134
+ emdash_core/graph/schema.py,sha256=sKjW1GS3tutpFNeXF7TVMA17iOMEdnyfLGG3hbEigXA,13281
125
135
  emdash_core/graph/writer.py,sha256=QleDLLB2PTj2cd3vFMrgZXZWk9-_sC1MZMFzFZHjFnE,26191
126
136
  emdash_core/ingestion/__init__.py,sha256=hyGLUPT04C9RXj7zaJF_389-8KA6xQN8zCX8l2v_NZ0,276
127
137
  emdash_core/ingestion/change_detector.py,sha256=LOAODz_apk4ZRfAINz4lf2gCEq1zqQk0bkRnfRrn9oM,5312
@@ -130,7 +140,7 @@ emdash_core/ingestion/git/commit_analyzer.py,sha256=4DftTUgycv6u695RxaVAIL4VzsTA
130
140
  emdash_core/ingestion/github/__init__.py,sha256=G5SR95r5heXPfcgNUpvN241x8zXs0IuyOQjmbPIDOGM,156
131
141
  emdash_core/ingestion/github/pr_fetcher.py,sha256=zs2xijWTkHEEYdHpNVVzq1W2V8hmBelS39H5b3Ei77c,9539
132
142
  emdash_core/ingestion/github/task_extractor.py,sha256=PNkm8xEAlss3MWDY_iRdLlxmyJBca3jRjNCVYoRVp0E,2679
133
- emdash_core/ingestion/orchestrator.py,sha256=qToPFJOnnQrGfp7FeizxOU3sdCJhMZtj4bZ7scpiZ5k,19740
143
+ emdash_core/ingestion/orchestrator.py,sha256=8Cq-WHJmu2fUPOBfBT0wExFysS7aKtln-wcjjjHE_V0,20303
134
144
  emdash_core/ingestion/parsers/__init__.py,sha256=_zathXaXCNKL-Qiezvi3UCxxRnBHCTUOXYOcpoteExU,347
135
145
  emdash_core/ingestion/parsers/base_parser.py,sha256=rlNsMLfZ4nOp7ufqTbfd-7vXP9oPoqumgt5gW72efU4,2072
136
146
  emdash_core/ingestion/parsers/call_graph_builder.py,sha256=GUqvKAOIM1gnGTph4risf-E6hJnXJhFpPbBsYPyxLu4,3703
@@ -143,7 +153,7 @@ emdash_core/ingestion/parsers/ts_ast_parser.js,sha256=bvFEl97bzI-UItTvYkyT5D0rxX
143
153
  emdash_core/ingestion/parsers/typescript_parser.py,sha256=UHEuKUwaEkrscZ7NEisBWcZxJ1Ltn7pUvsdTdccqMGY,10928
144
154
  emdash_core/ingestion/repository.py,sha256=ZyKw4NYTIgw35LbkYSsqwNmQoGkpVq06q0qm6lFMGGM,10287
145
155
  emdash_core/models/__init__.py,sha256=zTsIg4Sy2o2eTWGIpYP9rb_yFdR-DFZ1BSWF9DcrHqU,625
146
- emdash_core/models/agent.py,sha256=MgqLjBTGKrPQ5coxu0HmoyvpPDhLaUB7r62JnQE4NCw,1816
156
+ emdash_core/models/agent.py,sha256=W0-5lVM7YxuMznWw90QkMs3vhkH-OZb22sBedbWMMwc,1817
147
157
  emdash_core/models/index.py,sha256=1dohTHOYvtOLmphGUELwgGH7DkMbhK_ykFn2_YmOtag,2207
148
158
  emdash_core/models/query.py,sha256=3ZRTUzZoBr9IRrniXNLq2egUkg3k5tb9BXyu4xPB2DY,3480
149
159
  emdash_core/planning/__init__.py,sha256=6db3V1maLCicMlRuG3JfGCnH84MxcdRrwBsGddlxVCg,267
@@ -154,9 +164,9 @@ emdash_core/planning/feature_expander.py,sha256=ADNv3qsbRqPtXKRVDSZIf4lcaf_hxdGc
154
164
  emdash_core/planning/llm_explainer.py,sha256=jJlgO5_u5_7TCl_6F-0qoJWtpeY3FTXnR5vvHcqa0Dc,7150
155
165
  emdash_core/planning/similarity.py,sha256=j3jiSWoTqlakHZGa-TxVJYknru7DzRaWlIOow2NG02o,18876
156
166
  emdash_core/planning/team_focus.py,sha256=fv3rCyh_8sHk4w_yjzuw36KlKPAJLPZPgVOo762aneU,32405
157
- emdash_core/server.py,sha256=HEOEffYTnScGEaBfO-sg6YGl5TorxHyt-_r0Krt_mRY,3763
167
+ emdash_core/server.py,sha256=W6x217nJcYLFaybatMiVxDtqkNH-HejZEBn5PLXGryc,5169
158
168
  emdash_core/sse/__init__.py,sha256=q6nfbsqvEX7uYTuLwRMb4E73hW-o_Cuv63APod_Kluw,129
159
- emdash_core/sse/stream.py,sha256=WNBiNpiA-uM8KAuUGLz5fjWdurQsGwv2fcDoxvOTVJw,5217
169
+ emdash_core/sse/stream.py,sha256=V5f76WHGldT4TBT51rUMelivlrIc41z3yr_QKoEe_ao,5255
160
170
  emdash_core/swarm/__init__.py,sha256=EyL9U64ByQCCcL19ntwu2OU7labME3i3dSpSF25X6Mo,448
161
171
  emdash_core/swarm/merge_agent.py,sha256=Fp0rqdHsd0m0swoAApq46QuBNDw5ejDk4dRddc1cD-E,13038
162
172
  emdash_core/swarm/session_manager.py,sha256=RyLGpfXw-qFXJuQBP3Acw4w7LC_ZIhlPaDDkqjm-ycU,8999
@@ -181,7 +191,7 @@ emdash_core/utils/__init__.py,sha256=tQj81F7ZW61jsNg_R2bA9tDLdk0dc5kQswYWwZSqigU
181
191
  emdash_core/utils/git.py,sha256=j5kppemwAOWe4Bc5a9qUmYYfKqxyi9WLk5U9HgwkgO4,2336
182
192
  emdash_core/utils/image.py,sha256=K8uKDuhZqsJXwNDQ57Q3w2j0PQPyid_aEbiq66zy3p0,14607
183
193
  emdash_core/utils/logger.py,sha256=iLaMA5vkUvxCfWsvZ7WZSDQWv4Gh5gJHeYbAB6urDio,1473
184
- emdash_core-0.1.7.dist-info/METADATA,sha256=7v6Mw8RNSpX_tcZ_iSPJEDSj7y7K16KtIUDisJ8iZBc,1381
185
- emdash_core-0.1.7.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
186
- emdash_core-0.1.7.dist-info/entry_points.txt,sha256=4lEFv-LTTPVSF3IcGns017yAQPgY7Y8pHeO6QGDf0jA,55
187
- emdash_core-0.1.7.dist-info/RECORD,,
194
+ emdash_core-0.1.25.dist-info/METADATA,sha256=HEpSLGk-Q363otD9EdAUYRWm8T7oXqwa48ZcZkidIWs,1343
195
+ emdash_core-0.1.25.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
196
+ emdash_core-0.1.25.dist-info/entry_points.txt,sha256=WgC9h0Bcsh0VaLfDv4hAKaY5krcT2Ati4UyoIJNavdk,105
197
+ emdash_core-0.1.25.dist-info/RECORD,,
@@ -1,3 +1,4 @@
1
1
  [console_scripts]
2
+ emdash-checkpoint=emdash_core.checkpoint.cli:main
2
3
  emdash-core=emdash_core.server:main
3
4