Closed TeamSPoon closed 1 week ago
I will confirm these are the origins of all the evil
(To make sure you knew about logicmoo_utils
being part of the problem)
(I snipped away some of the output that isn't part of it though)
root@hero:/opt/hyperon/metta-wam# grep -n -C 1 -E "history|readli" -R src/packs/ src/canary --include="*.pl"
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-321-:- else.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:322::- if(exists_source(library(readline))).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:323: :- system:use_module(library(readline)).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-324-:- else.
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-328-:- endif.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:329:setup_hist0:- '$toplevel':setup_history.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-330-:- initialization(setup_hist0, now).
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-534-:- system:use_module(library(prolog_format)).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:535::- system:use_module(library(prolog_history)).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-536-:- system:use_module(library(prolog_install)).
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-562-:- system:use_module(library(rdf_write)).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:563::- system:use_module(library(readline)).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-564-:- system:use_module(library(readln)).
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-735- shell_format('lsof -t -i:~w | xargs --no-run-if-empty kill -9',[PORT100]),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:736: % shell_format('nohup node app.js -p ~w -c rlwrap -a -A -r -c -N -r --file=completion_~w --history-filename=history_~w -s 1000 telnet localhost ~w &',[PORT100,PORT,PORT,PORT]),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:737: shell_format('nohup ttyd -r 100 -p ~w rlwrap -a -A -r -c -N -r --file=completion_~w --history-filename=history_~w -s 1000 telnet localhost ~w &',[PORT100,PORT,PORT,PORT]),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-738- !.
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-805- (\+ compound(Goal); \+ functor(Goal,at_current_Y,_)),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:806: % add_history(MGoal),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-807- source_location(S,L),!,at_phase(at_current_Y(cuz(S:L),M:Goal), When).
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1013-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1014:%setup_hist:- '$toplevel':setup_history.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1015-%:- setup_hist.
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1111-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1112::- module_transparent((add_history/1,qsave_lm/1,ignore_not_not/1,load_library_system/1,
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1113- all_source_file_predicates_are_transparent/0,
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1358-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1359::- system:use_module(library(prolog_history)).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1360-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1361:add_history(_):- prolog_load_context(reloading, true),!.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1362:add_history(O):- add_history1(O).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1363::- export(add_history/1).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1364::- export(add_history1/1).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1365:add_history1(O):- is_list(O), member(E,O), compound(E), !, maplist(add_history,O).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1366:%add_history(O):- !, wdmsg(not_add_history(O)),!.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1367:add_history1(O):- ignore_not_not((nonvar(O),make_historical(O,A),add_history0(A))),!.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1368-
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1381-make_historical0(whenever_flag_permits(_,O),A):-!,make_historical0(O,A).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1382:make_historical0(add_history(O),A):-!,make_historical(O,A).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1383-make_historical0(O,A):- string(O),A=O.
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1389-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1390:%:- multifile prolog:history/2.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1391-:- nb_setval('$without_color',[]).
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1402-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1403:default_history_file(File):-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1404: catch(prolog_history:dir_history_file('.', File), E,
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1405- (print_message(warning, E),fail)),!.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1406-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1407::- set_prolog_flag(history, 5000).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1408::- dynamic(histtmp:history_data/1).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1409-
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1419-carelessly(G):- ignore(notrace(catch(G,E,((wemsg(E)),!,fail)))).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1420:add_history0(_):- notrace(app_argv('--no-history')),!.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1421:add_history0(S):-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1422: forall(clause('$history':'$history'(_,W),true,_Ref),carelessly(add_history00(W))),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1423: carelessly(add_history00(S)),!.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1424-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1425:add_history00(A):- make_historical(A,S),!,add_history01(S).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1426:add_history01(A):- histtmp:history_data(A),!.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1427:add_history01(A):- assert(histtmp:history_data(A)),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1428: default_history_file(File),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1429- carelessly(setup_call_cleanup(open(File,append,Out),format(Out,'~w~n',[A]),close(Out))),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1430: ((fail,current_prolog_flag(readline,editline)) -> User_input = libedit_input; User_input = user_input),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1431: prolog:history(User_input, load(File)).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1432-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1433:get_hist_next_num(N1):- clause('$history':'$history'(N,_),true,_Ref), !, N1 is N + 1.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1434-get_hist_next_num(1).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1435-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1436:add_history02(A0):-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1437- make_historical(A0,A),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1438: carelessly(prolog_history:prolog_history(enable)),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1439- current_input(S),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1440- get_hist_next_num(N),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1441: asserta('$history':'$history'(N,A)),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1442: (current_prolog_flag(readline,editline) -> User_input = libedit_input; User_input = user_input),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1443: carelessly(prolog:history(S,add(A))),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1444- ignore((
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1446- ( \+ same_streams(S,UI)),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1447: carelessly(prolog:history(User_input,add(A))))),!,
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1448: nop(carelessly((default_history_file(File),prolog:history(User_input, save(File))))).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1449-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1450:add_history2(X):- make_historical(X,H),assertz_new(histtmp:history_data(H)).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1451-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1452:load_history_from_file(File):- \+ exists_file(File),!.
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1453:load_history_from_file(File):-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1454- setup_call_cleanup(
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1455- open(File,read,In,[encoding(utf8)]),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1456: (repeat, read_line_to_string(In,String), (String=end_of_file -> ! ; (add_history2(String), fail))),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1457- close(In)).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1458-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1459:load_history:-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1460: carelessly(prolog_history:prolog_history(enable)),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1461: default_history_file(File),doug_only(show_call(always,load_history_from_file(File))),!,
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1462: %(current_prolog_flag(readline,editline) -> User_input = libedit_input; User_input = user_input),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1463: %prolog:history(User_input, load(File)),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1464: doug_only(listing('$history':'$history'/2)),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1465: doug_only(listing(histtmp:history_data/1)),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1466- !.
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1494- format(atom(A), '~W', [Goal, [fullstop(true),portray(true),quoted(true),variable_names(Bindings)]]),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:1495: add_history0(A))))),
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1496- fail.
--
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-1999-
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl:2000::- now_and_later(ignore(load_history)).
src/packs/logicmoo_utils/prolog/logicmoo_startup.pl-2001-:- fixup_exports.
--
src/packs/logicmoo_utils/prolog/logicmoo_test_header.pl-27-% Load Editline/Readline
src/packs/logicmoo_utils/prolog/logicmoo_test_header.pl:28::- if( \+ current_module(prolog_history)).
src/packs/logicmoo_utils/prolog/logicmoo_test_header.pl-29-:- if((set_stream(current_input,tty(true)))). :- endif.
src/packs/logicmoo_utils/prolog/logicmoo_test_header.pl-30-:- if(( %ignore(exists_source(library(editline))->use_module(library(editline))
src/packs/logicmoo_utils/prolog/logicmoo_test_header.pl:31: %;(exists_source(library(readline)),use_module(library(readline)))),
src/packs/logicmoo_utils/prolog/logicmoo_test_header.pl-32- '$toplevel':( setup_colors,
src/packs/logicmoo_utils/prolog/logicmoo_test_header.pl:33: setup_history,
src/packs/logicmoo_utils/prolog/logicmoo_test_header.pl:34: setup_readline))). :- endif.
src/packs/logicmoo_utils/prolog/logicmoo_test_header.pl-35-:- endif.
--
src/canary/metta_repl.pl:1:load_and_trim_history:-
src/canary/metta_repl.pl-2- notrace((
src/canary/metta_repl.pl:3: current_input(In), %catch(load_history,_,true),
src/canary/metta_repl.pl:4: ignore(install_readline(In)) )).
src/canary/metta_repl.pl-5-
--
src/canary/metta_repl.pl-19-repl2:-
src/canary/metta_repl.pl:20: load_and_trim_history,
src/canary/metta_repl.pl-21- repeat,
--
src/canary/metta_repl.pl-123- normalize_space(string(Renew),NewAccumulated),
src/canary/metta_repl.pl:124: add_history_string(Renew).
src/canary/metta_repl.pl-125-repl_read(Accumulated, Expr) :- read_line_to_string(current_input, Line), repl_read(Accumulated, Line, Expr).
--
src/canary/metta_repl.pl-142-
src/canary/metta_repl.pl:143:add_history_string(Str):- notrace(ignore(add_history01(Str))),!.
src/canary/metta_repl.pl-144-
src/canary/metta_repl.pl:145:add_history_src(Exec):- notrace(ignore((Exec\=[],with_output_to(string(H),with_indents(false,write_src(Exec))),add_history_string(H)))).
src/canary/metta_repl.pl-146-
src/canary/metta_repl.pl:147:add_history_pl(Exec):- var(Exec), !.
src/canary/metta_repl.pl:148:add_history_pl(eval(_,catch_red(PL),_)):- !,add_history_pl(PL).
src/canary/metta_repl.pl:149:add_history_pl(show_failure(PL)):-!,add_history_pl(PL).
src/canary/metta_repl.pl:150:add_history_pl(as_tf(PL,_OUT)):-!,add_history_pl(PL).
src/canary/metta_repl.pl:151:add_history_pl(Exec):- notrace(ignore((Exec\=[],with_output_to(string(H),with_indents(false,(writeq(Exec),writeln('.')))),add_history_string(H)))).
src/canary/metta_repl.pl-152-
--
src/canary/metta_repl.pl-176-
src/canary/metta_repl.pl:177::- set_prolog_flag(history, 3).
src/canary/metta_repl.pl-178-
--
src/canary/metta_repl.pl-254- % color_g_mesg('#fa90f6', (writeln('; SKIPPING'), with_indents(true,write_src(exec(BaseEval))))),
src/canary/metta_repl.pl:255: % if_t(is_list(BaseEval),add_history_src(exec(TermV))),
src/canary/metta_repl.pl-256- true
--
src/canary/metta_repl.pl-268- user:name_vars('OUT'=X),
src/canary/metta_repl.pl:269: % add_history_src(exec(BaseEval)),
src/canary/metta_repl.pl-270- if_t(Skipping==1,writeln(' ; SKIPPING')),
--
src/canary/metta_repl.pl-275- if_t( \+ option_value(repl,true),
src/canary/metta_repl.pl:276: if_t( option_value(prolog,true), add_history_pl(PL)))),
src/canary/metta_repl.pl:277: if_t(option_value(repl,true), add_history_src(exec(BaseEval))))),
src/canary/metta_repl.pl-278-
--
src/canary/metta_repl.pl-487-
src/canary/metta_repl.pl:488::- dynamic(is_installed_readline_editline/1).
src/canary/metta_repl.pl:489::- volatile(is_installed_readline_editline/1).
src/canary/metta_repl.pl:490:install_readline_editline:- current_input(Input), install_readline(Input),!.
src/canary/metta_repl.pl-491-
src/canary/metta_repl.pl:492:install_readline(Input):- is_installed_readline_editline(Input),!.
src/canary/metta_repl.pl:493:install_readline(_):- is_compatio,!.
src/canary/metta_repl.pl:494:install_readline(_):-!.
src/canary/metta_repl.pl:495:install_readline(Input):-
src/canary/metta_repl.pl:496: assert(is_installed_readline_editline(Input)),
src/canary/metta_repl.pl:497: install_readline_editline1,
src/canary/metta_repl.pl:498: use_module(library(readline)),
src/canary/metta_repl.pl-499- use_module(library(editline)),
src/canary/metta_repl.pl:500: nop(catch(load_history,_,true)),
src/canary/metta_repl.pl:501: add_history_string("!(pfb3)"),
src/canary/metta_repl.pl:502: add_history_string("!(load-flybase-full)"),
src/canary/metta_repl.pl:503: add_history_string("!(obo-alt-id $X BS:00063)"),
src/canary/metta_repl.pl:504: add_history_string("!(and (total-rows $T TR$) (unique-values $T2 $Col $TR))"),
src/canary/metta_repl.pl-505- nop(ignore(editline:el_wrap)),
--
src/canary/metta_repl.pl-511-
src/canary/metta_repl.pl:512:install_readline_editline1 :-
src/canary/metta_repl.pl-513- setup_done,
src/canary/metta_repl.pl-514- !.
src/canary/metta_repl.pl:515:install_readline_editline1 :-
src/canary/metta_repl.pl-516- asserta(setup_done),
src/canary/metta_repl.pl-517- '$toplevel':(
src/canary/metta_repl.pl:518: '$clean_history',
src/canary/metta_repl.pl-519- apple_setup_app,
--
src/canary/metta_repl.pl-528- catch(setup_backtrace, E1, print_message(warning, E1)),
src/canary/metta_repl.pl:529: catch(setup_readline, E2, print_message(warning, E2)),
src/canary/metta_repl.pl:530: catch(setup_history, E3, print_message(warning, E3)),
src/canary/metta_repl.pl-531- catch(setup_colors, E4, print_message(warning, E4))),
src/canary/metta_repl.pl:532: install_readline(user_input).
src/canary/metta_repl.pl-533-
--
src/canary/metta_interp.pl-57-:- ensure_loaded(swi_support).
src/canary/metta_interp.pl:58::- set_prolog_flag(history, 10).
src/canary/metta_interp.pl:59::- set_prolog_flag(save_history, true).
src/canary/metta_interp.pl-60-:- set_prolog_flag(backtrace,true).
--
src/canary/metta_interp.pl-272-%:- set_stream(user_input,tty(true)).
src/canary/metta_interp.pl:273::- if(exists_source(library(readline))).
src/canary/metta_interp.pl:274::- use_module(library(readline)).
src/canary/metta_interp.pl-275-:- endif.
--
src/canary/metta_interp.pl-801-save_html_of(_):- \+ has_loonit_results, \+ option_value('html',true).
src/canary/metta_interp.pl:802:save_html_of(_):- loonit_report, !, writeln('<br/> <a href="#" onclick="window.history.back(); return false;">Return to summaries</a><br/>').
src/canary/metta_interp.pl-803-save_html_of(_Filename):-!.
--
src/canary/metta_interp.pl-809- tee_file(TEE_FILE),
src/canary/metta_interp.pl:810: writeln('<br/> <a href="#" onclick="window.history.back(); return false;">Return to summaries</a><br/>'),
src/canary/metta_interp.pl-811- sformat(S,'ansi2html -u < "~w" > "~w" ',[TEE_FILE,HtmlFilename]),
--
src/canary/metta_interp.pl-1644- %if_t(is_compiled,ensure_mettalog_py),
src/canary/metta_interp.pl:1645: install_readline_editline,
src/canary/metta_interp.pl-1646- nts,
--
src/canary/metta_interp.pl-1648- metta_final,
src/canary/metta_interp.pl:1649: nop(load_history),
src/canary/metta_interp.pl:1650: set_prolog_flag(history, 3),
src/canary/metta_interp.pl-1651- % ensure_corelib_types,
--
src/canary/metta_interp.pl-1761-:- initialization(update_changed_files,restore).
src/canary/metta_interp.pl:1762::- set_prolog_flag(history, 3).
src/canary/metta_interp.pl-1763-
--
src/canary/swi_support.pl-182-
src/canary/swi_support.pl:183::- if( \+ current_predicate(add_history1/1)).
src/canary/swi_support.pl:184:add_history1(_).
src/canary/swi_support.pl-185-:- endif.
src/canary/swi_support.pl-186-
src/canary/swi_support.pl:187::- if( \+ current_predicate(add_history/1)).
src/canary/swi_support.pl:188:add_history(_).
src/canary/swi_support.pl-189-:- endif.
--
src/canary/metta_testing.pl-754-mf('./src/test_nspace.metta').
src/canary/metta_testing.pl:755::- forall(mf(H),add_history1(load_metta(H))).
src/canary/metta_testing.pl-756-%:- load_metta
root@hero:/opt/hyperon/metta-wam#
So far so good! Lets close this for now
In the MeTTaLog REPL, the history management has significant issues leading to performance degradation and failure to preserve history across sessions:
User Report:
When the history becomes too large, users are forced to manually clear it by deleting the contents of the
~/.config/swi-prolog/dir-history/
directory to restore normal REPL performance.Current Behavior and Bugs:
Performance Issues Due to History Overload:
Failure to Preserve History Between Runs:
Expected Behavior:
Additional Context:
This issue is not only a performance problem but also a usability concern, as the history system is currently doing more harm than good. Users face slowdowns due to overloaded history and yet still lose all their commands between sessions. Addressing these issues will improve both the speed and reliability of the REPL.