@polycode-projects/the-mechanical-code-talker 2.2.0 → 2.3.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/bin/tmct.mjs +4 -5
- package/corpus/LICENSES.json +19 -4
- package/corpus/README.md +48 -0
- package/corpus/generated/README.md +24 -9
- package/corpus/generated/ace-surface-variants.jsonl +4 -1
- package/corpus/generated/manifest.json +4 -4
- package/corpus/prose/manifest.json +512 -0
- package/corpus/prose/sqlite/LICENSE-NOTICE +53 -0
- package/corpus/prose/sqlite/arch.txt +213 -0
- package/corpus/prose/sqlite/atomiccommit.txt +1117 -0
- package/corpus/prose/sqlite/faq.txt +473 -0
- package/corpus/prose/sqlite/fileformat.txt +1589 -0
- package/corpus/prose/sqlite/lang_createtable.txt +1339 -0
- package/corpus/prose/sqlite/lang_insert.txt +580 -0
- package/corpus/prose/sqlite/lang_select.txt +3293 -0
- package/corpus/prose/sqlite/optoverview.txt +908 -0
- package/corpus/prose/sqlite/queryplanner.txt +447 -0
- package/corpus/prose/sqlite/transactional.txt +41 -0
- package/corpus/prose/sqlite/wal.txt +567 -0
- package/corpus/prose/sqlite/whentouse.txt +300 -0
- package/corpus/prose/wikipedia/Apple.txt +4 -0
- package/corpus/prose/wikipedia/Attempto_Controlled_English.txt +169 -0
- package/corpus/prose/wikipedia/Automated_planning_and_scheduling.txt +67 -0
- package/corpus/prose/wikipedia/Bee.txt +7 -0
- package/corpus/prose/wikipedia/Bird.txt +8 -0
- package/corpus/prose/wikipedia/Bone.txt +4 -0
- package/corpus/prose/wikipedia/Book.txt +7 -0
- package/corpus/prose/wikipedia/Bread.txt +6 -0
- package/corpus/prose/wikipedia/Butterfly.txt +6 -0
- package/corpus/prose/wikipedia/Car.txt +1 -0
- package/corpus/prose/wikipedia/Cat.txt +1 -0
- package/corpus/prose/wikipedia/Child.txt +3 -0
- package/corpus/prose/wikipedia/City.txt +2 -0
- package/corpus/prose/wikipedia/Clock.txt +2 -0
- package/corpus/prose/wikipedia/Cooking.txt +1 -0
- package/corpus/prose/wikipedia/Description_logic.txt +660 -0
- package/corpus/prose/wikipedia/Doctor.txt +6 -0
- package/corpus/prose/wikipedia/Dog.txt +4 -0
- package/corpus/prose/wikipedia/Eagle.txt +4 -0
- package/corpus/prose/wikipedia/Emotion.txt +9 -0
- package/corpus/prose/wikipedia/Eye.txt +5 -0
- package/corpus/prose/wikipedia/Family.txt +3 -0
- package/corpus/prose/wikipedia/Farm.txt +4 -0
- package/corpus/prose/wikipedia/Fear.txt +4 -0
- package/corpus/prose/wikipedia/First-order_logic.txt +1518 -0
- package/corpus/prose/wikipedia/Fish.txt +10 -0
- package/corpus/prose/wikipedia/Flower.txt +3 -0
- package/corpus/prose/wikipedia/Food.txt +10 -0
- package/corpus/prose/wikipedia/Grass.txt +9 -0
- package/corpus/prose/wikipedia/Hand.txt +2 -0
- package/corpus/prose/wikipedia/Happiness.txt +3 -0
- package/corpus/prose/wikipedia/Heart.txt +4 -0
- package/corpus/prose/wikipedia/Horse.txt +4 -0
- package/corpus/prose/wikipedia/House.txt +6 -0
- package/corpus/prose/wikipedia/Human.txt +4 -0
- package/corpus/prose/wikipedia/Insect.txt +6 -0
- package/corpus/prose/wikipedia/Interactive_fiction.txt +112 -0
- package/corpus/prose/wikipedia/Knowledge.txt +5 -0
- package/corpus/prose/wikipedia/Knowledge_representation_and_reasoning.txt +87 -0
- package/corpus/prose/wikipedia/LICENSE-NOTICE +94 -0
- package/corpus/prose/wikipedia/Language.txt +10 -0
- package/corpus/prose/wikipedia/Learning.txt +4 -0
- package/corpus/prose/wikipedia/Mammal.txt +3 -0
- package/corpus/prose/wikipedia/Memory.txt +5 -0
- package/corpus/prose/wikipedia/Milk.txt +1 -0
- package/corpus/prose/wikipedia/Mountain.txt +1 -0
- package/corpus/prose/wikipedia/Natural_language_processing.txt +211 -0
- package/corpus/prose/wikipedia/Ostrich.txt +2 -0
- package/corpus/prose/wikipedia/Owl.txt +2 -0
- package/corpus/prose/wikipedia/Penguin.txt +2 -0
- package/corpus/prose/wikipedia/Plant.txt +5 -0
- package/corpus/prose/wikipedia/Rain.txt +1 -0
- package/corpus/prose/wikipedia/Resource_Description_Framework.txt +184 -0
- package/corpus/prose/wikipedia/River.txt +1 -0
- package/corpus/prose/wikipedia/School.txt +8 -0
- package/corpus/prose/wikipedia/Sea.txt +1 -0
- package/corpus/prose/wikipedia/Semantic_Web.txt +114 -0
- package/corpus/prose/wikipedia/Semantic_reasoner.txt +29 -0
- package/corpus/prose/wikipedia/Snow.txt +5 -0
- package/corpus/prose/wikipedia/Sun.txt +5 -0
- package/corpus/prose/wikipedia/Teacher.txt +4 -0
- package/corpus/prose/wikipedia/Team.txt +3 -0
- package/corpus/prose/wikipedia/Text-based_game.txt +17 -0
- package/corpus/prose/wikipedia/Tool.txt +4 -0
- package/corpus/prose/wikipedia/Tree.txt +7 -0
- package/corpus/prose/wikipedia/Weather.txt +4 -0
- package/corpus/prose/wikipedia/Web_Ontology_Language.txt +133 -0
- package/corpus/prose/wikipedia/Wind.txt +8 -0
- package/corpus/prose/wikipedia/Writing.txt +5 -0
- package/corpus/wordnet/generate.mjs +6 -7
- package/package.json +31 -2
- package/src/adapters/corpus/conceptnet.mjs +1 -1
- package/src/adapters/graph-build.mjs +3 -3
- package/src/adapters/memory/blocks.mjs +2 -2
- package/src/adapters/memory/core.mjs +5 -5
- package/src/adapters/providers/bootstrap.mjs +1 -1
- package/src/adapters/providers/fixture.mjs +1 -1
- package/src/adapters/wink-model.mjs +1 -1
- package/src/adapters/wordnet-source.mjs +70 -0
- package/src/domain/answer-variants.json +1 -1
- package/src/domain/ask-vocab.mjs +2 -2
- package/src/domain/ask.mjs +4 -4
- package/src/domain/codegraph.mjs +3 -3
- package/src/domain/corpus-matrix.mjs +87 -0
- package/src/domain/grammar/ace.mjs +11 -11
- package/src/domain/grammar/lexicon.mjs +3 -3
- package/src/domain/inflect.mjs +67 -0
- package/src/domain/interpret/fuzzy.mjs +1 -1
- package/src/domain/interpret/merge.mjs +1 -1
- package/src/domain/interpret/normalize.mjs +1 -1
- package/src/domain/licences.mjs +68 -0
- package/src/domain/memory/capability.mjs +1 -1
- package/src/domain/memory/trust.mjs +2 -2
- package/src/domain/persona/codegen.mjs +123 -0
- package/src/domain/persona/examples.mjs +26 -0
- package/src/domain/persona/tiers.mjs +270 -0
- package/src/domain/publish-gate.mjs +41 -0
- package/src/domain/router/call-validator.mjs +1 -1
- package/src/domain/router/drive.mjs +3 -4
- package/src/domain/router/registry.mjs +12 -13
- package/src/domain/router/resolver.mjs +18 -5
- package/src/domain/router/results.mjs +3 -3
- package/src/domain/router/taught.mjs +4 -3
- package/src/domain/schemaorg/turtle.mjs +25 -0
- package/src/domain/semcor/parse.mjs +87 -0
- package/src/domain/syllogise.mjs +6 -6
- package/src/domain/version-stamp.mjs +36 -0
- package/src/domain/wordnet/yaml.mjs +133 -0
- package/src/services/chat-session.mjs +2 -2
- package/src/services/chat.mjs +2 -2
- package/src/services/cli-args.mjs +4 -4
- package/src/services/finish.mjs +1 -1
- package/src/services/ledger-viz.mjs +2 -3
- package/src/services/sessions.mjs +4 -4
- package/src/services/viz-theme.mjs +3 -4
- package/src/surfaces/web/memory-ask-browser.bundle.js +1 -18
- package/src/domain/router/guardrail.mjs +0 -116
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
// A taught game action ("you can move a disk onto a peg" + its preconditions
|
|
4
4
|
// and effect) becomes a registered capability record so the router's operator
|
|
5
5
|
// model covers taught actions and built-in query tools alike. Registered
|
|
6
|
-
// records carry readOnly: false, so the
|
|
7
|
-
//
|
|
8
|
-
// `knows` add-effects and these
|
|
6
|
+
// records carry readOnly: false, so the resolver's dispatch gate refuses to
|
|
7
|
+
// fire them — and it never selects one on its own anyway, because it
|
|
8
|
+
// backward-chains over `knows` add-effects and these carry world-triple
|
|
9
|
+
// effects instead. They are planned over and simulated.
|
|
9
10
|
|
|
10
11
|
import { capabilityByName, registerCapability } from "./registry.mjs";
|
|
11
12
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// turtle.mjs — a very small Turtle reader for schema.ttl's OWN regular shape:
|
|
2
|
+
// each class is one `:Name a rdfs:Class ;` block terminated by a line ending
|
|
3
|
+
// in ` .`, with `rdfs:label`/`rdfs:comment`/`rdfs:subClassOf` as `;`-separated
|
|
4
|
+
// predicate lines. Not a general Turtle parser — schema.ttl's own generator
|
|
5
|
+
// emits a single, very regular style (confirmed by direct inspection).
|
|
6
|
+
//
|
|
7
|
+
// Pure: text in, Map out, no imports.
|
|
8
|
+
|
|
9
|
+
/** Every rdfs:Class in `text`, as name -> { name, label, comment, subClassOf }.
|
|
10
|
+
* A class with no rdfs:label falls back to its own name; no rdfs:comment
|
|
11
|
+
* yields "". Blocks that are not classes (properties, say) are skipped. */
|
|
12
|
+
export function parseSchemaClasses(text) {
|
|
13
|
+
const classes = new Map();
|
|
14
|
+
const blocks = text.split(/\n(?=:[A-Za-z])/); // each class/property starts a new top-level block
|
|
15
|
+
for (const block of blocks) {
|
|
16
|
+
const head = /^:([A-Za-z0-9_]+)\s+a\s+rdfs:Class\s*;/.exec(block);
|
|
17
|
+
if (!head) continue;
|
|
18
|
+
const name = head[1];
|
|
19
|
+
const label = /rdfs:label\s+"([^"]*)"/.exec(block)?.[1] || name;
|
|
20
|
+
const comment = /rdfs:comment\s+"([^"]*)"/.exec(block)?.[1] || "";
|
|
21
|
+
const subClassOf = [...block.matchAll(/rdfs:subClassOf\s+:([A-Za-z0-9_]+)/g)].map((m) => m[1]);
|
|
22
|
+
classes.set(name, { name, label, comment, subClassOf });
|
|
23
|
+
}
|
|
24
|
+
return classes;
|
|
25
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// parse.mjs — a targeted reader for SemCor's own regular YAML shape:
|
|
2
|
+
// flow-style lemmas/pos arrays and a folded single-quoted `text` scalar, one
|
|
3
|
+
// record per sentence. Not a general YAML parser (this repo has no YAML
|
|
4
|
+
// dependency), and not the same shape as the WordNet dump's reader in
|
|
5
|
+
// src/domain/wordnet/yaml.mjs — SemCor's flow style is JSON-compatible once
|
|
6
|
+
// isolated, which the WordNet subset never is.
|
|
7
|
+
//
|
|
8
|
+
// Pure: text in, arrays/strings out, no imports, so it runs with no SemCor
|
|
9
|
+
// clone present.
|
|
10
|
+
|
|
11
|
+
/** Split a SemCor YAML file into per-sentence record blocks (top-level
|
|
12
|
+
* "<key>:" lines, skipping the leading "_meta:" schema block). */
|
|
13
|
+
export function splitRecords(text) {
|
|
14
|
+
const lines = text.split("\n");
|
|
15
|
+
const blocks = [];
|
|
16
|
+
let i = 0;
|
|
17
|
+
while (i < lines.length && lines[i] !== "_meta:") i++;
|
|
18
|
+
i += 1;
|
|
19
|
+
while (i < lines.length && (lines[i].startsWith(" ") || lines[i].trim() === "")) i++; // skip rest of _meta
|
|
20
|
+
while (i < lines.length) {
|
|
21
|
+
if (/^[A-Za-z0-9_]+:$/.test(lines[i])) {
|
|
22
|
+
let j = i + 1;
|
|
23
|
+
const block = [];
|
|
24
|
+
while (j < lines.length && !/^[A-Za-z0-9_]+:$/.test(lines[j])) {
|
|
25
|
+
block.push(lines[j]);
|
|
26
|
+
j += 1;
|
|
27
|
+
}
|
|
28
|
+
blocks.push(block.join("\n"));
|
|
29
|
+
i = j;
|
|
30
|
+
} else {
|
|
31
|
+
i += 1;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return blocks;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Extract a flow-style JSON-compatible array value for `key` from one
|
|
38
|
+
* record block (lemmas/pos are double-quoted string arrays — valid JSON
|
|
39
|
+
* once isolated), balancing brackets across a line wrap if one occurs. */
|
|
40
|
+
export function extractArray(block, key) {
|
|
41
|
+
const re = new RegExp(`^\\s*${key}:\\s*(\\[.*)$`, "m");
|
|
42
|
+
const m = re.exec(block);
|
|
43
|
+
if (!m) return null;
|
|
44
|
+
let buf = m[1];
|
|
45
|
+
let depth = (buf.match(/\[/g) || []).length - (buf.match(/\]/g) || []).length;
|
|
46
|
+
const afterIdx = block.indexOf(m[0]) + m[0].length;
|
|
47
|
+
const rest = block.slice(afterIdx).split("\n");
|
|
48
|
+
let ri = 0;
|
|
49
|
+
while (depth > 0 && ri < rest.length) {
|
|
50
|
+
buf += `\n${rest[ri]}`;
|
|
51
|
+
depth += (rest[ri].match(/\[/g) || []).length - (rest[ri].match(/\]/g) || []).length;
|
|
52
|
+
ri += 1;
|
|
53
|
+
}
|
|
54
|
+
try { return JSON.parse(buf); } catch { return null; }
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Extract the `text:` folded single-quoted scalar (YAML's own `''` ->
|
|
58
|
+
* literal `'` escape; line breaks folded to spaces). */
|
|
59
|
+
export function extractText(block) {
|
|
60
|
+
const m = /^\s*text:\s*'/m.exec(block);
|
|
61
|
+
if (!m) return null;
|
|
62
|
+
const start = block.indexOf("'", m.index);
|
|
63
|
+
let i = start + 1;
|
|
64
|
+
let raw = "";
|
|
65
|
+
while (i < block.length) {
|
|
66
|
+
if (block[i] === "'") {
|
|
67
|
+
if (block[i + 1] === "'") { raw += "'"; i += 2; continue; }
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
raw += block[i];
|
|
71
|
+
i += 1;
|
|
72
|
+
}
|
|
73
|
+
return raw.replace(/\s+/g, " ").trim();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const NOUN_POS = new Set(["NN", "NNS"]);
|
|
77
|
+
|
|
78
|
+
/** Simple-grammar filter: short, no semicolons/colons, no embedded quotes
|
|
79
|
+
* (which signal reported speech), no more than one comma — a rough proxy for
|
|
80
|
+
* "no complex embedded clauses". */
|
|
81
|
+
export function isSimpleSentence(text, wordCount) {
|
|
82
|
+
if (wordCount > 18) return false;
|
|
83
|
+
if (/[;:]/.test(text)) return false;
|
|
84
|
+
if ((text.match(/,/g) || []).length > 1) return false;
|
|
85
|
+
if (/"/.test(text)) return false;
|
|
86
|
+
return true;
|
|
87
|
+
}
|
package/src/domain/syllogise.mjs
CHANGED
|
@@ -42,13 +42,13 @@ function requireStore(store, needed, caller) {
|
|
|
42
42
|
/** scm-sco: the subClassOf-transitivity rule, and the provenance tag its
|
|
43
43
|
* conclusions carry. */
|
|
44
44
|
export const SUBCLASS_PREDICATE = "rdfs:subClassOf";
|
|
45
|
-
|
|
45
|
+
const SYLLOGISE_RULE = "subClassOf";
|
|
46
46
|
export const ENTAILED_PROVENANCE = `entailed:${SYLLOGISE_RULE}`;
|
|
47
47
|
|
|
48
48
|
/** cax-sco: the type-propagation rule, and the provenance tag its conclusions
|
|
49
49
|
* carry. */
|
|
50
50
|
export const TYPE_PREDICATE = "rdf:type";
|
|
51
|
-
|
|
51
|
+
const CAX_SCO_RULE = "type";
|
|
52
52
|
export const ENTAILED_TYPE_PROVENANCE = `entailed:${CAX_SCO_RULE}`;
|
|
53
53
|
|
|
54
54
|
/** cax-dw: x rdf:type C1, C1 owl:disjointWith C2 |= x is NOT of type C2 — a
|
|
@@ -396,7 +396,7 @@ export function deriveSomeValuesFromApplication(propertyEdges, typeEdges, subCla
|
|
|
396
396
|
// deriveSomeValuesFromApplication reconstructs someValuesFrom restrictions.
|
|
397
397
|
const HAS_PROPERTY_KEY = "has"; // synthetic marker parseCardinality always mints, never a real taught verb
|
|
398
398
|
const CARDINALITY_KIND_OF = { "owl:cardinality": "exactly", "owl:mincardinality": "min", "owl:maxcardinality": "max" };
|
|
399
|
-
|
|
399
|
+
const ON_CLASS_PREDICATE = "owl:onClass";
|
|
400
400
|
|
|
401
401
|
/** Reconstructs pattern-5 cardinality restriction records from raw stored
|
|
402
402
|
* rows touching a restriction node. A restriction is only admitted when its
|
|
@@ -525,7 +525,7 @@ function findOwnCardinalityRestriction(subClassEdges, cardinalityRestrictionEdge
|
|
|
525
525
|
}
|
|
526
526
|
|
|
527
527
|
// ---- cardinality monotonicity (outside OWL 2 RL's own decidable profile) ----
|
|
528
|
-
|
|
528
|
+
const SCM_CARD_RULE = "cardinalityMonotonicity";
|
|
529
529
|
/** Same sub-1 discount as CAX_DW_RULE_CONFIDENCE. No `syllogise()` call site
|
|
530
530
|
* (this rule is query-rooted, never an enumerable Fact) — defined anyway so
|
|
531
531
|
* chat.mjs's live proof chase can attach an auditable confidence figure
|
|
@@ -557,7 +557,7 @@ export function proveCardinalityAtLeast(subClassEdges, cardinalityRestrictionEdg
|
|
|
557
557
|
// generalization — see this file's header comment; `cax-` prefix per this
|
|
558
558
|
// ladder's "produces a provable no" naming convention, same epistemic status
|
|
559
559
|
// as cax-dw) ----
|
|
560
|
-
|
|
560
|
+
const CAX_MAXC0_RULE = "maxCardinalityZero";
|
|
561
561
|
/** Same sub-1 discount and query-rooted caveat as CARDINALITY_RULE_CONFIDENCE. */
|
|
562
562
|
export const CAX_MAXC0_RULE_CONFIDENCE = 0.95;
|
|
563
563
|
|
|
@@ -989,7 +989,7 @@ function buildSurvivorDerivabilityCheck(rows) {
|
|
|
989
989
|
* A survivor keeps its stale, still-single justification as-is; a later
|
|
990
990
|
* retraction of its OTHER supporting path therefore won't re-examine it.
|
|
991
991
|
* Re-grounding survivors — or tracking every alternate justification set —
|
|
992
|
-
* is the ATMS horizon
|
|
992
|
+
* is the ATMS horizon, not this bounded slice.
|
|
993
993
|
*
|
|
994
994
|
* Returns { retracted, count, budget, depth, truncated, found } — `found` is
|
|
995
995
|
* false when `subject ⊑ object` was never a stored fact.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// version-stamp.mjs — the home page's #pkg-version element, written and read
|
|
2
|
+
// from one place. Pure: strings in, strings out, no imports, so the deploy
|
|
3
|
+
// smoke check can reach it without npm ci.
|
|
4
|
+
//
|
|
5
|
+
// This existed three times and the copies had already drifted: the writer
|
|
6
|
+
// matched [^<]*, the smoke check demanded \d+\.\d+\.\d+, and the estate test
|
|
7
|
+
// accepted [^<\s]*. A writer that accepts what its reader rejects is a green
|
|
8
|
+
// build and a failed deploy, so the pattern lives here and all three call it.
|
|
9
|
+
|
|
10
|
+
/** The element that carries the version, and the value inside it. */
|
|
11
|
+
const STAMP = /(id="pkg-version"[^>]*>)\s*v?([^<]*?)\s*(<)/;
|
|
12
|
+
|
|
13
|
+
/** A semver core, which is what the deploy smoke check is entitled to expect. */
|
|
14
|
+
const SEMVER = /^\d+\.\d+\.\d+$/;
|
|
15
|
+
|
|
16
|
+
/** True iff `html` carries an element the stamp can be written into. */
|
|
17
|
+
export function hasVersionStamp(html) {
|
|
18
|
+
return STAMP.test(html);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** The version `html` displays, or null when the element is absent or holds
|
|
22
|
+
* something that is not a semver core (an unstamped placeholder, say). */
|
|
23
|
+
export function parseVersionStamp(html) {
|
|
24
|
+
const found = STAMP.exec(html);
|
|
25
|
+
if (!found) return null;
|
|
26
|
+
const value = found[2].trim();
|
|
27
|
+
return SEMVER.test(value) ? value : null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** `html` with the stamp set to `version`. Throws when there is nothing to
|
|
31
|
+
* stamp — a page that lost its element would otherwise publish blank. */
|
|
32
|
+
export function stampVersion(html, version) {
|
|
33
|
+
if (!SEMVER.test(version)) throw new Error(`not a stampable version: "${version}"`);
|
|
34
|
+
if (!hasVersionStamp(html)) throw new Error("no #pkg-version element to stamp");
|
|
35
|
+
return html.replace(STAMP, `$1${version}$3`);
|
|
36
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// yaml.mjs — a reader for the small YAML subset the Open English WordNet dump
|
|
2
|
+
// uses: 2-space-indented block mappings/sequences, quoted or bare scalars, and
|
|
3
|
+
// long scalar list-items that simply WRAP onto a further-indented continuation
|
|
4
|
+
// line. No block scalars, no anchors, no flow style — confirmed by direct
|
|
5
|
+
// inspection of the dump. This reads exactly that subset; it is not a general
|
|
6
|
+
// YAML parser.
|
|
7
|
+
//
|
|
8
|
+
// Pure: text in, object out, no imports, so it is testable without the WordNet
|
|
9
|
+
// clone the scripts that call it need.
|
|
10
|
+
|
|
11
|
+
/** Non-greedy key group so a MULTI-WORD entry key ("M-1 rifle", "ice cream")
|
|
12
|
+
* still matches — the first ": "/end-of-line colon wins, exactly as real
|
|
13
|
+
* YAML's block-mapping key/value split works. A plain wrapped scalar
|
|
14
|
+
* continuation line (a definition/example fragment) only coincidentally
|
|
15
|
+
* matches this if it ALSO happens to contain a bare "word: " sequence — rare
|
|
16
|
+
* in this corpus's prose, and this feeds a maintainer worksheet whose output
|
|
17
|
+
* is hand-reviewed, not a correctness-critical parser. */
|
|
18
|
+
const KEY_RE = /^(.+?):(\s+(.*)|)$/;
|
|
19
|
+
|
|
20
|
+
const isDash = (t) => t === "-" || t.startsWith("- ");
|
|
21
|
+
|
|
22
|
+
function parseScalar(s) {
|
|
23
|
+
const t = s.trim();
|
|
24
|
+
if ((t.startsWith("'") && t.endsWith("'") && t.length >= 2) || (t.startsWith('"') && t.endsWith('"') && t.length >= 2)) {
|
|
25
|
+
return t.slice(1, -1);
|
|
26
|
+
}
|
|
27
|
+
return t;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function parseYaml(text) {
|
|
31
|
+
const rawLines = text.split("\n");
|
|
32
|
+
const lines = [];
|
|
33
|
+
for (const line of rawLines) {
|
|
34
|
+
if (!line.trim() || line.trim().startsWith("#")) continue;
|
|
35
|
+
const indent = line.length - line.trimStart().length;
|
|
36
|
+
lines.push({ indent, text: line.trimStart() });
|
|
37
|
+
}
|
|
38
|
+
let pos = 0;
|
|
39
|
+
|
|
40
|
+
// A scalar that may continue on subsequent MORE-indented lines with no
|
|
41
|
+
// "key:"/"- " marker of their own (WordNet's definition-wrapping style). A
|
|
42
|
+
// QUOTED scalar ('...' or "...") is handled separately: WordNet definitions
|
|
43
|
+
// routinely contain a literal ": " inside the quoted text itself (e.g. "…
|
|
44
|
+
// Matthew, Mark, Luke, and John" split across a line boundary right after a
|
|
45
|
+
// colon) — the bare-scalar heuristic below would misread that continuation
|
|
46
|
+
// line as a new "key:" line and truncate the string. Once inside an open
|
|
47
|
+
// quote, EVERY line is a continuation until one ends with the matching
|
|
48
|
+
// closing quote, full stop — the key/dash heuristic never applies inside it.
|
|
49
|
+
function parseScalarOrContinue(first, minContinIndent) {
|
|
50
|
+
const trimmed = first.trim();
|
|
51
|
+
const quote = trimmed[0] === "'" || trimmed[0] === '"' ? trimmed[0] : null;
|
|
52
|
+
if (quote) {
|
|
53
|
+
const closes = (s) => s.length >= 2 && s.endsWith(quote);
|
|
54
|
+
let buf = trimmed;
|
|
55
|
+
while (!closes(buf) && pos < lines.length && lines[pos].indent >= minContinIndent) {
|
|
56
|
+
buf += " " + lines[pos].text.trim();
|
|
57
|
+
pos += 1;
|
|
58
|
+
}
|
|
59
|
+
return closes(buf) ? buf.slice(1, -1) : buf;
|
|
60
|
+
}
|
|
61
|
+
let s = parseScalar(first);
|
|
62
|
+
while (pos < lines.length && lines[pos].indent >= minContinIndent
|
|
63
|
+
&& !isDash(lines[pos].text) && !KEY_RE.test(lines[pos].text)) {
|
|
64
|
+
s += " " + lines[pos].text.trim();
|
|
65
|
+
pos += 1;
|
|
66
|
+
}
|
|
67
|
+
return s;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** The value that follows a "key:" (bare, no inline scalar) — peeks at the
|
|
71
|
+
* next line to decide whether it's a nested sequence (which YAML allows to
|
|
72
|
+
* sit at the SAME indent as the key itself, not just deeper) or a nested
|
|
73
|
+
* mapping (which must be deeper) or simply absent (null). `parentIndent`
|
|
74
|
+
* is the indent of the "key:" line whose value this resolves. */
|
|
75
|
+
function parseValue(parentIndent) {
|
|
76
|
+
if (pos >= lines.length || lines[pos].indent < parentIndent) return null;
|
|
77
|
+
const line = lines[pos];
|
|
78
|
+
if (isDash(line.text)) return parseSeq(line.indent);
|
|
79
|
+
if (line.indent > parentIndent && KEY_RE.test(line.text)) return parseMap(line.indent);
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function parseSeq(indent) {
|
|
84
|
+
const arr = [];
|
|
85
|
+
while (pos < lines.length && lines[pos].indent === indent && isDash(lines[pos].text)) {
|
|
86
|
+
const dashIndent = indent;
|
|
87
|
+
const rest = lines[pos].text === "-" ? "" : lines[pos].text.slice(2);
|
|
88
|
+
pos += 1;
|
|
89
|
+
if (rest === "") {
|
|
90
|
+
arr.push(parseValue(dashIndent));
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// A quoted scalar is classified FIRST, unconditionally — WordNet
|
|
94
|
+
// definitions routinely contain a literal ": " (or a colon at the very
|
|
95
|
+
// end of a wrapped line, e.g. "…including:\n whales, …") inside quoted
|
|
96
|
+
// prose, which KEY_RE would otherwise misread as an inline "- key:"
|
|
97
|
+
// mapping. Only an UNQUOTED rest is even considered for that shape.
|
|
98
|
+
const quoted = rest[0] === "'" || rest[0] === '"';
|
|
99
|
+
const m = quoted ? null : KEY_RE.exec(rest);
|
|
100
|
+
if (m) {
|
|
101
|
+
// "- key: value" or "- key:" — an inline mapping for this list item;
|
|
102
|
+
// sibling keys of the SAME item are indented +2 from the dash.
|
|
103
|
+
const obj = {};
|
|
104
|
+
obj[m[1]] = m[3] !== undefined && m[3] !== "" ? parseScalarOrContinue(m[3], dashIndent + 2) : parseValue(dashIndent + 2);
|
|
105
|
+
while (pos < lines.length && lines[pos].indent === dashIndent + 2 && KEY_RE.test(lines[pos].text)) {
|
|
106
|
+
const mm = KEY_RE.exec(lines[pos].text);
|
|
107
|
+
pos += 1;
|
|
108
|
+
obj[mm[1]] = mm[3] !== undefined && mm[3] !== "" ? parseScalarOrContinue(mm[3], dashIndent + 4) : parseValue(dashIndent + 2);
|
|
109
|
+
}
|
|
110
|
+
arr.push(obj);
|
|
111
|
+
} else {
|
|
112
|
+
// a plain (or quoted) scalar list item — may wrap onto continuation lines
|
|
113
|
+
arr.push(parseScalarOrContinue(rest, dashIndent + 2));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return arr;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function parseMap(indent) {
|
|
120
|
+
const obj = {};
|
|
121
|
+
while (pos < lines.length && lines[pos].indent === indent && KEY_RE.test(lines[pos].text)) {
|
|
122
|
+
const m = KEY_RE.exec(lines[pos].text);
|
|
123
|
+
const key = parseScalar(m[1]);
|
|
124
|
+
pos += 1;
|
|
125
|
+
obj[key] = m[3] !== undefined && m[3] !== "" ? parseScalarOrContinue(m[3], indent + 2) : parseValue(indent);
|
|
126
|
+
// (parseValue(indent) — not indent+2 — so a same-indent sequence value
|
|
127
|
+
// is recognized; parseValue itself accepts child indent >= indent.)
|
|
128
|
+
}
|
|
129
|
+
return obj;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return parseMap(0);
|
|
133
|
+
}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
//
|
|
10
10
|
// createSession(…) is the SESSION SINK every shell shares (runChat's
|
|
11
11
|
// readline loop below, src/surfaces/tui/app.mjs's Ink shell). chat.mjs re-exports
|
|
12
|
-
// createSession/runChat
|
|
13
|
-
//
|
|
12
|
+
// createSession/runChat and the session constants so existing import sites
|
|
13
|
+
// keep working.
|
|
14
14
|
|
|
15
15
|
import { join, resolve } from "node:path";
|
|
16
16
|
import { createWriteStream } from "node:fs";
|
package/src/services/chat.mjs
CHANGED
|
@@ -62,8 +62,8 @@ export { uuidv7 };
|
|
|
62
62
|
// in the session layer so runTurn and the fact engine below stay free of
|
|
63
63
|
// node:fs/child_process/os/readline. Re-exported here (services → services) so
|
|
64
64
|
// every existing import site — bin, tui, server-http, index, tests — keeps
|
|
65
|
-
// importing createSession/runChat/
|
|
66
|
-
export { createSession, runChat,
|
|
65
|
+
// importing createSession/runChat/SESSION_LOG_DIR/PROMPT from chat.mjs.
|
|
66
|
+
export { createSession, runChat, SESSION_LOG_DIR, PROMPT } from "./chat-session.mjs";
|
|
67
67
|
|
|
68
68
|
/** dispatchTool("tmct_ask", …) returns the prose answer plus a delimited
|
|
69
69
|
* machine-readable envelope; the TUI shows the prose only. Reused verbatim
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
// 3. tmct.toml's `graph_file` / `graph_files`
|
|
16
16
|
// 4. <repo>/.tmct/graph.json, where repo is --repo, else git root, else cwd
|
|
17
17
|
//
|
|
18
|
-
// Deliberately does NOT import chat.mjs (would be circular) — the git-root lookup
|
|
19
|
-
// is a small, self-contained copy of chat.mjs's own gitToplevel().
|
|
18
|
+
// Deliberately does NOT import chat-session.mjs (would be circular) — the git-root lookup
|
|
19
|
+
// below is a small, self-contained copy of chat-session.mjs's own gitToplevel().
|
|
20
20
|
|
|
21
21
|
import { spawnSync } from "node:child_process";
|
|
22
22
|
import { dirname, resolve } from "node:path";
|
|
@@ -26,8 +26,8 @@ import { loadTomlConfig, normalizeConfig, mergeEffective, CONFIG_FILE } from "..
|
|
|
26
26
|
import { DEFAULT_GRAPH_REL } from "../adapters/config.mjs";
|
|
27
27
|
|
|
28
28
|
/** The git top-level for `cwd`, or null if not in a repo (or git is
|
|
29
|
-
* unavailable). A deliberate re-declaration of chat.mjs's gitToplevel
|
|
30
|
-
* import) — see the file docblock for why. */
|
|
29
|
+
* unavailable). A deliberate re-declaration of chat-session.mjs's gitToplevel
|
|
30
|
+
* (not an import) — see the file docblock for why. */
|
|
31
31
|
function defaultGitRoot(cwd) {
|
|
32
32
|
try {
|
|
33
33
|
const r = spawnSync("git", ["rev-parse", "--show-toplevel"], { cwd, encoding: "utf8" });
|
package/src/services/finish.mjs
CHANGED
|
@@ -18,7 +18,7 @@ export { flatten };
|
|
|
18
18
|
|
|
19
19
|
const GRAMMAR_DIR = dirname(fileURLToPath(import.meta.url));
|
|
20
20
|
/** The data-driven grammar-rule table. */
|
|
21
|
-
|
|
21
|
+
const GRAMMAR_RULES_FILE = join(GRAMMAR_DIR, "..", "..", "data", "templates", "grammar-rules.toml");
|
|
22
22
|
|
|
23
23
|
/** The segment type vocabulary. `prose` is the only unprotected type. */
|
|
24
24
|
export const SEGMENT_TYPES = Object.freeze([
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// ledger-viz.mjs — `tmct viz`: the memory graph as a readable ledger of
|
|
2
|
-
// fact-sentences around one focus term, with the in-page chat dock
|
|
3
|
-
// (PLAN_VIZ_LEDGER.md).
|
|
2
|
+
// fact-sentences around one focus term, with the in-page chat dock.
|
|
4
3
|
//
|
|
5
4
|
// Three pure/impure-separated pieces:
|
|
6
5
|
// - computeLedgerData(repoDir, opts) — I/O (loadMemory) + derivation
|
|
@@ -16,7 +15,7 @@ import { readFile } from "node:fs/promises";
|
|
|
16
15
|
import { fileURLToPath } from "node:url";
|
|
17
16
|
import { dirname, join } from "node:path";
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
const LEDGER_ROW_LIMIT_DEFAULT = 20000;
|
|
20
19
|
|
|
21
20
|
/** Read the checked-in browser memory-ask-engine bundle
|
|
22
21
|
* (`src/surfaces/web/memory-ask-browser.bundle.js`) — the real memory-graph answer engine
|
|
@@ -24,7 +24,7 @@ import { turnKey } from "../domain/memory/session-turns.mjs";
|
|
|
24
24
|
export const SESSIONS_DIR_REL = join(".tmct", "sessions");
|
|
25
25
|
|
|
26
26
|
export const SESSION_CLASS = "Session";
|
|
27
|
-
|
|
27
|
+
const ASKS_ABOUT_PREDICATE = "asksAbout";
|
|
28
28
|
export const ASKS_ABOUT_PROP = "mgx:asksAbout";
|
|
29
29
|
|
|
30
30
|
const QUERIES_ATTR_CAP = 500; // joined-queries attribute cap (mirrors commitMessage's cap idea)
|
|
@@ -111,9 +111,9 @@ export function upsertSession(entities, record) {
|
|
|
111
111
|
attributes: [
|
|
112
112
|
// referenced via the imported constant (single-sourced from memory/core.mjs)
|
|
113
113
|
{ prop: CREATED_AT_PROP, key: "createdAt", value: priorCreatedAt || started || new Date().toISOString() },
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
//
|
|
114
|
+
// a Session really is mutated — re-written every chat turn — so stamp updatedAt
|
|
115
|
+
// explicitly: the derived "max over edges" rule cannot see an own-attribute rewrite
|
|
116
|
+
// that touches no edge.
|
|
117
117
|
{ prop: UPDATED_AT_PROP, key: "updatedAt", value: new Date().toISOString() },
|
|
118
118
|
{ prop: "mgx:sessionStarted", key: "started", value: started },
|
|
119
119
|
{ prop: "mgx:sessionEnded", key: "ended", value: ended },
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// viz-theme.mjs — the shared assets for tmct's generated HTML pages
|
|
2
|
-
// (the ledger explorer and the plan player): the visual token table
|
|
3
|
-
//
|
|
4
|
-
// page builder needs.
|
|
2
|
+
// (the ledger explorer and the plan player): the visual token table plus the
|
|
3
|
+
// escaping helpers every page builder needs.
|
|
5
4
|
//
|
|
6
5
|
// Trust tiers are precomputed rgba() values per provenance color so pages
|
|
7
6
|
// render identically on browsers without color-mix() support.
|
|
@@ -30,7 +29,7 @@ function rgba(hex, alpha) {
|
|
|
30
29
|
return `rgba(${(n >> 16) & 255}, ${(n >> 8) & 255}, ${n & 255}, ${alpha})`;
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
|
|
32
|
+
const TOKENS = Object.freeze({
|
|
34
33
|
light: Object.freeze({
|
|
35
34
|
bg: "#F7F6F2", ink: "#23272B", muted: "#6E7168", line: "#DDD9D0", card: "#FFFFFF",
|
|
36
35
|
taught: "#2E7D4F", corpus: "#5A80AC", entail: "#B07C2E", alert: "#B0503F",
|
|
@@ -3472,18 +3472,14 @@ ${shown.join("\n")}${tail}`;
|
|
|
3472
3472
|
applyNegationFrames: () => applyNegationFrames,
|
|
3473
3473
|
ask: () => ask,
|
|
3474
3474
|
classDisplayName: () => classDisplayName,
|
|
3475
|
-
compositionalHint: () => compositionalHint,
|
|
3476
3475
|
degreeMetric: () => degreeMetric,
|
|
3477
|
-
evalComposite: () => evalComposite,
|
|
3478
3476
|
metaFallbackEntityAnswer: () => metaFallbackEntityAnswer,
|
|
3479
3477
|
normalizeQuery: () => normalizeQuery,
|
|
3480
3478
|
parseQuery: () => parseQuery,
|
|
3481
3479
|
parseQueryFull: () => parseQueryFull,
|
|
3482
|
-
relaxParse: () => relaxParse,
|
|
3483
3480
|
render: () => render,
|
|
3484
3481
|
rephraseHint: () => rephraseHint,
|
|
3485
3482
|
resolveObject: () => resolveObject,
|
|
3486
|
-
touchesRephraseHint: () => touchesRephraseHint,
|
|
3487
3483
|
traverse: () => traverse
|
|
3488
3484
|
});
|
|
3489
3485
|
function edgesOfKind2(graph, kind) {
|
|
@@ -7227,9 +7223,7 @@ ${bodyText}` : graphText, tier });
|
|
|
7227
7223
|
CARDINALITY_RULE_CONFIDENCE: () => CARDINALITY_RULE_CONFIDENCE,
|
|
7228
7224
|
CAX_DW_RULE: () => CAX_DW_RULE,
|
|
7229
7225
|
CAX_DW_RULE_CONFIDENCE: () => CAX_DW_RULE_CONFIDENCE,
|
|
7230
|
-
CAX_MAXC0_RULE: () => CAX_MAXC0_RULE,
|
|
7231
7226
|
CAX_MAXC0_RULE_CONFIDENCE: () => CAX_MAXC0_RULE_CONFIDENCE,
|
|
7232
|
-
CAX_SCO_RULE: () => CAX_SCO_RULE,
|
|
7233
7227
|
CLS_SVF1_RULE: () => CLS_SVF1_RULE,
|
|
7234
7228
|
CLS_SVF1_RULE_CONFIDENCE: () => CLS_SVF1_RULE_CONFIDENCE,
|
|
7235
7229
|
DISJOINT_PREDICATE: () => DISJOINT_PREDICATE,
|
|
@@ -7238,14 +7232,11 @@ ${bodyText}` : graphText, tier });
|
|
|
7238
7232
|
ENTAILED_SCM_SVF_PROVENANCE: () => ENTAILED_SCM_SVF_PROVENANCE,
|
|
7239
7233
|
ENTAILED_SVF1_PROVENANCE: () => ENTAILED_SVF1_PROVENANCE,
|
|
7240
7234
|
ENTAILED_TYPE_PROVENANCE: () => ENTAILED_TYPE_PROVENANCE,
|
|
7241
|
-
ON_CLASS_PREDICATE: () => ON_CLASS_PREDICATE,
|
|
7242
7235
|
ON_PROPERTY_PREDICATE: () => ON_PROPERTY_PREDICATE,
|
|
7243
|
-
SCM_CARD_RULE: () => SCM_CARD_RULE,
|
|
7244
7236
|
SCM_SVF_RULE: () => SCM_SVF_RULE,
|
|
7245
7237
|
SCM_SVF_RULE_CONFIDENCE: () => SCM_SVF_RULE_CONFIDENCE,
|
|
7246
7238
|
SOME_VALUES_FROM_PREDICATE: () => SOME_VALUES_FROM_PREDICATE,
|
|
7247
7239
|
SUBCLASS_PREDICATE: () => SUBCLASS_PREDICATE,
|
|
7248
|
-
SYLLOGISE_RULE: () => SYLLOGISE_RULE,
|
|
7249
7240
|
TYPE_PREDICATE: () => TYPE_PREDICATE,
|
|
7250
7241
|
buildCardinalityRestrictions: () => buildCardinalityRestrictions,
|
|
7251
7242
|
deriveDisjointViolations: () => deriveDisjointViolations,
|
|
@@ -7967,7 +7958,7 @@ ${bodyText}` : graphText, tier });
|
|
|
7967
7958
|
}
|
|
7968
7959
|
return null;
|
|
7969
7960
|
}
|
|
7970
|
-
var SUBCLASS_PREDICATE, SYLLOGISE_RULE, ENTAILED_PROVENANCE, TYPE_PREDICATE, CAX_SCO_RULE, ENTAILED_TYPE_PROVENANCE, DISJOINT_PREDICATE, CAX_DW_RULE, ENTAILED_DISJOINT_PROVENANCE, CAX_DW_RULE_CONFIDENCE, ON_PROPERTY_PREDICATE, SOME_VALUES_FROM_PREDICATE, CLS_SVF1_RULE, ENTAILED_SVF1_PROVENANCE, CLS_SVF1_RULE_CONFIDENCE, SEP, isSubClassOf, isType, isDisjoint, isOnProperty, isSomeValuesFrom, isOnClass, RESERVED_PREDICATES, HAS_PROPERTY_KEY, CARDINALITY_KIND_OF,
|
|
7961
|
+
var SUBCLASS_PREDICATE, SYLLOGISE_RULE, ENTAILED_PROVENANCE, TYPE_PREDICATE, CAX_SCO_RULE, ENTAILED_TYPE_PROVENANCE, DISJOINT_PREDICATE, CAX_DW_RULE, ENTAILED_DISJOINT_PROVENANCE, CAX_DW_RULE_CONFIDENCE, ON_PROPERTY_PREDICATE, SOME_VALUES_FROM_PREDICATE, CLS_SVF1_RULE, ENTAILED_SVF1_PROVENANCE, CLS_SVF1_RULE_CONFIDENCE, SEP, isSubClassOf, isType, isDisjoint, isOnProperty, isSomeValuesFrom, isOnClass, RESERVED_PREDICATES, HAS_PROPERTY_KEY, CARDINALITY_KIND_OF, SCM_SVF_RULE, ENTAILED_SCM_SVF_PROVENANCE, SCM_SVF_RULE_CONFIDENCE, CARDINALITY_RULE_CONFIDENCE, CAX_MAXC0_RULE_CONFIDENCE;
|
|
7971
7962
|
var init_syllogise = __esm({
|
|
7972
7963
|
"src/domain/syllogise.mjs"() {
|
|
7973
7964
|
init_hash();
|
|
@@ -8003,13 +7994,10 @@ ${bodyText}` : graphText, tier });
|
|
|
8003
7994
|
]);
|
|
8004
7995
|
HAS_PROPERTY_KEY = "has";
|
|
8005
7996
|
CARDINALITY_KIND_OF = { "owl:cardinality": "exactly", "owl:mincardinality": "min", "owl:maxcardinality": "max" };
|
|
8006
|
-
ON_CLASS_PREDICATE = "owl:onClass";
|
|
8007
7997
|
SCM_SVF_RULE = "someValuesFromSubsumption";
|
|
8008
7998
|
ENTAILED_SCM_SVF_PROVENANCE = `entailed:${SCM_SVF_RULE}`;
|
|
8009
7999
|
SCM_SVF_RULE_CONFIDENCE = 0.95;
|
|
8010
|
-
SCM_CARD_RULE = "cardinalityMonotonicity";
|
|
8011
8000
|
CARDINALITY_RULE_CONFIDENCE = 0.95;
|
|
8012
|
-
CAX_MAXC0_RULE = "maxCardinalityZero";
|
|
8013
8001
|
CAX_MAXC0_RULE_CONFIDENCE = 0.95;
|
|
8014
8002
|
}
|
|
8015
8003
|
});
|
|
@@ -8299,10 +8287,8 @@ ${bodyText}` : graphText, tier });
|
|
|
8299
8287
|
__export(core_exports, {
|
|
8300
8288
|
CANONICALISED_FROM_PROP: () => CANONICALISED_FROM_PROP,
|
|
8301
8289
|
CAPABLE_OF_PREDICATE: () => CAPABLE_OF_PREDICATE2,
|
|
8302
|
-
CONTRADICTION_TRUST_FLOOR: () => CONTRADICTION_TRUST_FLOOR,
|
|
8303
8290
|
CREATED_AT_PROP: () => CREATED_AT_PROP,
|
|
8304
8291
|
DEFAULT_RETENTION: () => DEFAULT_RETENTION,
|
|
8305
|
-
DERIVED_FROM_PROP: () => DERIVED_FROM_PROP,
|
|
8306
8292
|
FACT_CLASS: () => FACT_CLASS,
|
|
8307
8293
|
HAS_A_PREDICATE: () => HAS_A_PREDICATE,
|
|
8308
8294
|
IN_REPLY_TO_PROP: () => IN_REPLY_TO_PROP,
|
|
@@ -8313,7 +8299,6 @@ ${bodyText}` : graphText, tier });
|
|
|
8313
8299
|
MULTI_VALUED_PREDICATES: () => MULTI_VALUED_PREDICATES,
|
|
8314
8300
|
OPERATOR_SOURCE_ID: () => OPERATOR_SOURCE_ID,
|
|
8315
8301
|
RULE_CLASS: () => RULE_CLASS,
|
|
8316
|
-
RULE_KINDS: () => RULE_KINDS2,
|
|
8317
8302
|
RULE_KIND_ACTION_CONSTRAINT: () => RULE_KIND_ACTION_CONSTRAINT,
|
|
8318
8303
|
RULE_KIND_ACTION_EFFECT: () => RULE_KIND_ACTION_EFFECT,
|
|
8319
8304
|
RULE_KIND_ACTION_PRECOND: () => RULE_KIND_ACTION_PRECOND,
|
|
@@ -8322,12 +8307,10 @@ ${bodyText}` : graphText, tier });
|
|
|
8322
8307
|
RULE_KIND_FILTER: () => RULE_KIND_FILTER,
|
|
8323
8308
|
RULE_KIND_PROP: () => RULE_KIND_PROP,
|
|
8324
8309
|
RULE_KIND_RECURSIVE: () => RULE_KIND_RECURSIVE,
|
|
8325
|
-
RULE_NAME_PROP: () => RULE_NAME_PROP,
|
|
8326
8310
|
SAID_IN_SESSION_PROP: () => SAID_IN_SESSION_PROP,
|
|
8327
8311
|
SOURCE_CLASS: () => SOURCE_CLASS,
|
|
8328
8312
|
SOURCE_RELIABILITY_PROP: () => SOURCE_RELIABILITY_PROP,
|
|
8329
8313
|
STATED_BY_PROP: () => STATED_BY_PROP,
|
|
8330
|
-
TEACH_SOURCE_ID: () => TEACH_SOURCE_ID,
|
|
8331
8314
|
UPDATED_AT_PROP: () => UPDATED_AT_PROP,
|
|
8332
8315
|
UTTERANCE_CLASS: () => UTTERANCE_CLASS,
|
|
8333
8316
|
appendFact: () => appendFact,
|