@murmurv2/cli 2.11.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/LICENSE +21 -0
- package/README.md +53 -0
- package/bin/murmur-npm.mjs +6 -0
- package/package.json +42 -0
- package/runtime/bin/murmur-svc.exe +0 -0
- package/runtime/npm-runtime-manifest.json +299 -0
- package/runtime/package.json +1 -0
- package/runtime/packages/mcp-server/dist/src/index.js +1 -0
- package/runtime/packages/mcp-server/package.json +1 -0
- package/runtime/packages/setup/bin/murmur.mjs +26 -0
- package/runtime/packages/setup/dist/src/appdata.d.ts +9 -0
- package/runtime/packages/setup/dist/src/appdata.js +53 -0
- package/runtime/packages/setup/dist/src/cli.d.ts +9 -0
- package/runtime/packages/setup/dist/src/cli.js +130 -0
- package/runtime/packages/setup/dist/src/clients.d.ts +151 -0
- package/runtime/packages/setup/dist/src/clients.js +251 -0
- package/runtime/packages/setup/dist/src/commands.d.ts +35 -0
- package/runtime/packages/setup/dist/src/commands.js +115 -0
- package/runtime/packages/setup/dist/src/config.d.ts +49 -0
- package/runtime/packages/setup/dist/src/config.js +70 -0
- package/runtime/packages/setup/dist/src/doctor.d.ts +25 -0
- package/runtime/packages/setup/dist/src/doctor.js +174 -0
- package/runtime/packages/setup/dist/src/file-identity.d.ts +3 -0
- package/runtime/packages/setup/dist/src/file-identity.js +11 -0
- package/runtime/packages/setup/dist/src/index.d.ts +7 -0
- package/runtime/packages/setup/dist/src/index.js +7 -0
- package/runtime/packages/setup/dist/src/onboarding.d.ts +46 -0
- package/runtime/packages/setup/dist/src/onboarding.js +298 -0
- package/runtime/packages/setup/dist/src/outbox-attention.d.ts +51 -0
- package/runtime/packages/setup/dist/src/outbox-attention.js +98 -0
- package/runtime/packages/setup/dist/src/paths.d.ts +10 -0
- package/runtime/packages/setup/dist/src/paths.js +41 -0
- package/runtime/packages/setup/dist/src/platform/darwin.d.ts +17 -0
- package/runtime/packages/setup/dist/src/platform/darwin.js +270 -0
- package/runtime/packages/setup/dist/src/platform/linux.d.ts +9 -0
- package/runtime/packages/setup/dist/src/platform/linux.js +176 -0
- package/runtime/packages/setup/dist/src/platform/windows.d.ts +25 -0
- package/runtime/packages/setup/dist/src/platform/windows.js +189 -0
- package/runtime/packages/setup/dist/src/private-file.d.ts +5 -0
- package/runtime/packages/setup/dist/src/private-file.js +101 -0
- package/runtime/packages/setup/dist/src/reply-test.d.ts +25 -0
- package/runtime/packages/setup/dist/src/reply-test.js +75 -0
- package/runtime/packages/setup/dist/src/state.d.ts +3 -0
- package/runtime/packages/setup/dist/src/state.js +12 -0
- package/runtime/packages/setup/dist/src/status-line.d.ts +5 -0
- package/runtime/packages/setup/dist/src/status-line.js +19 -0
- package/runtime/packages/setup/dist/src/status.d.ts +137 -0
- package/runtime/packages/setup/dist/src/status.js +199 -0
- package/runtime/packages/setup/dist/src/types.d.ts +40 -0
- package/runtime/packages/setup/dist/src/types.js +1 -0
- package/runtime/packages/setup/dist/src/updates.d.ts +46 -0
- package/runtime/packages/setup/dist/src/updates.js +284 -0
- package/runtime/packages/setup/dist/src/verdict.d.ts +11 -0
- package/runtime/packages/setup/dist/src/verdict.js +159 -0
- package/runtime/packages/setup/package.json +1 -0
- package/runtime/plugins/claude-code/.claude-plugin/plugin.json +34 -0
- package/runtime/plugins/claude-code/.mcp.json +8 -0
- package/runtime/plugins/claude-code/scripts/configure-statusline.mjs +124 -0
- package/runtime/plugins/claude-code/scripts/statusline.mjs +210 -0
- package/runtime/plugins/claude-code/skills/inbox/SKILL.md +8 -0
- package/runtime/plugins/claude-code/skills/mark-read/SKILL.md +13 -0
- package/runtime/plugins/claude-code/skills/status/SKILL.md +13 -0
- package/runtime/scripts/ack-security.mjs +22 -0
- package/runtime/scripts/codex-app-server-wake.mjs +696 -0
- package/runtime/scripts/daemon-observation.mjs +48 -0
- package/runtime/scripts/doctor-protocol.mjs +96 -0
- package/runtime/scripts/lease.mjs +193 -0
- package/runtime/scripts/murmur-daemon.mjs +545 -0
- package/runtime/scripts/murmur-jetstream-advisory.mjs +11 -0
- package/runtime/scripts/murmur-shell-send.mjs +142 -0
- package/runtime/scripts/notify-router.mjs +309 -0
- package/runtime/scripts/runtime-capability.mjs +34 -0
- package/runtime/scripts/secure-state.mjs +105 -0
- package/runtime/scripts/wake-drain-claude.mjs +484 -0
- package/runtime/scripts/wake-monitor.mjs +653 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 alexfrmn
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Murmur CLI
|
|
2
|
+
|
|
3
|
+
Install once, join with a private invitation file, and connect an AI client to
|
|
4
|
+
Murmur's encrypted messaging mesh. The executable is `murmur`.
|
|
5
|
+
|
|
6
|
+
The public npm release is pending. After `@murmurv2/cli@2.11.0` is published,
|
|
7
|
+
use the command below. Until publication is confirmed, use a GitHub release
|
|
8
|
+
asset; older public registry packages do not contain the current fixes.
|
|
9
|
+
Maintainers rehearsing a release use only their coordinator-approved registry.
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
npm install --global @murmurv2/cli@2.11.0
|
|
13
|
+
murmur version --json
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Node.js **22.13.0 or newer** is required. No Git, TypeScript, Go, native compiler,
|
|
17
|
+
install lifecycle scripts or helper download is needed on the receiving machine.
|
|
18
|
+
The tarball includes the CLI, daemon, MCP entry, and prebuilt Windows x64 service
|
|
19
|
+
helper. It does not include a desktop application. On Windows PowerShell use
|
|
20
|
+
`npm.cmd` and `murmur.cmd` if execution policy blocks the PowerShell shims.
|
|
21
|
+
|
|
22
|
+
Run the following with the same absolute profile path on each line:
|
|
23
|
+
|
|
24
|
+
```sh
|
|
25
|
+
murmur join --agent-id YOUR-AGENT --invite-file /private/invite.txt --reply-out /private/reply.txt --data-dir /absolute/profile
|
|
26
|
+
murmur service install --data-dir /absolute/profile
|
|
27
|
+
murmur service start --data-dir /absolute/profile
|
|
28
|
+
murmur clients detect --data-dir /absolute/profile
|
|
29
|
+
murmur clients configure --client codex-cli --data-dir /absolute/profile
|
|
30
|
+
murmur doctor --peer HOST-AGENT --data-dir /absolute/profile --json
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The invitation host must import your reply file and reload its own peer
|
|
34
|
+
configuration before the roundtrip check can succeed. Keep the invitation and
|
|
35
|
+
reply outside the profile, in an existing private directory. Do not paste them
|
|
36
|
+
into chat or edit `agent-config.json` manually.
|
|
37
|
+
|
|
38
|
+
Choose an installed client reported by `clients detect`; configuration preserves
|
|
39
|
+
unrelated settings and refuses conflicting Murmur entries. Reload that client,
|
|
40
|
+
then require a returned `murmur_request` response. A daemon ACK alone is not an
|
|
41
|
+
agent reply or proof that an LLM woke up.
|
|
42
|
+
|
|
43
|
+
On Windows, run **service mutations only** from an elevated terminal. The CLI and
|
|
44
|
+
AI client normally run without elevation. The Windows service is x64-only in
|
|
45
|
+
this release. On Linux the service uses user systemd; on macOS it uses launchd.
|
|
46
|
+
Commands do not silently restart an existing daemon or replace an occupied profile.
|
|
47
|
+
|
|
48
|
+
For an isolated install, add `--prefix /absolute/npm-prefix` to the npm command
|
|
49
|
+
and use its generated `bin/murmur` (Windows: `murmur.cmd` in the prefix). Keep that
|
|
50
|
+
prefix in place while its service and client configuration refer to it.
|
|
51
|
+
|
|
52
|
+
[`docs/setup-onboarding.md`](https://github.com/alexfrmn/murmur/blob/main/docs/setup-onboarding.md)
|
|
53
|
+
documents the shared commands and their evidence limits.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// The npm payload keeps the same root-relative layout as release archives.
|
|
3
|
+
// Source checkouts and native bundles continue to use the ordinary CLI entry.
|
|
4
|
+
import { existsSync } from 'node:fs';
|
|
5
|
+
const packed = new URL('../runtime/packages/setup/bin/murmur.mjs', import.meta.url);
|
|
6
|
+
await import(existsSync(packed) ? packed.href : './murmur.mjs');
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@murmurv2/cli",
|
|
3
|
+
"version": "2.11.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "runtime/packages/setup/dist/src/index.js",
|
|
6
|
+
"types": "runtime/packages/setup/dist/src/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"murmur": "bin/murmur-npm.mjs"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc -b",
|
|
12
|
+
"prepack": "npm run build --prefix ../.. && node ../../scripts/prepare-cli-package.mjs"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@iarna/toml": "^2.2.5",
|
|
16
|
+
"@murmurv2/broker-nats": "^0.3.4",
|
|
17
|
+
"@murmurv2/core": "^0.6.3",
|
|
18
|
+
"@murmurv2/mcp-server": "^0.2.2",
|
|
19
|
+
"@murmurv2/security": "^0.1.1",
|
|
20
|
+
"nats": "^2.28.2",
|
|
21
|
+
"ws": "^8.21.0"
|
|
22
|
+
},
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=22.13.0"
|
|
25
|
+
},
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "git+https://github.com/alexfrmn/murmur.git",
|
|
30
|
+
"directory": "packages/setup"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
},
|
|
35
|
+
"description": "Murmur CLI — invite-based setup, background service, client configuration and diagnostics.",
|
|
36
|
+
"files": [
|
|
37
|
+
"bin/murmur-npm.mjs",
|
|
38
|
+
"runtime",
|
|
39
|
+
"LICENSE"
|
|
40
|
+
],
|
|
41
|
+
"homepage": "https://murmurconnect.com"
|
|
42
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "murmur.npm-cli/1",
|
|
3
|
+
"sourceCommit": "91279e5249e265cfe54dcd0904d9ae92fbb18ec5",
|
|
4
|
+
"sourceDirty": false,
|
|
5
|
+
"declaredVersion": "2.11.0",
|
|
6
|
+
"sourceLockSha256": "4317a76743610366f9b5846993c7c201bc2c0c4fcabfda2d5448e7ff921a9647",
|
|
7
|
+
"windowsHelper": {
|
|
8
|
+
"component": "windows-service",
|
|
9
|
+
"platform": "windows",
|
|
10
|
+
"arch": "amd64",
|
|
11
|
+
"version": "2.11.0",
|
|
12
|
+
"sourceCommit": "91279e5249e265cfe54dcd0904d9ae92fbb18ec5",
|
|
13
|
+
"sha256": "877f76eb7791c5a83b1a33dce0eaa7aa497eabdee2f877d750d695355cac76ab",
|
|
14
|
+
"size": 3128320,
|
|
15
|
+
"nativeVersionExecuted": false
|
|
16
|
+
},
|
|
17
|
+
"files": {
|
|
18
|
+
"package.json": {
|
|
19
|
+
"sha256": "7670e3b33c8ef783813b1b8860726f9dd2ba2bcdc7c49da05f2780d89fdc0d6b",
|
|
20
|
+
"size": 83
|
|
21
|
+
},
|
|
22
|
+
"packages/setup/package.json": {
|
|
23
|
+
"sha256": "ac61a66e834fcbad44a2fbed34dc2f7573309f1245bdd8e83dd9540803758df2",
|
|
24
|
+
"size": 132
|
|
25
|
+
},
|
|
26
|
+
"packages/setup/dist/src/appdata.d.ts": {
|
|
27
|
+
"sha256": "1e0cfde6b9b1ba6e9d6ba96dc197a8a429c299d2c8a159260b1d2982aa550253",
|
|
28
|
+
"size": 691
|
|
29
|
+
},
|
|
30
|
+
"packages/setup/dist/src/appdata.js": {
|
|
31
|
+
"sha256": "1c1627aa1724a56dc6631d728b56f7715de80d9f8b730cf69e7d0afbdf5b5ddc",
|
|
32
|
+
"size": 2678
|
|
33
|
+
},
|
|
34
|
+
"packages/setup/dist/src/cli.d.ts": {
|
|
35
|
+
"sha256": "6da2fbea536a227db1e8b1d7646d4554cd6e071b05240d5489203eaf007c72e2",
|
|
36
|
+
"size": 418
|
|
37
|
+
},
|
|
38
|
+
"packages/setup/dist/src/cli.js": {
|
|
39
|
+
"sha256": "13ab60762776c1750da857762f3957a08340e41c651cab6274f3a678b0480d31",
|
|
40
|
+
"size": 8745
|
|
41
|
+
},
|
|
42
|
+
"packages/setup/dist/src/clients.d.ts": {
|
|
43
|
+
"sha256": "74291be39ef9cffab6d483e38d955cdc0100e9d5ba0d734d77cad8d2f1fc01fb",
|
|
44
|
+
"size": 4380
|
|
45
|
+
},
|
|
46
|
+
"packages/setup/dist/src/clients.js": {
|
|
47
|
+
"sha256": "1098fe951626980c0c5717d8a211d282db5d6c4acfd09a055b8ebd2d1b9362ab",
|
|
48
|
+
"size": 13670
|
|
49
|
+
},
|
|
50
|
+
"packages/setup/dist/src/commands.d.ts": {
|
|
51
|
+
"sha256": "63f0a5e9834ca75bced2079cb4c4f0e087c1c7cd14ad958aeda5234bcd80337e",
|
|
52
|
+
"size": 1316
|
|
53
|
+
},
|
|
54
|
+
"packages/setup/dist/src/commands.js": {
|
|
55
|
+
"sha256": "eef7c76c21383b2dba733ce4967afa964c547a263333a380606b05eb197fb04f",
|
|
56
|
+
"size": 5731
|
|
57
|
+
},
|
|
58
|
+
"packages/setup/dist/src/config.d.ts": {
|
|
59
|
+
"sha256": "b244629bb9a19d4a48b813c817733d998efea543e8daec99e282010d4e784499",
|
|
60
|
+
"size": 1346
|
|
61
|
+
},
|
|
62
|
+
"packages/setup/dist/src/config.js": {
|
|
63
|
+
"sha256": "9ad91d6d9408f72166ed363eacac4496b1e831ccdda10cd28375f6e21521ef4e",
|
|
64
|
+
"size": 3212
|
|
65
|
+
},
|
|
66
|
+
"packages/setup/dist/src/doctor.d.ts": {
|
|
67
|
+
"sha256": "115b7cf132e4101fe4964173787902d9585f586ee83aa9ae1694161bd646804f",
|
|
68
|
+
"size": 827
|
|
69
|
+
},
|
|
70
|
+
"packages/setup/dist/src/doctor.js": {
|
|
71
|
+
"sha256": "9e240e1f0796ce5e3a6e64dbcc41c56a9febd285c2276f88bb15dde6d68c201e",
|
|
72
|
+
"size": 11225
|
|
73
|
+
},
|
|
74
|
+
"packages/setup/dist/src/file-identity.d.ts": {
|
|
75
|
+
"sha256": "1f5845364d263c80167ed533e46a02751a008d3993a6894aae50a13f646e6767",
|
|
76
|
+
"size": 290
|
|
77
|
+
},
|
|
78
|
+
"packages/setup/dist/src/file-identity.js": {
|
|
79
|
+
"sha256": "1c1f7fd4866339e03536681866a700f49faa0622c961f4e89ae97639d0374da8",
|
|
80
|
+
"size": 621
|
|
81
|
+
},
|
|
82
|
+
"packages/setup/dist/src/index.d.ts": {
|
|
83
|
+
"sha256": "8d863cf184dd6837b7d6544a202f6b2a19787b37e82bac379decc8a07268a7a0",
|
|
84
|
+
"size": 236
|
|
85
|
+
},
|
|
86
|
+
"packages/setup/dist/src/index.js": {
|
|
87
|
+
"sha256": "8d863cf184dd6837b7d6544a202f6b2a19787b37e82bac379decc8a07268a7a0",
|
|
88
|
+
"size": 236
|
|
89
|
+
},
|
|
90
|
+
"packages/setup/dist/src/onboarding.d.ts": {
|
|
91
|
+
"sha256": "b76892619695c2bd9298248d4e7557dce832a688aca0106c02939c4ae0352277",
|
|
92
|
+
"size": 1141
|
|
93
|
+
},
|
|
94
|
+
"packages/setup/dist/src/onboarding.js": {
|
|
95
|
+
"sha256": "caaec0a7f9e8f685185b096bccf1741ae93e7f64983602833ef4e1ccbff70544",
|
|
96
|
+
"size": 14985
|
|
97
|
+
},
|
|
98
|
+
"packages/setup/dist/src/outbox-attention.d.ts": {
|
|
99
|
+
"sha256": "a96effdd0e47701836fb93ab0c24a30d78f29fc0f3e7193406067535532ff962",
|
|
100
|
+
"size": 1606
|
|
101
|
+
},
|
|
102
|
+
"packages/setup/dist/src/outbox-attention.js": {
|
|
103
|
+
"sha256": "db70b6eed2338efe0c2875dbca9c0306cce3c940f0f7f09f3dff7c528ca377af",
|
|
104
|
+
"size": 5113
|
|
105
|
+
},
|
|
106
|
+
"packages/setup/dist/src/paths.d.ts": {
|
|
107
|
+
"sha256": "5c9ce9ac87f5fa90124fa071cc6a5d2176d045fc41de58deb53a0e3ef5d85504",
|
|
108
|
+
"size": 295
|
|
109
|
+
},
|
|
110
|
+
"packages/setup/dist/src/paths.js": {
|
|
111
|
+
"sha256": "967414a7d6b846af2d7122641e42d81d2f570d166c39d91f1c1a4a288400fb42",
|
|
112
|
+
"size": 2507
|
|
113
|
+
},
|
|
114
|
+
"packages/setup/dist/src/platform/darwin.d.ts": {
|
|
115
|
+
"sha256": "5980cc87fb445e076e91faed33976353a6e130949621364ee042a5647241785c",
|
|
116
|
+
"size": 591
|
|
117
|
+
},
|
|
118
|
+
"packages/setup/dist/src/platform/darwin.js": {
|
|
119
|
+
"sha256": "b361a9481c12aa5952dd9c18f30cf612f2126bef87993e6808acf38e56ae7422",
|
|
120
|
+
"size": 12996
|
|
121
|
+
},
|
|
122
|
+
"packages/setup/dist/src/platform/linux.d.ts": {
|
|
123
|
+
"sha256": "989d39cc9d5c73c9dae7dc926344fa2c6dde5e80f0a8d7657d5ce1f774da9b44",
|
|
124
|
+
"size": 375
|
|
125
|
+
},
|
|
126
|
+
"packages/setup/dist/src/platform/linux.js": {
|
|
127
|
+
"sha256": "ab86ab63919d8df3c5c8ccd3bec1d34b4926d847911c56ecf5f8acbcc6404e26",
|
|
128
|
+
"size": 9042
|
|
129
|
+
},
|
|
130
|
+
"packages/setup/dist/src/platform/windows.d.ts": {
|
|
131
|
+
"sha256": "9f2cb7a20c26f936c9878ca5d525edd7486142392452db47c49e5676e98e2808",
|
|
132
|
+
"size": 1123
|
|
133
|
+
},
|
|
134
|
+
"packages/setup/dist/src/platform/windows.js": {
|
|
135
|
+
"sha256": "1a6db62bf38dd56fe78a115e30dc003aef892453265add5e338f8b32beedb87c",
|
|
136
|
+
"size": 10787
|
|
137
|
+
},
|
|
138
|
+
"packages/setup/dist/src/private-file.d.ts": {
|
|
139
|
+
"sha256": "dd574a6f2135aa13064a45b452275aada896402243a4d147f7c417afe8199c4a",
|
|
140
|
+
"size": 443
|
|
141
|
+
},
|
|
142
|
+
"packages/setup/dist/src/private-file.js": {
|
|
143
|
+
"sha256": "ccd60c99d56aba56d6b9f691d99c5bc51086303557e70495e45602298ada22b6",
|
|
144
|
+
"size": 5499
|
|
145
|
+
},
|
|
146
|
+
"packages/setup/dist/src/reply-test.d.ts": {
|
|
147
|
+
"sha256": "aaa1e6357f33d0a6144e1d00dacfdf16363fa235cb376e7c3d4700f3d4d7fd33",
|
|
148
|
+
"size": 813
|
|
149
|
+
},
|
|
150
|
+
"packages/setup/dist/src/reply-test.js": {
|
|
151
|
+
"sha256": "9e477cb83b3d45e7f526b7381fb9a263a240981cf6846d22e88e791bc8e18f46",
|
|
152
|
+
"size": 5030
|
|
153
|
+
},
|
|
154
|
+
"packages/setup/dist/src/state.d.ts": {
|
|
155
|
+
"sha256": "868f415e920d37db4b714f8c5f771fafe3e46f84437f2a5b7d803c7be0e82841",
|
|
156
|
+
"size": 239
|
|
157
|
+
},
|
|
158
|
+
"packages/setup/dist/src/state.js": {
|
|
159
|
+
"sha256": "33d38685ece13a625d1bdb7118173fc358a778b3159a0525818a91f3ca89f62f",
|
|
160
|
+
"size": 632
|
|
161
|
+
},
|
|
162
|
+
"packages/setup/dist/src/status-line.d.ts": {
|
|
163
|
+
"sha256": "3836cac32982321f19c88bd9652ed0b1a1cf2cd47d67196faf612555b3543916",
|
|
164
|
+
"size": 244
|
|
165
|
+
},
|
|
166
|
+
"packages/setup/dist/src/status-line.js": {
|
|
167
|
+
"sha256": "14d7c3981e42b3db248d248ccd683b8dff51f8c07ed5a2f7712fe94769bfe607",
|
|
168
|
+
"size": 984
|
|
169
|
+
},
|
|
170
|
+
"packages/setup/dist/src/status.d.ts": {
|
|
171
|
+
"sha256": "426841217d3f9f6248a63d65fb708af3aa38cd481bad1390a68d1ec1a3910124",
|
|
172
|
+
"size": 4244
|
|
173
|
+
},
|
|
174
|
+
"packages/setup/dist/src/status.js": {
|
|
175
|
+
"sha256": "ddc80da3c1843cf84137b2543805c6c4cdf3316efe44870e6151476c1ca6d27c",
|
|
176
|
+
"size": 13155
|
|
177
|
+
},
|
|
178
|
+
"packages/setup/dist/src/types.d.ts": {
|
|
179
|
+
"sha256": "2d9d05df2818b22a2be5050288cfe9837f2669814218cbeca1be64b19a079463",
|
|
180
|
+
"size": 1506
|
|
181
|
+
},
|
|
182
|
+
"packages/setup/dist/src/types.js": {
|
|
183
|
+
"sha256": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",
|
|
184
|
+
"size": 11
|
|
185
|
+
},
|
|
186
|
+
"packages/setup/dist/src/updates.d.ts": {
|
|
187
|
+
"sha256": "10b685e6d83f4f4a6123abc2000f9f67ca08573b3bc25cbf22c67cce812d4ea9",
|
|
188
|
+
"size": 1606
|
|
189
|
+
},
|
|
190
|
+
"packages/setup/dist/src/updates.js": {
|
|
191
|
+
"sha256": "7c005f543068a0e33027857376efd712938142840f79fb5995f1200d8defb3fd",
|
|
192
|
+
"size": 12731
|
|
193
|
+
},
|
|
194
|
+
"packages/setup/dist/src/verdict.d.ts": {
|
|
195
|
+
"sha256": "1945fb3a7054345b6f5166dd80708ab9466cde70772d62200a48d7a43f9c13b6",
|
|
196
|
+
"size": 505
|
|
197
|
+
},
|
|
198
|
+
"packages/setup/dist/src/verdict.js": {
|
|
199
|
+
"sha256": "3b3265b31dc366745a42a48ac56655d838586197bba9774a0b47c90c02a9099b",
|
|
200
|
+
"size": 7929
|
|
201
|
+
},
|
|
202
|
+
"packages/setup/bin/murmur.mjs": {
|
|
203
|
+
"sha256": "6761c1030f648455e3b99499cd1fa7a356b091700dbbcb2392623315243c5bb5",
|
|
204
|
+
"size": 1408
|
|
205
|
+
},
|
|
206
|
+
"packages/mcp-server/package.json": {
|
|
207
|
+
"sha256": "89c47db7851f89caec72da4f215ebc21cf1e294aeef3b45d2583562d846ab035",
|
|
208
|
+
"size": 33
|
|
209
|
+
},
|
|
210
|
+
"packages/mcp-server/dist/src/index.js": {
|
|
211
|
+
"sha256": "506403a79cff2f69ba25b04c4cb7a66477c7ab3c7e38e5399a9bfb98a0ea4c41",
|
|
212
|
+
"size": 31
|
|
213
|
+
},
|
|
214
|
+
"scripts/murmur-daemon.mjs": {
|
|
215
|
+
"sha256": "e3f7a2dfcb842ea4a908fd0e10ab6c5f066ea3034af51991c3326a1bcf808be6",
|
|
216
|
+
"size": 22863
|
|
217
|
+
},
|
|
218
|
+
"scripts/murmur-shell-send.mjs": {
|
|
219
|
+
"sha256": "5e0ae14f59b634f89751c0487edbf7b9f03f95b0a38e55d5619d392bd2343eee",
|
|
220
|
+
"size": 5105
|
|
221
|
+
},
|
|
222
|
+
"scripts/runtime-capability.mjs": {
|
|
223
|
+
"sha256": "1ee5358161a678c763df9f84bd05068c4938e5166a3f59b1535b54dcb5621d9c",
|
|
224
|
+
"size": 1816
|
|
225
|
+
},
|
|
226
|
+
"scripts/notify-router.mjs": {
|
|
227
|
+
"sha256": "bd6a2277293f5ee05d4ee71cbd96cea06dafbcbae578ae94d5e3492ed0f1cac5",
|
|
228
|
+
"size": 10755
|
|
229
|
+
},
|
|
230
|
+
"scripts/codex-app-server-wake.mjs": {
|
|
231
|
+
"sha256": "8b3d975498f5904d42a18bc345a943a4707d9b147f5ae81fd050645796e97c26",
|
|
232
|
+
"size": 26600
|
|
233
|
+
},
|
|
234
|
+
"scripts/murmur-jetstream-advisory.mjs": {
|
|
235
|
+
"sha256": "4232c92418d46bd4c6bc4785641dd226f58a79e35211e51a469a8d469065e0a7",
|
|
236
|
+
"size": 326
|
|
237
|
+
},
|
|
238
|
+
"scripts/wake-monitor.mjs": {
|
|
239
|
+
"sha256": "416dd71e7e93b6827d9e603438804856cd38e7b575d9842ee33442a856a07cef",
|
|
240
|
+
"size": 31907
|
|
241
|
+
},
|
|
242
|
+
"scripts/lease.mjs": {
|
|
243
|
+
"sha256": "c380ec90c0b5cef4d010df4d59793f86f0dc319c82039997c3d8884a9e92f56e",
|
|
244
|
+
"size": 9613
|
|
245
|
+
},
|
|
246
|
+
"scripts/secure-state.mjs": {
|
|
247
|
+
"sha256": "31d7001f38f9f0294726c811e7847fad8a637986565c3eabc4c57ca0666a4a32",
|
|
248
|
+
"size": 3280
|
|
249
|
+
},
|
|
250
|
+
"scripts/daemon-observation.mjs": {
|
|
251
|
+
"sha256": "cef36ccf407d3c45c11ad796c709f05176faedc2af7adfdd0f618d306a03f459",
|
|
252
|
+
"size": 2349
|
|
253
|
+
},
|
|
254
|
+
"scripts/ack-security.mjs": {
|
|
255
|
+
"sha256": "bb769e874b6d4144b074596ba4c99dac4b6987b1e0e2967ffcf5fa73962e41a1",
|
|
256
|
+
"size": 1265
|
|
257
|
+
},
|
|
258
|
+
"scripts/doctor-protocol.mjs": {
|
|
259
|
+
"sha256": "e373b1ff7801bde10c016cb5d24fefdec39382127008a5c359c804338bd5dc13",
|
|
260
|
+
"size": 5282
|
|
261
|
+
},
|
|
262
|
+
"scripts/wake-drain-claude.mjs": {
|
|
263
|
+
"sha256": "9f5d95c4242b56cd01b09e2198bb3dc4cbd819d8acf1bf664016f364279ca046",
|
|
264
|
+
"size": 22815
|
|
265
|
+
},
|
|
266
|
+
"plugins/claude-code/.claude-plugin/plugin.json": {
|
|
267
|
+
"sha256": "39743b9ea55f475c767dba430e1014fcfa19648e95ddcf0da9b0128f1744ec88",
|
|
268
|
+
"size": 1133
|
|
269
|
+
},
|
|
270
|
+
"plugins/claude-code/.mcp.json": {
|
|
271
|
+
"sha256": "a865cd60e7bd1eaf8b025dc8e5fb7ae8d7425ca8996058ef1eed54f4bed9fe13",
|
|
272
|
+
"size": 204
|
|
273
|
+
},
|
|
274
|
+
"plugins/claude-code/scripts/statusline.mjs": {
|
|
275
|
+
"sha256": "2d56e8f40ecb472cc8bbf066437d490ead8bc8c102a14259e0252f6fcf83b4a0",
|
|
276
|
+
"size": 9050
|
|
277
|
+
},
|
|
278
|
+
"plugins/claude-code/scripts/configure-statusline.mjs": {
|
|
279
|
+
"sha256": "7d611f947ee005db1f039ea7892960536aabc1ffa9f59364b83663a27c4fabdb",
|
|
280
|
+
"size": 6971
|
|
281
|
+
},
|
|
282
|
+
"plugins/claude-code/skills/status/SKILL.md": {
|
|
283
|
+
"sha256": "fd85f335c85f2e86a6ee0f6d15c88b2e9a7c8e2939f4259f3d8905ea38714039",
|
|
284
|
+
"size": 601
|
|
285
|
+
},
|
|
286
|
+
"plugins/claude-code/skills/inbox/SKILL.md": {
|
|
287
|
+
"sha256": "053f63072a7423a163f69acfac08a2bd6bcdf3aa2f01990f8e694e6e30a8dca1",
|
|
288
|
+
"size": 526
|
|
289
|
+
},
|
|
290
|
+
"plugins/claude-code/skills/mark-read/SKILL.md": {
|
|
291
|
+
"sha256": "a9117d5186527ee563eed9a46bc942a467211ae75eb08c5265fe6ded5b6aca8c",
|
|
292
|
+
"size": 705
|
|
293
|
+
},
|
|
294
|
+
"bin/murmur-svc.exe": {
|
|
295
|
+
"sha256": "877f76eb7791c5a83b1a33dce0eaa7aa497eabdee2f877d750d695355cac76ab",
|
|
296
|
+
"size": 3128320
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name":"murmur","private":true,"version":"2.11.0","engines":{"node":">=22.13.0"}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "@murmurv2/mcp-server";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module","private":true}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { checkRuntime } from '../../../scripts/runtime-capability.mjs';
|
|
3
|
+
// Murmur requires node:sqlite (checked below); Node's ExperimentalWarning for it on every command
|
|
4
|
+
// only tells a new user that something is wrong. Other warnings pass through unchanged.
|
|
5
|
+
const emitWarning = process.emitWarning;
|
|
6
|
+
process.emitWarning = function (warning, ...rest) {
|
|
7
|
+
const type = typeof rest[0] === 'string' ? rest[0] : rest[0]?.type ?? warning?.name;
|
|
8
|
+
if (type === 'ExperimentalWarning' && /SQLite/.test(String(warning?.message ?? warning))) return;
|
|
9
|
+
return emitWarning.call(this, warning, ...rest);
|
|
10
|
+
};
|
|
11
|
+
try { await checkRuntime(); }
|
|
12
|
+
catch (error) { process.stderr.write(error.message + '\n'); process.exit(1); }
|
|
13
|
+
// Dynamic imports let the capability check run before the engine imports SQLite.
|
|
14
|
+
const { main, isRawCliOutput } = await import('../dist/src/cli.js');
|
|
15
|
+
const { safeError } = await import('../dist/src/config.js');
|
|
16
|
+
const lineMode = process.argv[2] === 'status' && process.argv.includes('--line');
|
|
17
|
+
try {
|
|
18
|
+
const result = await main(process.argv.slice(2));
|
|
19
|
+
if (isRawCliOutput(result)) {
|
|
20
|
+
if (result.text) process.stdout.write(result.text + '\n');
|
|
21
|
+
} else process.stdout.write(JSON.stringify(result) + '\n');
|
|
22
|
+
} catch (error) {
|
|
23
|
+
if (lineMode) process.stdout.write('Murmur: unknown (status.command-failed)\n');
|
|
24
|
+
process.stderr.write(safeError(error) + '\n');
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A process with MSIX package identity (e.g. an app installed from Microsoft Store) sees AppData
|
|
3
|
+
* virtualized: writes to %LOCALAPPDATA%\X land in %LOCALAPPDATA%\Packages\<pkg>\LocalCache\Local\X,
|
|
4
|
+
* while the LocalSystem service reads the real, empty %LOCALAPPDATA%\X. Detect it by filesystem
|
|
5
|
+
* identity, not by name: inside the package the profile and its LocalCache twin are one directory,
|
|
6
|
+
* outside it a leftover twin is a different one. A profile that does not exist yet is probed in its
|
|
7
|
+
* nearest existing ancestor with a temporary directory that is removed again.
|
|
8
|
+
*/
|
|
9
|
+
export declare function refuseVirtualizedAppData(dataDir: string, env?: NodeJS.ProcessEnv): Promise<void>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { mkdir, readdir, rmdir, stat } from 'node:fs/promises';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { sameClientFileIdentity } from './file-identity.js';
|
|
5
|
+
const paths = path.win32;
|
|
6
|
+
const inside = (base, dir) => {
|
|
7
|
+
const relative = paths.relative(base, dir);
|
|
8
|
+
return relative && !relative.startsWith('..') && !paths.isAbsolute(relative) ? relative : null;
|
|
9
|
+
};
|
|
10
|
+
// BigInt: NTFS file IDs exceed 2^53. Compared with sameClientFileIdentity, because Node 22.13 on
|
|
11
|
+
// Windows reports dev 0 for a plain path and the real volume serial through a junction.
|
|
12
|
+
const identity = (dir) => stat(dir, { bigint: true }).catch(() => null);
|
|
13
|
+
/**
|
|
14
|
+
* A process with MSIX package identity (e.g. an app installed from Microsoft Store) sees AppData
|
|
15
|
+
* virtualized: writes to %LOCALAPPDATA%\X land in %LOCALAPPDATA%\Packages\<pkg>\LocalCache\Local\X,
|
|
16
|
+
* while the LocalSystem service reads the real, empty %LOCALAPPDATA%\X. Detect it by filesystem
|
|
17
|
+
* identity, not by name: inside the package the profile and its LocalCache twin are one directory,
|
|
18
|
+
* outside it a leftover twin is a different one. A profile that does not exist yet is probed in its
|
|
19
|
+
* nearest existing ancestor with a temporary directory that is removed again.
|
|
20
|
+
*/
|
|
21
|
+
export async function refuseVirtualizedAppData(dataDir, env = process.env) {
|
|
22
|
+
if (process.platform !== 'win32' || !env.LOCALAPPDATA)
|
|
23
|
+
return;
|
|
24
|
+
const packages = paths.join(env.LOCALAPPDATA, 'Packages');
|
|
25
|
+
if (inside(packages, dataDir) !== null)
|
|
26
|
+
return;
|
|
27
|
+
const bases = [[env.LOCALAPPDATA, 'Local'], [env.APPDATA, 'Roaming']];
|
|
28
|
+
const base = bases.find(([root]) => root && inside(root, dataDir) !== null);
|
|
29
|
+
if (!base)
|
|
30
|
+
return;
|
|
31
|
+
// Climb to the nearest existing directory that is still inside the AppData root.
|
|
32
|
+
let probe = null, target = dataDir;
|
|
33
|
+
while (!(await identity(target)) && inside(base[0], paths.dirname(target)) !== null)
|
|
34
|
+
target = paths.dirname(target);
|
|
35
|
+
if (!(await identity(target))) {
|
|
36
|
+
target = paths.join(paths.dirname(target), `.murmur-appdata-probe-${randomUUID()}`);
|
|
37
|
+
await mkdir(target);
|
|
38
|
+
probe = target;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const own = (await identity(target)), relative = inside(base[0], target);
|
|
42
|
+
const names = await readdir(packages).catch(() => []);
|
|
43
|
+
for (const name of names) {
|
|
44
|
+
const twin = await identity(paths.join(packages, name, 'LocalCache', base[1], relative));
|
|
45
|
+
if (twin && sameClientFileIdentity(twin, own))
|
|
46
|
+
throw new Error('profile.virtualized-appdata');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
if (probe)
|
|
51
|
+
await rmdir(probe).catch(() => { });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PlatformAdapter } from './types.js';
|
|
2
|
+
export declare function platformAdapter(): PlatformAdapter;
|
|
3
|
+
export interface RawCliOutput {
|
|
4
|
+
kind: 'raw';
|
|
5
|
+
text: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const rawCliOutput: (text: string) => RawCliOutput;
|
|
8
|
+
export declare const isRawCliOutput: (value: unknown) => value is RawCliOutput;
|
|
9
|
+
export declare function main(args: string[], adapter?: PlatformAdapter): Promise<unknown>;
|