Extract memind_adm admin server, add local dev tooling, and remove image-generation.

Split platform admin and ops APIs into standalone admin-server.mjs with network guards; simplify billing to RMB token pricing, refactor user auth, and add rsync deploy plus local-test scripts and docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Your Name
2026-06-17 16:39:39 -07:00
parent ab0718938e
commit b0f5d6a51c
98 changed files with 5394 additions and 3010 deletions
+8 -27
View File
@@ -41,7 +41,6 @@ import type {
SessionEvent,
SessionListResponse,
UsageRecord,
UsageSummary,
BalanceUpdate,
} from '../types';
@@ -272,15 +271,14 @@ export async function checkAuth(): Promise<AuthStatus> {
if (!response.ok) return { authenticated: false };
const status = (await response.json()) as AuthStatus;
if (status.authenticated) resetUnauthorizedGuard();
if (status.authenticated && status.mode === 'user') {
if (status.authenticated && status.mode === 'user' && !status.capabilities) {
try {
const me = await getMe();
return {
...status,
user: me.user ?? status.user,
capabilities: me.capabilities ?? status.capabilities,
grantedSkills: me.grantedSkills ?? status.grantedSkills,
unrestricted: me.unrestricted ?? status.unrestricted,
capabilities: me.capabilities,
grantedSkills: me.grantedSkills,
user: me.user,
};
} catch {
return status;
@@ -301,14 +299,8 @@ export async function getMe(): Promise<{
return portalFetch('/auth/me');
}
export async function getMyUsageSummary(): Promise<UsageSummary> {
const result = await portalFetch<{ summary: UsageSummary }>('/auth/usage/summary');
return result.summary;
}
export async function getMyUsage(limit = 20): Promise<UsageRecord[]> {
const query = limit ? `?limit=${encodeURIComponent(String(limit))}` : '';
const result = await portalFetch<{ records: UsageRecord[] }>(`/auth/usage${query}`);
export async function getMyUsage(): Promise<UsageRecord[]> {
const result = await portalFetch<{ records: UsageRecord[] }>('/auth/usage');
return result.records ?? [];
}
@@ -1018,19 +1010,8 @@ export async function getAdminDashboardSummary(): Promise<AdminDashboardSummary>
return result.summary;
}
export async function getAdminUsageSummary(userId?: string): Promise<UsageSummary> {
const params = new URLSearchParams();
if (userId) params.set('userId', userId);
const query = params.toString() ? `?${params.toString()}` : '';
const result = await portalFetch<{ summary: UsageSummary }>(`/admin-api/usage/summary${query}`);
return result.summary;
}
export async function listAdminUsage(userId?: string, limit = 20): Promise<UsageRecord[]> {
const params = new URLSearchParams();
if (userId) params.set('userId', userId);
if (limit) params.set('limit', String(limit));
const query = params.toString() ? `?${params.toString()}` : '';
export async function listAdminUsage(userId?: string): Promise<UsageRecord[]> {
const query = userId ? `?userId=${encodeURIComponent(userId)}` : '';
const result = await portalFetch<{ records: UsageRecord[] }>(`/admin-api/usage${query}`);
return result.records ?? [];
}