version 8.0 1/31/2018
- files to compile by script compiler must now end with suffix .top or .tbl so you can allow other files in same directories (like readme.txt, etc).
- :timelog computes avg/min/max of a server log response times
- for json arrays can now do: $_array1 += $_array2 and $_array1 += value
- Windows GUI debugger for CS. See ChatScript debugger manual.
version 7.73 12/7/2017
- several fixes to pattern matcher
- param traceuser=username to make a server trace that user only
- :spellit some sentence, tells you what spellcheck found to modify it
- DLL version of ChatScript now part of std release (untested)
- $cs_outputchoice to force random output choice
- :trace treetagger
- Spellcheck will fix words with excessive repeated letters will be adjust. 3 or more in a row truncated to 2. If not recognized, each single pair of 2 will be tested as one. so hellllloooooo becomes helloo becomes hello
- ~noun_phrase added to allow you to grab noun phrases in input
- treetagger chunks (if available) get marked
- :trace INPUT to see input w/o all the concept bindings
- :tokenize - subset of :prepare that just shows resulting transformations on input, no pos and concept marking.
- :trace all universal - sets engine to trace everything listed (even in server mode)
- System now handles multiple upper case forms of a word, so it can memorize the particular ones you do differently in concepts and return the correct one.
- ^pos(canonical xx all) get all canonical forms (for foreign use)
- ^mark(_0 value single) dont mark the entire implication chain, just the argument given
- Advanced manual now has a section on advanced tokenization
- ~capacronym - acronyms that are all caps, all letters
- :trim now supports optional quoted first param :trim "keepname" which instead of dumping all files it sees into a single tmp/tmp.txt file keeps the names of the files it sees separated into tmp/*.txt
- you can now specify db name to postgres 4, ^pos(isalluppercase xxx)
- implicit concept set for [] and {} in patterns when simple words/phrases/concepts
- :dedupe filepath, outputs into tmp/filename just unique lines from the input
- command line parameter defaultbot=name gives the name of the default bot to use, overriding the defaultbot table value.
- ^timeinfofromseconds now returns 2 more values, the months index and the dayofweek index
- new PDF document: ChatScript Coding Standards
- RESPONSE_CURLYQUOTES converts on output plain quotes to curly ones
- limit on arguments to outputmacros raised to 31 from 15
- ^setresponse(index message) # revises existing response to this (can be used in postprocessing)
- CS server protocol allows a single null-terminated string, with user and bot components separated by ascii 1 instead of ascii 0.
- ^pos(canonical xxx yyy) takes optional 3rd argument yyy, the pos-tag of the word (since words using foreign dictionaries may have different canonical values based on pos-tag).
- :tsv convert tsv to table form (putting quotes around things without it)
- %externaltagging
- improved control script manual
- ^respond(~xxx TEST) conditional execution of a topic to see if a match would occur (no output)
- revision of german noun pos tags in dictionary
- ^pos(isuppercase xx) does it begin with uppercase letter
- $cs_proxycredentials // "myname:thesecret" $cs_proxyserver // "http://local.example.com:1080" $cs_proxymethod 1 is most common value to use- see https://curl.haxx.se/libcurl/c/CURLOPT_HTTPAUTH.html 3 tmp= command line -- reassign location of TMP directory
- ^jsonopen allows json composite reference to be postdata argument, will write it into text as the data for you
- :quotelines file, reads lines and puts doublequotes around them
- Spanish concepts (ontology) and Livedata
- :dualupper - list words that have more than one uppercase form
- hidefromlog param - list json fields not to save into user or server log
- ^jsonparse autoconverts \unnnn into corresponding utf8 characters
- :trim 12 - put out rule label then input then output
- $cs_saveusedJson - destory any json not referred to via a user variable when saving user
- new spelling-marking manual
- *~8b for bidirectional search
- ^burst($val digitsplit) splits into two pieces a word part and a digit part (dd12 => dd 12) and (12dd => dd 12) - if it starts with digit, gets all consecutive digits as second value and all the rest as first. Otherwise if ends with digit, gets all consecutive rear digits as second value and rest of word before as first value.
- may now call outputmacros from patterns, it protects match variables across the call
- fixing numeric bugs
- ^setposition now allows a wildcard id as the second and last argument
- the ? operator can now check for value in json array.
- ^format( integer/float formatstring value) does format of doublefloat or int64 integer
- ^clearmatch() resets all match variables to unmatched
- ^wordatindex() now support ranges, allows optional 3 argument end. Or second argument can be "_0"
- $cs_numbers = french, indian, american or other
- $x.y[] = 1 autogenerates a json array
- $cs_fullfloat & 64bit float & e-notation means the system gives you full precision, not 2 digit
- JSONOPen now performs urlencoding automatically
- servertrace command line param - forces all users to trace
- erasename command parameter - full user reset if found in input
- compile outputmacros in any order (but must already be defined if used by a table)
- ^pos(IsModelNumber x) and ^isInteger and ^isFloat
--- NEED TO RECOMPILE YOUR BOT! format has changed in TOPIC folder
- ^wordAtIndex({original, canonical} n) retrieves word at index either original or canonical
- ^cs_reboot and ^reboot
- $x.y = 1 autogenerates
- replace: now takes quoted expressions on the right side, decoding to x+y
- Livedata- internalconcepts.top is a concept listing all internal non-enumerated concepts
- Livedata- numbers.txt (per language) describes canonical numeric value of numerically oriented words
- Previously undocumented ^makereal function changed and documented to take an argument. It allows to make transient facts in a factset permanent (or such facts created after a given fact)
- topic files of user stored by language as well as user id and bot name if not english
NO_CONDITIONAL_IDIOM
^tokenize(WORD xxx)
andtokenize(FULL)
- MemoryGC
?$var
pattern test%timeout
^isnormalword(value)
^isnumber(value)
- string comparison in IF or pattern now supports
<
>
<=
>=
for string ordering (case insensitive) :redo FILE filename xxxxx
-- to name file to open instead of std backup of last turnloglimit=n
-- where n is number of MB log rolling^removeproperty
supportsHAS_SUBSTITUTE
to turn off a substitution fromLIVEDATA/
- Italian dictionary support
^jsonreadcvs
takes optional 3rd argument - function to invoke with the fields instead of returning json^tokenize($_text)
returns facts of (sentence^tokenize
^tokenize
):mixedcase
- lists all words which have multiple case forms%language
returns current dictionary language- engine concept
~model_number
marks words with both alpha and digit in them - command line
buildfiles=xxxx
to tell wherefilesxxx.txt
are - French, German, Spanish dictionarys and utf8 spellcheck support
- ^jsonreadcvs to read tab-delimited spreadsheet files
- fixed concurrency bug -- CHANGING to VS2015 since source using C++11 no longer compiles in VS2010 and you cant easily get that compiler version any more.
- :trim 11
- Command line parameter manual split off from system concepts and variables
- topic= command line parameter
- renamed $cs_factowner to $cs_botid
- Moved and expanded discussion of multiple bots from advanced manual to new ChatScript Multiple Bots manual
- fixed major bug in concept reading I introduced in 7.11
- allowing @ and . in user file names at login
- bot: 1 harry -- sets bot fact owner at same time (see $cs_factowner)
- allow bot: command as a line in the filesxxx.txt build file to change bot restrictions from there
- command line parameter apikey for
:translateconcept
:translateconcept
to use google translate on concepts from english- conditional block comments now supported:
##<<German .....
..
##>>
noboot
command line param- cyclomatic complexity listed in map file (described in Debugger manual)
- command line parameter
userencrypt
enables encrypting user topic file ifencrypt=
anddecrypt=
is set - command line parmater
config=
(default is cs_init.txt) - optional
{}
around output macro - consolidated all command line parameter descriptions into ChatScript System Variables and Engine-defined Concepts and Parameters
- new manual ChatScript-Foreign-Languages
- fixing $_variables in topics where changing rules destroys the value assigned
- logsize - bytes for the log buffer to use (see advanced manual)
- outputsize - bytes for main output buffer to use (see advanced manual)
- autoinitfile: username-init.txt at top level (see advanced manual)
- new manual- ChatScript Debugger and corresponding :debug command described within
- @_10 anchor pattern element (see advanced manual)
- ~integer, ~float, ~positiveinteger, ~negativeinteger refine ~number
- RESPONSE_NOCONVERTSPECIAL on $cs_ response or as flag to ^log will block conversion of escaped n,r,t into their ascii counterparts
- conditional compilation per line supported- see advanced manual conditional build
- language= command line param (defaults english) revised DICT/LIVEDATA data access per language-
WARNING: data organization within LIVEDATA has changed. If you are running your own copy, mimic the new structure.
- autodelete and USER_flag1...4 for json
- :trace -userfact
- deleting a json fact will recurse and delete the object referred to UNLESS it has some other reference to it still on another json fact.
- Match(~concept)
- added ^callstack(@1) --- removed ^backtrace()
- $cs_factowner can be assigned a bit value to control what facts you can see
- ^nth now accepts json object or arrays, returns the factid of the nth member
- command line parameter root=xxxx to tell where CS root directory is
- for ^jsonpath, if you give a field name first without ., CS defaults the dot ^jsonpath(field $_obj) == ^jsonpath(".field" $_obj)
- ^jsonkind($_obj) returns array or object if a json thingy, or fails if not
- Backtrace() to show calls to get to you
- :trace output ^function --- you can control function tracing bits in detail
- ^pick(jsonarray or jsonboject) returns factid
- $xx.subject or $xx.verb or $xx.object if $xx has fact id
- %restart - can be set and then retrieved across a system restart (:restart)
- can use local vars in function definition: outputmacro: ^x($_arg1 $_myarg)
- ^delete now always succeeds. For undeletable things like text, it merely ignores it
- JSON_DIRECT_OOB tokencontrol for json that is too large for being a token
- optional 5th param to jsonopen, timeout in seconds for this call (applied 1st to connection, then to transfer) so total max is double
- ^environment(variablename) retrieves environment variable value
- like json object references $x.y.z you can now do array references like $x[$tmp].y[5] BUT you cannot do assignment into an array for a new index, only on an existing index.
- input tokenizer from user input NO LONGER auto converts "&" into "and"
- ^jsoncopy no longers fails if what you pass is not a json structure, it merely returns what you passed
- If (^function()) fails if function returns false (as well as previously returning 0 or failing
- @4 = ^jsongather(jsonstructure) - now allowed in addition to ^jsongather(@4 jsonstructure)
- source= command line parameter will start up using that file as input
- ^jsongather(xx xx limit) gets facts thru the limit level deep. 5 :trim xx xx nooob - display outputs without oob data
- $x.a = null clears as does ^jsonobjectinsert($x a) use of "" or ^"" sets json literal null
- $$csmatch_start $$csmatch_end tell range of where ^match matched
- ^jsonarraydelete(VALUE $array value ALL)
- ^jsonobjectinsert(DUPLICATE $object name value) 10: $t.test.$foo = or $test.test.foo += are now legal 11: :coverage and :showcoverage - the first dumps data on what rules have been output executed so far into /TMP/coverage.txt. The latter displays an abstract of all of your scripts, marking rules that have been executed and those that have not (by omission) 12: ^import and ^export have special behaviors if the name includes the substring "ltm" 13: outputmacros may now be called with factset references as arguments 14: safe as argument to jsonobjectinsert or jsonarraydelete will not recursively delete json content ^jsonarraydelete("safe index" $array 3) ^jsonobjectinsert(safe $object $key null)
- supports json path argument with string for key so you can do ^jsonpath(."st. helens".data $$x)
- dotted notation supports $x.y.z and $x.y.z =
- findtext now also returns $$findtext_word which is what word it was found at
- ^actualinputrange(start end) from ^original data, naming a range of words, what actual words are covered returns range (begin<<16) | end
- ^sleep
- ^originalinputrange(start end) from ^actual data, naming a range of words, what original words generated it returns range (begin<<16) | end
- command line paramter login= (documented in advanced manual)
- ^return(null) now made to be equivalent to ^return() to avoid errors
- ^jsonopen(direct - returns the read text directly to the answer, rather than converting to json facts
- %pid - process id
- encryption, encrypt= decrypt= command line parameter (documented in clients and servers manual under encryption)
- :time (performance measurement) documented in debugging manual
- bootcmd= command line parameter executed before CSBOOT is run (if it is run) (documented in advanced manual)
- ^extract now also takes signed arguments to perform relative or backwards extractions, eg ($$source 5 +2) to extract 2 characters beginning at position 5 ($$source 5 -2) to extract 2 characters ending at position 5 ($$source -1 +1) to extract last character – from end, start 1 character before and get 1 character ($$source -5 -1) from end, start 5 characters before and get 1 character before, i.e. the 6th char from end
- $cs_usermessagelimit sets max user/bot message saves. range 0...20
- $var.key
- clarify ^all = 1 and such assignments to function variables
- Full wiki documentation up-to-date, with HTMLDocumentation folder corresponding. I have not proofread the wiki or html, so it may have minor glitches still. PDFDocumentation not generated from Wiki yet (manually updated). 7. boottrace param to request trace over a startup boot loading of data 8. proofread of all documentation
- :trace full renamed :trace always, merely allows you to pass thru ^notrace but you can still choose bits you are tracing
- mongo support for filesystem changed...
- ^authorized() allows a script to test for authorization of current id just as debug commands do
- Giorgio Robino has transcribed 1st half of the CS documentation into wiki format in directory WIKI. In the future I will update it and remaining documents as I ongoingly revise documents. So currently wiki matches 6.8 Renamed DOCUMENTATION to PDFDOCUMENTATION
- JsonParse allows optional argument before the data of NOFAIL - will return null without error if something is wrong
- ^jsonpath can end a path with , which means return fact id rather than object of fact. EG ^jsonpath(.value $$id) or ^jsonpath(".foo[5]*" $$id)
- full local variables in topics and outputmacros, $_xxx (see Advanced manual- Local Variables)
USER TOPIC FILE FORMAT now detects the old format again, and accepts it, along with newer format.
- %zulutime - format: 2016-07-27T11:38:35.0Z
- documented :trace factcreate x y z in debugging manual to trace specific fact creations
- ^'xxxxx' -- active json string. Advanced manual.
- postgres user storage name now includes USERS/ and .txt at end
- renamed %http_response to %httpresponse. Json manual
- Mongo DB now supported. Mongo manual
- param nosuchbotrestart to force server restart if bot not recognized. Advanced Manual or Server manual 6 ^layer(word) tells you when word entered into the dictionary. System functions manual
- no longer building linux postres # version as part of standard. You can build it or mongo as needed.
WARNING- USER TOPIC FILE FORMAT CHANGED, old ones will self destruct and clear to empty 1 :restart can take a 1st argument of "erase" which means system should erase topic file of current user (changing systems) and it can take up to 4 replacement command line parameters 2. ^jsonlabel(label) 3. ^jsonundecodeString(field) 4. $cs_externaltag ^setoriginal, ^setcanon, ^settag, ^setrole
- jsonobjectinsert will delete old value if exists, then insert replacement.
- ^jsonarraysize is now deprecated in favor of ^length - you get nonfatal warning messages
- ^jsondelete is now deprectated in favor of ^delete - you get nonfatal warning messages
- ^matches - returns string of word indices detected by a match
- :trace $var
- DO_SPLIT_UNDERSCORES
- LEAVE_QUOTE documented from $cs_token
- ^wordinconcept(wordreference ~concept)
- ^conceptlist returns facts whose third argument is now start<<8 + end (range rather than just start)
- MARK_LOWER tokenflag
- ^clearcontext()
- ^serialize(@set) ^deserialize(string) convert factset to a string and back out again.
- ^query can now also directly return a field value from a match by naming field on the TO argument $$tmp = ^query(exact_sv meat eat ? 1 ? @1object) 3: :restart now accepts up to 4 commandline parameters
- ^savesentence(label) and ^restoresentence(label) will save and restore an entire sentence preparation, so you can jump back and forth between sentences in pattern matching w/o real cost.
- ChatScript now enforces a rule that a function variable name should not be the name of an existing function (hides the function). This may cause your builds to break until you rename your variables in question.
- :trace full -- when set, disables NOTRACE() so everything is traced using all flags :trace ignorenotrace just turns on the flag, leaving your other bits intact :trace none turns off all bits and any ignorenotrace flag
- PRIVATE_CODE now requires PrivateInit() and PrivateRestart() and PrivateShutdown() functions and file privatetestingtable.cpp for any :test overrides, a command line paramemter private= passes its value thru to PrivateInit
- ResponseRuleID(-1) does all to date
-
TOPIC now gets subdirectories for each of the build layers. While it will work with content in the old format (all at top level) or the new format (subdivided into BUILD0 and BUILD1 subdirectories, it will only :build into the new format. If you have deployment scripts, make sure when they perform builds that CS can create these subdirectories.
-
when using pattern- u: ($$test?) which would see if word was found in sentence, if it is a quoted string "buy me" it will be able to find that sequence as matching.
-
^jsonarraydelete([INDEX,VALUE] array index) to remove element and renumber later ones down
-
while !not in pattern checks that not doesnt appear later in the sentence, !!not checks that it is not the next word
-
:trace RULEFLOW will just show the rules as it does their outputs. It is a terse flow of control view.
- ^importfacts may have null as its set value. It wont store the facts created in a factset.
- ^conceptlist takes optional 3rd arg, prefix to filter by
- ^words(word) get all dictionary entries with this spelling, upper and lower case, spaces vs underscores
- #define DISCARDDATABASE renamed to DISCARDPOSTGRES
- ^dbinit(EXISTS ...) will return normally when db is already open
- :restart autocloses a postgres db
- ^CSBOOT will now print its results to console and if a server, to server log
- ^CSSHUTDOWN added for system going down behaviors
- jsonarrayinsert allows a leading flag UNIQUE, in which case it does not add to array if already there.
- ^notrace(... ) turns off regular tracing for the given stream. Explicit function and topic traces are not blocked, just normal :trace xxdx
- $cs_jsontimeout sets json wait delay (300 second default)
- save/restore local variables allow you to avoid naming collisions -- see advanced manual outputmacros: e.g. outputmacro: ^myfunc(^arg1) ($$tmp $$tmp1) code the values of $$tmp and $$tmp1 are saved and restored across the call, so the macro may safely write on them.
- ^return(...) see advanced manual outputmacros:
- ~twitter_name detected as concept for @xxx names and ~hashtag_label detected as concept
- $cs_beforereset and $cs_afterreset if, assigned to functions, will execute them before and after a :reset. This is your chance to pass some information across to the newly reinited user. I store data in _match variables before and retrieve them after.
- Outputmacros can be declared as executable javascript code. New manual in Esoterica for that.
- fixed slowdown introduced into the engine a few versions ago.
- ^jsonparse now accepts a flag argument of SAFE, which means you can use it against data the extends beyond the minimal, meaning if you memorize OOB data after [, you dont have to care to find the closing ], which will be hard since JSON itself has ] in it. Eg u: ( [ _* ) $$jsonfacts ^jsonparse(safe _0)
- support for spanish spellchecking
- ^substitute 1st arg can now be "insensitive", meaning character search and case insensivive. Or you can provide a string like "word insensitive" to pass 2 arguments.
- %originalSentence will give you the raw user input for the current sentence (after tokenization)
- ^original(_0) will give you the original text of the user that this match derives from (see docs for more details)
- You no longer have to backslash [ in an active string. You can do ^"[$count]" with impunity. That means that using [] [] notation to designate a choice of text is no longer effective inside an active string"
- ^Next(loop) will skip the rest of code in a loop and begin the next interation (NO MATTER how far up the call chain the loop actually is)
- CS can now be run old-style (all executables at top level) or within BINARIES
- %host gives you the name of the currently running host.
- ^pos(verb be present/past XXX) optional 4th arg to verb form, names pronoun or noun used, so better handles irregular verbs
- $cs_language, if set to spanish, alters spellchecking for spanish
- Moved executables and DLLS to folder BINARIES. You must now run CS from there rather than top level. CS changes current working directory up 1 level after starting. Revise Cron jobs and shortcuts to the exe appropriately.
- ^norejoinder() makes this rule unable to set its rejoinder.
- CS now allows multiple forms of uppercase words, e.g., ID and Id
- Recently a major security hole in glibc, open source c library was announced and patched. CS uses glibc. This build uses the new version. If you are running older versions of CS, there is some security risk and you are advised to upgrade to this executable linux version, or apply sudo yum update to glibc (or equivalent commands) and then rebuild your existing sources.
- optional 3rd argument to ^jsonpath(xx yy safe) tells it to return ugly data with doublequotes around it. Things with embedded json data or whitespace need to be passed into jsonformat using safe data.
- documented existing assignment abilities: @3 = @2 @3 -= @2 @3 += @2 @3 = $$factid @3 += $$factid @3 -= $$factid
- new command line parameter timer=15000x10 to control how long a volley can last before being abandoned by time. 1st number is millisecond limit, 2nd is a checking frequency (reducing load of getting the time frequently)
- %maxmatchvariables and %maxfactsets given the highest legal number for those respective things
- UNLIKELY INCOMPATIBLE CHANGE: previously if you used match variables inside a nested pattern component, e.g., u: ( _this ( my _*1 ) ) it would be discarded on return to the top level. THEREFORE except in unusual cases, you would not have nested match requests. NOW... they are not discarded. If the above matches, _0 and _1 are both defined. Same for u: (this _(my _{often} dog)) which sets 3 match variables
- new command line parameter debug= allows you to execute a :debug command on bootup and then exit. eg. "debug=:trim USERS 4"
- IF tests can now be made of a std rule pattern (including memorization etc) using form if (pattern ....) {} which means you can match input and even memorize during the if test
- ^sequence added, similar to refine, except instead of only executing one rule, executes all matching rules.
- Added :common word1 word2 to tell you the concepts they both particpate in, closest first.
- $bot has been renamed $cs_bot and $login has been renamed $cs_login with script errors if you use the older names.
- added internal ~timewords as an enumerated concept as well.
- variables owned by the bot can be defined (always resident unchanged accessable to all users) - see Advanced Variables in advanced manual
- $cs_trace enables and tracks traces by user
- right hand side of a comparison in a pattern may now be a double-quoted string, looks at the inside of the quotes
- concept from ontology concepts: ~daynumber renamed to ~dayindex so as not to collide with engine concept.
- ~common7 redacted
- ^load(name) to dynamically load a layer of topics (analogous to layers 0 and 1 that load on startup)
- DICT/BASIC has a small dictionary of words thru grade 6, suitable for use on mobile devices seeking to minimize CS memory use. See end of Finalizing a bot: Mobile size issues
- easier to follow output tracing
- jsonopen now supports PUT as a type (with arguments just like POST)
- ^length now accepts the name of a json object or array, and returns the number of elements it has
- ^match can take a rule tag instead of a pattern, using the pattern of that rule.
- easier to understand pattern tracing
- ^print accepts more flags (RESPONSE_ ) controlling output
- %timenumbers for a complete second minute hour dayinweek dateinmonth month year data
- New manual "ChatScript Common Beginner Mistakes"
- time.tbl file removed from worlddata, its 2 concepts merged into ontology concepts, whose order of data has changed concept: ~month_names (Apr April Aug August Dec December Feb February Jan January Jul July Jun June Mar March May may Nov November Oct October Sep Sept September ) concept: ~month_names_index DUPLICATE (3 3 7 7 11 11 1 1 0 0 6 6 5 5 2 2 4 4 10 10 9 9 8 8 8 ) concept: ~daysinmonth DUPLICATE (30 30 31 31 31 31 28 28 31 31 31 31 30 30 31 31 30 30 30 30 31 31 30 30 30) # 0-based concept: ~month_proper_names DUPLICATE (April April August August Decemeber December February February January January July July June June March March May May November November October October September September September )
- :trace none now also turns off all topic and macro tracing
- $cs_utcoffset now accepts time notation as well, like -02:30 to adjust 2.5 hours before utc.
- :trace notthis ~topic will suppress tracing in this topic AND below it
- Jsondelete now only takes 1 argument, name of json composite to delete
- :prepare now takes optional initial argument NOPREPASS to avoid using prepass topic
- all debug commands have a 2character abbreviation of 1st and last letter (those that conflict tie goes to the the first in the table).
- src directory renamed SRC (must use new executables which have correct directory case in LINUX)
- ~email_url split off from ~web_url and recognized by the engine
- add ^jsoncopy( jsonref) to duplicate a json fact structure given its name
- ^jsonparse now accepts extended object references that get or dereference existing json structures
- %originalinput gives the original volley input
- new manual ChatScript System Variables & Engine-defined concepts split off from various manuals.
- the json argument "unique" has been deprecated. it is no longer needed.
- PRIVATE_CODE define supports you appending code to functionexecute.cpp w/o changing engine source. See new manual INSTALLING AND UPDATING CHATSCRIPT
- renamed ~verbs to ~verblist, ~prepositions to ~prepositionlist, ~adverbs to ~adverblist and ~adjectives to ~adjectivelist - these lists are not from the pos-tagger and should not be used in scripts. They are aggregation data about what is in the corresponding files in ONTOLOGY.
- :show newline forces newlines to remain in the log file for respond: and start: lines.
- renamed ^jsonprint to ^jsontree so you can remember it vs ^jsonwrite 4 ^jsonformat( textstring) takes a json string and writes it so that all keys have double quotes around them. So you can build a json string from a CS format string w/o having to have (and escape) quotes around the field names
- new system variable %http_response returns most recent response code from libcurl (for ^jsonopen)
- optional 1st argument to ^jsonopen, ^jsonparse, ^jsoncreate, ^jsonobjectinsert, ^jsonarrayinsert is word "permanent" to tell the facts to not be transient and "unique" to make the facts unique across volleys.
- ^decodeinputtoken(number) given %token or $cs_token will give english values for the enabled bits.
- Added writeup just after OutputMacros in advanced manual, comparing them and ^reuse().
- added ^jsonarraysize(string) to count how many elements are in the given json array name.
- added discussion of using complex headers to JsonOpen
- Jsonprint takes optional 2nd argument depth to print to
- optional first argument to :reset makes it safe to call from inside a script
- removed ^setposition(value). Now you must use ^setposition(_var start end) you can use @_x+ to create an equivalent effect.
1 ^undelete can take a field restriction like ^undelete(@0object) which insures that the fact and/or the object is unique
- improved :testpattern trace
- :build option NOSUBSTITUTION will disable warning you about various substitutions.
- Sample comment can now include F to indicate the pattern is NOT supposed to match
- $cs_utcoffset is hours from utc, %time returns current time in that timezone
- ^timefromseconds takes optional second argument, timezone (hour) displacement (+ or -)
- ^jsongather(set jsonid) takes the facts involved in the json structure named by jsonid and stores them in the factset set.
- ^jsonparse and ^jsonopen take optional 1st argument "UNIQUE" allowing array and object naming to be unique based on volleyCount
- $cs_looplimit, if defined, will replace the default 1000 value limit on how many iterations of a loop the system will stop at to protect against runaway loops
- Findtext will now substitute _ to space in source and target before matching, to provide matching either notation.
- ^canon(word canonical) is analogous to :canon word canonical, and only works during :build. Used for table control over setting canonicals.
- ^jsondelete(factset jsonfact) will delete the fact and all facts referred to by it and if the fact is an array fact, will renumber all later array value facts down 1.
- ^jsonobjectinsert( object key value) inserts key and value into object named
- ^jsonarrayinsert(array value) adds value to end of array 9 ^jsoncreate({object array}) creates an empty json composite. 10 New CS manual ChatScript JSON
1 ^conceptlist fixed (bad edit destroyed the name)
- :build will ignore files ending in .bak and ~
- OUTPUT_NOSTORE renamed OUTPUT_RETURNVALUE_ONLY
- new ^print flags: OUTPUT_RAW - does not try to interpret " or [ or { or ( OUTPUT_NOSTORE - does NOT save the answer, but instead just returns it.
- ^JSONWRITE(id) given json facts referred to by the root "id", creates the corresponding JSON string sans any line feeds
- new manual ChatScript Engine Manual (in esoterica)
- Harry (in topic keywordless) now can illustrate Json calls by calling wikipedia for an extract if you say: "what is a root"
- documented that \ can escape an entire token in patterns, not just a character. hence ( \test=5 ) means the entire token test=5 and not a comparison of test with 5
- No longer providing 32bit LINUX # version executables. You need to build them yourself. Or tell me you want it. if there is enough demand, I will continue them.
- ^define takes a second argument of "all" or a third argument of "all" to display all meanings or of a particular sort.
- user flags on facts extended to 8 from 4 and JSON_xxx fact flags named as well. FACTS manual advanced section now documents a bunch of fact flags.
- :trace JSON added
- JSONOPEN & JSONPRINT & JSONPARSE & JSONPATH provide support for internet JSON access
- added optional argument ("trace") to build to trace the rules it compiles so you can see where it last succeeded before dying... :build harry trace
- ^cs_topic_enter(^topic ^mode) and ^cs_topic_exit(^topic ^result) allow you to intercept calls to do a topic.
- changed LIVEDATA path to be the unchanged path for initsystem embedded CS users.
- new tokencontrol value UNTOUCHED_INPUT. if set to exactly that, the system will tokenize based on spaces only. 2 :tracedfunctions List all user defined macros currently being traced
- :tracedtopics List all topics currently being traced
- ^respond now takes multiple arguments to try in order (similar to the new ^gambit)
- in debugging manual documented all the individual :trace options
- filesxxx.txt files hunt order now includes RAWDATA folder.
- Gambit now takes a series of things to try in order (up to 15) with FAIL as a final legal choice. WARNING: Back at the beginning of CS 5.xxx ^gambit(PENDING) changed meaning to no longer include the current topic. But this can be "recreated" by doing ^GAMBIT(~ PENDING) ^gambit(~ PENDING ~mygeneral) will do current topic, if no gambit then PENDING topics, if no gambit then ~mygeneral topic.
- new command line parameter authorize=" ... " to supplement authorizations system for debug commands 4 new command line parameter nodebug disables user issued debug commands
- documented existing command line parameters build0= and build1= which do command line builds
- speech input/ouput in WEBINTERFACE (for chrome/safari)
- GetRule(x y) takes 0 as y, meaning the top level rule above us. 3: :verify takes optional 1st param a variable indicating what tokencontrol value to use.
- new script marker - describe: $myvar "used to store data" _10 "tracks pos tag" takes a $var or an _var or an @set or a ^macro or ~topic and a text string and saves that as documentation. See :list
- :list {$ ^ ~ _ @} will list documented items (and undocumented variables). See Finalizing a bot 3: ^sort now takes optional first argument alpha or alphabetic meaning sort by name instead of value. Also takes instead "age" meaning put oldest facts first.
- loop (@2) now uses count of set as loop control. Previously you could also use @2 to represent a count in patterns and IF tests.
- :prepare now takes optional first argument, a user variable to set the tokencontrol to.
- You can now control what tracing is done within a topic. :trace ~topicname takes the current trace flags, uses them for that topic, and sets trace to 0. Therefore: :trace basic match ~topicname all will set ~topicname to do those 2 kinds of traces and turn off regular trace, then turn on regular trace for everything else
- :trace input adds current input to the trace 7: removed the comment in a concept definition (use describe: instead).
- concept definitions can now be annotated with ONLY_NOUNS or ONLY_VERBS or ONLY_ADJECTIVES or ONLY_ADVERBS. This requires that only the corresponding interpretation of words can match, both in this set and in ALL concepts recursively referred to by this set. It is similar to marking a concept with NOUN but doesn't actually change any existing property bits, merely requires them if the pos tagger can determine. ONLY_NONE added to a concept blocks any propogate thru it
- serious bugs with << and %tense fixed
- optional first flag to createfacts STRIP_QUOTES to remove quotes from arguments
- userbugs table in postgres user client to record CS detected bugs
- loebner.exe updated to current system
- WriteFact(factindex) will dump the fact to text. eg $$f = first(@1fact) $$tmp = WriteFact($$f) and CreateFact($$tmp) can get the fact back again
- indirection can now be applied on a value: $tmp = ^$x or gambit(^$x) will, if $x holds the name of a user or match variable, cycle indirectly thru $x to get the value of the named variable.
- :build can now define private canonical values for words using canon: word value word value ...
- ^burst(wordcount ...) replaced with ^burst(count ...)
- ^explode removed, replace with ^burst(xxx "")
- You can now use postgres as a fileserver to horizontally scale CS onto multiple servers - see postgres manual in Esoterica
WARNING- Backward Incompatible 5.3 vs 5.2 version
Deprecated $response, $token, $userfactlimit, $control_main, $control_pre, $control_post,$randindex Now named $cs_xxx - user topic files will be ignored. Script compiler will find your uses and flag them as errors, telling you to fix them appropriately.
- SetWildcardSeparator redacted. Replaced with setting variable $cs_wildcardseparator
- $cs_prepass documented under advanced input in advanced manual. Allows you extra conrol between pos-parsing and your main program.
- ^reviseFact(factid x y z) can replace any or all fields of existing fact. use null for fields you don't want to replace. Can only replace non-dead user facts fields. Can only replace compatibly (if subject if a fact, new value must be a factid also)
- new FAIL code: LOOP, terminates a loop and also the enclosing rule. new END code: LOOP, terminates a loop but not the enclosing rule
- concept control word DUPLICATE allows repeated keywords
- ^timetoseconds(seconds minutes hours date-of-month month year) converts to unix epoch (month can be name or number 1-12. inverse of ^timefromseconds.
- %daylightsavings - bool 1 if in effect
- ^timeinfofromseconds(%fulltime) takes an epoch time and decodes it into its components, spreading across 7 match variables. default begins at _0, but _3 = ^timeinfofromseconds(2155) starts on _3. In order: seconds, minutes, hours, date in month, month (name), year, day of week (name)
- :show now takes optional 2nd argument, value to set flag to
- $userfactlimit, if defined, overrides the normal value of how many facts you can track with your user
- changed command parameter from serverprelog to noserverprelog and inverted default.
- ^SetWildcardSeparator(char) uses this character to separate words when storing wildcard match values
- %outputrejoinder and %inputrejoinder can now be set.
- automatic retry when pattern fails by shifting starting match now infinite, no longer just once.
- ^enable(usedrules) re-enables rules that were disabled so far this volley.
- ^reset(output) flush all pending output that has been stored away (not including current buffered but uncommitted output)
- ^save() deprecated to ^enable(write @1) ^disable(write @1)
- retry(INPUT) will restart doing the entire input again.
- :notrace ~topic ~topic1 -- do not trace during this topic
- ^disable(save) blocks saving out the user state for this volley. ^enable(save) unblocks it.
- ^csbootfunction as outputmacro, if it exists, will execute on startup of the system as a whole. A place to define more system facts and variables that cross all users.
- :directories shows the execution path to cs.exe, the current working directory, and any assignments to the read/write/static directories.
- operator |^ and |^= turn off bits, equal to x & (-1 ^ y)
- :retry is safe for multiple users when enabled for a server.
- new command line parameter "redo" keeps backups of every volley (and prints out current volley) so you can return to any prior volley via :retry @n new input to revise input leading to the numbered output.
- :redo 3 replacement input - returns to turn and reenters.
- nth(~set count) returns nth member of set, starting with 1
- ^pos(allupper word) converts acronyms and state abbreviations to all upper case
- documentation for PerformChatGivenTopic in client/server, along with :topicdump and :extratopic
- %revisedinput - current input comes from ^input()
- outputmacro: ^mymacro variable (^a ^b ^c) allows you to supply fewer args on the call, rest default to null
- ^argument(2) and ^argument(2 ^mycall) allow you to access arguments of macros (including table generation) by index and even name a calling scope above you
- order of arguments to ^phrase has been flipped 5
- ^phrase() now takes optional 3rd argument "canonical" to request the canonical forms of words
- new command line param "serverretry" allows :retry to be used from a server
- ^respond(PENDING) analogous to ^gambit(PENDING) and also ^respond(~) and ^respond(keyword) analogous to the ^gambit args
- ##<< starts a block comment and ##>> ends one (can span any number of lines in a file)
- :permanentvariables lists all such variables that exist in your script
- optional 6th arg to InitSystem is a USERFILESYSTEM struct ptr to replace loading user topic files from a filesystem with some other mechanism (like from a database)
- added $response to control reply autoprocessing: a: #RESPONSE_UPPERSTART makes 1st character of output be upper case (default) b: RESPONSE_REMOVESPACEBEFORECOMMA trims spaces before commas (default) c: RESPONSE_ALTERUNDERSCORES a variety of things including converting underscores to spaces and removing ~ from concept names
- mark(* _0) will reenable marks on the range given by _0
- unmark(*) turns off marks on each word of sentence
- ^mark() and ^unmark() no argument forms, have their meanings switched
- bug fix for rejoinder
- IsNumber(x) fails if x is not an integer, float, or currency number. It succeeds otherwise, with no output.
- ^find(@3 $F) can now return position of fact in set
- Now legal to have null facts in a factset.
- ^nth(@3subject 12) returns the 12th entry in the set
- ^setrejoinder now takes optional 1st argument of input or output
- ^rejoinder takes optional argument which is the rule above the rejoinder block to use
- :context to display current valid context
- removed .<_0 and .>_0
- :testpattern can now name ~topic.label instead of a pattern, to test an existing rule.
- new manual- ChatScript Pattern Redux
- %crosstalk is a 4k buffer you can store data in across bots or users or document reads... it's engine resident.
- ^unmark(word all) remove ALL references that match this word in sentence
- %freetext (kb of available text space) %freedict (unused words) %freefact (unused facts)
- revised nltk bot to manage memory by default so it can read anything
- adding a concept modifier MORE allows you to extend a concept previously declared. concept: ~city MORE (...)
- rules with label prefix CX_ will also set context even if they dont generate output
- ^incontext now returns the volley that matched if it succeeds. 4 added old paper ChatBots 101 to papers.
- added query direct_all to allow you to get all user facts into a factset (query needs to make from = user
- any concept defined with a major pos restriction (NOUN,VERB,ADJECTIVE,ADVERB) will make member facts that only allow that use of the word to be a member. And this is recursive through any referenced concept.
- ^DELETE can now kill an individual fact
- ^conceptlist now requires a first argument of TOPIC CONCEPT or BOTH
- ^incontext(label or topic.label) fails if the given label has not generated output within the 4 previous volleys. Succeeds if label has.
- ^addcontext(topic label) sets a context. Label does not have to exist as a real label. Topic can be ~ meaning current topic.
- new command line params users= and logs= to set directories.
- optional 1st argument "once" to ^burst, makes the burst return the first separation and then the rest of the value unburst.
- you can now wildcard word spellings with an * in front as well. Eg u: ( *ator ) matches "I ate a reactor"
- ^setwildcardindex(val) tells a pattern match to resume dishing out wildcard slots at the given val (so you don't clobber prexisting useful values)
- ^conceptlist takes optional 1st argument of (CONCEPT or TOPIC or BOTH), returns the set referenced.
- :extratopic filename will import that file which was written by :topicdump of a topic, and convert it into internal binary format suitable for a PerformChatWithTopic, and in local mode will disable the topic named in the binary(if there is one) and add the binary and use PerformChatWithTopic instead of PerformChat. Used to test the PerformChatWithTopic interface.
- :identify prints out the starter label of # version and compile date and ^identify() 4; ^removeinternalflag (word HAS_HAS_SUBSTITUTE) will disable substition from that word (permanently)
- ^disable(rejoinder) now ^disable(outputrejoinder) and ^disable(inputrejoinder) added
- ^respond(topic.tag) or ^respond(topic.label) skips over all responders before the tag/label, starting at the given place instead. If the topic is declared Random, it will ignore that and perform sequential scanning instead.
- EVServer log format made conformant with non-evserver and user log format
- :regress terse file now allowed, only comments on bad changed things.
- PerformChatWithTopic mirrors PerformChat but has extra argument of a topic from external (documented in External Communication)
- :topicdump dumps named topic or all topics into lines of source, 1 per rule of the topic, in internal text format. (documented in External Communication)
- prefixing username on startup with * in client or stand-alone mode, allows user to speak first.
- the stand alone system recognizes 3 oob messages: alarm=xxx callback=xxx loopback=xxx If alarm is set, an incoming [alarm] will be sent to CS after the xxx milliseconds have been completed after completion of any current volley.
If a callback is set, an incoming [callback] will be sent to CS after xxx milliseconds, unless the user starts typing first, in which case the callback is cancelled
If a loopback is set, an incoming [loopback] will be sent to CS xxx milliseconds after the most recent output, unless the user starts typing first, in which case it resets and tries again after the next volley
- new parameter output= sets a line length limit for output of chatbot forcing \r\n as needed
- disable(rule ~) disables current rule
- :abstract story (display just topics with gambits and their gambits (+ rejoinders)
- :abstract responder (display topics and their responders (+ rejoinders)
- :abstract allows a list of topics to do
- new folder WEBINTERFACE holds the old index.php script under SIMPLE, and improved scripts under BETTER support the 3 oob messages as well as scrollable log
- if the filesxxx file is not found at the top level of CS, it will also look at the containing folder. THerefore you can put your own rawdata and filesxxx build files in there, put the CS folder in there, and update CS by merely replacing the CS folder entirely. If you have your own livedata, it can be in that outer folder and a command line parameter tells CS to use it instead of the default folder.
- system= and english= can be used to redirect accessing those folders within LIVEDATA. This means you can make your own copy of livedata (eg above cs) and then redirect CS to that to have your substitutions, but redirect these 2 folders to stay within chatscript for updating.
- :conceptlist to list all concepts or all matching a pattern like ~ye*
- documented :concepts which if given a word, lists all concepts affiliated with it. (faster and more convenient that :prepare sometimes)
- ^findtext now takes optional 4th argument "insensitive" to test with case insensitivity
- ^burst, if you dont tell it what to use to separate, will default to using BOTH underscore and space.
- improved placenumber labelling and 24'th is now accepted as a placenumber (the ')
- new document Overview Input to Output
- :regress file format changed, now works with :trim as well. You need to redo any regression file using init again.
- documented more codes for query scripts (S V O in section 1)
- altered ^first,last,pick to accept @0raw and field to accept @0 raw
- noticable bug relating to multiword recognition like "creme brulee" in dictionary fixed.
- improved display on :verify pattern and :testpattern
- better display for :regress
- bug with concepts declared with a systemflag (which didnt get set) fixed
- optional second argument to ^first,^last,^last is KEEP which means select but dont erase the fact member
- ^Getverify(tag) will retrieve the verify tag content if it exists in the VERIFY directory
- concept declaration can now have property UPPERCASE_MATCH, when used with _~concept in pattern match, result will force uppercase wildcard storage regardless of how you entered the words (storing the title or name of someone)
- :trace reject shows you what messages were not given because they repeated.
- ^result(stream) evaluates the stream, traps ANY return code and returns the text of the return code.
- :trace SAMPLE displays the sample input when tracing a rule.
- definition of << >> pattern match modified to set the matching location AFTER the >> to be just like the start of a match, ie something that looks like < * (match the next listed token anywhere in the sentence).
- ^phase(_0 noun) returns noun phrase running thru here
^phrase(_0 preposition) does it for prep phrases
^phrase(_0 verbal) does it for verbals;
4: script compiler now accepts the declaration
query: name "query string data"
to define private queries analogous to LIVEDATA/SYSTEM/queries.txt - :queries lists all defined queries
- ^field now accepts flag as a type
- ^hasanyproperty and ^hasallproperty now accepts CONCEPT and TOPIC as choices
- USER_FLAG1 .. USER_FLAG4 now defined as marks you can put on facts.
- if 1st arg to ^setposition is a match var, then it will take 2 more args (start + end) and set the position data for that matchvar.
- ~dateinfo marked on dates (some combination of month day, month year, month/day year
- tokenization control DO_DATE_MERGE now exists so dates involving month + year/day can be merged into one token
- indirect function calls are now supported... e.g outputmacro: ^x(^arg1 ^arg2) ^arg1(^arg2) or $$tmp(argument) or _9(argument)
- format strings are safe to use directly as arguments to functions.
- Advanced users manual split into that + ChatScript System Functions Manual
- Use of ^mark with a regular word (not concept) will force that word to reflect in ^conceptlist even though it is not a concept.
- :trace label reports as it passes thru labelled rules 8: ^dbopen(^"null") will fake a dummy postgress database whereby you can run code without actually storing anything away.
- :commands on :commands off to locally disable :commands
-
format strings ^"xxx" are allowed to continue onto successive lines. Will have only a single space at each line break, regardless of how many were before or after
-
rename: can now declare user defined number constants: ##myconstant 244 (check for hex also)
-
^END(CALL) to termiate a user function call but appear normal afterwards.
-
^pos(RAW number) returns the word at that posn in the sentence
-
builtin concept ~daynumber defined (for numbers 1 - 31) 6 optional exclude arguments to ^conceptlist removed. Instead ^addproperty(~set NOCONCEPTLIST) to sets to ignore
-
:document reader will react to any :command given at start of lines in document file.
-
concept ~being_list merged onto ~beings and thus deleted
-
~BE_VERBS removed from ~special_activity_verbs
- ^burst now allows optional first arg WORDCOUNT to return how many words appear if you burst (doesnt do the burst).
- ^sort now accepts additional factset args and sorts them to match the sort of the first argument
- _3 = ^field(factid all) will spread subject/verb/object onto _3, _4, _5
- OUTPUT_NOUNDERSCORE flag for log will convert underscores to spaces (which is what output to user do automatically)
- when running CS as client=, if you enter a :restart command to the server it will do that, but also restart the client= asking you for a new login.
- ^decodepos(pos index) gives text value of POS bits at that word location or ^decodepos(role index) gives text value of ROLE bits
- ~uppercase and ~utf8 concepts added to system
- conceptlist takes any number of additional set arguments to exclude including ~pos, ~sys, ~role to exclude those underlying sets
- extended documentation of ^pos() includin new: ^pos(hex32 number) ^pos(hex64 number) converts ints to hex 0x... ^pos(conjugate word POSCODE) returns inflected word
- fixed crash bug found by user
- fixed infinite loop bug found by user
- ^GetRole ^getPos returning parse data about a word in a sentence
- login= command line parameter 2 :trace SQL added
- auto double quoting for postgres text args that contain a quote
- extra optional initial arg to ^eval like ^print, flags to control how it generates its answer.
- output macroargs accept optional control specifier .HANDLE_QUOTES (good with postgres)
- :variables match shows match variable bindings
- rename: _goodname _10 as top level script element to relabel match variables and @myname @10 to relable factsets
- removed :debug (debugger system)
- bug fixes to :testtopic, script compiler, possible termination of engine on certain input sequences 2 substitutes.txt file split to noise.txt which covers all noise words that erase themselfs. DO_NOISE is now included in DO_SUBSTITUTE_SYSTEM so it is compatible, but if you turned off some files and used DO_SUBSTITUTE, you may want to add in DO_NOISE
- ~topic added to detect words that are names of topic (with or without ~)
- ^conceptlist() given a wildcard reference or absolute index in a sentence, generates facts of the concepts referenced by that location.
- for composite proper names, mark will now mark also the last word, and if the name is a human name, the first word as well.
- %bot added, parallels $bot (and is better to use system variable)
- systemflags for pos-tag tie values now exposed via names: PROBABLE_PREPOSITION, PROBABLE_ADVERB, PROBABLE_ADJECTIVE,PROBABLE_VERB,PROBABLE_NOUN usable with ^GetProperty
- ^"xxx" strings (both format and functional) are now allowed to use [][] choices and make function calls.
- fixed script in :document writeup, enhanced :wikitext
- added ^uniquefact to intersect two sets and returns items in 1 not in 2
- allowing ^analyze within main control and not just postprocessing
- ^postprocessprint now split into ^postprintbefore and ^postprintfafter based on prepending or postpending the output to existing output
- redocumented *-1, an example of a backwards wildcard to retrieve the word before the current location in pattern matching
- ^memorymark() and ^memoryfree() to manage memory when reading really large documents
- disabled the optional language argument to :restart, removed language.txt file
- :facts @3 now displays contents of a factset
- server default volley limit (save=) now defaults to 1, save every time. High volume servers might optimize by raising this, but there is no need on low-volume servers. userhold= server parameter removed.
- :quit can be placed in a file you :source or a top file you :build and it skips the rest of the file.
- emergency allocation scheme added for if user topic file gets bigger than your cache allocation value
- :wikitext to extract plain text from mediawiki format (wikipedia, simplepedia)
- :document revised and expanded document of its own (in esoterica) along with :wikitext
- ^postprocessprint changed to append its output to the existing output, rather than putting it before the existing output.
- file open path revisions to allow IOS to do :build and other commands
- default builds all are sans postgress support. Additional builds that support postgres are all labeled ChatScriptpg. Some machines like Windows Server 2008 do not have some std visual studio libraries that postgres client uses, unless you have installed the postgres server.
- tcpopen now url-encodes its data argument SO YOU SHOULDN'T. Except you can use GETU and POSTU to indicate you are supplying preencoded data. Also it sets $$tcpopen_error with a message if the function fails. GET bug fixed.
- ^log now takes OPEN and CLOSE arguments that can replace FILE, to keep a file open for writing when used heavily in a volley (like during :document)
- ^findtext( source pattern startoffset) returns index of the pattern first find in source starting at offset
- ^extract( source from to) returns the substring designated - combined with #3 and it's handy for using tcpopen to read web pages for specific data.
- fixed bugs with serverctrlz, :document xxx single, tcpopen,
- new document "What is ChatScript"
- %os tells what os you are: windows, mac, linux, ios, android (if you #define ANDROID)
- talk.vbs script added to chatscript root and harry now speaks by default on windows. See ~Xpostprocess in simplecontrol.top
- tcpopen and popen accept null for function argument
- paramater serverprelog tells server to log input before working on it, helps see crashes
- fixed crash in tcpopen
- parameter serverctrlz tells server to complete output with ascii 0 then 0xfe 0xff
- prior change of server socket parameters from SO_REUSEADDR to SO_LINGER seemed to cause problems. Revised to SO_REUSEADDRE false.
- new dlls for postres added, now reenabled by default for windows
- new :regress facility for testing large programs (see Finalizing a Bot)
- Disabled by default postgress code in windows #define DISCARDDATABASE since some dll's it seems to require are not available unless postgresql is installed.
- %user and %ip added to make login information available 2: datum: one-liner tablemacro use that can be declared at top level within a topic 3: can declare a table as variable to avoid saying ... to fill missing args- eg table: ^x variable (^arg1 ^arg2)
- new advanced manual section ADVANCED VARIABLES better described indirection variables
- ChatScript now directly supports PostgresSQL database access and a new manual ChatScript PostgreSQL (in esoterica folder) describes how to use it and added bot postgres
- DEFAULT Burst character is now " " instead of "_" Several versions ago the storing on variables of multiple words captured on input was changed from _ separation to " " separation, but I neglected to change burst default. Now rectified. BUT... if you had ^burst(_3 _) code you've written, it is probably wrong and should have been changed to ^burst(_3 " ").
- :diff now writes the differences list also to LOGS/diff.txt
- nouserlog command line parameter now works in non-server mode
- added %engine %script %dict for when those components were made 5 ^lastsaid() returns what bot just said
- SHARE (bots keep some state in common) see Advanced Topics
- added ? as standalone (not op) to IF test
- LIVEDATA subfolder SYSTEM created and canonical.txt, queries.txt, systemessentials.txt moved into it, less likely you will change them.
- Gambit() and GambitTopics() fixed so it doesnt do topics with the NOGAMBITS flag on unless explicitly asked for.
- :autoreply generalized to repeat whatever input you tell it to repeat
- :abstract improved to show reuse() gambit() refine() respond() instead of just labelling them { code }
- new manual ChatScript App Client Manual and new folder subsections in documentation
- fixed :reset user bug
- improved server machine loading of windows chatscript
- ^getparse() deleted, as now marks can cover as much of the sentence as needed
- improvements to postagging so src, DICT, LIVEDATA/ENGLISH are incompatible with prior such folders (has no effect on your TOPIC folder data)
- Short debug commands like :do, :why, :say had accidently been disabled with 4.0. Fixed
- Bug fix for canonical of 1.46 shouldn't be 1
- Fixing loss of John proper name and others in dictionary
- Fixed missing ' in output from contractions
- bug in ^setrejoinder using a labelled rule fixed
- revision on dictionary - ~verb_tenses now ~verb_bits and dictionary rebuilt along with LIVEDATA/ENGLISH revisions
- setting position reference and direction changed from @_0++ to @_0+ and same for -- and you can now use @_0_i (inclusive) to make the _0 location be the next thing scanned.
- the livedata PRIVATE substitutions file has been moved into the scripting language. A new top-level declaration is replace: xxx yyy which names an individual substitution to add which is enabled with the DO_PRIVATE $token flag.
- fixed :verify infinite loop and various other potential crash bugs
- new document Paper- WinningTheLoebners
- mark xref per concept/word raised from 7 to 32
- ^tally to get and set an integer value on a word (transient to a volley)
- ^walkdictionary('fn) to execute named outputmacro on every dictionary entry
- new document Bot Harry - moves initial discussion of harry from basic manual
- new document Bot Stockpile - describes how to run the planner bot
- new bot and document Bot NLTK - describes how to run natural language analyses
- Fixed bug in :shutdown that crashes on shutdown
- moved hardtrace.log to LOGS and renamed exitlog.txt
- fixed potential crash bug in spellcheck
- :shutdown merged into :quit and removed, use :quit for server or non-server exiting chatscript
- fixed bugs when using :build or :restart on a server
- new DICT, bits on dictionary entry, data in LIVEDATA/ENGLISH
- 3.72 introduced serious tokenization bug that broke contraction processing. Fixed.
- new manual ChatScript External Communcations- moves stuff from advanced on calling outside things
- :topicstats, :abstract, and :topicinfo now accept wildcard topic like ~ne*
- :commands will now display their results across a server connection (subject to buffer restrictions)
- #DO_CONDITIONAL_POSTAG removed
Most of the work has been to increase the accuracy of english pos-tagging. extensive changes in engine and dictionary entries properties and systemflags and concepts related to pos-tagging and parsing
- parserdata.top split off from verbhierachy.top in ONTOLOGY and put in own folder
- warning removed - now allows creation of topics with no rules.
- %sentence is true if input had a subject (possibly implied) and verb.
- severe bug in pattern matcher fixed
- :document now takes file or directory 1 %document now exists to tell you you are in document mode 2 %command (sentence type) and %impliedyou (you as implied subject)
- added ^RETRY(TOPRULE) to return from a ^refine() to the outermost rule to retry
- pattern matching can now change direction using @_n++ and @_n--
- added documentation old paper "Speaker for the Dead" 6: added documentation paper "Writing a Chatbot" 7: added :concepts to tell you quickly how to generalize a word
- ^iterator allowed in any rule not just in planning rule and planning example now also uses iterators.
- ^Tcpopen allows get/post from script
- :trace display cleaned up, you can do collections like :trace basic :trace mild :trace detail, and :trace tcp added for ^tcpopen.
- dualmacro: allows you to use same code as an output macro and as a pattern macro
- new command line parameter livedata= allows you to name your own directory to load livedata from.
- :trace now accepts - xxx to turn off stuff, so :trace all - infer - pattern can be used
- bugfixes and revisions to how Planning system works - read revised doc
- :build stockpile and stockpile planner demo now exists
- :build 1 is now :build Harry
- authorizedIP.txt file now also takes L_loginnames that can be authorized.
- new manual - finalizing a bot
- you can name a range of topics to :verify by ending with * , eg, :verify ~f*
- :verify sampletopic to restrict warnings to only samples resulting in wrong topics.
- ^Log(file filename new) use of new to clear out any existing content in file
- out-of-band sentences (ones leading with [...]) no long spell check inside the [ ] area nor do they postag/parse.
- :silent toggles showing output or not (good for regression tests)
- :diff file1 file2 - reports lines that differ between these two files.
- new manual- installing an amazon cloud server.
0: NOSAMPLES added as topic control flag to block :verify sample on topic
- named locations in worlddata and concepts are marked with systemflag LOCATIONWORD and concept ~locatedword has been renamed to ~locatedname 2: :gambittest moved into :verify gambit
- ^findfact(subject verb object) added
- new query control field 1 values: S, V, O for queing incoming item as a fact reference.
- ^flushfacts(factid) to kill off all facts created after this one
- added << and >> as additional arithmetic operators on assignment $$tmp = $$a << 4
- added NOGAMBITS as topic control flag to block :verify gambit on topic
- WARNING- DICT binary format changed, src corresponds to it.
- ^createattribute function similar to createfact, but insures this is the only fact with this combination of subject and verb.
- plan: script element added and ChatScript Planning document added
- ^Iterator() added for plans
- ^marked() now returns FAILRULE bit if word is not marked, instead of null.
- :say xxx yyy zzz forces chatbot to say that message as its output (good for testing postprocessing scripts)
- :facts xxxx displays all facts involving word or meaning given
- WORLDATA facts on authors changed from "exemplar" to "write" for their works
- WORLDATA facts on musicians changed from "exemplar" to "sing" for their works
- added NOPATTERNS flag to topic define, so can avoid pattern tests using :verify on that topic
- can now use :trace on functions (turns on all tracing on patternmacro or outputmacro)
- documented how to deal with issues in proper-name merging in pos-parser documenation.
- ^uppercase(word) returns 1 if word starts with uppercase letter and 0 otherwise.
- changed a bunch of worlddata geographic names to have the property ALWAYS_PROPER_NAME_MERGE
- undocumented pattern notation metal~~ which matches metal and all direct synonyms of it (e.g., alloy).
- ^trimhistory(who count) added to chop off history
- restored ... ellipsis as a final argument to a table to fill in rest of args with *
- added ^reviseoutput(n value) to overwrite existing generated response n with given value
- added systemproperty for word NO_PROPER_MERGE to mark concept words which should never merge into a proper name (eg URL)
- documented ^position() which returns location information on a match variable
- added ^setposition() to allow you to arbitrarily set current match location in a pattern match.
- added topic flag nokeys similar to newly documented noblocking, suppresses all keyword :verify tests for that topic
- documented IGNORESPELLING feature on concepts- suppresses compiler warnings
- removed documentation on old server feature TIME (server no longer times out, client must if it wants to)
- :revert renamed to :retry
- new document ChatScript memorization
- crash bug fixes for mac
- added NOUNPHRASE to GetParse()
- added Set match Position ability to jump backwards during pattern match: @_0 being an example
- ^join(AUTOSPACE ...) adds blanks between each item automatically
- double underscores in output to user will allow a single underscore to show to user
- bot: xxx will restrict all topics in a file occurring after this top level command
- :show topics will display all topics that the input would trigger by keyword
- :topics sentence displays the topics marked, value, and words triggering it
- :definition displays code of the macro named
- function argument variables now allowed within format output strings
- HARRY project and filesx.txt file reorganized
- new documents PAPER Winning 15 minute conversation & ChatScript Exotica Examples
- added ^available to see if rule has been used up or not
- :document mode to read an entire document (in advanced manual not debugging manual)
- :abstract now can take a filename instead of a topicname
- :abstract pretty will prettyprint your topic(s)
- :abstract canon will prettyprint, replacing noncanonical keywords in patterns with canonical ones
- ^GetParse added to retrieve phrases, clauses, and verbals
- added :overlap to see what members of set1 are in set2
- :memstats to show memory use
- :noreact blocks reacting to input
- :show pos turns on pos summary 11: parser manual updated to explain how to access parse data from patterns 11: ^flags(word) and ^properties(word) to retrieve dictionary flags on word 12 new tokenflag: ONLY_LOWERCASE ignores all proper nouns and name merging to use lower case forms of words
- revised popen to strip out \ off embedded doublequotes in command string
- function calls to SYSTEM functions can now take relation operations inside patterns.
- improved pos-tagging and parsing for english
- optional 3rd argument to export to append to a file rather than overwrite
- optional preliminary argument to ^log to name file to log to other than userlog
- ^popen function added
- new manuals on pos-tagging (for foreign language developers) and control scripts
- bug fixes - loebner entry # version
- fixed :trace ~topicname and various other bugs
- added tokencontrol NO_INFER_QUESTION and added "Controlling Input" to advanced documentation
- %fact - most recent fact id
- brought back the parser
- fixed NOUN_TITLE_OF_WORK should not merge proper name into one token "the fox" is a movie name but shouldn't become a single token
- fixed script compiler failing to notice a; xxxx as a faulty rejoinder
- fixed tokenization bug
- added ^position, ^capitalized
- reinstated English Pos-tagging
- fixed tablemacro bugs
- tables accept .KEEP_QUOTE on arguments
- crash in NEXT fixed
- fixed crash in :restart (server + standalone)
- fixed output mode OUTPUT_NOQUOTES
- fixed bug in scriptcompiler for u: (!^query())- not before call failed
- fixed manuals
- reverted some newer capabilities from deleted versions above 2.0
- can now escape pattern comparisons - u: (\gesture=smile)
- support for foreign language dictionaries
- embedded debugger
- rule tags to increase introspection
- added ~money and improved money tokenization and canonization in the system
- added DO_POSTAG and DO_PARSE and DO_NO_IMPERATIVE as tokenControl values for bots
- added :postrace command to watch postagging/parsing
- added dynamic query abilty, using _xx and
$xxx variables as arguments for subject, verb, object and '$ $ and '~xxx mean dont expand the choice, while '_xxx still means orignal form - can block con# version of & to and in script compile, by preceeding & with \
- added lowercase and canonical to ^POS
- raised max function argument count to 19
- fixed SYSTEM command
- fixed token errors related to questions
- added |= &= ^= to assignment
- made responders allow more data
- MAC OS compiles server now
- TIME= command line option
- USERLOG NOUSERLOG SERVERLOG NOSERVERLOG
- LOGS subdirecotry added
- allow utf8 and support DO_UTF8_CONVERT to change some accented to normal ascii.
- renamed :undo to :retry
- added capitalize to ^pos()
- $crashmsg
- bug fixes for 64-bit linux and other crashes
- added ^hasProperty(word, bit)
- documented ~ as pattern word for current topic
- added %all
- altered :undo to take replacement sentence on same line
- added :debug to set internal debug flag
- added a couple of pdf papers about chatscript into documentation
- added :reset analogous to ^reset(USER)
- added xs xv xo to test sentence marks in inference system for part 3
- adding data to :help function to briefly describe most functions
- added :all to assist in debugging 7: added :undo to retry user input with replacement 8: documented the ? option in pattern matching (advanced)
- system variable %userInput added
- automated pronoun handling supported along with improved pos tagging
- help now takes "function" or "variables"
- Pos tagging improved, migrating toward full parsing but not there yet
- linux server no longer busy-waits - Linux build now requires -lrt as well
bug fixes, more pos tagging and doc added for ^match()
- improved POS tagging, with rules put into Livedata
- tables accept ... to mean fill in remaining arguments with *
- added :testpos to verify pos tagging and regress/postest.txt
- added :pos to display pos tagging and how it happened
- :word now can take a series of words to display
- tables now allow a short-entry to default missing tail entries
- :help lists all the : commands
- argument "sandbox" tells server to disallow access to OS from script 9: revised various tables using verb exemplar to use more direct choices: star - for actors/actresses and the movies/tv in which they starred write - for authors and the books/poems they wrote 10: chatscript tutorial written by Erel Segal
- fixed bugs in Linux server mode
- added optional "echo" to :source
- substitutes adds negation testing on the result arg
- ~introduction basic sample topic renamed ~introductions
- :prepare now takes all and none to mean set as mode for future
- revised memory usage--- Linux # version was dying in malloc
- Added ^settopicflags()
- :topics added
- An output choice may now be [!$value ...] in addition to [$value ...]
- ^keywordtopics now also accepts topics labeled nostay
- ^mark allowed optional second argument, a match variable and optional 3rd argument, a match_variable
- ^unmark order of arguments flipped, and 2nd argument made optional
- script compiler now spell checks patterns and outputs and warns you about questionable words 5: :build optional 2nd argument "nospell" to suppress spell checking and "output" to add output checking
- documented unipropogate query
- pos(snake noun 2) -> snakes
- revised autogeneration mechanism
- now accepting [] instead of () for topic and concept definitions
- manual revised to use [] instead of ()
- removed ~teenword (now considered ~adultword)
- handling of ~infinitive improved
- added :used to see what responders are used up in a topic
- :verify rule changed to :verify pattern
- added POS(noun,word,proper) to uppercase to proper name
- allowed to have global user variables from a :build commands
- added autogeneration of responders
- fixed serious bug in script compiler
- added %rejoinder (indicates system has a rejoinder it can expect)
- clarified eraseure in esoterica
- added ^import and ^export to read and write fact files
- redefined factset decompositions (@1subject, @1object) and added @1fact @1verb @1+ @1- @1all
- stopped deleting the "to" in front of an infinitive.
- bug fix with repeat topic flag
- other bug fixes
- supporting unique names for public servers (if user name comes in from webpage with . prefix).
- insuring all boolean system variables return "1"/defined and null/undefined
- removed $defaulttopic variable used by engine which caused a modification to the control script
- optional 2nd arg to reuse allows it to skip over a responder that has been marked d
- added :bot to change bots on the fly
- table arguments allows to specify a designation that the entry is script by prepending ^ to a "xxx" table entry string. Eval() will execute it
- modified doublequoted string handling on output side.... normal strings display with their " ". strings with \ in front no longer have any special meaning strings with ^ in front mean output string w/o quotes as a format string
- added documentation section Esoterica and Fine Detail
- earlier optimization added introduced a mega serious bug which was reported and now fixed, screws up a lot.
- added ^nofail and revised control script to use it
- bug fixes
- redescribed noerase so that gambits are always erased. It only controls responders.
- Continuation renamed rejoinder
- multiple copies of topics allowed for multiple-bot handling-- see WHICH BOT in documentation
- :abstract allowed a topic name argument 3: added flag to mark object-pronouns to improve pos-tagging commands
- extended assignment syntax to allow any length of operations, so $var = 1 + 2 % 3 * 4 is now legal
- enhanced output of things like :testtopic and :testoutput to show variables changed as well.
- changed file format of user save data... any files in USERS folder you have should be removed.
- moved %token over to $token
- allowing #define constants as ordinary items in output
- added %question 10 moves ~qwords from script to engine
- fixed bug crash on misspelled words and other crashes found by a massive regression test.
- added windows hardware exception trapping to server so it cant crash
- split ~singular and ~plural into: ~nounsingular, ~nounplural, ~verbsingular,~verbplural
- moved ~auxverb from script to engine
- fixed bugs introduced by spellcheck, which destroyed the interjections system and some canonical forms
- documented the interjections system in the manual
- renamed concept set ~aux to ~auxverb
- added %token and changed the default to allow assignment to all %systemvars.
- modified :revert to automatically redo your last input
- fixed serious bug in marking used responses
- added ^fact() and removed fact duplicates
- added :prepare and :postprocess and :testtopic and :real and :testouput
- added spell checking
- documented ^analyze and _0=#define for values of dictionarysystem.h
- bug fixes
- documented global macrovars ^$var and ^_0
- added pattern positioning @_2
- removes :noreact and %noreact
- :regresssub renamed :verifysub :dummyinput renamed :fakereply :writefacts renamed :facts
- upgraded POS analysis
- :shutdown added
- :verify upgraded with new ability
- LoebnerVS2008 fixed to compilable
- misc bug fixes
- added files for testing servers, better server logging, and writeup on using servers
- Internal representation for "refines" changed to use member verb
- Misc bug fixes, particularly to ^query and the "xxx" construct
- added :variables
- misc bug fixes and improvements to :word and startup display data
- removed %bot (redundant with $bot)
- added %server (server mode vs standalone mode)
- added ~unknownword (unrecognized input words)
- added $var? (can var content be found in sentence) and _9? (can match var be found in sentence)
- added :stats
- added ^save(@setref true/false)
- added support for Windows server
- added overlay to run Loebner protocol (different project) under vs2010
- _var (match variables) restricted to _9 max
- :define documented
- added VS2008 build data