nomoreide 0.1.50 → 0.1.52
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/README.md +1 -64
- package/dist/core/workflows.d.ts +16 -12
- package/dist/core/workflows.js +27 -13
- package/dist/core/workflows.js.map +1 -1
- package/dist/web/client/assets/{code-editor-C3yeCqYg.js → code-editor-_ve7fiz7.js} +1 -1
- package/dist/web/client/assets/index-7b_XjCVh.css +1 -0
- package/dist/web/client/assets/index-CLEWYNCX.js +215 -0
- package/dist/web/client/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/client/assets/index-BEojL6wP.js +0 -211
- package/dist/web/client/assets/index-vGzOmeUL.css +0 -1
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
Give your coding agents and yourself a **shared local control surface** for services, ports, logs, Git review, GitHub workflows, database work, and MCP workflows — no IDE required.
|
|
17
17
|
|
|
18
|
-
[
|
|
18
|
+
[MCP Setup](#connect-your-ai-agent) · [CLI Reference](#cli) · [MCP Tools](#mcp-tools) · [Architecture](#architecture)
|
|
19
19
|
|
|
20
20
|
</div>
|
|
21
21
|
|
|
@@ -154,69 +154,6 @@ If you prefer to point agents at a locally built binary instead of the published
|
|
|
154
154
|
|
|
155
155
|
---
|
|
156
156
|
|
|
157
|
-
## Quick Start
|
|
158
|
-
|
|
159
|
-
Add NoMoreIDE to your agent as a local MCP server:
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
claude mcp add --transport stdio nomoreide -- npx -y nomoreide
|
|
163
|
-
codex mcp add nomoreide -- npx -y nomoreide
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
For Gemini CLI, add this to `~/.gemini/settings.json`:
|
|
167
|
-
|
|
168
|
-
```json
|
|
169
|
-
{
|
|
170
|
-
"mcpServers": {
|
|
171
|
-
"nomoreide": {
|
|
172
|
-
"command": "npx",
|
|
173
|
-
"args": ["-y", "nomoreide"]
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Or print the setup commands from the package:
|
|
180
|
-
|
|
181
|
-
```bash
|
|
182
|
-
npx -y nomoreide setup
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
Or paste this prompt into your agent:
|
|
186
|
-
|
|
187
|
-
```text
|
|
188
|
-
Please set up NoMoreIDE as a local MCP server for this agent. Register a server named nomoreide that runs npx -y nomoreide. After adding it, tell me how to verify it with /mcp.
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
Verify inside your agent:
|
|
192
|
-
|
|
193
|
-
```text
|
|
194
|
-
/mcp
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
Run the local MCP server directly:
|
|
198
|
-
|
|
199
|
-
```bash
|
|
200
|
-
npx -y nomoreide
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
Install globally only if you want the `nomoreide` CLI on your PATH:
|
|
204
|
-
|
|
205
|
-
```bash
|
|
206
|
-
npm install -g nomoreide
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
Build from source:
|
|
210
|
-
|
|
211
|
-
```bash
|
|
212
|
-
git clone https://github.com/Rorogogogo/nomoreide.git
|
|
213
|
-
cd nomoreide
|
|
214
|
-
npm install
|
|
215
|
-
npm run build
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
157
|
## Architecture
|
|
221
158
|
|
|
222
159
|
```mermaid
|
package/dist/core/workflows.d.ts
CHANGED
|
@@ -22,20 +22,22 @@ export declare const workflowStepSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodO
|
|
|
22
22
|
title: z.ZodString;
|
|
23
23
|
/**
|
|
24
24
|
* Deterministic op with no inputs — runs straight through the REST API with
|
|
25
|
-
* zero agent tokens. `
|
|
26
|
-
*
|
|
25
|
+
* zero agent tokens. `assert-pr-branch` blocks on default branches before PR
|
|
26
|
+
* workflows can commit; `commit` stages everything and commits with a
|
|
27
|
+
* generated message (no diff reading, no quality analysis); `push` pushes
|
|
28
|
+
* the branch.
|
|
27
29
|
*/
|
|
28
|
-
op: z.ZodEnum<["push", "commit"]>;
|
|
30
|
+
op: z.ZodEnum<["push", "commit", "assert-pr-branch"]>;
|
|
29
31
|
}, "strip", z.ZodTypeAny, {
|
|
30
32
|
kind: "action";
|
|
31
33
|
id: string;
|
|
32
34
|
title: string;
|
|
33
|
-
op: "push" | "commit";
|
|
35
|
+
op: "push" | "commit" | "assert-pr-branch";
|
|
34
36
|
}, {
|
|
35
37
|
kind: "action";
|
|
36
38
|
id: string;
|
|
37
39
|
title: string;
|
|
38
|
-
op: "push" | "commit";
|
|
40
|
+
op: "push" | "commit" | "assert-pr-branch";
|
|
39
41
|
}>, z.ZodObject<{
|
|
40
42
|
kind: z.ZodLiteral<"agent">;
|
|
41
43
|
id: z.ZodString;
|
|
@@ -118,20 +120,22 @@ export declare const workflowSchema: z.ZodObject<{
|
|
|
118
120
|
title: z.ZodString;
|
|
119
121
|
/**
|
|
120
122
|
* Deterministic op with no inputs — runs straight through the REST API with
|
|
121
|
-
* zero agent tokens. `
|
|
122
|
-
*
|
|
123
|
+
* zero agent tokens. `assert-pr-branch` blocks on default branches before PR
|
|
124
|
+
* workflows can commit; `commit` stages everything and commits with a
|
|
125
|
+
* generated message (no diff reading, no quality analysis); `push` pushes
|
|
126
|
+
* the branch.
|
|
123
127
|
*/
|
|
124
|
-
op: z.ZodEnum<["push", "commit"]>;
|
|
128
|
+
op: z.ZodEnum<["push", "commit", "assert-pr-branch"]>;
|
|
125
129
|
}, "strip", z.ZodTypeAny, {
|
|
126
130
|
kind: "action";
|
|
127
131
|
id: string;
|
|
128
132
|
title: string;
|
|
129
|
-
op: "push" | "commit";
|
|
133
|
+
op: "push" | "commit" | "assert-pr-branch";
|
|
130
134
|
}, {
|
|
131
135
|
kind: "action";
|
|
132
136
|
id: string;
|
|
133
137
|
title: string;
|
|
134
|
-
op: "push" | "commit";
|
|
138
|
+
op: "push" | "commit" | "assert-pr-branch";
|
|
135
139
|
}>, z.ZodObject<{
|
|
136
140
|
kind: z.ZodLiteral<"agent">;
|
|
137
141
|
id: z.ZodString;
|
|
@@ -209,7 +213,7 @@ export declare const workflowSchema: z.ZodObject<{
|
|
|
209
213
|
kind: "action";
|
|
210
214
|
id: string;
|
|
211
215
|
title: string;
|
|
212
|
-
op: "push" | "commit";
|
|
216
|
+
op: "push" | "commit" | "assert-pr-branch";
|
|
213
217
|
} | {
|
|
214
218
|
kind: "agent";
|
|
215
219
|
id: string;
|
|
@@ -237,7 +241,7 @@ export declare const workflowSchema: z.ZodObject<{
|
|
|
237
241
|
kind: "action";
|
|
238
242
|
id: string;
|
|
239
243
|
title: string;
|
|
240
|
-
op: "push" | "commit";
|
|
244
|
+
op: "push" | "commit" | "assert-pr-branch";
|
|
241
245
|
} | {
|
|
242
246
|
kind: "agent";
|
|
243
247
|
id: string;
|
package/dist/core/workflows.js
CHANGED
|
@@ -29,10 +29,12 @@ export const workflowStepSchema = z.discriminatedUnion("kind", [
|
|
|
29
29
|
title: z.string().min(1),
|
|
30
30
|
/**
|
|
31
31
|
* Deterministic op with no inputs — runs straight through the REST API with
|
|
32
|
-
* zero agent tokens. `
|
|
33
|
-
*
|
|
32
|
+
* zero agent tokens. `assert-pr-branch` blocks on default branches before PR
|
|
33
|
+
* workflows can commit; `commit` stages everything and commits with a
|
|
34
|
+
* generated message (no diff reading, no quality analysis); `push` pushes
|
|
35
|
+
* the branch.
|
|
34
36
|
*/
|
|
35
|
-
op: z.enum(["push", "commit"]),
|
|
37
|
+
op: z.enum(["push", "commit", "assert-pr-branch"]),
|
|
36
38
|
}),
|
|
37
39
|
z.object({
|
|
38
40
|
kind: z.literal("agent"),
|
|
@@ -72,17 +74,26 @@ const COMMIT_GATE = {
|
|
|
72
74
|
message: "Stage the current changes and create one AI-written commit?",
|
|
73
75
|
};
|
|
74
76
|
/**
|
|
75
|
-
* One lightweight AI pass that
|
|
76
|
-
*
|
|
77
|
-
* skill, but a single pass (no review report, no splitting into many commits).
|
|
78
|
-
* Shared by the commit-bearing templates.
|
|
77
|
+
* One lightweight AI pass that prepares a real commit message before the human
|
|
78
|
+
* gate. The deterministic commit action then uses the approved message directly.
|
|
79
79
|
*/
|
|
80
|
-
const
|
|
80
|
+
const COMMIT_MESSAGE_STEP = {
|
|
81
81
|
kind: "agent",
|
|
82
|
+
id: "commit-message",
|
|
83
|
+
title: "Generate commit message",
|
|
84
|
+
prompt: "Stage my changes with `nomoreide_git_stage` (skip anything that looks like a secret, e.g. `.env`), inspect the staged diff once with `nomoreide_git_staged_diff`, then write one conventional-commit message — a `<type>: concise title` line (feat/fix/refactor/chore/docs/test) plus a few short bullets of what changed. Do NOT commit. Reply with ONLY the commit message you recommend.",
|
|
85
|
+
};
|
|
86
|
+
const COMMIT_ACTION_STEP = {
|
|
87
|
+
kind: "action",
|
|
82
88
|
id: "commit",
|
|
83
|
-
title: "Commit
|
|
84
|
-
|
|
85
|
-
|
|
89
|
+
title: "Commit with approved message",
|
|
90
|
+
op: "commit",
|
|
91
|
+
};
|
|
92
|
+
const ASSERT_PR_BRANCH_STEP = {
|
|
93
|
+
kind: "action",
|
|
94
|
+
id: "assert-pr-branch",
|
|
95
|
+
title: "Check PR branch",
|
|
96
|
+
op: "assert-pr-branch",
|
|
86
97
|
};
|
|
87
98
|
/**
|
|
88
99
|
* The Phase-1 starter set. These are plain data (not hardcoded UI), so the same
|
|
@@ -95,8 +106,9 @@ export const BUILTIN_WORKFLOWS = [
|
|
|
95
106
|
description: "Pause for approval, make one AI-written commit, then pause again before pushing.",
|
|
96
107
|
builtin: true,
|
|
97
108
|
steps: [
|
|
109
|
+
COMMIT_MESSAGE_STEP,
|
|
98
110
|
{ ...COMMIT_GATE },
|
|
99
|
-
|
|
111
|
+
COMMIT_ACTION_STEP,
|
|
100
112
|
{ kind: "gate", id: "gate-push", title: "Approve push", message: "Push to the remote?" },
|
|
101
113
|
{ kind: "action", id: "push", title: "Push", op: "push" },
|
|
102
114
|
],
|
|
@@ -107,8 +119,10 @@ export const BUILTIN_WORKFLOWS = [
|
|
|
107
119
|
description: "Approve the AI commit, push, then use quick AI turns to open and squash-merge the PR.",
|
|
108
120
|
builtin: true,
|
|
109
121
|
steps: [
|
|
122
|
+
ASSERT_PR_BRANCH_STEP,
|
|
123
|
+
COMMIT_MESSAGE_STEP,
|
|
110
124
|
{ ...COMMIT_GATE },
|
|
111
|
-
|
|
125
|
+
COMMIT_ACTION_STEP,
|
|
112
126
|
{ kind: "gate", id: "gate-push", title: "Approve push", message: "Push and open a PR?" },
|
|
113
127
|
{ kind: "action", id: "push", title: "Push", op: "push" },
|
|
114
128
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/core/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7C,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACjD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC7D,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/core/workflows.ts"],"names":[],"mappings":"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"}
|