mulmoclaude 0.9.7 → 1.0.0

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/README.md CHANGED
@@ -122,6 +122,7 @@ Recommended: ≥ 32 characters of random data (shorter values trigger a startup
122
122
  - **Local voice input** (macOS only, opt-in) — `whisper.cpp` for dictating chat messages without sending audio to a cloud API.
123
123
  - **Marp slides** — `marp: true` frontmatter on any markdown file renders a slide deck in the canvas with PDF export. Custom themes via `config/marp-themes/<name>.css`.
124
124
  - **Auto memory** — the agent maintains a typed memory layout (`conversations/memory/<type>/<topic>.md`) and reads it ambient-style.
125
+ - **Web Push on task finish** — enable in Settings → Notifications to get a push on your phone when the answer to a question you asked is ready, even with the browser closed. Requires the RemoteHost connection + a registered device (see [`docs/remote-host.md`](https://github.com/receptron/mulmoclaude/blob/main/docs/remote-host.md#web-push-on-task-finish-2086)).
125
126
 
126
127
  ## Plugin authoring (`--dev-plugin`)
127
128
 
@@ -18,6 +18,7 @@ import { fileURLToPath } from "url";
18
18
  import { isPortFree, findAvailablePort, MAX_PORT_PROBES } from "../server/utils/port.mjs";
19
19
  import { parseDevPluginArgs } from "../server/utils/dev-plugin-args.mjs";
20
20
  import { cliFlagHelpLines, flagEnvOverrides } from "../server/utils/cli-flags.mjs";
21
+ import { parseEnvFile, mergeLaunchEnv, describeLaunchEnvLoad } from "../server/utils/launch-env.mjs";
21
22
 
22
23
  const require = createRequire(import.meta.url);
23
24
 
@@ -216,8 +217,18 @@ try {
216
217
  process.exit(1);
217
218
  }
218
219
 
220
+ // Load `<launch-dir>/.env` so `npx mulmoclaude` users keep secrets
221
+ // (e.g. GEMINI_API_KEY) next to where they launch — NOT inside the
222
+ // isolated ~/mulmoclaude workspace. Shell-exported vars win over the
223
+ // file, so `export GEMINI_API_KEY=…` still takes precedence.
224
+ const launchEnvPath = join(process.cwd(), ".env");
225
+ const { exists: launchEnvExists, parsed: launchEnvParsed } = parseEnvFile(launchEnvPath);
226
+ const { env: baseEnv, loadedKeys, skippedKeys } = mergeLaunchEnv(process.env, launchEnvParsed);
227
+ const launchEnvSummary = describeLaunchEnvLoad({ path: launchEnvPath, exists: launchEnvExists, loadedKeys, skippedKeys });
228
+ if (launchEnvSummary) log(launchEnvSummary);
229
+
219
230
  const serverEnv = {
220
- ...process.env,
231
+ ...baseEnv,
221
232
  NODE_ENV: "production",
222
233
  PORT: String(port),
223
234
  };