@lhi/n8m 0.3.2 → 1.0.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 (48) hide show
  1. package/README.md +50 -10
  2. package/banner.txt +9 -0
  3. package/dist/agentic/graph.d.ts +11 -1
  4. package/dist/agentic/graph.js +2 -1
  5. package/dist/agentic/nodes/architect.js +3 -2
  6. package/dist/agentic/nodes/engineer.js +4 -2
  7. package/dist/agentic/state.d.ts +2 -0
  8. package/dist/agentic/state.js +4 -0
  9. package/dist/commands/create.js +15 -2
  10. package/dist/commands/deploy.d.ts +2 -0
  11. package/dist/commands/deploy.js +25 -8
  12. package/dist/commands/fixture.js +1 -0
  13. package/dist/commands/learn.js +1 -1
  14. package/dist/commands/modify.js +13 -1
  15. package/dist/commands/rollback.d.ts +31 -0
  16. package/dist/commands/rollback.js +201 -0
  17. package/dist/fixture-schema.json +162 -0
  18. package/dist/help.d.ts +6 -0
  19. package/dist/help.js +12 -0
  20. package/dist/resources/node-definitions-fallback.json +390 -0
  21. package/dist/resources/node-test-hints.json +188 -0
  22. package/dist/resources/workflow-test-fixtures.json +42 -0
  23. package/dist/services/ai.service.d.ts +9 -2
  24. package/dist/services/ai.service.js +27 -6
  25. package/dist/services/git.service.d.ts +52 -0
  26. package/dist/services/git.service.js +110 -0
  27. package/dist/services/mcp.service.d.ts +1 -0
  28. package/dist/services/mcp.service.js +201 -0
  29. package/dist/services/node-definitions.service.js +1 -1
  30. package/dist/utils/config.js +3 -1
  31. package/dist/utils/n8nClient.d.ts +11 -0
  32. package/dist/utils/n8nClient.js +39 -0
  33. package/docs/.nojekyll +0 -0
  34. package/docs/CNAME +1 -0
  35. package/docs/DEVELOPER_GUIDE.md +12 -2
  36. package/docs/apple-touch-icon.png +0 -0
  37. package/docs/favicon-16x16.png +0 -0
  38. package/docs/favicon-192x192.png +0 -0
  39. package/docs/favicon-32x32.png +0 -0
  40. package/docs/favicon.svg +4 -0
  41. package/docs/index.html +1577 -0
  42. package/docs/social-card.html +237 -0
  43. package/n8m-cover.png +0 -0
  44. package/n8m-logo-light.png +0 -0
  45. package/n8m-logo-mono.png +0 -0
  46. package/n8m-logo-v2.png +0 -0
  47. package/oclif.manifest.json +68 -1
  48. package/package.json +11 -1
@@ -0,0 +1,237 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>n8m social card</title>
6
+ <link rel="preconnect" href="https://fonts.googleapis.com">
7
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
8
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@600;700&display=swap" rel="stylesheet">
9
+ <style>
10
+ * { box-sizing: border-box; margin: 0; padding: 0; }
11
+
12
+ /* exact GitHub OG size */
13
+ html, body {
14
+ width: 1280px;
15
+ height: 640px;
16
+ overflow: hidden;
17
+ }
18
+
19
+ body {
20
+ background: #0b0d14;
21
+ font-family: 'IBM Plex Sans', sans-serif;
22
+ color: #f1f5f9;
23
+ position: relative;
24
+ }
25
+
26
+ /* dot grid */
27
+ body::before {
28
+ content: '';
29
+ position: absolute;
30
+ inset: 0;
31
+ background-image: radial-gradient(circle, #1a2035 1px, transparent 1px);
32
+ background-size: 30px 30px;
33
+ opacity: .5;
34
+ }
35
+
36
+ /* green radial glow — top right */
37
+ body::after {
38
+ content: '';
39
+ position: absolute;
40
+ top: -160px;
41
+ right: -120px;
42
+ width: 720px;
43
+ height: 720px;
44
+ border-radius: 50%;
45
+ background: radial-gradient(circle, rgba(34,197,94,.12) 0%, transparent 65%);
46
+ pointer-events: none;
47
+ }
48
+
49
+ /* indigo glow — bottom left */
50
+ .glow-bl {
51
+ position: absolute;
52
+ bottom: -180px;
53
+ left: -100px;
54
+ width: 600px;
55
+ height: 600px;
56
+ border-radius: 50%;
57
+ background: radial-gradient(circle, rgba(99,102,241,.08) 0%, transparent 65%);
58
+ pointer-events: none;
59
+ }
60
+
61
+ /* safe-zone wrapper — 40px inset all sides */
62
+ .safe {
63
+ position: absolute;
64
+ inset: 40px;
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: space-between;
68
+ gap: 48px;
69
+ }
70
+
71
+ /* ── LEFT ── */
72
+ .left {
73
+ display: flex;
74
+ flex-direction: column;
75
+ justify-content: space-between;
76
+ height: 100%;
77
+ flex: 1;
78
+ min-width: 0;
79
+ }
80
+
81
+ .top-meta {
82
+ display: flex;
83
+ align-items: center;
84
+ gap: 10px;
85
+ font-size: 15px;
86
+ color: #64748b;
87
+ font-family: 'JetBrains Mono', monospace;
88
+ }
89
+ .top-meta .sep { color: #1a2035; }
90
+
91
+ .center-block {
92
+ flex: 1;
93
+ display: flex;
94
+ flex-direction: column;
95
+ justify-content: center;
96
+ gap: 18px;
97
+ }
98
+
99
+ /* logo row */
100
+ .logo-row {
101
+ display: flex;
102
+ align-items: center;
103
+ gap: 16px;
104
+ }
105
+
106
+ /* headline */
107
+ .headline {
108
+ font-family: 'JetBrains Mono', monospace;
109
+ font-weight: 700;
110
+ font-size: 62px;
111
+ line-height: 1.0;
112
+ letter-spacing: -.04em;
113
+ color: #f1f5f9;
114
+ }
115
+ .headline em {
116
+ font-style: normal;
117
+ color: #4ade80;
118
+ }
119
+
120
+ .tagline {
121
+ font-size: 20px;
122
+ color: #94a3b8;
123
+ line-height: 1.5;
124
+ max-width: 520px;
125
+ }
126
+
127
+ /* bottom tags */
128
+ .tags {
129
+ display: flex;
130
+ align-items: center;
131
+ gap: 10px;
132
+ }
133
+ .tag {
134
+ display: flex;
135
+ align-items: center;
136
+ gap: 6px;
137
+ background: rgba(255,255,255,.05);
138
+ border: 1px solid #1a2035;
139
+ border-radius: 6px;
140
+ padding: 5px 12px;
141
+ font-family: 'JetBrains Mono', monospace;
142
+ font-size: 13px;
143
+ color: #94a3b8;
144
+ }
145
+ .tag-dot { width: 7px; height: 7px; border-radius: 50%; }
146
+
147
+ /* ── RIGHT — large decorative logo mark ── */
148
+ .right {
149
+ flex-shrink: 0;
150
+ display: flex;
151
+ align-items: center;
152
+ justify-content: center;
153
+ position: relative;
154
+ }
155
+
156
+ /* glow ring behind the mark */
157
+ .mark-glow {
158
+ position: absolute;
159
+ width: 340px;
160
+ height: 340px;
161
+ border-radius: 50%;
162
+ background: radial-gradient(circle, rgba(34,197,94,.18) 0%, transparent 70%);
163
+ }
164
+ </style>
165
+ </head>
166
+ <body>
167
+ <div class="glow-bl"></div>
168
+
169
+ <div class="safe">
170
+
171
+ <!-- LEFT CONTENT -->
172
+ <div class="left">
173
+
174
+ <div class="top-meta">
175
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="color:#3d5070">
176
+ <path d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"/>
177
+ </svg>
178
+ Lee-Holdings-International
179
+ <span class="sep">/</span>
180
+ n8m
181
+ </div>
182
+
183
+ <div class="center-block">
184
+ <div class="logo-row">
185
+ <!-- n8m logo mark -->
186
+ <svg width="44" height="60" viewBox="0 0 22 30" fill="none" aria-hidden="true">
187
+ <rect x="0" y="0" width="22" height="30" rx="5" fill="#22c55e"/>
188
+ <rect x="3.5" y="3" width="15" height="10" rx="3" fill="#0b0d14"/>
189
+ <rect x="3.5" y="17" width="15" height="10" rx="3" fill="#0b0d14"/>
190
+ </svg>
191
+ <span style="font-family:'IBM Plex Sans',sans-serif;font-weight:700;font-size:42px;letter-spacing:-.02em;color:#f1f5f9;">n8m</span>
192
+ </div>
193
+
194
+ <div class="headline">
195
+ Stop clicking.<br><em>Start shipping.</em>
196
+ </div>
197
+
198
+ <div class="tagline">
199
+ Agentic AI CLI for n8n &mdash; describe a workflow in plain English,
200
+ get production-ready JSON in seconds.
201
+ </div>
202
+ </div>
203
+
204
+ <div class="tags">
205
+ <div class="tag">
206
+ <span class="tag-dot" style="background:#3178c6;"></span>
207
+ TypeScript
208
+ </div>
209
+ <div class="tag">
210
+ <span class="tag-dot" style="background:#22c55e;"></span>
211
+ MIT License
212
+ </div>
213
+ <div class="tag">
214
+ <span class="tag-dot" style="background:#ef6c00;"></span>
215
+ n8n compatible
216
+ </div>
217
+ <div class="tag" style="color:#4ade80;border-color:rgba(34,197,94,.25);">
218
+ npx n8m create "..."
219
+ </div>
220
+ </div>
221
+
222
+ </div>
223
+
224
+ <!-- RIGHT — large logo mark -->
225
+ <div class="right">
226
+ <div class="mark-glow"></div>
227
+ <svg width="260" height="354" viewBox="0 0 22 30" fill="none" aria-hidden="true"
228
+ style="position:relative;filter:drop-shadow(0 0 40px rgba(34,197,94,.35));">
229
+ <rect x="0" y="0" width="22" height="30" rx="5" fill="#22c55e"/>
230
+ <rect x="3.5" y="3" width="15" height="10" rx="3" fill="#0b0d14"/>
231
+ <rect x="3.5" y="17" width="15" height="10" rx="3" fill="#0b0d14"/>
232
+ </svg>
233
+ </div>
234
+
235
+ </div>
236
+ </body>
237
+ </html>
package/n8m-cover.png ADDED
Binary file
Binary file
Binary file
Binary file
@@ -156,6 +156,18 @@
156
156
  "hasDynamicHelp": false,
157
157
  "multiple": false,
158
158
  "type": "option"
159
+ },
160
+ "update": {
161
+ "description": "Update existing workflow without prompting (non-interactive)",
162
+ "name": "update",
163
+ "allowNo": false,
164
+ "type": "boolean"
165
+ },
166
+ "force-create": {
167
+ "description": "Always create as a new workflow, ignoring any existing ID (non-interactive)",
168
+ "name": "force-create",
169
+ "allowNo": false,
170
+ "type": "boolean"
159
171
  }
160
172
  },
161
173
  "hasDynamicHelp": false,
@@ -449,6 +461,61 @@
449
461
  "resume.js"
450
462
  ]
451
463
  },
464
+ "rollback": {
465
+ "aliases": [],
466
+ "args": {
467
+ "workflow": {
468
+ "description": "Path to workflow JSON file (omit for interactive menu)",
469
+ "name": "workflow",
470
+ "required": false
471
+ }
472
+ },
473
+ "description": "Restore a workflow to a previous git-tracked version",
474
+ "examples": [
475
+ "<%= config.bin %> <%= command.id %>",
476
+ "<%= config.bin %> <%= command.id %> ./workflows/slack-notifier/workflow.json",
477
+ "<%= config.bin %> <%= command.id %> ./workflows/slack-notifier/workflow.json --deploy"
478
+ ],
479
+ "flags": {
480
+ "instance": {
481
+ "char": "i",
482
+ "description": "n8n instance name (from config)",
483
+ "name": "instance",
484
+ "default": "production",
485
+ "hasDynamicHelp": false,
486
+ "multiple": false,
487
+ "type": "option"
488
+ },
489
+ "deploy": {
490
+ "char": "d",
491
+ "description": "Deploy the restored workflow to n8n after rollback",
492
+ "name": "deploy",
493
+ "allowNo": false,
494
+ "type": "boolean"
495
+ },
496
+ "dir": {
497
+ "description": "Directory to scan for workflows (default: ./workflows)",
498
+ "name": "dir",
499
+ "hasDynamicHelp": false,
500
+ "multiple": false,
501
+ "type": "option"
502
+ }
503
+ },
504
+ "hasDynamicHelp": false,
505
+ "hiddenAliases": [],
506
+ "id": "rollback",
507
+ "pluginAlias": "@lhi/n8m",
508
+ "pluginName": "@lhi/n8m",
509
+ "pluginType": "core",
510
+ "strict": true,
511
+ "enableJsonFlag": false,
512
+ "isESM": true,
513
+ "relativePath": [
514
+ "dist",
515
+ "commands",
516
+ "rollback.js"
517
+ ]
518
+ },
452
519
  "test": {
453
520
  "aliases": [],
454
521
  "args": {
@@ -518,5 +585,5 @@
518
585
  ]
519
586
  }
520
587
  },
521
- "version": "0.3.2"
588
+ "version": "1.0.0"
522
589
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lhi/n8m",
3
- "version": "0.3.2",
3
+ "version": "1.0.0",
4
4
  "description": "Agentic n8n CLI wrapper - A Skill Bridge for n8n workflow automation",
5
5
  "author": "Lem Canady",
6
6
  "keywords": [
@@ -37,9 +37,18 @@
37
37
  "bin",
38
38
  "dist",
39
39
  "docs",
40
+ "banner.txt",
41
+ "n8m-cover.png",
42
+ "n8m-logo-v2.png",
43
+ "n8m-logo-light.png",
44
+ "n8m-logo-mono.png",
40
45
  "oclif.manifest.json"
41
46
  ],
42
47
  "dependencies": {
48
+ "@inquirer/checkbox": "^4.0.0",
49
+ "@inquirer/confirm": "^5.0.0",
50
+ "@inquirer/input": "^4.0.0",
51
+ "@inquirer/select": "^4.0.0",
43
52
  "@langchain/core": "^1.1.18",
44
53
  "@langchain/langgraph": "^1.1.2",
45
54
  "@langchain/langgraph-checkpoint-sqlite": "^1.0.0",
@@ -89,6 +98,7 @@
89
98
  "bin": "n8m",
90
99
  "dirname": "n8m",
91
100
  "commands": "./dist/commands",
101
+ "helpClass": "./dist/help.js",
92
102
  "plugins": [
93
103
  "@oclif/plugin-help",
94
104
  "@oclif/plugin-plugins"