1- """CLI entry points: interactive TUI session and command-line commands .
1+ """CLI entry points: interactive TUI session and configuration .
22
33Commands:
44 run [project] interactive TUI agent session (default)
55 config [--init] show effective LLM config / write a template file
6- init [project] create/update AGENTS.md
7- review [args] review uncommitted changes / commit / branch / PR
8- <custom> any prompt file in prompts/commands/ (except
9- TUI-only slash commands such as explain)
10- summary summarize the current (saved) session
11- sessions list saved sessions
12- restore <file> restore a saved session
13- restore-latest restore the newest session
6+ <custom> any prompt file in prompts/commands/
7+
8+ init, review, sessions, restore (and summary/explain) are TUI slash
9+ commands only — see the TUI help for /init /review /sessions /restore.
1410
1511Configuration (LLM etc.) is read from a JSON file, by default
1612~/.config/python-agent-harness/config.json; see `config --init`.
2824 SessionCommand , find_command , load_custom_commands ,
2925)
3026from .agent_session import AgentSession
31- from .session_store import SessionStore
3227from .tools import default_registry
3328
3429
@@ -127,16 +122,6 @@ def cmd_config(args: argparse.Namespace) -> int:
127122 return 0
128123
129124
130- def cmd_init (args : argparse .Namespace ) -> int :
131- _run_command (initialize_command (), args .project , args .extra , args .config )
132- return 0
133-
134-
135- def cmd_review (args : argparse .Namespace ) -> int :
136- _run_command (review_command (), args .project , args .arguments , args .config )
137- return 0
138-
139-
140125def cmd_custom (args : argparse .Namespace ) -> int :
141126 cmd = find_command (args .command_name )
142127 if cmd is None :
@@ -171,59 +156,6 @@ def _adopt(session: AgentSession, kw: dict) -> AgentSession:
171156 return session
172157
173158
174- def cmd_sessions (args : argparse .Namespace ) -> int :
175- files = SessionStore .list_sessions ()
176- if not files :
177- print ("no saved sessions" )
178- return 0
179- for f in files :
180- try :
181- meta = SessionStore .parse_metadata (open (f , encoding = "utf-8" ).read ())
182- except OSError as e :
183- print (f"{ os .path .basename (f ):60s} (unreadable: { e } )" )
184- continue
185- print (
186- f"{ os .path .basename (f ):60s} "
187- f"model={ meta .get ('gptel-model' , '?' ):20s} "
188- f"project={ meta .get ('python-agent-harness--project-dir' , '?' )} "
189- )
190- return 0
191-
192-
193- def cmd_restore (args : argparse .Namespace ) -> int :
194- from .session_store import SessionStore as Store
195- from .session_store import title_from_filename
196-
197- path = args .file
198- if not path and args .latest :
199- path = Store .latest_session ()
200- if not path :
201- print ("no session file given" , file = sys .stderr )
202- return 1
203- try :
204- text = open (path , encoding = "utf-8" ).read ()
205- except OSError as e :
206- print (f"cannot read { path } : { e } " , file = sys .stderr )
207- return 1
208- meta = Store .parse_metadata (text )
209- body = Store .strip_metadata (text )
210- project = meta .get ("python-agent-harness--project-dir" ) or os .getcwd ()
211- model = meta .get ("gptel-model" ) or config .DEFAULT_MODEL
212- session = make_session (
213- project ,
214- config_path = args .config ,
215- model = model ,
216- )
217- session .store .file_path = path
218- title = title_from_filename (path )
219- session .store .title = title
220- print (f"restored: { path } (project={ project } , model={ model } )" )
221- print ("conversation preview:" )
222- print ("\n " .join (body .splitlines ()[:20 ]))
223- session .close ()
224- return 0
225-
226-
227159def _add_config_arg (
228160 parser : argparse .ArgumentParser , suppress : bool = False
229161) -> None :
@@ -255,16 +187,6 @@ def build_parser() -> argparse.ArgumentParser:
255187 p_config .add_argument ("--path" , metavar = "PATH" , help = "config file path" )
256188 p_config .set_defaults (func = cmd_config )
257189
258- p_init = sub .add_parser ("init" , help = "create/update AGENTS.md" )
259- _add_config_arg (p_init , suppress = True )
260- p_init .add_argument ("project" , nargs = "?" , help = "project directory" )
261- p_init .add_argument ("--extra" , help = "extra instructions" )
262-
263- p_review = sub .add_parser ("review" , help = "review code changes" )
264- _add_config_arg (p_review , suppress = True )
265- p_review .add_argument ("project" , nargs = "?" )
266- p_review .add_argument ("arguments" , nargs = "?" , help = "commit/branch/PR, or empty" )
267-
268190 for cmd in load_custom_commands ():
269191 if cmd .name in TUI_ONLY_COMMANDS :
270192 continue # TUI slash command only (e.g. /explain)
@@ -273,15 +195,6 @@ def build_parser() -> argparse.ArgumentParser:
273195 p .add_argument ("project" , nargs = "?" )
274196 p .add_argument ("extra" , nargs = "?" , help = "arguments for the command" )
275197 p .set_defaults (func = cmd_custom , command_name = cmd .name )
276-
277- p_sessions = sub .add_parser ("sessions" , help = "list saved sessions" )
278- p_sessions .set_defaults (func = cmd_sessions )
279-
280- p_restore = sub .add_parser ("restore" , help = "restore a saved session" )
281- _add_config_arg (p_restore , suppress = True )
282- p_restore .add_argument ("file" , nargs = "?" , help = "session file path" )
283- p_restore .add_argument ("--latest" , action = "store_true" , help = "restore newest session" )
284- p_restore .set_defaults (func = cmd_restore )
285198 return parser
286199
287200
@@ -292,10 +205,6 @@ def main(argv: list[str] | None = None) -> int:
292205 return cmd_run (args )
293206 if args .command == "config" :
294207 return cmd_config (args )
295- if args .command == "init" :
296- return cmd_init (args )
297- if args .command == "review" :
298- return cmd_review (args )
299208 if hasattr (args , "func" ):
300209 return args .func (args )
301210 parser .print_help ()
0 commit comments