nomoreide 0.1.44 → 0.1.45

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.
@@ -18,8 +18,8 @@
18
18
  }
19
19
  })();
20
20
  </script>
21
- <script type="module" crossorigin src="/assets/index-B-5D3C0G.js"></script>
22
- <link rel="stylesheet" crossorigin href="/assets/index-g1k-tjDx.css">
21
+ <script type="module" crossorigin src="/assets/index-DApri4U3.js"></script>
22
+ <link rel="stylesheet" crossorigin href="/assets/index-D6O1I2RP.css">
23
23
  </head>
24
24
  <body>
25
25
  <div id="root"></div>
@@ -0,0 +1,9 @@
1
+ import { GitHubManager } from "../../core/github-manager.js";
2
+ import type { ConfigStore } from "../../core/config-store.js";
3
+ export interface GitHubContext {
4
+ manager: GitHubManager;
5
+ owner: string;
6
+ repo: string;
7
+ }
8
+ export declare function requireGitHubContext(configStore: ConfigStore, gitCwd: string): Promise<GitHubContext>;
9
+ export declare function optionalGitHubContext(configStore: ConfigStore, gitCwd: string): Promise<GitHubContext | null>;
@@ -0,0 +1,31 @@
1
+ import { GitManager } from "../../core/git-manager.js";
2
+ import { GitHubManager } from "../../core/github-manager.js";
3
+ export async function requireGitHubContext(configStore, gitCwd) {
4
+ const config = await configStore.load();
5
+ const token = configStore.getGithubToken(config);
6
+ if (!token) {
7
+ throw new Error("No GitHub token configured. Add one via POST /api/github/token.");
8
+ }
9
+ const remoteUrl = await new GitManager(gitCwd).remoteUrl("origin");
10
+ if (!remoteUrl) {
11
+ throw new Error("No git remote 'origin' found.");
12
+ }
13
+ const parsed = GitHubManager.parseRemoteUrl(remoteUrl);
14
+ if (!parsed) {
15
+ throw new Error(`Could not parse GitHub remote URL: ${remoteUrl}`);
16
+ }
17
+ return {
18
+ manager: new GitHubManager(token, parsed.owner, parsed.repo),
19
+ owner: parsed.owner,
20
+ repo: parsed.repo,
21
+ };
22
+ }
23
+ export async function optionalGitHubContext(configStore, gitCwd) {
24
+ try {
25
+ return await requireGitHubContext(configStore, gitCwd);
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ //# sourceMappingURL=github-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-context.js","sourceRoot":"","sources":["../../../src/web/routes/github-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAS7D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAwB,EACxB,MAAc;IAEd,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,SAAS,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;QAC5D,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAwB,EACxB,MAAc;IAEd,IAAI,CAAC;QACH,OAAO,MAAM,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type Route } from "./context.js";
2
+ export declare const githubRoutes: Route[];
@@ -0,0 +1,302 @@
1
+ import { selectedGitCwd } from "../dashboard.js";
2
+ import { readForm, readJson, requiredFormValue, sendJson, sendText } from "../http-utils.js";
3
+ import { errorMessage, patternRoute, route } from "./context.js";
4
+ import { requireGitHubContext, optionalGitHubContext } from "./github-context.js";
5
+ const GITHUB_DEVICE_CODE_URL = "https://github.com/login/device/code";
6
+ const GITHUB_ACCESS_TOKEN_URL = "https://github.com/login/oauth/access_token";
7
+ const GITHUB_SCOPES = "repo workflow read:org";
8
+ function getClientId() {
9
+ return process.env.NOMOREIDE_GITHUB_CLIENT_ID?.trim() || undefined;
10
+ }
11
+ export const githubRoutes = [
12
+ // --- Token management ---
13
+ route("GET", "/api/github/token", async ({ response, configStore }) => {
14
+ const config = await configStore.load();
15
+ const token = configStore.getGithubToken(config);
16
+ sendJson(response, {
17
+ ok: true,
18
+ configured: !!token,
19
+ deviceFlowAvailable: !!getClientId(),
20
+ });
21
+ }),
22
+ route("POST", "/api/github/token", async ({ request, response, configStore }) => {
23
+ try {
24
+ const form = await readForm(request);
25
+ const host = form.get("host")?.trim() || "github.com";
26
+ const token = requiredFormValue(form, "token");
27
+ await configStore.setGithubToken(host, token);
28
+ sendJson(response, { ok: true });
29
+ }
30
+ catch (error) {
31
+ sendJson(response, { ok: false, error: errorMessage(error) }, 400);
32
+ }
33
+ }),
34
+ patternRoute(/^\/api\/github\/token\/([^/]+)$/, ["host"], async ({ request, response, configStore, params }) => {
35
+ if (request.method !== "DELETE") {
36
+ sendJson(response, { ok: false, error: "Method not allowed" }, 405);
37
+ return;
38
+ }
39
+ await configStore.removeGithubToken(decodeURIComponent(params.host));
40
+ sendJson(response, { ok: true });
41
+ }),
42
+ // --- OAuth Device Flow ---
43
+ route("POST", "/api/github/oauth/start", async ({ response }) => {
44
+ const clientId = getClientId();
45
+ if (!clientId) {
46
+ sendJson(response, { ok: false, error: "NOMOREIDE_GITHUB_CLIENT_ID is not set." }, 400);
47
+ return;
48
+ }
49
+ try {
50
+ const res = await fetch(GITHUB_DEVICE_CODE_URL, {
51
+ method: "POST",
52
+ headers: { Accept: "application/json", "Content-Type": "application/json" },
53
+ body: JSON.stringify({ client_id: clientId, scope: GITHUB_SCOPES }),
54
+ });
55
+ const data = await res.json();
56
+ if (data.error) {
57
+ sendJson(response, { ok: false, error: data.error_description ?? data.error }, 400);
58
+ return;
59
+ }
60
+ sendJson(response, {
61
+ ok: true,
62
+ device_code: data.device_code,
63
+ user_code: data.user_code,
64
+ verification_uri: data.verification_uri,
65
+ verification_uri_complete: data.verification_uri_complete,
66
+ expires_in: data.expires_in ?? 900,
67
+ interval: data.interval ?? 5,
68
+ });
69
+ }
70
+ catch (error) {
71
+ sendJson(response, { ok: false, error: errorMessage(error) }, 500);
72
+ }
73
+ }),
74
+ route("POST", "/api/github/oauth/poll", async ({ request, response, configStore }) => {
75
+ const clientId = getClientId();
76
+ if (!clientId) {
77
+ sendJson(response, { ok: false, error: "NOMOREIDE_GITHUB_CLIENT_ID is not set." }, 400);
78
+ return;
79
+ }
80
+ try {
81
+ const body = await readJson(request);
82
+ const deviceCode = typeof body.device_code === "string" ? body.device_code : "";
83
+ if (!deviceCode) {
84
+ sendJson(response, { ok: false, error: "device_code is required" }, 400);
85
+ return;
86
+ }
87
+ const res = await fetch(GITHUB_ACCESS_TOKEN_URL, {
88
+ method: "POST",
89
+ headers: { Accept: "application/json", "Content-Type": "application/json" },
90
+ body: JSON.stringify({
91
+ client_id: clientId,
92
+ device_code: deviceCode,
93
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code",
94
+ }),
95
+ });
96
+ const data = await res.json();
97
+ if (data.access_token) {
98
+ await configStore.setGithubToken("github.com", data.access_token);
99
+ sendJson(response, { ok: true, done: true });
100
+ return;
101
+ }
102
+ // authorization_pending and slow_down are expected — not errors
103
+ const pending = data.error === "authorization_pending" || data.error === "slow_down";
104
+ if (pending) {
105
+ sendJson(response, { ok: true, done: false, slowDown: data.error === "slow_down" });
106
+ return;
107
+ }
108
+ sendJson(response, {
109
+ ok: false,
110
+ error: data.error_description ?? data.error ?? "Authorization failed",
111
+ }, 400);
112
+ }
113
+ catch (error) {
114
+ sendJson(response, { ok: false, error: errorMessage(error) }, 500);
115
+ }
116
+ }),
117
+ // --- Pull Requests ---
118
+ route("GET", "/api/github/prs", async ({ response, url, configStore, cwd }) => {
119
+ try {
120
+ const gitCwd = await selectedGitCwd(configStore, cwd);
121
+ const { manager } = await requireGitHubContext(configStore, gitCwd);
122
+ const state = (url.searchParams.get("state") || "open");
123
+ const page = Number(url.searchParams.get("page")) || 1;
124
+ const prs = await manager.listPRs(state, page);
125
+ sendJson(response, { ok: true, prs });
126
+ }
127
+ catch (error) {
128
+ sendJson(response, { ok: false, error: errorMessage(error) }, 400);
129
+ }
130
+ }),
131
+ route("POST", "/api/github/prs", async ({ request, response, configStore, cwd }) => {
132
+ try {
133
+ const gitCwd = await selectedGitCwd(configStore, cwd);
134
+ const { manager } = await requireGitHubContext(configStore, gitCwd);
135
+ const body = await readJson(request);
136
+ const title = typeof body.title === "string" ? body.title.trim() : "";
137
+ const head = typeof body.head === "string" ? body.head.trim() : "";
138
+ const base = typeof body.base === "string" ? body.base.trim() : "";
139
+ if (!title || !head || !base) {
140
+ sendJson(response, { ok: false, error: "title, head, and base are required" }, 400);
141
+ return;
142
+ }
143
+ const pr = await manager.createPR({
144
+ title,
145
+ body: typeof body.body === "string" ? body.body : undefined,
146
+ head,
147
+ base,
148
+ draft: body.draft === true,
149
+ });
150
+ sendJson(response, { ok: true, pr });
151
+ }
152
+ catch (error) {
153
+ sendJson(response, { ok: false, error: errorMessage(error) }, 400);
154
+ }
155
+ }),
156
+ patternRoute(/^\/api\/github\/prs\/(\d+)$/, ["number"], async ({ request, response, configStore, cwd, params }) => {
157
+ if (request.method !== "GET") {
158
+ sendJson(response, { ok: false, error: "Method not allowed" }, 405);
159
+ return;
160
+ }
161
+ try {
162
+ const gitCwd = await selectedGitCwd(configStore, cwd);
163
+ const { manager } = await requireGitHubContext(configStore, gitCwd);
164
+ const pr = await manager.getPR(Number(params.number));
165
+ sendJson(response, { ok: true, pr });
166
+ }
167
+ catch (error) {
168
+ sendJson(response, { ok: false, error: errorMessage(error) }, 400);
169
+ }
170
+ }),
171
+ patternRoute(/^\/api\/github\/prs\/(\d+)\/diff$/, ["number"], async ({ request, response, configStore, cwd, params }) => {
172
+ if (request.method !== "GET") {
173
+ sendJson(response, { ok: false, error: "Method not allowed" }, 405);
174
+ return;
175
+ }
176
+ try {
177
+ const gitCwd = await selectedGitCwd(configStore, cwd);
178
+ const { manager } = await requireGitHubContext(configStore, gitCwd);
179
+ const diff = await manager.getPRDiff(Number(params.number));
180
+ sendText(response, diff);
181
+ }
182
+ catch (error) {
183
+ sendJson(response, { ok: false, error: errorMessage(error) }, 400);
184
+ }
185
+ }),
186
+ // --- Issues ---
187
+ route("GET", "/api/github/issues", async ({ response, url, configStore, cwd }) => {
188
+ try {
189
+ const gitCwd = await selectedGitCwd(configStore, cwd);
190
+ const { manager } = await requireGitHubContext(configStore, gitCwd);
191
+ const state = (url.searchParams.get("state") || "open");
192
+ const page = Number(url.searchParams.get("page")) || 1;
193
+ const issues = await manager.listIssues(state, page);
194
+ sendJson(response, { ok: true, issues });
195
+ }
196
+ catch (error) {
197
+ sendJson(response, { ok: false, error: errorMessage(error) }, 400);
198
+ }
199
+ }),
200
+ route("POST", "/api/github/issues", async ({ request, response, configStore, cwd }) => {
201
+ try {
202
+ const gitCwd = await selectedGitCwd(configStore, cwd);
203
+ const { manager } = await requireGitHubContext(configStore, gitCwd);
204
+ const body = await readJson(request);
205
+ const title = typeof body.title === "string" ? body.title.trim() : "";
206
+ if (!title) {
207
+ sendJson(response, { ok: false, error: "title is required" }, 400);
208
+ return;
209
+ }
210
+ const issue = await manager.createIssue({
211
+ title,
212
+ body: typeof body.body === "string" ? body.body : undefined,
213
+ });
214
+ sendJson(response, { ok: true, issue });
215
+ }
216
+ catch (error) {
217
+ sendJson(response, { ok: false, error: errorMessage(error) }, 400);
218
+ }
219
+ }),
220
+ patternRoute(/^\/api\/github\/issues\/(\d+)$/, ["number"], async ({ request, response, configStore, cwd, params }) => {
221
+ if (request.method !== "GET") {
222
+ sendJson(response, { ok: false, error: "Method not allowed" }, 405);
223
+ return;
224
+ }
225
+ try {
226
+ const gitCwd = await selectedGitCwd(configStore, cwd);
227
+ const { manager } = await requireGitHubContext(configStore, gitCwd);
228
+ const issue = await manager.getIssue(Number(params.number));
229
+ sendJson(response, { ok: true, issue });
230
+ }
231
+ catch (error) {
232
+ sendJson(response, { ok: false, error: errorMessage(error) }, 400);
233
+ }
234
+ }),
235
+ patternRoute(/^\/api\/github\/issues\/(\d+)\/comments$/, ["number"], async ({ request, response, configStore, cwd, params }) => {
236
+ const gitCwd = await selectedGitCwd(configStore, cwd);
237
+ const number = Number(params.number);
238
+ if (request.method === "GET") {
239
+ try {
240
+ const { manager } = await requireGitHubContext(configStore, gitCwd);
241
+ const comments = await manager.listIssueComments(number);
242
+ sendJson(response, { ok: true, comments });
243
+ }
244
+ catch (error) {
245
+ sendJson(response, { ok: false, error: errorMessage(error) }, 400);
246
+ }
247
+ return;
248
+ }
249
+ if (request.method === "POST") {
250
+ try {
251
+ const { manager } = await requireGitHubContext(configStore, gitCwd);
252
+ const body = await readJson(request);
253
+ const text = typeof body.body === "string" ? body.body.trim() : "";
254
+ if (!text) {
255
+ sendJson(response, { ok: false, error: "body is required" }, 400);
256
+ return;
257
+ }
258
+ const comment = await manager.addIssueComment(number, text);
259
+ sendJson(response, { ok: true, comment });
260
+ }
261
+ catch (error) {
262
+ sendJson(response, { ok: false, error: errorMessage(error) }, 400);
263
+ }
264
+ return;
265
+ }
266
+ sendJson(response, { ok: false, error: "Method not allowed" }, 405);
267
+ }),
268
+ // --- CI / Actions ---
269
+ patternRoute(/^\/api\/github\/ci\/([0-9a-f]{4,64})$/, ["sha"], async ({ request, response, configStore, cwd, params }) => {
270
+ if (request.method !== "GET") {
271
+ sendJson(response, { ok: false, error: "Method not allowed" }, 405);
272
+ return;
273
+ }
274
+ try {
275
+ const gitCwd = await selectedGitCwd(configStore, cwd);
276
+ const ctx = await optionalGitHubContext(configStore, gitCwd);
277
+ if (!ctx) {
278
+ sendJson(response, { ok: true, status: { sha: params.sha, state: "unknown", totalCount: 0, runs: [] } });
279
+ return;
280
+ }
281
+ const status = await ctx.manager.getCommitChecks(params.sha);
282
+ sendJson(response, { ok: true, status });
283
+ }
284
+ catch (error) {
285
+ sendJson(response, { ok: false, error: errorMessage(error) }, 400);
286
+ }
287
+ }),
288
+ route("GET", "/api/github/runs", async ({ response, url, configStore, cwd }) => {
289
+ try {
290
+ const gitCwd = await selectedGitCwd(configStore, cwd);
291
+ const { manager } = await requireGitHubContext(configStore, gitCwd);
292
+ const branch = url.searchParams.get("branch") || undefined;
293
+ const page = Number(url.searchParams.get("page")) || 1;
294
+ const runs = await manager.listWorkflowRuns(branch, page);
295
+ sendJson(response, { ok: true, runs });
296
+ }
297
+ catch (error) {
298
+ sendJson(response, { ok: false, error: errorMessage(error) }, 400);
299
+ }
300
+ }),
301
+ ];
302
+ //# sourceMappingURL=github-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-routes.js","sourceRoot":"","sources":["../../../src/web/routes/github-routes.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { agentChatRoutes } from "./agent-chat-routes.js";
4
4
  import { databaseRoutes } from "./database-routes.js";
5
5
  import { errorRoutes } from "./errors-routes.js";
6
6
  import { gitRoutes } from "./git-routes.js";
7
+ import { githubRoutes } from "./github-routes.js";
7
8
  import { logSourceRoutes } from "./log-sources-routes.js";
8
9
  import { metricsRoutes } from "./metrics-routes.js";
9
10
  import { onboardRoutes } from "./onboard-routes.js";
@@ -23,6 +24,7 @@ export const routes = [
23
24
  ...agentChatRoutes,
24
25
  ...databaseRoutes,
25
26
  ...errorRoutes,
27
+ ...githubRoutes,
26
28
  ...gitRoutes,
27
29
  ...logSourceRoutes,
28
30
  ...metricsRoutes,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web/routes/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAY;IAC7B,GAAG,eAAe;IAClB,GAAG,WAAW;IACd,GAAG,eAAe;IAClB,GAAG,cAAc;IACjB,GAAG,WAAW;IACd,GAAG,SAAS;IACZ,GAAG,eAAe;IAClB,GAAG,aAAa;IAChB,GAAG,aAAa;IAChB,GAAG,aAAa;IAChB,GAAG,cAAc;IACjB,GAAG,WAAW;CACf,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web/routes/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAY;IAC7B,GAAG,eAAe;IAClB,GAAG,WAAW;IACd,GAAG,eAAe;IAClB,GAAG,cAAc;IACjB,GAAG,WAAW;IACd,GAAG,YAAY;IACf,GAAG,SAAS;IACZ,GAAG,eAAe;IAClB,GAAG,aAAa;IAChB,GAAG,aAAa;IAChB,GAAG,aAAa;IAChB,GAAG,cAAc;IACjB,GAAG,WAAW;CACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nomoreide",
3
- "version": "0.1.44",
3
+ "version": "0.1.45",
4
4
  "description": "An AI-native terminal workbench for services, Git review, logs, and MCP workflows.",
5
5
  "repository": {
6
6
  "type": "git",