open-memex 0.6.0-alpha.4 → 0.6.0-alpha.5

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/AGENTS.md CHANGED
@@ -66,6 +66,10 @@ previews keyword capture without writing, `open-memex doctor` runs health checks
66
66
  (`--yes` skips, scripts never prompt); `open-memex config set <key> <value>` edits settings after install.
67
67
  `npm install -g` prints a pointer to `open-memex init` via a postinstall script
68
68
  (print-only — postinstall must never prompt, it runs in CI/Docker; D50).
69
+ Note: npm swallows lifecycle-script stdout (background run unless
70
+ `--foreground-scripts`), so the postinstall pointer is best-effort only —
71
+ every CLI entry point also prints a one-line stderr nudge until init has run
72
+ or been declined (F28; stderr keeps the MCP stdio protocol intact).
69
73
  Bare `open-memex` on a machine where init never completed offers to run it on a
70
74
  TTY (usage as before when non-interactive); init/uninstall maintain a
71
75
  `.init.json` first-run marker at the data root so the offer is asked once (D50);
package/dist/cli.js CHANGED
@@ -526,6 +526,20 @@ async function main() {
526
526
  console.log(`open-memex ${pkg.version}`);
527
527
  return;
528
528
  }
529
+ // F28: npm runs lifecycle scripts in the background and swallows their
530
+ // stdout (unless --foreground-scripts), so the D50 postinstall pointer
531
+ // never reaches the user. Every CLI entry point therefore carries a
532
+ // one-line nudge on stderr until init has run or been declined — stderr
533
+ // keeps the MCP stdio protocol (stdout) intact, and the .init.json marker
534
+ // makes it once-ever. `init`/`uninstall` are excluded (already there /
535
+ // nothing to wire).
536
+ if (cmd !== "init" && cmd !== "uninstall") {
537
+ const { isFirstRun } = await import("./first-run.js");
538
+ if (isFirstRun()) {
539
+ console.error("open-memex: first run? `open-memex init` wires it into your editors " +
540
+ "(auto-detects VS Code, Cursor, opencode).");
541
+ }
542
+ }
529
543
  // Per-command help: `open-memex <command> --help`. Checked before loadConfig()
530
544
  // so it works even when the environment is broken.
531
545
  if (rest.includes("--help") || rest.includes("-h")) {
package/docs/V2-DESIGN.md CHANGED
@@ -554,7 +554,9 @@ requirement: personal data never touches third-party services). Benchmarks to tr
554
554
  (D52): rewrite both agent-facing prompts (MCP handshake + init template) so
555
555
  agents execute them correctly. Push-not-poll outbox (D53): the checkpoint
556
556
  mechanism is retired — the server reports the outbox draft count at session
557
- start and appends it to mutating tool results when non-zero.
557
+ start and appends it to mutating tool results when non-zero. Install→init
558
+ reminder fix (F28): one-line stderr nudge on every CLI entry point until
559
+ init runs (npm swallows postinstall stdout).
558
560
  - **Phase 4 — Future, signal-gated.** Cloud `RemoteProvider` customization only on: multi-private-repo
559
561
  sharing needs, fine-grained ACL, audit/compliance mandates · optional API-backed exporters/providers
560
562
  for enterprise knowledge systems.
@@ -1057,6 +1059,20 @@ requirement: personal data never touches third-party services). Benchmarks to tr
1057
1059
  `memory_submit` drains the outbox, so its own note is naturally silent.
1058
1060
  Approved 2026-10-01.*
1059
1061
 
1062
+ - **F28** — install→init reminder was invisible (0.6.0-alpha.5). The D50
1063
+ postinstall pointer never reaches the user: npm runs lifecycle scripts in
1064
+ the background and swallows their stdout unless `--foreground-scripts` is
1065
+ passed (reproduced on npm 10.9.4 — the script ran with code 0, its output
1066
+ never displayed). The install-time channel is therefore best-effort only.
1067
+ Fix: every CLI entry point now prints a one-line nudge on stderr until init
1068
+ has run or been declined (`open-memex init` wires editors), gated by the
1069
+ existing `.init.json` first-run marker — stderr keeps the MCP stdio protocol
1070
+ (stdout) intact, so even `open-memex mcp` spawned by an editor carries it
1071
+ safely. `init`/`uninstall` are excluded. The bare-`open-memex` interactive
1072
+ offer on a TTY (D50) is unchanged. *Rationale: the reminder must live in a
1073
+ channel the project controls — the CLI — not in npm script output.
1074
+ Reported 2026-10-01.*
1075
+
1060
1076
  ## Open Questions
1061
1077
 
1062
1078
  _All resolved — see D10 (rename), D11 (type/role split), D12 (explicit pull)._
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-memex",
3
- "version": "0.6.0-alpha.4",
3
+ "version": "0.6.0-alpha.5",
4
4
  "description": "Local-first memory layer and protocol for AI coding agents. Markdown source of truth, SQLite FTS5 index, zero cloud.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
package/src/cli.ts CHANGED
@@ -588,6 +588,23 @@ async function main() {
588
588
  return;
589
589
  }
590
590
 
591
+ // F28: npm runs lifecycle scripts in the background and swallows their
592
+ // stdout (unless --foreground-scripts), so the D50 postinstall pointer
593
+ // never reaches the user. Every CLI entry point therefore carries a
594
+ // one-line nudge on stderr until init has run or been declined — stderr
595
+ // keeps the MCP stdio protocol (stdout) intact, and the .init.json marker
596
+ // makes it once-ever. `init`/`uninstall` are excluded (already there /
597
+ // nothing to wire).
598
+ if (cmd !== "init" && cmd !== "uninstall") {
599
+ const { isFirstRun } = await import("./first-run.ts");
600
+ if (isFirstRun()) {
601
+ console.error(
602
+ "open-memex: first run? `open-memex init` wires it into your editors " +
603
+ "(auto-detects VS Code, Cursor, opencode).",
604
+ );
605
+ }
606
+ }
607
+
591
608
  // Per-command help: `open-memex <command> --help`. Checked before loadConfig()
592
609
  // so it works even when the environment is broken.
593
610
  if (rest.includes("--help") || rest.includes("-h")) {