@n8n/cli 0.1.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.
Files changed (185) hide show
  1. package/LICENSE.md +88 -0
  2. package/bin/n8n-cli.mjs +5 -0
  3. package/dist/base-command.d.ts +40 -0
  4. package/dist/base-command.js +161 -0
  5. package/dist/base-command.js.map +1 -0
  6. package/dist/build.tsbuildinfo +1 -0
  7. package/dist/client.d.ts +80 -0
  8. package/dist/client.js +282 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/commands/audit/index.d.ts +17 -0
  11. package/dist/commands/audit/index.js +28 -0
  12. package/dist/commands/audit/index.js.map +1 -0
  13. package/dist/commands/config/set-api-key.d.ts +9 -0
  14. package/dist/commands/config/set-api-key.js +20 -0
  15. package/dist/commands/config/set-api-key.js.map +1 -0
  16. package/dist/commands/config/set-url.d.ts +9 -0
  17. package/dist/commands/config/set-url.js +23 -0
  18. package/dist/commands/config/set-url.js.map +1 -0
  19. package/dist/commands/config/show.d.ts +6 -0
  20. package/dist/commands/config/show.js +18 -0
  21. package/dist/commands/config/show.js.map +1 -0
  22. package/dist/commands/credential/create.d.ts +21 -0
  23. package/dist/commands/credential/create.js +42 -0
  24. package/dist/commands/credential/create.js.map +1 -0
  25. package/dist/commands/credential/delete.d.ts +19 -0
  26. package/dist/commands/credential/delete.js +22 -0
  27. package/dist/commands/credential/delete.js.map +1 -0
  28. package/dist/commands/credential/get.d.ts +19 -0
  29. package/dist/commands/credential/get.js +22 -0
  30. package/dist/commands/credential/get.js.map +1 -0
  31. package/dist/commands/credential/list.d.ts +17 -0
  32. package/dist/commands/credential/list.js +25 -0
  33. package/dist/commands/credential/list.js.map +1 -0
  34. package/dist/commands/credential/schema.d.ts +19 -0
  35. package/dist/commands/credential/schema.js +25 -0
  36. package/dist/commands/credential/schema.js.map +1 -0
  37. package/dist/commands/credential/transfer.d.ts +20 -0
  38. package/dist/commands/credential/transfer.js +28 -0
  39. package/dist/commands/credential/transfer.js.map +1 -0
  40. package/dist/commands/data-table/add-rows.d.ts +21 -0
  41. package/dist/commands/data-table/add-rows.js +31 -0
  42. package/dist/commands/data-table/add-rows.js.map +1 -0
  43. package/dist/commands/data-table/create.d.ts +18 -0
  44. package/dist/commands/data-table/create.js +29 -0
  45. package/dist/commands/data-table/create.js.map +1 -0
  46. package/dist/commands/data-table/delete-rows.d.ts +20 -0
  47. package/dist/commands/data-table/delete-rows.js +30 -0
  48. package/dist/commands/data-table/delete-rows.js.map +1 -0
  49. package/dist/commands/data-table/delete.d.ts +19 -0
  50. package/dist/commands/data-table/delete.js +22 -0
  51. package/dist/commands/data-table/delete.js.map +1 -0
  52. package/dist/commands/data-table/get.d.ts +19 -0
  53. package/dist/commands/data-table/get.js +22 -0
  54. package/dist/commands/data-table/get.js.map +1 -0
  55. package/dist/commands/data-table/list.d.ts +17 -0
  56. package/dist/commands/data-table/list.js +22 -0
  57. package/dist/commands/data-table/list.js.map +1 -0
  58. package/dist/commands/data-table/rows.d.ts +22 -0
  59. package/dist/commands/data-table/rows.js +35 -0
  60. package/dist/commands/data-table/rows.js.map +1 -0
  61. package/dist/commands/data-table/update-rows.d.ts +21 -0
  62. package/dist/commands/data-table/update-rows.js +36 -0
  63. package/dist/commands/data-table/update-rows.js.map +1 -0
  64. package/dist/commands/data-table/upsert-rows.d.ts +21 -0
  65. package/dist/commands/data-table/upsert-rows.js +36 -0
  66. package/dist/commands/data-table/upsert-rows.js.map +1 -0
  67. package/dist/commands/execution/delete.d.ts +19 -0
  68. package/dist/commands/execution/delete.js +22 -0
  69. package/dist/commands/execution/delete.js.map +1 -0
  70. package/dist/commands/execution/get.d.ts +20 -0
  71. package/dist/commands/execution/get.js +32 -0
  72. package/dist/commands/execution/get.js.map +1 -0
  73. package/dist/commands/execution/list.d.ts +19 -0
  74. package/dist/commands/execution/list.js +37 -0
  75. package/dist/commands/execution/list.js.map +1 -0
  76. package/dist/commands/execution/retry.d.ts +19 -0
  77. package/dist/commands/execution/retry.js +22 -0
  78. package/dist/commands/execution/retry.js.map +1 -0
  79. package/dist/commands/execution/stop.d.ts +19 -0
  80. package/dist/commands/execution/stop.js +22 -0
  81. package/dist/commands/execution/stop.js.map +1 -0
  82. package/dist/commands/login.d.ts +6 -0
  83. package/dist/commands/login.js +84 -0
  84. package/dist/commands/login.js.map +1 -0
  85. package/dist/commands/logout.d.ts +6 -0
  86. package/dist/commands/logout.js +20 -0
  87. package/dist/commands/logout.js.map +1 -0
  88. package/dist/commands/project/add-member.d.ts +21 -0
  89. package/dist/commands/project/add-member.js +32 -0
  90. package/dist/commands/project/add-member.js.map +1 -0
  91. package/dist/commands/project/create.d.ts +17 -0
  92. package/dist/commands/project/create.js +22 -0
  93. package/dist/commands/project/create.js.map +1 -0
  94. package/dist/commands/project/delete.d.ts +19 -0
  95. package/dist/commands/project/delete.js +22 -0
  96. package/dist/commands/project/delete.js.map +1 -0
  97. package/dist/commands/project/get.d.ts +19 -0
  98. package/dist/commands/project/get.js +22 -0
  99. package/dist/commands/project/get.js.map +1 -0
  100. package/dist/commands/project/list.d.ts +17 -0
  101. package/dist/commands/project/list.js +22 -0
  102. package/dist/commands/project/list.js.map +1 -0
  103. package/dist/commands/project/members.d.ts +20 -0
  104. package/dist/commands/project/members.js +25 -0
  105. package/dist/commands/project/members.js.map +1 -0
  106. package/dist/commands/project/remove-member.d.ts +20 -0
  107. package/dist/commands/project/remove-member.js +29 -0
  108. package/dist/commands/project/remove-member.js.map +1 -0
  109. package/dist/commands/project/update.d.ts +20 -0
  110. package/dist/commands/project/update.js +25 -0
  111. package/dist/commands/project/update.js.map +1 -0
  112. package/dist/commands/skill/install.d.ts +14 -0
  113. package/dist/commands/skill/install.js +128 -0
  114. package/dist/commands/skill/install.js.map +1 -0
  115. package/dist/commands/source-control/pull.d.ts +17 -0
  116. package/dist/commands/source-control/pull.js +25 -0
  117. package/dist/commands/source-control/pull.js.map +1 -0
  118. package/dist/commands/tag/create.d.ts +17 -0
  119. package/dist/commands/tag/create.js +22 -0
  120. package/dist/commands/tag/create.js.map +1 -0
  121. package/dist/commands/tag/delete.d.ts +19 -0
  122. package/dist/commands/tag/delete.js +22 -0
  123. package/dist/commands/tag/delete.js.map +1 -0
  124. package/dist/commands/tag/list.d.ts +17 -0
  125. package/dist/commands/tag/list.js +22 -0
  126. package/dist/commands/tag/list.js.map +1 -0
  127. package/dist/commands/tag/update.d.ts +20 -0
  128. package/dist/commands/tag/update.js +25 -0
  129. package/dist/commands/tag/update.js.map +1 -0
  130. package/dist/commands/user/get.d.ts +19 -0
  131. package/dist/commands/user/get.js +22 -0
  132. package/dist/commands/user/get.js.map +1 -0
  133. package/dist/commands/user/list.d.ts +17 -0
  134. package/dist/commands/user/list.js +22 -0
  135. package/dist/commands/user/list.js.map +1 -0
  136. package/dist/commands/variable/create.d.ts +18 -0
  137. package/dist/commands/variable/create.js +25 -0
  138. package/dist/commands/variable/create.js.map +1 -0
  139. package/dist/commands/variable/delete.d.ts +19 -0
  140. package/dist/commands/variable/delete.js +22 -0
  141. package/dist/commands/variable/delete.js.map +1 -0
  142. package/dist/commands/variable/list.d.ts +17 -0
  143. package/dist/commands/variable/list.js +22 -0
  144. package/dist/commands/variable/list.js.map +1 -0
  145. package/dist/commands/variable/update.d.ts +21 -0
  146. package/dist/commands/variable/update.js +32 -0
  147. package/dist/commands/variable/update.js.map +1 -0
  148. package/dist/commands/workflow/activate.d.ts +19 -0
  149. package/dist/commands/workflow/activate.js +22 -0
  150. package/dist/commands/workflow/activate.js.map +1 -0
  151. package/dist/commands/workflow/create.d.ts +18 -0
  152. package/dist/commands/workflow/create.js +28 -0
  153. package/dist/commands/workflow/create.js.map +1 -0
  154. package/dist/commands/workflow/deactivate.d.ts +19 -0
  155. package/dist/commands/workflow/deactivate.js +22 -0
  156. package/dist/commands/workflow/deactivate.js.map +1 -0
  157. package/dist/commands/workflow/delete.d.ts +19 -0
  158. package/dist/commands/workflow/delete.js +22 -0
  159. package/dist/commands/workflow/delete.js.map +1 -0
  160. package/dist/commands/workflow/get.d.ts +19 -0
  161. package/dist/commands/workflow/get.js +25 -0
  162. package/dist/commands/workflow/get.js.map +1 -0
  163. package/dist/commands/workflow/list.d.ts +20 -0
  164. package/dist/commands/workflow/list.js +36 -0
  165. package/dist/commands/workflow/list.js.map +1 -0
  166. package/dist/commands/workflow/tags.d.ts +20 -0
  167. package/dist/commands/workflow/tags.js +35 -0
  168. package/dist/commands/workflow/tags.js.map +1 -0
  169. package/dist/commands/workflow/transfer.d.ts +20 -0
  170. package/dist/commands/workflow/transfer.js +28 -0
  171. package/dist/commands/workflow/transfer.js.map +1 -0
  172. package/dist/commands/workflow/update.d.ts +21 -0
  173. package/dist/commands/workflow/update.js +31 -0
  174. package/dist/commands/workflow/update.js.map +1 -0
  175. package/dist/config.d.ts +14 -0
  176. package/dist/config.js +82 -0
  177. package/dist/config.js.map +1 -0
  178. package/dist/index.d.ts +112 -0
  179. package/dist/index.js +119 -0
  180. package/dist/index.js.map +1 -0
  181. package/dist/output.d.ts +9 -0
  182. package/dist/output.js +161 -0
  183. package/dist/output.js.map +1 -0
  184. package/package.json +45 -0
  185. package/skills/n8n-cli/SKILL.md +268 -0
package/dist/output.js ADDED
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatOutput = formatOutput;
4
+ exports.applyJqFilter = applyJqFilter;
5
+ function pickColumns(data, columns) {
6
+ const result = {};
7
+ for (const col of columns) {
8
+ result[col] = data[col];
9
+ }
10
+ return result;
11
+ }
12
+ function formatValue(value) {
13
+ if (value === null || value === undefined)
14
+ return '-';
15
+ if (typeof value === 'boolean')
16
+ return value ? 'true' : 'false';
17
+ if (typeof value === 'string') {
18
+ return value.length > 60 ? value.slice(0, 57) + '...' : value;
19
+ }
20
+ if (typeof value === 'number')
21
+ return String(value);
22
+ if (typeof value === 'object')
23
+ return JSON.stringify(value);
24
+ return typeof value === 'bigint' ? String(value) : JSON.stringify(value);
25
+ }
26
+ function renderTable(data, columns, noHeader) {
27
+ if (data.length === 0)
28
+ return 'No results.';
29
+ const cols = columns ?? Object.keys(data[0]);
30
+ const rows = data.map((row) => pickColumns(row, cols));
31
+ const widths = {};
32
+ for (const col of cols) {
33
+ widths[col] = col.length;
34
+ for (const row of rows) {
35
+ const len = formatValue(row[col]).length;
36
+ if (len > widths[col])
37
+ widths[col] = len;
38
+ }
39
+ }
40
+ const lines = rows.map((row) => cols.map((c) => formatValue(row[c]).padEnd(widths[c])).join(' '));
41
+ if (noHeader) {
42
+ return lines.join('\n');
43
+ }
44
+ const header = cols.map((c) => c.toUpperCase().padEnd(widths[c])).join(' ');
45
+ const separator = cols.map((c) => '-'.repeat(widths[c])).join(' ');
46
+ return [header, separator, ...lines].join('\n');
47
+ }
48
+ function formatOutput(data, options) {
49
+ const { format, columns, idField = 'id', noHeader } = options;
50
+ switch (format) {
51
+ case 'json':
52
+ return JSON.stringify(data, null, 2);
53
+ case 'id-only': {
54
+ if (Array.isArray(data)) {
55
+ return data
56
+ .map((item) => {
57
+ const val = item[idField];
58
+ return val !== null && val !== undefined ? `${val}` : '';
59
+ })
60
+ .join('\n');
61
+ }
62
+ if (typeof data === 'object' && data !== null && idField in data) {
63
+ return String(data[idField]);
64
+ }
65
+ return '';
66
+ }
67
+ case 'table':
68
+ default: {
69
+ if (Array.isArray(data)) {
70
+ return renderTable(data, columns, noHeader);
71
+ }
72
+ if (typeof data === 'object' && data !== null) {
73
+ const entries = Object.entries(data);
74
+ if (noHeader) {
75
+ return entries.map(([, v]) => formatValue(v)).join('\n');
76
+ }
77
+ const maxKeyLen = Math.max(...entries.map(([k]) => k.length));
78
+ return entries.map(([k, v]) => `${k.padEnd(maxKeyLen)} ${formatValue(v)}`).join('\n');
79
+ }
80
+ return String(data);
81
+ }
82
+ }
83
+ }
84
+ function parseJqPath(expr) {
85
+ const segments = [];
86
+ let i = 0;
87
+ if (expr[0] === '.')
88
+ i++;
89
+ while (i < expr.length) {
90
+ if (expr[i] === '[') {
91
+ i++;
92
+ if (expr[i] === ']') {
93
+ segments.push({ type: 'iterate' });
94
+ i++;
95
+ }
96
+ else {
97
+ let numStr = '';
98
+ while (i < expr.length && expr[i] !== ']') {
99
+ numStr += expr[i];
100
+ i++;
101
+ }
102
+ segments.push({ type: 'index', index: parseInt(numStr, 10) });
103
+ i++;
104
+ }
105
+ }
106
+ else if (expr[i] === '.') {
107
+ i++;
108
+ }
109
+ else {
110
+ let name = '';
111
+ while (i < expr.length && expr[i] !== '.' && expr[i] !== '[') {
112
+ name += expr[i];
113
+ i++;
114
+ }
115
+ if (name) {
116
+ segments.push({ type: 'field', name });
117
+ }
118
+ }
119
+ }
120
+ return segments;
121
+ }
122
+ function evaluateJq(data, segments, startIdx) {
123
+ let current = data;
124
+ for (let i = startIdx; i < segments.length; i++) {
125
+ const seg = segments[i];
126
+ if (current === null || current === undefined)
127
+ return current;
128
+ switch (seg.type) {
129
+ case 'field':
130
+ if (typeof current === 'object' && current !== null) {
131
+ current = current[seg.name];
132
+ }
133
+ else {
134
+ return undefined;
135
+ }
136
+ break;
137
+ case 'index':
138
+ if (Array.isArray(current)) {
139
+ current = current[seg.index];
140
+ }
141
+ else {
142
+ return undefined;
143
+ }
144
+ break;
145
+ case 'iterate':
146
+ if (Array.isArray(current)) {
147
+ return current.map((item) => evaluateJq(item, segments, i + 1));
148
+ }
149
+ return undefined;
150
+ }
151
+ }
152
+ return current;
153
+ }
154
+ function applyJqFilter(data, expression) {
155
+ const expr = expression.trim();
156
+ if (expr === '.')
157
+ return data;
158
+ const segments = parseJqPath(expr);
159
+ return evaluateJq(data, segments, 0);
160
+ }
161
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":";;AAqEA,oCAuCC;AA4FD,sCAKC;AA1MD,SAAS,WAAW,CAAC,IAA6B,EAAE,OAAiB;IACpE,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAGD,SAAS,WAAW,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IACtD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAE/B,OAAO,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAGD,SAAS,WAAW,CACnB,IAAoC,EACpC,OAAkB,EAClB,QAAkB;IAElB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC;IAE5C,MAAM,IAAI,GAAG,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAGvD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACzC,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC1C,CAAC;IACF,CAAC;IAGD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACjE,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAGD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEpE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AAUD,SAAgB,YAAY,CAAC,IAAa,EAAE,OAAsB;IACjE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE9D,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,MAAM;YACV,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAEtC,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,OAAO,IAAI;qBACT,GAAG,CAAC,CAAC,IAA6B,EAAE,EAAE;oBACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC1B,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,GAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,CAAC;YACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBAClE,OAAO,MAAM,CAAE,IAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,EAAE,CAAC;QACX,CAAC;QAED,KAAK,OAAO,CAAC;QACb,OAAO,CAAC,CAAC,CAAC;YACT,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,OAAO,WAAW,CAAC,IAAsC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC/E,CAAC;YAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAA+B,CAAC,CAAC;gBAChE,IAAI,QAAQ,EAAE,CAAC;oBACd,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1D,CAAC;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxF,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACF,CAAC;AACF,CAAC;AASD,SAAS,WAAW,CAAC,IAAY;IAChC,MAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,IAAI,CAAC,GAAG,CAAC,CAAC;IAGV,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,CAAC,EAAE,CAAC;IAEzB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,CAAC,EAAE,CAAC;YACJ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACnC,CAAC,EAAE,CAAC;YACL,CAAC;iBAAM,CAAC;gBACP,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAC3C,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClB,CAAC,EAAE,CAAC;gBACL,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9D,CAAC,EAAE,CAAC;YACL,CAAC;QACF,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC5B,CAAC,EAAE,CAAC;QACL,CAAC;aAAM,CAAC;YACP,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC9D,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,CAAC,EAAE,CAAC;YACL,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,IAAa,EAAE,QAAqB,EAAE,QAAgB;IACzE,IAAI,OAAO,GAAY,IAAI,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;QAE9D,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,OAAO;gBACX,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrD,OAAO,GAAI,OAAmC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC1D,CAAC;qBAAM,CAAC;oBACP,OAAO,SAAS,CAAC;gBAClB,CAAC;gBACD,MAAM;YACP,KAAK,OAAO;gBACX,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACP,OAAO,SAAS,CAAC;gBAClB,CAAC;gBACD,MAAM;YACP,KAAK,SAAS;gBACb,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjE,CAAC;gBACD,OAAO,SAAS,CAAC;QACnB,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAaD,SAAgB,aAAa,CAAC,IAAa,EAAE,UAAkB;IAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@n8n/cli",
3
+ "version": "0.1.0",
4
+ "description": "Client CLI for n8n — manage workflows, executions, and credentials from the terminal",
5
+ "license": "SEE LICENSE IN LICENSE.md",
6
+ "bin": {
7
+ "n8n-cli": "bin/n8n-cli.mjs"
8
+ },
9
+ "main": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "files": [
12
+ "bin",
13
+ "dist",
14
+ "skills"
15
+ ],
16
+ "oclif": {
17
+ "bin": "n8n-cli",
18
+ "commands": {
19
+ "strategy": "explicit",
20
+ "target": "./dist/index.js",
21
+ "identifier": "commands"
22
+ },
23
+ "topicSeparator": " "
24
+ },
25
+ "dependencies": {
26
+ "@oclif/core": "^4.5.2"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "25.5.0",
30
+ "vitest": "^3.1.3",
31
+ "@n8n/typescript-config": "1.3.0"
32
+ },
33
+ "scripts": {
34
+ "clean": "rimraf dist .turbo",
35
+ "dev": "pnpm watch",
36
+ "typecheck": "tsc --noEmit",
37
+ "build": "tsc -p tsconfig.build.json",
38
+ "format": "biome format --write .",
39
+ "format:check": "biome ci .",
40
+ "lint": "eslint src --quiet",
41
+ "lint:fix": "eslint src --fix",
42
+ "watch": "tsc -p tsconfig.build.json --watch",
43
+ "test": "vitest run"
44
+ }
45
+ }
@@ -0,0 +1,268 @@
1
+ ---
2
+ name: n8n-cli
3
+ description: Use the n8n CLI to manage workflows, credentials, executions, and more on an n8n instance. Use when the user asks to interact with n8n, automate workflows, manage credentials, or operate their instance from the command line.
4
+ allowed-tools: Bash(n8n-cli:*), Bash(echo:*), Bash(cat:*), Read, Write
5
+ ---
6
+
7
+ # n8n CLI
8
+
9
+ The `n8n-cli` command-line tool manages an n8n instance via its REST API.
10
+ It auto-detects piped output and switches to JSON, making it composable for scripts and LLM tool use.
11
+
12
+ ## Setup
13
+
14
+ ```bash
15
+ # Interactive login (saves to ~/.n8n-cli/config.json)
16
+ n8n-cli login
17
+
18
+ # Or configure directly
19
+ n8n-cli config set-url https://my-instance.n8n.cloud
20
+ n8n-cli config set-api-key n8n_api_...
21
+
22
+ # Or use environment variables (no config file needed)
23
+ export N8N_URL=https://my-instance.n8n.cloud
24
+ export N8N_API_KEY=n8n_api_...
25
+ ```
26
+
27
+ ## Global Flags
28
+
29
+ Every command supports these flags:
30
+
31
+ | Flag | Short | Description |
32
+ |------|-------|-------------|
33
+ | `--url` | `-u` | Instance URL (overrides config/env) |
34
+ | `--apiKey` | `-k` | API key (overrides config/env) |
35
+ | `--format` | `-f` | Output format: `table`, `json`, `id-only` |
36
+ | `--json` | | Shorthand for `--format=json` |
37
+ | `--jq` | | jq-style filter (implies `--json`), e.g. `'.[0].id'`, `'.[].name'` |
38
+ | `--quiet` | `-q` | Suppress output |
39
+ | `--no-header` | | Hide table headers (for `awk`/`cut` parsing) |
40
+ | `--debug` | | Print HTTP details to stderr |
41
+
42
+ **Auto-JSON:** When stdout is piped (not a TTY), output defaults to JSON automatically.
43
+
44
+ ## Workflows
45
+
46
+ ```bash
47
+ # List all workflows
48
+ n8n-cli workflow list
49
+
50
+ # Filter workflows
51
+ n8n-cli workflow list --active
52
+ n8n-cli workflow list --tag=production
53
+ n8n-cli workflow list --name="My Workflow"
54
+ n8n-cli workflow list --limit=5
55
+
56
+ # Get a single workflow (full JSON with nodes and connections)
57
+ n8n-cli workflow get <id>
58
+
59
+ # Extract just node names from a workflow
60
+ n8n-cli workflow get <id> --jq '.nodes[].name'
61
+
62
+ # Create a workflow from JSON
63
+ n8n-cli workflow create --file=workflow.json
64
+ cat workflow.json | n8n-cli workflow create --stdin
65
+
66
+ # Update a workflow
67
+ n8n-cli workflow update <id> --file=updated.json
68
+ cat updated.json | n8n-cli workflow update <id> --stdin
69
+
70
+ # Activate / deactivate
71
+ n8n-cli workflow activate <id>
72
+ n8n-cli workflow deactivate <id>
73
+
74
+ # Delete a workflow
75
+ n8n-cli workflow delete <id>
76
+
77
+ # Transfer to another project
78
+ n8n-cli workflow transfer <id> --project=<projectId>
79
+
80
+ # List tags on a workflow
81
+ n8n-cli workflow tags <id>
82
+ ```
83
+
84
+ ## Executions
85
+
86
+ ```bash
87
+ # List recent executions
88
+ n8n-cli execution list
89
+ n8n-cli execution list --workflow=<id> --status=error --limit=10
90
+ # status options: canceled, error, running, success, waiting
91
+
92
+ # Get execution details
93
+ n8n-cli execution get <id>
94
+ n8n-cli execution get <id> --include-data # includes full node I/O
95
+
96
+ # Retry a failed execution
97
+ n8n-cli execution retry <id>
98
+
99
+ # Stop a running execution
100
+ n8n-cli execution stop <id>
101
+
102
+ # Delete an execution
103
+ n8n-cli execution delete <id>
104
+ ```
105
+
106
+ ## Credentials
107
+
108
+ ```bash
109
+ # List credentials
110
+ n8n-cli credential list
111
+
112
+ # Get credential metadata (not secrets)
113
+ n8n-cli credential get <id>
114
+
115
+ # Get the schema for a credential type (shows required fields)
116
+ n8n-cli credential schema notionApi
117
+ n8n-cli credential schema slackOAuth2Api
118
+
119
+ # Create a credential
120
+ n8n-cli credential create --type=notionApi --name='My Notion' --data='{"apiKey":"..."}'
121
+ n8n-cli credential create --type=notionApi --name='My Notion' --file=cred.json
122
+ cat cred.json | n8n-cli credential create --type=notionApi --name='My Notion' --stdin
123
+
124
+ # Delete / transfer
125
+ n8n-cli credential delete <id>
126
+ n8n-cli credential transfer <id> --project=<projectId>
127
+ ```
128
+
129
+ **Tip:** Use `credential schema <type>` to discover required fields before creating.
130
+
131
+ ## Projects
132
+
133
+ ```bash
134
+ n8n-cli project list
135
+ n8n-cli project get <id>
136
+ n8n-cli project create --name="My Project"
137
+ n8n-cli project update <id> --name="New Name"
138
+ n8n-cli project delete <id>
139
+
140
+ # Team management
141
+ n8n-cli project members <id>
142
+ n8n-cli project add-member <id> --user=<userId> --role=<role>
143
+ n8n-cli project remove-member <id> --user=<userId>
144
+ ```
145
+
146
+ ## Tags
147
+
148
+ ```bash
149
+ n8n-cli tag list
150
+ n8n-cli tag create --name=production
151
+ n8n-cli tag update <id> --name=staging
152
+ n8n-cli tag delete <id>
153
+ ```
154
+
155
+ ## Variables
156
+
157
+ ```bash
158
+ n8n-cli variable list
159
+ n8n-cli variable create --key=API_ENDPOINT --value=https://api.example.com
160
+ n8n-cli variable update <id> --key=API_ENDPOINT --value=https://new-api.example.com
161
+ n8n-cli variable delete <id>
162
+ ```
163
+
164
+ ## Data Tables
165
+
166
+ ```bash
167
+ # CRUD
168
+ n8n-cli data-table list
169
+ n8n-cli data-table get <id>
170
+ n8n-cli data-table create --name=Inventory --columns='[{"name":"item","type":"string"},{"name":"qty","type":"number"}]'
171
+ n8n-cli data-table delete <id>
172
+
173
+ # Row operations
174
+ n8n-cli data-table rows <id>
175
+ n8n-cli data-table add-rows <id> --file=rows.json
176
+ n8n-cli data-table update-rows <id> --file=rows.json
177
+ n8n-cli data-table upsert-rows <id> --file=rows.json
178
+ n8n-cli data-table delete-rows <id> --ids=row1,row2,row3
179
+
180
+ # All row commands support --stdin
181
+ cat rows.json | n8n-cli data-table add-rows <id> --stdin
182
+ ```
183
+
184
+ ## Users
185
+
186
+ ```bash
187
+ n8n-cli user list
188
+ n8n-cli user get <id>
189
+ ```
190
+
191
+ ## Other
192
+
193
+ ```bash
194
+ # Security audit
195
+ n8n-cli audit
196
+ n8n-cli audit --categories=credentials,nodes
197
+
198
+ # Source control
199
+ n8n-cli source-control pull
200
+
201
+ # View config
202
+ n8n-cli config show
203
+ ```
204
+
205
+ ## Composability Patterns
206
+
207
+ The CLI is designed to be piped and composed:
208
+
209
+ ```bash
210
+ # Get all workflow IDs
211
+ n8n-cli workflow list --jq '.[].id'
212
+
213
+ # Get the name of the first workflow
214
+ n8n-cli workflow list --jq '.[0].name'
215
+
216
+ # Export a workflow to a file
217
+ n8n-cli workflow get 1234 --json > workflow-backup.json
218
+
219
+ # Find failing executions for a workflow
220
+ n8n-cli execution list --workflow=1234 --status=error --json
221
+
222
+ # Pipe workflow JSON for modification
223
+ n8n-cli workflow get 1234 --json | jq '.name = "Updated Name"' | n8n-cli workflow update 1234 --stdin
224
+
225
+ # Table output without headers for shell parsing
226
+ n8n-cli workflow list --no-header | awk '{print $1}'
227
+
228
+ # Debug API calls
229
+ n8n-cli workflow list --debug 2>debug.log
230
+ ```
231
+
232
+ ## Workflow JSON Structure
233
+
234
+ When creating or updating workflows, the JSON follows this structure:
235
+
236
+ ```json
237
+ {
238
+ "name": "My Workflow",
239
+ "nodes": [
240
+ {
241
+ "name": "Start",
242
+ "type": "n8n-nodes-base.manualTrigger",
243
+ "position": [250, 300],
244
+ "parameters": {}
245
+ },
246
+ {
247
+ "name": "HTTP Request",
248
+ "type": "n8n-nodes-base.httpRequest",
249
+ "position": [450, 300],
250
+ "parameters": {
251
+ "url": "https://api.example.com/data",
252
+ "method": "GET"
253
+ }
254
+ }
255
+ ],
256
+ "connections": {
257
+ "Start": {
258
+ "main": [[{ "node": "HTTP Request", "type": "main", "index": 0 }]]
259
+ }
260
+ }
261
+ }
262
+ ```
263
+
264
+ Key points:
265
+ - `nodes[].type` follows the pattern `n8n-nodes-base.<nodeName>` for built-in nodes
266
+ - `connections` is keyed by source node name, with `main` output arrays
267
+ - Each connection specifies target `node`, `type` (usually `main`), and output `index`
268
+ - Use `workflow get <id> --json` to see real examples from the instance