feat(mindspace): add page quota grace write and local delivery guardrails.
Memind CI / Test, build, and release guards (pull_request) Failing after 18s
Memind CI / Test, build, and release guards (pull_request) Failing after 18s
Centralize page HTML quota checks with grace-write semantics across page services and workspace tools, keep localhost MindSpace links clickable in chat display, and expand Page Data/static-page skill plus local dev docs for quota, delivery URLs, and native Aider/OpenHands tooling. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+5
-7
@@ -22,6 +22,7 @@ import { prepareHtmlPageBrandMarkers } from './mindspace-page-tag.mjs';
|
||||
import { purgeWorkspacePageArtifacts, extractAssetIdsFromHtml } from './mindspace-page-purge.mjs';
|
||||
import { ensureWorkspaceHtmlThumbnail, workspaceThumbnailRelativePath } from './mindspace-workspace-thumbnails.mjs';
|
||||
import { upsertMindspaceCoverMeta } from './mindspace-cover-meta.mjs';
|
||||
import { assertPageWriteQuota } from './mindspace-space-quota.mjs';
|
||||
|
||||
const MAX_TITLE_LENGTH = 255;
|
||||
const MAX_SUMMARY_LENGTH = 1000;
|
||||
@@ -393,13 +394,10 @@ export function createPageService(pool, options = {}) {
|
||||
if (!space || space.status !== 'active') {
|
||||
throw pageError('用户空间不可用', 'space_unavailable');
|
||||
}
|
||||
const available =
|
||||
asNumber(space.quota_bytes) - asNumber(space.used_bytes) - asNumber(space.reserved_bytes);
|
||||
if (available < normalized.contentBytes) {
|
||||
throw pageError('剩余空间不足', 'quota_exceeded', {
|
||||
requiredBytes: normalized.contentBytes,
|
||||
availableBytes: Math.max(0, available),
|
||||
});
|
||||
try {
|
||||
assertPageWriteQuota(space, normalized.contentBytes);
|
||||
} catch (error) {
|
||||
throw pageError(error.message, error.code ?? 'quota_exceeded', error.details);
|
||||
}
|
||||
const [categories] = await conn.query(
|
||||
`SELECT id, category_code FROM h5_space_categories
|
||||
|
||||
Reference in New Issue
Block a user