create-egregore 0.21.0-runtime-mvp.16 → 0.21.0-runtime-mvp.17

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.
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // egregore-launcher-version: 0.21.0-runtime-mvp.16
2
+ // egregore-launcher-version: 0.21.0-runtime-mvp.17
3
3
  //
4
4
  // egregore — launch and browse Egregore instances from your terminal.
5
5
  // Installed by create-egregore. Reads ~/.egregore/instances.json.
@@ -35,7 +35,7 @@ const crypto = require("node:crypto");
35
35
  const { spawnSync, spawn } = require("node:child_process");
36
36
  const readline = require("node:readline");
37
37
 
38
- const VERSION = "0.21.0-runtime-mvp.16";
38
+ const VERSION = "0.21.0-runtime-mvp.17";
39
39
  const REGISTRY = path.join(os.homedir(), ".egregore", "instances.json");
40
40
  const DEFAULT_FILE = path.join(os.homedir(), ".egregore", "default");
41
41
  const UPDATE_CACHE_FILE = path.join(os.homedir(), ".egregore", "update-check.json");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-egregore",
3
- "version": "0.21.0-runtime-mvp.16",
3
+ "version": "0.21.0-runtime-mvp.17",
4
4
  "description": "Set up Egregore for your team in one command — installs the egregore launcher and your choice of Claude Code, Codex, or Pi.",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -161,13 +161,20 @@ def _clear_observe_receipt(root: Path, harness: str) -> None:
161
161
  pass
162
162
 
163
163
 
164
- def _actor_contract_marker_path(root: Path, harness: str) -> Path:
164
+ def _actor_contract_marker_path(
165
+ root: Path, harness: str, session: str | None = None
166
+ ) -> Path:
165
167
  """Gitignored per-session marker: the full actor/retrieval contract was
166
168
  already attached once. Later prompts receive a short reminder instead of
167
169
  the ~4 KB block. bin/pre-compact.sh removes the marker so the first prompt
168
- after a compaction re-attaches the full contract."""
170
+ after a compaction re-attaches the full contract.
169
171
 
170
- session = re.sub(r"[^A-Za-z0-9_.-]", "-", _session_id(root))[:120]
172
+ ``session`` is the harness's own session id from the hook payload. The
173
+ Egregore session file in the checkout is shared by every concurrent
174
+ session there and rewritten by each new one, so keying on it alone made
175
+ parallel sessions re-attach the full contract on every prompt."""
176
+
177
+ session = re.sub(r"[^A-Za-z0-9_.-]", "-", session or _session_id(root))[:120]
171
178
  return (
172
179
  root / ".egregore" / "runtime" / "observe"
173
180
  / f"actor-contract-{harness}-{session}.sent"
@@ -763,7 +770,8 @@ def _prompt_hook(args: argparse.Namespace) -> int:
763
770
  args.limit,
764
771
  )
765
772
  else:
766
- marker = _actor_contract_marker_path(root, args.harness)
773
+ hook_session = str(payload.get("session_id") or "").strip() or None
774
+ marker = _actor_contract_marker_path(root, args.harness, hook_session)
767
775
  full = not marker.exists()
768
776
  additional_context = _actor_context_block(
769
777
  runtime,
@@ -161,13 +161,20 @@ def _clear_observe_receipt(root: Path, harness: str) -> None:
161
161
  pass
162
162
 
163
163
 
164
- def _actor_contract_marker_path(root: Path, harness: str) -> Path:
164
+ def _actor_contract_marker_path(
165
+ root: Path, harness: str, session: str | None = None
166
+ ) -> Path:
165
167
  """Gitignored per-session marker: the full actor/retrieval contract was
166
168
  already attached once. Later prompts receive a short reminder instead of
167
169
  the ~4 KB block. bin/pre-compact.sh removes the marker so the first prompt
168
- after a compaction re-attaches the full contract."""
170
+ after a compaction re-attaches the full contract.
169
171
 
170
- session = re.sub(r"[^A-Za-z0-9_.-]", "-", _session_id(root))[:120]
172
+ ``session`` is the harness's own session id from the hook payload. The
173
+ Egregore session file in the checkout is shared by every concurrent
174
+ session there and rewritten by each new one, so keying on it alone made
175
+ parallel sessions re-attach the full contract on every prompt."""
176
+
177
+ session = re.sub(r"[^A-Za-z0-9_.-]", "-", session or _session_id(root))[:120]
171
178
  return (
172
179
  root / ".egregore" / "runtime" / "observe"
173
180
  / f"actor-contract-{harness}-{session}.sent"
@@ -763,7 +770,8 @@ def _prompt_hook(args: argparse.Namespace) -> int:
763
770
  args.limit,
764
771
  )
765
772
  else:
766
- marker = _actor_contract_marker_path(root, args.harness)
773
+ hook_session = str(payload.get("session_id") or "").strip() or None
774
+ marker = _actor_contract_marker_path(root, args.harness, hook_session)
767
775
  full = not marker.exists()
768
776
  additional_context = _actor_context_block(
769
777
  runtime,
@@ -161,13 +161,20 @@ def _clear_observe_receipt(root: Path, harness: str) -> None:
161
161
  pass
162
162
 
163
163
 
164
- def _actor_contract_marker_path(root: Path, harness: str) -> Path:
164
+ def _actor_contract_marker_path(
165
+ root: Path, harness: str, session: str | None = None
166
+ ) -> Path:
165
167
  """Gitignored per-session marker: the full actor/retrieval contract was
166
168
  already attached once. Later prompts receive a short reminder instead of
167
169
  the ~4 KB block. bin/pre-compact.sh removes the marker so the first prompt
168
- after a compaction re-attaches the full contract."""
170
+ after a compaction re-attaches the full contract.
169
171
 
170
- session = re.sub(r"[^A-Za-z0-9_.-]", "-", _session_id(root))[:120]
172
+ ``session`` is the harness's own session id from the hook payload. The
173
+ Egregore session file in the checkout is shared by every concurrent
174
+ session there and rewritten by each new one, so keying on it alone made
175
+ parallel sessions re-attach the full contract on every prompt."""
176
+
177
+ session = re.sub(r"[^A-Za-z0-9_.-]", "-", session or _session_id(root))[:120]
171
178
  return (
172
179
  root / ".egregore" / "runtime" / "observe"
173
180
  / f"actor-contract-{harness}-{session}.sent"
@@ -763,7 +770,8 @@ def _prompt_hook(args: argparse.Namespace) -> int:
763
770
  args.limit,
764
771
  )
765
772
  else:
766
- marker = _actor_contract_marker_path(root, args.harness)
773
+ hook_session = str(payload.get("session_id") or "").strip() or None
774
+ marker = _actor_contract_marker_path(root, args.harness, hook_session)
767
775
  full = not marker.exists()
768
776
  additional_context = _actor_context_block(
769
777
  runtime,
@@ -161,13 +161,20 @@ def _clear_observe_receipt(root: Path, harness: str) -> None:
161
161
  pass
162
162
 
163
163
 
164
- def _actor_contract_marker_path(root: Path, harness: str) -> Path:
164
+ def _actor_contract_marker_path(
165
+ root: Path, harness: str, session: str | None = None
166
+ ) -> Path:
165
167
  """Gitignored per-session marker: the full actor/retrieval contract was
166
168
  already attached once. Later prompts receive a short reminder instead of
167
169
  the ~4 KB block. bin/pre-compact.sh removes the marker so the first prompt
168
- after a compaction re-attaches the full contract."""
170
+ after a compaction re-attaches the full contract.
169
171
 
170
- session = re.sub(r"[^A-Za-z0-9_.-]", "-", _session_id(root))[:120]
172
+ ``session`` is the harness's own session id from the hook payload. The
173
+ Egregore session file in the checkout is shared by every concurrent
174
+ session there and rewritten by each new one, so keying on it alone made
175
+ parallel sessions re-attach the full contract on every prompt."""
176
+
177
+ session = re.sub(r"[^A-Za-z0-9_.-]", "-", session or _session_id(root))[:120]
171
178
  return (
172
179
  root / ".egregore" / "runtime" / "observe"
173
180
  / f"actor-contract-{harness}-{session}.sent"
@@ -763,7 +770,8 @@ def _prompt_hook(args: argparse.Namespace) -> int:
763
770
  args.limit,
764
771
  )
765
772
  else:
766
- marker = _actor_contract_marker_path(root, args.harness)
773
+ hook_session = str(payload.get("session_id") or "").strip() or None
774
+ marker = _actor_contract_marker_path(root, args.harness, hook_session)
767
775
  full = not marker.exists()
768
776
  additional_context = _actor_context_block(
769
777
  runtime,