@looop-games/cli 0.1.34 → 0.1.35

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/CHANGELOG.md CHANGED
@@ -14,6 +14,12 @@ Versions: [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
14
14
 
15
15
  ## [Unreleased]
16
16
 
17
+ ## [0.1.35] - 2026-09-02
18
+
19
+ ### Added
20
+
21
+ - Reports landing in `.looop/agent-inbox/` are stamped with `engine`, the engine version `looop dev` was serving when the report was made — so a report read later, after an update, still says which engine produced the numbers.
22
+
17
23
  ## [0.1.34] - 2026-09-02
18
24
 
19
25
  ### Fixed
@@ -69,9 +69,13 @@ const sha = (buf) => createHash('sha256').update(buf).digest('hex');
69
69
 
70
70
  // Where each artifact path lands in the game repo. `skills/**` is the whole
71
71
  // surface today; AGENTS.md is spliced rather than written whole.
72
+ // Targets are manifest keys, not host paths: forward slashes on every platform,
73
+ // because they are recorded in .looop/agent-surface.json, compared with
74
+ // `startsWith(`${dest}/`)`, and reported to the creator. `join(projectDir, dest)`
75
+ // turns one into a host path wherever the filesystem is touched.
72
76
  function target(rel) {
73
77
  if (rel === 'AGENTS.md') return 'AGENTS.md';
74
- if (rel.startsWith('skills/')) return join('.claude', rel);
78
+ if (rel.startsWith('skills/')) return `.claude/${rel}`;
75
79
  return null; // unknown surface entry from a newer engine — ignore, don't guess
76
80
  }
77
81
 
@@ -128,7 +132,7 @@ function contentMatchesRecord(abs, dest, placed) {
128
132
  if (!entries.length) return true; // an empty folder holds nothing to lose
129
133
  return entries.every((e) => {
130
134
  const file = join(e.parentPath, e.name);
131
- const rel = join(dest, relative(abs, file));
135
+ const rel = `${dest}/${relative(abs, file).split('\\').join('/')}`;
132
136
  return placed[rel] !== undefined && sha(readFileSync(file)) === placed[rel];
133
137
  });
134
138
  }
package/lib/dev.mjs CHANGED
@@ -146,6 +146,7 @@ export async function dev({ cwd = process.cwd(), port, noMp = process.env.NO_MP
146
146
  slug: project.slug,
147
147
  projectDir: project.dir, // answers /__looop/whoami — see ports.mjs
148
148
  log, // agent-inbox report lines ride the dev logger
149
+ engineVersion: engine.version ?? null, // stamped on agent-inbox reports
149
150
  mounts: [
150
151
  { url: `/games/${project.slug}/`, dir: project.dir },
151
152
  { url: '/shared/', dir: generatedOverridesDir },
@@ -113,6 +113,11 @@ export function createStaticServer({
113
113
  // import map + globalThis.__LOOOP_SKELETON__ so startGame() can boot. Null for
114
114
  // a v1 game (no bare `looop` import, no skeleton).
115
115
  skeleton = null,
116
+ // The engine version this server serves, stamped onto every agent-inbox
117
+ // file as `engine`. A report is read off disk later against whatever the
118
+ // game is pinned to THEN; the server is the only side that knows what it
119
+ // was when the report was made (the page has no version of its own).
120
+ engineVersion = null,
116
121
  }) {
117
122
  // The injected skeleton is LIVE, not frozen at startup: a v2 hot-reload
118
123
  // rebuilds the room with a fresh skeleton, and `setSkeleton` below pushes that
@@ -304,6 +309,7 @@ export function createStaticServer({
304
309
  mkdirSync(inboxDir, { recursive: true });
305
310
  const selfIgnore = join(inboxDir, '.gitignore');
306
311
  if (!existsSync(selfIgnore)) writeFileSync(selfIgnore, '*\n');
312
+ if (engineVersion) envelope.engine = engineVersion;
307
313
  const d = new Date();
308
314
  const p = (n, w = 2) => String(n).padStart(w, '0');
309
315
  const stamp = `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}-${p(d.getHours())}-${p(d.getMinutes())}-${p(d.getSeconds())}-${p(d.getMilliseconds(), 3)}`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@looop-games/cli",
3
- "version": "0.1.34",
3
+ "version": "0.1.35",
4
4
  "description": "Looop game development CLI — dev server, login, and publishing for standalone Looop games.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",