@polycode-projects/the-mechanical-code-talker 3.0.5 → 3.0.7
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 +41 -16
- package/bin/tmct.mjs +1 -1
- package/corpus/child/README.md +2 -2
- package/corpus/child/index.json.gz +0 -0
- package/corpus/child/manifest.json +74 -74
- package/corpus/child/shards/child-00.jsonl.gz +0 -0
- package/corpus/child/shards/child-01.jsonl.gz +0 -0
- package/corpus/child/shards/child-02.jsonl.gz +0 -0
- package/corpus/child/shards/child-03.jsonl.gz +0 -0
- package/corpus/child/shards/child-04.jsonl.gz +0 -0
- package/corpus/child/shards/child-05.jsonl.gz +0 -0
- package/corpus/child/shards/child-06.jsonl.gz +0 -0
- package/corpus/child/shards/child-07.jsonl.gz +0 -0
- package/corpus/child/shards/child-08.jsonl.gz +0 -0
- package/corpus/child/shards/child-09.jsonl.gz +0 -0
- package/corpus/child/shards/child-0a.jsonl.gz +0 -0
- package/corpus/child/shards/child-0b.jsonl.gz +0 -0
- package/corpus/child/shards/child-0c.jsonl.gz +0 -0
- package/corpus/child/shards/child-0d.jsonl.gz +0 -0
- package/corpus/child/shards/child-0e.jsonl.gz +0 -0
- package/corpus/child/shards/child-0f.jsonl.gz +0 -0
- package/corpus/child/shards/child-10.jsonl.gz +0 -0
- package/corpus/child/shards/child-11.jsonl.gz +0 -0
- package/corpus/child/shards/child-12.jsonl.gz +0 -0
- package/corpus/child/shards/child-13.jsonl.gz +0 -0
- package/corpus/child/shards/child-14.jsonl.gz +0 -0
- package/corpus/child/shards/child-15.jsonl.gz +0 -0
- package/corpus/child/shards/child-16.jsonl.gz +0 -0
- package/corpus/child/shards/child-17.jsonl.gz +0 -0
- package/corpus/child/shards/child-18.jsonl.gz +0 -0
- package/corpus/child/shards/child-19.jsonl.gz +0 -0
- package/corpus/child/shards/child-1a.jsonl.gz +0 -0
- package/corpus/child/shards/child-1b.jsonl.gz +0 -0
- package/corpus/child/shards/child-1c.jsonl.gz +0 -0
- package/corpus/child/shards/child-1d.jsonl.gz +0 -0
- package/corpus/child/shards/child-1e.jsonl.gz +0 -0
- package/corpus/child/shards/child-1f.jsonl.gz +0 -0
- package/corpus/conceptnet/quality-filter.mjs +28 -4
- package/corpus/tier2/generate.mjs +4 -8
- package/corpus/tier2/human-large.jsonl +0 -2
- package/corpus/tier2/human-medium.jsonl +0 -2
- package/corpus/tier2/manifest.json +6 -6
- package/data/templates/constructions/digest-sentence-structures.toml +146 -1
- package/package.json +18 -15
- package/src/adapters/corpus/digest-bank.mjs +15 -3
- package/src/domain/answer-variants.json +1 -1
- package/src/domain/ask-vocab.mjs +4 -0
- package/src/domain/ask.mjs +101 -12
- package/src/domain/codegraph.mjs +25 -8
- package/src/domain/digest/compose.mjs +142 -10
- package/src/domain/digest/config.json +5 -0
- package/src/domain/digest/structures.mjs +39 -14
- package/src/domain/interpret/normalize.mjs +2 -2
- package/src/domain/reference-pack.mjs +12 -3
- package/src/domain/router/call-validator.mjs +1 -1
- package/src/domain/router/drive.mjs +2 -2
- package/src/domain/router/set-algebra.mjs +1 -1
- package/src/services/adventure.mjs +34 -19
- package/src/services/chat-page-viz.mjs +16 -5
- package/src/services/chat.mjs +290 -88
- package/src/services/extract-facts.mjs +46 -4
- package/src/services/index.mjs +6 -3
- package/src/services/ledger-viz.mjs +1 -1
- package/src/services/research.mjs +80 -3
- package/src/surfaces/web/chat-browser-entry.mjs +23 -3
- package/src/surfaces/web/digest-client.mjs +8 -3
- package/src/surfaces/web/graph-ask-browser-entry.mjs +41 -0
- package/src/surfaces/web/memory-ask-browser.bundle.js +113 -113
|
@@ -719,7 +719,7 @@ export const CORPUSES = {
|
|
|
719
719
|
nouns: [
|
|
720
720
|
// human-core (+186 words: people, family, common roles)
|
|
721
721
|
"draw", "set", "heavy", "stand", "free", "pack", "dead", "pick",
|
|
722
|
-
"double", "
|
|
722
|
+
"double", "cast", "dry", "bank", "stamp", "tender", "fair",
|
|
723
723
|
"active", "regular", "blue", "hack", "band", "brush", "guard", "master",
|
|
724
724
|
"transfer", "firm", "side", "bull", "mate", "rank", "board", "brace",
|
|
725
725
|
"grade", "better", "course", "natural", "butt", "camp", "crop", "date",
|
|
@@ -733,7 +733,7 @@ export const CORPUSES = {
|
|
|
733
733
|
"steady", "stream", "combine", "company", "convert", "general", "moderate", "alternate",
|
|
734
734
|
"ace", "crab", "flop", "fund", "pair", "rake", "rock", "sick",
|
|
735
735
|
"blade", "cheat", "sport", "caller", "column", "couple", "divine", "pledge",
|
|
736
|
-
"
|
|
736
|
+
"sponge", "system", "wanton", "sleeper", "business", "associate", "instrument",
|
|
737
737
|
"substitute", "gun", "sum", "alto", "best", "buff", "dear", "mass",
|
|
738
738
|
"cream", "creep", "giant", "labor", "pilot", "sneak", "stack", "staff",
|
|
739
739
|
"world", "gutter", "jumper", "labour", "lather", "picket", "reader", "savage",
|
|
@@ -852,7 +852,6 @@ export const CORPUSES = {
|
|
|
852
852
|
["dead", "/r/HasA", "dead person"],
|
|
853
853
|
["pick", "/r/IsA", "elite"],
|
|
854
854
|
["double", "/r/IsA", "actor"],
|
|
855
|
-
["straight", "/r/IsA", "person"],
|
|
856
855
|
["cast", "/r/IsA", "gathering"],
|
|
857
856
|
["dry", "/r/IsA", "reformer"],
|
|
858
857
|
["bank", "/r/IsA", "financial institution"],
|
|
@@ -968,7 +967,6 @@ export const CORPUSES = {
|
|
|
968
967
|
["couple", "/r/IsA", "pair"],
|
|
969
968
|
["divine", "/r/IsA", "reverend"],
|
|
970
969
|
["pledge", "/r/IsA", "member"],
|
|
971
|
-
["simple", "/r/IsA", "person"],
|
|
972
970
|
["sponge", "/r/IsA", "learner"],
|
|
973
971
|
["system", "/r/IsA", "group"],
|
|
974
972
|
["system", "/r/HasA", "hierarchy"],
|
|
@@ -1845,7 +1843,7 @@ export const CORPUSES = {
|
|
|
1845
1843
|
"ideal", "noble", "octet", "quack", "saint", "scrag", "shark", "shoal",
|
|
1846
1844
|
"silly", "skunk", "super", "witch", "zombi", "agency", "anchor", "backup",
|
|
1847
1845
|
"batter", "buster", "canary", "circus", "dealer", "domain", "doomed", "genius",
|
|
1848
|
-
"gossip", "herald", "hoodoo", "hopper", "
|
|
1846
|
+
"gossip", "herald", "hoodoo", "hopper", "jockey", "legion", "member",
|
|
1849
1847
|
"nature", "orphan", "parade", "peanut", "pillar", "pirate", "player", "porter",
|
|
1850
1848
|
"pusher", "putter", "senior", "septet", "sestet", "sextet", "surety", "tapper",
|
|
1851
1849
|
"tiller", "zombie", "adjunct", "butcher", "captive", "cascade", "chapter", "charity",
|
|
@@ -1884,7 +1882,7 @@ export const CORPUSES = {
|
|
|
1884
1882
|
"canvasser", "cockscomb", "collector", "comforter", "commander", "companion", "conductor", "crossover",
|
|
1885
1883
|
"eccentric", "executive", "fledgling", "franchise", "freelance", "incumbent", "mercenary", "moderator",
|
|
1886
1884
|
"neighbour", "newspaper", "patriarch", "patrician", "portfolio", "quartette", "quintette", "repertory",
|
|
1887
|
-
"secretary", "segregate", "spearhead", "
|
|
1885
|
+
"secretary", "segregate", "spearhead", "summation", "transient", "trumpeter", "voluntary",
|
|
1888
1886
|
"absolutism", "anthropoid", "apparition", "assemblage", "collective", "contractor", "delinquent", "episcopate",
|
|
1889
1887
|
"exaltation", "exposition", "illiterate", "judicature", "leadership", "lieutenant", "minimalist", "percussion",
|
|
1890
1888
|
"profligate", "provincial", "rendezvous", "brotherhood", "determinant", "distributor", "interpreter", "stipendiary",
|
|
@@ -3267,7 +3265,6 @@ export const CORPUSES = {
|
|
|
3267
3265
|
["hoodoo", "/r/IsA", "priest"],
|
|
3268
3266
|
["priest", "/r/IsA", "spiritual leader"],
|
|
3269
3267
|
["hopper", "/r/IsA", "jumper"],
|
|
3270
|
-
["immune", "/r/IsA", "person"],
|
|
3271
3268
|
["jockey", "/r/IsA", "equestrian"],
|
|
3272
3269
|
["legion", "/r/IsA", "military unit"],
|
|
3273
3270
|
["legion", "/r/HasA", "legionnaire"],
|
|
@@ -3755,7 +3752,6 @@ export const CORPUSES = {
|
|
|
3755
3752
|
["friend", "/r/IsA", "actor"],
|
|
3756
3753
|
["segregate", "/r/IsA", "actor"],
|
|
3757
3754
|
["spearhead", "/r/IsA", "leader"],
|
|
3758
|
-
["stigmatic", "/r/IsA", "person"],
|
|
3759
3755
|
["summation", "/r/IsA", "collection"],
|
|
3760
3756
|
["transient", "/r/IsA", "traveler"],
|
|
3761
3757
|
["trumpeter", "/r/IsA", "messenger"],
|
|
@@ -438,7 +438,6 @@
|
|
|
438
438
|
{"start":"/c/en/hoodoo","rel":"/r/IsA","end":"/c/en/priest","weight":1,"surfaceText":"[[hoodoo]] IsA [[priest]]"}
|
|
439
439
|
{"start":"/c/en/priest","rel":"/r/IsA","end":"/c/en/spiritual leader","weight":1,"surfaceText":"[[priest]] IsA [[spiritual leader]]"}
|
|
440
440
|
{"start":"/c/en/hopper","rel":"/r/IsA","end":"/c/en/jumper","weight":1,"surfaceText":"[[hopper]] IsA [[jumper]]"}
|
|
441
|
-
{"start":"/c/en/immune","rel":"/r/IsA","end":"/c/en/person","weight":1,"surfaceText":"[[immune]] IsA [[person]]"}
|
|
442
441
|
{"start":"/c/en/jockey","rel":"/r/IsA","end":"/c/en/equestrian","weight":1,"surfaceText":"[[jockey]] IsA [[equestrian]]"}
|
|
443
442
|
{"start":"/c/en/legion","rel":"/r/IsA","end":"/c/en/military unit","weight":1,"surfaceText":"[[legion]] IsA [[military unit]]"}
|
|
444
443
|
{"start":"/c/en/legion","rel":"/r/HasA","end":"/c/en/legionnaire","weight":1,"surfaceText":"[[legion]] HasA [[legionnaire]]"}
|
|
@@ -926,7 +925,6 @@
|
|
|
926
925
|
{"start":"/c/en/friend","rel":"/r/IsA","end":"/c/en/actor","weight":1,"surfaceText":"[[friend]] IsA [[actor]]"}
|
|
927
926
|
{"start":"/c/en/segregate","rel":"/r/IsA","end":"/c/en/actor","weight":1,"surfaceText":"[[segregate]] IsA [[actor]]"}
|
|
928
927
|
{"start":"/c/en/spearhead","rel":"/r/IsA","end":"/c/en/leader","weight":1,"surfaceText":"[[spearhead]] IsA [[leader]]"}
|
|
929
|
-
{"start":"/c/en/stigmatic","rel":"/r/IsA","end":"/c/en/person","weight":1,"surfaceText":"[[stigmatic]] IsA [[person]]"}
|
|
930
928
|
{"start":"/c/en/summation","rel":"/r/IsA","end":"/c/en/collection","weight":1,"surfaceText":"[[summation]] IsA [[collection]]"}
|
|
931
929
|
{"start":"/c/en/transient","rel":"/r/IsA","end":"/c/en/traveler","weight":1,"surfaceText":"[[transient]] IsA [[traveler]]"}
|
|
932
930
|
{"start":"/c/en/trumpeter","rel":"/r/IsA","end":"/c/en/messenger","weight":1,"surfaceText":"[[trumpeter]] IsA [[messenger]]"}
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
{"start":"/c/en/dead","rel":"/r/HasA","end":"/c/en/dead person","weight":1,"surfaceText":"[[dead]] HasA [[dead person]]"}
|
|
10
10
|
{"start":"/c/en/pick","rel":"/r/IsA","end":"/c/en/elite","weight":1,"surfaceText":"[[pick]] IsA [[elite]]"}
|
|
11
11
|
{"start":"/c/en/double","rel":"/r/IsA","end":"/c/en/actor","weight":1,"surfaceText":"[[double]] IsA [[actor]]"}
|
|
12
|
-
{"start":"/c/en/straight","rel":"/r/IsA","end":"/c/en/person","weight":1,"surfaceText":"[[straight]] IsA [[person]]"}
|
|
13
12
|
{"start":"/c/en/cast","rel":"/r/IsA","end":"/c/en/gathering","weight":1,"surfaceText":"[[cast]] IsA [[gathering]]"}
|
|
14
13
|
{"start":"/c/en/dry","rel":"/r/IsA","end":"/c/en/reformer","weight":1,"surfaceText":"[[dry]] IsA [[reformer]]"}
|
|
15
14
|
{"start":"/c/en/bank","rel":"/r/IsA","end":"/c/en/financial institution","weight":1,"surfaceText":"[[bank]] IsA [[financial institution]]"}
|
|
@@ -125,7 +124,6 @@
|
|
|
125
124
|
{"start":"/c/en/couple","rel":"/r/IsA","end":"/c/en/pair","weight":1,"surfaceText":"[[couple]] IsA [[pair]]"}
|
|
126
125
|
{"start":"/c/en/divine","rel":"/r/IsA","end":"/c/en/reverend","weight":1,"surfaceText":"[[divine]] IsA [[reverend]]"}
|
|
127
126
|
{"start":"/c/en/pledge","rel":"/r/IsA","end":"/c/en/member","weight":1,"surfaceText":"[[pledge]] IsA [[member]]"}
|
|
128
|
-
{"start":"/c/en/simple","rel":"/r/IsA","end":"/c/en/person","weight":1,"surfaceText":"[[simple]] IsA [[person]]"}
|
|
129
127
|
{"start":"/c/en/sponge","rel":"/r/IsA","end":"/c/en/learner","weight":1,"surfaceText":"[[sponge]] IsA [[learner]]"}
|
|
130
128
|
{"start":"/c/en/system","rel":"/r/IsA","end":"/c/en/group","weight":1,"surfaceText":"[[system]] IsA [[group]]"}
|
|
131
129
|
{"start":"/c/en/system","rel":"/r/HasA","end":"/c/en/hierarchy","weight":1,"surfaceText":"[[system]] HasA [[hierarchy]]"}
|
|
@@ -81,9 +81,9 @@
|
|
|
81
81
|
"tool": "corpus/tier2/generate.mjs"
|
|
82
82
|
},
|
|
83
83
|
"file": "human-medium.jsonl",
|
|
84
|
-
"facts":
|
|
85
|
-
"bytes":
|
|
86
|
-
"sha256": "
|
|
84
|
+
"facts": 942,
|
|
85
|
+
"bytes": 110564,
|
|
86
|
+
"sha256": "152df1c9026ace0ecf899e89b23dab77617e97fe0d7fafd50866e26a792f0454",
|
|
87
87
|
"license": "MPL-2.0"
|
|
88
88
|
},
|
|
89
89
|
{
|
|
@@ -95,9 +95,9 @@
|
|
|
95
95
|
"tool": "corpus/tier2/generate.mjs"
|
|
96
96
|
},
|
|
97
97
|
"file": "human-large.jsonl",
|
|
98
|
-
"facts":
|
|
99
|
-
"bytes":
|
|
100
|
-
"sha256": "
|
|
98
|
+
"facts": 11999,
|
|
99
|
+
"bytes": 1464616,
|
|
100
|
+
"sha256": "fbbe8135d4915f2bc041bf577e7b0bd1a8fd1c1bab804c8215b1d05e39db27f9",
|
|
101
101
|
"license": "MPL-2.0"
|
|
102
102
|
}
|
|
103
103
|
],
|
|
@@ -10,19 +10,30 @@
|
|
|
10
10
|
# reads only [[relation]] and [[construction]] tables, so it ignores this file's
|
|
11
11
|
# [[structure]] rows; the digest layer reads them through its own path.
|
|
12
12
|
#
|
|
13
|
-
# Each row is one (family, form) pairing
|
|
13
|
+
# Each row is one wording for a (family, form) pairing. A key may hold several
|
|
14
|
+
# rows: the renderer collects them all and picks one by a deterministic hash of
|
|
15
|
+
# term|family|form|variantSeed, so a key with one wording always renders that
|
|
16
|
+
# wording, while a key with several gives natural variety that stays stable
|
|
17
|
+
# across runs. An exact-string duplicate under a key is folded; a second, truly
|
|
18
|
+
# different wording is kept as another variant.
|
|
14
19
|
# family one of the digest families (isa | location | partOf | capableOf |
|
|
15
20
|
# usedFor) — the closed set stage 1 groups predicates under. Each is
|
|
16
21
|
# verb-coherent: every predicate in it shares this frame's verb.
|
|
17
22
|
# form single — one fact of the family
|
|
18
23
|
# several — two or more facts of the family, merged into one clause
|
|
19
24
|
# chained — one isa fact plus its rendered ancestry chain
|
|
25
|
+
# group — one body sentence of the multi-sentence isa digest: the
|
|
26
|
+
# facts that share an immediate parent class, named together
|
|
27
|
+
# closer — the closing sentence of the multi-sentence isa digest:
|
|
28
|
+
# the highest-level ontology roots the term sits under
|
|
20
29
|
# template the skeleton. Placeholders the renderer fills (words.mjs supplies
|
|
21
30
|
# the article, plural and casing):
|
|
22
31
|
# {TERM} {TERM_CAP} the term, lower / sentence-leading
|
|
23
32
|
# {A_TERM} {A_TERM_CAP} "an aardvark" / "An aardvark"
|
|
24
33
|
# {TERMS} {TERMS_CAP} "aardvarks" / "Aardvarks"
|
|
25
34
|
# {PRONOUN} {PRONOUN_CAP} "it" / "It" (after first mention)
|
|
35
|
+
# {PARENT} {A_PARENT} the shared immediate parent of a group
|
|
36
|
+
# — "mammal" / "a mammal"
|
|
26
37
|
# {OBJECT} the first object, raw
|
|
27
38
|
# {A_OBJECT} "a mammal" (article chosen per word)
|
|
28
39
|
# {OBJECTS_A} "a mammal, a burrowing animal, and …"
|
|
@@ -48,6 +59,50 @@ family = "isa"
|
|
|
48
59
|
form = "chained"
|
|
49
60
|
template = "{A_TERM_CAP} is {CHAIN}."
|
|
50
61
|
|
|
62
|
+
# ---- isa group: one body sentence for facts under a shared parent class -----
|
|
63
|
+
|
|
64
|
+
[[structure]]
|
|
65
|
+
family = "isa"
|
|
66
|
+
form = "group"
|
|
67
|
+
template = "As a kind of {PARENT}, {PRONOUN} is also {OBJECTS_A}."
|
|
68
|
+
|
|
69
|
+
[[structure]]
|
|
70
|
+
family = "isa"
|
|
71
|
+
form = "group"
|
|
72
|
+
template = "Being {A_PARENT}, {PRONOUN} is {OBJECTS_A} too."
|
|
73
|
+
|
|
74
|
+
[[structure]]
|
|
75
|
+
family = "isa"
|
|
76
|
+
form = "group"
|
|
77
|
+
template = "Within the {PARENT} family, {PRONOUN} counts as {OBJECTS_A}."
|
|
78
|
+
|
|
79
|
+
[[structure]]
|
|
80
|
+
family = "isa"
|
|
81
|
+
form = "group"
|
|
82
|
+
template = "As {A_PARENT}, {PRONOUN} is {OBJECTS_A}."
|
|
83
|
+
|
|
84
|
+
# ---- isa closer: the highest-level roots the term sits under ----------------
|
|
85
|
+
|
|
86
|
+
[[structure]]
|
|
87
|
+
family = "isa"
|
|
88
|
+
form = "closer"
|
|
89
|
+
template = "More broadly, {TERMS} sit within {OBJECTS_A} in the wider hierarchy."
|
|
90
|
+
|
|
91
|
+
[[structure]]
|
|
92
|
+
family = "isa"
|
|
93
|
+
form = "closer"
|
|
94
|
+
template = "More generally, {TERMS} fall under {OBJECTS_A}."
|
|
95
|
+
|
|
96
|
+
[[structure]]
|
|
97
|
+
family = "isa"
|
|
98
|
+
form = "closer"
|
|
99
|
+
template = "Higher up, {TERMS} are kinds of {OBJECTS_PLURAL}."
|
|
100
|
+
|
|
101
|
+
[[structure]]
|
|
102
|
+
family = "isa"
|
|
103
|
+
form = "closer"
|
|
104
|
+
template = "Zooming out, {TERMS} belong among {OBJECTS_PLURAL}."
|
|
105
|
+
|
|
51
106
|
# ---- location: where it is found (atLocation / locatedNear) ----------------
|
|
52
107
|
|
|
53
108
|
[[structure]]
|
|
@@ -60,6 +115,21 @@ family = "location"
|
|
|
60
115
|
form = "several"
|
|
61
116
|
template = "{PRONOUN_CAP} is found in {OBJECTS_RAW}."
|
|
62
117
|
|
|
118
|
+
[[structure]]
|
|
119
|
+
family = "location"
|
|
120
|
+
form = "several"
|
|
121
|
+
template = "{PRONOUN_CAP} lives in {OBJECTS_RAW}."
|
|
122
|
+
|
|
123
|
+
[[structure]]
|
|
124
|
+
family = "location"
|
|
125
|
+
form = "several"
|
|
126
|
+
template = "You'll find {PRONOUN} in {OBJECTS_RAW}."
|
|
127
|
+
|
|
128
|
+
[[structure]]
|
|
129
|
+
family = "location"
|
|
130
|
+
form = "several"
|
|
131
|
+
template = "{PRONOUN_CAP} turns up in {OBJECTS_RAW}."
|
|
132
|
+
|
|
63
133
|
# ---- partOf: what it belongs to -------------------------------------------
|
|
64
134
|
|
|
65
135
|
[[structure]]
|
|
@@ -67,11 +137,41 @@ family = "partOf"
|
|
|
67
137
|
form = "single"
|
|
68
138
|
template = "{PRONOUN_CAP} is part of {A_OBJECT}."
|
|
69
139
|
|
|
140
|
+
[[structure]]
|
|
141
|
+
family = "partOf"
|
|
142
|
+
form = "single"
|
|
143
|
+
template = "{PRONOUN_CAP} belongs to {A_OBJECT}."
|
|
144
|
+
|
|
145
|
+
[[structure]]
|
|
146
|
+
family = "partOf"
|
|
147
|
+
form = "single"
|
|
148
|
+
template = "{PRONOUN_CAP} forms part of {A_OBJECT}."
|
|
149
|
+
|
|
150
|
+
[[structure]]
|
|
151
|
+
family = "partOf"
|
|
152
|
+
form = "single"
|
|
153
|
+
template = "{PRONOUN_CAP} makes up part of {A_OBJECT}."
|
|
154
|
+
|
|
70
155
|
[[structure]]
|
|
71
156
|
family = "partOf"
|
|
72
157
|
form = "several"
|
|
73
158
|
template = "{PRONOUN_CAP} is part of {OBJECTS_A}."
|
|
74
159
|
|
|
160
|
+
[[structure]]
|
|
161
|
+
family = "partOf"
|
|
162
|
+
form = "several"
|
|
163
|
+
template = "{PRONOUN_CAP} belongs to {OBJECTS_A}."
|
|
164
|
+
|
|
165
|
+
[[structure]]
|
|
166
|
+
family = "partOf"
|
|
167
|
+
form = "several"
|
|
168
|
+
template = "{PRONOUN_CAP} forms part of {OBJECTS_A}."
|
|
169
|
+
|
|
170
|
+
[[structure]]
|
|
171
|
+
family = "partOf"
|
|
172
|
+
form = "several"
|
|
173
|
+
template = "{PRONOUN_CAP} is one part of {OBJECTS_A}."
|
|
174
|
+
|
|
75
175
|
# ---- capableOf: what it can do --------------------------------------------
|
|
76
176
|
|
|
77
177
|
[[structure]]
|
|
@@ -84,6 +184,21 @@ family = "capableOf"
|
|
|
84
184
|
form = "several"
|
|
85
185
|
template = "{PRONOUN_CAP} can {OBJECTS_RAW}."
|
|
86
186
|
|
|
187
|
+
[[structure]]
|
|
188
|
+
family = "capableOf"
|
|
189
|
+
form = "several"
|
|
190
|
+
template = "{PRONOUN_CAP} is able to {OBJECTS_RAW}."
|
|
191
|
+
|
|
192
|
+
[[structure]]
|
|
193
|
+
family = "capableOf"
|
|
194
|
+
form = "several"
|
|
195
|
+
template = "{PRONOUN_CAP} knows how to {OBJECTS_RAW}."
|
|
196
|
+
|
|
197
|
+
[[structure]]
|
|
198
|
+
family = "capableOf"
|
|
199
|
+
form = "several"
|
|
200
|
+
template = "{PRONOUN_CAP} tends to {OBJECTS_RAW}."
|
|
201
|
+
|
|
87
202
|
# ---- usedFor: what it is used for -----------------------------------------
|
|
88
203
|
|
|
89
204
|
[[structure]]
|
|
@@ -91,7 +206,37 @@ family = "usedFor"
|
|
|
91
206
|
form = "single"
|
|
92
207
|
template = "{PRONOUN_CAP} is used for {OBJECT}."
|
|
93
208
|
|
|
209
|
+
[[structure]]
|
|
210
|
+
family = "usedFor"
|
|
211
|
+
form = "single"
|
|
212
|
+
template = "{PRONOUN_CAP} helps with {OBJECT}."
|
|
213
|
+
|
|
214
|
+
[[structure]]
|
|
215
|
+
family = "usedFor"
|
|
216
|
+
form = "single"
|
|
217
|
+
template = "People use {PRONOUN} for {OBJECT}."
|
|
218
|
+
|
|
219
|
+
[[structure]]
|
|
220
|
+
family = "usedFor"
|
|
221
|
+
form = "single"
|
|
222
|
+
template = "{PRONOUN_CAP} works for {OBJECT}."
|
|
223
|
+
|
|
94
224
|
[[structure]]
|
|
95
225
|
family = "usedFor"
|
|
96
226
|
form = "several"
|
|
97
227
|
template = "{PRONOUN_CAP} is used for {OBJECTS_RAW}."
|
|
228
|
+
|
|
229
|
+
[[structure]]
|
|
230
|
+
family = "usedFor"
|
|
231
|
+
form = "several"
|
|
232
|
+
template = "{PRONOUN_CAP} helps with {OBJECTS_RAW}."
|
|
233
|
+
|
|
234
|
+
[[structure]]
|
|
235
|
+
family = "usedFor"
|
|
236
|
+
form = "several"
|
|
237
|
+
template = "People use {PRONOUN} for {OBJECTS_RAW}."
|
|
238
|
+
|
|
239
|
+
[[structure]]
|
|
240
|
+
family = "usedFor"
|
|
241
|
+
form = "several"
|
|
242
|
+
template = "{PRONOUN_CAP} works for {OBJECTS_RAW}."
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polycode-projects/the-mechanical-code-talker",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "The Mechanical Code Talker (tmct) — a tolerant, offline, $0 chat surface that guides you toward precision queries about a software repository. ELIZA/PARRY-style but domain-obsessed with code. No model calls; indexes a repo on request (tmct index) or reads any producer's graph.",
|
|
@@ -47,7 +47,8 @@
|
|
|
47
47
|
"./createCompletionsGraphAdapter": "./src/services/completions.mjs",
|
|
48
48
|
"./ingest": "./src/services/extract-facts.mjs",
|
|
49
49
|
"./repository-interface": "./src/adapters/repository-interface.mjs",
|
|
50
|
-
"./conformance": "./src/tools/conformance.mjs"
|
|
50
|
+
"./conformance": "./src/tools/conformance.mjs",
|
|
51
|
+
"./ask-browser": "./src/surfaces/web/graph-ask-browser-entry.mjs"
|
|
51
52
|
},
|
|
52
53
|
"files": [
|
|
53
54
|
"bin/",
|
|
@@ -87,9 +88,11 @@
|
|
|
87
88
|
"test": "node --disable-warning=ExperimentalWarning --test --test-concurrency=8 \"test/**/*.test.mjs\"",
|
|
88
89
|
"test:smoke": "node --disable-warning=ExperimentalWarning --test test/smoke/*.test.mjs",
|
|
89
90
|
"test:fast": "node --disable-warning=ExperimentalWarning --test --test-concurrency=8 test/smoke/*.test.mjs test/fast/*.test.mjs test/tools/ask.test.mjs test/tools/server.test.mjs test/estate/import-layers.test.mjs",
|
|
90
|
-
"test:
|
|
91
|
-
"test:
|
|
92
|
-
"
|
|
91
|
+
"test:unit": "node --disable-warning=ExperimentalWarning --test --test-concurrency=8 $(node scripts/list-unit-test-files.mjs)",
|
|
92
|
+
"test:slow": "node --disable-warning=ExperimentalWarning --test test/bench/synthbench-code.test.mjs test/estate/generated-artifacts.test.mjs test/readme/readme.test.mjs test/corpus/bench-smoke.test.mjs test/corpus/inference.test.mjs",
|
|
93
|
+
"test:e2e": "node --disable-warning=ExperimentalWarning --test \"test-e2e/*.test.mjs\"",
|
|
94
|
+
"test:e2e:heavy": "node --disable-warning=ExperimentalWarning --test \"test-e2e/heavy/*.test.mjs\"",
|
|
95
|
+
"check:readme": "TMCT_CHECK_README=1 node --disable-warning=ExperimentalWarning --test test-e2e/readme-examples.test.mjs",
|
|
93
96
|
"e2e:browsers": "playwright install chromium",
|
|
94
97
|
"gen:screenshots": "node scripts/gen-screenshots.mjs",
|
|
95
98
|
"check:links": "node scripts/check-links.mjs",
|
|
@@ -128,16 +131,16 @@
|
|
|
128
131
|
"serve:public": "node --disable-warning=ExperimentalWarning bin/tmct.mjs serve --host 0.0.0.0 --port 8787",
|
|
129
132
|
"example:mini": "node --disable-warning=ExperimentalWarning bin/tmct.mjs chat --repo examples/mini-webapp --ephemeral",
|
|
130
133
|
"example:polyglot": "node --disable-warning=ExperimentalWarning bin/tmct.mjs chat --repo examples/polyglot --ephemeral",
|
|
131
|
-
"chatbench:run": "node chatbench/run.mjs",
|
|
132
|
-
"chatbench:judge": "node chatbench/judge.mjs",
|
|
133
|
-
"chatbench:judge:cached": "node chatbench/judge.mjs --cache chatbench/verdict-cache.json",
|
|
134
|
-
"agentbench:run": "node agentbench/run.mjs",
|
|
135
|
-
"infbench": "node infbench/generate-cases.mjs && node infbench/run.mjs",
|
|
136
|
-
"idxbench:run": "node idxbench/run.mjs",
|
|
137
|
-
"researchbench:run": "node researchbench/run.mjs",
|
|
138
|
-
"synthbench:code": "node synthbench/code/run.mjs",
|
|
139
|
-
"ingestbench:run": "node ingestbench/run.mjs",
|
|
140
|
-
"ingestbench:judge": "node ingestbench/judge.mjs",
|
|
134
|
+
"chatbench:run": "node test-benchmarks/chatbench/run.mjs",
|
|
135
|
+
"chatbench:judge": "node test-benchmarks/chatbench/judge.mjs",
|
|
136
|
+
"chatbench:judge:cached": "node test-benchmarks/chatbench/judge.mjs --cache test-benchmarks/chatbench/verdict-cache.json",
|
|
137
|
+
"agentbench:run": "node test-benchmarks/agentbench/run.mjs",
|
|
138
|
+
"infbench": "node test-benchmarks/infbench/generate-cases.mjs && node test-benchmarks/infbench/run.mjs",
|
|
139
|
+
"idxbench:run": "node test-benchmarks/idxbench/run.mjs",
|
|
140
|
+
"researchbench:run": "node test-benchmarks/researchbench/run.mjs",
|
|
141
|
+
"synthbench:code": "node test-benchmarks/synthbench/code/run.mjs",
|
|
142
|
+
"ingestbench:run": "node test-benchmarks/ingestbench/run.mjs",
|
|
143
|
+
"ingestbench:judge": "node test-benchmarks/ingestbench/judge.mjs",
|
|
141
144
|
"corpus:matrix": "node scripts/corpus-matrix.mjs",
|
|
142
145
|
"corpus:matrix:gaps": "node scripts/corpus-matrix.mjs --gaps",
|
|
143
146
|
"template:coverage": "node scripts/template-coverage.mjs",
|
|
@@ -5,9 +5,15 @@
|
|
|
5
5
|
// in src/domain/digest; only the TOML read lives here, so every node surface
|
|
6
6
|
// (chat, `tmct digest`, the page generators) shares one seam.
|
|
7
7
|
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
8
|
+
// build-chat-bundle.mjs swaps this module for a live in-memory twin (the
|
|
9
|
+
// chat dock DOES digest in-page there — chat-browser-entry.mjs feeds it the
|
|
10
|
+
// build-time-embedded [[structure]] rows via setDigestStructures); every
|
|
11
|
+
// other browser bundle (ask, ledger's static render) still stubs it out to
|
|
12
|
+
// null, so those consumers keep treating a null article as "fall back to the
|
|
13
|
+
// flat fact list". setDigestStructures below is a no-op on THIS, the real
|
|
14
|
+
// node-side module — kept only for interface parity with the live bundle
|
|
15
|
+
// twin, so a file that imports both under plain Node (as a chat-engine
|
|
16
|
+
// contract test does) resolves the same export set either way.
|
|
11
17
|
|
|
12
18
|
import { readFileSync } from "node:fs";
|
|
13
19
|
import { fileURLToPath } from "node:url";
|
|
@@ -19,6 +25,12 @@ import { digestStoreStats, chainsForObjects, isaObjectsOf } from "../../domain/d
|
|
|
19
25
|
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
20
26
|
const BANK_FILE = join(HERE, "..", "..", "..", "data", "templates", "constructions", "digest-sentence-structures.toml");
|
|
21
27
|
|
|
28
|
+
/** No-op here — the node-side adapter always reads its structures from the
|
|
29
|
+
* committed TOML bank (below), never from an externally-supplied table. Only
|
|
30
|
+
* the browser bundle's live twin (build-chat-bundle.mjs's stub) actually
|
|
31
|
+
* holds state behind this setter. */
|
|
32
|
+
export function setDigestStructures() {}
|
|
33
|
+
|
|
22
34
|
/** The raw [[structure]] rows parsed from the committed bank, once. A missing or
|
|
23
35
|
* unparseable bank yields an empty list — the digest degrades to the caller's
|
|
24
36
|
* flat fallback rather than throwing, the same posture the construction-bank
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"ask.mjs metaFallbackEntityAnswer (\"X is a Y in this codebase, defined in Z ...\")"
|
|
11
11
|
],
|
|
12
12
|
"deliberatelyNotUsedBy": [
|
|
13
|
-
"ask.mjs renderCore whereShape (\"X is defined in Y at line(s) Z\" / \"X is defined in Y (no line span...)\") -- chatbench/graded-pool-max.jsonl pins this exact substring as ground truth for 11 'where is X defined' cases (2 in the always-run promoted subset), and that pool is append-only/never-edited-mid-arc per SKILL_BENCHMARK_CEFR_ENGLISH.md."
|
|
13
|
+
"ask.mjs renderCore whereShape (\"X is defined in Y at line(s) Z\" / \"X is defined in Y (no line span...)\") -- test-benchmarks/chatbench/graded-pool-max.jsonl pins this exact substring as ground truth for 11 'where is X defined' cases (2 in the always-run promoted subset), and that pool is append-only/never-edited-mid-arc per SKILL_BENCHMARK_CEFR_ENGLISH.md."
|
|
14
14
|
]
|
|
15
15
|
},
|
|
16
16
|
"is-dated": {
|
package/src/domain/ask-vocab.mjs
CHANGED
|
@@ -287,6 +287,10 @@ export const ENTITY_TO_TYPE = Object.freeze({
|
|
|
287
287
|
method: "Method", methods: "Method",
|
|
288
288
|
class: "Class", classes: "Class",
|
|
289
289
|
module: "Module", modules: "Module", mod: "Module", mods: "Module", file: "Module", files: "Module",
|
|
290
|
+
// "Package" is a pseudo-type like "Change" below: no node is ever stored
|
|
291
|
+
// with that class. ask.mjs derives packages from module labels, the same
|
|
292
|
+
// derivation the architecture map uses.
|
|
293
|
+
package: "Package", packages: "Package",
|
|
290
294
|
attribute: "Attribute", attributes: "Attribute", field: "Attribute", fields: "Attribute",
|
|
291
295
|
variable: "GlobalVariable", variables: "GlobalVariable", global: "GlobalVariable", globals: "GlobalVariable",
|
|
292
296
|
// "Change" is a pseudo-type, not a node class: ask.mjs's traverse() reads it
|