@rolealpha/n8n-nodes-rolealpha 0.5.0 → 0.6.0

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.
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RoleAlphaWorkflowBuilder = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const mcp_1 = require("../../lib/mcp");
6
+ const graph_1 = require("../../lib/graph");
7
+ const changes_1 = require("../../lib/changes");
8
+ const workflows_1 = require("../../lib/workflows");
9
+ const show = (operation) => ({ show: { operation } });
10
+ const MCP_OPS = ['detectChanges', 'propose'];
11
+ const N8N_OPS = ['listWorkflows', 'propose', 'createDraft', 'applyDraft', 'discardDraft'];
12
+ const properties = [
13
+ {
14
+ displayName: 'Operation',
15
+ name: 'operation',
16
+ type: 'options',
17
+ noDataExpression: true,
18
+ options: [
19
+ { name: 'Detect Changes', value: 'detectChanges', action: 'Detect new, changed and removed entities', description: 'Compares the roleALPHA graph with the stored snapshot rows' },
20
+ { name: 'List Workflows', value: 'listWorkflows', action: 'List managed workflows', description: 'The n8n workflows bound to roleALPHA entities, with their credentials' },
21
+ { name: 'Propose', value: 'propose', action: 'Propose a workflow change with a model', description: 'Asks the attached model what a change means for the workflows and checks the answer' },
22
+ { name: 'Create Draft', value: 'createDraft', action: 'Create an inactive draft from a proposal', description: 'Stores a checked proposal as an inactive draft workflow that waits for approval' },
23
+ { name: 'Apply Draft', value: 'applyDraft', action: 'Apply an approved draft', description: 'Creates, updates or deactivates the workflow; refuses if the draft or the target changed' },
24
+ { name: 'Discard Draft', value: 'discardDraft', action: 'Discard a rejected draft', description: 'Deletes a draft; refuses anything that is not a draft' },
25
+ ],
26
+ default: 'detectChanges',
27
+ },
28
+ {
29
+ displayName: 'MCP Endpoint URL',
30
+ name: 'endpointUrl',
31
+ type: 'string',
32
+ default: 'https://rolealpha.app/api/mcp',
33
+ required: true,
34
+ displayOptions: show(MCP_OPS),
35
+ },
36
+ {
37
+ displayName: 'Organisation',
38
+ name: 'organisation',
39
+ type: 'string',
40
+ default: '',
41
+ required: true,
42
+ description: 'Organisation (tenant) name or ID as roleALPHA knows it',
43
+ displayOptions: show(MCP_OPS),
44
+ },
45
+ // ---------------------------------------------------------------- detect
46
+ {
47
+ displayName: 'Entity Types',
48
+ name: 'entityTypes',
49
+ type: 'multiOptions',
50
+ options: changes_1.ENTITY_TYPES.map((t) => ({ name: t.charAt(0).toUpperCase() + t.slice(1), value: t })),
51
+ default: ['process', 'role', 'agent'],
52
+ description: 'Entity types to watch. Rows of other types in the snapshot are left alone.',
53
+ displayOptions: show(['detectChanges']),
54
+ },
55
+ {
56
+ displayName: 'Snapshot Rows',
57
+ name: 'snapshotRows',
58
+ type: 'json',
59
+ default: '[]',
60
+ description: 'All stored rows (uuid, entity_type, name, custom_id, fingerprint, fields, edges, seen_at), e.g. from a data table. Empty on the first run: then the snapshot is stored and nothing is reported.',
61
+ displayOptions: show(['detectChanges']),
62
+ },
63
+ {
64
+ displayName: 'Options',
65
+ name: 'detectOptions',
66
+ type: 'collection',
67
+ placeholder: 'Add Option',
68
+ default: {},
69
+ displayOptions: show(['detectChanges']),
70
+ options: [
71
+ {
72
+ displayName: 'Max Entities',
73
+ name: 'maxEntities',
74
+ type: 'number',
75
+ default: 500,
76
+ description: 'Fail when the watched types hold more entities; every entity costs two reads per run',
77
+ },
78
+ {
79
+ displayName: 'Report First Run',
80
+ name: 'reportBaseline',
81
+ type: 'boolean',
82
+ default: false,
83
+ description: 'Whether every entity counts as created when no rows are stored yet',
84
+ },
85
+ {
86
+ displayName: 'Parallel Reads',
87
+ name: 'concurrency',
88
+ type: 'number',
89
+ default: 4,
90
+ typeOptions: { minValue: 1, maxValue: 10 },
91
+ },
92
+ ],
93
+ },
94
+ // ---------------------------------------------------------------- propose
95
+ {
96
+ displayName: 'Change',
97
+ name: 'change',
98
+ type: 'json',
99
+ default: '={{ $json }}',
100
+ required: true,
101
+ description: 'One change from Detect Changes',
102
+ displayOptions: show(['propose']),
103
+ },
104
+ {
105
+ displayName: 'Allowed Node Types',
106
+ name: 'nodeTypes',
107
+ type: 'string',
108
+ typeOptions: { rows: 4 },
109
+ default: workflows_1.DEFAULT_NODE_TYPES.join(', '),
110
+ description: 'Comma-separated n8n node types a proposal may use. Anything else is refused.',
111
+ displayOptions: show(['propose']),
112
+ },
113
+ {
114
+ displayName: 'Extra Rules',
115
+ name: 'extraRules',
116
+ type: 'string',
117
+ typeOptions: { rows: 4 },
118
+ default: '',
119
+ description: 'One rule per line, e.g. which systems and collections exist',
120
+ displayOptions: show(['propose']),
121
+ },
122
+ {
123
+ displayName: 'Attempts',
124
+ name: 'maxAttempts',
125
+ type: 'number',
126
+ default: 2,
127
+ typeOptions: { minValue: 1, maxValue: 5 },
128
+ description: 'How often the model may answer again after its answer failed the check',
129
+ displayOptions: show(['propose']),
130
+ },
131
+ // ---------------------------------------------------------------- drafts
132
+ {
133
+ displayName: 'Proposal',
134
+ name: 'proposal',
135
+ type: 'json',
136
+ default: '={{ $json }}',
137
+ required: true,
138
+ description: 'The output of Propose',
139
+ displayOptions: show(['createDraft']),
140
+ },
141
+ {
142
+ displayName: 'Draft ID',
143
+ name: 'draftId',
144
+ type: 'string',
145
+ default: '',
146
+ required: true,
147
+ displayOptions: show(['applyDraft', 'discardDraft']),
148
+ },
149
+ {
150
+ displayName: 'Approved Hash',
151
+ name: 'approvedHash',
152
+ type: 'string',
153
+ default: '',
154
+ required: true,
155
+ description: 'The contentHash the approver saw and sealed. Verify the seal first with Approval Seal → Verify.',
156
+ displayOptions: show(['applyDraft']),
157
+ },
158
+ {
159
+ displayName: 'Activate',
160
+ name: 'activate',
161
+ type: 'boolean',
162
+ default: false,
163
+ description: 'Whether to activate a new or inactive workflow after applying',
164
+ displayOptions: show(['applyDraft']),
165
+ },
166
+ ];
167
+ function parseJsonParam(ctx, name, i) {
168
+ const value = ctx.getNodeParameter(name, i, '');
169
+ if (value === '' || value === null || value === undefined)
170
+ return undefined;
171
+ if (typeof value !== 'string')
172
+ return value;
173
+ try {
174
+ return JSON.parse(value);
175
+ }
176
+ catch {
177
+ throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), `Parameter "${name}" is not valid JSON`, { itemIndex: i });
178
+ }
179
+ }
180
+ function mcpClientFor(ctx, endpointUrl) {
181
+ return new mcp_1.McpClient(async (body, headers) => {
182
+ try {
183
+ const res = (await ctx.helpers.httpRequestWithAuthentication.call(ctx, 'mcpOAuth2Api', {
184
+ method: 'POST',
185
+ url: endpointUrl,
186
+ headers,
187
+ body: JSON.stringify(body),
188
+ json: false,
189
+ encoding: 'text',
190
+ returnFullResponse: true,
191
+ }));
192
+ const text = typeof res.body === 'string' ? res.body : res.body === undefined ? '' : JSON.stringify(res.body);
193
+ return { status: res.statusCode ?? 200, headers: res.headers ?? {}, body: text };
194
+ }
195
+ catch (error) {
196
+ const e = error;
197
+ return { status: Number(e.httpCode) || 500, headers: {}, body: String(e.description ?? e.message ?? 'request failed') };
198
+ }
199
+ });
200
+ }
201
+ async function n8nApiFor(ctx) {
202
+ const creds = await ctx.getCredentials('n8nApi');
203
+ const base = String(creds.baseUrl ?? '').replace(/\/+$/, '');
204
+ if (!base)
205
+ throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), 'The n8n API credential has no base URL');
206
+ return new workflows_1.N8nApi(async (method, path, body, qs) => ctx.helpers.httpRequestWithAuthentication.call(ctx, 'n8nApi', {
207
+ method,
208
+ url: `${base}${path}`,
209
+ ...(body !== undefined ? { body } : {}),
210
+ ...(qs ? { qs } : {}),
211
+ json: true,
212
+ }));
213
+ }
214
+ /** Text of a LangChain chat model answer. */
215
+ function answerText(res) {
216
+ const content = res?.content ?? res;
217
+ if (typeof content === 'string')
218
+ return content;
219
+ if (Array.isArray(content))
220
+ return content.map((c) => (typeof c === 'string' ? c : String(c?.text ?? ''))).join('');
221
+ return JSON.stringify(content ?? '');
222
+ }
223
+ function asChange(raw) {
224
+ const c = (raw && typeof raw === 'object' ? raw : {});
225
+ if (!['created', 'changed', 'removed'].includes(String(c.change)) || typeof c.uuid !== 'string')
226
+ return null;
227
+ const strings = (v) => (Array.isArray(v) ? v.map(String) : []);
228
+ return {
229
+ change: c.change,
230
+ uuid: c.uuid.toLowerCase(),
231
+ name: String(c.name ?? ''),
232
+ entityType: String(c.entityType ?? ''),
233
+ customId: typeof c.customId === 'string' ? c.customId : null,
234
+ previousName: typeof c.previousName === 'string' ? c.previousName : null,
235
+ changedFields: strings(c.changedFields),
236
+ edgesAdded: strings(c.edgesAdded),
237
+ edgesRemoved: strings(c.edgesRemoved),
238
+ };
239
+ }
240
+ /**
241
+ * Keeps n8n workflows in line with roleALPHA: detects new and changed steps, roles and agents,
242
+ * lets a model propose what that means for the workflows, and applies the proposal only as an
243
+ * approved draft.
244
+ */
245
+ class RoleAlphaWorkflowBuilder {
246
+ description = {
247
+ displayName: 'roleALPHA Workflow Builder',
248
+ name: 'roleAlphaWorkflowBuilder',
249
+ icon: 'file:roleAlpha.svg',
250
+ group: ['transform'],
251
+ version: 1,
252
+ subtitle: '={{ $parameter["operation"] }}',
253
+ description: 'Let a model propose workflow changes when steps, roles or agents change in roleALPHA; apply them only after approval',
254
+ defaults: { name: 'roleALPHA Workflow Builder' },
255
+ inputs: `={{ ((operation) => operation === 'propose' ? ['main', { type: 'ai_languageModel', displayName: 'Model', required: true, maxConnections: 1 }] : ['main'])($parameter.operation) }}`,
256
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
257
+ credentials: [
258
+ { name: 'mcpOAuth2Api', required: true, displayOptions: show(MCP_OPS) },
259
+ { name: 'n8nApi', required: true, displayOptions: show(N8N_OPS) },
260
+ ],
261
+ properties,
262
+ };
263
+ async execute() {
264
+ const items = this.getInputData();
265
+ const operation = this.getNodeParameter('operation', 0);
266
+ const out = [];
267
+ let client;
268
+ let graph;
269
+ const organisationAt = (i) => String(this.getNodeParameter('organisation', i) ?? '').trim();
270
+ const getClient = (i) => (client ??= mcpClientFor(this, this.getNodeParameter('endpointUrl', i)));
271
+ const getGraph = (i) => (graph ??= new graph_1.McpGraphSource(getClient(i), organisationAt(i)));
272
+ const api = N8N_OPS.includes(operation) ? await n8nApiFor(this) : undefined;
273
+ // The snapshot is one decision over all stored rows.
274
+ if (operation === 'detectChanges') {
275
+ const types = this.getNodeParameter('entityTypes', 0, []).filter(Boolean);
276
+ if (types.length === 0)
277
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Choose at least one entity type');
278
+ const opts = this.getNodeParameter('detectOptions', 0, {});
279
+ const max = typeof opts.maxEntities === 'number' && opts.maxEntities > 0 ? opts.maxEntities : 500;
280
+ const entries = [];
281
+ // A failed index read throws: without the complete index nothing may count as removed.
282
+ for (const type of types)
283
+ entries.push(...(await (0, changes_1.listIndex)(getClient(0), organisationAt(0), type)));
284
+ if (entries.length > max) {
285
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The watched types hold ${entries.length} entities, more than Max Entities (${max}); narrow the types or raise the limit`);
286
+ }
287
+ const read = await (0, changes_1.readSnapshots)(getGraph(0), entries, typeof opts.concurrency === 'number' ? opts.concurrency : 4);
288
+ const res = (0, changes_1.detectChanges)(parseJsonParam(this, 'snapshotRows', 0), read.snapshots, {
289
+ complete: true,
290
+ types,
291
+ unreadable: read.unreadable,
292
+ reportBaseline: opts.reportBaseline === true,
293
+ });
294
+ return [[{ json: { ...res, watched: entries.length } }]];
295
+ }
296
+ if (operation === 'listWorkflows') {
297
+ const { workflows, credentials } = (0, workflows_1.summarizeWorkflows)(await api.listWorkflows(workflows_1.MANAGED_TAG));
298
+ return [[{ json: { workflows, credentials, count: workflows.length } }]];
299
+ }
300
+ let managed;
301
+ for (let i = 0; i < items.length; i++) {
302
+ try {
303
+ if (operation === 'propose') {
304
+ const change = asChange(parseJsonParam(this, 'change', i));
305
+ if (!change)
306
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Change is not a change from Detect Changes', { itemIndex: i });
307
+ managed ??= (0, workflows_1.summarizeWorkflows)(await api.listWorkflows(workflows_1.MANAGED_TAG));
308
+ const nodeTypes = String(this.getNodeParameter('nodeTypes', i, '') ?? '')
309
+ .split(',')
310
+ .map((t) => t.trim())
311
+ .filter(Boolean);
312
+ const extraRules = String(this.getNodeParameter('extraRules', i, '') ?? '')
313
+ .split(/\r?\n/)
314
+ .map((r) => r.trim())
315
+ .filter(Boolean);
316
+ const ctx = { change, entity: await (0, workflows_1.entityContext)(getGraph(i), change), workflows: managed.workflows, credentials: managed.credentials, nodeTypes: nodeTypes.length ? nodeTypes : workflows_1.DEFAULT_NODE_TYPES, extraRules };
317
+ const input = (0, workflows_1.buildPlanInput)(ctx);
318
+ const model = (await this.getInputConnectionData(n8n_workflow_1.NodeConnectionTypes.AiLanguageModel, 0));
319
+ if (!model || typeof model.invoke !== 'function')
320
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Attach a chat model to the Model input', { itemIndex: i });
321
+ const attempts = Math.min(5, Math.max(1, Number(this.getNodeParameter('maxAttempts', i, 2)) || 2));
322
+ const targets = new Map();
323
+ const messages = [
324
+ ['system', `${input.systemMessage}\n\nJSON schema of the answer:\n${JSON.stringify(input.schema)}`],
325
+ ['human', input.prompt],
326
+ ];
327
+ let check;
328
+ let n = 0;
329
+ while (n < attempts) {
330
+ n++;
331
+ const text = answerText(await model.invoke(messages));
332
+ // For an update, the loaded target keeps node IDs, credentials and webhooks of nodes that stay.
333
+ const named = ((0, workflows_1.parseAnswer)(text) ?? {});
334
+ const targetId = typeof named.targetWorkflowId === 'string' ? named.targetWorkflowId.trim() : '';
335
+ let existing = null;
336
+ if (targetId && managed.workflows.some((w) => w.id === targetId && !w.isDraft)) {
337
+ if (!targets.has(targetId))
338
+ targets.set(targetId, await api.get(targetId));
339
+ existing = targets.get(targetId) ?? null;
340
+ }
341
+ check = (0, workflows_1.checkPlan)(ctx, text, existing);
342
+ if (check.ok)
343
+ break;
344
+ messages.push(['ai', text], ['human', `Your answer failed the check:\n- ${check.problems.join('\n- ')}\nAnswer again with the complete JSON object.`]);
345
+ }
346
+ out.push({ json: { ...check, change, attempts: n }, pairedItem: { item: i } });
347
+ continue;
348
+ }
349
+ if (operation === 'createDraft') {
350
+ const p = (parseJsonParam(this, 'proposal', i) ?? {});
351
+ const change = asChange(p.change);
352
+ if (!change || p.ok !== true || !['create', 'update', 'deactivate'].includes(p.action)) {
353
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Proposal is not a checked proposal with an action (output of Propose with ok = true)', { itemIndex: i });
354
+ }
355
+ const target = p.targetWorkflowId ? await api.get(p.targetWorkflowId) : null;
356
+ const draft = (0, workflows_1.draftWorkflow)(p, change, target);
357
+ const created = await api.create(draft);
358
+ const draftId = String(created.id ?? '');
359
+ await api.setTags(draftId, [workflows_1.MANAGED_TAG, workflows_1.DRAFT_TAG]);
360
+ const { hash } = (0, workflows_1.draftHash)(draft);
361
+ out.push({
362
+ json: { draftId, draftName: draft.name, action: p.action, targetWorkflowId: p.targetWorkflowId, entityUuid: p.entityUuid, entityName: change.name, change: change.change, reason: p.reason, notes: p.notes ?? [], contentHash: hash },
363
+ pairedItem: { item: i },
364
+ });
365
+ continue;
366
+ }
367
+ if (operation === 'applyDraft') {
368
+ const res = await (0, workflows_1.applyDraft)(api, String(this.getNodeParameter('draftId', i)).trim(), String(this.getNodeParameter('approvedHash', i)).trim(), { activate: this.getNodeParameter('activate', i, false) === true });
369
+ out.push({ json: res, pairedItem: { item: i } });
370
+ continue;
371
+ }
372
+ if (operation === 'discardDraft') {
373
+ out.push({ json: await (0, workflows_1.discardDraft)(api, String(this.getNodeParameter('draftId', i)).trim()), pairedItem: { item: i } });
374
+ continue;
375
+ }
376
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Unknown operation ${operation}`, { itemIndex: i });
377
+ }
378
+ catch (error) {
379
+ if (this.continueOnFail()) {
380
+ out.push({ json: { error: error.message }, pairedItem: { item: i } });
381
+ continue;
382
+ }
383
+ if (error instanceof n8n_workflow_1.NodeOperationError)
384
+ throw error;
385
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), error, { itemIndex: i });
386
+ }
387
+ }
388
+ return [out];
389
+ }
390
+ }
391
+ exports.RoleAlphaWorkflowBuilder = RoleAlphaWorkflowBuilder;
392
+ //# sourceMappingURL=RoleAlphaWorkflowBuilder.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoleAlphaWorkflowBuilder.node.js","sourceRoot":"","sources":["../../../nodes/RoleAlphaWorkflowBuilder/RoleAlphaWorkflowBuilder.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#1f3a5f"/><circle cx="32" cy="16" r="6" fill="#fff"/><circle cx="16" cy="46" r="6" fill="#fff"/><circle cx="48" cy="46" r="6" fill="#fff"/><path d="M32 22v8M28 34l-9 7M36 34l9 7" stroke="#7fc4ff" stroke-width="3" stroke-linecap="round"/><circle cx="32" cy="33" r="4" fill="#7fc4ff"/></svg>
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@rolealpha/n8n-nodes-rolealpha",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "n8n nodes for running AI agents whose roles, duties, deciders and guardrails live in roleALPHA",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",
7
7
  "rolealpha",
8
8
  "agents",
9
9
  "governance",
10
- "approval"
10
+ "approval",
11
+ "workflow-builder"
11
12
  ],
12
13
  "license": "MIT",
13
14
  "author": {
@@ -44,7 +45,8 @@
44
45
  "nodes": [
45
46
  "dist/nodes/RoleAlpha/RoleAlpha.node.js",
46
47
  "dist/nodes/ApprovalSeal/ApprovalSeal.node.js",
47
- "dist/nodes/RoleAlphaTrigger/RoleAlphaTrigger.node.js"
48
+ "dist/nodes/RoleAlphaTrigger/RoleAlphaTrigger.node.js",
49
+ "dist/nodes/RoleAlphaWorkflowBuilder/RoleAlphaWorkflowBuilder.node.js"
48
50
  ]
49
51
  },
50
52
  "devDependencies": {