memgineering 0.4.1 → 0.4.2

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
@@ -11,6 +11,28 @@ language the reader wants. The bilingual rule the monorepo applies to
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [0.4.2] — 2026-08-10
15
+
16
+ ### Fixed
17
+
18
+ - **`setup --web` no longer prints the install key where it will be kept.** The
19
+ URL carries the key that authorizes reading your folders and writing into
20
+ `~/.claude`, and it was printed on every run — including under `--json`, so a
21
+ copy landed in the transcript of the agent that ran the command, which may be
22
+ stored, synced, or sent somewhere. It is now shown only when it is the way
23
+ in: the browser did not open, or you asked for it with `--print-url`.
24
+
25
+ **If you parse `--json`:** `url` is now present only when `opened` is
26
+ `false`. `port` and `opened` are always there. This is a smaller promise than
27
+ before and it is deliberate — the alternative was to keep handing out the key
28
+ to avoid changing a field.
29
+
30
+ - **The link is no longer described as working "only once".** It never did: the
31
+ key is single-use for applying the setup and reusable for reading, so a
32
+ person told "only once" and then able to reload had been told something
33
+ untrue about the thing protecting their machine. It now says what actually
34
+ ends it — applying, closing the tab, or an hour.
35
+
14
36
  ## [0.4.1] — 2026-08-10
15
37
 
16
38
  Security fixes in `setup --web`, from the 2026-08-09 audit
package/dist/index.js CHANGED
@@ -4122,6 +4122,7 @@ var init_setup_web_page = __esm({
4122
4122
  var setup_web_exports = {};
4123
4123
  __export(setup_web_exports, {
4124
4124
  browserOpener: () => browserOpener,
4125
+ disclosure: () => disclosure,
4125
4126
  runSetupWeb: () => runSetupWeb,
4126
4127
  startSetupWebServer: () => startSetupWebServer
4127
4128
  });
@@ -4212,18 +4213,32 @@ async function runSetupWeb(opts) {
4212
4213
  const server = await startSetupWebServer({ detected: opts.detected });
4213
4214
  const opened = opts.printUrl ? false : await openBrowser(server.url);
4214
4215
  printDual({
4215
- json: { url: server.url, port: server.port, opened },
4216
+ // The URL carries the key that authorizes reading folders and writing into
4217
+ // `~/.claude`, and it was printed on every run — in `--json` too, so it
4218
+ // landed in the transcript of the agent that ran the command, which may be
4219
+ // stored, synced or sent somewhere. That is a different exposure from the
4220
+ // one everybody thinks of with a local token: not a process on this machine
4221
+ // that could read those files anyway, but a copy of the key leaving it.
4222
+ //
4223
+ // So it is emitted only when it is the way in — the browser did not open,
4224
+ // or `--print-url` asked for it. When the browser DID open, the person is
4225
+ // already looking at the screen and nobody needs the string.
4226
+ json: disclosure(server.url, server.port, opened),
4216
4227
  human: () => {
4217
4228
  if (opened) {
4218
4229
  printHuman("Opened setup in your browser.\n");
4219
- printHuman(c.gray(` If nothing appeared: ${server.url}`));
4230
+ printHuman(
4231
+ c.gray(
4232
+ " Nothing appeared? Run `memgineering setup --web --print-url` and open\n the link yourself \u2014 it is not printed here on purpose, because it\n carries the key that authorizes the install."
4233
+ )
4234
+ );
4220
4235
  } else {
4221
4236
  printHuman("Open this in a browser to finish setting up:\n");
4222
4237
  printHuman(` ${server.url}`);
4223
4238
  }
4224
4239
  printHuman(
4225
4240
  c.gray(
4226
- "\n The link only works on this machine and only once \u2014 it carries a\n one-time key, and this screen closes when you are done.\n Ctrl-C to stop waiting."
4241
+ "\n The link works only on this machine, and only until this screen\n closes \u2014 applying the setup, closing the tab, or an hour, whichever\n comes first. Ctrl-C to stop waiting."
4227
4242
  )
4228
4243
  );
4229
4244
  }
@@ -4240,6 +4255,9 @@ async function runSetupWeb(opts) {
4240
4255
  else printHuman(`
4241
4256
  ${reason === "applied" ? c.green(ending[reason]) : c.gray(ending[reason])}`);
4242
4257
  }
4258
+ function disclosure(url, port, opened) {
4259
+ return opened ? { port, opened } : { port, opened, url };
4260
+ }
4243
4261
  async function handle(req, res, state, origin, touch = () => {
4244
4262
  }) {
4245
4263
  const url = new URL(req.url ?? "/", origin);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memgineering",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "private": false,
5
5
  "description": "One memory for the AI you connect. Recall, remember, and revise a brain your agents share — stored in your own folder.",
6
6
  "license": "Apache-2.0",