Repository navigation
Releases
v0.2.0-beta.14
- Add a Visual View on the proposal detail page for reviewing flow changes on a
Node-RED-like canvas, with compact and editor-position layouts, related nodes,
and change diffs. - Approve proposals from a Deploy-style split button that chooses the deployment
type. - Distinguish Moved (position-only) nodes from Modified, with shared inline SVG
status icons and purple move arrows from the old-position ghost to the
highlight outline. - Draw input and output ports from the registered node type, so inject has no
input port and debug has no output port. - Split dashboard, REST, MCP, OAuth, and configuration documentation out of the
README.
Install
cd /data && npm i https://github.com/com55/node-red-ai-access/releases/download/v0.2.0-beta.14/com55-node-red-ai-access-0.2.0-beta.14.tgzInstall in your Node-RED user directory (/data for Docker or ~/.node-red locally), then restart Node-RED.
v0.2.0-beta.13
- Label the "Opened from dashboard" card action Go to flow for flow, tab and
subflow targets. Keep Go to node for node, group and config targets.
v0.2.0-beta.12
- Rename the dashboard navigation item and section to MCP OAuth.
- Keep the "Opened from dashboard" card until dismissed or replaced by a newer
request. Go to node no longer closes the card. - Show an editor notification when revealing a flow, tab or subflow that is
already active. - From this beta onward, pre-releases are not published to npm. They ship as
GitHub Release assets created withnpm pack. Install this beta with:
cd /data && npm i https://github.com/com55/node-red-ai-access/releases/download/v0.2.0-beta.12/com55-node-red-ai-access-0.2.0-beta.12.tgz.
v0.2.0-beta.11
- Put the Create access token button back at the end of the fields row on wide
screens and narrow the Amount input for Custom expiry (#117). - Confirm dashboard-to-editor jumps with a dashboard toast and an "Opened from
dashboard" card in the editor AI Access sidebar below the Open AI Access
dashboard button, with Go to node and dismiss actions (#117). - Deliver editor jumps across tabs through
BroadcastChannelwith a
localStoragefallback. Acknowledge requests immediately in the editor and
wait up to one second before opening a new editor tab, without reloading an
existing editor. Clear the stored request on acknowledgement and replay it
only in the fallback-opened editor. Use toast text specific to each delivery
path (#117).
v0.2.0-beta.10
- Arrange the Create access token form with Channel, Expires after and Label in
one left-aligned, content-sized row on wide screens, with the Create button on
its own row. Use a single column below about 600px (#115). - Scroll to the top when switching dashboard sections (#115).
- Show date added and last used for Registered OAuth clients in browser local
time, with "Never used" for unused clients. Stop counting registration as use
and coalescelastUsedAtwrites to every five minutes (#115). - Flush and dispose the OAuth store on cleanup, close and exit so a stale store
cannot overwrite OAuth data after re-registration (#115). - Backfill missing
client_id_issued_aton load so legacy clients get pruned
normally (#115).
v0.2.0-beta.9
- Redesign the dashboard with a GitHub-Settings-style grouped left sidebar and
inline SVG icons. Show one section at a time with hash routing and browser
back/forward navigation, single-column rows, a 1200px container and a narrow
top menu. Improve current-page semantics, group labels and heading focus
(#110). - Harden the approval queue against deployments that finish after the
five-minute cap. Block approvals withdeploy_outcome_unknownuntil
settlement, restart or an attempt-matched "Confirm live checked", unless an
audited override is used; allow rejection with a warning. Audit late
overwrites across tabs, alert on affected later decisions, show a dashboard
banner and mark proposals that landed after withdrawal (#111). - Keep
outputs,wiresand switchrulescoupled during rebase for every
node type. Preserve the owner acknowledgement flag when an unchanged
replacement body still differs from base (#111). - Fix OpenAPI loading in the CommonJS build with
import.metashims and an
__dirnamefallback (#111). - Reuse production builds in tests through a content-hash build stamp, with
SKIP_TEST_BUILD=1support (#111). Excludedist/.production-build-hashfrom
the npm package.
v0.2.0-beta.8
-
Proposal review shows human conflict reasons and Base / Live / Proposed field
values, including flow environment variables. Choices have explanations,
confirmation, a visible chosen state, and persisted undo of the latest choice. -
Proposals with no net deployment change clearly say nothing changes and hide
approval and security notes. -
Consolidate review notes with a count and separate security from
configuration; omit duplicate comparisons and unchanged editor diffs. Re-check
shows progress and a result toast. Pending totals match the badge, including
conflicts. -
Improve light-theme readability, settings width, sticky navigation clearance,
sign-in footer visibility and stable sign-in button colors; errors use alerts. -
Reject invalid TTL settings with a minimum of 1; keep invalid input visible
and never report it saved. Investigate the NR4 Active link (box-only
findings). -
Merge disjoint fields on the same node and tab, including env entries by
unique name and credentials by key. Conflict choices preserve independent
changes from both sides and retain secret safeguards and warnings. -
Keep peer proposals mergeable after approval of a different field on the same
node. -
Report actual changed fields in
outbound_node_changedwarnings. -
Expose
baseRevand rename the informational revision flag to
baseRevChanged; userebase.stateandrebase.revto assess the checked
merge. -
Add
nodeId+choiceto MCP/REST proposal resolution and clarify that
replacement operations apply to the flow snapshot atexpectedRev. -
Allow full admins to withdraw proposals after token loss, with recovery
authority and original ownership in the audit log. Other tokens remain
blocked.
v0.2.0-beta.7
Fixed
- Unrelated flow changes no longer expire or reject pending proposals.
Added
- Automatic three-way rebasing onto live flows, with a
conflictstatus that
blocks approval until resolved. - Configurable
proposalTtlDays(1–365 days, default 7); only TTL expiry closes
old open proposals. - Admin conflict-choice and recheck routes, AI REST resolution, and the MCP
resolve_proposal_conflicttool. - Diffs include editor changes and the merged deployment; approval requires a
mergedHashacknowledgement when live changes are merged. - Recent known stale revisions are accepted at submit and rebased immediately.
v0.2.0-beta.6
Added
- OAuth consent page signs in automatically once you sign in to the Node-RED
editor in another tab (it watches the editor token inlocalStorageand
re-checks on tab focus / visibility). Works foradminAuthstrategy
(OIDC/passport) logins, which cannot return to the consent page by themselves.
The Retry button stays as a fallback. - Dashboard (
/ai-access) refreshes status, access links, proposals, logs and
the OAuth client list when you return to a tab left open (visibility / focus,
at most every 5 s). It never reloads while a dialog — such as the one-time
token modal — is open or while you are typing in a field, and never reloads
settings forms. - Proposals view: flow names and modified/removed nodes link to the editor
(#flow/<id>,#node/<id>). A click reveals the item in an already open
editor tab (via a same-originBroadcastChannelanswered by the editor
sidebar script, usingRED.view.reveal/RED.workspaces.show); with no open
editor it opens one in a namednode-red-editorwindow that later clicks
reuse. Browsers do not let a page bring another tab to the front, so the
dashboard shows a toast when the item was revealed in the existing tab.
v0.2.0-beta.5
Security
outbound_node_changed(now incl. http response, link out/call and
third-party nodes with url/host fields) and newsecret_reference_added
(code/config newly reading a secret-named env/global/flow value) are emitted
on every proposal, not only when secrets were restored; red approve banner.- Unquoted values: strong secret names redact any value; weak names need a
random-looking value (digit/symbol, 16+ chars, or high entropy). - Full-field redaction is decided by length only (no time budget), so reads and
submits agree. - Redaction scanning is linear-time: the connection-string rule is a plain split
(was quadratic: 250k chars took ~46 s), every regex is length-bounded, and
fields over 256 KB are hidden whole. - More reviewer warnings when secrets are restored:
secret_wires_changed,
secret_scope_changed,outbound_node_changed,secret_tab_changed. - Secret-named URL query params are redacted; duplicate header names restore
one-to-one. - Strict placeholder restore on proposal submit:
[REDACTED]becomes the real
secret only in its original node/field/line, env and header entries matched by
exact name (never by index); added, duplicated, moved or renamed placeholders
reject the submit (redacted_placeholder_mismatch). Approve cards list
restored-secret fields and warn loudly (secret_destination_changed,
secret_node_code_changed) when such a node's destination or code changes. - Detection also covers DSN/connection strings, unquoted
password: x,
Buffer.from("user:pw"), thePWpattern, and content of node
name/label/info; string fields over 256 KB are fully redacted for AI.
The dashboard warns when the pattern list is empty, and the REST redaction
audit middleware only acts on AI REST routes under/mcp/. - Likely secrets are redacted from everything AI clients receive: MCP tools
(list_flows,get_flow,get_node,get_node_field,search_flows,
proposal tools and diffs), REST with an access link or OAuth token, and GET
links. Previouslylist_flowsreturned plaintext env values such as a group
OAUTH_POC_PASSWORDto OAuth read clients. Admin-session (dashboard) reads
are unchanged and show real values.- Env entries (tab, group, subflow, subflow instance, node,
global-config)
whose name matches a secret pattern getvalue: "[REDACTED]"and
redacted: true; secret-named node settings and name/value pairs in node
config (change rules, inject props, http headers) are redacted too. - Function
func/initialize/finalizeand all other string fields are
scanned for known token formats (AWS, GitHub, Slack, OpenAI, Stripe, Google,
JWT, PEM private keys, Bearer/Basic headers, URL passwords) and
name = "literal"assignments; only the literal is replaced. Redacted nodes
carry_aiRedactions(field paths). - Proposals restore
[REDACTED]placeholders to the original secret on submit
(full tab or node ops), so AI edits never overwrite a secret with the
placeholder; unmatched placeholders produce a
redacted_placeholder_unresolvedwarning. - The audit log records
ai.redactedwith the count per response and the
operation (never values);proposal.createdaddsrestoredRedactions.
- Env entries (tab, group, subflow, subflow instance, node,
Added
secretNamePatternssetting (dashboard Settings → Secret redaction: add,
remove, reset to defaults;PUT /settingsaccepts a list ornullto reset).
Lockable viasettings.jsaiAccess.secretNamePatterns.