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 +22 -0
- package/dist/index.js +21 -3
- package/package.json +1 -1
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
|
-
|
|
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(
|
|
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
|
|
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