browsentic 0.4.9 → 0.4.10

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/dist/cli.js CHANGED
@@ -31308,14 +31308,24 @@ var DEFAULT_RULES = [
31308
31308
  // its work: the panel puts the source behind a Review button, because "allow this
31309
31309
  // action?" is not a question anyone can answer about code they have not read. It
31310
31310
  // confirms rather than denies because a reviewed function is how twenty repetitions
31311
- // stop being twenty round trips — and `unattended: deny` keeps an external MCP
31312
- // client, which has nobody to show the code to, from installing any at all.
31311
+ // stop being twenty round trips.
31313
31312
  id: "code-injection",
31314
31313
  when: "injectsCode",
31315
31314
  effect: "confirm",
31316
31315
  title: "Runs code it wrote in the page",
31317
31316
  reason: "That installs JavaScript the agent wrote into the page, with your logged-in session."
31318
31317
  },
31318
+ {
31319
+ // `code-injection` confirms, and a confirm is what `unattended: allow` waives, so on
31320
+ // its own it left installation one config line away from an MCP client. Denying is
31321
+ // not a duplicate of that rule: it is the half that cannot be configured off, which
31322
+ // is what the equivalent rule below has always been for calls.
31323
+ id: "external-code-injection",
31324
+ when: "injectsCodeOutsideThePanel",
31325
+ effect: "deny",
31326
+ title: "Installs code from outside the panel",
31327
+ reason: "Installing page code needs a person to read it first, and an MCP client has nobody to show it to. Ask from the Browsentic side panel instead."
31328
+ },
31319
31329
  {
31320
31330
  id: "external-code-execution",
31321
31331
  when: "runsCodeOutsideThePanel",
@@ -33862,7 +33872,7 @@ function text2(uri, mimeType, body) {
33862
33872
  // package.json
33863
33873
  var package_default = {
33864
33874
  name: "browsentic",
33865
- version: "0.4.9",
33875
+ version: "0.4.10",
33866
33876
  description: "Hand your real, logged-in browser to the AI agent you already run. Installs the browser extension, runs the local daemon, and speaks MCP.",
33867
33877
  type: "module",
33868
33878
  license: "MIT",
@@ -22633,11 +22633,16 @@ var CONDITIONS = {
22633
22633
  */
22634
22634
  injectsCode: (request) => request.action === INJECT_ACTION,
22635
22635
  /**
22636
- * The one place a caller is named in a condition rather than left to `unattended`.
22636
+ * The two places a caller is named in a condition rather than left to `unattended`.
22637
22637
  * A toolkit is approved by a person reading it in the side panel, for the conversation
22638
22638
  * they were having; an MCP client was never in that room, and the switch the user
22639
22639
  * turned off is not one it can see.
22640
+ *
22641
+ * Both halves have to say so themselves. `unattended` only answers a `confirm`, so a
22642
+ * rule that merely confirms is one config line away from being waived, and writing new
22643
+ * code is the more powerful half of the pair, not the lesser one.
22640
22644
  */
22645
+ injectsCodeOutsideThePanel: (request) => request.action === INJECT_ACTION && request.caller === "external",
22641
22646
  runsCodeOutsideThePanel: (request) => request.action === RUN_CODE_ACTION && request.caller === "external",
22642
22647
  /**
22643
22648
  * Turns a sealed placeholder back into the credential it stands for. The release
@@ -22726,14 +22731,24 @@ var DEFAULT_RULES = [
22726
22731
  // its work: the panel puts the source behind a Review button, because "allow this
22727
22732
  // action?" is not a question anyone can answer about code they have not read. It
22728
22733
  // confirms rather than denies because a reviewed function is how twenty repetitions
22729
- // stop being twenty round trips — and `unattended: deny` keeps an external MCP
22730
- // client, which has nobody to show the code to, from installing any at all.
22734
+ // stop being twenty round trips.
22731
22735
  id: "code-injection",
22732
22736
  when: "injectsCode",
22733
22737
  effect: "confirm",
22734
22738
  title: "Runs code it wrote in the page",
22735
22739
  reason: "That installs JavaScript the agent wrote into the page, with your logged-in session."
22736
22740
  },
22741
+ {
22742
+ // `code-injection` confirms, and a confirm is what `unattended: allow` waives, so on
22743
+ // its own it left installation one config line away from an MCP client. Denying is
22744
+ // not a duplicate of that rule: it is the half that cannot be configured off, which
22745
+ // is what the equivalent rule below has always been for calls.
22746
+ id: "external-code-injection",
22747
+ when: "injectsCodeOutsideThePanel",
22748
+ effect: "deny",
22749
+ title: "Installs code from outside the panel",
22750
+ reason: "Installing page code needs a person to read it first, and an MCP client has nobody to show it to. Ask from the Browsentic side panel instead."
22751
+ },
22737
22752
  {
22738
22753
  id: "external-code-execution",
22739
22754
  when: "runsCodeOutsideThePanel",
@@ -27093,7 +27108,7 @@ X-Browsentic-Reason: ${reason}\r
27093
27108
  // package.json
27094
27109
  var package_default = {
27095
27110
  name: "browsentic",
27096
- version: "0.4.9",
27111
+ version: "0.4.10",
27097
27112
  description: "Hand your real, logged-in browser to the AI agent you already run. Installs the browser extension, runs the local daemon, and speaks MCP.",
27098
27113
  type: "module",
27099
27114
  license: "MIT",
@@ -1 +1 @@
1
- {"manifest_version":3,"name":"Browsentic","description":"Reimagine browsing as agentic — driven by the AI agent you already run, in your own logged-in browser.","version":"0.4.9","icons":{"16":"icon/16.png","32":"icon/32.png","48":"icon/48.png","96":"icon/96.png","128":"icon/128.png"},"permissions":["storage","unlimitedStorage","activeTab","sidePanel","contextMenus","alarms","scripting","notifications","debugger","downloads"],"host_permissions":["<all_urls>"],"background":{"service_worker":"background.js"},"action":{"default_title":"Browsentic","default_popup":"popup.html"},"side_panel":{"default_path":"sidepanel.html"},"content_scripts":[{"matches":["*://*/*"],"js":["content-scripts/content.js"]}]}
1
+ {"manifest_version":3,"name":"Browsentic","description":"Reimagine browsing as agentic — driven by the AI agent you already run, in your own logged-in browser.","version":"0.4.10","icons":{"16":"icon/16.png","32":"icon/32.png","48":"icon/48.png","96":"icon/96.png","128":"icon/128.png"},"permissions":["storage","unlimitedStorage","activeTab","sidePanel","contextMenus","alarms","scripting","notifications","debugger","downloads"],"host_permissions":["<all_urls>"],"background":{"service_worker":"background.js"},"action":{"default_title":"Browsentic","default_popup":"popup.html"},"side_panel":{"default_path":"sidepanel.html"},"content_scripts":[{"matches":["*://*/*"],"js":["content-scripts/content.js"]}]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browsentic",
3
- "version": "0.4.9",
3
+ "version": "0.4.10",
4
4
  "description": "Hand your real, logged-in browser to the AI agent you already run. Installs the browser extension, runs the local daemon, and speaks MCP.",
5
5
  "type": "module",
6
6
  "license": "MIT",