@com55/node-red-ai-access 0.2.0-beta.7 → 0.2.0-beta.8
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/CHANGELOG.md +32 -0
- package/README.md +45 -5
- package/ai-access.html +1 -1
- package/dist/plugin.cjs +345 -226
- package/dist/plugin.d.cts +22 -1
- package/docs/api/openapi.yaml +117 -32
- package/docs/errors.md +3 -3
- package/docs/mcp-tools.md +9 -7
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,38 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
|
6
6
|
and this project adheres to
|
|
7
7
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
8
8
|
|
|
9
|
+
## [0.2.0-beta.8] - 2026-10-29
|
|
10
|
+
|
|
11
|
+
- Proposal review shows human conflict reasons and Base / Live / Proposed field
|
|
12
|
+
values, including flow environment variables. Choices have explanations,
|
|
13
|
+
confirmation, a visible chosen state, and persisted undo of the latest choice.
|
|
14
|
+
- Proposals with no net deployment change clearly say nothing changes and hide
|
|
15
|
+
approval and security notes.
|
|
16
|
+
- Consolidate review notes with a count and separate security from
|
|
17
|
+
configuration; omit duplicate comparisons and unchanged editor diffs. Re-check
|
|
18
|
+
shows progress and a result toast. Pending totals match the badge, including
|
|
19
|
+
conflicts.
|
|
20
|
+
- Improve light-theme readability, settings width, sticky navigation clearance,
|
|
21
|
+
sign-in footer visibility and stable sign-in button colors; errors use alerts.
|
|
22
|
+
- Reject invalid TTL settings with a minimum of 1; keep invalid input visible
|
|
23
|
+
and never report it saved. Investigate the NR4 Active link (box-only
|
|
24
|
+
findings).
|
|
25
|
+
|
|
26
|
+
- Merge disjoint fields on the same node and tab, including env entries by
|
|
27
|
+
unique name and credentials by key. Conflict choices preserve independent
|
|
28
|
+
changes from both sides and retain secret safeguards and warnings.
|
|
29
|
+
- Keep peer proposals mergeable after approval of a different field on the same
|
|
30
|
+
node.
|
|
31
|
+
- Report actual changed fields in `outbound_node_changed` warnings.
|
|
32
|
+
- Expose `baseRev` and rename the informational revision flag to
|
|
33
|
+
`baseRevChanged`; use `rebase.state` and `rebase.rev` to assess the checked
|
|
34
|
+
merge.
|
|
35
|
+
- Add `nodeId` + `choice` to MCP/REST proposal resolution and clarify that
|
|
36
|
+
replacement operations apply to the flow snapshot at `expectedRev`.
|
|
37
|
+
- Allow full admins to withdraw proposals after token loss, with recovery
|
|
38
|
+
authority and original ownership in the audit log. Other tokens remain
|
|
39
|
+
blocked.
|
|
40
|
+
|
|
9
41
|
## [0.2.0-beta.7] - 2026-10-28
|
|
10
42
|
|
|
11
43
|
### Fixed
|
package/README.md
CHANGED
|
@@ -435,13 +435,53 @@ field against the live flow or choose **live**. Changed env arrays with
|
|
|
435
435
|
duplicate names show `duplicate_env_keys`, since pairing by name is ambiguous
|
|
436
436
|
when entries are reordered.
|
|
437
437
|
|
|
438
|
+
Open proposals merge changes per node and tab field. Different fields on the
|
|
439
|
+
same node merge automatically; changes to the same field conflict even when both
|
|
440
|
+
values are identical. Position (`x`/`y`) edits never conflict; a proposed
|
|
441
|
+
position edit wins a tie. Env entries merge by unique name and then entry field;
|
|
442
|
+
credentials merge by key (including nested keys). Duplicate env names use an
|
|
443
|
+
atomic array comparison and retain the existing ambiguity warning. Deletion
|
|
444
|
+
versus modification, id collisions, dangling references, and unsafe redacted
|
|
445
|
+
placeholders still block approval.
|
|
446
|
+
|
|
447
|
+
Proposal responses and diffs expose `baseRev` (an alias of `expectedRev`).
|
|
448
|
+
`baseRevChanged` replaces `baseRevStale`: it only reports that the base revision
|
|
449
|
+
differs from live for an open proposal. It is informational, including after a
|
|
450
|
+
successful rebase. `rebase.rev` is the checked live revision and `rebase.state`
|
|
451
|
+
is `clean` (proposal applies unchanged), `merged` (live edits incorporated), or
|
|
452
|
+
`conflict` (approval blocked). A merged proposal still requires review of its
|
|
453
|
+
current `mergedHash` before approval.
|
|
454
|
+
|
|
455
|
+
MCP `resolve_proposal_conflict` and REST `POST /proposals/:id/resolve` accept
|
|
456
|
+
`nodeId` + `choice: "live" | "proposed"` for one current conflict. Choices
|
|
457
|
+
affect only overlapping fields; independent edits from both sides survive.
|
|
458
|
+
Existing secret preservation and ambiguity warnings also apply. Alternatively
|
|
459
|
+
send `expectedRev` + `payload` to replace the proposal body: node operations
|
|
460
|
+
apply to the **flow snapshot at expectedRev**, not to the stored proposal or
|
|
461
|
+
merged result, so include every intended edit. These modes cannot be mixed. Both
|
|
462
|
+
require the submitting token; tab conflicts use the flow id as `nodeId`.
|
|
463
|
+
|
|
464
|
+
If the submitting token is lost, a full (`*`) admin can withdraw an open
|
|
465
|
+
proposal through `POST /mcp/api/v1/proposals/:id/withdraw` using the dashboard's
|
|
466
|
+
authenticated admin session (optional JSON `reason`). Other access tokens,
|
|
467
|
+
including replacement tokens, cannot withdraw it. Recovery records
|
|
468
|
+
`proposal.withdrawn` with the admin identity, original owner id,
|
|
469
|
+
`withdrawalAuthority: "admin-recovery"`, proposal id, and reason. Owner-token
|
|
470
|
+
withdrawal records `withdrawalAuthority: "owner-token"`. Withdrawal never
|
|
471
|
+
deploys flows and cannot interrupt an in-flight approval.
|
|
472
|
+
|
|
438
473
|
Open proposals auto-rebase on editor changes. A `conflict` blocks approval until
|
|
439
474
|
resolved using REST `POST /proposals/:id/resolve`, admin
|
|
440
|
-
`POST /proposals/:id/resolve-conflict`, or MCP `resolve_proposal_conflict`.
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
475
|
+
`POST /proposals/:id/resolve-conflict`, or MCP `resolve_proposal_conflict`. The
|
|
476
|
+
dashboard confirms conflict choices and shows the chosen side. Admins can undo
|
|
477
|
+
the latest choice with `POST /proposals/:id/resolve-conflict` and
|
|
478
|
+
`{ "nodeId": "...", "choice": "undo" }` until the next proposal edit or choice;
|
|
479
|
+
undo restores the proposal and rechecks current live flows without deploying.
|
|
480
|
+
Diffs include `conflictValues` (base/live/proposed per field, including flow
|
|
481
|
+
env; redacted for AI callers), `rebase`, `liveChanges` and (without conflicts)
|
|
482
|
+
`vsCurrent`, the merged deployment. Approval requires the reviewed `mergedHash`
|
|
483
|
+
when editor changes are merged. Proposals expire after `proposalTtlDays`
|
|
484
|
+
(integer 1–365, default 7), editable through the settings API. Approve may send
|
|
445
485
|
`deploymentType`: `nodes` (default), `flows`, or `full`. Approval rebases
|
|
446
486
|
against the current revision; conflicts leave the proposal open for resolution.
|
|
447
487
|
Deploy timeouts keep it **pending**; other deploy errors mark it **failed**.
|
package/ai-access.html
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
}
|
|
15
15
|
window.__com55AiAccessSidebarLoading = true;
|
|
16
16
|
|
|
17
|
-
var EDITOR_SIDEBAR_ASSET_VERSION = '0.2.0-beta.
|
|
17
|
+
var EDITOR_SIDEBAR_ASSET_VERSION = '0.2.0-beta.8';
|
|
18
18
|
var root = (RED.settings.httpAdminRoot || '/').replace(/\/$/, '');
|
|
19
19
|
var src =
|
|
20
20
|
(root || '') +
|