@polycode-projects/the-mechanical-code-talker 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +176 -8
- package/corpus/reference/index.json.gz +0 -0
- package/corpus/reference/manifest.json +8 -8
- package/corpus/reference/shards/ref-00.jsonl.gz +0 -0
- package/corpus/sprites/src/sprite-facts.jsonl +34 -0
- package/corpus/worlds/index.json.gz +0 -0
- package/corpus/worlds/manifest.json +49 -9
- package/corpus/worlds/shards/greyvale-museum.jsonl.gz +0 -0
- package/corpus/worlds/shards/lantern-cottage.jsonl.gz +0 -0
- package/corpus/worlds/shards/mud-hollow.jsonl.gz +0 -0
- package/corpus/worlds/shards/mud-warren.jsonl.gz +0 -0
- package/corpus/worlds/shards/spider-fly.jsonl.gz +0 -0
- package/corpus/worlds/src/greyvale-museum.jsonl +136 -0
- package/corpus/worlds/src/lantern-cottage.jsonl +60 -0
- package/corpus/worlds/src/mud-hollow.jsonl +82 -0
- package/corpus/worlds/src/mud-warren.jsonl +124 -0
- package/corpus/worlds/src/spider-fly.jsonl +1 -1
- package/data/sprites/animal-icon.toml +11 -5
- package/data/sprites/book-icon.toml +9 -5
- package/data/sprites/cabinet-icon.toml +10 -5
- package/data/sprites/cellar-icon.toml +16 -6
- package/data/sprites/container-icon.toml +7 -3
- package/data/sprites/desk-icon.toml +8 -5
- package/data/sprites/dog-icon.toml +8 -5
- package/data/sprites/dog-with-colour-icon.toml +13 -12
- package/data/sprites/drawing-room-icon.toml +14 -5
- package/data/sprites/egg-icon.toml +6 -3
- package/data/sprites/fly-icon.toml +10 -5
- package/data/sprites/furniture-icon.toml +5 -3
- package/data/sprites/garden-icon.toml +10 -3
- package/data/sprites/key-icon.toml +3 -1
- package/data/sprites/kitchen-icon.toml +15 -6
- package/data/sprites/lamp-icon.toml +9 -4
- package/data/sprites/letter-icon.toml +7 -4
- package/data/sprites/library-icon.toml +14 -3
- package/data/sprites/pan-icon.toml +7 -3
- package/data/sprites/person-icon.toml +6 -2
- package/data/sprites/poodle-icon.toml +1 -1
- package/data/sprites/portable-icon.toml +6 -4
- package/data/sprites/portrait-icon.toml +7 -4
- package/data/sprites/room-icon.toml +11 -2
- package/data/sprites/spider-icon.toml +9 -3
- package/data/sprites/study-icon.toml +10 -2
- package/package.json +5 -4
- package/src/domain/grammar/ace.mjs +40 -4
- package/src/domain/grammar/lexicon-core.json +2 -1
- package/src/domain/grammar/lexicon.mjs +18 -0
- package/src/domain/reference-pack.mjs +31 -7
- package/src/domain/spider-fly-world.mjs +1 -1
- package/src/domain/sprite-templates.mjs +8 -6
- package/src/services/adventure-viz.mjs +130 -47
- package/src/services/adventure.mjs +440 -367
- package/src/services/chat-page-viz.mjs +37 -9
- package/src/services/chat.mjs +99 -18
- package/src/services/code-explorer-viz.mjs +52 -14
- package/src/services/extract-facts.mjs +4 -7
- package/src/services/ingest-viz.mjs +54 -26
- package/src/services/ledger-viz.mjs +105 -56
- package/src/services/memory-panel-viz.mjs +24 -0
- package/src/services/mud-viz.mjs +940 -21
- package/src/services/plan-viz.mjs +119 -61
- package/src/services/research-viz.mjs +151 -57
- package/src/services/spider-fly-turn.mjs +1 -1
- package/src/services/spider-fly-viz.mjs +67 -43
- package/src/services/sprite-catalog-viz.mjs +175 -51
- package/src/services/viz-theme.mjs +15 -0
- package/src/surfaces/web/memory-ask-browser.bundle.js +107 -107
- package/src/surfaces/web/mud-browser-entry.mjs +44 -2
|
@@ -38,8 +38,9 @@ import {
|
|
|
38
38
|
foldWorldState, worldActionRows, worldDigestRows, roomAffordances,
|
|
39
39
|
personKnowledgeLines, personKnownFoodLines,
|
|
40
40
|
diggableDirections, castInRoom, displayNameOf, isOutOfPlay, outOfPlayReasonOf, outOfPlayPhrase,
|
|
41
|
-
roomKindOf,
|
|
41
|
+
roomKindOf, isMudStatePredicate,
|
|
42
42
|
} from "../../services/adventure.mjs";
|
|
43
|
+
import { waveFact, playedByFact, P2P_PREDICATES } from "../../domain/p2p/facts.mjs";
|
|
43
44
|
import { relatedForTerm } from "../../domain/skos-view.mjs";
|
|
44
45
|
import { runMudTurn } from "../../services/mud-turn.mjs";
|
|
45
46
|
import { parseMudEditorText, planMudEditorSync } from "../../services/mud-editor.mjs";
|
|
@@ -232,7 +233,44 @@ export async function createMudSession(worldPayload, { characters = [] } = {}) {
|
|
|
232
233
|
return { unrecognized, added: toAppend.length, removed };
|
|
233
234
|
}
|
|
234
235
|
|
|
235
|
-
|
|
236
|
+
// Wall-clock resolution is 1ms, and both writers below are content-addressed
|
|
237
|
+
// by (subject, predicate, object) — a second wave from the same character in
|
|
238
|
+
// the same room is the SAME fact id, so it only registers as a change if its
|
|
239
|
+
// provenance tag differs. Two writes inside one tick would share a timestamp,
|
|
240
|
+
// share a tag, and the second would silently vanish. p2p-room.mjs nudges its
|
|
241
|
+
// own clock for exactly this reason; this is the same nudge for the writes
|
|
242
|
+
// that happen before a room exists.
|
|
243
|
+
let lastWriteMs = -Infinity;
|
|
244
|
+
function stampNow() {
|
|
245
|
+
const nudged = Math.max(Date.now(), lastWriteMs + 1);
|
|
246
|
+
lastWriteMs = nudged;
|
|
247
|
+
return new Date(nudged).toISOString();
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/** `character` waves in whichever room it currently stands in — an ordinary
|
|
251
|
+
* add-only fact, so a page with no network renders it exactly like a page
|
|
252
|
+
* sharing the world with three others. Returns the room waved in, or null
|
|
253
|
+
* when the character stands nowhere (out of play). Nothing is ever
|
|
254
|
+
* retracted: "currently waving" is a recency read over this fact's own
|
|
255
|
+
* provenance timestamp. */
|
|
256
|
+
async function wave(character) {
|
|
257
|
+
const here = await roomOf(character);
|
|
258
|
+
if (!here) return null;
|
|
259
|
+
await appendFacts(memoryDir, [waveFact(character, here, stampNow())]);
|
|
260
|
+
return here;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/** Claim `characters` for `peerId` — one add-only `mgx:playedBy` fact each.
|
|
264
|
+
* Claims never overwrite: two peers claiming the same animal both write,
|
|
265
|
+
* and every reader settles it the same way by taking the oldest claim. */
|
|
266
|
+
async function claimCharacters(characters, peerId) {
|
|
267
|
+
const at = stampNow();
|
|
268
|
+
const claims = (characters || []).map((character) => playedByFact(character, peerId, at));
|
|
269
|
+
if (claims.length) await appendFacts(memoryDir, claims);
|
|
270
|
+
return claims.length;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return { memoryDir, windows, snapshot, applyEdit, wave, claimCharacters };
|
|
236
274
|
}
|
|
237
275
|
|
|
238
276
|
/** `count` entries drawn at random from `roster`, in random order, without
|
|
@@ -324,6 +362,10 @@ globalThis.tmctMud = {
|
|
|
324
362
|
personKnowledgeLines, personKnownFoodLines,
|
|
325
363
|
diggableDirections, castInRoom, displayNameOf, isOutOfPlay, outOfPlayReasonOf, outOfPlayPhrase,
|
|
326
364
|
roomKindOf,
|
|
365
|
+
// The shared-world reach-throughs: which predicates carry live world state,
|
|
366
|
+
// and the P2P layer's own four. mud.html hands both to `mudSyncableFacts`,
|
|
367
|
+
// which is written to take the check rather than import the engine itself.
|
|
368
|
+
isMudStatePredicate, P2P_PREDICATES,
|
|
327
369
|
// The edit mode's own reach-throughs: the SKOS neighbourhood and the is-a
|
|
328
370
|
// chain its cursor-suggestion pills read, neither of which is splice-safe.
|
|
329
371
|
relatedForTerm,
|