# MadKit - Version History

#### Olivier Gutknecht, Jacques Ferber, Fabien Michel, and all the MadKit Team
<olg@madkit.org>, <ferber@madkit.org>, <fmichel@lirmm.fr>

## V4.1.2 "Arpeggios"

#### New features

- A new Designer agent, which allows the user to easily develop new programs in MadKit. Very handy to start an application, test agents, etc. (unfortunately this feature does not work properly on Mac OS 10.3, due to a gui problem. We have not tried in Tiger..)
- New interface for turtlekit....
- SEdit is now able to work either as a component of MadKit or as a standalone interface.
- There is now a launcher for Mac OS

Bug correction

- Corrected several minor bugs
- Corrected missing links in the documentation

## V4.0 a7 "Bubbles"

#### New features

- A new Editor agent, the JSynEditor has been developped specially for MadKit by a group of students of the University of Montpellier. This editor is component based and has all the features of the previous EditorAgent with added capabilities: syntax coloring, full search, replace, undo/redo, java browsing facilities, templates, etc...
- The DocBrowser gots its information from the PluginAgent which are loaded at run time.

## V4.0 a6 "True Color"

All agents of version 3.1.xx should work without any problem: you may just have to change the 'import' statements
in the header of your java files. See the file 'index.html' and follow the links.

#### New features

- The PluginManager is an installer specifically built for MadKit which uses agents to install and upgrade the MadKit platform.
- It is possible to build agents and recompile a Java project without quitting MadKit, due to the integration of ant to MadKit. A very important and often asked feature. Double click on an 'build.xml' file in the plugin directory, and all agents are automatically recompiled and reloaded.
- Integration of all the Warbot projects of the LIRMM 2004 Warbot tournament, with their sources and documentation (in french).
- The MadKit applet does work now, and is much better than before...
- There is a DocBrowser agent, inside MadKit which is used to browse through all the manuals of MadKit. You may develop your own manual and add it to the DocBrowser.

## V4.0 pre1 "Shade" (25/11/2003)

MadKit is back in a refunded software architecture and a new desktop look. The MadKit distribution is now more modular and it is very easy to add new modules (called plugins) at will.

This is still a pre-release, which means that the documentation needs a major update, and that some features which worked in the previous version still don't work (see below).

All agents of version 3.1.xx should work without any problem: you may just have to change the 'import' statements
in the header of your java files. See the file 'index.html' and follow the links.

#### New feature

- MadKit 4.0 comes with a new software architecture which allows for different usages.
  You may use the part of MadKit that you really need.
- The Desktop has been totally rewritten. It is now totally modifiable to suit
  your needs. You may even change the background color or image...
- There is a new Explorer agent which allows for the launching of agents and execution
  of non agent files.
- The communicator is now programmable. It is possible to ask it to connect
  to another kernel by sending it a message.
- There is also a new NetComm agent which allows for new features
- The Share plugin allows different user to share document over a MadKit network.
  You may use it to share documents (agents scripts, etc..)

#### Features not reimplemented yet

- jEdit does not work with this release, but it should work quite soon.
- the MadKit Applet does not work.
- the AgentJSP has not been updated to work with this version.

## V3.1b5 - "Deadend" (10/03/2003)

This is to be the last 3.xx version of MadKit. Next version will be the new 4.x version which comes with a complete remodelling of the software architecture.

#### Bug correction

- Corrected the very annoying bug which appeared on the Desktop with screen resolution equals or below 1024x768. I hope this won't happen anymore.
- The MemoryMonitor, which was the most important cause of this bug is not placed in the dock of the software at launch time. It is now available from a toolbar in the desktop.ini file.

#### New features

- It is now possible to change the look and feel of MadKit. MadKit comes now with SkinLF, a skin manager with which you may change the look of MadKit. See www.L2FProd.com/software/skinlf/index.html, the home of 'Skinlf' for more details about its use and how to get available themepacks. It comes with several themepacks. You may add you own by placing your theme pack in the libs/skins directory and changing the tag `<skin name="themepack.zip" />` to your preferred themepack in the `desktop.ini` file. If you don't want to use skins, just comment out this line.
- It is possible to launch a configuration of several agent by only clicking on a .cfg file in the desktop. To get the structure of a configuration file, see the content of the file `testconfig.cfg` file which create and launch several different agents.

## V3.1b4 - "Banshee" (15/01/2003)

#### New features

- There is now a flag which may be used to make sure that messages between agents take place only between two agents of the same group. The flag is: `--no-interGroup-Messages`, and should be set at MadKit startup (in a desktop.bat of .sh for example). For the moment this is just an attempt, and by default, this flag is not set. But, in the future, this flag will be set by default, and then be compliant with AGR... We have to check first that all our software work with this flag set! We know that this could be annoying for some of the users, but this is an important security issue...
- It is now possible to load Script files directly, using the "Open" button, and the File>Open Script File menu item.
- System properties are shown in the "About" dialog. Very handy to know which JVM is actually running...

## V3.1b3 - "Red Cloud 2" (8/12/2002)

Note: Surprisingly, this version has not been publicly released...

#### New features

Many Desktop new features...

- The Desktop has a new "Dockpane" which displays agents in a very pretty way... (tell Jacques (ferber@madkit.org) what you think of it). You may install agents when the Desktop is launched using the `<dockpane> ... </dockpane>` in the `desktop.ini` file. See this file to understand how to add your own agents. It is also possible to add agents in the dockpane directly from the menu, using the "launch in dockpane" feature from the `display` menu. This feature may evolve very soon: the explorer and the output will be considered as agents themselves.
- It is possible to set the size of the Desktop in the `desktop.ini` file with the `displaysize` tag. (for the moment this feature is commented out. But you may change it at will.
- The property box is now an agent. When it receives an ActMessage with a direct reference to an agent, it displays the properties of this agent.
- The agents' toolbar is now a tabbed pane. Then you may add your own agents... New agents have been installed in the Desktop using this feature.
- SEdit formalisms and SEdit files may be launched directly from toolbars of the Desktop.

Other new features are:

- Two new examples of agents have been included: a `GPongAgent` agent which plays ping pong with another agent of the same kind (test it on two different machines, it's fun..), and a distributed games to play TicTacToe or FourInARow (Puissance4 in French) with another partner (test it on two different machines, too. "it's more fun to compete" ;-) ).
- Some demos of Warbot done by french DEA (like MSc) students. have been added to this release... For the moment, the sources have not been added, but keep in touch, there will be more about this in future releases...

#### Corrected bugs and simple modifications

- Corrected little bugs in the Kernel.
- Corrected a bug in the use of ClassLoader. It is now possible to use the "extens" directory as a real extension directory and to create new Java Warbot agents (unfortunately this was impossible in the 3.1b2 release). It is also possible to launch ALL java agents (and even the newly designed and compiled agents) from BeanShell and Python.. There was a bug in the previous releases that prevented it.
- Corrected a bug in the GroupObserver (it is possible to select a group to observe as in previous 3.1 versions.
- Slightly modified the MemoryMonitorAgent to have a stop and a start button.

## V3.1b2 - "Anaïs" (13/07/2002)

#### New features

- The SiteAgent may receive messages to display information... Upon reception of a StringMessage with the header `$url`, it launches a WebBrowser and sends it the URL; when receiving a StringMessage with the header `$message`, the remaining part is shown in a pager (see below).
- The `RemoteEval.bsh` script now requires a password to enter the group. By default the passwd is '`madkit`'. You may change it for your own purpose. A better password mechanism, using encryption protocols, will be proposed soon. When an agent needs to enter the group (called '`bsheval-hostname`' where hostname is the name of the host site, it has to give a password. See the code in the script).
- A little agent, called a `Pager`, is used to display messages sent to a user. When receiving a message with header `$display`, the pager displays the remaining part of the string directly in its window.
- The `WebBrowserAgent` now accepts StringMessages with the commande : `$goto` followed by an URL address. It will accept other commands in the near future (receive a whole .html page, go backward or forward, home, etc..).
- A new scripted agent, `ServerWelcome`, (filename: `ServerWelcome.bsh`) sends a "welcome message" to a remote SiteAgent which is connecting. As a result, this opens a Pager in the connecting kernel. Very, very nice.... The `remoteconfig.cfg` configuration file has been updated to take this agent into account.
- A new scripted agent, `LogListener.bsh`, is used to log out all information that is distributed within a group. It has been designed to work as a companion of the OutputRouter agent.

#### Corrected bugs and simple modifications

- Corrected small bugs in the `getExistingGroups` and `getExistingRoles` methods of AbstractAgent..
- Changed the EditorAgent (which actually should be called NotePadAgent, this has to be done..): it shows communities, groups, and roles. There is also a new '`passwd`' field which may be used for groups which require a passwd to accept agents.

#### Remarks (from JF)

- It is clear that more and more agents will be done in scripting language. My preference goes to BeanShell, because it has a real Java syntax. But I assume that others would prefer Python, Scheme or Jess. This is so easy to develop and to test without leaving MadKit. I hope we will be able to do the same in Java one day...
- StringMessage tends to get the syntax `$<command> <argument>` where `$<command>` is simply a word, like `$request`, `$display`, `$goto`, etc.. and `<argument>` is the rest of the String... Is it a a way to close the gap between MadKit and FIPA, by using some kind of structured message?

## V3.1b1 - "Suntan" (07/072002)

#### New features

- The first 3.xx version of MadKit to be public... At last, MadKit is public again!!
- A simple server.bat (or server.sh) launches a "server" like version of MadKit. You may control this server from outside by sending beanshell commands to the agent playing the '`eval`' role of the group '`bsheval-<kernel>`'. Have fun.. This is just the beginning of a set of system agents making remote access to MadKit very easy. We also have to secure it ;-)
- The `OutputRouter` agent, which is part of the "server" bundle, captures the standard output and transforms the strings into StringMessages sent to the `listener` role.

#### Corrected bugs and simple modifications

- Corrected small bugs in the Turtle, in the SiteAgent, etc...

## V3.1a8 - "Swimming pool" (06/2002)

#### New features

- Nothing really new, except one thing: all files are now GPL or LGPL. Thus, MadKit is (at last) really open source!! I hope this will bring a lot of users and a lot of developpers. There are so many things one can develop with MadKit...
  - In MadKit everything is GPL except `madkit.jar` and `communicator.jar` which are LGPL. This means that MadKit may be used in commercial applications (but you have too build your own interfaces).
- A new icon on the desktop to launch the communicator. Its "lovely"...
- New agents: OutputRerouter, to send all standards output to "listener" agents, and a new script agent in BeanShell (called RemoteEval) to administrate a remote kernel (BeanShell is really great!!). Thus, it is now possible to administrate remote kernels in MadKit!! It will be necessary to introduce some security protections, but this will be done in next releases. I (JF) also started a RemoteEval in Python. It is clear that it is possible to make one in any scripting language.
- I bet this is the last "private" alpha version. Next release will be on sourceforge!! Yeah man...

#### Corrected bugs and simple modifications

- Modified the location of files relative to the "communicator". The communicator is not in `agents` any more. It has its own starting point.
- All images (except SEdit images) are now located in only one jar: images.jar. All sources have been modified (and debugged) accordingly.
- Script agents may now be launched in the .cfg files
- Corrected a simple bug in SiteAgent which supposed that MadKit was always in graphic mode.

## V3.1a7 - "Shower" (05/2002)

#### New features

- Re-integration of SEdit into MadKit.

1. The desktop now works as a SEdit launcher. When clicking on SEdit files (extension .sed), a SEdit agent is launched in the Desktop with all its information.
2. Formalism have a new extension (.fml). When clicking on such file, a SEdit agent is launched.

- OrgGrapher is back and has been updated to take into account the concept of communities. Well the display is still rather messy, but it is cute and useful when one wants to see what happens in Organization. OrgGrapher could be improved a lot, but still, it is interesting.
- WarBot is back with its old display. There is still much work to do to arrange the whole thing and make it a useful and enjoyable test framework, but you may develop your own "brains" from now on...
- The "Chat" application provided by J.-G. Bertrand and O. Mohsine, has been included with the release... Use it and test it.
- Documentation update. The documentation is near finished.. SEdit should be updated.

#### Corrected bugs and simple modifications

- Hooks sent bad community information on remote synchronizations. This has been fixed.
- In the Marketorg example, Clients now have the `client` role (and not the member role) due to some "filters" of the OrgGrapher.

## v3.1a5 "Tiger" (05/2002)

#### New features

- The "Chat" application provided by J.-G. Bertrand and O. Mohsine, has been included with the release... Use it and test it.
- Documentation update. The documentation is near finished..

#### Bug fixes

- Correction of little bugs in the kernel and in the Turtle kit which is much easier to use
- I Hope (JF) this one will be the last alpha release!! I would like to see MadKit online again (at last!!)

#### In Preparation

- A share application will be available soon...
- A better communicator is in preparation
- We are working to make MadKit FIPA compliant. This would mean that some MadKit agents could work hand in hand with FIPA agents located in FIPA OS or Jade. Keep in touch,...

## v3.1a4 "Nightingale" - (04/2002)

#### New features

- A very small version which is only provided to solve the pb with the JDK 1.4.
- The Install Anywhere may use the jdk 1.4, thus, if you are under a Win OS, you do not need to get the package with the JVM inside and you may use your own JVM. Much, much better.
- Update of some part of the development guide, with the beginning of a tutorial of how to program with MadKit..
- Still a lot to do with the documentation... (the user doc is still old... unfortunately..)
- SEdit has been suppressed from the release. The gbox is only accessible from the command line. Please, use the new "Madkit desktop" instead.

#### Bug fixes

One of the last 'alpha' version before the beta version... Some little bugs have been corrected.

## v 3.1a3 "Monster" - 16/04/2002

#### New features

- A new scripting language has been introduced, BeanShell, which a small Java interpreter. It uses the Java syntax but variables are weakly typed (types are recognized at run time). It is possible to instantiate Java objects, but not to create classes. If you know Java, then BeanShell is quite handy to use for describing small agent behavior. See www.beanshell.org to get information about BeanShell. BeanShell agents are built on exactly the same basis as Python agent. The embedded BeanShell interpreter is the one which is distributed with jEdit (I don't know the exact version though). Because it was in already in the CLASSPATH, it was a good opportunity to add a new scripting language to MadKit. To get an overview of the syntax, see
- jEdit is a powerful editor written in Java (see www.jedit.org) which has been integrated to MadKit. jEdit features syntax highlighting, macros facilities (using BeanShell), and easy extension through plugins. It is possible to launch jEdit from MadKit, use it as an editor for scripting languages, create agents on the fly which executes script codes, evaluate Scheme expressions, etc...
- Script files (i.e. files written in BeanShell, Python, Scheme or Jess) may be edited by jEdit directly from the desktop (right click on script files).

#### Bug fixes

- Small editors (notepad) now have a "new" function which clears the current buffer and reinitiates the editor.

## v 3.1a2 "Fools day" - 3/04/2002

#### New features

- Scheme agents have been updated to the last Kawa release (i.e.: 1.66.98). Scheme primitives takes the new features of MadKit into account. Caution: join-group and request-role send warning messages when used with the deprecated API.
- Jess agents have been updated to the last Jess stable release (i.e.: 6.0). The license of Jess has slightly been changed... Jess primitives takes the new features of MadKit into account. Simple limitations: Jess agents may only create and join "free" groups (groupes libres), in which no authorization is needed.
- Jess agents now have control buttons to control their behavior. It is thus possible to stop, reset, restart, etc. Jess agents and edit their code.
- WebBrowserAgent agents are able to browse Web pages. The help system from the Desktop uses these agents.
- The jess init file is now called madkitlib.clp
- Desktop:
  - The toolbar may be parametrized in the desktop.ini file (XML file). This toolbar contains button to launch agents on the Desktop.
  - Directories may be "mounted" in the "Explorer-like" tree of the desktop (this is very handy when you want to add agents designed outside the Madkit directory). This mounting operation may be described in the desktop.ini file.
  - Property box uses a separate frame.
  - Script files may be edited directly from the tree view with a right click

## v 3.1d8 "Rebirth" - 03/2002

#### New features

- Integration of the Community concept into MadKit. Communities are groups of kernels. A community contains many groups. A community is shared among all kernels which have asked to enter the community and have been accepted (for the moment kernels that ask to enter a community are always accepted, but this will be modified in the future). Communities add a new perspective to Madkit by allowing several kernels to share only some specific groups and roles. A community is often used as a kind of application.
- It is straightforward to use communities. Just use the classic Madkit primitives (createGroup, requestRole, leaveGroup, leaveRole) with a new argument which contains the name of the community. When this argument is not present, the community "public" is used in place. In the community "public", all groups are shared among all connected kernels. There are also some primitives which deal with predicates about communities (isCommunity, getCommunities, etc..).
- Connection and deconnection of communities is done dynamically.
- All configuration files use XML structures.
- A new "GBox like" GUI for launching agents. It is called "desktop". It is mainly a complete rewriting of the GBox. New features are: it is now possible to launch an agent from its script (Python, Scheme, Jess, etc..), and most class loading are done internally (they do not expect a complete CLASSPATH at launch time). There is also the possibility to launch an agent (either Java or scripted) from the toolbar... Very soon, it will be possible to modify this toolbar... This desktop contains the following features:
  - As in the G-Box, the desktop displays the GUI of agents
  - Script agents (i.e. Python, Scheme, Jess,..) may be launched from the tree view with a simple click
  - Configuration files may be opened directly from the Open menu/button.

#### Changes and bug fixes

- Configuration files have a .cfg suffix and possess a XML structure
- It is now possible to make agents impossible to delete by clicking on the window. In the agent, just add the following method:

  > `public void windowClosing(AWTEvent we){
  > }`

  You may now do what you want on the window (as an argument of the `we` variable), hide it, ask the user if he/she really want to close it, etc. Notice: the `AWTEvent` may either be a `windowEvent` or an `InternalFrameEvent`!!

- All scripts files are now situated in the autoload folder... (which should be reorganized somehow..)
- So many bug fixes...

## v 3.0 "Guava" - 01/2002

One year and a half between this version and the previous one.... But the new MadKit is even better, with a new Kernel and some features which will help it to reach new grounds...

#### New features

- New kernel. The kernel has been simplified, adapted to Java 2 collections and, above all, contains a new mechanism for synchronizing groups. A great change which has required a new main number...
- The synchronisation mechanism makes possible "hot" synchronizations, i.e. synchronization of already created groups.
- New authorization mechanism for entering a group. See the api documentation for more information about it. Necessitated new primitives: joinGroup, foundGroup ar now deprecated. There is a new primitive, createGroup. requestRole takes a new argument and returns a value.
- Integration of Python as a scripting language for developing agents in Madkit. The jython version of Python is totally integrated with Java and is perfectly adapted to the design of Madkit agents.
- GroupObserver, a new agent for observing groups (works like a mini explorator)
- OrgGrapher gives a graphical representation using graphs, of the overall organization of Madkit groups and roles.
- Warbot II is now totally integrated to Madkit (for the moment it uses a specialized version of SEdit).

## v 2.0.1 "Zimbra"- 06/2000

#### Changes and bug fixes

- The G-Box scripts now use `--single-window` by default
- The G-Box has window titles again, and now keep at least one agent layer.
- Accelerators for G-Box menus.
- The SocketCommunicator was erroneously built with debug mode on. The SocketCommunicator will also try up to five ports if the default port is already bound.
- The GroupSynchronizer now automatically synchronizes. This can be change through the autosynchro property.
- May work with hosts as IP numbers instead of names, through an additional flag at kernel construction. G-Box and console launcher can be configured to start in this mode with the `--ip-numeric` flag.
- A bug with broadcast messaging in distributed mode has been fixed
- The MessageTracer and OrganizationTracer can now write time information in parsed form.
- The EditorAgent can leave a role.
- Xerces XML Parser upgraded to version 1.1.1

## v 2.0 "Nemo"- 04/2000

#### New features

- G-Box

- You can now choose the GUI launch mode: classic (internal frame), as an external window, or as a full layer. The G-Box still launches agents with heavyweight GUI (i.e. pure AWT) in external windows, regardless of the launch mode setting.
- Preliminary print support
- There is a "single window" mode which setup the toolbox, desktop, and property window within a single window. It is not default, but you can activate it with the `--single-window` flag.
- The G-Box can now dispose automatically agent interfaces at deactivation.
- Changes in the launch scripts: the `CLASSPATH` is not hardcoded anymore in the run-gbox script. Instead, the classpath is built at launch time by adding every file in the `libs/madkit` and `libs/support` directories.
- The G-Box now appends a number to the agent name to avoid confusions (the `AgentAddress` remains unique, as usual)

- Environment
  - The new website is online at: http://www.madkit.org. This change is revelant to MadKit itself as we're going to modularize the platform in future versions, so some agent packs might no longer be included in the base distribution, but be available as add-ons on the site. To ease sharing of information and/or code, a web-based database is online at http://community.madkit.org. You can use it to search for and download an agent pack, look for or register your own project, etc... Feel free to use it.
  - Please report madkit bugs with: http://bugs.madkit.org
  - File organization changes so that extensions or new agent models can be added to MadKit without having to edit the launch scripts. Downside is that the `madkit.jar` and `gbox.jar` files are no longer in the main directory, but moved in `libs/madkit`. If you created custom launch scripts or CLASSPATH, you may have to update.
    The policy for the `libs` directory is now:
    - `libs/madkit`: ZIP files or JAR files that are MadKit-related, such as the kernel, the G-Box archive, or various agent models libraries.
    - `libs/support`: ZIP files or JAR files for third-parties libraries, that some MadKit code might need (Swing, Kawa, ...)
  - We added documentation for the included demo or system agents. The user's guide and tutorial have been reorganized.
  - Scheme agents are now in the `src/scheme` directory
- Agents and libraries

- A new XMLMessage class in `madkit.lib.messages` (which uses the Xerces XML parser from the Apache Group) and an XMLPingPong example
- The previously known "logolib" has been greatly improved. It is now called the TurtleKit library and provides new features, increased efficiency, a new interface, a new documentation and new demonstration applications
- A new set of system agents that hooks on the kernel to ease the understanding and debugging of applications. MessageTracer traces every message transiting between agent. OrganizationTracer traces every group action requested by an agent. OrgLister displays the whole organisation (groups, roles and agents) of the system. These agents can be found in the System Agents pack.
- A new agent EditorAgent in which StringMessages can be edited and sent in various ways. Much better and really more powerful than the old StringMessage
- The console booter now takes `--with-native-lf` and `--with-java-lf` options like the G-Box does (only effective with `--graphics` enabled)

#### Changes

- The `GraphicShell` interface has been slightly modified so that the host application can specify the "default" agent GUI with method `getDefaultGUIObject`. A side effect of this modification is that the `madkit.kernel` package is now completely free of GUI-specific code. We're trying to be as toolkit-independant as possible (think Java 2 MicroEdition, Cocoa, MS-Cool ... :-> )
- The "travel agency" small example has been cleaned up, and is now in its own `travel.jar` agent pack.
- Another consequences of the GUI-independance: the `getBean()/setBean(...)` methods are now deprecated and replaced with a more generic `getGUIObject/setGUIObject(...)`. The `java.awt.Component` is now replaced with a simple `java.lang.Object`. We no longer assume that agent interfaces are bean component. It is up to the host application to check types and setup the GUI accordingly. However, the change should be completely transparent for agent developers. Host application developers should check the example code in console/Booter, cocoa/Booter or in the G-Box.

  MadKit 1.4.1 - AbstractAgent Class | MadKit 2.0 - AbstractAgent Class
  --- | ---
  void `setBean`(Component bean) Component `getBean`() | void `setGUIObject`(Object o) Object `getGUIObject`()
  void `setOutput`(Writer o) | void `setOutputWriter`(Writer o) void `setDebugWriter`(Writer o)

  Note that getBean()/setBean(..) are still here and functional, but might be removed in a future version. Please upgrade your code.
- The LogoLib has been renamed to "TurtleKit". There has been some code changes to reflect this: the package for this library is now `madkit.models.turtlekit` (from `madkit.models.logolib`). The examples also moved in the `src/demo/agents/turtles` directory.
- The Scheme agent model has been updated to Kawa 1.6.66
- The GenericMessage has been renamed to ActMessage. A `getAction()` call has been added.
- G-Box interface change: the "add layer" and "remove layer" commands are now in the View menu and no longer in a toolbar.

#### Bug fixes

- The GroupLister and AgentLister GUI were not reliable (intermittent display). This bug was present since the MadKit 1.1 days.
- An old, hard to track, bugin the Scheme agents has been fixed. In previous versions, some applications with several Scheme agents could fail as the library confused references to the underlying Java object, which had the effect of causing messages sent to the wrong agent, error in group/role actions, etc...
- The "remove layer" action is now reliable and is always disabled when ony one layer remains.

## v 1.4.1 "Honk"- 01/2000

#### Changes and bug fixes

- A new GenericMessage (in `madkit.lib.messages`), which describe a classic act of language message with an action, various key/value pairs and some content.
- Both ACLMessage and KQMLMessage now inherits from the new GenericMessage.
- A (really stupid) bug introduced with the new hook mechanism made `leaveRole` calls fail. Fixed.
- The G-Box didn't kill synchronous agents with a pure AWT GUI. Fixed.

## v 1.4 "Werewolf"- 11/99

This release brings some very important changes: unification of threaded/synchronous agents, new hook manager, many optimizations. We tried to keep compatibility as much as possible, but we'd really like to know if your code break with this version or if you notice any weird behavior.

#### New features:

- Yoohoo, the new synchronous execution engine ! (aka "ReactiveLib II"). Now you can build reactive MAS, hybrid system while keeping the AGR model, and have a very, very flexible scheduling and probe mechanism. We added a section to the development guide, and a page to the visual MadKit tour. There is some demos for the new simulation engine, see the `demo/agents/bees` and `demo/agents/logo`. You'll also find a simulation library with some generic tools in `madkit.lib.simulation`. Finally an example of a specific simulation model which is a clone of some functions of the StarLogo system is in `madkit.models.logolib`. Note that old ReactiveLib-based agents should still work, but won't benefit from the new architecture. The `madkit.lib.reactive` package is now deprecated. Some of its features will be eventually merged in the new simulation library.
- The new hook and system communication mechanism. See the architecture section in the DevGuide and the sources of the system agents. See `AgentLister` or `SocketCommunicator` for an idea. Port of your old code should be straightforward. There is no backward compatibility for the old hook system: the integration in the kernel of the two modules would have way too much difficult and potentially instable.
- In the G-Box, you can now register at startup agent names in the toolbox window. The G-Box reads `xxx.scm` files in the `autoload` directory, and recognize `(add-agent 'my.full.agent.class.name)` lines; agents classes must be accessible in the CLASSPATH. This feature can avoid systematic JAR pack builds or repetitive "Add agent..." commands

#### Changes

- The documentation has been reorganized, expanded, and is now 100% in english. As it's the first release of this new documentation, I'm quite sure that some parts are quite crude, comments are welcome.
- Important change: The `Agent` is no longer the root class of the agent hierarchy. It is now the `AbstractAgent` which holds this place. This should not have consequences on your code, just recompile it
  .

  MadKit 1.3.2 Agent Class | MadKit 1.4 AbstractAgent Class | MadKit 1.4 Agent Class (extends AbstractAgent)
  --- | --- | ---
  Message-related methods (expect for `waitNextMessage`() ) Group-related methods Role-related methods GUI / Bean methods Print / debug / name / AgentAddress methods `void activate() void end()` | No change | Inherited
  `getCurrentGroups()` (was obsoleted in 1.2) | `getGroups()` | Inherited
  `killAgent(..) launchAgent(..)` | Now with `AbstractAgent` as parameter type (instead of `Agent`). | Inherited
  `launchReactiveAgent(..)` | Was experimental and has been removed. | Not available
  `void live() void pause(...) waitNextMessage()` | not available | `live() pause(...) waitNextMessage()`

- The `SocketCommunicator` and `GroupSynchronizer` have been rewritten for more genericity and to reduce the hack level. It should also be easier to write your own synchronizers and communicators.
- What seems to be a nasty race condition has been fixed in the messaging code. That could explain some difficult, unreproducible message losses under very heavy load in MadKit.
- Deprecated methods have been removed in the `Agent / AbstractAgent` classes: `launchAgent(..,..)` (two parameters variant), `addRole(..,..)`, `removeRole(..,..)`, `getRoleAgents(..,..)`, `getRoleHandler(..,..)`, `getGroupRoles(...)`

#### Bug fixes

- The kernel tables have been optimized for synchronous agents, this involved some changes in kernel structure like `AGRTrio` but developers should not perceive a difference.
- Kernel fix: you can't launch twice the same agent instance
- Fix (let me know if this one breaks some of your system agents code): `setSender(...)` and `setReceiver(...)` no longer public in the `Message` class.

## v 1.3.2 "Glassworks"- 10/99

#### Changes and bug fixes

- The hook on `sendBroadcastMessage` should now work. The args is a vector with the group, the role, the message, and a vector containing the `AgentAddress` concerned (local or not). The broadcast call is completely intercepted, it is up to the agent that requested the hook to execute it correctly.
- `HookMessage` now has its fields protected, please use the accessors now.
- The hook system is being generalized. Some initial code is included, full support should come in the next version.
- API documentation is now generated through Java 2 tool.

## v 1.3.1 "Deeper Green"- 9/99

#### Changes and bug fixes

- A new KernelMessage: "DUMP_ORGANIZATION" returns a complete dump of the local organization, with a `Vector` containing a `Vector` with the group name and a `Vector` having the role name and a `Vector` of `AgentAddress`
- The Kernel had forgotten debug messages occasionaly printed. Fixed.
- KernelMessages: "FREEZE_AGENT" and "UNFREEZE_AGENT" are deprecated and will be removed from KernelAgent in a future version.
- `getRoles(..)` could throw an exception when a wrong group name was in argument. Fixed
- Removed erroneous public access to the `Role` kernel class in `AGRTrio`, the `getRole()` method now returns a `String`.
- Rewrote parts of local group implementation. Quicker and safer.

## v 1.3 "Archeo Sunrise"- 5/99

#### New features:

- Preliminary Scheme support ! Please refer to the MadKit development guide for more information. The Scheme implementation we're using is the excellent Kawa software by Per Bothner, Cygnus Solutions. Feedback welcomed ! This is the very first release of these Scheme bindings, so we're quite sure that a few bugs are still lurking around.
- A frequently requested feature: launching a new agent from another one can setup the agent graphical interface. In previous versions, a developer had to manually instantiate the GUI with `initGUI()` and `getBean()`. Now, the `launchAgent(..)` API has a flag to determine if the new agent should run without instanciated GUI or if it should appear in the graphic environment (i.e. the G-Box).

  MadKit 1.2.1 - Agent Class | MadKit 1.3 - Agent Class
  --- | ---
  void `launchAgent`(agent, name) | void `launchAgent`(agent, name, gui)

- Applications that define their own graphical interface (i.e. not the G-Box nor console mode) can implement the `madkit.kernel.GraphicShell` interface and define the `setupGUI`(Agent) method, and call the `registerGUI`(GraphicShell) method on the kernel at application startup. This will ensure the new launchAgent call will be routed to your own application. See the `madkit.console.Booter` source for an example.
- An agent that launches another agent can kill it if it still owns a reference to it.

  MadKit 1.2.1 - Agent Class | MadKit 1.3 - Agent Class
  --- | ---
  n/a | void `killAgent`(agent)

#### Changes and bug fixes

- Warning: the default directory for jar files searched at G-Box startup is no longer "`jars`" but "`autoload`"
- A bug has been discovered in the new `AgentAddress` notation. A common symptom was a blank AgentAddressEditor in the G-Box property window if the agent name was manually changed.
- Minor fixes in documentation. Release notes and history translated to english.
- The SocketCommunicator graphical interface now preset the port to the default value (4444)
- Minor changes under the hood to clean the way for the upcoming SEdit/MadKit integration.

## v 1.2.1 "Sartori" - 15/12/98

#### Changes and bug fixes

- The G-Box should be a bit quicker. The agent property editor has a better interface and displays the agent patronymic name instead of plain `AgentAddress` (which is still readable in a tooltip)
- Important: We upgraded to Swing 1.1 (from 1.0.3) for all user interface elements. The consequence for your own developments is that you must now import the `javax.swing` packages (and no longer `com.sun.java.swing`). Please check JavaSoft web site for additional details.
- The G-Box starts up with platform native look-and-feel. Remove the `--with-native-lf` option in the `run-gbox` script if you want to switch back to the multi-platform "Metal" look-and-feel.
- Documentation has been slightly modified (some imprecision in the DevGuide, an incorrect API in the present document).
- Text files (sources and docs) should have correct end-of-line characters on Windows.
- A kernel bug which might cause a `NullPointerException` in `sendMessage(group,role,message)` has been fixed.
- The SocketCommunicator did not close its server socket upon agent death. Fixed.

## v 1.2 "THRaK" - 01/12/98

#### New features:

- The whole new G-Box! Agent packs are now displayed as a hierarchy in the Toolbox window, the agents are launched as internal windows in an "agent desktop". Overall agent GUI manipulation is simpler and user-friendly. Agents can be organized as "layers" is the MDI interface.
- The G-Box and every demo agents have been rewritten with the Swing classes (aka Java Foundation Classes) from Sun JavaSoft.
- The G-Box starts up with the Swing "Metal" look and feel. If you prefer the platform native look&feel, add the `--with-native-lf` command line option in the `run-gbox` script.
- The agent launch configuration scripts have been re-designed with a Lisp-like syntax. Eventually, MadKit will embed a small Scheme interpreter (which will also be useful to SEdit)
- A `madkit.lib.messages` package has landed. The `StringMessage` class is now defined in this package (from `demo.agents`). `KQMLMessage` and `ACLMessage` classes are also defined (simple wrappers for these agent communication languages message structures). An `ObjectMessage` is also defined to store an arbitrary `Object`. But you can still inherit from `Message` for your specific needs
- Many small fixes, optimization and changes. We also made some intensive message-passing tests and the kernel seems to be quite stable, handling 500000 messages without losses nor memory leaks.
- An experimental scheduler for synchronous (aka: reactive, or situated) agents within the kernel. This module is not really documented yet, but curious can give a look to the `NewRManager` agent. The main advantage is that you can launch a huge population synchronous agents without freezing as this is not an "one thread/ one agent" model. These agent have the same capacities than classic MadKit agents, and can access the message-passing or group/role primitives.

#### Changes

- Documention is being rewritten, translated to english and reorganized. The plan is to have four documents: an "install guide", a "visual tutorial", a "reference guide" and the javadoc-generated API documentation. We're also switching to SGML, so generating multiples output formats should be quite simple.
- The role acceptation and security has not come back yet, but we now have a good design plan, so it should appear in a later version.
- The `AgentAddress` has been reworked to be more coherent with the `AgentInformation` class (which has been modified as well). The `name` field is now common between these and is not used for `AgentAddress` discrimination.
- Warning, The `Agent` class API changes. Some methods are renamed, others disappear. The main objective is to have a global coherent naming. Old methods returning multiple values with a `Vector` ou `Enumeration` now return an `AgentAddress` array. Previous methods are still there, but are tagged as deprecated. Please migrate as soon as possible to the new API, MadKit 2.0 will remove any deprecated method.

  MadKit 1.0.4 | MadKit 1.2
  --- | ---
  void `addRole`(group, role) | void `requestRole`(group, role)
  void `removeRole`(group, role) | void `leaveRole`(group, role)
  Vector `getRoleAgents`(group, role) | AgentAddress[] `getAgentsWithRole`(group, role)
  AgentAddress `getRoleHandler`(grp, role) | AgentAddress `getAgentWithRole`(group, role)
  Vector `getGroupRoles`(group) | String[] `getRoles`(group)
  Vector `getCurrentGroups()` | n/a
  n/a | `launchReactiveAgent`(reactiveAgent, name) Expérimental

#### Bug fixes

- Many. A few fixes in the kernel, particulary agents had a way to get a direct reference on group and role internal tables
- Distributed communication agents should be more robust now.
- The HOOK_MESSAGES code is also more reliable and more generic.

##

v 1.1 - 2/08/98

- LIRMM internal version.

##

v 1.0.4 - 23/01/98

#### Changes

- Distributed Applications ! Please check the devguide and tutorial for more info.
- Compiled classes for MadKit are no distributed as JAR files (`madkit.jar` and `gbox.jar`, like the usual agent packs in the `jars` directory) and not as a directory hierarchy and class files. The reasons for the switch are:
  - Easing transfer between various host platforms (Mac, Unix, Windows)
  - Simplifying applet mode in web browser.
- On the MacOS, the G-Box has been validated against MRJ 2.0 and CodeWarrior Java.
- Version numbering: MadKit is not "alpha" anymore. Yo ho ho, and a bottle of Rum^H^H^H Orange Juice.

#### Bug fixes

- Fixes in the kernel to make it compatible with web browser (SecurityManagers are paranoid with System Properties).

#### Micro-kernel

- The command-line option `-port` xxxx is now obsolete.
- The command-line option `-ipnumeric` is now (hopefully) useless and obsolete.
- Warning The internal representation for agent addresses changed. It should not be a problem for usual agents which do not try to access directly the `AgentAddress` internal structures. The `KernelAddress` field was specific to applet mode in previous versions, and as of MadKit 1.0.4 is used as a generic representation of Kernel location and communication mechanisms (sockets, CORBA, SMTP, ...) which might be implemented in the future.
- Hooks on `SendMessage` are only active in non-local messages
- The micro-kernel is now compatible with"en applet-mode" and has been tested against AppletViewer, HotJava, Internet Explorer 3.0-4.0/MRJ 2.0 0 with MacOS. Execution with Netscape 4.04j2 Linux is a bit rought (thread poroblems). Not tested (yet) against Communicator or Explorer under Windows. To try this, just type the java fully qualified class name of an agent (for instance `demo.agents.PingPong`), and an optional name.

#### Distribution

- The Communication Agent changed ! It's now the "SocketCommunicator". To use it, just give a port nubmer in its PropertyBox and launch the socket server with the popup-menu.
- The SocketCommunicator does not relay message between kernels
- Distributed mode is not compatible with applet kernels
- Agent migration is not supported yet. Two test agent exists anyway "Migrator" and "netTest". A clean implementation is underway.
- MadKit does not work with JDK 1.2beta2

#### Group & role management

- The group and role manager does not support access control yet. This will be corrected eventually.

## v 1.0a3 - 09/12/97

#### New features

- When an agent death occurs (because it has reached its end() or because of a bug intercepted by the kernel), MadKit changes the bean color in G-Box or applet modes.
- A new Splash Screen with a progression bar. Groovy !
- To avoid some problems with exotic network settings, the kernel may be launch with the `-ipnumeric` flag. In that case, the various AgentAdress are built with the four-digits IP number.

#### Changes

- The G-Box source has been synchronized again with the JavaSoft BeanBox nov97 source.
- The `madkit.graphics` package has been renamed to `madkit.lib.graphics`
- Less agents launched in a default configuration. Non-essential or experimental demonstration code is now in a `demo-exp.jar` file in the `otherjars` director, but is still usable with the File->Add Jar.. command

#### Bug fixes

- Requests concerning non-existant groups caused the kernel to crash in a case involving getRoleHandlers(...). Fixed
- The G-Box now runs correcly even if a "jars" directory is not present in the startup directory.
- A (stupid, although benign) bug in AppletMadKit fixed
- The G-Box does not use the "tmp" directory anymore.

## v 1.0a2 - 01/12/97

#### New features

- The archive now includes sources for the MadKit Applet demonstrator, the text booter, and the G-Box.
- The market demo is more interesting.

#### Bug fixes

- Some groups were incorrectly kept in kernel tables after the termination of all of their members.
- The start-up scripts didn't keep the previous CLASSPATH
- The agent micro-kernel now runs under Apple Rhapsody.

#### Known bugs

- The red rectangle during dragging feedback might be incorrectly placed with some graphic configurations.
- Layout for AgentAddress properties in the PropertyBox is incorrect.

## v 1.0a1 - 01/10/97

First non-development version.