@polycode-projects/the-mechanical-code-talker 1.12.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +244 -48
- package/ROADMAP.md +23 -34
- package/bin/tmct.mjs +107 -71
- package/corpus/LICENSES.json +118 -0
- package/corpus/README.md +17 -13
- package/corpus/conceptnet/README.md +5 -5
- package/corpus/conceptnet/fetch-slice.mjs +1 -1
- package/corpus/conceptnet/filter-dump.mjs +1 -1
- package/corpus/generated/README.md +9 -10
- package/corpus/namenet/README.md +39 -0
- package/corpus/seon/README.md +2 -2
- package/corpus/tier2/generate.mjs +58 -9
- package/corpus/tier2/manifest.json +44 -0
- package/corpus/wordnet/README.md +37 -0
- package/corpus/wordnet/generate.mjs +1 -1
- package/data/templates/constructions/agent-noun-relations.toml +2 -2
- package/data/templates/grammar-rules.toml +1 -1
- package/package.json +13 -22
- package/src/{ask-nlp.mjs → adapters/ask-nlp.mjs} +1 -1
- package/src/{config.mjs → adapters/config.mjs} +1 -1
- package/src/{corpus → adapters/corpus}/conceptnet-map.toml +4 -4
- package/src/{corpus → adapters/corpus}/conceptnet.mjs +3 -3
- package/src/adapters/corpus/construction-banks.mjs +43 -0
- package/src/{corpus → adapters/corpus}/templates.mjs +1 -1
- package/src/{embed.mjs → adapters/embed.mjs} +1 -11
- package/src/{graph-build.mjs → adapters/graph-build.mjs} +6 -6
- package/src/{memory → adapters/memory}/blocks.mjs +2 -2
- package/src/{memory → adapters/memory}/core.mjs +38 -94
- package/src/adapters/prose-tokens.mjs +98 -0
- package/src/{providers → adapters/providers}/bootstrap.mjs +2 -2
- package/src/{providers → adapters/providers}/fixture.mjs +3 -3
- package/src/{providers → adapters/providers}/graph-service.mjs +9 -4
- package/src/{source-slice.mjs → adapters/source-slice.mjs} +2 -2
- package/src/{source.mjs → adapters/source.mjs} +1 -1
- package/src/{toml-config.mjs → adapters/toml-config.mjs} +1 -1
- package/src/{answer-variants.json → domain/answer-variants.json} +1 -1
- package/src/domain/answer-variants.mjs +23 -0
- package/src/{ask-vocab.mjs → domain/ask-vocab.mjs} +37 -5
- package/src/{ask.mjs → domain/ask.mjs} +216 -52
- package/src/{codegraph.mjs → domain/codegraph.mjs} +31 -315
- package/src/{completions → domain/completions}/complete.mjs +16 -10
- package/src/{completions → domain/completions}/graph-adapter.mjs +10 -4
- package/src/{completions → domain/completions}/group.mjs +14 -6
- package/src/{completions → domain/completions}/infer.mjs +57 -39
- package/src/domain/completions/injected.mjs +21 -0
- package/src/{completions → domain/completions}/rank.mjs +15 -8
- package/src/{completions → domain/completions}/search.mjs +4 -2
- package/src/{grammar → domain/grammar}/ace.mjs +3 -3
- package/src/{grammar → domain/grammar}/assert.mjs +12 -8
- package/src/{grammar → domain/grammar}/lexicon-core.json +1 -1
- package/src/{grammar → domain/grammar}/lexicon.mjs +4 -6
- package/src/domain/hash.mjs +147 -0
- package/src/{interpret → domain/interpret}/fuzzy.mjs +42 -4
- package/src/domain/interpret/nlp-registry.mjs +20 -0
- package/src/{interpret → domain/interpret}/normalize.mjs +35 -5
- package/src/{interpret → domain/interpret}/pipeline.mjs +1 -5
- package/src/{interpret → domain/interpret}/strategies/ace.mjs +1 -1
- package/src/{interpret → domain/interpret}/strategies/constructions.mjs +30 -52
- package/src/{interpret → domain/interpret}/strategies/keywords.mjs +48 -26
- package/src/domain/memory/capability.mjs +235 -0
- package/src/domain/memory/fold.mjs +54 -0
- package/src/domain/memory/session-turns.mjs +7 -0
- package/src/{memory → domain/memory}/trust.mjs +48 -0
- package/src/{paraphrase.mjs → domain/paraphrase.mjs} +2 -2
- package/src/{prose.mjs → domain/prose.mjs} +1 -1
- package/src/domain/real-word-collisions.json +1 -0
- package/src/{router → domain/router}/call-validator.mjs +1 -1
- package/src/{router → domain/router}/drive.mjs +34 -25
- package/src/{router → domain/router}/goal-reasoner.mjs +1 -1
- package/src/{router → domain/router}/guardrail.mjs +1 -1
- package/src/{router → domain/router}/planner.mjs +1 -1
- package/src/{router → domain/router}/registry.mjs +5 -5
- package/src/{router → domain/router}/resolver.mjs +16 -13
- package/src/{router → domain/router}/results.mjs +1 -1
- package/src/{router → domain/router}/set-algebra.mjs +1 -1
- package/src/{router → domain/router}/taught.mjs +10 -9
- package/src/{syllogise.mjs → domain/syllogise.mjs} +21 -4
- package/src/domain/vector.mjs +12 -0
- package/src/services/chat-session.mjs +451 -0
- package/src/{chat.mjs → services/chat.mjs} +1209 -684
- package/src/{cli-args.mjs → services/cli-args.mjs} +2 -2
- package/src/services/completions.mjs +55 -0
- package/src/{extensions.mjs → services/extensions.mjs} +7 -7
- package/src/{finish.mjs → services/finish.mjs} +2 -2
- package/src/{memory → services}/fold.mjs +0 -0
- package/src/{import-file.mjs → services/import-file.mjs} +3 -3
- package/src/{index.mjs → services/index.mjs} +21 -12
- package/src/{init.mjs → services/init.mjs} +9 -9
- package/src/{ledger-viz.mjs → services/ledger-viz.mjs} +3 -3
- package/src/{plan-viz.mjs → services/plan-viz.mjs} +65 -26
- package/src/{sentences.mjs → services/sentences.mjs} +1 -1
- package/src/{sessions.mjs → services/sessions.mjs} +4 -5
- package/src/{telemetry.mjs → services/telemetry.mjs} +1 -1
- package/src/{server-http.mjs → surfaces/http/server-http.mjs} +11 -65
- package/src/{tui → surfaces/tui}/app.mjs +3 -3
- package/src/{memory-ask-browser-entry.mjs → surfaces/web/memory-ask-browser-entry.mjs} +5 -5
- package/src/{memory-ask-browser.bundle.js → surfaces/web/memory-ask-browser.bundle.js} +9465 -6366
- package/src/tools/catalog.mjs +29 -0
- package/src/{conformance.mjs → tools/conformance.mjs} +2 -2
- package/src/tools/definitions.mjs +288 -0
- package/src/tools/graph-load.mjs +20 -0
- package/src/tools/handlers/index.mjs +54 -0
- package/src/tools/handlers/kit.mjs +33 -0
- package/src/tools/handlers/tmct-architecture.mjs +7 -0
- package/src/tools/handlers/tmct-ask.mjs +14 -0
- package/src/tools/handlers/tmct-callees.mjs +6 -0
- package/src/tools/handlers/tmct-callers.mjs +6 -0
- package/src/tools/handlers/tmct-calls.mjs +6 -0
- package/src/tools/handlers/tmct-class-history.mjs +6 -0
- package/src/tools/handlers/tmct-cochanges.mjs +6 -0
- package/src/tools/handlers/tmct-context-more.mjs +9 -0
- package/src/tools/handlers/tmct-context.mjs +163 -0
- package/src/tools/handlers/tmct-describe.mjs +15 -0
- package/src/tools/handlers/tmct-exports.mjs +9 -0
- package/src/tools/handlers/tmct-file-history.mjs +6 -0
- package/src/tools/handlers/tmct-history.mjs +6 -0
- package/src/tools/handlers/tmct-impact.mjs +9 -0
- package/src/tools/handlers/tmct-members.mjs +16 -0
- package/src/tools/handlers/tmct-method-history.mjs +6 -0
- package/src/tools/handlers/tmct-search.mjs +22 -0
- package/src/tools/handlers/tmct-signature.mjs +6 -0
- package/src/tools/handlers/tmct-snippet.mjs +37 -0
- package/src/tools/handlers/tmct-subclasses.mjs +16 -0
- package/src/tools/handlers/tmct-tests-for.mjs +6 -0
- package/src/tools/handlers/tmct-untested.mjs +7 -0
- package/src/tools/memory-fallthrough.mjs +65 -0
- package/src/{schema-docs.mjs → tools/schema-docs.mjs} +1 -1
- package/src/tools/server.mjs +61 -0
- package/src/answer-variants.mjs +0 -39
- package/src/hash.mjs +0 -24
- package/src/server.mjs +0 -501
- /package/src/{corpus → adapters/corpus}/unknown-ingest.mjs +0 -0
- /package/src/{graph-merge.mjs → adapters/graph-merge.mjs} +0 -0
- /package/src/{memory → adapters/memory}/inspect.mjs +0 -0
- /package/src/{memory → adapters/memory}/shacl.mjs +0 -0
- /package/src/{prose-nlp.mjs → adapters/prose-nlp.mjs} +0 -0
- /package/src/{repository-interface.mjs → adapters/repository-interface.mjs} +0 -0
- /package/src/{uuid.mjs → adapters/uuid.mjs} +0 -0
- /package/src/{wink-model.mjs → adapters/wink-model.mjs} +0 -0
- /package/src/{completions → domain/completions}/prune.mjs +0 -0
- /package/src/{concept.mjs → domain/concept.mjs} +0 -0
- /package/src/{domain.mjs → domain/domain.mjs} +0 -0
- /package/src/{interpret → domain/interpret}/merge.mjs +0 -0
- /package/src/{interpret → domain/interpret}/strategies/grammar.mjs +0 -0
- /package/src/{interpret → domain/interpret}/strategies/noise-strip.mjs +0 -0
- /package/src/{memory → domain/memory}/bias.mjs +0 -0
- /package/src/{planning.mjs → domain/planning.mjs} +0 -0
- /package/src/{viz-theme.mjs → services/viz-theme.mjs} +0 -0
|
@@ -8,6 +8,54 @@
|
|
|
8
8
|
export const TRUST_SCORE_PROP = "mgx:trustScore";
|
|
9
9
|
export const TRUST_INPUTS_PROP = "mgx:trustInputs";
|
|
10
10
|
|
|
11
|
+
export const CREATED_AT_PROP = "mgx:createdAt"; // first-write-wins ISO-8601 on every individual
|
|
12
|
+
// For call sites that mutate an individual's own attributes without touching
|
|
13
|
+
// an edge (upsertSession, recomputeFactTrust, recomputeSourceReliability),
|
|
14
|
+
// where codegraph.mjs's derived-updatedAt rule alone can't see the change.
|
|
15
|
+
export const UPDATED_AT_PROP = "mgx:updatedAt";
|
|
16
|
+
|
|
17
|
+
/** Parse the "chat" shape both provenanceTag and teachProvenanceTag emit —
|
|
18
|
+
* `<source>[:<sessionId>][@<ts>]` — into { createdAt, sessionId? }. */
|
|
19
|
+
function parseChatTagRest(rest) {
|
|
20
|
+
const at = rest.indexOf("@");
|
|
21
|
+
const beforeAt = at >= 0 ? rest.slice(0, at) : rest;
|
|
22
|
+
const createdAt = at >= 0 ? rest.slice(at + 1) : "";
|
|
23
|
+
const colon = beforeAt.indexOf(":");
|
|
24
|
+
const sessionId = colon >= 0 ? beforeAt.slice(colon + 1) : "";
|
|
25
|
+
return { createdAt, ...(sessionId ? { sessionId } : {}) };
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Parse one legacy provenance TAG into a Source descriptor over the closed
|
|
30
|
+
* kind set (the kinds SOURCE_PRIOR scores):
|
|
31
|
+
* corpus:conceptnet /r/IsA -> { kind:"corpus", name:"conceptnet" }
|
|
32
|
+
* corpus-weak:conceptnet /r/RelatedTo -> { kind:"corpusWeak", name:"conceptnet" }
|
|
33
|
+
* ace:chat:<session>@<ts> -> { kind:"operator", createdAt:<ts>, sessionId:<session> }
|
|
34
|
+
* teach:chat:<session>@<ts> -> { kind:"teach", createdAt:<ts>, sessionId:<session> }
|
|
35
|
+
* web:<url> | url:<url> -> { kind:"web", url:<url> }
|
|
36
|
+
* extracted:<file-basename> -> { kind:"extracted", name:<file-basename> }
|
|
37
|
+
* entailed:<rule> -> { kind:"entailed", rule:<rule> }
|
|
38
|
+
* chat:/session: refs map to the operator; an unknown tag -> null (no Source).
|
|
39
|
+
*/
|
|
40
|
+
export function provenanceTagToSource(tag) {
|
|
41
|
+
const t = String(tag || "").trim();
|
|
42
|
+
if (!t) return null;
|
|
43
|
+
const head = t.split(/\s+/)[0]; // drop trailing " /r/IsA" etc.
|
|
44
|
+
if (head.startsWith("corpus-weak:")) return { kind: "corpusWeak", name: head.slice("corpus-weak:".length) || "unknown" };
|
|
45
|
+
if (head.startsWith("corpus:")) return { kind: "corpus", name: head.slice("corpus:".length) || "unknown" };
|
|
46
|
+
if (head.startsWith("ace:")) return { kind: "operator", ...parseChatTagRest(head.slice("ace:".length)) };
|
|
47
|
+
if (head.startsWith("teach:")) {
|
|
48
|
+
// the chat teach lane's natural frames — chat.mjs's teachProvenanceTag
|
|
49
|
+
return { kind: "teach", ...parseChatTagRest(head.slice("teach:".length)) };
|
|
50
|
+
}
|
|
51
|
+
if (head.startsWith("web:")) return { kind: "web", url: head.slice("web:".length) };
|
|
52
|
+
if (head.startsWith("url:")) return { kind: "web", url: head.slice("url:".length) };
|
|
53
|
+
if (head.startsWith("extracted:")) return { kind: "extracted", name: head.slice("extracted:".length) || "unknown" };
|
|
54
|
+
if (head.startsWith("entailed:")) return { kind: "entailed", rule: head.slice("entailed:".length) };
|
|
55
|
+
if (head.startsWith("chat:") || head.startsWith("session:") || head.startsWith("operator")) return { kind: "operator" };
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
|
|
11
59
|
/** Source-type priors — computed from the Source's type only, never hand-set
|
|
12
60
|
* on a Fact directly. */
|
|
13
61
|
export const SOURCE_PRIOR = Object.freeze({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// paraphrase.mjs — a surface-realization variant of an isa-family
|
|
2
2
|
// (`rdfs:subClassOf`) teach confirmation, shown alongside the original, never
|
|
3
3
|
// replacing it, and only when verified against tmct's own inference engine
|
|
4
|
-
// (src/syllogise.mjs). Scoped to isa-family facts only — the one predicate
|
|
4
|
+
// (src/domain/syllogise.mjs). Scoped to isa-family facts only — the one predicate
|
|
5
5
|
// family deriveSubClassClosure reasons over.
|
|
6
6
|
//
|
|
7
7
|
// Verification: re-derive the rdfs:subClassOf closure once from the original
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// term.
|
|
13
13
|
|
|
14
14
|
import { deriveSubClassClosure } from "./syllogise.mjs";
|
|
15
|
-
import { normFactTerm } from "./
|
|
15
|
+
import { normFactTerm } from "./hash.mjs";
|
|
16
16
|
import { fnv1aHex } from "./hash.mjs";
|
|
17
17
|
|
|
18
18
|
// Every template reads "SUBJECT ⊑ OBJECT" left to right — no passive/reordered
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// `prose_tokens` attribute (self-describing) and inverted into
|
|
5
5
|
// `entities.proseIndex` (word -> ids) for O(1) lookup.
|
|
6
6
|
|
|
7
|
-
// Exported so src/completions/group.mjs can filter splitIdentifierWords'
|
|
7
|
+
// Exported so src/domain/completions/group.mjs can filter splitIdentifierWords'
|
|
8
8
|
// output (which doesn't apply this list itself) down to real content words.
|
|
9
9
|
export const STOPWORDS = new Set(
|
|
10
10
|
("a an and or but the of to in on at for with from by as is are was were be been being " +
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"source":"corpus/wordnet/*.jsonl lemmas, expanded through the regular -s/-ed/-ing inflections","generator":"scripts/generate-real-word-collisions.mjs","targets":["alongside","build","builds","built","call","calling","calls","change","changed","changes","check","checks","class","co-change","co-changes","code","commits","contain","containing","contains","couple","couples","cover","covers","declare","declares","define","defined","defines","defining","depends","derive","derives","directly","edited","execute","executes","exercise","exercises","explicitly","export","exporting","exports","expose","exposes","extend","extending","extends","fire","fires","from","grab","grabs","have","hits","hold","holds","hooked","import","importing","imports","included","indirectly","inherit","inheriting","inherits","inside","into","invoke","invokes","kick","kicks","kind","land","landed","lean","leans","live","lives","make","makes","modified","modifies","move","moves","parent","part","pass","passes","pull","pulls","re-export","re-exports","reference","references","relies","rely","require","requires","runs","share","shares","sits","subclass","subclasses","subclassing","superclass","superclasses","sure","tend","tends","test","testing","tests","through","together","touch","touched","touches","touching","transitively","trigger","triggers","tweaked","updated","uses","using","usually","verifies","verify","went","were","wired","with"],"words":["aalging","aasing","aave","ablies","abling","aboves","absing","abuses","abusing","acauling","achinged","acolds","acquire","acquires","acyling","adelies","adenine","adenined","adenines","adenining","aditted","aerides","aerified","aerifies","aerify","affine","affined","affines","affining","afire","afires","afling","agalling","ailing","aired","airied","airies","airport","airporting","airports","airsed","airses","airted","alaing","alases","albing","alecks","aleves","aliaes","alikes","alines","alive","alives","allaing","allies","alling","alls","allying","alongsided","alongsides","alping","alting","altogether","amasses","amazes","amends","amorting","amorts","amuses","amusing","analling","anded","anoded","ansing","anuses","apart","aparts","apises","apparent","appends","appose","apposes","apsing","apsises","arab","arabis","arabs","ardent","argent","arpent","arrive","arrives","arsing","asaing","asding","aseans","ases","ashing","ashore","ashores","asing","asking","asping","asring","asses","assess","assets","assing","assure","attending","attest","attesting","attests","audited","aufing","auging","auking","aurifies","aurify","avouch","avouched","avouches","avouching","awaked","awakes","awared","awares","awling","awried","axling","baases","badded","bailed","bailing","baited","bake","bakeds","bakers","bakes","balded","balding","baling","balking","ball","balling","balls","ballsing","ballying","balming","band","banded","bandeds","bandied","bandsed","banked","banned","barded","barelies","barely","barses","bart","baseses","bashes","basing","basises","bass","bassed","basses","basset","bassets","bassos","bastes","basting","batses","bauded","bawded","bawling","bbsing","beaked","bean","beanos","beans","beasting","beasts","beating","beeting","begild","begilds","behave","behold","beholds","belied","belief","beliefs","belies","belikes","belizes","belles","bellies","belling","belting","bend","bended","bends","bent","benting","besets","besots","besses","bessing","best","besting","bests","beting","betting","bevies","bhanged","biered","bigger","biggers","billing","bind","binded","birded","birled","birles","biroed","birred","bising","bjsing","bladed","blanced","bland","blanda","blandaed","blanded","blands","blanked","blares","blases","blasts","bleaked","bleaks","blears","bleats","blended","blends","blesting","blests","blinded","blinds","blited","blites","bloked","blonded","bmuses","bnsing","boched","boches","boching","bocked","bode","bodilied","bodilies","boiled","boileds","bokked","bold","bolds","bolling","bonded","boners","bonked","boobed","booked","bookeds","bookend","booker","bookied","booksed","boomed","booned","boored","booted","boozed","borers","borough","bosked","bosses","botched","botches","botching","boucheed","bouchees","boucle","boucled","boucling","boughed","boughing","boules","boulle","boulles","bouses","bousing","bowers","boxers","bpsing","bragger","braggers","brakes","branded","brasses","breaked","bricks","brigged","brills","broked","brooked","bruins","brunts","brunus","bses","bsing","bugled","bugles","buhled","builders","buildups","bull","bulled","bullet","bulling","bulls","buns","bunses","bunsing","buried","burieds","burled","burleds","buses","bushes","bushing","busied","busies","busking","bussing","busying","buyied","buying","bypass","bypasses","caballing","cabals","cabbing","cabers","cabged","cabging","cables","cablin","cabling","cablins","caching","cackling","cadded","cadding","cadent","cadged","cadges","cadging","cadring","cafers","caffing","cafing","cagers","caging","cagying","caining","cajoling","cake","cakes","cakiling","caking","calcine","calean","caleans","caleying","caleys","calf","calfing","calfs","califs","calk","calkin","calking","calkins","calks","callaing","callas","callers","callinged","callings","callous","callowing","callows","calluna","callus","calm","calming","calmings","calmlying","calms","calquing","calvaing","calvas","calves","calving","calvings","calx","calxes","calxing","calycling","calyxing","camass","camelling","camels","camming","camoing","camping","canaing","canalling","canals","candid","candied","candled","candling","cangue","cangued","cangues","caning","canning","canoes","canting","cantling","capers","caping","caplin","caplins","capoing","capping","captain","captaining","captains","carded","carding","caring","carking","carlina","carline","carling","carlings","carlos","carning","caroling","carolling","carols","carping","carring","cart","carting","carver","carvers","carving","casaing","cashes","cashing","casking","cassies","castes","castling","casually","casuses","caters","catling","catlings","catses","catsing","catting","cattling","caul","cauline","cauling","caulking","caulks","cauls","cavaing","cave","caverns","cavilling","cavils","caving","cavying","cawing","caying","ceases","cecalling","cede","cedied","ceiling","cell","celling","celloing","cellos","cells","cellsing","cent","centing","cercises","cere","cerise","cerises","certain","certaining","certains","certifies","certify","certing","cfling","cgsing","chadded","chafed","chaffed","chafinged","chagaed","chagas","chagga","chaggaed","chaggas","chained","chainsed","chainses","chaired","chaise","chaised","chaises","chaited","chaits","chajaed","chalked","chalking","challis","champed","chanal","chanals","chanar","chanars","chance","chanced","chancels","chances","chancied","chancies","chancre","chancred","chancres","chancy","changers","channels","chanted","chanters","chanteys","chantied","chanties","chanty","chaosed","chaoses","chapped","charded","chards","charge","charged","chargers","charges","charied","charmed","charms","charred","charrs","charted","charts","chased","chasmed","chasms","chassed","chaste","chasted","chastes","chatted","chaunaed","chaused","chauses","chawed","cheaps","cheats","checkeds","checkers","checksum","checkups","cheek","cheeks","cheeps","chelas","chenned","cheops","cherts","chesting","chewas","chianed","chick","chicks","chigger","chiggers","chiling","chilling","chills","chinaed","chined","chines","chinked","chinks","chinned","chinoed","chirks","chits","chives","choanaed","chock","chocked","chocks","choked","choker","chokers","choler","cholers","chonned","choosed","chords","chores","chough","chuaned","chuck","chucks","chugged","chunga","chungaed","chungas","chunked","chunks","chyling","cialis","cicers","ciders","circed","circes","cive","cives","civies","cladded","claded","clades","clading","clads","claims","clamps","clams","clamses","clanged","clangers","clanks","clans","claps","clarks","claros","clash","clashes","clasp","clasps","classed","classic","classy","clast","clasts","clausa","clausas","clause","clauses","claver","clavers","clavus","clawing","claws","claying","clays","clean","cleans","cleanse","clerks","clever","clevers","cliing","climes","clinged","cloaks","clocks","closer","closers","closes","cloved","cloven","clovens","clover","clovers","clucks","cluing","clving","clxing","cnsing","coached","coaches","coaching","coaling","coasts","coaxer","coaxers","cobber","cobbers","cobble","cobbles","cocain","cocaining","cocains","cocked","cocker","cockers","cockle","cockles","coda","codaed","codded","coddles","coded","coders","codes","codex","codgers","codified","codifies","codling","cods","coed","coeurs","coffer","coffers","coggle","coggles","coheres","coiling","coiner","coiners","coired","coke","colaing","cold","colded","colding","colds","cole","coleus","coliing","coling","colling","collins","collying","colors","coltan","coltanning","coltans","colter","colters","colting","comalling","combats","comber","combers","come","comer","comers","comfies","comfit","comfits","comics","comints","comity","commas","comments","commes","commie","commied","commies","comming","commit","commix","commixes","commons","commute","commutes","compel","compels","compile","compiles","complies","comply","comport","comporting","comports","conched","conches","conching","concluded","cone","coneys","confer","confers","confining","confits","conged","conger","congers","conges","conjoin","conjoining","conjoins","conked","conker","conkers","constrain","constraining","constrains","contact","contacting","contacts","contadinoing","contadinos","contagion","contagioning","contagions","containeds","containers","contemn","contemning","contemns","continuing","contrail","contrailing","contrails","contriting","contriving","converse","converso","converts","convex","convey","conveys","convoke","convokes","cooked","cookeds","cookers","cookied","cooled","cooler","coolers","cooling","cooned","cooped","cooper","coopers","cooted","cooter","cooters","copalling","cope","copeck","copecks","copier","copiers","copies","copper","coppers","copses","copula","copulas","coralling","corded","core","coreference","coreferences","corer","corers","corked","corker","corkers","corner","corners","corpse","corpses","corvee","corvees","cosecs","cosher","coshers","cosmics","cosmids","cosses","costing","cotanning","cotans","cote","cotter","cotters","couch","couched","couches","couching","coude","couded","coue","coughed","coughing","coupe","coupes","coupleds","couplers","couplets","coupon","coupons","course","courses","couthed","couthing","coved","coven","covens","covereds","coverts","covet","covets","covey","coveys","cower","cowers","cowling","cowpie","cowpies","cozens","cpsing","crab","crabs","cracks","cradling","cragged","crakes","craned","cranes","cranked","cranned","crass","crasses","crawling","crawls","creaked","creaks","credited","creeks","cresting","crests","criers","cringe","cringed","cringes","crocks","crooked","crouch","crouched","crouches","crouching","croupe","croupes","crumple","crumples","cruses","crusing","cses","csing","ctened","ctenes","cubing","cuking","culling","culming","culting","cupalling","cupels","cupsing","cupule","cupules","cure","curing","curling","curses","cursing","curtain","curtaining","curtains","cusking","cusping","cussing","cuting","cutlass","cutses","cutsing","cxling","cxlving","cyanned","cyanoed","cycling","cyders","cymling","cysting","dadded","dahling","dailing","daises","daling","dall","dalliing","dalling","dallis","dalls","dallying","daloing","danced","dander","dandied","dandled","danked","dansed","danses","darded","darling","dart","dashes","dassed","dassies","dative","datives","dayses","ddsing","deafened","deafening","deafing","deaing","dean","deaned","deaning","deans","dearie","dearies","debiled","debiling","debone","deboned","debones","deboning","debrises","debted","debting","decade","decades","decalling","decease","deceases","deceive","deceives","decents","decided","deciding","deciled","deciling","declaim","declaims","declareds","declarers","declaw","declined","declining","decode","decouple","decouples","decries","deepens","deface","defaced","defaces","defacing","defame","defamed","defames","defaming","defang","defanged","defanging","defangs","defence","defenced","defences","defencing","defended","defending","defends","defensed","defenses","defensing","deference","deferences","deferenses","defiance","defianced","defiances","defiancing","defiant","defianted","defianting","defiants","defied","defies","defile","defiled","defilers","defiles","defiling","defininged","definings","definited","definites","definiting","deflate","deflates","deftness","defuse","defused","defuses","defusing","deglaze","deglazes","deicing","deified","deifying","deigned","deigning","deisted","deisting","deists","deitied","delfing","deliing","delivers","delling","demands","demised","demising","denied","denned","denning","dent","dented","dentine","dentined","dentines","denting","dentining","depart","depend","depended","deplane","deplanes","deplore","deplores","depone","deponed","deponing","depose","deposes","deprave","depraves","deprive","depriveds","deprives","derate","derates","derbies","deride","derides","deriding","derisive","derisives","deriveds","deriving","dermises","derpies","derrises","descends","designed","designing","desired","desiring","desking","desponds","dessing","destined","destines","destining","destiny","detained","detaining","detents","detest","detesting","detests","detinue","detinued","detinues","detinuing","deuses","deusing","deveined","deveining","deviced","devicing","deviled","devised","devising","dewied","dewiness","dewing","dexone","dexoned","dexones","dexoning","dhalling","dholed","dholes","dick","dicks","dieted","digger","diggers","dilling","dining","dinted","dire","direct","directed","director","directory","directs","dired","dires","dirged","dirges","dirked","disport","disporting","disports","disses","ditaed","ditted","dive","dives","divest","divine","divined","divines","divining","dmuses","docked","doleds","dolling","domine","domined","domines","domining","doobed","doomed","doored","dopeds","dories","dorked","dosing","dosses","double","doubles","douched","douches","douching","doughed","doughing","douses","dousing","dove","doves","dowers","dozers","drab","drabas","drabs","dragger","draggers","drained","draining","drakes","dranged","drecks","drilies","drive","drivels","drivens","drivers","drives","drover","drovers","drunks","druses","drusing","drylies","dses","dsing","dsling","dtsing","ducing","duding","dudses","dudsing","duking","dulies","dull","dulling","dulls","dulses","dulsing","duning","duns","duoing","duping","duples","during","dusking","eagling","earling","earses","easies","easing","easted","easting","eating","eatses","ebitted","ebooked","ebsing","echted","eclats","ecting","eddaed","eddied","eddoed","edgied","edibled","edicted","editeds","editor","editted","edsing","edtaed","educed","eduled","eelses","eerilies","eerily","effort","efforting","efforts","efting","egesting","egests","eidoses","eiraed","elan","eland","elanded","elanned","elans","elanus","elated","elegans","elided","elinted","elited","elling","elocute","elocutes","elopses","elsing","eluted","elvers","emending","emiled","emitted","emoted","emotes","emsing","enated","encode","endived","ends","energise","energises","enquire","enquires","ensile","ensure","entendring","ententing","enting","epopses","eposes","equally","equine","equines","erectly","eroses","ersing","ersted","ersting","erting","erudited","escort","escorting","escorts","eses","esing","esports","esportsing","espouse","espouses","esquire","esquires","esting","ests","eternise","eternises","ethoses","evicted","evoked","evokes","exceed","exceeding","exceeds","exchange","exchanged","exchanges","excite","excited","excites","excluded","execrate","execrates","executeds","executive","executives","executors","exegete","exegetes","exercisers","exerciseses","exerting","exerts","exhort","exhorting","exhorts","exiled","existed","exitted","exodes","exorcise","exorcisers","exorcises","exorcism","exorcisms","exorcist","exorcists","exorcize","exorcizes","expand","expanding","expands","expanse","expanses","expats","expatting","expect","expecting","expects","expend","expending","expendings","expends","expense","expenses","expensing","expert","experting","expertise","expertises","experts","expiating","expiring","expiry","expirying","explicit","explicits","explode","explodes","exploit","exploiting","exploits","exploring","expoing","exporters","exportinged","exportings","expos","exposeds","exposing","exposure","exposures","express","exsert","exserting","exserts","extant","extanting","extants","extendeds","extent","extented","extenting","extents","extern","externa","externaing","externas","externed","externing","externus","extort","extorting","extorts","extruding","fabling","fadded","failing","failling","faire","faires","fairies","faited","fake","fakers","fakes","fall","falling","fallings","falls","fallsing","falses","falsing","fanned","farces","fare","fares","fart","fasces","fassed","fasting","fawkes","fcsing","feasting","feasts","feating","fecalling","feeting","feined","feining","feisting","feists","felids","feline","felined","felining","felises","fellies","felling","felting","fend","fended","fends","feres","ferined","ferining","fesses","fessing","feting","fetting","fevers","fibers","fibre","fibres","fice","fices","fide","fides","fiends","fierce","fierces","fieries","fieris","fife","fifes","figure","figures","file","filers","files","filets","filles","filling","filses","find","finded","fine","finers","fines","fining","fiords","fireds","firm","firmas","firmers","firms","firmus","firsts","firths","fishes","fisting","fitses","fixe","fixeds","fixers","fixes","fizzes","flakes","flange","flanges","flanked","flanned","flasks","flecks","flicks","fliers","flirts","focalling","fold","folds","folies","folked","fonded","fooded","fooled","footed","forces","fore","fores","forest","forges","forked","form","fortes","fosses","fountain","fountaining","fountains","foyers","fpsing","freaked","frieds","friers","fries","frigged","frog","froms","frores","fros","frsing","fsbing","fshing","full","fulling","fulls","fuming","funded","funs","furies","furzes","fuseds","fusees","fusels","fuses","fusing","fussing","fuzing","fwsing","gabling","gabs","gadded","gaeling","gaited","galaing","galing","gall","galliing","gallina","galling","gallings","gallis","galls","gallus","gand","ganded","gander","gandied","ganked","gaoling","garb","garbs","garded","garment","garnet","gaseses","gashes","gassed","gassies","gatling","gauched","gauches","gauching","gauded","gauling","gausses","gcsing","gean","geans","gelids","gellies","gelling","gelting","genies","gent","genting","gestaing","gestes","gesting","getting","gilling","girded","girled","giroed","gisting","give","givens","gives","gladded","gladed","glanced","gland","glanded","glands","glandsed","glansed","glares","glass","glasses","glassy","gleams","glean","gleans","glides","glises","gofers","gold","golds","gonded","goners","gooded","goofed","gooked","gooned","gooped","goosed","gorals","gouached","gouaches","gouaching","governs","gpsing","graces","grad","grades","grads","graf","grafs","grafts","grails","grains","gram","gramas","gramps","grams","gran","granded","grands","grange","granged","granges","grans","grants","grapes","graphs","grases","grasps","grass","grasses","grassy","gratas","grates","gratis","graves","gravis","gray","grays","grazes","greats","grebes","greylies","greyly","groaks","groans","groats","grouch","grouched","grouches","grouching","groves","grub","grubs","grunts","gruses","gsaing","gsring","guesting","guests","guiing","guild","guilds","guiled","guiles","guilt","guilty","guises","guising","gull","gulling","gulls","guns","guses","gushes","gushing","gussing","gutses","gutsing","guying","gyrans","habits","hacked","hadded","hagged","haicks","haiked","hailing","haired","haje","hakeas","hakes","halals","hale","halfing","haling","hall","halling","halls","halming","haloing","halting","halve","halved","halves","halving","hame","hand","handed","handeds","handel","hander","handied","handled","handsed","hanged","hangers","harded","harems","hares","harked","harold","harolds","hart","harvey","hashes","hassles","hastes","hasting","hate","hats","hauling","haved","haven","havens","haves","hawked","hawses","haze","heating","heave","heaved","heaven","heaver","heaves","hectare","hectares","hefting","heired","heisting","held","helds","helixes","helling","helves","here","hets","hetting","hexine","hexined","hexines","hexining","hexose","hexoses","hhsing","hiatus","hick","hicked","hicks","hies","hilling","hilts","hind","hinded","hinged","hinges","hins","hints","hips","hire","hired","hirers","hires","hirtas","hiss","hisses","hives","hivs","hoards","hoared","hoaxed","hobbed","hoboed","hocced","hocked","hockey","hodded","hods","hoed","hogged","hoists","hokaed","holcus","holders","holdups","hole","holed","holes","holeys","holism","hollas","hollos","holm","holms","holy","homers","homied","homoed","honied","honked","honker","honkey","honkied","honored","hooches","hooching","hood","hooded","hoodeds","hoods","hooeyed","hoofed","hoofeds","hoofer","hookah","hookeds","hooker","hookeri","hookers","hookied","hookies","hooksed","hookses","hookup","hooped","hoopoed","hoopsed","hooted","hooter","hooved","hooveds","hoovers","hopers","hopied","hopped","hopple","hopples","hopsed","horded","hordes","horned","horsed","hosing","hosted","hosting","hotbed","hots","hotsed","hotted","hounds","houred","housed","houses","housing","hover","hovers","hoyaed","hrts","hses","hsing","hucked","huging","hulked","hull","hulling","hullos","hulls","hunged","hunked","huns","huoned","hushes","hushing","husked","husking","husoing","huts","hyoids","ictalling","idioted","idlies","iising","ileals","illing","images","impact","impacting","impacts","impart","imparting","impartings","imparts","impasses","impends","implore","implores","imploring","impoliting","important","importeds","importeeing","importees","importers","importinged","importings","importune","importuning","imposing","impost","imposting","imposts","improving","impure","impures","impuring","imputing","inbuilt","incise","incite","inclined","inclosed","include","includeds","includes","income","incomes","indied","indirect","indirected","indirects","indite","indited","indole","indoles","inerting","inerts","inference","inferences","infidel","influxed","info","inhabit","inhabits","inhere","inhered","inherent","inherenting","inherents","inheriteds","inheritinged","inheritings","inheritors","inheritting","inhibit","inhibits","initio","inkied","inland","inlanded","inline","inosine","inquire","inquires","insane","insert","inserting","inserts","insided","insider","insiders","insides","insist","insoles","inspire","insted","insting","intake","intakes","intending","interim","interims","intermit","intermits","inti","intied","intoed","intones","intos","intro","intron","intros","intruded","invades","invert","inverting","inverts","invites","invoice","invoices","involve","involves","iodide","ipsing","ired","ires","ironside","irsing","iruses","ises","isiing","ising","island","islanded","isling","isming","isning","isring","itsing","iuding","jailing","jakes","janned","jawses","jean","jeans","jellies","jelling","jest","jesting","jestings","jests","jetting","jigger","jiggers","jirded","jive","jives","jocked","jokers","jooked","josing","josses","joules","jove","joves","juking","julies","juning","jure","juring","juses","jussing","justes","juting","kailing","kakkes","kalaing","kaliing","kaling","karens","karling","kelpies","kelting","kepting","kerite","kerited","kerites","khanned","kianged","kickers","kied","killing","kilned","kina","kinaed","kinda","kindas","kindle","kindly","kinds","kine","kined","king","kinged","kinked","kinks","kinned","kino","kinoed","kins","kiosks","kirk","kirked","kirks","kisses","kith","kleins","klick","klicks","knacks","knocks","knucks","koined","kooked","kookied","kuiing","kvasses","kweeked","kylies","labbed","lacced","lacied","lacked","ladded","ladder","laddied","laded","ladied","ladled","ladling","laed","lagans","lagend","lagended","lagged","lahhed","lahued","laiced","laid","laided","lairded","lake","lakes","lakhed","lallying","lamaed","lambed","lament","lammed","lamnaed","lamped","lanaied","lanated","lanced","lancer","lances","lancet","landaued","landeds","lander","landers","landler","lands","lane","lang","langed","langued","lank","lankaed","lanked","lankied","lanned","lansaed","lanseh","lanset","lapped","lapsed","lapses","lard","larded","larder","larged","laried","larked","larred","lashed","lashes","lassas","lasses","lassies","lassos","lasted","lasting","latent","latest","latesting","latests","lathed","latked","latkes","latsed","latses","latted","lauans","laud","lauded","lauder","laudes","launced","launder","lavaed","laves","lavved","lawsed","lawses","laxaed","lazied","lead","leaded","leaden","leadens","leads","leaf","leafs","leak","leaked","leaks","leal","leals","leaners","leap","leaps","learn","learns","leases","leasting","leaven","leavens","ledded","lefting","legals","legends","lemnas","lemons","lended","lender","lends","lenifies","lenify","lens","lensed","lent","lented","lenting","leon","leones","leons","lesses","lessing","letting","levants","levees","levels","levited","lewded","lianaed","lianas","liared","libels","libred","lice","lices","lick","licks","lidded","lieded","lieges","lies","life","lifers","lifes","ligand","liganded","ligans","ligers","lignes","like","likeds","likens","likes","limans","lime","limens","limes","limeys","linden","lindied","line","lineds","linens","liners","lines","linged","linied","linked","linoed","linted","liraed","lirred","lises","lisles","listes","listing","lite","liters","lites","lithes","litred","livedos","livens","livers","livias","livids","llanoed","llanos","loached","loaches","loaching","loaded","loan","loans","localling","loched","loches","loching","locked","lode","lohans","loired","lolling","loners","longed","looked","looker","looksed","loomed","looned","looped","loosed","looted","lorded","losers","losing","losses","losting","louched","louches","louching","louded","loughed","loughing","loupes","louses","lousing","louver","louvers","lover","lovers","lowans","lowers","lsding","lubing","lueses","luesing","luging","lull","lulling","lulls","lunaed","lundaed","lunged","lunned","luoing","lure","luring","lushes","lushing","luting","luxing","lynxed","mace","macers","maces","maches","mackems","mackle","mackles","madake","madakes","madded","made","mades","maes","magens","mahoes","maided","mailing","maines","maired","maizes","makers","makeups","mako","makos","male","maleos","males","maliing","maling","mall","malling","malls","malsing","malting","mameys","mandaed","manded","mane","maneds","manes","manied","manies","mankies","manned","mansed","manxed","manxes","maples","mapling","mare","mares","marges","maries","markeds","markers","markets","marling","mart","martes","masers","mases","maskeds","maskers","mass","massed","masseds","masses","masting","mate","mateds","maters","mates","mateys","mattes","mauling","maunded","maxes","maybes","maze","mazeds","mazers","mazes","mazies","mealies","mean","means","meating","mediaed","mediated","medicied","meeting","meined","meining","melees","melias","melics","melting","mend","mended","mends","mere","merelies","merely","merited","mesaing","meshing","mesning","messes","messing","meting","metrifies","metrify","mick","micks","mike","mikes","milling","mind","minded","minified","minifies","minkes","mire","mired","mires","miried","miries","miroed","mising","misses","misting","mitred","mitres","mlsing","mocked","models","modems","modes","modest","modifieded","modifiered","modifiers","modished","modishes","modisted","modistes","modses","mogens","mohaves","mohses","moired","mojave","mojaves","mold","molds","mole","moles","molest","molles","mollified","mollifies","molling","molvas","mommies","monded","mondes","monels","moneys","monked","monses","montan","montanning","montans","montes","mooched","mooches","mooching","mooded","mooned","moored","moosed","mooses","mooted","mope","mopeds","mopes","more","morels","mores","morses","mortified","mortifies","moses","moseys","moshes","mosting","mote","motels","motes","motets","motiffed","motive","motives","moue","moues","moulds","mountain","mountaining","mountains","mousing","mouthed","mouthing","moveds","movie","movies","moxies","mpsing","mrsing","msbing","mscing","mses","msging","mshing","msing","muanged","muched","muches","muching","muling","mull","mullas","mulling","mulls","mullus","muming","musaing","musding","musers","muses","mushes","mushing","musing","musings","musking","mussing","muting","mutually","myalling","myalls","myopes","nadded","nailing","naives","nakeds","nalline","nanaed","nanced","nand","nanded","nandued","nanned","narded","nashes","nasuses","nauched","nauches","nauching","nave","neating","nemine","nemined","nemines","nemining","nerves","nervies","nesses","nessing","nest","nesting","nestings","nestling","nests","netting","nevers","newlies","newting","nexted","nexting","nick","nicks","nigger","niggers","nilling","nisied","nisting","nitred","nitres","niveas","nivose","nivoses","nocked","node","noired","noires","nolling","nonuple","nonuples","nooked","nookied","nooksed","nooned","noosed","nosing","notched","notches","notching","notified","notifies","nouses","nousing","nsaing","nscing","nsfing","nsuing","nswing","nuding","nuited","nuking","null","nulling","nulls","nuns","nurses","nursing","nutses","nutsing","nuxing","oakens","oasing","oasises","oasting","oatses","obtain","obtaining","obtains","occluded","oceans","ochers","octalling","octuple","octuples","odisted","ogives","oilies","oising","olds","olefine","olefined","olefines","olefining","oleins","olive","olives","onlies","onto","onuses","opalling","opiated","oppose","opposes","opulus","opuses","oralling","orange","oranged","oranges","oses","osing","otuses","ouring","ousels","outclass","outclasses","outclassing","outdated","outing","outrigger","outriggers","ovalling","over","overs","overts","pacoses","pacs","pact","padded","padres","pads","paduses","paeans","pageant","pageses","paided","pailing","painses","paired","paks","palases","paliing","paling","palling","pallying","palming","palmses","paloing","pals","palsies","pandaed","pander","pangses","panned","pans","pansies","pant","panted","pantses","paps","para","parang","pare","parental","parented","parents","parers","pareve","pari","paries","paring","parises","parity","park","parr","parsec","parsecs","parsed","parsee","parsees","parser","parsers","parses","parted","parti","partis","partly","parts","partses","party","paruses","parvenu","parves","pasches","paso","pasoed","pasos","pasques","passages","passed","passeds","passee","passeed","passees","passel","passels","passer","passers","passims","passives","passkey","passkeys","passu","passued","passus","pasted","pasteds","pastel","pastels","paster","pasters","pastes","pasties","pasting","pastises","pasts","patases","patens","patent","patents","patient","pats","patsies","pauling","paulis","paused","pauses","pausing","pave","pavises","pawling","paws","payees","payment","pays","pbsing","peaked","pean","peans","peated","peating","pecans","pecses","pekans","pelling","pelting","pent","penting","percent","pere","pert","perting","perves","pesoing","pessed","pessing","pest","pesting","pestis","pestling","pestoing","pestos","pests","petited","petrifies","petrify","petting","phaged","pharos","pholis","phsing","pick","picks","piered","pigses","pill","pilling","pills","pinses","pinto","pintos","pisces","piss","pissed","pisseds","pisser","pissers","pisses","pistes","pisting","pith","pitses","plaided","planaed","planked","planned","planted","plashes","plated","pleads","pleats","plover","plovers","pmsing","poached","poaches","poaching","pocked","poises","pokers","polers","polies","poll","polling","pollos","polls","pommies","ponded","ponses","pooched","pooches","pooching","pooded","poofed","pooled","pooned","pooped","poored","pooved","pooves","porched","porches","porching","porked","port","portent","posers","poshes","posies","posing","posits","possed","posses","possess","posset","possets","postes","posting","potent","pouch","pouched","pouches","pouching","powers","praises","pranged","prat","prated","preference","preferences","prelims","premies","preses","presses","prexies","pricks","prigged","prises","prom","proses","proves","prunes","prunos","prunus","psaing","psas","pses","psiing","psing","pucing","puking","pula","pulas","pule","pules","puling","pullers","pullets","pulleys","pulling","pulp","pulps","pulsing","puns","pupals","pupated","pupils","pure","purelies","purely","purifies","purify","puring","purl","purls","pursing","puses","pushing","puss","pussed","pusses","pussies","pussing","pyrene","qianged","quaing","quakes","quares","quells","questing","quests","quicks","quiing","quilt","quired","quited","quoing","quolls","rabies","racies","radded","raided","railing","raises","rake","rakes","raling","rallies","rallying","ramies","ranaed","rand","randed","randied","raneed","ranges","ranied","ranked","ranted","rarelies","rarely","rarifies","rarify","rashes","rasing","rassed","rave","ravers","readies","realines","realise","realises","realizes","reallies","really","realties","realty","reaves","rebuild","rebuilds","reburies","recall","recalling","recalls","recces","reccies","recipes","recited","recites","reclines","recode","recommits","recover","recovers","redefine","redefined","redefines","redefining","redlines","reedies","reefies","reeves","referee","referees","referenceds","referent","refine","refined","refiners","refines","refining","refinings","refits","regias","regimes","regius","reined","reining","reited","reiting","rejigs","relaces","relates","relaxes","relay","relics","relict","relicts","relied","relief","reliefs","relieve","relieves","relievo","relievos","relines","relining","relish","relishes","relived","relives","remake","remakes","remise","remises","remiss","remits","remove","removes","rend","rended","rends","renins","renises","rent","rentes","renting","repands","repens","repents","repine","repined","repining","replay","replied","replies","reply","repose","reposes","requiems","requireds","requite","requites","requote","requotes","reruns","resets","reshes","reshing","reside","resides","resids","resiles","resins","resizes","respire","respires","ressing","rest","resting","restings","rests","retied","reties","reting","retire","retouch","retouched","retouches","retouching","retries","retting","reusing","reverence","reverences","revers","review","reviews","reviles","revise","revises","revive","revoke","revokes","revues","rewire","rewired","rhuses","rick","ricks","rigged","riggeds","rigger","riggers","rilling","rimies","rind","rinded","ringer","ringers","ringside","rising","risses","rive","rives","rivets","roached","roaches","roaching","rocked","rogers","roilies","rolling","rons","rooded","roofed","rooked","rookied","roomed","rooted","ropers","ropies","rosies","rosing","rouble","roubles","roughed","roughing","rounds","rouses","rousing","rove","rover","rovers","roves","rowers","rubens","rubies","rubing","rubins","rubs","rudelies","rudely","ruding","rues","rugger","ruggers","rugs","ruins","rulied","rulies","ruling","ruly","rumens","rums","rune","runes","rung","rungs","runics","runing","runt","runts","runups","ruses","rushes","rushing","rusing","rusking","russing","ruts","saales","saaling","saames","sabling","sabres","sadded","saided","sailing","saints","saises","sake","sakes","salals","saling","salking","salling","sallying","salols","salping","salting","salving","sand","sanded","sander","sandied","sandsed","sanned","sansed","sanses","sapling","sarded","sarees","sashes","sass","sassed","sasses","sassies","sats","saurel","save","savers","scalding","scalds","scaling","scalping","scalps","scalying","scapes","scarce","scarces","scare","scareds","scarers","scares","scarfs","scaries","scarps","scends","schick","schicks","scired","scoked","scolds","scorer","scorers","scores","scoter","scoters","scruple","scruples","sculling","seaport","seaporting","seaports","seareds","seases","seating","seaxes","secluded","secting","secure","sedans","seined","seines","seining","selling","semited","send","sended","sends","sent","senting","septing","sequine","sequines","serifs","serined","serining","serves","sesses","sessing","sets","setting","severs","sexies","sexpot","sexpots","sexpotting","sexted","sexting","shabus","shade","shadeds","shades","shadies","shafts","shagged","shake","shakens","shakers","shakes","shakies","shakos","shale","shales","shame","shameds","shames","shamus","shanged","shanked","shanks","shanned","shape","shapeds","shapers","shapes","shard","shards","shareds","sharers","shareses","sharias","shark","sharks","sharons","sharp","sharpens","sharpers","sharpie","sharpies","sharps","shart","sharts","shaveds","shavens","shavers","shaves","shawls","shawms","sheareds","shearers","shearses","sheers","sheiks","sherds","shines","shinto","shire","shires","shirks","shirrs","shited","shnooked","shocked","shocks","shoeds","shooed","shooked","shooted","shore","shoreas","shores","shorns","shorts","shotes","shover","shovers","shreds","shrews","shrive","shrives","shucks","sibs","sick","sicks","sics","sids","sieves","sifts","sights","silling","silts","sind","sinded","sing","sins","sips","sirced","sired","sirens","sires","sirred","sirs","sising","siss","sisses","sitars","site","sites","sitkas","sittas","situ","situs","sitz","sitzes","sixths","skates","skinks","skints","skirts","skits","skives","skulls","slander","slanted","slates","slices","slicks","slides","slimes","slits","slivers","slouch","slouched","slouches","slouching","slsing","smalling","smalls","smarms","smarts","smited","smites","smiths","smoked","snare","snarers","snares","snarfs","snarls","sneaked","snicks","snigger","sniggers","snits","snooked","snores","soaked","sobers","socked","solare","solares","sold","solds","solids","solling","solver","solvers","solves","sooned","sooted","sore","sorelies","sorely","sots","souchong","soughed","soughing","souked","soupies","source","soured","souses","sousing","southed","southing","sowers","spaces","spades","spalling","spanged","spare","sparers","spares","sparge","sparges","sparks","spasms","spated","spates","spazes","speaked","specks","spells","sphere","spheres","spicks","spills","spinto","spired","spirts","spited","spites","spits","splits","spoked","spooked","spores","sprigger","spriggers","sprits","spurge","squally","squares","squires","ssaing","sses","ssing","ssping","sssing","sswing","stages","stales","stalling","stalls","standed","stands","stapes","stare","starers","stares","starets","starks","starses","starts","starve","starves","states","staves","steads","steaked","steeds","stenting","stetting","sticks","stilts","stints","stoked","stores","stover","stovers","stoves","streaked","stringer","stringers","strive","strives","suaves","subclassed","suched","suches","suching","sucre","sucred","sudated","sudses","sudsing","suer","suered","sues","suiing","suing","suited","suites","suits","sullas","summits","sundated","sunglass","sunglasses","sunglassing","suns","superclassed","supergrass","supergrasses","sura","suraed","surd","surded","sured","surelies","sures","surety","surf","surfed","surfer","surge","surged","surges","suring","surrey","survey","suses","sussing","suture","swages","swales","swards","swarms","swarts","sweared","sweated","swerve","swifts","swined","swiped","swirled","switch","taaling","tabling","tabses","tached","taches","taching","tacting","tadded","taeling","tagger","taggers","tailing","take","takens","takers","takes","talaing","talcing","talent","taling","talking","tall","talling","tallis","talls","tallying","tandem","tanked","tanned","taoses","tapses","tart","tarting","tasking","tassed","tassel","tassels","tasses","tasset","tassets","tassing","tasting","tastings","tastying","tatting","tauting","tawses","tdting","teached","teaches","teaching","teaing","teaked","teaking","tealed","tealing","teamed","teaming","teared","tearing","teased","teases","teasing","teasling","teat","teated","teating","teats","tebets","teccing","teched","teches","tectaing","tectas","tedding","teds","teed","teeing","teeming","teened","teening","teething","teeths","teffing","tegging","teiids","tejuing","tellies","temming","temping","tempting","tempts","tenched","tenches","tenching","tendeds","tenders","tendons","tenens","tenged","tenges","tenging","tenias","tenned","tenning","tennis","tennos","tenons","tenors","tensed","tenseds","tensing","tented","tenthing","tenting","tentings","tenuis","tepids","teraing","tercing","tereting","terming","terned","terning","terrifies","terrify","terses","tersing","teslaing","teslas","testaing","testas","testating","testeds","testeeing","testees","testers","testes","testied","testify","testily","testinged","testings","testis","testying","tether","tething","tetting","tevets","texans","text","texted","textes","texting","textings","texts","thaned","thanked","thanned","thecas","thefting","thefts","theist","theisting","theists","theres","thesis","thinged","tholed","tholes","thonged","thorough","thoroughs","thought","thrive","thrives","throng","throngs","throughed","throughs","thrush","thuses","ticalling","tick","ticks","tiered","tigers","tilling","tilting","tineds","tinting","tire","tired","tires","tiroed","titred","titres","titting","tnting","toasting","toasts","toeaed","toeses","toesing","togethers","told","tolds","tolling","tommies","tomtits","toneds","toners","tontining","tooled","tooned","tooted","toothed","toothing","tooting","topers","toposes","topple","topples","torch","torched","torches","torching","torting","toshed","toshes","tosked","tosking","tosses","tossing","toters","toting","totting","toucan","toucans","touchers","touchied","touchies","touchinged","touchingly","touchings","touchline","touchy","touchying","tough","toughed","toughens","toughied","toughies","toughing","toughying","touped","toupee","toupeed","touping","toured","touring","tousle","tousled","tousling","touted","towers","transitive","transitived","transitives","transitivity","treaded","treads","treated","treating","treats","treeds","trekked","trend","trends","trenting","tressing","trestling","triage","triaged","tricker","trickers","tricks","triers","trifler","triflers","trigged","trimer","trimers","trimmer","trimmers","tripper","trippers","trited","triting","troched","troches","troching","trough","troughed","troughing","troughs","troves","truced","truces","trucing","trucked","trucking","trudger","trudgers","trulies","trunks","trusting","trusts","truthed","truthing","trysting","trysts","tsetse","tsetsing","tubing","tucked","tucking","tufting","tugger","tuggers","tuling","tulles","tulling","tumses","tumsing","tuning","tuns","turing","tushed","tutting","tuxing","twanged","tweaks","tweeded","tweeds","tweeped","tweeted","tweeting","tweets","tweezed","twelved","twenty","twerked","twerped","twiced","twigged","twined","twirled","twirped","twisting","twists","twitch","ufoing","uglies","uhfing","uing","ukases","ukasing","ukes","uking","ulls","ulting","umaing","umping","unchanged","unclouded","uncouple","uncouples","uncover","uncovers","undated","undateds","undefined","unding","unedited","unhooked","uniated","uning","united","unkind","unlive","unlives","unmake","unmakes","unmated","unmodified","unqing","unsated","unsees","unsung","unsure","untouched","unusually","unwired","unyoke","unyokes","upbeated","upcasted","update","updates","updrafted","uphold","upholds","uping","upland","uplanded","upsets","upside","uptaked","upvoted","urated","urging","urling","urning","urns","ursine","uruses","usages","usaging","usaing","usas","usbegs","usbeks","uscbing","usdaed","usdaing","used","useds","user","users","ushers","usinged","usings","usmcing","usneas","usning","usns","usps","uspses","uspsing","usss","usssing","usualed","usuals","usurer","utaing","utcing","utes","uting","utning","uubing","uuhing","uuping","uuqing","uuting","uving","uziing","valiing","valing","valling","valses","valsing","valuing","valving","vandaed","vanned","varment","vasing","vassed","vasting","vedisted","vegans","veined","veines","veining","vend","vended","vends","vent","venting","verbified","verbifies","verbify","veridis","veridises","veried","verified","verifieds","verifier","verifiers","verited","veritied","verities","verity","versified","versifier","versifiers","versifies","versify","versting","versts","verting","verves","vest","vesting","vests","vetting","vianded","vilifies","vilify","vinifies","vinify","virens","vireos","vising","visits","visually","vitrifies","vitrify","vive","vives","vivifies","vivify","vivred","vocalling","vomers","vomits","voters","vouch","vouched","voucheed","vouchees","vouchers","vouches","vouching","vowers","wadded","wadses","waifed","wailed","wailing","wained","waived","waives","wake","wakens","wakers","wakes","waling","walking","wall","walling","wallings","walls","wallying","wand","wanded","wander","wanked","wanned","want","wanted","ware","wared","waried","warmed","warned","warped","warred","warsed","warses","wart","warted","washes","wassed","wastes","wasting","watses","wauling","wave","wavers","wawling","wayses","wbsing","weaked","weaken","wealed","wean","weaned","weans","wearer","weaved","weeked","weft","wefting","weirded","weired","wekaed","welling","welt","welting","wended","wends","wens","weres","westing","wests","wetting","whacks","whales","whanged","wharfs","whelks","whiled","whined","whirled","whirred","whists","whites","whits","wholed","wholes","whooped","whored","whores","wick","wicked","wicks","wided","width","widths","wifed","wified","wigged","wilded","wiled","wilied","wilies","willed","willing","wilted","wimped","winced","wind","wined","winged","winied","winked","winned","winoed","wiped","wipeds","wireds","wirer","wiried","wised","wisent","wish","wished","wising","wisped","witch","withal","withe","wither","withes","within","withs","withy","witsed","witted","wive","wived","wives","wizzed","wlanned","wokked","wold","wolds","wonked","wont","wooded","wooers","woofed","wooled","worded","worlds","wormed","worned","worsed","worted","woulds","wove","woves","wraith","wrasses","wreaked","wrecks","wresting","wrests","wricks","wried","wriggler","wrigglers","wringer","wringers","writhe","wswing","wussing","wyrded","xmases","yanaed","yanked","yarded","yawling","yawses","yearns","yeasting","yeasts","yelling","yessing","yetting","yolked","yorked","youthed","youthing","yuling","yuses","yussing","zaired","zaires","zanied","zend","zended","zends","zest","zesting","zests","zestying","zeuses","zeusing","zhuanged","zilling","zonked","zoomed","zooted"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/router/call-validator.mjs — pure registry validators shared by the
|
|
1
|
+
// src/domain/router/call-validator.mjs — pure registry validators shared by the
|
|
2
2
|
// product router (resolver / guardrail / goal-reasoner) + the bench grader
|
|
3
3
|
// (agentbench/grade.mjs re-exports these). Depends ONLY on registry.mjs — no
|
|
4
4
|
// bench code — so the product←bench dependency stays inverted: the bench
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/router/drive.mjs — the product-facing drive of the capability router: the
|
|
1
|
+
// src/domain/router/drive.mjs — the product-facing drive of the capability router: the
|
|
2
2
|
// piece that turns a real English request into a real, executed answer over a
|
|
3
3
|
// real repo graph. registry/resolver/planner/guardrail/goal-reasoner/
|
|
4
4
|
// call-validator are all pure, deterministic decision machinery — this module
|
|
@@ -27,14 +27,10 @@ import { registerTaughtActions } from "./taught.mjs";
|
|
|
27
27
|
import { intersect, fallbackIfEmpty, guardIfEmpty, memberIndividuals, membersReaching, resultSetOf } from "./results.mjs";
|
|
28
28
|
import { resolveObject } from "../ask.mjs";
|
|
29
29
|
import { parseEntities } from "../codegraph.mjs";
|
|
30
|
-
import { dispatchTool } from "../server.mjs";
|
|
31
|
-
import { ToolError } from "../config.mjs";
|
|
32
|
-
import { loadMemory, readFactRows, readRuleRows } from "../memory/core.mjs";
|
|
33
30
|
import {
|
|
34
31
|
compileDomain, stateFromFacts, stateKeyFor, movesFromRules, compileGoal, PlanBudgetError,
|
|
35
32
|
} from "../domain.mjs";
|
|
36
33
|
import { findActionPath } from "../planning.mjs";
|
|
37
|
-
import * as defaultSource from "../source.mjs";
|
|
38
34
|
|
|
39
35
|
export const ROUTER_DRIVER = "resolver-0.8.0";
|
|
40
36
|
export const GOAL_DRIVER = "goal-0.8.1";
|
|
@@ -162,7 +158,7 @@ const WORLD_GOAL_RE = new RegExp(
|
|
|
162
158
|
|
|
163
159
|
/** The taught world-goal lane: recognize "make every disk rest on peg-c",
|
|
164
160
|
* backward-chain the goal predicate to a REGISTERED taught capability record
|
|
165
|
-
* (the record src/router/taught.mjs bridged in is the thing consumed), then
|
|
161
|
+
* (the record src/domain/router/taught.mjs bridged in is the thing consumed), then
|
|
166
162
|
* ground the move sequence by pure simulation over the taught rules
|
|
167
163
|
* (compileDomain + stateFromFacts + compileGoal + findActionPath — all
|
|
168
164
|
* read-only). Returned calls are NEVER dispatched: taught records carry
|
|
@@ -184,7 +180,7 @@ export async function runTaughtPlan(request, tools, ctx) {
|
|
|
184
180
|
if (!tools.includes(cap.name)) {
|
|
185
181
|
return refuse(`selected ${cap.name} but it is not in the declared toolset`, TAUGHT_DRIVER);
|
|
186
182
|
}
|
|
187
|
-
if (!ctx.
|
|
183
|
+
if (!ctx.readTaughtStore) {
|
|
188
184
|
return refuse(`${cap.name} plans over a taught memory store, and this context carries none`, TAUGHT_DRIVER);
|
|
189
185
|
}
|
|
190
186
|
|
|
@@ -192,9 +188,8 @@ export async function runTaughtPlan(request, tools, ctx) {
|
|
|
192
188
|
let state;
|
|
193
189
|
let isGoal;
|
|
194
190
|
try {
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
domain = compileDomain(factRows, readRuleRows(memory));
|
|
191
|
+
const { factRows, ruleRows } = await ctx.readTaughtStore();
|
|
192
|
+
domain = compileDomain(factRows, ruleRows);
|
|
198
193
|
state = stateFromFacts(factRows, domain);
|
|
199
194
|
isGoal = compileGoal([{ universal, term, predicate, object }], domain);
|
|
200
195
|
} catch (e) {
|
|
@@ -253,22 +248,31 @@ export async function runCapabilityPlan(request, tools, ctx) {
|
|
|
253
248
|
}
|
|
254
249
|
|
|
255
250
|
/** Build a real `{ dispatch, resolve, graph, config }` context against a repo's
|
|
256
|
-
* actual code graph — the router's window onto the live tool layer.
|
|
257
|
-
*
|
|
258
|
-
* the
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
-
*
|
|
251
|
+
* actual code graph — the router's window onto the live tool layer. The tool
|
|
252
|
+
* layer itself is INJECTED (this module never imports it): `dispatchTool` runs
|
|
253
|
+
* the calls, `isToolError` tells an honest miss from a crash, `selectTool` is
|
|
254
|
+
* the command register the resolver tries first, and the `loadMemory`/
|
|
255
|
+
* `readFactRows`/`readRuleRows` trio reads the taught store. chat.mjs's
|
|
256
|
+
* capabilityPlanDeps() bundles the live implementations; spread it into this
|
|
257
|
+
* call. `dispatch` computes the structured `result` label-set (results.mjs's
|
|
258
|
+
* resultSetOf) a multi-step plan folds. `resolve` delegates to resolveObject
|
|
259
|
+
* over the SAME parsed graph, so resolve() and dispatch() always agree on
|
|
260
|
+
* what an entity resolves to. Pass an already-parsed `graph` (e.g. a chat
|
|
261
|
+
* session's own) to skip reloading it — mirrors the config ->
|
|
262
|
+
* source.fetchEntities -> parseEntities chain dispatchTool runs internally,
|
|
263
|
+
* so a passed-in graph must come from that same chain to stay consistent.
|
|
265
264
|
*
|
|
266
265
|
* Pass a `memoryDir` to open the taught world-goal lane: the memory store's
|
|
267
266
|
* action families are registered as taught: capability records (idempotent —
|
|
268
267
|
* an already-registered name is skipped) and runTaughtPlan simulates over the
|
|
269
|
-
* same store
|
|
270
|
-
*
|
|
271
|
-
|
|
268
|
+
* same store, re-reading it per request via ctx.readTaughtStore. The new
|
|
269
|
+
* registrations' unregister disposers ride the ctx as `ctx.disposers`; the
|
|
270
|
+
* caller runs them when the ctx is done. */
|
|
271
|
+
export async function buildCapabilityPlanCtx({
|
|
272
|
+
config, source, tel = null, graph = null, memoryDir = null,
|
|
273
|
+
dispatchTool, isToolError = () => false, selectTool = null,
|
|
274
|
+
loadMemory = null, readFactRows = null, readRuleRows = null,
|
|
275
|
+
} = {}) {
|
|
272
276
|
const g = graph || parseEntities(await source.fetchEntities(config));
|
|
273
277
|
const resolve = (term) => resolveObject(g, term);
|
|
274
278
|
const dispatch = async (name, input) => {
|
|
@@ -279,14 +283,19 @@ export async function buildCapabilityPlanCtx({ config, source = defaultSource, t
|
|
|
279
283
|
const result = resultSetOf(g, name, input, resolved);
|
|
280
284
|
return { ok: true, text, resolved, result };
|
|
281
285
|
} catch (e) {
|
|
282
|
-
if (e
|
|
286
|
+
if (isToolError(e)) return { ok: false, error: e.message };
|
|
283
287
|
throw e;
|
|
284
288
|
}
|
|
285
289
|
};
|
|
286
290
|
const ctx = { dispatch, resolve, graph: g, config };
|
|
287
|
-
if (
|
|
291
|
+
if (selectTool) ctx.selectTool = selectTool;
|
|
292
|
+
if (memoryDir && loadMemory) {
|
|
288
293
|
ctx.memoryDir = memoryDir;
|
|
289
|
-
ctx.
|
|
294
|
+
ctx.readTaughtStore = async () => {
|
|
295
|
+
const memory = await loadMemory(memoryDir);
|
|
296
|
+
return { factRows: readFactRows(memory), ruleRows: readRuleRows(memory) };
|
|
297
|
+
};
|
|
298
|
+
ctx.disposers = registerTaughtActions(readRuleRows(await loadMemory(memoryDir)));
|
|
290
299
|
}
|
|
291
300
|
return ctx;
|
|
292
301
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/router/goal-reasoner.mjs — the closed-world goal-reasoner: a canned,
|
|
1
|
+
// src/domain/router/goal-reasoner.mjs — the closed-world goal-reasoner: a canned,
|
|
2
2
|
// hard-bounded meta-loop (BDI x goal-driven autonomy):
|
|
3
3
|
//
|
|
4
4
|
// deduce current goals -> plan each goal (resolver.mjs's backward chain)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/router/guardrail.mjs — the guardrail. Validate an
|
|
1
|
+
// src/domain/router/guardrail.mjs — the guardrail. Validate an
|
|
2
2
|
// EXTERNALLY-proposed `tool_use` against the registry's declared preconditions.
|
|
3
3
|
//
|
|
4
4
|
// Proves RESOLVABILITY (the tool is registered/declared, args are well-formed, every
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/router/planner.mjs — the planner. Compose a bounded, ordered plan of tool calls for
|
|
1
|
+
// src/domain/router/planner.mjs — the planner. Compose a bounded, ordered plan of tool calls for
|
|
2
2
|
// a multi-step request, over the SAME operators resolver.mjs resolves single-shot. HTN
|
|
3
3
|
// decomposition into leaf sub-goals (each resolved by resolver.mjs),
|
|
4
4
|
// with a POP causal-link proof chain (a threaded step's producer is the prior step; an
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/router/registry.mjs — the capability registry.
|
|
1
|
+
// src/domain/router/registry.mjs — the capability registry.
|
|
2
2
|
//
|
|
3
3
|
// Each tmct tool is modelled as a STRIPS/PDDL operator declared as DATA: a `Capability` with
|
|
4
4
|
// typed `Parameter`s, `Precondition`s, and `Effect`s (add-list/delete-list). Preconditions are
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// a goal to a capability whose add-list achieves it.
|
|
7
7
|
//
|
|
8
8
|
// Plain data + pure accessors, no I/O. Tool names + parameter arg keys are the
|
|
9
|
-
// exact ones src/server.mjs `dispatchTool` reads, so a bound call this registry validates is
|
|
9
|
+
// exact ones src/tools/server.mjs `dispatchTool` reads, so a bound call this registry validates is
|
|
10
10
|
// directly dispatchable.
|
|
11
11
|
|
|
12
12
|
export const PREFIXES = Object.freeze({
|
|
@@ -44,7 +44,7 @@ export const PRECOND = Object.freeze({
|
|
|
44
44
|
|
|
45
45
|
// ---- capability builder (returns PLAIN FROZEN data) -------------------------
|
|
46
46
|
|
|
47
|
-
/** A parameter slot. `arg` is the exact key src/server.mjs `dispatchTool` reads. */
|
|
47
|
+
/** A parameter slot. `arg` is the exact key src/tools/server.mjs `dispatchTool` reads. */
|
|
48
48
|
const param = (name, kind, { arg = name, required = true, note = "" } = {}) =>
|
|
49
49
|
Object.freeze({ type: VOCAB.Parameter, name, kind, arg, required, note });
|
|
50
50
|
|
|
@@ -76,7 +76,7 @@ function capability({ name, label, question, params = [], preconditions = [], ad
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
// ---- the declared capabilities -----------------------------------------------
|
|
79
|
-
// Arg keys verified against src/server.mjs `dispatchTool`'s switch: describe/callers/
|
|
79
|
+
// Arg keys verified against src/tools/server.mjs `dispatchTool`'s switch: describe/callers/
|
|
80
80
|
// callees/tests/history/… take `symbol`; impact/exports take `module`; members/
|
|
81
81
|
// subclasses take `class`; search takes `query` (+ optional kind/name/decorator);
|
|
82
82
|
// architecture takes an optional `package`; untested takes nothing.
|
|
@@ -196,7 +196,7 @@ function deepFreeze(value) {
|
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
/** Register a capability at runtime (e.g. a taught action family bridged in by
|
|
199
|
-
* src/router/taught.mjs). `readOnly` must be an explicit boolean; a
|
|
199
|
+
* src/domain/router/taught.mjs). `readOnly` must be an explicit boolean; a
|
|
200
200
|
* `readOnly: false` record is forced `dispatchable: false` — the guardrail's
|
|
201
201
|
* candidate enrichment re-dispatches a tool once per tied candidate, which is
|
|
202
202
|
* only safe when dispatch performs no writes. Returns an `unregister()`
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
// src/router/resolver.mjs — the resolver. Turn a request
|
|
1
|
+
// src/domain/router/resolver.mjs — the resolver. Turn a request
|
|
2
2
|
// into a SELECTED registry capability with bound arguments, by backward chaining over
|
|
3
3
|
// capabilities-as-facts. Deterministic, no-LLM, glass-box: every choice is provable.
|
|
4
4
|
//
|
|
5
5
|
// A request becomes an epistemic GOAL `(knows <topic> ?of)`; backward chaining finds the
|
|
6
6
|
// capability whose add-effect achieves it and binds `?of` to the request's object term.
|
|
7
7
|
// Three fact sources feed the same backward-chaining step, tried in order: the command
|
|
8
|
-
// register (
|
|
9
|
-
// can mis-parse through the NL grammar), the NL parse (ask.mjs's relational
|
|
10
|
-
// NL_INTENTS), and imperative intent FRAMES (curated phrasings the relational
|
|
11
|
-
// doesn't carry, and a rescue path when the NL parse selects an out-of-set
|
|
8
|
+
// register (the ctx-injected selectTool — terse verbs, ground truth, tried first since a
|
|
9
|
+
// terse command can mis-parse through the NL grammar), the NL parse (ask.mjs's relational
|
|
10
|
+
// grammar, via NL_INTENTS), and imperative intent FRAMES (curated phrasings the relational
|
|
11
|
+
// grammar doesn't carry, and a rescue path when the NL parse selects an out-of-set
|
|
12
|
+
// capability).
|
|
12
13
|
//
|
|
13
14
|
// Entity binding is delegated to `resolveObject` (ask.mjs); an ambiguous or no-match term
|
|
14
15
|
// is an honest refuse, never a guess.
|
|
15
16
|
|
|
16
17
|
import { parseQuery } from "../ask.mjs";
|
|
17
|
-
import { selectTool } from "../server-http.mjs";
|
|
18
18
|
import { SUPERLATIVE_EXTREMES } from "../ask-vocab.mjs";
|
|
19
19
|
import {
|
|
20
20
|
capabilities, capabilityByName, preconditionsOf, effectsOf, PRECOND,
|
|
@@ -97,7 +97,7 @@ export function backwardChain(topic) {
|
|
|
97
97
|
/** Backward-chain a WORLD goal — a state predicate like "rest-on" that a
|
|
98
98
|
* taught action's effect establishes — to the registered record whose
|
|
99
99
|
* add-list carries the matching taught:world-effect (the bridge
|
|
100
|
-
* src/router/taught.mjs registers). Pure over the registry; null when no
|
|
100
|
+
* src/domain/router/taught.mjs registers). Pure over the registry; null when no
|
|
101
101
|
* taught record achieves the predicate. The sibling of backwardChain above,
|
|
102
102
|
* which only ever matches epistemic `knows` effects. */
|
|
103
103
|
export function backwardChainWorld(predicate) {
|
|
@@ -181,11 +181,14 @@ export function mapFrame(request) {
|
|
|
181
181
|
return null;
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
-
/** The command register (
|
|
185
|
-
* Returns { name, input, source:"command",
|
|
186
|
-
* arg from the terse command; we re-clean
|
|
187
|
-
* stray "for"). Never reaches outside
|
|
188
|
-
|
|
184
|
+
/** The command register (an injected selectTool — chat.mjs's, in the live
|
|
185
|
+
* wiring) filtered to the registry. Returns { name, input, source:"command",
|
|
186
|
+
* why } or null. selectTool binds the arg from the terse command; we re-clean
|
|
187
|
+
* a search query (its raw join keeps a stray "for"). Never reaches outside
|
|
188
|
+
* the declared set. A caller with no command register passes none and the
|
|
189
|
+
* lane stays silent. */
|
|
190
|
+
export function commandCapability(request, declaredNames, selectTool) {
|
|
191
|
+
if (typeof selectTool !== "function") return null;
|
|
189
192
|
const sel = selectTool(request, new Set(declaredNames));
|
|
190
193
|
if (!sel || !capabilityByName(sel.name)) return null;
|
|
191
194
|
const input = { ...sel.input };
|
|
@@ -234,7 +237,7 @@ export async function resolveOne(request, declaredNames, ctx, { execute = true }
|
|
|
234
237
|
|
|
235
238
|
// An NL-parse refusal is not terminal: an imperative FRAME may still hit, so we fall
|
|
236
239
|
// through and only surface the NL reason if the frame misses too.
|
|
237
|
-
let pick = commandCapability(request, declared);
|
|
240
|
+
let pick = commandCapability(request, declared, ctx && ctx.selectTool);
|
|
238
241
|
let nlRefuse = null;
|
|
239
242
|
let nlUndeclared = null;
|
|
240
243
|
if (!pick) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/router/results.mjs — the RESULT-EXECUTION layer for the capability router.
|
|
1
|
+
// src/domain/router/results.mjs — the RESULT-EXECUTION layer for the capability router.
|
|
2
2
|
//
|
|
3
3
|
// Grading (and the live `tmct plan` surface) needs more than a call PLAN — it
|
|
4
4
|
// needs the executed, COMPOSED answer: an "of the modules impacted by X, which
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/router/set-algebra.mjs — the COMPOSITION OPERATORS: pure set-algebra a
|
|
1
|
+
// src/domain/router/set-algebra.mjs — the COMPOSITION OPERATORS: pure set-algebra a
|
|
2
2
|
// multi-step plan needs to fold its threaded step result-sets into ONE composed
|
|
3
3
|
// answer. Shared by the product router (goal-reasoner's relative-filter fold)
|
|
4
4
|
// and the bench result-execution layer (agentbench/results.mjs re-exports
|
|
@@ -7,15 +7,16 @@
|
|
|
7
7
|
// resolver also never selects them on its own, because it backward-chains over
|
|
8
8
|
// `knows` add-effects and these records carry world-triple effects instead.
|
|
9
9
|
|
|
10
|
-
import { readRuleRows } from "../memory/core.mjs";
|
|
11
10
|
import { capabilityByName, registerCapability } from "./registry.mjs";
|
|
12
11
|
|
|
13
12
|
const ACTION_KINDS = new Set(["action-signature", "action-precond", "action-effect", "action-constraint"]);
|
|
14
13
|
|
|
15
|
-
/** Group
|
|
16
|
-
|
|
14
|
+
/** Group already-read rule rows (memory/core.mjs's readRuleRows output — the
|
|
15
|
+
* caller reads the store; this bridge never does) into action families by
|
|
16
|
+
* rule name. */
|
|
17
|
+
export function actionFamilies(ruleRows) {
|
|
17
18
|
const families = new Map();
|
|
18
|
-
for (const row of
|
|
19
|
+
for (const row of ruleRows || []) {
|
|
19
20
|
if (!ACTION_KINDS.has(row.kind)) continue;
|
|
20
21
|
if (!families.has(row.name)) families.set(row.name, []);
|
|
21
22
|
families.get(row.name).push(row);
|
|
@@ -71,12 +72,12 @@ export function capabilityFromActionRules(name, family) {
|
|
|
71
72
|
};
|
|
72
73
|
}
|
|
73
74
|
|
|
74
|
-
/** Register every taught action family in
|
|
75
|
-
* is already registered is skipped). Returns the
|
|
76
|
-
* unregister disposers. */
|
|
77
|
-
export function registerTaughtActions(
|
|
75
|
+
/** Register every taught action family found in the given rule rows,
|
|
76
|
+
* idempotently (a name that is already registered is skipped). Returns the
|
|
77
|
+
* new registrations' unregister disposers. */
|
|
78
|
+
export function registerTaughtActions(ruleRows) {
|
|
78
79
|
const disposers = [];
|
|
79
|
-
for (const [name, family] of actionFamilies(
|
|
80
|
+
for (const [name, family] of actionFamilies(ruleRows)) {
|
|
80
81
|
if (capabilityByName(`taught:${name}`)) continue;
|
|
81
82
|
disposers.push(registerCapability(capabilityFromActionRules(name, family)));
|
|
82
83
|
}
|