brosh 0.1.7 → 0.1.9

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brosh",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "Terminal MCP bridge for AI-powered development",
5
5
  "author": "Ellery Familia",
6
6
  "repository": {
@@ -8,5 +8,7 @@
8
8
  <true/>
9
9
  <key>com.apple.security.cs.disable-library-validation</key>
10
10
  <true/>
11
+ <key>com.apple.security.device.audio-input</key>
12
+ <true/>
11
13
  </dict>
12
14
  </plist>
@@ -10,5 +10,7 @@
10
10
  <true/>
11
11
  <key>com.apple.security.network.client</key>
12
12
  <true/>
13
+ <key>com.apple.security.device.audio-input</key>
14
+ <true/>
13
15
  </dict>
14
16
  </plist>
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "brosh-desktop",
3
3
  "productName": "brosh",
4
- "version": "0.1.1",
4
+ "version": "0.1.9",
5
5
  "description": "Desktop GUI for brosh - A terminal emulator with MCP support",
6
6
  "author": {
7
7
  "name": "Ellery Familia",
@@ -31,7 +31,7 @@
31
31
  "postpackage": "rm -rf node_modules/brosh && npm install",
32
32
  "download-models": "node scripts/download-models.js",
33
33
  "prepare-sandbox-bins": "node scripts/prepare-sandbox-bins.js",
34
- "postinstall": "node scripts/download-models.js",
34
+ "postinstall": "node scripts/download-models.js && node scripts/fix-dev-entitlements.js",
35
35
  "test": "vitest run",
36
36
  "test:watch": "vitest",
37
37
  "test:coverage": "vitest run --coverage"
@@ -172,7 +172,8 @@
172
172
  "notarize": true,
173
173
  "extendInfo": {
174
174
  "NSSupportsAutomaticTermination": false,
175
- "NSSupportsSuddenTermination": false
175
+ "NSSupportsSuddenTermination": false,
176
+ "NSMicrophoneUsageDescription": "brosh needs microphone access for voice input features."
176
177
  }
177
178
  },
178
179
  "win": {
@@ -188,7 +189,12 @@
188
189
  "executableName": "brosh"
189
190
  },
190
191
  "deb": {
191
- "afterInstall": "build/afterInstall-linux.sh"
192
+ "afterInstall": "build/afterInstall-linux.sh",
193
+ "recommends": [
194
+ "bubblewrap",
195
+ "socat",
196
+ "ripgrep"
197
+ ]
192
198
  }
193
199
  }
194
200
  }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Re-sign the dev Electron binary with microphone entitlement.
3
+ *
4
+ * The stock Electron.app ships with a broken signature on macOS, so
5
+ * systemPreferences.askForMediaAccess("microphone") silently returns
6
+ * "denied" instead of showing the TCC prompt. Re-signing with ad-hoc
7
+ * identity + the audio-input entitlement fixes this.
8
+ *
9
+ * Runs automatically via postinstall; safe to re-run at any time.
10
+ */
11
+
12
+ import { execFileSync } from "child_process";
13
+ import { writeFileSync, unlinkSync, existsSync } from "fs";
14
+ import { join, dirname } from "path";
15
+ import { fileURLToPath } from "url";
16
+
17
+ const __dirname = dirname(fileURLToPath(import.meta.url));
18
+
19
+ if (process.platform !== "darwin") {
20
+ process.exit(0);
21
+ }
22
+
23
+ const electronApp = join(
24
+ __dirname,
25
+ "../node_modules/electron/dist/Electron.app"
26
+ );
27
+
28
+ if (!existsSync(electronApp)) {
29
+ // electron not installed yet (possible during CI)
30
+ process.exit(0);
31
+ }
32
+
33
+ const entitlements = `<?xml version="1.0" encoding="UTF-8"?>
34
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
35
+ <plist version="1.0">
36
+ <dict>
37
+ <key>com.apple.security.device.audio-input</key>
38
+ <true/>
39
+ </dict>
40
+ </plist>`;
41
+
42
+ const tmpPlist = join(__dirname, "_dev-entitlements.plist");
43
+
44
+ try {
45
+ writeFileSync(tmpPlist, entitlements);
46
+ execFileSync("codesign", [
47
+ "--force", "--deep", "--sign", "-",
48
+ "--entitlements", tmpPlist,
49
+ electronApp,
50
+ ], { stdio: "inherit" });
51
+ console.log("[fix-dev-entitlements] Electron.app re-signed with microphone entitlement");
52
+ } catch (err) {
53
+ console.warn("[fix-dev-entitlements] Failed to re-sign Electron.app:", err.message);
54
+ } finally {
55
+ try { unlinkSync(tmpPlist); } catch {}
56
+ }
@@ -1,16 +1,16 @@
1
1
  -----BEGIN PGP SIGNATURE-----
2
2
 
3
- iQIzBAABCgAdFiEEX8WeGtXPO7P8xoFftW8bjWv2UfkFAmmhzmMACgkQtW8bjWv2
4
- UfnNaBAAhaGt2TUGLYDfUzxWfZrgMJIMMxVEGsczty8rRH2iaqa2jKv1B+uusQsq
5
- j6Qg1w+X8LmtWQR9atyGBsdARn1c2lSacbFr59KzLPnTxFmmT7CFiBOcxJOLNg+q
6
- p1FKxLlQ29X4sYNLTZmqmmyDdHZX4ip6n+iyBbPPEqFc0n7lYsD7S4zIeQSCYHA9
7
- BLVDi+nNh+BGwJBQPfpZMPv+RtSd54CBAxSt39We1tyU8uDxaA8prgujAPWrZwvY
8
- 80zKpDYDMprqxpByIKtyCq6SyMTdVal+RLVMJBdTXAkylH5fBTNKRF/QnM4BnHW5
9
- RXKcxZGfnqYnbGdS1MQ0wRB0DqbFmjXsGgZdah0bGdQN+zkC1d/gSbNlJwbWFE7Q
10
- Z64a1M7DO6PbWNDg2Tf7HNpt626R/VBpByBGsyPe/tXrFu7hzUWRAUdYVoYirarA
11
- +o1oXjX8AzIIrTa1HUpQjj0OwY4k8p/Xw+8dEMI+b5E44epL74KBVuQydxz7SP11
12
- dutOcV5y+Y9+Al60VrmyvYG2W/SZMg8EP+PZDQv0Xv4PMTiNV9FCU560N0m1kf/2
13
- dbxAz3iwTkf9mru0p8iqa28lpN3tJlDVnExMGedYjXrd7BBdjR6U68iGuoh7dNk6
14
- RVcU5rQzGyxYz3TAb0WRQkYdyf0wTHh6Em9+NOcGZet95te6xdY=
15
- =BSec
3
+ iQIzBAABCgAdFiEEX8WeGtXPO7P8xoFftW8bjWv2UfkFAmmq97gACgkQtW8bjWv2
4
+ UfkJiA//bYA7MM65S+WgNMgxUgJIvwoewGF7VfCC+BpnA+JoadB2DEhDXd4NN2Mb
5
+ qBvjwAfu+ys++5DWUaiYtWJIBFGx0Z1eiN3Yd8GQH+00WLQIhQ2iLLgPkWfa6iP6
6
+ omXRImvdszWk7fdTdnj6MJjWDeTq7i1cFcTbnJww9Pr0xLvqGueCmu/OCeCynYD9
7
+ GLI/ZXzNkXTAK3YQCJMuj1RQJ2mt5e5DNGh0IjEpfvSM8YpBpQL02ZoJmnKOj9td
8
+ lvyndZKkyz8PD6Fxzc7CYvwuEVIDZ97Nr+xCQjbX29DrgmLwSDjqGFL6/GmbDkIW
9
+ rVShn305Pxzc+mT+d03oMsSsAgOniqtqxIGXyM6bp/PV3uOqUOFa3dRCZXFQVQ5k
10
+ +YNdrlTBPjk8DxTrzXuOAwGudT3kjF34AfG2N/x4tcwEq49/2oIlb7K3FJ+xfCO6
11
+ NexMGyzr58O48SRvgbciBbNL9uMbN3oOmmijweWEMw8WQrxCBB+k/0vco822uhCA
12
+ 27e4vKcwIDSZy29sEIFXvcUh7eYDw3jtClZmQgpw8M+kJukjH+oCOGhpOVi4UiP2
13
+ 7reYeG32dz18+lzDoiVMO8992EhFEKlr70XHVr4ZqX4Eo4MjZiJrRi48DFfAu/WU
14
+ rIuavdTRGNZCvPN1Ftqi0XSZsdChLOiuVd2lBt/idzje10bhKj8=
15
+ =vyg/
16
16
  -----END PGP SIGNATURE-----