Emacs programming-by-demonstration record/playback (with state-introspection/constraints) program-synthesis system
BrainLeach has evolved somewhat, originally it was for learning procedures from shell sessions, to create documented scripts to achieve different purposes. I have included the original documentation below. Now there is an emphasis on programming-by-demonstration in order to learn how to make Debian packages, and other goals.
command log mode from: https://github.com/aindilis/kmax/blob/master/kmax.el
My main goal at present it to package lots of AI software, and expose APIs to it, so that people have access to more capabilities. Pursuant to this I am working on auto-packaging software. In the past I wrote packager, which expedites a lot of the packaging tasks for the user but packager never learned anything, it just was some hard coded tricks.
So now I'm working on a system that can learn from human packagers, it's called BrainLeach. It's sort of a programming- by-demonstration system. At this point all it really does is log all Emacs keys combinations, function invocations and shell commands, and can replay them. The idea is to create an intelligent agent that can work in a GNU/Linux shell/emacs environment. (see https://frdcsa.org/~andrewdo/software/domains.lisp) This is a planning domain for one such agent, called a softbot. If all the commands for packaging were specified in such a domain, and we had access to the softbot software itself, this would be almost straightforward. But I cannot get ahold of any softbot software unfortunately. I'm working on my own such system: https://github.com/aindilis/prolog-agent but it's a really hard domain. If anyone is interested in helping, or can recommend algorithms that would help with learning how to package from BrainLeach's traces, that would be great. Since BrainLeach runs in Emacs, it's capable of adding lots of hooks to record specific state during execution so like for any shells that are created I have it exporting the ENV VARs, and other things like that. You'll need the rest of FRDCSA to make it work, but fortunately I'm very close to releasing a public version of the FRDCSA on a 5GB VirtualBox VM
The name Brain Leach was tip of the tounge humor from Joe Gresham regarding this functionality. Brainleach records session commands. It keeps a basic, expandable todo list (an [[HTN]]). There is a current task context which is defined as a subset of goals from the HTN. The most precise context is obtained by taking the current task context and repeatedly applying the following rule: if all children of a node are in the set, the parent is included and the children removed. As atomized commands are recorded into the [[Atomized Command List]], each terminal node in the HTN is associated with a subsequence of the [[Atomized Command List]], called the [[Task Script]], s.t. foreach element s_i in S exists s_j in S j>i s.t. depends(S_j,S_i), and that the sequence is sufficient to achieve the task. These commands can then be reapplied against a system automatically to reobtain the result. It is possible to edit the sequences ex post facto. All instances of [[task script]] are stored in a database that can be consulted for reference. There are also added to the wiki. Tasks in the HTN are associated with RT tickets. Based on closing of tickets, preference relations, and possibly judgements of the complexity and necessity of various tasks, scores are computed for productivity that are fed into the score system. Possibly there should be visualization of the progress of the systems in [[Problemspace]] or [[Setanta]]. There are checklist lookups and automated assistance. The computer can take over the completion of more complex tasks. In this way, [[task script]]s are automatically developed for various tasks and added to a library. The [[task script]]s are also added to the wiki in docbook style formatting. Comments are also solicited from the user, and the system often asks the user to clarify what the previous steps accomplished. The user is able to issue commands to interact with the task database. For now it only works off the shell and in emacs and possibly screen, but in the future should be more responsive to using more programs. The problem is that we cannot currently record them. Brainleach gets Emacs input from Manager::Records::Context. Should have an interface for auto-posting to RT about what has already been done. Records all sessions, so as to provide the ability to review later when that code is complete.