@polycode-projects/the-mechanical-code-talker 2.7.2 → 2.7.3
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/corpus/worlds/index.json.gz +0 -0
- package/corpus/worlds/manifest.json +15 -5
- package/corpus/worlds/shards/spider-fly.jsonl.gz +0 -0
- package/corpus/worlds/src/spider-fly.jsonl +479 -0
- package/package.json +1 -1
- package/src/domain/grammar/ace.mjs +93 -12
- package/src/domain/spider-fly-world.mjs +140 -0
- package/src/services/adventure.mjs +142 -5
- package/src/surfaces/web/memory-ask-browser.bundle.js +21 -1
|
Binary file
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 1,
|
|
3
3
|
"generated": "by scripts/build-worlds-pack.mjs from corpus/worlds/src/",
|
|
4
4
|
"counts": {
|
|
5
|
-
"worlds":
|
|
6
|
-
"facts":
|
|
7
|
-
"rules":
|
|
5
|
+
"worlds": 2,
|
|
6
|
+
"facts": 527,
|
|
7
|
+
"rules": 14
|
|
8
8
|
},
|
|
9
9
|
"budgets": {
|
|
10
10
|
"sourceBytesPerWorld": 131072,
|
|
@@ -16,18 +16,28 @@
|
|
|
16
16
|
"file": "src/ashcombe-hall.jsonl",
|
|
17
17
|
"bytes": 7481,
|
|
18
18
|
"sha256": "776634e8f7db704f2895ad1557cdcb79c28e14fe8fd4202ef1d0db9b4358ca91"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"file": "src/spider-fly.jsonl",
|
|
22
|
+
"bytes": 51706,
|
|
23
|
+
"sha256": "b641936dec8fb3526dcab766268c25942c0e82ff9025bb853dad5f971bf8c029"
|
|
19
24
|
}
|
|
20
25
|
],
|
|
21
26
|
"files": [
|
|
22
27
|
{
|
|
23
28
|
"file": "index.json.gz",
|
|
24
|
-
"bytes":
|
|
25
|
-
"sha256": "
|
|
29
|
+
"bytes": 63,
|
|
30
|
+
"sha256": "507cce433933fcd95c19e6616985006d247f8cb448b3b8a6c9136c9c859e0c08"
|
|
26
31
|
},
|
|
27
32
|
{
|
|
28
33
|
"file": "shards/ashcombe-hall.jsonl.gz",
|
|
29
34
|
"bytes": 864,
|
|
30
35
|
"sha256": "468ba9ae859fc63094f5030648f07885e1e0785fb4e18e309cc4e6729c878ebf"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"file": "shards/spider-fly.jsonl.gz",
|
|
39
|
+
"bytes": 2829,
|
|
40
|
+
"sha256": "dd9f1ac66b26da2cea350fdeab17e1fe0f27d583823356e3bc189c131e3adb86"
|
|
31
41
|
}
|
|
32
42
|
]
|
|
33
43
|
}
|
|
Binary file
|
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
{"world":"spider-fly","kind":"meta","opening":"a spider waits in its web; a fly drifts in from the edge of the board. Neither is yours to move — watch, or address one by name in chat."}
|
|
2
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-1","predicate":"rdf:type","object":"cell"}
|
|
3
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-1","predicate":"mgx:has-exit-south","object":"cell-1-2"}
|
|
4
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-1","predicate":"mgx:has-exit-east","object":"cell-2-1"}
|
|
5
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-1","predicate":"mgx:in-web","object":"true"}
|
|
6
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-1","predicate":"rdf:type","object":"cell"}
|
|
7
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-1","predicate":"mgx:has-exit-south","object":"cell-2-2"}
|
|
8
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-1","predicate":"mgx:has-exit-east","object":"cell-3-1"}
|
|
9
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-1","predicate":"mgx:has-exit-west","object":"cell-1-1"}
|
|
10
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-1","predicate":"mgx:in-web","object":"true"}
|
|
11
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-1","predicate":"rdf:type","object":"cell"}
|
|
12
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-1","predicate":"mgx:has-exit-south","object":"cell-3-2"}
|
|
13
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-1","predicate":"mgx:has-exit-east","object":"cell-4-1"}
|
|
14
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-1","predicate":"mgx:has-exit-west","object":"cell-2-1"}
|
|
15
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-1","predicate":"mgx:in-web","object":"true"}
|
|
16
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-1","predicate":"rdf:type","object":"cell"}
|
|
17
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-1","predicate":"mgx:has-exit-south","object":"cell-4-2"}
|
|
18
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-1","predicate":"mgx:has-exit-east","object":"cell-5-1"}
|
|
19
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-1","predicate":"mgx:has-exit-west","object":"cell-3-1"}
|
|
20
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-1","predicate":"rdf:type","object":"cell"}
|
|
21
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-1","predicate":"mgx:has-exit-south","object":"cell-5-2"}
|
|
22
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-1","predicate":"mgx:has-exit-east","object":"cell-6-1"}
|
|
23
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-1","predicate":"mgx:has-exit-west","object":"cell-4-1"}
|
|
24
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-1","predicate":"rdf:type","object":"cell"}
|
|
25
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-1","predicate":"mgx:has-exit-south","object":"cell-6-2"}
|
|
26
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-1","predicate":"mgx:has-exit-east","object":"cell-7-1"}
|
|
27
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-1","predicate":"mgx:has-exit-west","object":"cell-5-1"}
|
|
28
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-1","predicate":"rdf:type","object":"cell"}
|
|
29
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-1","predicate":"mgx:has-exit-south","object":"cell-7-2"}
|
|
30
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-1","predicate":"mgx:has-exit-east","object":"cell-8-1"}
|
|
31
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-1","predicate":"mgx:has-exit-west","object":"cell-6-1"}
|
|
32
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-1","predicate":"rdf:type","object":"cell"}
|
|
33
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-1","predicate":"mgx:has-exit-south","object":"cell-8-2"}
|
|
34
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-1","predicate":"mgx:has-exit-east","object":"cell-9-1"}
|
|
35
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-1","predicate":"mgx:has-exit-west","object":"cell-7-1"}
|
|
36
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-1","predicate":"rdf:type","object":"cell"}
|
|
37
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-1","predicate":"mgx:has-exit-south","object":"cell-9-2"}
|
|
38
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-1","predicate":"mgx:has-exit-east","object":"cell-10-1"}
|
|
39
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-1","predicate":"mgx:has-exit-west","object":"cell-8-1"}
|
|
40
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-1","predicate":"rdf:type","object":"cell"}
|
|
41
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-1","predicate":"mgx:has-exit-south","object":"cell-10-2"}
|
|
42
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-1","predicate":"mgx:has-exit-west","object":"cell-9-1"}
|
|
43
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-2","predicate":"rdf:type","object":"cell"}
|
|
44
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-2","predicate":"mgx:has-exit-north","object":"cell-1-1"}
|
|
45
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-2","predicate":"mgx:has-exit-south","object":"cell-1-3"}
|
|
46
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-2","predicate":"mgx:has-exit-east","object":"cell-2-2"}
|
|
47
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-2","predicate":"mgx:in-web","object":"true"}
|
|
48
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-2","predicate":"rdf:type","object":"cell"}
|
|
49
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-2","predicate":"mgx:has-exit-north","object":"cell-2-1"}
|
|
50
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-2","predicate":"mgx:has-exit-south","object":"cell-2-3"}
|
|
51
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-2","predicate":"mgx:has-exit-east","object":"cell-3-2"}
|
|
52
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-2","predicate":"mgx:has-exit-west","object":"cell-1-2"}
|
|
53
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-2","predicate":"mgx:in-web","object":"true"}
|
|
54
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-2","predicate":"rdf:type","object":"cell"}
|
|
55
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-2","predicate":"mgx:has-exit-north","object":"cell-3-1"}
|
|
56
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-2","predicate":"mgx:has-exit-south","object":"cell-3-3"}
|
|
57
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-2","predicate":"mgx:has-exit-east","object":"cell-4-2"}
|
|
58
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-2","predicate":"mgx:has-exit-west","object":"cell-2-2"}
|
|
59
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-2","predicate":"mgx:in-web","object":"true"}
|
|
60
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-2","predicate":"rdf:type","object":"cell"}
|
|
61
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-2","predicate":"mgx:has-exit-north","object":"cell-4-1"}
|
|
62
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-2","predicate":"mgx:has-exit-south","object":"cell-4-3"}
|
|
63
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-2","predicate":"mgx:has-exit-east","object":"cell-5-2"}
|
|
64
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-2","predicate":"mgx:has-exit-west","object":"cell-3-2"}
|
|
65
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-2","predicate":"rdf:type","object":"cell"}
|
|
66
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-2","predicate":"mgx:has-exit-north","object":"cell-5-1"}
|
|
67
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-2","predicate":"mgx:has-exit-south","object":"cell-5-3"}
|
|
68
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-2","predicate":"mgx:has-exit-east","object":"cell-6-2"}
|
|
69
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-2","predicate":"mgx:has-exit-west","object":"cell-4-2"}
|
|
70
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-2","predicate":"rdf:type","object":"cell"}
|
|
71
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-2","predicate":"mgx:has-exit-north","object":"cell-6-1"}
|
|
72
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-2","predicate":"mgx:has-exit-south","object":"cell-6-3"}
|
|
73
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-2","predicate":"mgx:has-exit-east","object":"cell-7-2"}
|
|
74
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-2","predicate":"mgx:has-exit-west","object":"cell-5-2"}
|
|
75
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-2","predicate":"rdf:type","object":"cell"}
|
|
76
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-2","predicate":"mgx:has-exit-north","object":"cell-7-1"}
|
|
77
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-2","predicate":"mgx:has-exit-south","object":"cell-7-3"}
|
|
78
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-2","predicate":"mgx:has-exit-east","object":"cell-8-2"}
|
|
79
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-2","predicate":"mgx:has-exit-west","object":"cell-6-2"}
|
|
80
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-2","predicate":"rdf:type","object":"cell"}
|
|
81
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-2","predicate":"mgx:has-exit-north","object":"cell-8-1"}
|
|
82
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-2","predicate":"mgx:has-exit-south","object":"cell-8-3"}
|
|
83
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-2","predicate":"mgx:has-exit-east","object":"cell-9-2"}
|
|
84
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-2","predicate":"mgx:has-exit-west","object":"cell-7-2"}
|
|
85
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-2","predicate":"rdf:type","object":"cell"}
|
|
86
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-2","predicate":"mgx:has-exit-north","object":"cell-9-1"}
|
|
87
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-2","predicate":"mgx:has-exit-south","object":"cell-9-3"}
|
|
88
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-2","predicate":"mgx:has-exit-east","object":"cell-10-2"}
|
|
89
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-2","predicate":"mgx:has-exit-west","object":"cell-8-2"}
|
|
90
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-2","predicate":"rdf:type","object":"cell"}
|
|
91
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-2","predicate":"mgx:has-exit-north","object":"cell-10-1"}
|
|
92
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-2","predicate":"mgx:has-exit-south","object":"cell-10-3"}
|
|
93
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-2","predicate":"mgx:has-exit-west","object":"cell-9-2"}
|
|
94
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-3","predicate":"rdf:type","object":"cell"}
|
|
95
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-3","predicate":"mgx:has-exit-north","object":"cell-1-2"}
|
|
96
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-3","predicate":"mgx:has-exit-south","object":"cell-1-4"}
|
|
97
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-3","predicate":"mgx:has-exit-east","object":"cell-2-3"}
|
|
98
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-3","predicate":"mgx:in-web","object":"true"}
|
|
99
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-3","predicate":"rdf:type","object":"cell"}
|
|
100
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-3","predicate":"mgx:has-exit-north","object":"cell-2-2"}
|
|
101
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-3","predicate":"mgx:has-exit-south","object":"cell-2-4"}
|
|
102
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-3","predicate":"mgx:has-exit-east","object":"cell-3-3"}
|
|
103
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-3","predicate":"mgx:has-exit-west","object":"cell-1-3"}
|
|
104
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-3","predicate":"mgx:in-web","object":"true"}
|
|
105
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-3","predicate":"rdf:type","object":"cell"}
|
|
106
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-3","predicate":"mgx:has-exit-north","object":"cell-3-2"}
|
|
107
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-3","predicate":"mgx:has-exit-south","object":"cell-3-4"}
|
|
108
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-3","predicate":"mgx:has-exit-east","object":"cell-4-3"}
|
|
109
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-3","predicate":"mgx:has-exit-west","object":"cell-2-3"}
|
|
110
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-3","predicate":"mgx:in-web","object":"true"}
|
|
111
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-3","predicate":"rdf:type","object":"cell"}
|
|
112
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-3","predicate":"mgx:has-exit-north","object":"cell-4-2"}
|
|
113
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-3","predicate":"mgx:has-exit-south","object":"cell-4-4"}
|
|
114
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-3","predicate":"mgx:has-exit-east","object":"cell-5-3"}
|
|
115
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-3","predicate":"mgx:has-exit-west","object":"cell-3-3"}
|
|
116
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-3","predicate":"rdf:type","object":"cell"}
|
|
117
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-3","predicate":"mgx:has-exit-north","object":"cell-5-2"}
|
|
118
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-3","predicate":"mgx:has-exit-south","object":"cell-5-4"}
|
|
119
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-3","predicate":"mgx:has-exit-east","object":"cell-6-3"}
|
|
120
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-3","predicate":"mgx:has-exit-west","object":"cell-4-3"}
|
|
121
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-3","predicate":"rdf:type","object":"cell"}
|
|
122
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-3","predicate":"mgx:has-exit-north","object":"cell-6-2"}
|
|
123
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-3","predicate":"mgx:has-exit-south","object":"cell-6-4"}
|
|
124
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-3","predicate":"mgx:has-exit-east","object":"cell-7-3"}
|
|
125
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-3","predicate":"mgx:has-exit-west","object":"cell-5-3"}
|
|
126
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-3","predicate":"rdf:type","object":"cell"}
|
|
127
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-3","predicate":"mgx:has-exit-north","object":"cell-7-2"}
|
|
128
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-3","predicate":"mgx:has-exit-south","object":"cell-7-4"}
|
|
129
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-3","predicate":"mgx:has-exit-east","object":"cell-8-3"}
|
|
130
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-3","predicate":"mgx:has-exit-west","object":"cell-6-3"}
|
|
131
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-3","predicate":"rdf:type","object":"cell"}
|
|
132
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-3","predicate":"mgx:has-exit-north","object":"cell-8-2"}
|
|
133
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-3","predicate":"mgx:has-exit-south","object":"cell-8-4"}
|
|
134
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-3","predicate":"mgx:has-exit-east","object":"cell-9-3"}
|
|
135
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-3","predicate":"mgx:has-exit-west","object":"cell-7-3"}
|
|
136
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-3","predicate":"rdf:type","object":"cell"}
|
|
137
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-3","predicate":"mgx:has-exit-north","object":"cell-9-2"}
|
|
138
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-3","predicate":"mgx:has-exit-south","object":"cell-9-4"}
|
|
139
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-3","predicate":"mgx:has-exit-east","object":"cell-10-3"}
|
|
140
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-3","predicate":"mgx:has-exit-west","object":"cell-8-3"}
|
|
141
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-3","predicate":"rdf:type","object":"cell"}
|
|
142
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-3","predicate":"mgx:has-exit-north","object":"cell-10-2"}
|
|
143
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-3","predicate":"mgx:has-exit-south","object":"cell-10-4"}
|
|
144
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-3","predicate":"mgx:has-exit-west","object":"cell-9-3"}
|
|
145
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-4","predicate":"rdf:type","object":"cell"}
|
|
146
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-4","predicate":"mgx:has-exit-north","object":"cell-1-3"}
|
|
147
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-4","predicate":"mgx:has-exit-south","object":"cell-1-5"}
|
|
148
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-4","predicate":"mgx:has-exit-east","object":"cell-2-4"}
|
|
149
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-4","predicate":"rdf:type","object":"cell"}
|
|
150
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-4","predicate":"mgx:has-exit-north","object":"cell-2-3"}
|
|
151
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-4","predicate":"mgx:has-exit-south","object":"cell-2-5"}
|
|
152
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-4","predicate":"mgx:has-exit-east","object":"cell-3-4"}
|
|
153
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-4","predicate":"mgx:has-exit-west","object":"cell-1-4"}
|
|
154
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-4","predicate":"rdf:type","object":"cell"}
|
|
155
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-4","predicate":"mgx:has-exit-north","object":"cell-3-3"}
|
|
156
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-4","predicate":"mgx:has-exit-south","object":"cell-3-5"}
|
|
157
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-4","predicate":"mgx:has-exit-east","object":"cell-4-4"}
|
|
158
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-4","predicate":"mgx:has-exit-west","object":"cell-2-4"}
|
|
159
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-4","predicate":"rdf:type","object":"cell"}
|
|
160
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-4","predicate":"mgx:has-exit-north","object":"cell-4-3"}
|
|
161
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-4","predicate":"mgx:has-exit-south","object":"cell-4-5"}
|
|
162
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-4","predicate":"mgx:has-exit-east","object":"cell-5-4"}
|
|
163
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-4","predicate":"mgx:has-exit-west","object":"cell-3-4"}
|
|
164
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-4","predicate":"rdf:type","object":"cell"}
|
|
165
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-4","predicate":"mgx:has-exit-north","object":"cell-5-3"}
|
|
166
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-4","predicate":"mgx:has-exit-south","object":"cell-5-5"}
|
|
167
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-4","predicate":"mgx:has-exit-east","object":"cell-6-4"}
|
|
168
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-4","predicate":"mgx:has-exit-west","object":"cell-4-4"}
|
|
169
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-4","predicate":"rdf:type","object":"cell"}
|
|
170
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-4","predicate":"mgx:has-exit-north","object":"cell-6-3"}
|
|
171
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-4","predicate":"mgx:has-exit-south","object":"cell-6-5"}
|
|
172
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-4","predicate":"mgx:has-exit-east","object":"cell-7-4"}
|
|
173
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-4","predicate":"mgx:has-exit-west","object":"cell-5-4"}
|
|
174
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-4","predicate":"rdf:type","object":"cell"}
|
|
175
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-4","predicate":"mgx:has-exit-north","object":"cell-7-3"}
|
|
176
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-4","predicate":"mgx:has-exit-south","object":"cell-7-5"}
|
|
177
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-4","predicate":"mgx:has-exit-east","object":"cell-8-4"}
|
|
178
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-4","predicate":"mgx:has-exit-west","object":"cell-6-4"}
|
|
179
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-4","predicate":"rdf:type","object":"cell"}
|
|
180
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-4","predicate":"mgx:has-exit-north","object":"cell-8-3"}
|
|
181
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-4","predicate":"mgx:has-exit-south","object":"cell-8-5"}
|
|
182
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-4","predicate":"mgx:has-exit-east","object":"cell-9-4"}
|
|
183
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-4","predicate":"mgx:has-exit-west","object":"cell-7-4"}
|
|
184
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-4","predicate":"rdf:type","object":"cell"}
|
|
185
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-4","predicate":"mgx:has-exit-north","object":"cell-9-3"}
|
|
186
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-4","predicate":"mgx:has-exit-south","object":"cell-9-5"}
|
|
187
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-4","predicate":"mgx:has-exit-east","object":"cell-10-4"}
|
|
188
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-4","predicate":"mgx:has-exit-west","object":"cell-8-4"}
|
|
189
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-4","predicate":"rdf:type","object":"cell"}
|
|
190
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-4","predicate":"mgx:has-exit-north","object":"cell-10-3"}
|
|
191
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-4","predicate":"mgx:has-exit-south","object":"cell-10-5"}
|
|
192
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-4","predicate":"mgx:has-exit-west","object":"cell-9-4"}
|
|
193
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-5","predicate":"rdf:type","object":"cell"}
|
|
194
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-5","predicate":"mgx:has-exit-north","object":"cell-1-4"}
|
|
195
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-5","predicate":"mgx:has-exit-south","object":"cell-1-6"}
|
|
196
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-5","predicate":"mgx:has-exit-east","object":"cell-2-5"}
|
|
197
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-5","predicate":"rdf:type","object":"cell"}
|
|
198
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-5","predicate":"mgx:has-exit-north","object":"cell-2-4"}
|
|
199
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-5","predicate":"mgx:has-exit-south","object":"cell-2-6"}
|
|
200
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-5","predicate":"mgx:has-exit-east","object":"cell-3-5"}
|
|
201
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-5","predicate":"mgx:has-exit-west","object":"cell-1-5"}
|
|
202
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-5","predicate":"rdf:type","object":"cell"}
|
|
203
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-5","predicate":"mgx:has-exit-north","object":"cell-3-4"}
|
|
204
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-5","predicate":"mgx:has-exit-south","object":"cell-3-6"}
|
|
205
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-5","predicate":"mgx:has-exit-east","object":"cell-4-5"}
|
|
206
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-5","predicate":"mgx:has-exit-west","object":"cell-2-5"}
|
|
207
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-5","predicate":"rdf:type","object":"cell"}
|
|
208
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-5","predicate":"mgx:has-exit-north","object":"cell-4-4"}
|
|
209
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-5","predicate":"mgx:has-exit-south","object":"cell-4-6"}
|
|
210
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-5","predicate":"mgx:has-exit-east","object":"cell-5-5"}
|
|
211
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-5","predicate":"mgx:has-exit-west","object":"cell-3-5"}
|
|
212
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-5","predicate":"rdf:type","object":"cell"}
|
|
213
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-5","predicate":"mgx:has-exit-north","object":"cell-5-4"}
|
|
214
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-5","predicate":"mgx:has-exit-south","object":"cell-5-6"}
|
|
215
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-5","predicate":"mgx:has-exit-east","object":"cell-6-5"}
|
|
216
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-5","predicate":"mgx:has-exit-west","object":"cell-4-5"}
|
|
217
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-5","predicate":"rdf:type","object":"cell"}
|
|
218
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-5","predicate":"mgx:has-exit-north","object":"cell-6-4"}
|
|
219
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-5","predicate":"mgx:has-exit-south","object":"cell-6-6"}
|
|
220
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-5","predicate":"mgx:has-exit-east","object":"cell-7-5"}
|
|
221
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-5","predicate":"mgx:has-exit-west","object":"cell-5-5"}
|
|
222
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-5","predicate":"rdf:type","object":"cell"}
|
|
223
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-5","predicate":"mgx:has-exit-north","object":"cell-7-4"}
|
|
224
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-5","predicate":"mgx:has-exit-south","object":"cell-7-6"}
|
|
225
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-5","predicate":"mgx:has-exit-east","object":"cell-8-5"}
|
|
226
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-5","predicate":"mgx:has-exit-west","object":"cell-6-5"}
|
|
227
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-5","predicate":"rdf:type","object":"cell"}
|
|
228
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-5","predicate":"mgx:has-exit-north","object":"cell-8-4"}
|
|
229
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-5","predicate":"mgx:has-exit-south","object":"cell-8-6"}
|
|
230
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-5","predicate":"mgx:has-exit-east","object":"cell-9-5"}
|
|
231
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-5","predicate":"mgx:has-exit-west","object":"cell-7-5"}
|
|
232
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-5","predicate":"rdf:type","object":"cell"}
|
|
233
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-5","predicate":"mgx:has-exit-north","object":"cell-9-4"}
|
|
234
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-5","predicate":"mgx:has-exit-south","object":"cell-9-6"}
|
|
235
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-5","predicate":"mgx:has-exit-east","object":"cell-10-5"}
|
|
236
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-5","predicate":"mgx:has-exit-west","object":"cell-8-5"}
|
|
237
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-5","predicate":"rdf:type","object":"cell"}
|
|
238
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-5","predicate":"mgx:has-exit-north","object":"cell-10-4"}
|
|
239
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-5","predicate":"mgx:has-exit-south","object":"cell-10-6"}
|
|
240
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-5","predicate":"mgx:has-exit-west","object":"cell-9-5"}
|
|
241
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-6","predicate":"rdf:type","object":"cell"}
|
|
242
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-6","predicate":"mgx:has-exit-north","object":"cell-1-5"}
|
|
243
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-6","predicate":"mgx:has-exit-south","object":"cell-1-7"}
|
|
244
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-6","predicate":"mgx:has-exit-east","object":"cell-2-6"}
|
|
245
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-6","predicate":"rdf:type","object":"cell"}
|
|
246
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-6","predicate":"mgx:has-exit-north","object":"cell-2-5"}
|
|
247
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-6","predicate":"mgx:has-exit-south","object":"cell-2-7"}
|
|
248
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-6","predicate":"mgx:has-exit-east","object":"cell-3-6"}
|
|
249
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-6","predicate":"mgx:has-exit-west","object":"cell-1-6"}
|
|
250
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-6","predicate":"rdf:type","object":"cell"}
|
|
251
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-6","predicate":"mgx:has-exit-north","object":"cell-3-5"}
|
|
252
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-6","predicate":"mgx:has-exit-south","object":"cell-3-7"}
|
|
253
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-6","predicate":"mgx:has-exit-east","object":"cell-4-6"}
|
|
254
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-6","predicate":"mgx:has-exit-west","object":"cell-2-6"}
|
|
255
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-6","predicate":"rdf:type","object":"cell"}
|
|
256
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-6","predicate":"mgx:has-exit-north","object":"cell-4-5"}
|
|
257
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-6","predicate":"mgx:has-exit-south","object":"cell-4-7"}
|
|
258
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-6","predicate":"mgx:has-exit-east","object":"cell-5-6"}
|
|
259
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-6","predicate":"mgx:has-exit-west","object":"cell-3-6"}
|
|
260
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-6","predicate":"rdf:type","object":"cell"}
|
|
261
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-6","predicate":"mgx:has-exit-north","object":"cell-5-5"}
|
|
262
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-6","predicate":"mgx:has-exit-south","object":"cell-5-7"}
|
|
263
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-6","predicate":"mgx:has-exit-east","object":"cell-6-6"}
|
|
264
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-6","predicate":"mgx:has-exit-west","object":"cell-4-6"}
|
|
265
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-6","predicate":"rdf:type","object":"cell"}
|
|
266
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-6","predicate":"mgx:has-exit-north","object":"cell-6-5"}
|
|
267
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-6","predicate":"mgx:has-exit-south","object":"cell-6-7"}
|
|
268
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-6","predicate":"mgx:has-exit-east","object":"cell-7-6"}
|
|
269
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-6","predicate":"mgx:has-exit-west","object":"cell-5-6"}
|
|
270
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-6","predicate":"rdf:type","object":"cell"}
|
|
271
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-6","predicate":"mgx:has-exit-north","object":"cell-7-5"}
|
|
272
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-6","predicate":"mgx:has-exit-south","object":"cell-7-7"}
|
|
273
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-6","predicate":"mgx:has-exit-east","object":"cell-8-6"}
|
|
274
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-6","predicate":"mgx:has-exit-west","object":"cell-6-6"}
|
|
275
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-6","predicate":"rdf:type","object":"cell"}
|
|
276
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-6","predicate":"mgx:has-exit-north","object":"cell-8-5"}
|
|
277
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-6","predicate":"mgx:has-exit-south","object":"cell-8-7"}
|
|
278
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-6","predicate":"mgx:has-exit-east","object":"cell-9-6"}
|
|
279
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-6","predicate":"mgx:has-exit-west","object":"cell-7-6"}
|
|
280
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-6","predicate":"rdf:type","object":"cell"}
|
|
281
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-6","predicate":"mgx:has-exit-north","object":"cell-9-5"}
|
|
282
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-6","predicate":"mgx:has-exit-south","object":"cell-9-7"}
|
|
283
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-6","predicate":"mgx:has-exit-east","object":"cell-10-6"}
|
|
284
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-6","predicate":"mgx:has-exit-west","object":"cell-8-6"}
|
|
285
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-6","predicate":"rdf:type","object":"cell"}
|
|
286
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-6","predicate":"mgx:has-exit-north","object":"cell-10-5"}
|
|
287
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-6","predicate":"mgx:has-exit-south","object":"cell-10-7"}
|
|
288
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-6","predicate":"mgx:has-exit-west","object":"cell-9-6"}
|
|
289
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-7","predicate":"rdf:type","object":"cell"}
|
|
290
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-7","predicate":"mgx:has-exit-north","object":"cell-1-6"}
|
|
291
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-7","predicate":"mgx:has-exit-south","object":"cell-1-8"}
|
|
292
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-7","predicate":"mgx:has-exit-east","object":"cell-2-7"}
|
|
293
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-7","predicate":"rdf:type","object":"cell"}
|
|
294
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-7","predicate":"mgx:has-exit-north","object":"cell-2-6"}
|
|
295
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-7","predicate":"mgx:has-exit-south","object":"cell-2-8"}
|
|
296
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-7","predicate":"mgx:has-exit-east","object":"cell-3-7"}
|
|
297
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-7","predicate":"mgx:has-exit-west","object":"cell-1-7"}
|
|
298
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-7","predicate":"rdf:type","object":"cell"}
|
|
299
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-7","predicate":"mgx:has-exit-north","object":"cell-3-6"}
|
|
300
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-7","predicate":"mgx:has-exit-south","object":"cell-3-8"}
|
|
301
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-7","predicate":"mgx:has-exit-east","object":"cell-4-7"}
|
|
302
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-7","predicate":"mgx:has-exit-west","object":"cell-2-7"}
|
|
303
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-7","predicate":"rdf:type","object":"cell"}
|
|
304
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-7","predicate":"mgx:has-exit-north","object":"cell-4-6"}
|
|
305
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-7","predicate":"mgx:has-exit-south","object":"cell-4-8"}
|
|
306
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-7","predicate":"mgx:has-exit-east","object":"cell-5-7"}
|
|
307
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-7","predicate":"mgx:has-exit-west","object":"cell-3-7"}
|
|
308
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-7","predicate":"rdf:type","object":"cell"}
|
|
309
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-7","predicate":"mgx:has-exit-north","object":"cell-5-6"}
|
|
310
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-7","predicate":"mgx:has-exit-south","object":"cell-5-8"}
|
|
311
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-7","predicate":"mgx:has-exit-east","object":"cell-6-7"}
|
|
312
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-7","predicate":"mgx:has-exit-west","object":"cell-4-7"}
|
|
313
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-7","predicate":"rdf:type","object":"cell"}
|
|
314
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-7","predicate":"mgx:has-exit-north","object":"cell-6-6"}
|
|
315
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-7","predicate":"mgx:has-exit-south","object":"cell-6-8"}
|
|
316
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-7","predicate":"mgx:has-exit-east","object":"cell-7-7"}
|
|
317
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-7","predicate":"mgx:has-exit-west","object":"cell-5-7"}
|
|
318
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-7","predicate":"rdf:type","object":"cell"}
|
|
319
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-7","predicate":"mgx:has-exit-north","object":"cell-7-6"}
|
|
320
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-7","predicate":"mgx:has-exit-south","object":"cell-7-8"}
|
|
321
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-7","predicate":"mgx:has-exit-east","object":"cell-8-7"}
|
|
322
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-7","predicate":"mgx:has-exit-west","object":"cell-6-7"}
|
|
323
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-7","predicate":"rdf:type","object":"cell"}
|
|
324
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-7","predicate":"mgx:has-exit-north","object":"cell-8-6"}
|
|
325
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-7","predicate":"mgx:has-exit-south","object":"cell-8-8"}
|
|
326
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-7","predicate":"mgx:has-exit-east","object":"cell-9-7"}
|
|
327
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-7","predicate":"mgx:has-exit-west","object":"cell-7-7"}
|
|
328
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-7","predicate":"rdf:type","object":"cell"}
|
|
329
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-7","predicate":"mgx:has-exit-north","object":"cell-9-6"}
|
|
330
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-7","predicate":"mgx:has-exit-south","object":"cell-9-8"}
|
|
331
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-7","predicate":"mgx:has-exit-east","object":"cell-10-7"}
|
|
332
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-7","predicate":"mgx:has-exit-west","object":"cell-8-7"}
|
|
333
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-7","predicate":"rdf:type","object":"cell"}
|
|
334
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-7","predicate":"mgx:has-exit-north","object":"cell-10-6"}
|
|
335
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-7","predicate":"mgx:has-exit-south","object":"cell-10-8"}
|
|
336
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-7","predicate":"mgx:has-exit-west","object":"cell-9-7"}
|
|
337
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-8","predicate":"rdf:type","object":"cell"}
|
|
338
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-8","predicate":"mgx:has-exit-north","object":"cell-1-7"}
|
|
339
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-8","predicate":"mgx:has-exit-south","object":"cell-1-9"}
|
|
340
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-8","predicate":"mgx:has-exit-east","object":"cell-2-8"}
|
|
341
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-8","predicate":"rdf:type","object":"cell"}
|
|
342
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-8","predicate":"mgx:has-exit-north","object":"cell-2-7"}
|
|
343
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-8","predicate":"mgx:has-exit-south","object":"cell-2-9"}
|
|
344
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-8","predicate":"mgx:has-exit-east","object":"cell-3-8"}
|
|
345
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-8","predicate":"mgx:has-exit-west","object":"cell-1-8"}
|
|
346
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-8","predicate":"rdf:type","object":"cell"}
|
|
347
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-8","predicate":"mgx:has-exit-north","object":"cell-3-7"}
|
|
348
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-8","predicate":"mgx:has-exit-south","object":"cell-3-9"}
|
|
349
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-8","predicate":"mgx:has-exit-east","object":"cell-4-8"}
|
|
350
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-8","predicate":"mgx:has-exit-west","object":"cell-2-8"}
|
|
351
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-8","predicate":"rdf:type","object":"cell"}
|
|
352
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-8","predicate":"mgx:has-exit-north","object":"cell-4-7"}
|
|
353
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-8","predicate":"mgx:has-exit-south","object":"cell-4-9"}
|
|
354
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-8","predicate":"mgx:has-exit-east","object":"cell-5-8"}
|
|
355
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-8","predicate":"mgx:has-exit-west","object":"cell-3-8"}
|
|
356
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-8","predicate":"rdf:type","object":"cell"}
|
|
357
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-8","predicate":"mgx:has-exit-north","object":"cell-5-7"}
|
|
358
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-8","predicate":"mgx:has-exit-south","object":"cell-5-9"}
|
|
359
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-8","predicate":"mgx:has-exit-east","object":"cell-6-8"}
|
|
360
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-8","predicate":"mgx:has-exit-west","object":"cell-4-8"}
|
|
361
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-8","predicate":"rdf:type","object":"cell"}
|
|
362
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-8","predicate":"mgx:has-exit-north","object":"cell-6-7"}
|
|
363
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-8","predicate":"mgx:has-exit-south","object":"cell-6-9"}
|
|
364
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-8","predicate":"mgx:has-exit-east","object":"cell-7-8"}
|
|
365
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-8","predicate":"mgx:has-exit-west","object":"cell-5-8"}
|
|
366
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-8","predicate":"rdf:type","object":"cell"}
|
|
367
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-8","predicate":"mgx:has-exit-north","object":"cell-7-7"}
|
|
368
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-8","predicate":"mgx:has-exit-south","object":"cell-7-9"}
|
|
369
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-8","predicate":"mgx:has-exit-east","object":"cell-8-8"}
|
|
370
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-8","predicate":"mgx:has-exit-west","object":"cell-6-8"}
|
|
371
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-8","predicate":"rdf:type","object":"cell"}
|
|
372
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-8","predicate":"mgx:has-exit-north","object":"cell-8-7"}
|
|
373
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-8","predicate":"mgx:has-exit-south","object":"cell-8-9"}
|
|
374
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-8","predicate":"mgx:has-exit-east","object":"cell-9-8"}
|
|
375
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-8","predicate":"mgx:has-exit-west","object":"cell-7-8"}
|
|
376
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-8","predicate":"rdf:type","object":"cell"}
|
|
377
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-8","predicate":"mgx:has-exit-north","object":"cell-9-7"}
|
|
378
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-8","predicate":"mgx:has-exit-south","object":"cell-9-9"}
|
|
379
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-8","predicate":"mgx:has-exit-east","object":"cell-10-8"}
|
|
380
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-8","predicate":"mgx:has-exit-west","object":"cell-8-8"}
|
|
381
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-8","predicate":"rdf:type","object":"cell"}
|
|
382
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-8","predicate":"mgx:has-exit-north","object":"cell-10-7"}
|
|
383
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-8","predicate":"mgx:has-exit-south","object":"cell-10-9"}
|
|
384
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-8","predicate":"mgx:has-exit-west","object":"cell-9-8"}
|
|
385
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-9","predicate":"rdf:type","object":"cell"}
|
|
386
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-9","predicate":"mgx:has-exit-north","object":"cell-1-8"}
|
|
387
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-9","predicate":"mgx:has-exit-south","object":"cell-1-10"}
|
|
388
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-9","predicate":"mgx:has-exit-east","object":"cell-2-9"}
|
|
389
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-9","predicate":"rdf:type","object":"cell"}
|
|
390
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-9","predicate":"mgx:has-exit-north","object":"cell-2-8"}
|
|
391
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-9","predicate":"mgx:has-exit-south","object":"cell-2-10"}
|
|
392
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-9","predicate":"mgx:has-exit-east","object":"cell-3-9"}
|
|
393
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-9","predicate":"mgx:has-exit-west","object":"cell-1-9"}
|
|
394
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-9","predicate":"rdf:type","object":"cell"}
|
|
395
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-9","predicate":"mgx:has-exit-north","object":"cell-3-8"}
|
|
396
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-9","predicate":"mgx:has-exit-south","object":"cell-3-10"}
|
|
397
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-9","predicate":"mgx:has-exit-east","object":"cell-4-9"}
|
|
398
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-9","predicate":"mgx:has-exit-west","object":"cell-2-9"}
|
|
399
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-9","predicate":"rdf:type","object":"cell"}
|
|
400
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-9","predicate":"mgx:has-exit-north","object":"cell-4-8"}
|
|
401
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-9","predicate":"mgx:has-exit-south","object":"cell-4-10"}
|
|
402
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-9","predicate":"mgx:has-exit-east","object":"cell-5-9"}
|
|
403
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-9","predicate":"mgx:has-exit-west","object":"cell-3-9"}
|
|
404
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-9","predicate":"rdf:type","object":"cell"}
|
|
405
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-9","predicate":"mgx:has-exit-north","object":"cell-5-8"}
|
|
406
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-9","predicate":"mgx:has-exit-south","object":"cell-5-10"}
|
|
407
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-9","predicate":"mgx:has-exit-east","object":"cell-6-9"}
|
|
408
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-9","predicate":"mgx:has-exit-west","object":"cell-4-9"}
|
|
409
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-9","predicate":"rdf:type","object":"cell"}
|
|
410
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-9","predicate":"mgx:has-exit-north","object":"cell-6-8"}
|
|
411
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-9","predicate":"mgx:has-exit-south","object":"cell-6-10"}
|
|
412
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-9","predicate":"mgx:has-exit-east","object":"cell-7-9"}
|
|
413
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-9","predicate":"mgx:has-exit-west","object":"cell-5-9"}
|
|
414
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-9","predicate":"rdf:type","object":"cell"}
|
|
415
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-9","predicate":"mgx:has-exit-north","object":"cell-7-8"}
|
|
416
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-9","predicate":"mgx:has-exit-south","object":"cell-7-10"}
|
|
417
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-9","predicate":"mgx:has-exit-east","object":"cell-8-9"}
|
|
418
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-9","predicate":"mgx:has-exit-west","object":"cell-6-9"}
|
|
419
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-9","predicate":"rdf:type","object":"cell"}
|
|
420
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-9","predicate":"mgx:has-exit-north","object":"cell-8-8"}
|
|
421
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-9","predicate":"mgx:has-exit-south","object":"cell-8-10"}
|
|
422
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-9","predicate":"mgx:has-exit-east","object":"cell-9-9"}
|
|
423
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-9","predicate":"mgx:has-exit-west","object":"cell-7-9"}
|
|
424
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-9","predicate":"rdf:type","object":"cell"}
|
|
425
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-9","predicate":"mgx:has-exit-north","object":"cell-9-8"}
|
|
426
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-9","predicate":"mgx:has-exit-south","object":"cell-9-10"}
|
|
427
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-9","predicate":"mgx:has-exit-east","object":"cell-10-9"}
|
|
428
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-9","predicate":"mgx:has-exit-west","object":"cell-8-9"}
|
|
429
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-9","predicate":"rdf:type","object":"cell"}
|
|
430
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-9","predicate":"mgx:has-exit-north","object":"cell-10-8"}
|
|
431
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-9","predicate":"mgx:has-exit-south","object":"cell-10-10"}
|
|
432
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-9","predicate":"mgx:has-exit-west","object":"cell-9-9"}
|
|
433
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-10","predicate":"rdf:type","object":"cell"}
|
|
434
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-10","predicate":"mgx:has-exit-north","object":"cell-1-9"}
|
|
435
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-1-10","predicate":"mgx:has-exit-east","object":"cell-2-10"}
|
|
436
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-10","predicate":"rdf:type","object":"cell"}
|
|
437
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-10","predicate":"mgx:has-exit-north","object":"cell-2-9"}
|
|
438
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-10","predicate":"mgx:has-exit-east","object":"cell-3-10"}
|
|
439
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-2-10","predicate":"mgx:has-exit-west","object":"cell-1-10"}
|
|
440
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-10","predicate":"rdf:type","object":"cell"}
|
|
441
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-10","predicate":"mgx:has-exit-north","object":"cell-3-9"}
|
|
442
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-10","predicate":"mgx:has-exit-east","object":"cell-4-10"}
|
|
443
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-3-10","predicate":"mgx:has-exit-west","object":"cell-2-10"}
|
|
444
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-10","predicate":"rdf:type","object":"cell"}
|
|
445
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-10","predicate":"mgx:has-exit-north","object":"cell-4-9"}
|
|
446
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-10","predicate":"mgx:has-exit-east","object":"cell-5-10"}
|
|
447
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-4-10","predicate":"mgx:has-exit-west","object":"cell-3-10"}
|
|
448
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-10","predicate":"rdf:type","object":"cell"}
|
|
449
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-10","predicate":"mgx:has-exit-north","object":"cell-5-9"}
|
|
450
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-10","predicate":"mgx:has-exit-east","object":"cell-6-10"}
|
|
451
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-5-10","predicate":"mgx:has-exit-west","object":"cell-4-10"}
|
|
452
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-10","predicate":"rdf:type","object":"cell"}
|
|
453
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-10","predicate":"mgx:has-exit-north","object":"cell-6-9"}
|
|
454
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-10","predicate":"mgx:has-exit-east","object":"cell-7-10"}
|
|
455
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-6-10","predicate":"mgx:has-exit-west","object":"cell-5-10"}
|
|
456
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-10","predicate":"rdf:type","object":"cell"}
|
|
457
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-10","predicate":"mgx:has-exit-north","object":"cell-7-9"}
|
|
458
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-10","predicate":"mgx:has-exit-east","object":"cell-8-10"}
|
|
459
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-7-10","predicate":"mgx:has-exit-west","object":"cell-6-10"}
|
|
460
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-10","predicate":"rdf:type","object":"cell"}
|
|
461
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-10","predicate":"mgx:has-exit-north","object":"cell-8-9"}
|
|
462
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-10","predicate":"mgx:has-exit-east","object":"cell-9-10"}
|
|
463
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-8-10","predicate":"mgx:has-exit-west","object":"cell-7-10"}
|
|
464
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-10","predicate":"rdf:type","object":"cell"}
|
|
465
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-10","predicate":"mgx:has-exit-north","object":"cell-9-9"}
|
|
466
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-10","predicate":"mgx:has-exit-east","object":"cell-10-10"}
|
|
467
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-9-10","predicate":"mgx:has-exit-west","object":"cell-8-10"}
|
|
468
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-10","predicate":"rdf:type","object":"cell"}
|
|
469
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-10","predicate":"mgx:has-exit-north","object":"cell-10-9"}
|
|
470
|
+
{"world":"spider-fly","kind":"fact","subject":"cell-10-10","predicate":"mgx:has-exit-west","object":"cell-9-10"}
|
|
471
|
+
{"world":"spider-fly","kind":"fact","subject":"poodle","predicate":"rdfs:subClassOf","object":"dog"}
|
|
472
|
+
{"world":"spider-fly","kind":"fact","subject":"sheepdog","predicate":"rdfs:subClassOf","object":"dog"}
|
|
473
|
+
{"world":"spider-fly","kind":"fact","subject":"dog","predicate":"rdfs:subClassOf","object":"animal"}
|
|
474
|
+
{"world":"spider-fly","kind":"fact","subject":"spider","predicate":"rdfs:subClassOf","object":"arachnid"}
|
|
475
|
+
{"world":"spider-fly","kind":"fact","subject":"arachnid","predicate":"rdfs:subClassOf","object":"animal"}
|
|
476
|
+
{"world":"spider-fly","kind":"fact","subject":"fly","predicate":"rdfs:subClassOf","object":"insect"}
|
|
477
|
+
{"world":"spider-fly","kind":"fact","subject":"insect","predicate":"rdfs:subClassOf","object":"animal"}
|
|
478
|
+
{"world":"spider-fly","kind":"rule","name":"go","ruleKind":"action-signature","slots":{"subjectClass":"spider","targetClass":"cell"}}
|
|
479
|
+
{"world":"spider-fly","kind":"rule","name":"go","ruleKind":"action-effect","slots":{"predicate":"currently-in","subjectRole":"subject","objectRole":"target"}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polycode-projects/the-mechanical-code-talker",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.3",
|
|
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; no codebase index of its own.",
|
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
loadLexicon, lookupNoun, lookupVerb, lookupAdjective, lookupProperName,
|
|
31
31
|
predicateOf, numberOf, classify,
|
|
32
32
|
} from "./lexicon.mjs";
|
|
33
|
+
import { fuzzyMatchInSet } from "../interpret/fuzzy.mjs";
|
|
33
34
|
|
|
34
35
|
// "a"/"an" are the only ACE determiners that are grammatically SINGULAR-ONLY —
|
|
35
36
|
// "the" and a bare/no determiner are number-neutral (see resolveNP's
|
|
@@ -472,10 +473,65 @@ export function parseAce(sentence, lexicon = loadLexicon()) {
|
|
|
472
473
|
// other pattern: a structural fit over an undeclared word rides out as
|
|
473
474
|
// `residue` so the caller can name it; a declared word in an unusable shape
|
|
474
475
|
// is a hard null.
|
|
476
|
+
//
|
|
477
|
+
// The leading verb token(s) resolve through three tiers, each a ZERO
|
|
478
|
+
// behaviour change over the one before it for anything that already worked:
|
|
479
|
+
// an exact IMPERATIVE_VERBS match; failing that, VERB_SYNONYMS (a PHRASING a
|
|
480
|
+
// player already means literally — "pick up"/"grab" for "take"), greedy on a
|
|
481
|
+
// 2-token prefix before falling back to 1 token; failing that, a bounded
|
|
482
|
+
// fuzzy TYPO repair (distance <= 1, via the existing interpret/fuzzy.mjs
|
|
483
|
+
// matcher) against the same verb vocabulary. Only the fuzzy tier is a
|
|
484
|
+
// correction of an ERROR rather than a recognised alternate wording, so only
|
|
485
|
+
// it is reported back on the command (`corrected`) for the caller to name in
|
|
486
|
+
// its response — a synonym executes silently, a typo fix does not.
|
|
475
487
|
|
|
476
|
-
const IMPERATIVE_VERBS = new Set(["go", "take", "drop", "open", "unlock", "close", "give", "look"]);
|
|
488
|
+
const IMPERATIVE_VERBS = new Set(["go", "take", "drop", "open", "unlock", "close", "give", "look", "talk", "examine"]);
|
|
477
489
|
const IMPERATIVE_DIRECTIONS = new Set(["north", "south", "east", "west", "up", "down"]);
|
|
478
490
|
|
|
491
|
+
const VERB_SYNONYMS = new Map([
|
|
492
|
+
["pick up", "take"], ["pick", "take"], ["grab", "take"],
|
|
493
|
+
["put down", "drop"], ["set down", "drop"], ["leave", "drop"],
|
|
494
|
+
["talk to", "talk"], ["speak to", "talk"], ["speak with", "talk"], ["talk", "talk"], ["speak", "talk"],
|
|
495
|
+
["look at", "examine"], ["examine", "examine"], ["inspect", "examine"],
|
|
496
|
+
["shut", "close"],
|
|
497
|
+
]);
|
|
498
|
+
|
|
499
|
+
const VERB_FUZZY_CANDIDATES = [...new Set([...IMPERATIVE_VERBS, ...VERB_SYNONYMS.values()])];
|
|
500
|
+
const IMPERATIVE_FUZZY_BOUND = 1; // this project's existing distance-1 tolerance elsewhere (interpret/fuzzy.mjs)
|
|
501
|
+
|
|
502
|
+
// A small, hand-checked exemption (same idiom as this file's own
|
|
503
|
+
// NEVER_CANONICALIZE): common English words one edit from a closed verb, that
|
|
504
|
+
// mean something else entirely and would otherwise get silently reinterpreted
|
|
505
|
+
// and EXECUTED as that verb ("wake"/"make" -> "take" would actually take an
|
|
506
|
+
// object; "walk" -> "talk" is the same shape and breaks a real command).
|
|
507
|
+
// Checked against this repo's own WordNet corpus, not guessed.
|
|
508
|
+
const NEVER_FUZZY_VERB = new Set(["walk", "wake", "make"]);
|
|
509
|
+
|
|
510
|
+
/** Resolve the leading verb token(s) to a canonical, recognised verb: the
|
|
511
|
+
* 2-token VERB_SYNONYMS prefix FIRST (so "talk to"/"look at" resolve as
|
|
512
|
+
* themselves rather than as the bare exact verbs "talk"/"look" they'd
|
|
513
|
+
* otherwise short-circuit on, leaving their "to"/"at" stranded in the object
|
|
514
|
+
* phrase), then an exact IMPERATIVE_VERBS match, then the 1-token
|
|
515
|
+
* VERB_SYNONYMS form, then a bounded fuzzy typo repair against the same
|
|
516
|
+
* vocabulary. `consumed` is how many leading tokens the match ate (1, or 2
|
|
517
|
+
* for a two-word synonym phrase); `corrected` is non-null only for the
|
|
518
|
+
* fuzzy tier. Null when nothing at all recognises the leading token(s). */
|
|
519
|
+
function resolveImperativeVerb(toks) {
|
|
520
|
+
const first = toks[0].toLowerCase();
|
|
521
|
+
if (toks.length > 1) {
|
|
522
|
+
const twoWord = `${first} ${toks[1].toLowerCase()}`;
|
|
523
|
+
const twoHit = VERB_SYNONYMS.get(twoWord);
|
|
524
|
+
if (twoHit) return { verb: twoHit, consumed: 2, corrected: null };
|
|
525
|
+
}
|
|
526
|
+
if (IMPERATIVE_VERBS.has(first)) return { verb: first, consumed: 1, corrected: null };
|
|
527
|
+
const oneHit = VERB_SYNONYMS.get(first);
|
|
528
|
+
if (oneHit) return { verb: oneHit, consumed: 1, corrected: null };
|
|
529
|
+
if (NEVER_FUZZY_VERB.has(first)) return null;
|
|
530
|
+
const fuzzyHit = fuzzyMatchInSet(first, VERB_FUZZY_CANDIDATES, IMPERATIVE_FUZZY_BOUND);
|
|
531
|
+
if (fuzzyHit) return { verb: fuzzyHit, consumed: 1, corrected: { from: first, to: fuzzyHit } };
|
|
532
|
+
return null;
|
|
533
|
+
}
|
|
534
|
+
|
|
479
535
|
/** Resolve one imperative object phrase to its bare lexicon term. */
|
|
480
536
|
function imperativeNP(lexicon, tokens) {
|
|
481
537
|
const np = resolveNP(lexicon, tokens);
|
|
@@ -484,28 +540,53 @@ function imperativeNP(lexicon, tokens) {
|
|
|
484
540
|
}
|
|
485
541
|
|
|
486
542
|
/**
|
|
487
|
-
* Parse one imperative command against the closed verb set
|
|
488
|
-
* `{ pattern: "imperative",
|
|
489
|
-
*
|
|
490
|
-
*
|
|
491
|
-
*
|
|
543
|
+
* Parse one imperative command against the closed verb set (plus its
|
|
544
|
+
* tolerated synonyms and typo repairs). Returns `{ pattern: "imperative",
|
|
545
|
+
* verb, residue, corrected?, object?, indirectObject?, instrument?,
|
|
546
|
+
* direction? }`, a residue-carrying miss for a structural fit over
|
|
547
|
+
* undeclared words (`residue` non-empty, no slots), or null when the
|
|
548
|
+
* sentence is not an imperative of this fragment at all. `corrected`, when
|
|
549
|
+
* present, is the list of `{ from, to }` typo repairs the fuzzy tier made —
|
|
550
|
+
* the caller's cue to say what it read the line as, so a genuine miss is
|
|
551
|
+
* never confused with a silent auto-correct.
|
|
492
552
|
*/
|
|
493
553
|
export function parseImperative(sentence, lexicon = loadLexicon()) {
|
|
494
554
|
const toks = tokenize(sentence);
|
|
495
555
|
if (!toks.length) return null;
|
|
496
|
-
const
|
|
497
|
-
if (!
|
|
498
|
-
const
|
|
556
|
+
const resolved = resolveImperativeVerb(toks);
|
|
557
|
+
if (!resolved) return null;
|
|
558
|
+
const verb = resolved.verb;
|
|
559
|
+
const rest = toks.slice(resolved.consumed);
|
|
499
560
|
const lower = rest.map((t) => t.toLowerCase());
|
|
500
|
-
const
|
|
501
|
-
const
|
|
561
|
+
const corrected = resolved.corrected ? [resolved.corrected] : [];
|
|
562
|
+
const command = (fields) => ({
|
|
563
|
+
pattern: "imperative", verb, residue: [],
|
|
564
|
+
...(corrected.length ? { corrected } : {}),
|
|
565
|
+
...fields,
|
|
566
|
+
});
|
|
567
|
+
const miss = (unknown) => (unknown.length
|
|
568
|
+
? { pattern: "imperative", verb, residue: unknown, ...(corrected.length ? { corrected } : {}) }
|
|
569
|
+
: null);
|
|
502
570
|
|
|
503
571
|
if (verb === "look") {
|
|
504
572
|
if (!rest.length || (rest.length === 1 && lower[0] === "around")) return command({});
|
|
505
573
|
return null;
|
|
506
574
|
}
|
|
575
|
+
if (verb === "examine" || verb === "talk") {
|
|
576
|
+
if (!rest.length) return null;
|
|
577
|
+
const object = imperativeNP(lexicon, rest);
|
|
578
|
+
if (object.term == null) return miss(object.unknown);
|
|
579
|
+
return command({ object: object.term });
|
|
580
|
+
}
|
|
507
581
|
if (verb === "go") {
|
|
508
|
-
if (rest.length === 1
|
|
582
|
+
if (rest.length === 1) {
|
|
583
|
+
if (IMPERATIVE_DIRECTIONS.has(lower[0])) return command({ direction: lower[0] });
|
|
584
|
+
const fuzzyDir = fuzzyMatchInSet(lower[0], [...IMPERATIVE_DIRECTIONS], IMPERATIVE_FUZZY_BOUND);
|
|
585
|
+
if (fuzzyDir) {
|
|
586
|
+
corrected.push({ from: lower[0], to: fuzzyDir });
|
|
587
|
+
return command({ direction: fuzzyDir });
|
|
588
|
+
}
|
|
589
|
+
}
|
|
509
590
|
return null;
|
|
510
591
|
}
|
|
511
592
|
if (verb === "give") {
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
// spider-fly-world.mjs — the one pure definition of the spider/fly 10x10
|
|
2
|
+
// grid: cell naming, Chebyshev geometry, the fixed web block, the seed
|
|
3
|
+
// taxonomy, and the static fact/rule/meta rows the shipped world carries.
|
|
4
|
+
// Pure, no imports (PLAN_SPIDER_FLY.md §3/§4/§7) — both
|
|
5
|
+
// scripts/gen-spider-fly-world.mjs (writes corpus/worlds/src/spider-fly.jsonl)
|
|
6
|
+
// and src/services/spider-fly.mjs (the runtime) read the SAME grid/web
|
|
7
|
+
// constants from here, so the shipped world and the engine that plays it can
|
|
8
|
+
// never drift apart.
|
|
9
|
+
|
|
10
|
+
export const WORLD_NAME = "spider-fly";
|
|
11
|
+
export const GRID_SIZE = 10;
|
|
12
|
+
|
|
13
|
+
// The spider's home cell, and the web's Chebyshev radius around it (radius 1
|
|
14
|
+
// = a 3x3 block, PLAN_SPIDER_FLY.md §3). Corner-ish on purpose (§4): a spider
|
|
15
|
+
// that starts here sees close to half the board just from edge-clipping.
|
|
16
|
+
export const WEB_HOME = Object.freeze({ x: 2, y: 2 });
|
|
17
|
+
export const WEB_RADIUS = 1;
|
|
18
|
+
|
|
19
|
+
export const cellId = (x, y) => `cell-${x}-${y}`;
|
|
20
|
+
|
|
21
|
+
const CELL_ID_RE = /^cell-(\d+)-(\d+)$/;
|
|
22
|
+
|
|
23
|
+
/** {x,y} from a "cell-<x>-<y>" id, or null when the string isn't one. */
|
|
24
|
+
export function parseCellId(id) {
|
|
25
|
+
const m = CELL_ID_RE.exec(String(id ?? ""));
|
|
26
|
+
return m ? { x: Number(m[1]), y: Number(m[2]) } : null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const chebyshevDistance = (ax, ay, bx, by) => Math.max(Math.abs(ax - bx), Math.abs(ay - by));
|
|
30
|
+
|
|
31
|
+
export const inBounds = (x, y) => x >= 1 && x <= GRID_SIZE && y >= 1 && y <= GRID_SIZE;
|
|
32
|
+
|
|
33
|
+
/** Every cell within Chebyshev `radius` of (cx, cy), clipped to the board, in
|
|
34
|
+
* raster order — the one visibility primitive PLAN_SPIDER_FLY.md §4 names
|
|
35
|
+
* ("visibleCells(cx, cy, radius=4)"), shared by both agents' belief and this
|
|
36
|
+
* module's own web-block derivation below. */
|
|
37
|
+
export function visibleCells(cx, cy, radius) {
|
|
38
|
+
const out = [];
|
|
39
|
+
for (let y = Math.max(1, cy - radius); y <= Math.min(GRID_SIZE, cy + radius); y += 1) {
|
|
40
|
+
for (let x = Math.max(1, cx - radius); x <= Math.min(GRID_SIZE, cx + radius); x += 1) {
|
|
41
|
+
out.push(cellId(x, y));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export const isInWebBlock = (x, y) => chebyshevDistance(x, y, WEB_HOME.x, WEB_HOME.y) <= WEB_RADIUS;
|
|
48
|
+
|
|
49
|
+
/** Every board-edge (perimeter) cell, raster order — where a spawned fly
|
|
50
|
+
* arrives (PLAN_SPIDER_FLY.md §10). */
|
|
51
|
+
export function perimeterCells() {
|
|
52
|
+
const out = [];
|
|
53
|
+
for (let y = 1; y <= GRID_SIZE; y += 1) {
|
|
54
|
+
for (let x = 1; x <= GRID_SIZE; x += 1) {
|
|
55
|
+
if (x === 1 || x === GRID_SIZE || y === 1 || y === GRID_SIZE) out.push(cellId(x, y));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// direction -> (dx, dy). Plain labels reused verbatim from Ashcombe's
|
|
62
|
+
// mgx:has-exit-<direction> predicate (src/services/adventure.mjs) — north
|
|
63
|
+
// decreases y, south increases y, east increases x, west decreases x. Key
|
|
64
|
+
// order is the canonical direction order every consumer iterates in, for
|
|
65
|
+
// deterministic search tie-breaking.
|
|
66
|
+
export const DIRECTION_DELTA = Object.freeze({
|
|
67
|
+
north: Object.freeze({ dx: 0, dy: -1 }),
|
|
68
|
+
south: Object.freeze({ dx: 0, dy: 1 }),
|
|
69
|
+
east: Object.freeze({ dx: 1, dy: 0 }),
|
|
70
|
+
west: Object.freeze({ dx: -1, dy: 0 }),
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
/** The world's seed taxonomy (PLAN_SPIDER_FLY.md §7): enough for the
|
|
74
|
+
* ontology-to-sprite worked example (a poodle sprite, a sheepdog falling
|
|
75
|
+
* back to the generic dog sprite) to run on the default persona, no
|
|
76
|
+
* --persona-size large flag required. [subject, superclass] pairs, written
|
|
77
|
+
* as rdfs:subClassOf facts. */
|
|
78
|
+
export const SEED_TAXONOMY = Object.freeze([
|
|
79
|
+
Object.freeze(["poodle", "dog"]),
|
|
80
|
+
Object.freeze(["sheepdog", "dog"]),
|
|
81
|
+
Object.freeze(["dog", "animal"]),
|
|
82
|
+
Object.freeze(["spider", "arachnid"]),
|
|
83
|
+
Object.freeze(["arachnid", "animal"]),
|
|
84
|
+
Object.freeze(["fly", "insect"]),
|
|
85
|
+
Object.freeze(["insect", "animal"]),
|
|
86
|
+
]);
|
|
87
|
+
|
|
88
|
+
export const WORLD_OPENING =
|
|
89
|
+
"a spider waits in its web; a fly drifts in from the edge of the board. Neither is yours to move — watch, or address one by name in chat.";
|
|
90
|
+
|
|
91
|
+
/** Every fact row the shipped world source carries: cell typing, grid
|
|
92
|
+
* adjacency (mgx:has-exit-<direction>), the web block (mgx:in-web) and the
|
|
93
|
+
* seed taxonomy — plain { world, kind:"fact", subject, predicate, object }
|
|
94
|
+
* objects, the exact shape src/domain/worlds-pack.mjs's isWorldFactRow
|
|
95
|
+
* reads. Deliberately NOT spider-1/fly-1: the board is reusable static
|
|
96
|
+
* content, minted game entities are a fresh session's own state
|
|
97
|
+
* (src/services/spider-fly.mjs's startSpiderFlyGame). */
|
|
98
|
+
export function* worldFactRows() {
|
|
99
|
+
for (let y = 1; y <= GRID_SIZE; y += 1) {
|
|
100
|
+
for (let x = 1; x <= GRID_SIZE; x += 1) {
|
|
101
|
+
const id = cellId(x, y);
|
|
102
|
+
yield { world: WORLD_NAME, kind: "fact", subject: id, predicate: "rdf:type", object: "cell" };
|
|
103
|
+
for (const [direction, { dx, dy }] of Object.entries(DIRECTION_DELTA)) {
|
|
104
|
+
const nx = x + dx;
|
|
105
|
+
const ny = y + dy;
|
|
106
|
+
if (inBounds(nx, ny)) {
|
|
107
|
+
yield { world: WORLD_NAME, kind: "fact", subject: id, predicate: `mgx:has-exit-${direction}`, object: cellId(nx, ny) };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (isInWebBlock(x, y)) {
|
|
111
|
+
yield { world: WORLD_NAME, kind: "fact", subject: id, predicate: "mgx:in-web", object: "true" };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
for (const [subject, superclass] of SEED_TAXONOMY) {
|
|
116
|
+
yield { world: WORLD_NAME, kind: "fact", subject, predicate: "rdfs:subClassOf", object: superclass };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** The world's one meta row (its opening line). */
|
|
121
|
+
export function worldMetaRow() {
|
|
122
|
+
return { world: WORLD_NAME, kind: "meta", opening: WORLD_OPENING };
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** A minimal, inert rule-row family, so scripts/build-worlds-pack.mjs's
|
|
126
|
+
* shared validator ("every world needs at least one rule row") passes.
|
|
127
|
+
* src/services/spider-fly.mjs never reads these back: grid movement is
|
|
128
|
+
* hand-written pathfinding over findActionPath/findReachableSet
|
|
129
|
+
* (PLAN_SPIDER_FLY.md §5), not the taught action-Rule DSL, so this rides in
|
|
130
|
+
* the shard unused, same as an unrelated fact would. */
|
|
131
|
+
export function* worldRuleRows() {
|
|
132
|
+
yield {
|
|
133
|
+
world: WORLD_NAME, kind: "rule", name: "go", ruleKind: "action-signature",
|
|
134
|
+
slots: { subjectClass: "spider", targetClass: "cell" },
|
|
135
|
+
};
|
|
136
|
+
yield {
|
|
137
|
+
world: WORLD_NAME, kind: "rule", name: "go", ruleKind: "action-effect",
|
|
138
|
+
slots: { predicate: "currently-in", subjectRole: "subject", objectRole: "target" },
|
|
139
|
+
};
|
|
140
|
+
}
|
|
@@ -183,7 +183,7 @@ export function foldWorldState(factRows) {
|
|
|
183
183
|
// path; nothing is ever mutated in place.
|
|
184
184
|
|
|
185
185
|
const INVENTORY_RE =
|
|
186
|
-
/^(?:inventory|inv|what\s+am\s+i\s+carrying|what\s+do\s+i\s+have|what(?:'s|\s+is)\s+in\s+my\s+(?:bag|pockets?|hands?))[?.!\s]*$/i;
|
|
186
|
+
/^(?:inventory|inv|what\s+am\s+i\s+carrying|what\s+do\s+i\s+have|what\s+do\s+i\s+carry|what(?:'s|\s+is)\s+in\s+my\s+(?:bag|pockets?|hands?))[?.!\s]*$/i;
|
|
187
187
|
|
|
188
188
|
const factObjects = (rows, subject, predicate) =>
|
|
189
189
|
(rows || []).filter((r) => r.subject === subject && r.predicate === predicate).map((r) => r.object);
|
|
@@ -211,6 +211,48 @@ const carriedByPlayer = (state, thing) => {
|
|
|
211
211
|
return !!place && place.predicate === "mgx:located-in" && place.object === "player";
|
|
212
212
|
};
|
|
213
213
|
|
|
214
|
+
/** The room's real affordances — every exit, and every visible object's
|
|
215
|
+
* applicable verb — read from the EXACT SAME data take/open/talk/examine
|
|
216
|
+
* already check (visibleRoomOf, isContainer, isTyped, the placement
|
|
217
|
+
* predicate), so this list can never promise an action one of those verbs
|
|
218
|
+
* would then refuse. A locked container offers "unlock", never "open" (that
|
|
219
|
+
* would only decline); an already-open one offers neither, since there is
|
|
220
|
+
* nothing left for either verb to do. Pure. */
|
|
221
|
+
export function roomAffordances(rows, state, here) {
|
|
222
|
+
const actions = [];
|
|
223
|
+
for (const direction of state.exits.get(here)?.keys() ?? []) {
|
|
224
|
+
actions.push(`go ${direction}`);
|
|
225
|
+
}
|
|
226
|
+
for (const subject of [...state.placements.keys()].sort()) {
|
|
227
|
+
if (subject === "player") continue;
|
|
228
|
+
if (visibleRoomOf(subject, { rows, state }) !== here) continue;
|
|
229
|
+
const place = state.placements.get(subject);
|
|
230
|
+
const container = isContainer(rows, subject);
|
|
231
|
+
if (container && place.predicate === "mgx:stands-locked-in") {
|
|
232
|
+
actions.push(`unlock ${subject}`);
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
if (container && place.predicate === "mgx:fixed-in") {
|
|
236
|
+
if (!state.openness.get(subject)?.open) actions.push(`open ${subject}`);
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
if (!container && place.predicate === "mgx:fixed-in") {
|
|
240
|
+
actions.push(`examine ${subject}`);
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
if (isTyped(rows, subject, "person")) {
|
|
244
|
+
actions.push(`talk to ${subject}`);
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
if (place.predicate === "mgx:located-in") {
|
|
248
|
+
actions.push(`take ${subject}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return actions;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
const affordanceSuffix = (actions) => (actions.length ? ` You can: ${actions.join(", ")}.` : "");
|
|
255
|
+
|
|
214
256
|
/** The effect predicate a family writes (its action-effect row's slot, with
|
|
215
257
|
* the mgx: prefix rule readers re-attach). Null when the family carries no
|
|
216
258
|
* effect row — the open/unlock/close families, whose datatype state writes
|
|
@@ -291,6 +333,20 @@ const VIEW_EXCLUDED_PREDICATES = new Set([
|
|
|
291
333
|
const sentenceCase = (term) => String(term).charAt(0).toUpperCase() + String(term).slice(1);
|
|
292
334
|
const typePhrase = (object) => (/^[aeiou]/.test(object) ? "is an" : "is a");
|
|
293
335
|
|
|
336
|
+
// The default human persona's always-active background corpus
|
|
337
|
+
// (corpus/tier2/human.jsonl) deliberately overlaps Ashcombe's own room and
|
|
338
|
+
// object names ("garden has a flower"), so the digest's broad search surfaces
|
|
339
|
+
// these alongside the world's own facts. They stay in the prose (they're
|
|
340
|
+
// real, sourced facts) but must read as prose, not as an untranslated triple
|
|
341
|
+
// ("Garden mgx:hasA flower") that looks exactly like a bug report — the same
|
|
342
|
+
// curated wording chat.mjs's own FACT_PREDICATE_PHRASES already uses for
|
|
343
|
+
// these three ConceptNet-sourced predicates.
|
|
344
|
+
const BACKGROUND_FACT_PHRASES = {
|
|
345
|
+
"mgx:hasA": "has",
|
|
346
|
+
"mgx:usedFor": "is used for",
|
|
347
|
+
"mgx:atLocation": "is found in",
|
|
348
|
+
};
|
|
349
|
+
|
|
294
350
|
/** The digest's fact view: current placements (folded), exits, typing and
|
|
295
351
|
* every other surviving fact, with phrase predicates and sentence-cased
|
|
296
352
|
* subjects so the pipeline's sentence splitter sees real sentences. Pure. */
|
|
@@ -329,6 +385,7 @@ export function worldDigestRows(rows, state) {
|
|
|
329
385
|
if (exit) { push(row.subject, `has an exit ${exit[1]} to the`, row.object); continue; }
|
|
330
386
|
if (row.predicate === "rdf:type") { push(row.subject, typePhrase(row.object), row.object); continue; }
|
|
331
387
|
if (row.predicate === "mgx:works-in") { push(row.subject, "works in the", row.object); continue; }
|
|
388
|
+
if (BACKGROUND_FACT_PHRASES[row.predicate]) { push(row.subject, BACKGROUND_FACT_PHRASES[row.predicate], row.object); continue; }
|
|
332
389
|
push(row.subject, row.predicate, row.object);
|
|
333
390
|
}
|
|
334
391
|
return out;
|
|
@@ -365,6 +422,24 @@ const answer = (text, note, { goal, miss = false } = {}) => ({
|
|
|
365
422
|
text, note, lane: "game-answer", miss, ...(goal ? { goal } : {}),
|
|
366
423
|
});
|
|
367
424
|
|
|
425
|
+
/** A container's open/locked status, stated plainly, and (only once already
|
|
426
|
+
* open) its visible contents — the one thing examine/talk's reused
|
|
427
|
+
* worldDigest call never states on its own, since mgx:is-open is a
|
|
428
|
+
* VIEW_EXCLUDED_PREDICATE. Never reads mgx:hidden-in facts: an unopened
|
|
429
|
+
* container's hidden contents stay exactly as hidden as `open` leaves them. */
|
|
430
|
+
function containerStatusPhrase(object, { state }) {
|
|
431
|
+
const place = state.placements.get(object);
|
|
432
|
+
if (place?.predicate === "mgx:stands-locked-in") return `the ${object} is locked.`;
|
|
433
|
+
if (!state.openness.get(object)?.open) return `the ${object} is closed.`;
|
|
434
|
+
const contents = [...state.placements]
|
|
435
|
+
.filter(([, p]) => p.predicate === "mgx:located-in" && p.object === object)
|
|
436
|
+
.map(([thing]) => thing)
|
|
437
|
+
.sort();
|
|
438
|
+
return contents.length
|
|
439
|
+
? `the ${object} is open — inside: the ${contents.join(", the ")}.`
|
|
440
|
+
: `the ${object} is open. It's empty.`;
|
|
441
|
+
}
|
|
442
|
+
|
|
368
443
|
async function runWorldCommand(cmd, { world, memoryDir, env, graph, cache }) {
|
|
369
444
|
const memory = await loadMemory(memoryDir);
|
|
370
445
|
const rows = readFactRows(memory);
|
|
@@ -389,13 +464,35 @@ async function runWorldCommand(cmd, { world, memoryDir, env, graph, cache }) {
|
|
|
389
464
|
|
|
390
465
|
if (cmd.verb === "look") {
|
|
391
466
|
const digest = await worldDigest(here, { memoryDir, memory, rows, state, graph });
|
|
467
|
+
const actions = roomAffordances(rows, state, here);
|
|
392
468
|
return answer(
|
|
393
|
-
digest ?? `you are in the ${here}. Nothing more about it is written down yet
|
|
394
|
-
noteFor(`look — an extractive completions digest over the current world facts mentioning "${here}"`),
|
|
469
|
+
`${digest ?? `you are in the ${here}. Nothing more about it is written down yet.`}${affordanceSuffix(actions)}`,
|
|
470
|
+
noteFor(`look — an extractive completions digest over the current world facts mentioning "${here}"; appended the room's roomAffordances action list`),
|
|
395
471
|
{ goal: `look around the ${here}` },
|
|
396
472
|
);
|
|
397
473
|
}
|
|
398
474
|
|
|
475
|
+
if (cmd.verb === "examine" || cmd.verb === "talk") {
|
|
476
|
+
const object = cmd.object;
|
|
477
|
+
if (visibleRoomOf(object, { rows, state }) !== here) {
|
|
478
|
+
return answer(
|
|
479
|
+
`I don't see a ${object} here.`,
|
|
480
|
+
noteFor(`${cmd.verb} — ${object} isn't visible in the ${here}; declined, hidden things stay hidden`),
|
|
481
|
+
{ miss: true },
|
|
482
|
+
);
|
|
483
|
+
}
|
|
484
|
+
const person = isTyped(rows, object, "person");
|
|
485
|
+
const digest = await worldDigest(object, { memoryDir, memory, rows, state, graph });
|
|
486
|
+
const body = digest ?? `nothing more about the ${object} is written down yet.`;
|
|
487
|
+
const containerNote = !person && isContainer(rows, object) ? ` ${containerStatusPhrase(object, { state })}` : "";
|
|
488
|
+
const text = person ? `the ${object} doesn't have much to say, but you know: ${body}` : `${body}${containerNote}`;
|
|
489
|
+
return answer(
|
|
490
|
+
text,
|
|
491
|
+
noteFor(`${cmd.verb} — an extractive completions digest over the current world facts mentioning "${object}"`),
|
|
492
|
+
{ goal: cmd.verb === "talk" ? `talk to the ${object}` : `take a closer look at the ${object}` },
|
|
493
|
+
);
|
|
494
|
+
}
|
|
495
|
+
|
|
399
496
|
const families = actionFamilies(readRuleRows(memory));
|
|
400
497
|
const family = families.get(cmd.verb);
|
|
401
498
|
if (!family) {
|
|
@@ -415,7 +512,20 @@ async function runWorldCommand(cmd, { world, memoryDir, env, graph, cache }) {
|
|
|
415
512
|
const npcPass = runNpcPass({ rows, state, k, families, playerRoomAfter });
|
|
416
513
|
await writeWorldTurn(memoryDir, world, k, [...facts, ...npcPass.writes], cache);
|
|
417
514
|
const text2 = npcPass.lines.length ? `${text} ${npcPass.lines.join(" ")}` : text;
|
|
418
|
-
|
|
515
|
+
// Auto-relook: every state-changing command ends in the same shape a
|
|
516
|
+
// manual "look" produces, read from the FRESH post-write state, so the
|
|
517
|
+
// player is never left to retype "look" to see what just changed.
|
|
518
|
+
const freshMemory = await loadMemory(memoryDir);
|
|
519
|
+
const freshRows = readFactRows(freshMemory);
|
|
520
|
+
const freshState = foldWorldState(freshRows);
|
|
521
|
+
const relookDigest = await worldDigest(playerRoomAfter, { memoryDir, memory: freshMemory, rows: freshRows, state: freshState, graph });
|
|
522
|
+
const actions = roomAffordances(freshRows, freshState, playerRoomAfter);
|
|
523
|
+
const relook = `you are in the ${playerRoomAfter}. ${relookDigest ?? "Nothing more about it is written down yet."}${affordanceSuffix(actions)}`;
|
|
524
|
+
return answer(
|
|
525
|
+
`${text2} ${relook}`,
|
|
526
|
+
noteFor(`${detail}; turn ${k} snapshots written through appendFacts${npcPass.writes.length ? `; NPC pass fired ${npcPass.writes.length} scheduled move(s)` : ""}; auto-relook appended for the ${playerRoomAfter}`),
|
|
527
|
+
{ goal },
|
|
528
|
+
);
|
|
419
529
|
};
|
|
420
530
|
const object = cmd.object;
|
|
421
531
|
const place = object ? state.placements.get(object) ?? null : null;
|
|
@@ -649,6 +759,21 @@ async function inventoryAnswer({ memoryDir, graph }) {
|
|
|
649
759
|
);
|
|
650
760
|
}
|
|
651
761
|
|
|
762
|
+
/** Reconstruct the corrected command's surface form ("go east", "take
|
|
763
|
+
* lamp") for the "(reading that as ...)" note — from the parsed command's
|
|
764
|
+
* own resolved fields, not the raw input, so it always names what actually
|
|
765
|
+
* ran. */
|
|
766
|
+
function renderedImperativeCommand(cmd) {
|
|
767
|
+
const parts = [cmd.verb];
|
|
768
|
+
if (cmd.direction) parts.push(cmd.direction);
|
|
769
|
+
else if (cmd.object) {
|
|
770
|
+
parts.push(cmd.object);
|
|
771
|
+
if (cmd.indirectObject) parts.push("to", cmd.indirectObject);
|
|
772
|
+
if (cmd.instrument) parts.push("with", cmd.instrument);
|
|
773
|
+
}
|
|
774
|
+
return parts.join(" ");
|
|
775
|
+
}
|
|
776
|
+
|
|
652
777
|
// ---- the lane ----------------------------------------------------------------
|
|
653
778
|
|
|
654
779
|
/**
|
|
@@ -711,7 +836,19 @@ export async function adventureTurn(line, { planHolder, memoryDir, sessionId = "
|
|
|
711
836
|
}
|
|
712
837
|
if (INVENTORY_RE.test(line)) return inventoryAnswer({ memoryDir, graph });
|
|
713
838
|
const cmd = parseImperative(line, lexicon ?? undefined);
|
|
714
|
-
if (cmd)
|
|
839
|
+
if (cmd) {
|
|
840
|
+
const result = await runWorldCommand(cmd, { world: adventure.world, memoryDir, env, graph, cache });
|
|
841
|
+
if (!cmd.corrected?.length) return result;
|
|
842
|
+
// A fuzzy-repaired verb or direction still executes normally, but the
|
|
843
|
+
// response says what it read the line as, so a genuine miss is never
|
|
844
|
+
// confused with a silent auto-correct (the same discipline VERB_SYNONYMS
|
|
845
|
+
// doesn't need, since a recognised synonym is a wording, not a typo).
|
|
846
|
+
return {
|
|
847
|
+
...result,
|
|
848
|
+
text: `(reading that as "${renderedImperativeCommand(cmd)}") ${result.text}`,
|
|
849
|
+
note: `${result.note}; corrected ${cmd.corrected.map((c) => `"${c.from}" -> "${c.to}"`).join(", ")} before executing`,
|
|
850
|
+
};
|
|
851
|
+
}
|
|
715
852
|
const whereAside = await worldWhereAnswer(line, { memoryDir });
|
|
716
853
|
if (whereAside) return whereAside;
|
|
717
854
|
return null; // a mid-game aside — the ordinary lanes answer, world untouched
|
|
@@ -21619,10 +21619,11 @@ ${codeblock}`, options);
|
|
|
21619
21619
|
});
|
|
21620
21620
|
|
|
21621
21621
|
// src/domain/grammar/ace.mjs
|
|
21622
|
-
var PATTERN_SUB_CLASS_OF, PATTERN_TYPE_ASSERTION, PATTERN_RELATION, PATTERN_SOME_VALUES_FROM, PATTERN_CARDINALITY, PATTERN_DISJOINT_WITH, PATTERN_POSSESSIVE, PATTERN_ADJECTIVE, PATTERN_CAPABILITY, PATTERNS;
|
|
21622
|
+
var PATTERN_SUB_CLASS_OF, PATTERN_TYPE_ASSERTION, PATTERN_RELATION, PATTERN_SOME_VALUES_FROM, PATTERN_CARDINALITY, PATTERN_DISJOINT_WITH, PATTERN_POSSESSIVE, PATTERN_ADJECTIVE, PATTERN_CAPABILITY, PATTERNS, IMPERATIVE_VERBS, VERB_SYNONYMS, VERB_FUZZY_CANDIDATES;
|
|
21623
21623
|
var init_ace2 = __esm({
|
|
21624
21624
|
"src/domain/grammar/ace.mjs"() {
|
|
21625
21625
|
init_lexicon();
|
|
21626
|
+
init_fuzzy();
|
|
21626
21627
|
PATTERN_SUB_CLASS_OF = "subClassOf";
|
|
21627
21628
|
PATTERN_TYPE_ASSERTION = "typeAssertion";
|
|
21628
21629
|
PATTERN_RELATION = "relation";
|
|
@@ -21643,6 +21644,25 @@ ${codeblock}`, options);
|
|
|
21643
21644
|
PATTERN_ADJECTIVE,
|
|
21644
21645
|
PATTERN_CAPABILITY
|
|
21645
21646
|
]);
|
|
21647
|
+
IMPERATIVE_VERBS = /* @__PURE__ */ new Set(["go", "take", "drop", "open", "unlock", "close", "give", "look", "talk", "examine"]);
|
|
21648
|
+
VERB_SYNONYMS = /* @__PURE__ */ new Map([
|
|
21649
|
+
["pick up", "take"],
|
|
21650
|
+
["pick", "take"],
|
|
21651
|
+
["grab", "take"],
|
|
21652
|
+
["put down", "drop"],
|
|
21653
|
+
["set down", "drop"],
|
|
21654
|
+
["leave", "drop"],
|
|
21655
|
+
["talk to", "talk"],
|
|
21656
|
+
["speak to", "talk"],
|
|
21657
|
+
["speak with", "talk"],
|
|
21658
|
+
["talk", "talk"],
|
|
21659
|
+
["speak", "talk"],
|
|
21660
|
+
["look at", "examine"],
|
|
21661
|
+
["examine", "examine"],
|
|
21662
|
+
["inspect", "examine"],
|
|
21663
|
+
["shut", "close"]
|
|
21664
|
+
]);
|
|
21665
|
+
VERB_FUZZY_CANDIDATES = [.../* @__PURE__ */ new Set([...IMPERATIVE_VERBS, ...VERB_SYNONYMS.values()])];
|
|
21646
21666
|
}
|
|
21647
21667
|
});
|
|
21648
21668
|
|