memhouse 0.18.3 → 0.18.4

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/bin/memhouse.js CHANGED
@@ -1013,8 +1013,13 @@ async function cmdInstall({ interactive }) {
1013
1013
  } catch { /* not a URL; the missing-fields check above already spoke */ }
1014
1014
  // Clear ambient MEMHOUSE_* so ONLY the file speaks (exported vars normally win over the
1015
1015
  // file; an invite intake is the one place they must not).
1016
- for (const k of ['MEMHOUSE_URL', 'MEMHOUSE_USER', 'MEMHOUSE_PASSWORD', 'MEMHOUSE_DB', 'MEMHOUSE_PORT']) delete process.env[k];
1016
+ for (const k of ['MEMHOUSE_URL', 'MEMHOUSE_USER', 'MEMHOUSE_PASSWORD', 'MEMHOUSE_DB', 'MEMHOUSE_PORT', 'MEMHOUSE_CHANNEL', 'MEMHOUSE_EDITORS', 'MEMHOUSE_CLAUDE_ROOTS']) delete process.env[k];
1017
1017
  for (const k of wanted) process.env[k] = parsed[k];
1018
+ // The invite also carries what the inviter's house is ON: its channel (a `team` house
1019
+ // is 0.18.x, published under `team`). Dropping it wrote an env with no pin, and the
1020
+ // member's first `memhouse update` followed `latest` — zeo's 0.17 line — and
1021
+ // downgraded a working team install onto the wrong layout. A flag still wins.
1022
+ for (const k of ['MEMHOUSE_CHANNEL', 'MEMHOUSE_EDITORS', 'MEMHOUSE_CLAUDE_ROOTS']) if (parsed[k]) process.env[k] = parsed[k];
1018
1023
  console.log(ok(`using the invite file ${String(flags.env)} (nothing persisted until the install proves out)`));
1019
1024
  _inviteFileToShred = path.resolve(String(flags.env));
1020
1025
  _inviteWantsRotate = parsed.MEMHOUSE_INVITE === '1';
@@ -32,9 +32,22 @@ function pickChannel({ version, pinned = null, tags = null }) {
32
32
  if (isPrerelease(version)) {
33
33
  return { channel: null, target: null, reason: `${version} is on no registry tag — a tarball or checkout build; update it by installing a newer tarball, or pin a channel: memhouse update --channel <tag>` };
34
34
  }
35
- return { channel: 'latest', target: t.latest || null, reason: tags ? 'following latest' : 'following latest (registry did not answer)' };
35
+ // A release that matches no tag any more (the tag moved on) stays on ITS LINE: the tag
36
+ // whose target shares this version's major.minor. Falling back to `latest` moved a
37
+ // 0.18.2 team member to 0.17.1 — a different house layout — on her first update.
38
+ const line = lineOf(version);
39
+ const sameLine = Object.entries(t).filter(([, v]) => lineOf(v) === line).map(([k]) => k);
40
+ if (sameLine.length) {
41
+ const k = sameLine.includes('latest') ? 'latest' : sameLine[0];
42
+ return { channel: k, target: t[k], reason: `following '${k}' — the tag on the ${line}.x line this install is on` };
43
+ }
44
+ if (!tags) return { channel: null, target: null, reason: 'the registry did not answer — cannot tell which line to follow; retry, or: memhouse update --channel <tag>' };
45
+ return { channel: null, target: null, reason: `${version} is on the ${line}.x line and no registry tag points at ${line}.x — crossing lines is a decision: memhouse update --channel <tag>` };
36
46
  }
37
47
 
48
+ /** "0.18" of "0.18.2" — the line a version belongs to. */
49
+ function lineOf(v) { const m = /^(\d+)\.(\d+)/.exec(String(v || '')); return m ? `${m[1]}.${m[2]}` : ''; }
50
+
38
51
  /** The registry's dist-tags, or null when it cannot be reached. Abbreviated document, small. */
39
52
  async function fetchTags(fetchImpl = globalThis.fetch) {
40
53
  try {
@@ -47,4 +60,4 @@ async function fetchTags(fetchImpl = globalThis.fetch) {
47
60
  } catch { return null; }
48
61
  }
49
62
 
50
- module.exports = { pickChannel, fetchTags, isPrerelease };
63
+ module.exports = { pickChannel, fetchTags, isPrerelease, lineOf };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mem",
3
3
  "description": "Conversation memory for AI agents over the memhouse typed ClickHouse store: recall past sessions and answer from them, run analytics, check the house, bring people in, and administer the server. Skills install as /mem:recall, /mem:sql, /mem:house, /mem:access, and /mem:admin.",
4
- "version": "0.18.3",
4
+ "version": "0.18.4",
5
5
  "author": {
6
6
  "name": "Ramazan Polat"
7
7
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memhouse",
3
- "version": "0.18.3",
3
+ "version": "0.18.4",
4
4
  "description": "memhouse \u2014 agent conversation memory across 17 editors: parse-on-client shippers, a typed ClickHouse store with one set of rooms per member, kernel-agency install, and the agentlytics dashboard",
5
5
  "main": "bin/memhouse.js",
6
6
  "bin": {