@polycode-projects/the-mechanical-code-talker 2.7.17 → 2.7.19
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/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.19",
|
|
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.",
|
|
@@ -370,6 +370,11 @@ async function writeWorldTurn(memoryDir, world, k, facts, cache) {
|
|
|
370
370
|
const VIEW_EXCLUDED_PREDICATES = new Set([
|
|
371
371
|
"mgx:hidden-in", "mgx:is-open", "mgx:is-npc", "mgx:is-container",
|
|
372
372
|
"mgx:unlocks-with", "mgx:acts-on-turn", "mgx:acts-toward",
|
|
373
|
+
// mgx:is-objective (PLAN_GAMES_UPLIFT_V2.md Part B) is an internal marker
|
|
374
|
+
// for auto-play's goal inference — the same information the opening
|
|
375
|
+
// narration already tells a human player in prose, never meant to surface
|
|
376
|
+
// as a raw, unphrased triple ("Letter mgx:is-objective true.") itself.
|
|
377
|
+
"mgx:is-objective",
|
|
373
378
|
]);
|
|
374
379
|
|
|
375
380
|
const sentenceCase = (term) => String(term).charAt(0).toUpperCase() + String(term).slice(1);
|
|
@@ -677,9 +677,20 @@ export async function runSpiderFlyTick(memoryDir, opts = {}) {
|
|
|
677
677
|
// later, as if it were still on the board. Drop it from `agents` (its own
|
|
678
678
|
// goal is moot) and let the eating spider's line say what actually
|
|
679
679
|
// happened instead of the now-false "co-located with fly-5 in the web".
|
|
680
|
+
// A spider can eat more than one fly in the same tick (several flies
|
|
681
|
+
// co-located with it on the same cell) — group by spider first, rather
|
|
682
|
+
// than overwriting the goal once per eaten fly, which silently credited
|
|
683
|
+
// only the LAST one and dropped every earlier fly from the summary line
|
|
684
|
+
// (the "Turn N — ..." event text already lists every eaten fly correctly;
|
|
685
|
+
// only this goal-line summary was collapsing them).
|
|
686
|
+
const eatenBySpider = new Map();
|
|
680
687
|
for (const { fly, spider } of ecology.events.eaten) {
|
|
681
688
|
delete agents[fly];
|
|
682
|
-
if (
|
|
689
|
+
if (!eatenBySpider.has(spider)) eatenBySpider.set(spider, []);
|
|
690
|
+
eatenBySpider.get(spider).push(fly);
|
|
691
|
+
}
|
|
692
|
+
for (const [spider, flyIds] of eatenBySpider) {
|
|
693
|
+
if (agents[spider]) agents[spider].goal = `just ate ${flyIds.join(" and ")} in the web.`;
|
|
683
694
|
}
|
|
684
695
|
for (const flyId of ecology.events.starved) delete agents[flyId];
|
|
685
696
|
const writes = [...movementWrites, ...ecology.writes];
|