Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"changes": [
{
"packageName": "@excom/fetchable-element",
"comment": "Fix typo in error message.",
"type": "patch"
}
],
"packageName": "@excom/fetchable-element"
}
2 changes: 1 addition & 1 deletion packages/fetchable-element/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ async function callFetch(
: await response.text(),
};
if (responseData.status >= 400) {
throw new Error("Reponse error code: " + responseData.status);
throw new Error("Response error code: " + responseData.status);
}
return responseData;
} catch (error) {
Expand Down
Binary file added packages/nucleus-devtools/public/icon/128.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/nucleus-devtools/public/icon/16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/nucleus-devtools/public/icon/32.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/nucleus-devtools/public/icon/48.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/nucleus-devtools/public/icon/96.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
26 changes: 26 additions & 0 deletions packages/nucleus-devtools/support/docs/PRIVACY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Privacy policy

Nucleus DevTools collects no data. Everything it records stays inside your browser and is discarded when the page or tab closes.

## What the extension does

The extension installs a small probe on every page you open. The probe is dormant unless the page uses `@excom/neutron` or `@excom/quark`; on those pages it records element lifecycles and Quark rule runs so the **Element** pane in Chrome DevTools can show them. The optional paint heatmap draws an overlay inside the page; it writes nothing to the page's elements and disappears when switched off.

## What is collected, stored or transmitted

- **Collected:** nothing. The extension has no analytics, no telemetry, no crash reporting and no account.
- **Stored:** one boolean, the heatmap toggle, in `chrome.storage.session`. It is cleared when the browser closes.
- **Transmitted:** nothing. The extension makes no network requests and contains no remote code.

Recorded lifecycle and rule data lives in the memory of the page it came from and is never persisted, copied to other tabs or sent anywhere. **Copy for AI** places a JSON report on your clipboard only when you click it; where you paste it is up to you.

## Permissions

- **Access to all sites** (`<all_urls>` content scripts): the probe must be present from the first byte of any page that might use the Nucleus Stack, and the extension cannot know which pages those are in advance. On every other page the probe does nothing.
- **storage:** the heatmap toggle above.

## Contact

Questions about this policy: open an issue at [github.com/excom-dev/nucleus](https://github.com/excom-dev/nucleus/issues).

Last updated 2026-09-23.
12 changes: 12 additions & 0 deletions packages/nucleus-devtools/support/docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,15 @@ pane shows *who* changed it and *how*.

## Installation

> **Pending review.** The extension has been submitted to the Chrome Web Store and is awaiting Google's approval. Until it is listed, install it from the release zip:
>
> 1. Download `nucleus-devtools-<version>-chrome.zip` from the [latest GitHub release](https://github.com/excom-dev/nucleus/releases) and unzip it.
> 2. Open `chrome://extensions` and switch on **Developer mode** (top right).
> 3. Click **Load unpacked** and pick the unzipped folder.
> 4. Reload any Nucleus Stack page that was already open, then open DevTools → Elements → **Element** pane.
>
> A build installed this way does not update itself; grab the next release zip to update. This note goes away once the store listing is live.

Install from the [Chrome Web Store](https://chromewebstore.google.com/detail/nucleus-devtools)
(also loads in Edge, Brave and other Chromium browsers).

Expand All @@ -40,6 +49,9 @@ from the [GitHub releases](https://github.com/excom-dev/nucleus/releases),
unzip it, open `chrome://extensions`, enable *Developer mode* and choose
*Load unpacked*.

The extension collects no data and makes no network requests — see the
[privacy policy](./PRIVACY.md).

## Usage

1. Open DevTools on a page built with the Nucleus Stack.
Expand Down
19 changes: 19 additions & 0 deletions packages/nucleus-devtools/support/icon/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
78 changes: 78 additions & 0 deletions packages/nucleus-devtools/support/store/LISTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Chrome Web Store listing

Copy for the Developer Dashboard. Fields are named as the dashboard names
them (2026). The zip to upload is `.output/nucleus-devtools-<version>-chrome.zip`
from `pnpm run zip`.

## Store listing

**Title** (from manifest): Nucleus DevTools

**Summary** (from manifest, 132 chars max):
Element sidebar — Neutron lifecycle and Quark orchestration publications for the selected element

**Description**:

See exactly what every element did and why — Neutron lifecycles and Quark rule applications, live, inside Chrome DevTools.

Nucleus DevTools adds an "Element" pane to the Elements panel for pages built with the Nucleus Stack (@excom/neutron, @excom/quark). Select any node and read its history and current state:

• Neutron — every lifecycle effect the element applied, with the exact props, events and calls it produced, plus its current props.
• Quark — every rule that matched the element, grouped per run: selector, declarations, resolved values, no-op / wipe / error status; plus its current $variables, Quark-written attributes and custom properties, listeners and iterate() row context.
• Hover any key to see the declaration that produced it.
• Live — new publications append as they happen.
• Paint heatmap — a toolbar toggle overlays every Quark-painted element with its paint count.
• Definition audits — Neutron element definitions are checked for attribute-naming mistakes; warnings go to the page console.
• Agent tools — eleven JSON tools (diagnostics, state_snapshot, explain_attribute, …) for coding agents, discoverable by chrome-devtools-mcp, and a "Copy for AI" button that produces a one-file bug report.

Zero setup: no app changes, no debug flags. Works on any page using the Nucleus Stack; does nothing on other pages. Collects no data and makes no network requests.

Documentation: https://excom.dev/nucleus/packages/nucleus-devtools

**Category**: Developer Tools

**Language**: English

**Store icon**: `public/icon/128.png` (the dashboard reads it from the manifest; upload the same file if asked)

**Screenshots** (1280×800 or 640×400, PNG, 1–5): take on https://excom.dev/nucleus/examples/todos with DevTools docked right, Elements panel, Element pane open:
1. Quark tab — a `<li>` inside the todo list selected, rule rows expanded.
2. Neutron tab — a `provider-fetch` or `content-drawer` selected, lifecycle rows expanded.
3. Hover state — the declaration tooltip over a key.
4. Heatmap — toolbar popup with the toggle on and the overlay visible on the page.

**Official URL**: https://excom.dev
**Homepage URL**: https://excom.dev/nucleus/packages/nucleus-devtools
**Support URL**: https://github.com/excom-dev/nucleus/issues

## Privacy practices

**Single purpose description**:
Adds a Chrome DevTools sidebar pane that shows, for the selected element, the Neutron lifecycle effects and Quark rule runs recorded on pages built with the Nucleus Stack, plus related debugging aids (paint heatmap, definition audits, JSON tools for coding agents).

**Permission justification — storage**:
Holds a single session-scoped boolean: whether the paint-heatmap overlay is switched on. Cleared when the browser closes.

**Host permission justification — `<all_urls>` (content scripts)**:
The probe must be installed at document_start on any page that might use the Nucleus Stack; the extension cannot know which pages those are in advance, and a page opened before the probe exists loses its lifecycle history. On pages without @excom/neutron or @excom/quark the probe stays dormant. No data leaves the page.

**Are you using remote code?** No.

**Data usage** — tick nothing under "What user data do you plan to collect?". Certify:
- I do not sell or transfer user data to third parties, outside of the approved use cases
- I do not use or transfer user data for purposes that are unrelated to my item's single purpose
- I do not use or transfer user data to determine creditworthiness or for lending purposes

**Privacy policy URL**: https://excom.dev/nucleus/packages/nucleus-devtools/privacy

## Distribution

**Visibility**: Public
**Regions**: all
**Trader / non-trader** (EU DSA): non-trader (no goods or services sold through the item; keeps the developer address off the listing)
**Payments**: free

## Account

**Developer name** (public): excom
**Contact email** (public, must be verified): the excom alias mailbox, never a personal address
3 changes: 3 additions & 0 deletions packages/nucleus-devtools/wxt.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ export default defineConfig({
// `browser.storage.session` holds the global heatmap toggle.
permissions: ["storage"],
},
// The npm name is scoped; WXT would otherwise emit
// `excomnucleus-devtools-<version>-chrome.zip`.
zip: { name: "nucleus-devtools" },
webExt: {
startUrls: ["http://localhost:3001/"],
},
Expand Down
Loading