OAA2 Distribution history ------------------------- This is a summary of the most significant changes. Many small improvements and bug fixes are not listed. A possibly more up-to-date or more complete version of this file may be found here: http://www.ai.sri.com/oaa/distribution/v2.3/2.3.1/documentation.html#release -------------------------------------------------------------- Version 2.3.1: Changes from 2.3.1 prerelease -------------------------------------------------------------- Java library ------------ Added validity checking to args for IclStruct and IclVar. IclStruct will automatically quote functors; IclVar will throw an IllegalArgumentException for an inappropriate variable name string. Various bug fixes in the Java "wrapper" code. C library --------- Various bug fixes. StartIt ------- Further fixes related to "localhost" specification - now an agent should connect to a managed fac at "localhost" if the agent is local, or getHostName() if it's remote. -------------------------------------------------------------- Version 2.3.1 (prerelease): Changes from 2.3.0 -------------------------------------------------------------- Facilitator ----------- Works better with 'localhost' as the specified hostname. In particular, when all agents are on a single platform, connections are robust against changes in connectivity (e.g., switching from wired to wireless connection). Prioritization meta-agents are called now even when the list of solver agents is of length one. The following predicates are now recognized as ICL built-ins: var(_), nonvar(_), ground(_). Fix to message queuing problem, which would sometimes cause a socket to be reused with a new agent before the disconnect of the old agent was properly recorded. C library --------- oaalib.lib is now included in the OAA distribution, in the lib/win32 directory. Java library ------------ Now includes "wrapper" code to simplify some aspects of agent building. Documentation will be available here: http://www.ai.sri.com/~oaa/distribution/v2.3/doc/agents/ LibOaa.java: bug fix related to with how it loads classloader resources in multi-classloader environments like J2EE app servers. Improvements to ICL parsing routines. LibComTcpServerThread.java: Bug fix having to do with timing of handshaking messages. StartIt ------- Fixed to be more flexible in passing facilitator hostname to agents (so 'localhost' in particular can be passed). -------------------------------------------------------------- Version 2.3.0: Changes from 2.3.0 (Beta) -------------------------------------------------------------- C library --------- Now ready for use with OSX on the Macintosh. Java library ------------ Various bug fixes and cleanup of the API, primarily related to ICL parsing. New agent --------- The OaaTest agent is a utility for the automatic or semi-automatic scripted testing of particular agents or combinations of agents. Please visit here for more info: http://www.ai.sri.com/oaa/distribution/v2.3/doc/agents/oaatest/ Dotnetproxy agent ----------------- The dotnetproxyagent is now fully reentrant. This means .NET can call java, the java method can call back to another .NET method, the .NET method can call back to another Java method, etc. For every csharp thread, the proxy spawns a java thread which executes calls async. The calls are queued so it is gauranteed that each csharp thread will execute methods serially. Also, callbacks received in csharp are executed async. Also included are nunit tests which test data marshaling, and a test which performs reentrant calls multiple times. Also included are various bug fixes in data marshalling, as well as support for 2D arrays in csharp. Also, some of the csharp class names had to be changed in order to not conflict with java class names. Note that the proxy is backwards compatible with OAA2.3.0B. Also, reentrant capability can be turned off by the csharp application. Monitor agent ------------- Now can save OaaTest agent scripts, based on log files. (See above regarding this new agent.) Bug fix: eliminate crashes due to receipt of messages containing icldataq terms. Bug fix: wasn't pretty-printing events in log window (ev_solve displayed as oaa_Solve, etc). StartIt agent ------------- Bug fix: for crashing due to certain environment variables (a description of this problem and the solution was sent to oaa-users). -------------------------------------------------------------- Version 2.3.0 (Beta): Changes from 2.3.0 (Alpha) -------------------------------------------------------------- Windows build of C library and agents is now included, but C library isn't yet usable on the Macintosh. (It'll be ready to go in the full release.) Facilitator: bug fix to the new optional-solvable-type-declarations capability. New online documentation for StartIt, the dotnet library, and optional typing of solvables. Various additions, improvements, and clarifications in the other online documentation and distributed README files. Java library code: several (relatively) minor bug fixes. StartIt: several (relatively) minor bug fixes; several improvements to config files. Invocation scripts modified to work on the Macintosh. -------------------------------------------------------------- Version 2.3.0 (Alpha): Changes from 2.2.1 -------------------------------------------------------------- New libraries ------------- We now support the construction of agents written in .NET. This is done by means of a .NET assembly wrapper written in C# that communicates with a proxy agent written in Java, which in turn connects and registers with a facilitator. New platform ------------ Macintosh OSX support is now included, except for the C library. Binary and library files are in subdirectories called "mac-os-x". We expect the C library to be completed in the Beta release. Start-It -------- Start-It, the "control panel" agent, has been completely rewritten. It has many new significant features, is more robust, and can be used with ssh (whereas before it could only be used with rsh). All components -------------- There is an entirely new directory organization, which allows to avoid duplicate copies of libraries in the src and run-time hierarchies, and should be easier to work with for many different purposes. "Internal version" numbers are now in sync with "external version" numbers. (This would only be of interest to developers.) Facilitator ----------- New: optional argument typing specifications can now be associated with solvables, and, when present, will be considered in the facilitator's delegation decisions. Java library ------------ Bug fix in IclUtils.termParamValue(...) and IclUtils.intParamValue(...). ICL: bug fix in public boolean equals(AST t). ICL: bug fix for parsing negative numbers. C library --------- FLTK code now included with source distribution, and runtime distribution binaries have been brought up to date with the most recent FLTK code. Documentation (work in progress; not available with Alpha release) ------------- Developer's Guide: new material on icldataq and optional typing. Examples now given in several languages. Clarify the permissible forms of solutions. -------------------------------------------------------------- Version 2.2.1 -------------------------------------------------------------- Facilitator ----------- When shutting down, now closes all connections more gracefully. This should help to ensure that the facilitator's listen port gets released more promptly by the operating system. New build works with RedHat 8.0. Fixed the facilitator's backward compatibility module, so that it properly supports the use of agents built using OAA 1 libraries (such as the Perl and Lisp libraries). All libraries: ICL term parsing routines now support the infix use of the following operators: :- ; = : :: + - * / Prolog library -------------- Sicstus-generated executables no longer distributed for Solaris 5.6. Fix to ordering of incoming messages (related to version of samsort function used with Sicstus). Java library ------------ Added the old constructor (from v. 2.1.0) back to IclStruct for backwards compatibility. This constructor takes a Vector as input. Also for backwards compatibility, iclFunctor() once again returns an empty string instead of NULL. Previously, the local solve parameters and actual solve parameters were placed in the solve parameters list passed to the OAAEventListener interface, causing that list to contain two sublists. Now the two sublists are "flattened" into a single list. A new class, ToList, makes it possible to convert an IclTerm object into an IclList object, without having to use an explicit cast. This is a convenience for use with WebL. Improvements to ICL Term interface: Added generic IclTermTraverser abstract class for traversing an IclTerm's children. Added a class to generate a manually constructed IclTerm from a String. Added isAtomic() and isComposite() methods to IclTerm. Changed composite terms to take a List instead of ArrayList in constructor. Changed IclTerm.iterator() and IclTerm.listIterator() to always return a valid iterator. log4j and concurrent (the open-source Java packages) have been "unbundled" from oaa2.jar. That is, it now is built and loaded as a separate jar file. src removed; jar file distributed. antlr (the open-source Java package) has been "unbundled" from oaa2.jar, and renamed to antlr-oaa.jar. The renaming reflects the fact that the OAA source distribution includes modifications to several of the antlr source files. xerces - removed altogether Java Agents ----------- Corrected version number and/or copyright date that are displayed by certain agents, for the Help/About menu command. Fixed the Help command in StartIt. Cleaned up calls to deprecated functions. Updated weather agent script (yahooweather.webl) to accommodate recent HTML changes on the Yahoo site. -------------------------------------------------------------- Version 2.2.0 -------------------------------------------------------------- ---------------------------------- NEW AGENT INCLUDED IN DISTRIBUTION ---------------------------------- Alarm agent: Implements time triggers for all agents connected to the same facilitator. See http://www.ai.sri.com/~oaa/distribution/distribv2/doc/agents/alarm Note: the "Attain" natural language agents, which were included in release 2.1.0, are not included with release 2.2.0. They are still available, however, here: http://www.ai.sri.com/~oaa/contributions/ -------------------- GENERAL IMPROVEMENTS -------------------- Except as noted, the general improvements described below apply to the facilitator and all language libraries (Java, C, Prolog). Application agent code that works with version 2.1.0 should still work with 2.2.0 libraries. In using the Java and C libraries, you may see some deprecation warnings, and it is recommended that the appropriate changes be made. ------------------ New "direct connect" capabilities for oaa_Solve requests To support more efficient exchange of large messages and rapidfire messages between agents, the prolog library now supports a nearly transparent means of enabling direct exchange of messages associated with oaa_Solve requests. That is, oaa_Solve requests and their responses can now be routed directly between the requester and provider, rather than going through the facilitator. At present this is only supported for the case of a single provider. When direct_connect(true) is included in the Params of the requester's call to oaa_Solve, library code contacts the facilitator to determine what providers are available. If there is only one provider, and if that provider is listening on a socket, the requester opens a connection and communicates directly with the provider. If a provider address is already known to the requester, and is specified in the Params list, along with direct_connect(true), the facilitator is not contacted at all. These "peer to peer" connections are kept open so that a series of direct_connect requests to the same provider can be dispatched rapidly. When passing goals that contain large data, the bandwidth employed in contacting the facilitator can be minimized by specifying a "goal template", which contains variables in the positions that would normally contain data. ------------------ More efficient encoding of messages between agents ICL terms can now be encoded in a more compact form when transmitted between agents (across sockets), allowing for quick parsing by the message recipient. In 2.2.0, this form of encoding will only be used when "direct connect" is used between agents implemented using Java and/or C. In future releases, this encoding will be adopted for all communications, including those going through the facilitator. ------------------ Binary data now supported in ICL expressions In the past, ICL, like Prolog, has offered only a single primitive string type, called an "atom". This has been limiting in two respects. First, both Quintus and Sicstus Prolog implementations limit the length of an atom to 64K. Second, in translating to and from languages, such as lisp, which distinguish between symbols and strings, we have not been able to maintain this distinction in ICL expressions. To address these limitations, ICL now includes a double-quoted string type, which has no length limit. In addition to using double quotes, it is also necessary to enclose the string in an 'icldataq' functor, like this: icldataq(".....") (We'd have preferred not to require the functor, but it's unavoidable at present, given the way Prolog works, and the vendor libraries upon which the facilitator depends.) Within the double quotes, any sequence of bytes is allowed, including null characters. (Double quote characters are escaped by doubling them.) ------------------ Optimization of large data messages Additional support for exchange of large data sets is provided by allowing application agent code to write the data directly onto the stream, when a request or response message is transmitted. This is accomplished by using the parameter icl_goal_writer/2 with oaa_Solve (in the requester), and using icl_solution_writer/2 as the return value of the do_event callback procedure (in the provider). This can be used with or without the use of direct_connect. ------------------ New parameter for oaa_Solve: provider_limit(N). This instructs the facilitator to select at most N providers (solvers) to handle the given goal. This is especially useful with direct_connect. ------------------ New library procedures (in all libraries), further minimizing the amount of code needed in agent wrappers: oaa_SetupCommunication oaa_Connect ------------------ Documentation: The Developer's Guide now includes examples in Java and C (as well as Prolog) ------------------------------- IMPROVEMENTS TO THE FACILITATOR ------------------------------- Optimization of incoming message queue code minimizes time spent in maintaining the queue; allows for faster throughput of messages. New command line argument (-output_file filename) telling the facilitator to write all output and error messages to the given file. (Under Unix, this is no different than using ">& filename" on the command line.) New code makes it more meaningful and more robust to call oaa_Solve in the facilitator (for instance, as part of a trigger action, or as part of the body of a "rule"). Consequently, the use of "rules" with data solvables, declared on the facilitator, is now more fully supported. This results in a significant expansion of how the facilitator can be used by other agents, as described here: http://to_be_provided Com library: Several changes made to bulletproof against too many connections coming in. Facilitator now accepts parameter "max_connections". Refinement of on_port_exception options (specification of behavior desired when the facilitator is unable to access a particular port). -------------------------------- IMPROVEMENTS TO THE JAVA LIBRARY -------------------------------- New ICL parsing code, based on the public domain package "antlr". Considerably faster and more robust than earlier versions. Inclusion of 2 open source packages: antlr (See www.antlr.org/) log4j (See http://jakarta.apache.org/log4j/) More efficient management of incoming messages and outgoing messages, resulting in considerable improvements in speed and memory requirements. Bug fix. This bug caused deadlock when an agent waited on several synchronous responses, and the responses came back in the "wrong" order. A wide variety of minor bug fixes and optimizations. ----------------------------- IMPROVEMENTS TO THE C LIBRARY ----------------------------- New ICL parsing code, based on the public domain package "pccts". Considerably faster and more robust than earlier versions. Bug fix. Under Linux, a setup file line longer than 512 bytes could cause a segmentation fault. The possibility of seg fault has been eliminated. However, note that under this fix, setup file lines longer than 1024 will be ignored. Bug fix. This bug caused deadlock when an agent waited on several synchronous responses, and the responses came back in the "wrong" order. Various memory leaks and memory corruption bugs corrected. Improved portability. A wide variety of minor bug fixes and optimizations. Documentation: New source code documentation, generated by Doxygen. ---------------------------------- IMPROVEMENTS TO THE PROLOG LIBRARY ---------------------------------- New functionality in com module: on_connect_exception options. A variety of behaviors can now be specified for situations in which an agent attempts to connect to a facilitator, and the connection can't be opened. New library procedure (for convenience): 2 argument version of oaa_Declare Minor reorganization of library files. Various minor bug fixes. -------------------------------------------------------------- Version 2.1.0 : September 2001 -------------------------------------------------------------- NEW AGENTS (oaa_shell, eliza, attain): OAA_SHELL: A utility and debugging tool for sending requests and queries to a facilitator, from the (Unix or DOS) command line. See http://www.ai.sri.com/~oaa/sri-private/distribv2/doc/agents/oaa_shell ELIZA: an OAA-wrapped version of Viren Patel's Prolog implementation of the classic AI program, which simulates the conversational capabilities of a psychotherapist. See http://www.ai.sri.com/~oaa/sri-private/distribv2/doc/agents/eliza ATTAIN: a set of Natural Language Understanding agents, based on SRI's Gemini system. Note: source code is not provided; just binaries. For this release, binaries are only provided for Sun/Solaris. ATTAIN is a package of natural language OAA agents which provides translation of English sentences into ICL messages that other agents can use. Thus, this package plays a similar role to that of the DCG-NL agent, but uses SRI's industrial strength Gemini parser. ATTAIN produces a more expressive ICL representation than that produced by DCG-NL, and brings several other advantages as well. For example, one practical advantage of ATTAIN is that the inflected forms of regular nouns and verbs (e.g. singular/plural, past tense), come for free with Gemini, whereas they have to be entered manually in the DCG nl agent. See http://www.ai.sri.com/~oaa/sri-private/distribv2/doc/agents/attain Note: none of these new agents is included in the StartIt config file; they are to be invoked from the command line, as described on their documentation pages. Also, the new natural language agent (ATTAIN) is not set up for use with the demo information agents (weather and employee DB). In future releases, we hope to have these new agents integrated more fully into the distribution. -------------------- Improvements to the prolog library : Refined and extended the way in which data callbacks (callbacks with ID app_on_data_change) and data triggers are tested for firing. In particular, data callbacks are now provided for solvables with and without bookkeeping (previously only with). In cases where multiple data elements are removed by one command, data triggers are now fired individually for every element removed or replaced. Increased flexibility in dealing with port availability. When a client agent isn't able to connect to a specified port, a number of options are provided (for example, continue trying every X seconds; try the next highest port). These options can be specified interactively, or in the setup file. These options are consistent with existing options for the facilitator. It's no longer necessary to specify parent_dialect on the commandline of prolog agents (see release notes for 2.0.10). (Sictus only) Added several missing predicates (in spcompat.pl); such as subtract/3 and intersect/2 and intersection/3. More selective in sending ev_agent_disconnected notification to other agents, when an agent disconnects. Now the notification is only sent if there's reason to believe the other agents need to know. COMM trace messages are more informative: They now include the agent's name, not just its address. Data synchronization (when an agent declares a data solvable, all existing facts for that solvable are downloaded from the facilitator when the agent starts up) is now optional, and can be specified using synchronize(true|false) in the parameter list for the data solvable. The default is false. More restrictive about propagating context params - only if reply(true). ------------------ Improvements to the facilitator: Now warns, but doesn't exit, when the specified host isn't the same as the execution machine. More careful attention to number of connections. A new parameter, max_connections, can be used to limit how many connections are accepted at any one time. This parameter can be set using the facilitator's commandline, environment variable, or set up file. The default value is 58, so as to avoid an infinite loop that comes up in Quintus under Solaris. Better exception handling (in Quintus) for the situation where too many connections are open. Minor improvement to the backwards compatibility module, so that OAA1 agents "turn green" in the StartIt GUI, and "can_solve" requests from OAA1 agents work properly. Also, corrected a problem with backwards translation of params in ev_solve events. ------------------ Improvements to the Java library : Bug fix: IclAppend now appends to the end of the list, rather than the beginning. Significant optimizations for speed. Callback id's now conform to those used in the Prolog library (app_do_event, app_idle, etc.) Backwards compatility is provided for the old id's (oaa_AppDoEvent, etc.) ------------------ Improvements to the C library : Callback id's now conform to those used in the Prolog library (app_do_event, app_idle, etc.) Backwards compatility is provided for the old id's (oaa_AppDoEvent, etc.) A variety of optimizations, bug fixes, and robusticizing of the code. This includes a number of code changes contributed by Pete Tinker, and described on the oaa-users mailing list. ------------------- Improvements to the DCG-NL agent : Bug fix: downloading vocabulary from the facilitator at startup, and checking the facilitatorfor additional vocabulary as needed (neither was working properly before the fix). Improvements to the monitor agent : Bug fix: Required semicolon is now inserted between preline and appline. Improvements to startit : Now works under Windows 2000 (code fix contributed by Matt Ginzton). ----------------------------------------------------------------- Version 2.0.12 : August 2, 2000 ----------------------------------------------------------------- Improvements to the facilitator and Prolog library : Bug fix: Prolog agents, including the facilitator, are currently unable to declare data solvables that overload compiled predicates. Previously, an attempt to do so would lead to an unhandled exception, and no warning message. Now, although the restriction still holds, the exception is handled and a warning message is printed. Improvements to the employee database (which impact natural language recognition) : Last or first name only, in addition to both names together, can now be used in queries. Proper translation of the word "phone" in a query. Improvements to the C library : Bug fix: Serious memory leak corrected. (This affected the C debug agent, as well as any new agents using the C library.) Version 2.0.11 : July 20 2000 ----------------------------- Improvements to the facilitator and Prolog library : We now include Sicstus-generated runtimes for the facilitator and natural language agents, both for Solaris and for Linux running on Intel x86 hardware. See README_PROLOG for notes about using Sicstus. Bug fix: oaa_priority_compare made equivalent in Quintus and Sicstus code. Previously, they differed so as to cause different orderings of incoming events. Various other minor bug fixes, mostly around communication primitives, Sicstus compatibility, and backwards compatibility. Improvements to the C and Java libraries : ICL parsing routines now handle the semicolon (:) and vertical bar (|) operators. Various optimizations for speed (Java library). Version 2.0.10 : July 19 2000 ----------------------------- Improvements to the facilitator and Prolog library : Initial version of sicstus compatibility code. This code should be considered a beta version. Sicstus users: please report any bugs or difficulties to oaa-staff@ai.sri.com. Note that we are NOT distributing any Sicstus-generated runtimes with this release; just updated Prolog source files that can be used in a Sicstus environment. In the next release, we plan to distribute Sicstus-generated runtimes for the facilitator and the DCG_NL agent, at least for Linux. (These will be our first distributed Linux runtimes.) Note that it is possible to have an application that uses a mix of Quintus and Sicstus agents. There is one caveat, though: when a Sicstus client agent connects to a Quintus facilitator, the command line argument -parent_dialect quintus should be passed to the Sicstus agent. Similarly, when a Quintus client agent connects to a Sicstus facilitator, this command line argument should be given to the Quintus agent: -parent_dialect sicstus Improvements to the C and Java libraries : ICL parsing routines now handle the colon (:) operator. Minor change to all libraries : Parameter block/1 (to oaa_Solve and other library functions) is now blocking/1. This was done because of Sicstus' use of block as a keyword. However, block/1, in older applications, will still work properly. Version 2.0.9 : May 25 2000 ----------------------------- Bug fixes : - Large messages correctly handled (C and Java were bogus) - Facilitator data solvable is no longer declared when agent A calls oaa_AddData for a solvable that A (only) declares - dcg_nl agent: Format translation is now done for all vocabulary items Improvements to the facilitator : - When parallel_ok(false), and multiple agents provide a requested service, a simple form of load balancing is used: the agents with the fewest outstanding requests are used first. Improvements to the libraries : - Command line option -oaa_name recognized by all libraries - Command line option -init_file recognized by the Prolog library - Prolog library now provides database save and load from file Version 2.0.8 : April 22 2000 ----------------------------- Release of the C library Version 2.0.7 : December 21, 1999 --------------------------------- Fixed the java library : Adding triggers locally fixed. book-keeping and ownership of data fixed. added iclReplaceNthTerm in iclContainers. fixed minor bugs in String management Improvements to the facilitator : When the requested port isn't available, gives a variety of options, which can be specified either interactively or in the setup file New commandline options: -usage -write_setup_file FilePath -write_connections_file FilePath Version 2.0.6 : ---------------------------- Fixed the java library : iclRemoveFromList is now based on unification. oaaInterpret returns false when the term to interpret is not a builtIn nor a user defined solvable fixed oaa_update_data and oaa_add_data_local temporarily removed oaa_id_ref management for the local agent database (turned bookkeeping off by default) implemented : oaa_replace_data_local(liboaa.jave) and db_Replace(icldb.java) removed the warning when attempting to call a non-registered callback. (It tends to confuse users) Fixed monitor : when killing an agent using the right-click button, does not generate null pointer exception anymore Version 2.0.5 : Dec 10, 1999 ---------------------------- Thanks to Jehan's comments : com/sri/oaa2/lib/LibOaa.java 4753: ';;' to be removed 4760: idem com/sri/oaa2/agt/startit/AgentButton.java class AgentSelects should be moved into its own file. Same for class AgentSelectsDetails LibOaa 230: remove prenthesis (#LibOaa) 270: "com." before "sri.oaa2.com" is missing 271: idem debugAgent.frmMain 140: no parenthesis and a pound sign (com.sri.oaa2.lib.LibOaa#oaaRegisterCallback) OaaAboutDialog 68: no package "oaa.tools" 69: idem Version 2.0.4 : Dec 5, 1999 --------------------------- DOC: Added the history.txt file JAVA : Fixed bugs in StartIt and added the Command option when running under Windows PROLOG: Put the latest faciliator Version 2.0.3 : November 15, 1999 --------------------------------- First initial distribution