@chanmeng666/archlang-mcp 0.1.0
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/LICENSE +22 -0
- package/README.md +109 -0
- package/dist/archlang.gbnf +119 -0
- package/dist/llms-full.txt +599 -0
- package/dist/plan.schema.json +593 -0
- package/dist/server.js +266 -0
- package/dist/server.js.map +1 -0
- package/dist/spec.llm.md +241 -0
- package/package.json +53 -0
- package/server.json +24 -0
|
@@ -0,0 +1,593 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://archlang-docs.vercel.app/plan.schema.json",
|
|
4
|
+
"title": "ArchLang Plan",
|
|
5
|
+
"description": "A floor plan as structured JSON (RPLAN / DStruct2Design convention). Coordinates are millimetres; the origin is top-left with +x right and +y DOWN. Fields marked output-only are produced by planToJson and ignored on input. Scripting (let/for/if/component) and import are not representable — author those in .arch source.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"plan",
|
|
9
|
+
"rooms",
|
|
10
|
+
"walls",
|
|
11
|
+
"openings",
|
|
12
|
+
"furniture"
|
|
13
|
+
],
|
|
14
|
+
"additionalProperties": false,
|
|
15
|
+
"properties": {
|
|
16
|
+
"version": {
|
|
17
|
+
"const": 1,
|
|
18
|
+
"description": "Schema version. Always 1."
|
|
19
|
+
},
|
|
20
|
+
"plan": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "Plan name (shown in the title block)."
|
|
23
|
+
},
|
|
24
|
+
"units": {
|
|
25
|
+
"const": "mm",
|
|
26
|
+
"description": "Distance unit. Only millimetres are supported."
|
|
27
|
+
},
|
|
28
|
+
"grid": {
|
|
29
|
+
"type": "number",
|
|
30
|
+
"description": "Snap module in millimetres; 0 or omitted disables snapping."
|
|
31
|
+
},
|
|
32
|
+
"scale": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"pattern": "^\\d+:\\d+$",
|
|
35
|
+
"description": "Drawing scale (annotation only), e.g. \"1:50\"."
|
|
36
|
+
},
|
|
37
|
+
"north": {
|
|
38
|
+
"description": "North orientation: a cardinal keyword or an explicit bearing in degrees.",
|
|
39
|
+
"oneOf": [
|
|
40
|
+
{
|
|
41
|
+
"enum": [
|
|
42
|
+
"up",
|
|
43
|
+
"down",
|
|
44
|
+
"left",
|
|
45
|
+
"right"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"type": "object",
|
|
50
|
+
"required": [
|
|
51
|
+
"deg"
|
|
52
|
+
],
|
|
53
|
+
"additionalProperties": false,
|
|
54
|
+
"properties": {
|
|
55
|
+
"deg": {
|
|
56
|
+
"type": "number"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"room_count": {
|
|
63
|
+
"type": "integer",
|
|
64
|
+
"description": "Output-only: number of rooms."
|
|
65
|
+
},
|
|
66
|
+
"total_area": {
|
|
67
|
+
"type": "number",
|
|
68
|
+
"description": "Output-only: total floor area in square metres."
|
|
69
|
+
},
|
|
70
|
+
"room_types": {
|
|
71
|
+
"type": "array",
|
|
72
|
+
"description": "Output-only: the distinct room_type values present, in first-appearance order.",
|
|
73
|
+
"items": {
|
|
74
|
+
"enum": [
|
|
75
|
+
"LivingRoom",
|
|
76
|
+
"MasterRoom",
|
|
77
|
+
"Kitchen",
|
|
78
|
+
"Bathroom",
|
|
79
|
+
"DiningRoom",
|
|
80
|
+
"ChildRoom",
|
|
81
|
+
"StudyRoom",
|
|
82
|
+
"SecondRoom",
|
|
83
|
+
"GuestRoom",
|
|
84
|
+
"Balcony",
|
|
85
|
+
"Entrance",
|
|
86
|
+
"Storage",
|
|
87
|
+
"Room"
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"rooms": {
|
|
92
|
+
"type": "array",
|
|
93
|
+
"description": "Room rectangles.",
|
|
94
|
+
"items": {
|
|
95
|
+
"type": "object",
|
|
96
|
+
"additionalProperties": false,
|
|
97
|
+
"required": [
|
|
98
|
+
"x",
|
|
99
|
+
"y",
|
|
100
|
+
"width",
|
|
101
|
+
"height"
|
|
102
|
+
],
|
|
103
|
+
"properties": {
|
|
104
|
+
"id": {
|
|
105
|
+
"type": "string",
|
|
106
|
+
"description": "Unique room id (referenced by furniture/openings)."
|
|
107
|
+
},
|
|
108
|
+
"label": {
|
|
109
|
+
"type": "string",
|
|
110
|
+
"description": "Human-readable room label drawn in the room."
|
|
111
|
+
},
|
|
112
|
+
"room_type": {
|
|
113
|
+
"enum": [
|
|
114
|
+
"LivingRoom",
|
|
115
|
+
"MasterRoom",
|
|
116
|
+
"Kitchen",
|
|
117
|
+
"Bathroom",
|
|
118
|
+
"DiningRoom",
|
|
119
|
+
"ChildRoom",
|
|
120
|
+
"StudyRoom",
|
|
121
|
+
"SecondRoom",
|
|
122
|
+
"GuestRoom",
|
|
123
|
+
"Balcony",
|
|
124
|
+
"Entrance",
|
|
125
|
+
"Storage",
|
|
126
|
+
"Room"
|
|
127
|
+
],
|
|
128
|
+
"description": "Canonical RPLAN-style room category (mapped bidirectionally from `uses`)."
|
|
129
|
+
},
|
|
130
|
+
"uses": {
|
|
131
|
+
"type": "array",
|
|
132
|
+
"description": "Explicit ArchLang function tags; authoritative over room_type when present.",
|
|
133
|
+
"items": {
|
|
134
|
+
"enum": [
|
|
135
|
+
"living",
|
|
136
|
+
"kitchen",
|
|
137
|
+
"dining",
|
|
138
|
+
"bedroom",
|
|
139
|
+
"bath",
|
|
140
|
+
"wc",
|
|
141
|
+
"hall",
|
|
142
|
+
"circulation",
|
|
143
|
+
"storage",
|
|
144
|
+
"utility",
|
|
145
|
+
"office",
|
|
146
|
+
"entry"
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"x": {
|
|
151
|
+
"type": "number",
|
|
152
|
+
"description": "Top-left corner X in millimetres."
|
|
153
|
+
},
|
|
154
|
+
"y": {
|
|
155
|
+
"type": "number",
|
|
156
|
+
"description": "Top-left corner Y in millimetres."
|
|
157
|
+
},
|
|
158
|
+
"width": {
|
|
159
|
+
"type": "number",
|
|
160
|
+
"description": "Room width in millimetres."
|
|
161
|
+
},
|
|
162
|
+
"height": {
|
|
163
|
+
"type": "number",
|
|
164
|
+
"description": "Room height in millimetres."
|
|
165
|
+
},
|
|
166
|
+
"area": {
|
|
167
|
+
"type": "number",
|
|
168
|
+
"description": "Output-only: floor area in square metres (2 dp)."
|
|
169
|
+
},
|
|
170
|
+
"floor_polygon": {
|
|
171
|
+
"type": "array",
|
|
172
|
+
"description": "Output-only: the room rectangle as a 4-point polygon (clockwise from top-left).",
|
|
173
|
+
"items": {
|
|
174
|
+
"type": "object",
|
|
175
|
+
"additionalProperties": false,
|
|
176
|
+
"required": [
|
|
177
|
+
"x",
|
|
178
|
+
"y"
|
|
179
|
+
],
|
|
180
|
+
"properties": {
|
|
181
|
+
"x": {
|
|
182
|
+
"type": "number",
|
|
183
|
+
"description": "X coordinate in millimetres (origin top-left, +x right)."
|
|
184
|
+
},
|
|
185
|
+
"y": {
|
|
186
|
+
"type": "number",
|
|
187
|
+
"description": "Y coordinate in millimetres (+y DOWN, screen convention)."
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
"walls": {
|
|
196
|
+
"type": "array",
|
|
197
|
+
"description": "Wall polylines (poché-filled; host doors/windows/openings).",
|
|
198
|
+
"items": {
|
|
199
|
+
"type": "object",
|
|
200
|
+
"additionalProperties": false,
|
|
201
|
+
"required": [
|
|
202
|
+
"points"
|
|
203
|
+
],
|
|
204
|
+
"properties": {
|
|
205
|
+
"id": {
|
|
206
|
+
"type": "string",
|
|
207
|
+
"description": "Unique wall id."
|
|
208
|
+
},
|
|
209
|
+
"category": {
|
|
210
|
+
"type": "string",
|
|
211
|
+
"description": "Free-form category, e.g. \"exterior\" or \"partition\"; also a host reference."
|
|
212
|
+
},
|
|
213
|
+
"points": {
|
|
214
|
+
"type": "array",
|
|
215
|
+
"minItems": 2,
|
|
216
|
+
"description": "Polyline vertices in order.",
|
|
217
|
+
"items": {
|
|
218
|
+
"type": "object",
|
|
219
|
+
"additionalProperties": false,
|
|
220
|
+
"required": [
|
|
221
|
+
"x",
|
|
222
|
+
"y"
|
|
223
|
+
],
|
|
224
|
+
"properties": {
|
|
225
|
+
"x": {
|
|
226
|
+
"type": "number",
|
|
227
|
+
"description": "X coordinate in millimetres (origin top-left, +x right)."
|
|
228
|
+
},
|
|
229
|
+
"y": {
|
|
230
|
+
"type": "number",
|
|
231
|
+
"description": "Y coordinate in millimetres (+y DOWN, screen convention)."
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
"thickness": {
|
|
237
|
+
"type": "number",
|
|
238
|
+
"description": "Wall thickness in millimetres."
|
|
239
|
+
},
|
|
240
|
+
"closed": {
|
|
241
|
+
"type": "boolean",
|
|
242
|
+
"description": "Whether the polyline closes back to its first vertex."
|
|
243
|
+
},
|
|
244
|
+
"material": {
|
|
245
|
+
"type": "string",
|
|
246
|
+
"description": "Hatch material (brick, concrete, …); omitted for the default poché."
|
|
247
|
+
},
|
|
248
|
+
"material_scale": {
|
|
249
|
+
"type": "number",
|
|
250
|
+
"description": "Hatch tile-size multiplier (after material)."
|
|
251
|
+
},
|
|
252
|
+
"material_angle": {
|
|
253
|
+
"type": "number",
|
|
254
|
+
"description": "Extra hatch rotation in degrees (after material)."
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
"openings": {
|
|
260
|
+
"type": "array",
|
|
261
|
+
"description": "Doors, windows and leaf-less cased openings — all must lie on a wall.",
|
|
262
|
+
"items": {
|
|
263
|
+
"type": "object",
|
|
264
|
+
"additionalProperties": false,
|
|
265
|
+
"required": [
|
|
266
|
+
"kind",
|
|
267
|
+
"width"
|
|
268
|
+
],
|
|
269
|
+
"properties": {
|
|
270
|
+
"kind": {
|
|
271
|
+
"enum": [
|
|
272
|
+
"door",
|
|
273
|
+
"window",
|
|
274
|
+
"opening"
|
|
275
|
+
],
|
|
276
|
+
"description": "Opening kind."
|
|
277
|
+
},
|
|
278
|
+
"id": {
|
|
279
|
+
"type": "string",
|
|
280
|
+
"description": "Unique opening id."
|
|
281
|
+
},
|
|
282
|
+
"x": {
|
|
283
|
+
"type": "number",
|
|
284
|
+
"description": "Center X in millimetres (on the wall centerline)."
|
|
285
|
+
},
|
|
286
|
+
"y": {
|
|
287
|
+
"type": "number",
|
|
288
|
+
"description": "Center Y in millimetres (on the wall centerline)."
|
|
289
|
+
},
|
|
290
|
+
"on": {
|
|
291
|
+
"type": "object",
|
|
292
|
+
"additionalProperties": false,
|
|
293
|
+
"required": [
|
|
294
|
+
"wall",
|
|
295
|
+
"at"
|
|
296
|
+
],
|
|
297
|
+
"description": "Wall-attached placement (alternative to x/y): walk `wall` to position `at`.",
|
|
298
|
+
"properties": {
|
|
299
|
+
"wall": {
|
|
300
|
+
"type": "string",
|
|
301
|
+
"description": "Host wall id or category to walk."
|
|
302
|
+
},
|
|
303
|
+
"at": {
|
|
304
|
+
"type": "string",
|
|
305
|
+
"description": "Position along the wall: a percentage (\"40%\"), millimetres (\"1200\"), or \"center\"."
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
"width": {
|
|
310
|
+
"type": "number",
|
|
311
|
+
"description": "Opening width in millimetres."
|
|
312
|
+
},
|
|
313
|
+
"wall": {
|
|
314
|
+
"type": "string",
|
|
315
|
+
"description": "Host wall by id or category (else nearest)."
|
|
316
|
+
},
|
|
317
|
+
"hinge": {
|
|
318
|
+
"enum": [
|
|
319
|
+
"left",
|
|
320
|
+
"right"
|
|
321
|
+
],
|
|
322
|
+
"description": "Door hinge side relative to the wall direction."
|
|
323
|
+
},
|
|
324
|
+
"swing": {
|
|
325
|
+
"enum": [
|
|
326
|
+
"in",
|
|
327
|
+
"out"
|
|
328
|
+
],
|
|
329
|
+
"description": "Door swing direction."
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
"furniture": {
|
|
335
|
+
"type": "array",
|
|
336
|
+
"description": "Furniture and plumbing/kitchen fixtures.",
|
|
337
|
+
"items": {
|
|
338
|
+
"type": "object",
|
|
339
|
+
"additionalProperties": false,
|
|
340
|
+
"required": [
|
|
341
|
+
"category"
|
|
342
|
+
],
|
|
343
|
+
"properties": {
|
|
344
|
+
"category": {
|
|
345
|
+
"type": "string",
|
|
346
|
+
"description": "Furniture category, e.g. bed, sofa, wc, basin, stove."
|
|
347
|
+
},
|
|
348
|
+
"id": {
|
|
349
|
+
"type": "string",
|
|
350
|
+
"description": "Unique furniture id."
|
|
351
|
+
},
|
|
352
|
+
"room": {
|
|
353
|
+
"type": "string",
|
|
354
|
+
"description": "Owning room id (`in <room>`)."
|
|
355
|
+
},
|
|
356
|
+
"x": {
|
|
357
|
+
"type": "number",
|
|
358
|
+
"description": "Top-left corner X in millimetres (absolute placement)."
|
|
359
|
+
},
|
|
360
|
+
"y": {
|
|
361
|
+
"type": "number",
|
|
362
|
+
"description": "Top-left corner Y in millimetres (absolute placement)."
|
|
363
|
+
},
|
|
364
|
+
"width": {
|
|
365
|
+
"type": "number",
|
|
366
|
+
"description": "Width in millimetres."
|
|
367
|
+
},
|
|
368
|
+
"height": {
|
|
369
|
+
"type": "number",
|
|
370
|
+
"description": "Height in millimetres."
|
|
371
|
+
},
|
|
372
|
+
"rotate": {
|
|
373
|
+
"enum": [
|
|
374
|
+
0,
|
|
375
|
+
90,
|
|
376
|
+
180,
|
|
377
|
+
270
|
|
378
|
+
],
|
|
379
|
+
"description": "Quarter-turn rotation of the drawn symbol."
|
|
380
|
+
},
|
|
381
|
+
"centered": {
|
|
382
|
+
"type": "boolean",
|
|
383
|
+
"description": "Room-relative placement: centre inside `room`."
|
|
384
|
+
},
|
|
385
|
+
"anchor": {
|
|
386
|
+
"enum": [
|
|
387
|
+
"top-left",
|
|
388
|
+
"top",
|
|
389
|
+
"top-right",
|
|
390
|
+
"left",
|
|
391
|
+
"center",
|
|
392
|
+
"right",
|
|
393
|
+
"bottom-left",
|
|
394
|
+
"bottom",
|
|
395
|
+
"bottom-right"
|
|
396
|
+
],
|
|
397
|
+
"description": "Room-relative placement: anchor to a corner/edge of `room`."
|
|
398
|
+
},
|
|
399
|
+
"inset": {
|
|
400
|
+
"type": "number",
|
|
401
|
+
"description": "Inset (mm) from the anchored edge."
|
|
402
|
+
},
|
|
403
|
+
"against_wall": {
|
|
404
|
+
"type": "string",
|
|
405
|
+
"description": "Wall-anchored placement: back onto this wall id/category."
|
|
406
|
+
},
|
|
407
|
+
"segment": {
|
|
408
|
+
"type": "number",
|
|
409
|
+
"description": "Which segment of a multi-segment wall (for against_wall)."
|
|
410
|
+
},
|
|
411
|
+
"offset": {
|
|
412
|
+
"type": "number",
|
|
413
|
+
"description": "Distance (mm) along the segment (for against_wall)."
|
|
414
|
+
},
|
|
415
|
+
"side": {
|
|
416
|
+
"enum": [
|
|
417
|
+
"left",
|
|
418
|
+
"right"
|
|
419
|
+
],
|
|
420
|
+
"description": "Which wall face to back onto (for against_wall)."
|
|
421
|
+
},
|
|
422
|
+
"label": {
|
|
423
|
+
"type": "string",
|
|
424
|
+
"description": "Label for the generic rectangle fallback."
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
"dims": {
|
|
430
|
+
"type": "array",
|
|
431
|
+
"description": "Dimension lines.",
|
|
432
|
+
"items": {
|
|
433
|
+
"type": "object",
|
|
434
|
+
"additionalProperties": false,
|
|
435
|
+
"required": [
|
|
436
|
+
"from",
|
|
437
|
+
"to"
|
|
438
|
+
],
|
|
439
|
+
"properties": {
|
|
440
|
+
"from": {
|
|
441
|
+
"type": "object",
|
|
442
|
+
"additionalProperties": false,
|
|
443
|
+
"required": [
|
|
444
|
+
"x",
|
|
445
|
+
"y"
|
|
446
|
+
],
|
|
447
|
+
"properties": {
|
|
448
|
+
"x": {
|
|
449
|
+
"type": "number",
|
|
450
|
+
"description": "X coordinate in millimetres (origin top-left, +x right)."
|
|
451
|
+
},
|
|
452
|
+
"y": {
|
|
453
|
+
"type": "number",
|
|
454
|
+
"description": "Y coordinate in millimetres (+y DOWN, screen convention)."
|
|
455
|
+
}
|
|
456
|
+
},
|
|
457
|
+
"description": "Start point."
|
|
458
|
+
},
|
|
459
|
+
"to": {
|
|
460
|
+
"type": "object",
|
|
461
|
+
"additionalProperties": false,
|
|
462
|
+
"required": [
|
|
463
|
+
"x",
|
|
464
|
+
"y"
|
|
465
|
+
],
|
|
466
|
+
"properties": {
|
|
467
|
+
"x": {
|
|
468
|
+
"type": "number",
|
|
469
|
+
"description": "X coordinate in millimetres (origin top-left, +x right)."
|
|
470
|
+
},
|
|
471
|
+
"y": {
|
|
472
|
+
"type": "number",
|
|
473
|
+
"description": "Y coordinate in millimetres (+y DOWN, screen convention)."
|
|
474
|
+
}
|
|
475
|
+
},
|
|
476
|
+
"description": "End point."
|
|
477
|
+
},
|
|
478
|
+
"offset": {
|
|
479
|
+
"type": "number",
|
|
480
|
+
"description": "Perpendicular offset of the dimension line in millimetres."
|
|
481
|
+
},
|
|
482
|
+
"text": {
|
|
483
|
+
"type": "string",
|
|
484
|
+
"description": "Override text; defaults to the measured length."
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
},
|
|
489
|
+
"columns": {
|
|
490
|
+
"type": "array",
|
|
491
|
+
"description": "Structural columns.",
|
|
492
|
+
"items": {
|
|
493
|
+
"type": "object",
|
|
494
|
+
"additionalProperties": false,
|
|
495
|
+
"required": [
|
|
496
|
+
"x",
|
|
497
|
+
"y",
|
|
498
|
+
"width",
|
|
499
|
+
"height"
|
|
500
|
+
],
|
|
501
|
+
"properties": {
|
|
502
|
+
"id": {
|
|
503
|
+
"type": "string",
|
|
504
|
+
"description": "Unique column id."
|
|
505
|
+
},
|
|
506
|
+
"x": {
|
|
507
|
+
"type": "number",
|
|
508
|
+
"description": "Top-left corner X in millimetres."
|
|
509
|
+
},
|
|
510
|
+
"y": {
|
|
511
|
+
"type": "number",
|
|
512
|
+
"description": "Top-left corner Y in millimetres."
|
|
513
|
+
},
|
|
514
|
+
"width": {
|
|
515
|
+
"type": "number",
|
|
516
|
+
"description": "Width in millimetres."
|
|
517
|
+
},
|
|
518
|
+
"height": {
|
|
519
|
+
"type": "number",
|
|
520
|
+
"description": "Height in millimetres."
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
},
|
|
525
|
+
"title": {
|
|
526
|
+
"type": "object",
|
|
527
|
+
"additionalProperties": false,
|
|
528
|
+
"description": "Title-block metadata.",
|
|
529
|
+
"properties": {
|
|
530
|
+
"project": {
|
|
531
|
+
"type": "string",
|
|
532
|
+
"description": "Project name."
|
|
533
|
+
},
|
|
534
|
+
"drawn_by": {
|
|
535
|
+
"type": "string",
|
|
536
|
+
"description": "Author / drafter."
|
|
537
|
+
},
|
|
538
|
+
"date": {
|
|
539
|
+
"type": "string",
|
|
540
|
+
"description": "Date string."
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
},
|
|
544
|
+
"edges": {
|
|
545
|
+
"type": "array",
|
|
546
|
+
"description": "Output-only: connector edges from the modeled door/opening access graph.",
|
|
547
|
+
"items": {
|
|
548
|
+
"type": "object",
|
|
549
|
+
"additionalProperties": false,
|
|
550
|
+
"required": [
|
|
551
|
+
"from",
|
|
552
|
+
"to",
|
|
553
|
+
"via",
|
|
554
|
+
"type"
|
|
555
|
+
],
|
|
556
|
+
"properties": {
|
|
557
|
+
"from": {
|
|
558
|
+
"type": "string",
|
|
559
|
+
"description": "One endpoint (room id or `exterior`)."
|
|
560
|
+
},
|
|
561
|
+
"to": {
|
|
562
|
+
"type": "string",
|
|
563
|
+
"description": "Other endpoint (room id or `exterior`)."
|
|
564
|
+
},
|
|
565
|
+
"via": {
|
|
566
|
+
"enum": [
|
|
567
|
+
"door",
|
|
568
|
+
"opening"
|
|
569
|
+
],
|
|
570
|
+
"description": "Whether the connector is a door or a cased opening."
|
|
571
|
+
},
|
|
572
|
+
"type": {
|
|
573
|
+
"enum": [
|
|
574
|
+
"interior",
|
|
575
|
+
"front"
|
|
576
|
+
],
|
|
577
|
+
"description": "`front` connects the exterior (an entrance); else `interior`."
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
"input_graph": {
|
|
583
|
+
"type": "object",
|
|
584
|
+
"description": "Output-only: interior-door adjacency dict, keyed by room id → neighbouring room ids.",
|
|
585
|
+
"additionalProperties": {
|
|
586
|
+
"type": "array",
|
|
587
|
+
"items": {
|
|
588
|
+
"type": "string"
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
}
|