nomoreide 0.1.71 → 0.1.72

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 (30) hide show
  1. package/dist/core/agent-profiles/index.d.ts +4 -0
  2. package/dist/core/agent-profiles/index.js +4 -0
  3. package/dist/core/agent-profiles/index.js.map +1 -1
  4. package/dist/core/agent-profiles/registry-auth.d.ts +25 -0
  5. package/dist/core/agent-profiles/registry-auth.js +78 -0
  6. package/dist/core/agent-profiles/registry-auth.js.map +1 -0
  7. package/dist/core/agent-profiles/registry-client.d.ts +65 -0
  8. package/dist/core/agent-profiles/registry-client.js +97 -0
  9. package/dist/core/agent-profiles/registry-client.js.map +1 -0
  10. package/dist/core/agent-profiles/registry-config.d.ts +48 -0
  11. package/dist/core/agent-profiles/registry-config.js +164 -0
  12. package/dist/core/agent-profiles/registry-config.js.map +1 -0
  13. package/dist/core/agent-profiles/registry-transfer.d.ts +42 -0
  14. package/dist/core/agent-profiles/registry-transfer.js +102 -0
  15. package/dist/core/agent-profiles/registry-transfer.js.map +1 -0
  16. package/dist/mcp/tools/agent-registry.d.ts +9 -0
  17. package/dist/mcp/tools/agent-registry.js +81 -0
  18. package/dist/mcp/tools/agent-registry.js.map +1 -0
  19. package/dist/mcp/tools/index.d.ts +1 -1
  20. package/dist/mcp/tools/index.js +3 -0
  21. package/dist/mcp/tools/index.js.map +1 -1
  22. package/dist/web/client/assets/{code-editor-B0j6kcLb.js → code-editor-fZ2dpXfw.js} +1 -1
  23. package/dist/web/client/assets/{index-DAiSqTLR.js → index-CraqLFuO.js} +116 -116
  24. package/dist/web/client/index.html +1 -1
  25. package/dist/web/routes/agent-registry-routes.d.ts +2 -0
  26. package/dist/web/routes/agent-registry-routes.js +295 -0
  27. package/dist/web/routes/agent-registry-routes.js.map +1 -0
  28. package/dist/web/routes/index.js +4 -0
  29. package/dist/web/routes/index.js.map +1 -1
  30. package/package.json +1 -1
@@ -18,7 +18,7 @@
18
18
  }
19
19
  })();
20
20
  </script>
21
- <script type="module" crossorigin src="/assets/index-DAiSqTLR.js"></script>
21
+ <script type="module" crossorigin src="/assets/index-CraqLFuO.js"></script>
22
22
  <link rel="stylesheet" crossorigin href="/assets/index-n7aEcfkd.css">
23
23
  </head>
24
24
  <body>
@@ -0,0 +1,2 @@
1
+ import { type Route } from "./context.js";
2
+ export declare const agentRegistryRoutes: Route[];
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Profile registry endpoints (ROR-63): browser sign-in to the hosted registry
3
+ * (the brainctl platform, kept as-is), plus publish / install-from-registry /
4
+ * register-github flows for agent profiles.
5
+ *
6
+ * Must be registered BEFORE `agentProfileRoutes`: its `/profiles/:name`
7
+ * pattern would otherwise swallow the exact `install-from-registry` and
8
+ * `register-github` paths with a 405.
9
+ *
10
+ * `GET /api/agent-env/auth/status` is read-on-mount — it has a matching
11
+ * handler in `website/src/mock-api.ts`.
12
+ */
13
+ import { randomBytes } from "node:crypto";
14
+ import { z } from "zod";
15
+ import { createRegistryClient, createRegistryTokenManager, installProfileFromRegistry, publishProfileToRegistry, resolveRegistryApiBaseUrl, resolveRegistryApiTarget, resolveRegistryApiToken, resolveRegistryFrontendUrl, } from "../../core/agent-profiles/index.js";
16
+ import { readJson, sendHtml, sendJson } from "../http-utils.js";
17
+ import { errorMessage, patternRoute, route } from "./context.js";
18
+ const publishBodySchema = z.object({
19
+ slug: z.string().min(1),
20
+ title: z.string().min(1),
21
+ summary: z.string().optional(),
22
+ version: z.string().optional(),
23
+ changelog: z.string().optional(),
24
+ visibility: z.enum(["public", "private"]).optional(),
25
+ });
26
+ const installBodySchema = z.object({
27
+ slug: z.string().min(1),
28
+ force: z.boolean().optional(),
29
+ as: z.string().min(1).optional(),
30
+ credentials: z.record(z.string()).optional(),
31
+ });
32
+ const registerGithubBodySchema = z.object({
33
+ repoUrl: z.string().min(1),
34
+ slug: z.string().min(1),
35
+ title: z.string().min(1),
36
+ summary: z.string().optional(),
37
+ refName: z.string().optional(),
38
+ profilePath: z.string().optional(),
39
+ });
40
+ const AUTH_STATE_TTL_MS = 10 * 60 * 1000;
41
+ const OUTCOME_RETENTION_MS = 60 * 1000;
42
+ const tokenManager = createRegistryTokenManager();
43
+ const pendingAuthStates = new Map();
44
+ function newAuthState() {
45
+ const now = Date.now();
46
+ for (const [key, entry] of pendingAuthStates) {
47
+ if (entry.expiresAt < now)
48
+ pendingAuthStates.delete(key);
49
+ }
50
+ const state = randomBytes(16).toString("hex");
51
+ pendingAuthStates.set(state, {
52
+ expiresAt: now + AUTH_STATE_TTL_MS,
53
+ outcome: { status: "pending" },
54
+ });
55
+ return state;
56
+ }
57
+ function validAuthState(state) {
58
+ if (!state)
59
+ return null;
60
+ const entry = pendingAuthStates.get(state);
61
+ if (!entry)
62
+ return null;
63
+ if (entry.expiresAt < Date.now()) {
64
+ pendingAuthStates.delete(state);
65
+ return null;
66
+ }
67
+ return entry;
68
+ }
69
+ function markAuthOutcome(state, outcome) {
70
+ const entry = pendingAuthStates.get(state);
71
+ if (!entry)
72
+ return;
73
+ entry.outcome = outcome;
74
+ if (outcome.status !== "pending")
75
+ entry.expiresAt = Date.now() + OUTCOME_RETENTION_MS;
76
+ }
77
+ /** Upstream registry errors carry "HTTP <code>" — surface 4xx as-is, else 502. */
78
+ function upstreamStatus(message) {
79
+ const code = /HTTP (\d{3})/.exec(message)?.[1];
80
+ return code && /^4\d\d$/.test(code) ? Number(code) : 502;
81
+ }
82
+ function authResultHtml(kind, message) {
83
+ const tone = kind === "ok" ? "#16a34a" : "#dc2626";
84
+ const title = kind === "ok" ? "Signed in" : "Sign-in failed";
85
+ return `<!doctype html><html><head><meta charset="utf-8"><title>${title} — NoMoreIDE</title></head>
86
+ <body style="font-family:system-ui,sans-serif;display:grid;place-items:center;min-height:90vh;margin:0">
87
+ <div style="text-align:center;max-width:28rem;padding:1rem">
88
+ <h1 style="color:${tone};font-size:1.25rem">${title}</h1>
89
+ <p style="color:#555">${message}</p>
90
+ </div></body></html>`;
91
+ }
92
+ export const agentRegistryRoutes = [
93
+ route("GET", "/api/agent-env/auth/status", async ({ response }) => {
94
+ const target = await resolveRegistryApiTarget();
95
+ const apiFrontendUrl = await resolveRegistryFrontendUrl({ apiBaseUrl: target.apiBaseUrl });
96
+ const apiInfo = {
97
+ apiBaseUrl: target.apiBaseUrl,
98
+ apiMode: target.mode,
99
+ apiSource: target.source,
100
+ apiFrontendUrl,
101
+ };
102
+ const resolved = await resolveRegistryApiToken();
103
+ if (!resolved) {
104
+ sendJson(response, { ok: true, signedIn: false, ...apiInfo });
105
+ return;
106
+ }
107
+ try {
108
+ const me = await tokenManager.authenticatedFetch("/me");
109
+ if (!me.ok) {
110
+ sendJson(response, {
111
+ ok: true,
112
+ signedIn: false,
113
+ source: resolved.source,
114
+ error: `HTTP ${me.status}`,
115
+ ...apiInfo,
116
+ });
117
+ return;
118
+ }
119
+ const user = (await me.json());
120
+ sendJson(response, {
121
+ ok: true,
122
+ signedIn: true,
123
+ source: resolved.source,
124
+ user: {
125
+ email: user.email,
126
+ displayName: user.display_name,
127
+ avatarUrl: user.avatar_url ?? undefined,
128
+ },
129
+ ...apiInfo,
130
+ });
131
+ }
132
+ catch (error) {
133
+ sendJson(response, {
134
+ ok: true,
135
+ signedIn: false,
136
+ source: resolved.source,
137
+ error: errorMessage(error),
138
+ ...apiInfo,
139
+ });
140
+ }
141
+ }),
142
+ route("POST", "/api/agent-env/auth/start", async ({ request, response }) => {
143
+ const state = newAuthState();
144
+ const apiBaseUrl = await resolveRegistryApiBaseUrl();
145
+ const frontendBase = await resolveRegistryFrontendUrl({ apiBaseUrl });
146
+ const host = request.headers.host ?? "127.0.0.1:4317";
147
+ const callback = `http://${host}/api/agent-env/auth/finish?state=${encodeURIComponent(state)}`;
148
+ const url = `${frontendBase}/cli-login?state=${encodeURIComponent(state)}&callback=${encodeURIComponent(callback)}`;
149
+ sendJson(response, { ok: true, url, state });
150
+ }),
151
+ // Browser redirect target after platform sign-in; renders HTML, not JSON.
152
+ route("GET", "/api/agent-env/auth/finish", async ({ response, url }) => {
153
+ const state = url.searchParams.get("state");
154
+ const token = url.searchParams.get("token");
155
+ const refreshToken = url.searchParams.get("refresh_token");
156
+ const errorParam = url.searchParams.get("error");
157
+ if (!validAuthState(state)) {
158
+ sendHtml(response, authResultHtml("error", "Invalid or expired sign-in request."), 400);
159
+ return;
160
+ }
161
+ if (errorParam) {
162
+ markAuthOutcome(state, { status: "error", message: errorParam });
163
+ sendHtml(response, authResultHtml("error", errorParam), 400);
164
+ return;
165
+ }
166
+ if (!token?.trim()) {
167
+ const message = "No token returned by the registry.";
168
+ markAuthOutcome(state, { status: "error", message });
169
+ sendHtml(response, authResultHtml("error", message), 400);
170
+ return;
171
+ }
172
+ try {
173
+ await tokenManager.saveTokens({
174
+ accessToken: token.trim(),
175
+ refreshToken: refreshToken?.trim() || undefined,
176
+ });
177
+ const verify = await tokenManager.authenticatedFetch("/me");
178
+ if (!verify.ok) {
179
+ await tokenManager.clear();
180
+ const apiBaseUrl = await resolveRegistryApiBaseUrl();
181
+ const message = verify.status === 401
182
+ ? `Token was rejected by the registry API at ${apiBaseUrl}. The site you signed in through likely targets a different backend.`
183
+ : `Registry API at ${apiBaseUrl} returned HTTP ${verify.status} when verifying the token.`;
184
+ markAuthOutcome(state, { status: "error", message });
185
+ sendHtml(response, authResultHtml("error", message), 401);
186
+ return;
187
+ }
188
+ markAuthOutcome(state, { status: "success" });
189
+ sendHtml(response, authResultHtml("ok", "You are signed in. You can close this tab."));
190
+ }
191
+ catch (error) {
192
+ const message = `Failed to save token: ${errorMessage(error)}`;
193
+ markAuthOutcome(state, { status: "error", message });
194
+ sendHtml(response, authResultHtml("error", message), 500);
195
+ }
196
+ }),
197
+ route("GET", "/api/agent-env/auth/outcome", async ({ response, url }) => {
198
+ const state = url.searchParams.get("state");
199
+ const entry = validAuthState(state);
200
+ if (!entry) {
201
+ sendJson(response, { ok: true, status: "unknown" }, 404);
202
+ return;
203
+ }
204
+ if (entry.outcome.status !== "pending" && state)
205
+ pendingAuthStates.delete(state);
206
+ sendJson(response, {
207
+ ok: true,
208
+ status: entry.outcome.status,
209
+ ...(entry.outcome.status === "error" ? { message: entry.outcome.message } : {}),
210
+ });
211
+ }),
212
+ route("POST", "/api/agent-env/auth/logout", async ({ response }) => {
213
+ await tokenManager.clear();
214
+ sendJson(response, { ok: true });
215
+ }),
216
+ route("POST", "/api/agent-env/profiles/install-from-registry", async ({ request, response }) => {
217
+ const body = installBodySchema.safeParse(await readJson(request));
218
+ if (!body.success) {
219
+ sendJson(response, { ok: false, error: "slug is required." }, 400);
220
+ return;
221
+ }
222
+ try {
223
+ const apiBaseUrl = await resolveRegistryApiBaseUrl();
224
+ const tokenInfo = await resolveRegistryApiToken();
225
+ const result = await installProfileFromRegistry({
226
+ ...body.data,
227
+ apiBaseUrl,
228
+ token: tokenInfo?.token,
229
+ });
230
+ sendJson(response, { ok: true, ...result });
231
+ }
232
+ catch (error) {
233
+ const message = errorMessage(error);
234
+ const status = message.includes("already exists") ? 409 : upstreamStatus(message);
235
+ sendJson(response, { ok: false, error: message }, status);
236
+ }
237
+ }),
238
+ route("POST", "/api/agent-env/profiles/register-github", async ({ request, response }) => {
239
+ const body = registerGithubBodySchema.safeParse(await readJson(request));
240
+ if (!body.success) {
241
+ sendJson(response, { ok: false, error: "repoUrl, slug, and title are required." }, 400);
242
+ return;
243
+ }
244
+ if ((await tokenManager.getAccessToken()) === null) {
245
+ sendJson(response, { ok: false, error: "Sign in to the registry first." }, 401);
246
+ return;
247
+ }
248
+ try {
249
+ const client = createRegistryClient({
250
+ baseUrl: await resolveRegistryApiBaseUrl(),
251
+ fetch: (input, init) => tokenManager.authenticatedFetch(typeof input === "string" ? input : input.toString(), init),
252
+ });
253
+ const result = await client.registerGithubProfile({
254
+ ...body.data,
255
+ manifestJson: { name: body.data.slug },
256
+ });
257
+ sendJson(response, { ok: true, result });
258
+ }
259
+ catch (error) {
260
+ const message = errorMessage(error);
261
+ sendJson(response, { ok: false, error: message }, upstreamStatus(message));
262
+ }
263
+ }),
264
+ patternRoute(/^\/api\/agent-env\/profiles\/([^/]+)\/publish$/, ["name"], async ({ request, response, params, cwd }) => {
265
+ if (request.method !== "POST") {
266
+ sendJson(response, { ok: false, error: "Method not allowed" }, 405);
267
+ return;
268
+ }
269
+ const body = publishBodySchema.safeParse(await readJson(request));
270
+ if (!body.success) {
271
+ sendJson(response, { ok: false, error: "slug and title are required." }, 400);
272
+ return;
273
+ }
274
+ if ((await tokenManager.getAccessToken()) === null) {
275
+ sendJson(response, { ok: false, error: "Sign in to the registry first." }, 401);
276
+ return;
277
+ }
278
+ try {
279
+ const result = await publishProfileToRegistry({
280
+ ...body.data,
281
+ name: decodeURIComponent(params.name),
282
+ cwd,
283
+ apiBaseUrl: await resolveRegistryApiBaseUrl(),
284
+ fetch: (input, init) => tokenManager.authenticatedFetch(typeof input === "string" ? input : input.toString(), init),
285
+ });
286
+ sendJson(response, { ok: true, ...result });
287
+ }
288
+ catch (error) {
289
+ const message = errorMessage(error);
290
+ const status = message.includes("not found") ? 404 : upstreamStatus(message);
291
+ sendJson(response, { ok: false, error: message }, status);
292
+ }
293
+ }),
294
+ ];
295
+ //# sourceMappingURL=agent-registry-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-registry-routes.js","sourceRoot":"","sources":["../../../src/web/routes/agent-registry-routes.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { agentRoutes } from "./agent-routes.js";
3
3
  import { agentChatRoutes } from "./agent-chat-routes.js";
4
4
  import { agentEnvRoutes } from "./agent-env-routes.js";
5
5
  import { agentProfileRoutes } from "./agent-profile-routes.js";
6
+ import { agentRegistryRoutes } from "./agent-registry-routes.js";
6
7
  import { databaseRoutes } from "./database-routes.js";
7
8
  import { errorRoutes } from "./errors-routes.js";
8
9
  import { gitRoutes } from "./git-routes.js";
@@ -28,6 +29,9 @@ export const routes = [
28
29
  ...agentRoutes,
29
30
  ...agentChatRoutes,
30
31
  ...agentEnvRoutes,
32
+ // Registry routes precede profile routes: the `/profiles/:name` pattern
33
+ // would otherwise swallow `install-from-registry` / `register-github`.
34
+ ...agentRegistryRoutes,
31
35
  ...agentProfileRoutes,
32
36
  ...databaseRoutes,
33
37
  ...errorRoutes,
@@ -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,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,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;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAY;IAC7B,GAAG,eAAe;IAClB,GAAG,WAAW;IACd,GAAG,eAAe;IAClB,GAAG,cAAc;IACjB,GAAG,kBAAkB;IACrB,GAAG,cAAc;IACjB,GAAG,WAAW;IACd,GAAG,YAAY;IACf,GAAG,SAAS;IACZ,GAAG,eAAe;IAClB,GAAG,aAAa;IAChB,GAAG,cAAc;IACjB,GAAG,qBAAqB;IACxB,GAAG,aAAa;IAChB,GAAG,aAAa;IAChB,GAAG,cAAc;IACjB,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,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,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;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAY;IAC7B,GAAG,eAAe;IAClB,GAAG,WAAW;IACd,GAAG,eAAe;IAClB,GAAG,cAAc;IACjB,wEAAwE;IACxE,uEAAuE;IACvE,GAAG,mBAAmB;IACtB,GAAG,kBAAkB;IACrB,GAAG,cAAc;IACjB,GAAG,WAAW;IACd,GAAG,YAAY;IACf,GAAG,SAAS;IACZ,GAAG,eAAe;IAClB,GAAG,aAAa;IAChB,GAAG,cAAc;IACjB,GAAG,qBAAqB;IACxB,GAAG,aAAa;IAChB,GAAG,aAAa;IAChB,GAAG,cAAc;IACjB,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.71",
3
+ "version": "0.1.72",
4
4
  "description": "An AI-native terminal workbench for services, Git review, logs, and MCP workflows.",
5
5
  "repository": {
6
6
  "type": "git",