Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
af48a7e
don't create empty files
ea-rus Apr 23, 2026
212739b
v0
ea-rus Apr 23, 2026
e5c7ddc
v1
ea-rus Apr 23, 2026
8a6afdc
Merge branch 'main' into export-session
ea-rus Apr 23, 2026
8fff87b
export
ea-rus Apr 24, 2026
27d0d54
export
ea-rus Apr 24, 2026
d1f08e2
import
ea-rus Apr 24, 2026
0782f49
import
ea-rus Apr 24, 2026
71e2634
fixes
ea-rus Apr 27, 2026
831182c
fix write scratchpad and memory
ea-rus Apr 27, 2026
47f4084
support multi format
ea-rus Apr 27, 2026
3ada6f0
less tests
ea-rus Apr 27, 2026
3608cea
remove inject provenance suffix
ea-rus Apr 27, 2026
7349669
write imported file to output
ea-rus Apr 27, 2026
9bd8a9a
share status
ea-rus Apr 27, 2026
b313489
share history
ea-rus Apr 27, 2026
6af657d
share history
ea-rus Apr 27, 2026
bd3a8a6
autocomplete
ea-rus Apr 27, 2026
7d6ebf5
Merge branch 'main' into export-session
ea-rus Apr 27, 2026
92bd003
fixes
ea-rus Apr 28, 2026
a3cb333
fixes
ea-rus Apr 28, 2026
add1684
testing
ea-rus Apr 28, 2026
154e9c5
fixes
ea-rus Apr 28, 2026
9cc9316
fix tests
ea-rus Apr 28, 2026
253de7c
log datasources
ea-rus Apr 28, 2026
9739e5d
show datasources
ea-rus Apr 28, 2026
e82e031
fix tests
ea-rus Apr 28, 2026
2bb3983
naming
ea-rus Apr 28, 2026
6f53af0
tests
ea-rus Apr 28, 2026
6c52825
remove _SimpleHistoryStore
ea-rus Apr 29, 2026
73852cf
fixes
ea-rus Apr 29, 2026
97b14db
fixes
ea-rus Apr 29, 2026
25c110b
fix restore session and turn
ea-rus Apr 29, 2026
8ca0d45
remove turns instead of episodes
ea-rus Apr 29, 2026
6c5b8c4
update HistoryStore
ea-rus Apr 29, 2026
ebf3696
fixes
ea-rus Apr 29, 2026
275d096
fix: get last 5 user messages from history
ea-rus Apr 29, 2026
a78d81c
deny to export empty session
ea-rus May 4, 2026
b0334ac
Merge pull request #142 from mindsdb/manage-episodes
torrmal May 8, 2026
59bf851
Merge pull request #143 from mindsdb/fix-maybe-identity2
torrmal May 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 54 additions & 12 deletions anton/chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
handle_setup_models,
)
from anton.commands.ui import handle_explain, handle_theme, print_slash_help, make_completer
from anton.commands.ui import SKILLS_COMMANDS, THEME_COMMANDS, COMMANDS
from anton.commands.ui import SKILLS_COMMANDS, THEME_COMMANDS, SHARE_COMMANDS, COMMANDS

from anton.utils.clipboard import (
ensure_clipboard,
Expand All @@ -58,6 +58,7 @@
handle_skill_show,
handle_skills_list,
)
from anton.commands.share import handle_share_export, handle_share_import, handle_share_status, handle_share_history
from anton.tools import CONNECT_DATASOURCE_TOOL, PUBLISH_TOOL
from anton.utils.prompt import (
prompt_or_cancel,
Expand Down Expand Up @@ -1011,11 +1012,19 @@ async def _chat_loop(
global_memory_dir = Path.home() / ".anton" / "memory"
project_memory_dir = settings.workspace_path / ".anton" / "memory"

from anton.core.memory.episodes import EpisodicMemory

episodes_dir = settings.workspace_path / ".anton" / "episodes"
episodic = EpisodicMemory(episodes_dir, enabled=settings.episodic_memory)
if episodic.enabled:
episodic.start_session()

cortex = Cortex(
global_hc=Hippocampus(global_memory_dir),
project_hc=Hippocampus(project_memory_dir),
mode=settings.memory_mode,
llm_client=state["llm_client"],
episodic=episodic if episodic.enabled else None,
)

# Reconsolidation: migrate legacy memory formats on first run
Expand All @@ -1031,13 +1040,6 @@ async def _chat_loop(
if cortex.needs_compaction():
asyncio.create_task(cortex.compact_all())

from anton.core.memory.episodes import EpisodicMemory

episodes_dir = settings.workspace_path / ".anton" / "episodes"
episodic = EpisodicMemory(episodes_dir, enabled=settings.episodic_memory)
if episodic.enabled:
episodic.start_session()

from anton.memory.history_store import HistoryStore

history_store = HistoryStore(episodes_dir)
Expand Down Expand Up @@ -1143,11 +1145,11 @@ def _bottom_toolbar():
mouse_support=False,
bottom_toolbar=_bottom_toolbar,
style=pt_style,
completer=make_completer([THEME_COMMANDS, SKILLS_COMMANDS, COMMANDS, MEMORY_COMMANDS]),
completer=make_completer([THEME_COMMANDS, SKILLS_COMMANDS, SHARE_COMMANDS, COMMANDS, MEMORY_COMMANDS]),
complete_while_typing=True,
)

memory_manage = MemoryManage(console, settings, cortex, episodic=episodic)
memory_manage = MemoryManage(console, settings, cortex, episodic=episodic, history_store=history_store)
try:
while True:
# Memory confirmation UX — show pending lessons before prompt
Expand Down Expand Up @@ -1228,7 +1230,7 @@ def _bottom_toolbar():
# Detect dragged file paths early — a dragged absolute path like
# "/Users/foo/bar.txt" starts with "/" and would otherwise be
# mistaken for a slash command.
if message_content is None and stripped.startswith("/"):
if message_content is None and stripped.startswith("/") and not stripped.startswith("/share"):
dropped_early = _parse_dropped_paths(stripped)
if dropped_early:
stripped = format_file_message(stripped, dropped_early, console)
Expand Down Expand Up @@ -1279,7 +1281,7 @@ def _bottom_toolbar():
)
continue
elif cmd == "/memory":
await memory_manage.handle(cmd=stripped)
await memory_manage.handle(cmd=stripped, session=session)
continue
elif cmd == "/connect":
arg = parts[1].strip() if len(parts) > 1 else ""
Expand Down Expand Up @@ -1347,6 +1349,46 @@ def _bottom_toolbar():
elif cmd == "/skills":
handle_skills_list(console)
continue
elif cmd == "/share":
sub_parts = parts[1].strip().split(maxsplit=1) if len(parts) > 1 else []
sub = sub_parts[0] if sub_parts else ""
rest = sub_parts[1] if len(sub_parts) > 1 else ""
if sub == "export":
await handle_share_export(
console,
session,
workspace,
state["llm_client"],
episodic if episodic.enabled else None,
summary_only="--summary" in rest,
)
elif sub == "import":
if not rest:
console.print("[anton.warning]Usage: /share import <file>[/]")
console.print()
else:
session = await handle_share_import(
console,
session,
workspace,
settings,
state,
self_awareness,
cortex,
episodic if episodic.enabled else None,
history_store,
filepath=rest,
)
current_session_id = session._session_id
elif sub == "status":
handle_share_status(console, session, workspace)
elif sub == "history":
handle_share_history(console, workspace)
else:
usage = " | ".join(c.command for c in SHARE_COMMANDS)
console.print(f"[anton.warning]Usage: {usage}[/]")
console.print()
continue
elif cmd == "/resume":
session, resumed_id = await handle_resume(
console,
Expand Down
23 changes: 21 additions & 2 deletions anton/commands/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,9 @@ async def handle_resume(
console.print()

choices = [str(i) for i in range(1, len(sessions) + 1)] + ["q"]
choices_display = f"1-{len(sessions)}/q" if len(sessions) > 1 else "1/q"
choice = await prompt_or_cancel(
"(anton) Select session (or q to cancel)", choices=choices, default="q"
"(anton) Select session (or q to cancel)", choices=choices, choices_display=choices_display, default="q"
)
if choice is None or choice == "q":
console.print()
Expand All @@ -74,6 +75,24 @@ async def handle_resume(
idx = int(choice) - 1
selected = sessions[idx]
sid = selected["session_id"]
return await restore_session(
sid, console, settings, state, self_awareness, cortex, workspace,
session, episodic, history_store
)


async def restore_session(
sid: str,
console: Console,
settings: AntonSettings,
state: dict,
self_awareness,
cortex: "Cortex | None",
workspace: "Workspace | None",
session: "ChatSession",
episodic: "EpisodicMemory | None" = None,
history_store: "HistoryStore | None" = None,
):

history = history_store.load(sid)
if history is None:
Expand Down Expand Up @@ -106,7 +125,7 @@ async def handle_resume(

console.print()
console.print(
f"[anton.success]Resumed session from {selected['date']} ({selected['turns']} turns)[/]"
f"[anton.success]Resumed session from {sid} ({new_session._turn_count} turns)[/]"
)
console.print()

Expand Down
Loading
Loading