@multiplayer-app/sandbox 0.0.32 → 0.0.33-beta.2
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/dist/agents/content-generator.agent.d.ts +8 -0
- package/dist/agents/content-generator.agent.d.ts.map +1 -1
- package/dist/agents/content-generator.agent.js +53 -6
- package/dist/agents/content-generator.agent.js.map +1 -1
- package/dist/agents/notebook.agent.d.ts.map +1 -1
- package/dist/agents/notebook.agent.js +2 -1
- package/dist/agents/notebook.agent.js.map +1 -1
- package/dist/agents/shared/build-plan.tools.d.ts.map +1 -1
- package/dist/agents/shared/build-plan.tools.js +4 -4
- package/dist/agents/shared/build-plan.tools.js.map +1 -1
- package/dist/agents/shared/content-generator-system-prompt.d.ts +3 -2
- package/dist/agents/shared/content-generator-system-prompt.d.ts.map +1 -1
- package/dist/agents/shared/content-generator-system-prompt.js +41 -24
- package/dist/agents/shared/content-generator-system-prompt.js.map +1 -1
- package/dist/agents/shared/publish-session-artifacts.tool.d.ts +5 -0
- package/dist/agents/shared/publish-session-artifacts.tool.d.ts.map +1 -1
- package/dist/agents/shared/publish-session-artifacts.tool.js +154 -15
- package/dist/agents/shared/publish-session-artifacts.tool.js.map +1 -1
- package/dist/agents/shared/session-quality-report.tool.js +1 -1
- package/dist/agents/shared/session-quality-report.tool.js.map +1 -1
- package/dist/agents/shared/update-session-artifacts.tool.d.ts +5 -0
- package/dist/agents/shared/update-session-artifacts.tool.d.ts.map +1 -1
- package/dist/agents/shared/update-session-artifacts.tool.js +136 -26
- package/dist/agents/shared/update-session-artifacts.tool.js.map +1 -1
- package/dist/agents/shared/validate-artifact-content.tools.d.ts +4 -0
- package/dist/agents/shared/validate-artifact-content.tools.d.ts.map +1 -1
- package/dist/agents/shared/validate-artifact-content.tools.js +24 -1
- package/dist/agents/shared/validate-artifact-content.tools.js.map +1 -1
- package/dist/agents/skills/designer.skill.d.ts.map +1 -1
- package/dist/agents/skills/designer.skill.js +75 -113
- package/dist/agents/skills/designer.skill.js.map +1 -1
- package/dist/agents/skills/skill-injection.d.ts.map +1 -1
- package/dist/agents/skills/skill-injection.js +9 -3
- package/dist/agents/skills/skill-injection.js.map +1 -1
- package/dist/context.d.ts +4 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js.map +1 -1
- package/dist/create-builder-api.d.ts +6 -0
- package/dist/create-builder-api.d.ts.map +1 -1
- package/dist/create-builder-api.js +2 -0
- package/dist/create-builder-api.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/notebooks/notebook-storage-paths.d.ts +8 -0
- package/dist/lib/notebooks/notebook-storage-paths.d.ts.map +1 -0
- package/dist/lib/notebooks/notebook-storage-paths.js +22 -0
- package/dist/lib/notebooks/notebook-storage-paths.js.map +1 -0
- package/dist/lib/notebooks/notebook-yjs-content.d.ts +6 -0
- package/dist/lib/notebooks/notebook-yjs-content.d.ts.map +1 -0
- package/dist/lib/notebooks/notebook-yjs-content.js +42 -0
- package/dist/lib/notebooks/notebook-yjs-content.js.map +1 -0
- package/dist/lib/object-storage/keys.d.ts +1 -0
- package/dist/lib/object-storage/keys.d.ts.map +1 -1
- package/dist/lib/object-storage/keys.js +5 -0
- package/dist/lib/object-storage/keys.js.map +1 -1
- package/dist/lib/object-storage/named-snapshot-paths.d.ts +9 -0
- package/dist/lib/object-storage/named-snapshot-paths.d.ts.map +1 -0
- package/dist/lib/object-storage/named-snapshot-paths.js +39 -0
- package/dist/lib/object-storage/named-snapshot-paths.js.map +1 -0
- package/dist/lib/session-artifacts/hashline-diff-guide.d.ts +1 -1
- package/dist/lib/session-artifacts/hashline-diff-guide.d.ts.map +1 -1
- package/dist/lib/session-artifacts/hashline-diff-guide.js +9 -5
- package/dist/lib/session-artifacts/hashline-diff-guide.js.map +1 -1
- package/dist/lib/session-artifacts/parse-hashline-diff.d.ts +13 -0
- package/dist/lib/session-artifacts/parse-hashline-diff.d.ts.map +1 -1
- package/dist/lib/session-artifacts/parse-hashline-diff.js +72 -0
- package/dist/lib/session-artifacts/parse-hashline-diff.js.map +1 -1
- package/dist/lib/session-pages/artifact-quality-audit.d.ts.map +1 -1
- package/dist/lib/session-pages/artifact-quality-audit.js +19 -14
- package/dist/lib/session-pages/artifact-quality-audit.js.map +1 -1
- package/dist/lib/session-pages/artifact-storage-paths.d.ts +1 -0
- package/dist/lib/session-pages/artifact-storage-paths.d.ts.map +1 -1
- package/dist/lib/session-pages/artifact-storage-paths.js +9 -5
- package/dist/lib/session-pages/artifact-storage-paths.js.map +1 -1
- package/dist/lib/session-pages/html-artifact-template.d.ts +16 -0
- package/dist/lib/session-pages/html-artifact-template.d.ts.map +1 -1
- package/dist/lib/session-pages/html-artifact-template.js +166 -10
- package/dist/lib/session-pages/html-artifact-template.js.map +1 -1
- package/dist/lib/session-pages/index.d.ts +4 -0
- package/dist/lib/session-pages/index.d.ts.map +1 -1
- package/dist/lib/session-pages/index.js +11 -1
- package/dist/lib/session-pages/index.js.map +1 -1
- package/dist/lib/session-pages/write-session-artifacts.d.ts +1 -0
- package/dist/lib/session-pages/write-session-artifacts.d.ts.map +1 -1
- package/dist/lib/session-pages/write-session-artifacts.js +4 -1
- package/dist/lib/session-pages/write-session-artifacts.js.map +1 -1
- package/dist/lib/session-plans/build-plan.d.ts +13 -3
- package/dist/lib/session-plans/build-plan.d.ts.map +1 -1
- package/dist/lib/session-plans/build-plan.js +37 -6
- package/dist/lib/session-plans/build-plan.js.map +1 -1
- package/dist/lib/yjs-pending/flush-worker.d.ts +1 -1
- package/dist/lib/yjs-pending/flush-worker.d.ts.map +1 -1
- package/dist/lib/yjs-pending/flush-worker.js +3 -33
- package/dist/lib/yjs-pending/flush-worker.js.map +1 -1
- package/dist/lib/yjs-pending/snapshot-retention.d.ts +6 -0
- package/dist/lib/yjs-pending/snapshot-retention.d.ts.map +1 -0
- package/dist/lib/yjs-pending/snapshot-retention.js +33 -0
- package/dist/lib/yjs-pending/snapshot-retention.js.map +1 -0
- package/dist/lib/yjs-pending/yjs-persistence.d.ts +1 -0
- package/dist/lib/yjs-pending/yjs-persistence.d.ts.map +1 -1
- package/dist/lib/yjs-pending/yjs-persistence.js +36 -0
- package/dist/lib/yjs-pending/yjs-persistence.js.map +1 -1
- package/dist/realtime/session-artifact-yjs-store.d.ts +21 -0
- package/dist/realtime/session-artifact-yjs-store.d.ts.map +1 -1
- package/dist/realtime/session-artifact-yjs-store.js +84 -0
- package/dist/realtime/session-artifact-yjs-store.js.map +1 -1
- package/dist/routes/notebooks.d.ts.map +1 -1
- package/dist/routes/notebooks.js +2 -0
- package/dist/routes/notebooks.js.map +1 -1
- package/dist/routes/schemas.d.ts +2 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,30 +1,151 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isHtmlFragment = isHtmlFragment;
|
|
4
|
+
exports.ensureWebFontHeadExtras = ensureWebFontHeadExtras;
|
|
4
5
|
exports.wrapHtmlFragment = wrapHtmlFragment;
|
|
6
|
+
exports.stripEmojiIcons = stripEmojiIcons;
|
|
7
|
+
exports.stripTemplateCopyPhrases = stripTemplateCopyPhrases;
|
|
5
8
|
exports.prepareHtmlArtifactContent = prepareHtmlArtifactContent;
|
|
6
|
-
const
|
|
9
|
+
const TAILWIND_CDN_URL = 'https://cdn.tailwindcss.com?plugins=forms,typography';
|
|
7
10
|
const FULL_HTML_DOCUMENT_PATTERN = /<!DOCTYPE\s+html|<html[\s>]/i;
|
|
11
|
+
/** Fallback pairing when the model forgot fonts — never Inter. */
|
|
12
|
+
const DEFAULT_FONT_FAMILIES = ['Manrope', 'Source Sans 3'];
|
|
13
|
+
const GENERIC_FONT_TOKENS = new Set([
|
|
14
|
+
'serif',
|
|
15
|
+
'sans-serif',
|
|
16
|
+
'monospace',
|
|
17
|
+
'cursive',
|
|
18
|
+
'fantasy',
|
|
19
|
+
'system-ui',
|
|
20
|
+
'ui-sans-serif',
|
|
21
|
+
'ui-serif',
|
|
22
|
+
'ui-monospace',
|
|
23
|
+
'ui-rounded',
|
|
24
|
+
'emoji',
|
|
25
|
+
'math',
|
|
26
|
+
'fangsong',
|
|
27
|
+
'inherit',
|
|
28
|
+
'initial',
|
|
29
|
+
'unset',
|
|
30
|
+
'revert',
|
|
31
|
+
'arial',
|
|
32
|
+
'helvetica',
|
|
33
|
+
'times',
|
|
34
|
+
'georgia',
|
|
35
|
+
'verdana',
|
|
36
|
+
'tahoma',
|
|
37
|
+
]);
|
|
38
|
+
const OWN_MAIN_PATTERN = /<main[\s>]/i;
|
|
8
39
|
function isHtmlFragment(content) {
|
|
9
40
|
return !FULL_HTML_DOCUMENT_PATTERN.test(content.trim());
|
|
10
41
|
}
|
|
42
|
+
/** Derive a document title from the fragment's first heading — a missing
|
|
43
|
+
* `title` field is deterministically fixable, never worth a rejection loop. */
|
|
44
|
+
function deriveTitle(fragment) {
|
|
45
|
+
var _a;
|
|
46
|
+
const heading = (_a = fragment.match(/<h1[^>]*>([\s\S]*?)<\/h1>/i)) === null || _a === void 0 ? void 0 : _a[1];
|
|
47
|
+
if (!heading)
|
|
48
|
+
return undefined;
|
|
49
|
+
const text = heading.replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
|
|
50
|
+
return text ? text.slice(0, 80) : undefined;
|
|
51
|
+
}
|
|
52
|
+
function extractNamedFontFamilies(html) {
|
|
53
|
+
const families = [];
|
|
54
|
+
for (const match of html.matchAll(/font-family\s*:\s*([^;}{]+)/gi)) {
|
|
55
|
+
for (const part of match[1].split(',')) {
|
|
56
|
+
const name = part.replace(/["']/g, '').trim();
|
|
57
|
+
if (!name || GENERIC_FONT_TOKENS.has(name.toLowerCase()))
|
|
58
|
+
continue;
|
|
59
|
+
if (/^inter$/i.test(name))
|
|
60
|
+
continue;
|
|
61
|
+
if (!families.some((family) => family.toLowerCase() === name.toLowerCase())) {
|
|
62
|
+
families.push(name);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return families;
|
|
67
|
+
}
|
|
68
|
+
function hasWebFontLink(html) {
|
|
69
|
+
return /fonts\.googleapis\.com|fonts\.gstatic\.com|fonts\.bunny\.net/i.test(html);
|
|
70
|
+
}
|
|
71
|
+
function googleFontsStylesheetLink(families) {
|
|
72
|
+
const params = families
|
|
73
|
+
.slice(0, 3)
|
|
74
|
+
.map((family) => `family=${encodeURIComponent(family).replace(/%20/g, '+')}:wght@400;600;700;800`)
|
|
75
|
+
.join('&');
|
|
76
|
+
return `<link href="https://fonts.googleapis.com/css2?${params}&display=swap" rel="stylesheet">`;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Repair missing webfont loading. Models often set font-family without the
|
|
80
|
+
* matching <link> (or forget both) — rejecting that caused endless revise loops.
|
|
81
|
+
* Prefer families already named in CSS; otherwise a non-Inter default pairing.
|
|
82
|
+
*/
|
|
83
|
+
function ensureWebFontHeadExtras(html) {
|
|
84
|
+
if (hasWebFontLink(html)) {
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
const named = extractNamedFontFamilies(html);
|
|
88
|
+
const families = named.length > 0 ? named : [...DEFAULT_FONT_FAMILIES];
|
|
89
|
+
const extras = [googleFontsStylesheetLink(families)];
|
|
90
|
+
if (named.length === 0 && !/font-family\s*:/i.test(html)) {
|
|
91
|
+
extras.push(`<style>body { font-family: '${DEFAULT_FONT_FAMILIES[0]}', '${DEFAULT_FONT_FAMILIES[1]}', sans-serif; }</style>`);
|
|
92
|
+
}
|
|
93
|
+
return extras;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Server-side completion: deterministically repair/complete everything
|
|
97
|
+
* rule-shaped so a first-pass model output plus this step equals a finished
|
|
98
|
+
* file — repair beats reject wherever repair is unambiguous.
|
|
99
|
+
*/
|
|
100
|
+
function completeFragment(fragment) {
|
|
101
|
+
var _a, _b, _c, _d;
|
|
102
|
+
let body = fragment.trim();
|
|
103
|
+
const headExtras = [];
|
|
104
|
+
// Auto-close dangling <style>/<script> — unclosed tags swallow the rest of
|
|
105
|
+
// the document and were a repeat model failure.
|
|
106
|
+
const openStyles = ((_a = body.match(/<style[^>]*>/gi)) !== null && _a !== void 0 ? _a : []).length;
|
|
107
|
+
const closeStyles = ((_b = body.match(/<\/style>/gi)) !== null && _b !== void 0 ? _b : []).length;
|
|
108
|
+
if (openStyles > closeStyles)
|
|
109
|
+
body += '\n</style>'.repeat(openStyles - closeStyles);
|
|
110
|
+
const openScripts = ((_c = body.match(/<script[^>]*>/gi)) !== null && _c !== void 0 ? _c : []).length;
|
|
111
|
+
const closeScripts = ((_d = body.match(/<\/script>/gi)) !== null && _d !== void 0 ? _d : []).length;
|
|
112
|
+
if (openScripts > closeScripts)
|
|
113
|
+
body += '\n</script>'.repeat(openScripts - closeScripts);
|
|
114
|
+
headExtras.push(...ensureWebFontHeadExtras(body));
|
|
115
|
+
// Page-level background matching the page's own scheme, so gutters and
|
|
116
|
+
// overscroll never flash the wrong color. Dark when the first colored
|
|
117
|
+
// surface is a dark shade; model overrides win (body{background} in style).
|
|
118
|
+
const stylesBodyBg = /body\s*{[^}]*background/i.test(body);
|
|
119
|
+
if (!stylesBodyBg) {
|
|
120
|
+
const firstBg = body.match(/class="[^"]*\bbg-(?:slate|gray|zinc|neutral|stone)-(\d{3})\b/);
|
|
121
|
+
const dark = firstBg ? Number.parseInt(firstBg[1], 10) >= 800 : false;
|
|
122
|
+
headExtras.push(dark
|
|
123
|
+
? '<style>body { background: #020617; } :root { color-scheme: dark; }</style>'
|
|
124
|
+
: '<style>body { background: #f8fafc; }</style>');
|
|
125
|
+
}
|
|
126
|
+
return { body, headExtras };
|
|
127
|
+
}
|
|
11
128
|
function wrapHtmlFragment(fragment, options = {}) {
|
|
12
129
|
var _a, _b;
|
|
13
130
|
const lang = (_a = options.lang) !== null && _a !== void 0 ? _a : 'en';
|
|
14
|
-
const
|
|
15
|
-
const
|
|
131
|
+
const { body: completed, headExtras } = completeFragment(fragment);
|
|
132
|
+
const title = ((_b = options.title) === null || _b === void 0 ? void 0 : _b.trim()) || deriveTitle(completed) || 'Page';
|
|
133
|
+
// Bare <main> only — a constrained container here would clip full-bleed
|
|
134
|
+
// section backgrounds to the column and leave body-colored gutters.
|
|
135
|
+
const bodyContent = OWN_MAIN_PATTERN.test(completed) ? completed : ` <main>\n${completed}\n </main>`;
|
|
136
|
+
const extras = headExtras.length > 0 ? `\n ${headExtras.join('\n ')}` : '';
|
|
16
137
|
return `<!DOCTYPE html>
|
|
17
138
|
<html lang="${lang}">
|
|
18
139
|
<head>
|
|
19
140
|
<meta charset="utf-8">
|
|
20
141
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
21
|
-
<
|
|
142
|
+
<meta name="color-scheme" content="light">
|
|
143
|
+
<script src="${TAILWIND_CDN_URL}"></script>
|
|
144
|
+
<script>tailwind.config = { darkMode: 'class' }</script>${extras}
|
|
22
145
|
<title>${escapeHtml(title)}</title>
|
|
23
146
|
</head>
|
|
24
147
|
<body>
|
|
25
|
-
|
|
26
|
-
${body}
|
|
27
|
-
</main>
|
|
148
|
+
${bodyContent}
|
|
28
149
|
</body>
|
|
29
150
|
</html>
|
|
30
151
|
`;
|
|
@@ -36,11 +157,46 @@ function escapeHtml(value) {
|
|
|
36
157
|
.replace(/>/g, '>')
|
|
37
158
|
.replace(/"/g, '"');
|
|
38
159
|
}
|
|
160
|
+
/** Inject webfont <link> (+ body font-family if needed) into a full document. */
|
|
161
|
+
function ensureWebFontsInFullDocument(html) {
|
|
162
|
+
const extras = ensureWebFontHeadExtras(html);
|
|
163
|
+
if (extras.length === 0)
|
|
164
|
+
return html;
|
|
165
|
+
if (/<\/head>/i.test(html)) {
|
|
166
|
+
return html.replace(/<\/head>/i, ` ${extras.join('\n ')}\n</head>`);
|
|
167
|
+
}
|
|
168
|
+
return `${extras.join('\n')}\n${html}`;
|
|
169
|
+
}
|
|
170
|
+
const ALLOWED_SYMBOL_CHARS = new Set(['©', '®', '™', '°', '†', '‡', '§', '¶']);
|
|
171
|
+
/**
|
|
172
|
+
* Strip emoji-as-icons from markup. Models keep inserting 🚀/✨ then looping on
|
|
173
|
+
* the emoji-icons audit — repair beats reject.
|
|
174
|
+
*/
|
|
175
|
+
function stripEmojiIcons(html) {
|
|
176
|
+
return html
|
|
177
|
+
.replace(/\p{Extended_Pictographic}/gu, (char) => (ALLOWED_SYMBOL_CHARS.has(char) ? char : ''))
|
|
178
|
+
.replace(/[ \t]+\n/g, '\n')
|
|
179
|
+
.replace(/\n{3,}/g, '\n\n');
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Neutralize the most common "AI template" phrases that otherwise fail the
|
|
183
|
+
* template-copy audit and trigger revise loops.
|
|
184
|
+
*/
|
|
185
|
+
function stripTemplateCopyPhrases(html) {
|
|
186
|
+
return html
|
|
187
|
+
.replace(/\bWelcome\s+to\s+(?:our|the)\s+/gi, '')
|
|
188
|
+
.replace(/\brevolutionary\b/gi, 'practical')
|
|
189
|
+
.replace(/\bseamless(?:ly)?\b/gi, 'straightforward')
|
|
190
|
+
.replace(/\bcutting-edge\b/gi, 'modern')
|
|
191
|
+
.replace(/\bunleash(?:ing|es|ed)?\b/gi, 'open')
|
|
192
|
+
.replace(/\bempower(?:ing|s|ed)?\b/gi, 'support');
|
|
193
|
+
}
|
|
39
194
|
function prepareHtmlArtifactContent(content, options = {}) {
|
|
40
|
-
const
|
|
195
|
+
const cleaned = stripTemplateCopyPhrases(stripEmojiIcons(content));
|
|
196
|
+
const useFragment = options.fragment === true || (options.fragment !== false && isHtmlFragment(cleaned));
|
|
41
197
|
if (!useFragment) {
|
|
42
|
-
return
|
|
198
|
+
return ensureWebFontsInFullDocument(cleaned);
|
|
43
199
|
}
|
|
44
|
-
return wrapHtmlFragment(
|
|
200
|
+
return wrapHtmlFragment(cleaned, { title: options.title, lang: options.lang });
|
|
45
201
|
}
|
|
46
202
|
//# sourceMappingURL=html-artifact-template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-artifact-template.js","sourceRoot":"","sources":["../../../src/lib/session-pages/html-artifact-template.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"html-artifact-template.js","sourceRoot":"","sources":["../../../src/lib/session-pages/html-artifact-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,10 @@ export { listSessionArtifacts, type SessionArtifactEntry } from './list-session-
|
|
|
3
3
|
export { readSessionArtifacts, sessionArtifactExists, type ReadSessionArtifactResult, } from './read-session-artifacts';
|
|
4
4
|
export { deleteSessionArtifact, type DeleteSessionArtifactResult, } from './delete-session-artifact';
|
|
5
5
|
export { resolveArtifactNotifyUserIds } from './resolve-artifact-notify-user-ids';
|
|
6
|
+
export { auditHtmlArtifact, type QualityAuditResult, type QualityFinding, } from './artifact-quality-audit';
|
|
7
|
+
export { auditSessionHtmlArtifacts, sessionQualityToAdvisoryLines, type SessionQualityIssue, type SessionQualityReport, } from './audit-session-html';
|
|
8
|
+
export { DEFERRED_QUALITY_RULES, isDeferredQualityRule } from './deferred-quality-rules';
|
|
6
9
|
export { deleteAllSessionArtifacts, type DeleteAllSessionArtifactsResult, } from './delete-session-artifacts';
|
|
7
10
|
export { writeSessionArtifacts, type SessionArtifactFile, type WriteSessionArtifactsInput, type WriteSessionArtifactsResult, } from './write-session-artifacts';
|
|
11
|
+
export { prepareHtmlArtifactContent } from './html-artifact-template';
|
|
8
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/session-pages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAC1F,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,yBAAyB,GAC/B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,qBAAqB,EACrB,KAAK,2BAA2B,GACjC,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AACjF,OAAO,EACL,yBAAyB,EACzB,KAAK,+BAA+B,GACrC,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,GACjC,MAAM,2BAA2B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/session-pages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAC1F,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,yBAAyB,GAC/B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,qBAAqB,EACrB,KAAK,2BAA2B,GACjC,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AACjF,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACpB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AACxF,OAAO,EACL,yBAAyB,EACzB,KAAK,+BAA+B,GACrC,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,GACjC,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.writeSessionArtifacts = exports.deleteAllSessionArtifacts = exports.resolveArtifactNotifyUserIds = exports.deleteSessionArtifact = exports.sessionArtifactExists = exports.readSessionArtifacts = exports.listSessionArtifacts = exports.resolveArtifactPath = exports.normalizeArtifactPath = exports.getSessionsRoot = exports.getSessionDir = void 0;
|
|
3
|
+
exports.prepareHtmlArtifactContent = exports.writeSessionArtifacts = exports.deleteAllSessionArtifacts = exports.isDeferredQualityRule = exports.DEFERRED_QUALITY_RULES = exports.sessionQualityToAdvisoryLines = exports.auditSessionHtmlArtifacts = exports.auditHtmlArtifact = exports.resolveArtifactNotifyUserIds = exports.deleteSessionArtifact = exports.sessionArtifactExists = exports.readSessionArtifacts = exports.listSessionArtifacts = exports.resolveArtifactPath = exports.normalizeArtifactPath = exports.getSessionsRoot = exports.getSessionDir = void 0;
|
|
4
4
|
var paths_1 = require("./paths");
|
|
5
5
|
Object.defineProperty(exports, "getSessionDir", { enumerable: true, get: function () { return paths_1.getSessionDir; } });
|
|
6
6
|
Object.defineProperty(exports, "getSessionsRoot", { enumerable: true, get: function () { return paths_1.getSessionsRoot; } });
|
|
@@ -15,8 +15,18 @@ var delete_session_artifact_1 = require("./delete-session-artifact");
|
|
|
15
15
|
Object.defineProperty(exports, "deleteSessionArtifact", { enumerable: true, get: function () { return delete_session_artifact_1.deleteSessionArtifact; } });
|
|
16
16
|
var resolve_artifact_notify_user_ids_1 = require("./resolve-artifact-notify-user-ids");
|
|
17
17
|
Object.defineProperty(exports, "resolveArtifactNotifyUserIds", { enumerable: true, get: function () { return resolve_artifact_notify_user_ids_1.resolveArtifactNotifyUserIds; } });
|
|
18
|
+
var artifact_quality_audit_1 = require("./artifact-quality-audit");
|
|
19
|
+
Object.defineProperty(exports, "auditHtmlArtifact", { enumerable: true, get: function () { return artifact_quality_audit_1.auditHtmlArtifact; } });
|
|
20
|
+
var audit_session_html_1 = require("./audit-session-html");
|
|
21
|
+
Object.defineProperty(exports, "auditSessionHtmlArtifacts", { enumerable: true, get: function () { return audit_session_html_1.auditSessionHtmlArtifacts; } });
|
|
22
|
+
Object.defineProperty(exports, "sessionQualityToAdvisoryLines", { enumerable: true, get: function () { return audit_session_html_1.sessionQualityToAdvisoryLines; } });
|
|
23
|
+
var deferred_quality_rules_1 = require("./deferred-quality-rules");
|
|
24
|
+
Object.defineProperty(exports, "DEFERRED_QUALITY_RULES", { enumerable: true, get: function () { return deferred_quality_rules_1.DEFERRED_QUALITY_RULES; } });
|
|
25
|
+
Object.defineProperty(exports, "isDeferredQualityRule", { enumerable: true, get: function () { return deferred_quality_rules_1.isDeferredQualityRule; } });
|
|
18
26
|
var delete_session_artifacts_1 = require("./delete-session-artifacts");
|
|
19
27
|
Object.defineProperty(exports, "deleteAllSessionArtifacts", { enumerable: true, get: function () { return delete_session_artifacts_1.deleteAllSessionArtifacts; } });
|
|
20
28
|
var write_session_artifacts_1 = require("./write-session-artifacts");
|
|
21
29
|
Object.defineProperty(exports, "writeSessionArtifacts", { enumerable: true, get: function () { return write_session_artifacts_1.writeSessionArtifacts; } });
|
|
30
|
+
var html_artifact_template_1 = require("./html-artifact-template");
|
|
31
|
+
Object.defineProperty(exports, "prepareHtmlArtifactContent", { enumerable: true, get: function () { return html_artifact_template_1.prepareHtmlArtifactContent; } });
|
|
22
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/session-pages/index.ts"],"names":[],"mappings":";;;AAAA,iCAKgB;AAJd,sGAAA,aAAa,OAAA;AACb,wGAAA,eAAe,OAAA;AACf,8GAAA,qBAAqB,OAAA;AACrB,4GAAA,mBAAmB,OAAA;AAErB,mEAA0F;AAAjF,8HAAA,oBAAoB,OAAA;AAC7B,mEAIiC;AAH/B,8HAAA,oBAAoB,OAAA;AACpB,+HAAA,qBAAqB,OAAA;AAGvB,qEAGkC;AAFhC,gIAAA,qBAAqB,OAAA;AAGvB,uFAAiF;AAAxE,gJAAA,4BAA4B,OAAA;AACrC,uEAGmC;AAFjC,qIAAA,yBAAyB,OAAA;AAG3B,qEAKkC;AAJhC,gIAAA,qBAAqB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/session-pages/index.ts"],"names":[],"mappings":";;;AAAA,iCAKgB;AAJd,sGAAA,aAAa,OAAA;AACb,wGAAA,eAAe,OAAA;AACf,8GAAA,qBAAqB,OAAA;AACrB,4GAAA,mBAAmB,OAAA;AAErB,mEAA0F;AAAjF,8HAAA,oBAAoB,OAAA;AAC7B,mEAIiC;AAH/B,8HAAA,oBAAoB,OAAA;AACpB,+HAAA,qBAAqB,OAAA;AAGvB,qEAGkC;AAFhC,gIAAA,qBAAqB,OAAA;AAGvB,uFAAiF;AAAxE,gJAAA,4BAA4B,OAAA;AACrC,mEAIiC;AAH/B,2HAAA,iBAAiB,OAAA;AAInB,2DAK6B;AAJ3B,+HAAA,yBAAyB,OAAA;AACzB,mIAAA,6BAA6B,OAAA;AAI/B,mEAAwF;AAA/E,gIAAA,sBAAsB,OAAA;AAAE,+HAAA,qBAAqB,OAAA;AACtD,uEAGmC;AAFjC,qIAAA,yBAAyB,OAAA;AAG3B,qEAKkC;AAJhC,gIAAA,qBAAqB,OAAA;AAKvB,mEAAqE;AAA5D,oIAAA,0BAA0B,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-session-artifacts.d.ts","sourceRoot":"","sources":["../../../src/lib/session-pages/write-session-artifacts.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,mBAAmB,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,wBAAwB,EAAE,CAAA;CACtC;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,2BAA2B,CAAC,
|
|
1
|
+
{"version":3,"file":"write-session-artifacts.d.ts","sourceRoot":"","sources":["../../../src/lib/session-pages/write-session-artifacts.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,2GAA2G;IAC3G,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,mBAAmB,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,wBAAwB,EAAE,CAAA;CACtC;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,2BAA2B,CAAC,CAsCtC"}
|
|
@@ -21,7 +21,10 @@ async function writeSessionArtifacts(input) {
|
|
|
21
21
|
title: file.title,
|
|
22
22
|
})
|
|
23
23
|
: file.content;
|
|
24
|
-
|
|
24
|
+
// Upsert: create-only conflict is enforced by publishSessionArtifacts
|
|
25
|
+
// (cross-subagent). Self-revision after an audit repair must overwrite —
|
|
26
|
+
// initializeFromContent threw "File already exists" and forced update loops.
|
|
27
|
+
const published = await store.upsertFromContent(input.sessionId, relativePath, content);
|
|
25
28
|
artifacts.push({
|
|
26
29
|
path: published.path,
|
|
27
30
|
bytes: published.bytes,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-session-artifacts.js","sourceRoot":"","sources":["../../../src/lib/session-pages/write-session-artifacts.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"write-session-artifacts.js","sourceRoot":"","sources":["../../../src/lib/session-pages/write-session-artifacts.ts"],"names":[],"mappings":";;AA4BA,sDAwCC;AApED,0FAAsF;AACtF,sEAAoE;AACpE,qEAAqE;AACrE,qEAA+D;AAC/D,mCAA+C;AAwBxC,KAAK,UAAU,qBAAqB,CACzC,KAAiC;;IAEjC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAA;IAC1B,CAAC;IACD,MAAM,KAAK,GAAG,IAAA,uDAA0B,GAAE,CAAA;IAC1C,MAAM,SAAS,GAA+B,EAAE,CAAA;IAEhD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,IAAA,6BAAqB,EAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrD,MAAM,OAAO,GACX,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1C,CAAC,CAAC,IAAA,mDAA0B,EAAC,IAAI,CAAC,OAAO,EAAE;gBACzC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC;YACF,CAAC,CAAC,IAAI,CAAC,OAAO,CAAA;QAClB,sEAAsE;QACtE,yEAAyE;QACzE,6EAA6E;QAC7E,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;QACvF,SAAS,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,KAAK,EAAE,SAAS,CAAC,KAAK;SACvB,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAA,6CAAoB,EAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAC5D,MAAM,WAAW,GACf,MAAA,MAAA,MAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,0CAAE,IAAI,mCACzD,MAAA,QAAQ,CAAC,CAAC,CAAC,0CAAE,IAAI,mCACjB,MAAA,SAAS,CAAC,CAAC,CAAC,0CAAE,IAAI,CAAA;IACpB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAA,yCAAoB,EAAC,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO;QACL,SAAS;KACV,CAAA;AACH,CAAC"}
|
|
@@ -17,8 +17,9 @@ export interface OpenAdvisory {
|
|
|
17
17
|
}
|
|
18
18
|
export interface BuildPlan {
|
|
19
19
|
title: string;
|
|
20
|
-
/** Design contract for the whole session:
|
|
21
|
-
*
|
|
20
|
+
/** Design contract for the whole session: accent hexes, font pairing,
|
|
21
|
+
* layout pack, signature, radius/density, atmosphere, anti-cliché.
|
|
22
|
+
* Injected into every artifact subagent. */
|
|
22
23
|
designBrief?: string;
|
|
23
24
|
createdAt: string;
|
|
24
25
|
updatedAt: string;
|
|
@@ -27,13 +28,22 @@ export interface BuildPlan {
|
|
|
27
28
|
openAdvisories?: OpenAdvisory[];
|
|
28
29
|
}
|
|
29
30
|
export declare const BUILD_PLAN_PATH = "plan.json";
|
|
31
|
+
/**
|
|
32
|
+
* Layout packs the design brief may name. Keep in sync with designer.skill
|
|
33
|
+
* and extractDesignTokens.
|
|
34
|
+
*/
|
|
35
|
+
export declare const LAYOUT_PACKS: readonly ["product", "launch", "editorial", "magazine", "split-hero", "dark-terminal", "bento", "brutalist", "workspace", "story"];
|
|
36
|
+
export type LayoutPack = (typeof LAYOUT_PACKS)[number];
|
|
37
|
+
/** Matches a layout pack token in free-text briefs (longest names first). */
|
|
38
|
+
export declare const LAYOUT_PACK_PATTERN: RegExp;
|
|
30
39
|
/** Last task must be an explicit consistency/polish pass (enforced at create). */
|
|
31
40
|
export declare function isConsistencyPassTask(task: {
|
|
32
41
|
title: string;
|
|
33
42
|
description: string;
|
|
34
43
|
}): boolean;
|
|
35
44
|
/**
|
|
36
|
-
* designBrief must be specific enough to build
|
|
45
|
+
* designBrief must be specific enough to build a DISTINCT product — accent,
|
|
46
|
+
* pack, fonts, atmosphere, signature, radius/density, anti-cliché.
|
|
37
47
|
* Vague briefs produce Inter/indigo template pages.
|
|
38
48
|
*/
|
|
39
49
|
export declare function assertDesignBriefQuality(brief: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-plan.d.ts","sourceRoot":"","sources":["../../../src/lib/session-plans/build-plan.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,CAAA;AAE5E,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,eAAe,CAAA;IACvB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb;
|
|
1
|
+
{"version":3,"file":"build-plan.d.ts","sourceRoot":"","sources":["../../../src/lib/session-plans/build-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BUILD_PLAN_PATH = void 0;
|
|
3
|
+
exports.LAYOUT_PACK_PATTERN = exports.LAYOUT_PACKS = exports.BUILD_PLAN_PATH = void 0;
|
|
4
4
|
exports.isConsistencyPassTask = isConsistencyPassTask;
|
|
5
5
|
exports.assertDesignBriefQuality = assertDesignBriefQuality;
|
|
6
6
|
exports.createBuildPlan = createBuildPlan;
|
|
@@ -12,27 +12,58 @@ exports.applyTaskUpdate = applyTaskUpdate;
|
|
|
12
12
|
exports.nextPendingTask = nextPendingTask;
|
|
13
13
|
exports.planProgress = planProgress;
|
|
14
14
|
exports.BUILD_PLAN_PATH = 'plan.json';
|
|
15
|
+
/**
|
|
16
|
+
* Layout packs the design brief may name. Keep in sync with designer.skill
|
|
17
|
+
* and extractDesignTokens.
|
|
18
|
+
*/
|
|
19
|
+
exports.LAYOUT_PACKS = [
|
|
20
|
+
'product',
|
|
21
|
+
'launch',
|
|
22
|
+
'editorial',
|
|
23
|
+
'magazine',
|
|
24
|
+
'split-hero',
|
|
25
|
+
'dark-terminal',
|
|
26
|
+
'bento',
|
|
27
|
+
'brutalist',
|
|
28
|
+
'workspace',
|
|
29
|
+
'story',
|
|
30
|
+
];
|
|
31
|
+
/** Matches a layout pack token in free-text briefs (longest names first). */
|
|
32
|
+
exports.LAYOUT_PACK_PATTERN = /\b(split-hero|dark-terminal|workspace|brutalist|magazine|editorial|product|launch|bento|story)\b/i;
|
|
33
|
+
const SIGNATURE_PATTERN = /\bsignature\b/i;
|
|
34
|
+
const RADIUS_OR_DENSITY_PATTERN = /\b(sharp|soft|pill|airy|comfortable|dense)\b/i;
|
|
35
|
+
const ANTI_CLICHE_PATTERN = /\b(anti-?clich[eé]|must not|must NOT|avoid|not look like|no indigo|no centered|never Inter)\b/i;
|
|
15
36
|
/** Last task must be an explicit consistency/polish pass (enforced at create). */
|
|
16
37
|
function isConsistencyPassTask(task) {
|
|
17
38
|
return /\b(consistency|polish|qa|quality)\b/i.test(`${task.title} ${task.description}`);
|
|
18
39
|
}
|
|
19
40
|
/**
|
|
20
|
-
* designBrief must be specific enough to build
|
|
41
|
+
* designBrief must be specific enough to build a DISTINCT product — accent,
|
|
42
|
+
* pack, fonts, atmosphere, signature, radius/density, anti-cliché.
|
|
21
43
|
* Vague briefs produce Inter/indigo template pages.
|
|
22
44
|
*/
|
|
23
45
|
function assertDesignBriefQuality(brief) {
|
|
24
46
|
if (!/#[0-9a-fA-F]{3,8}\b/.test(brief)) {
|
|
25
47
|
throw new Error('designBrief must include an exact accent hex (e.g. #0EA5E9). Pick a topic-fit color — avoid default indigo.');
|
|
26
48
|
}
|
|
27
|
-
if (
|
|
28
|
-
throw new Error(
|
|
49
|
+
if (!exports.LAYOUT_PACK_PATTERN.test(brief)) {
|
|
50
|
+
throw new Error(`designBrief must name a layout pack: ${exports.LAYOUT_PACKS.join(' | ')}.`);
|
|
29
51
|
}
|
|
30
52
|
if (!/fonts\.googleapis\.com/i.test(brief) &&
|
|
31
53
|
!/\b(?:fonts?|typeface|typography)\b/i.test(brief)) {
|
|
32
54
|
throw new Error('designBrief must name a Google Font pairing (display + body), e.g. "Manrope + Source Sans 3".');
|
|
33
55
|
}
|
|
34
|
-
if (!/\b(?:atmosphere|wash|mesh|grain|glass|orb|blur|gradient)\b/i.test(brief)) {
|
|
35
|
-
throw new Error('designBrief must include an atmosphere note (e.g. soft accent wash,
|
|
56
|
+
if (!/\b(?:atmosphere|wash|mesh|grain|glass|orb|blur|gradient|grid|noise|ink)\b/i.test(brief)) {
|
|
57
|
+
throw new Error('designBrief must include an atmosphere note (e.g. soft accent wash, hard grid, noise film) so pages are not flat.');
|
|
58
|
+
}
|
|
59
|
+
if (!SIGNATURE_PATTERN.test(brief)) {
|
|
60
|
+
throw new Error('designBrief must name a signature (layout/surface/motion), e.g. "signature: split + hard grid + scroll reveal".');
|
|
61
|
+
}
|
|
62
|
+
if (!RADIUS_OR_DENSITY_PATTERN.test(brief)) {
|
|
63
|
+
throw new Error('designBrief must set radius (sharp|soft|pill) and/or density (airy|comfortable|dense).');
|
|
64
|
+
}
|
|
65
|
+
if (!ANTI_CLICHE_PATTERN.test(brief)) {
|
|
66
|
+
throw new Error('designBrief must include an anti-cliché note (what this must NOT look like), e.g. "no centered blur-orb hero".');
|
|
36
67
|
}
|
|
37
68
|
}
|
|
38
69
|
function createBuildPlan(title, tasks, now, designBrief) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-plan.js","sourceRoot":"","sources":["../../../src/lib/session-plans/build-plan.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"build-plan.js","sourceRoot":"","sources":["../../../src/lib/session-plans/build-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
export { sweepExpiredNamedSnapshotsForPrefix } from './snapshot-retention';
|
|
1
2
|
export declare function runYjsFlushTick(): Promise<void>;
|
|
2
|
-
export declare function sweepExpiredNamedSnapshotsForPrefix(prefix: string): Promise<number>;
|
|
3
3
|
export declare function startYjsFlushWorker(): void;
|
|
4
4
|
export declare function stopYjsFlushWorker(): void;
|
|
5
5
|
//# sourceMappingURL=flush-worker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flush-worker.d.ts","sourceRoot":"","sources":["../../../src/lib/yjs-pending/flush-worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flush-worker.d.ts","sourceRoot":"","sources":["../../../src/lib/yjs-pending/flush-worker.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mCAAmC,EAAE,MAAM,sBAAsB,CAAA;AAI1E,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAYrD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAU1C;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}
|
|
@@ -1,30 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sweepExpiredNamedSnapshotsForPrefix = void 0;
|
|
3
4
|
exports.runYjsFlushTick = runYjsFlushTick;
|
|
4
|
-
exports.sweepExpiredNamedSnapshotsForPrefix = sweepExpiredNamedSnapshotsForPrefix;
|
|
5
5
|
exports.startYjsFlushWorker = startYjsFlushWorker;
|
|
6
6
|
exports.stopYjsFlushWorker = stopYjsFlushWorker;
|
|
7
7
|
const context_1 = require("../../context");
|
|
8
8
|
const logger_1 = require("../../logger");
|
|
9
|
-
const artifact_storage_paths_1 = require("../session-pages/artifact-storage-paths");
|
|
10
|
-
const s3_object_store_1 = require("../object-storage/s3-object-store");
|
|
11
9
|
const yjs_persistence_1 = require("./yjs-persistence");
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
var snapshot_retention_1 = require("./snapshot-retention");
|
|
11
|
+
Object.defineProperty(exports, "sweepExpiredNamedSnapshotsForPrefix", { enumerable: true, get: function () { return snapshot_retention_1.sweepExpiredNamedSnapshotsForPrefix; } });
|
|
14
12
|
let flushTimer = null;
|
|
15
|
-
function parseSnapshotTimestamp(key) {
|
|
16
|
-
const idx = key.lastIndexOf(SNAPSHOT_SEGMENT);
|
|
17
|
-
if (idx < 0) {
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
const stamp = key.slice(idx + SNAPSHOT_SEGMENT.length);
|
|
21
|
-
const match = /^(\d{4}-\d{2}-\d{2})T(\d{2})-(\d{2})-(\d{2})-(\d{3})Z$/.exec(stamp);
|
|
22
|
-
if (!match) {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
const ms = Date.parse(`${match[1]}T${match[2]}:${match[3]}:${match[4]}.${match[5]}Z`);
|
|
26
|
-
return Number.isFinite(ms) ? ms : null;
|
|
27
|
-
}
|
|
28
13
|
async function runYjsFlushTick() {
|
|
29
14
|
if (!(0, context_1.getSharedRedisClient)()) {
|
|
30
15
|
return;
|
|
@@ -39,21 +24,6 @@ async function runYjsFlushTick() {
|
|
|
39
24
|
}
|
|
40
25
|
}
|
|
41
26
|
}
|
|
42
|
-
async function sweepExpiredNamedSnapshotsForPrefix(prefix) {
|
|
43
|
-
const cutoff = Date.now() - SNAPSHOT_RETENTION_MS;
|
|
44
|
-
let deleted = 0;
|
|
45
|
-
for (const { key } of await (0, s3_object_store_1.listKeysByPrefix)(prefix)) {
|
|
46
|
-
if (!(0, artifact_storage_paths_1.isArtifactSnapshotPath)(key.slice(prefix.length))) {
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
const ts = parseSnapshotTimestamp(key);
|
|
50
|
-
if (ts !== null && ts < cutoff) {
|
|
51
|
-
await (0, s3_object_store_1.deleteObject)(key);
|
|
52
|
-
deleted += 1;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return deleted;
|
|
56
|
-
}
|
|
57
27
|
function startYjsFlushWorker() {
|
|
58
28
|
var _a, _b, _c;
|
|
59
29
|
if (flushTimer) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flush-worker.js","sourceRoot":"","sources":["../../../src/lib/yjs-pending/flush-worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flush-worker.js","sourceRoot":"","sources":["../../../src/lib/yjs-pending/flush-worker.ts"],"names":[],"mappings":";;;AAQA,0CAYC;AAED,kDAUC;AAED,gDAKC;AAvCD,2CAA0G;AAC1G,yCAAkD;AAClD,uDAAqD;AAErD,2DAA0E;AAAjE,yIAAA,mCAAmC,OAAA;AAE5C,IAAI,UAAU,GAA0C,IAAI,CAAA;AAErD,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC,IAAA,8BAAoB,GAAE,EAAE,CAAC;QAC5B,OAAM;IACR,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,IAAA,wCAA8B,GAAE,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAA;IAC1F,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,IAAA,mCAAiB,EAAC,UAAU,CAAC,CAAA;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,4BAAmB,GAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,qBAAqB,CAAC,CAAA;QAC/E,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB;;IACjC,IAAI,UAAU,EAAE,CAAC;QACf,OAAM;IACR,CAAC;IACD,MAAM,UAAU,GAAG,MAAA,MAAA,IAAA,8BAAoB,GAAE,CAAC,MAAM,CAAC,cAAc,0CAAE,eAAe,mCAAI,IAAI,CAAA;IACxF,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,KAAK,eAAe,EAAE,CAAA;IACxB,CAAC,EAAE,UAAU,CAAC,CAAA;IACd,MAAA,UAAU,CAAC,KAAK,0DAAI,CAAA;IACpB,IAAA,4BAAmB,GAAE,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,6BAA6B,CAAC,CAAA;AAC3E,CAAC;AAED,SAAgB,kBAAkB;IAChC,IAAI,UAAU,EAAE,CAAC;QACf,aAAa,CAAC,UAAU,CAAC,CAAA;QACzB,UAAU,GAAG,IAAI,CAAA;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const SNAPSHOT_RETENTION_MS: number;
|
|
2
|
+
export declare function isNamedContentSnapshotPath(relativePath: string): boolean;
|
|
3
|
+
/** Deletes artifact and notebook named snapshots older than {@link SNAPSHOT_RETENTION_MS}. */
|
|
4
|
+
export declare function sweepExpiredNamedSnapshotsForPrefix(prefix: string, nowMs?: number): Promise<number>;
|
|
5
|
+
export { parseNamedSnapshotTimestamp as parseSnapshotTimestamp } from '../object-storage/named-snapshot-paths';
|
|
6
|
+
//# sourceMappingURL=snapshot-retention.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-retention.d.ts","sourceRoot":"","sources":["../../../src/lib/yjs-pending/snapshot-retention.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB,QAA0B,CAAA;AAE5D,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAExE;AAED,8FAA8F;AAC9F,wBAAsB,mCAAmC,CACvD,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAmB,GACzB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,OAAO,EAAE,2BAA2B,IAAI,sBAAsB,EAAE,MAAM,wCAAwC,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseSnapshotTimestamp = exports.SNAPSHOT_RETENTION_MS = void 0;
|
|
4
|
+
exports.isNamedContentSnapshotPath = isNamedContentSnapshotPath;
|
|
5
|
+
exports.sweepExpiredNamedSnapshotsForPrefix = sweepExpiredNamedSnapshotsForPrefix;
|
|
6
|
+
const notebook_storage_paths_1 = require("../notebooks/notebook-storage-paths");
|
|
7
|
+
const artifact_storage_paths_1 = require("../session-pages/artifact-storage-paths");
|
|
8
|
+
const s3_object_store_1 = require("../object-storage/s3-object-store");
|
|
9
|
+
const named_snapshot_paths_1 = require("../object-storage/named-snapshot-paths");
|
|
10
|
+
exports.SNAPSHOT_RETENTION_MS = 7 * 24 * 60 * 60 * 1000;
|
|
11
|
+
function isNamedContentSnapshotPath(relativePath) {
|
|
12
|
+
return (0, artifact_storage_paths_1.isArtifactSnapshotPath)(relativePath) || (0, notebook_storage_paths_1.isNotebookSnapshotPath)(relativePath);
|
|
13
|
+
}
|
|
14
|
+
/** Deletes artifact and notebook named snapshots older than {@link SNAPSHOT_RETENTION_MS}. */
|
|
15
|
+
async function sweepExpiredNamedSnapshotsForPrefix(prefix, nowMs = Date.now()) {
|
|
16
|
+
const cutoff = nowMs - exports.SNAPSHOT_RETENTION_MS;
|
|
17
|
+
let deleted = 0;
|
|
18
|
+
for (const { key } of await (0, s3_object_store_1.listKeysByPrefix)(prefix)) {
|
|
19
|
+
const relative = key.slice(prefix.length);
|
|
20
|
+
if (!isNamedContentSnapshotPath(relative)) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const ts = (0, named_snapshot_paths_1.parseNamedSnapshotTimestamp)(key);
|
|
24
|
+
if (ts !== null && ts < cutoff) {
|
|
25
|
+
await (0, s3_object_store_1.deleteObject)(key);
|
|
26
|
+
deleted += 1;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return deleted;
|
|
30
|
+
}
|
|
31
|
+
var named_snapshot_paths_2 = require("../object-storage/named-snapshot-paths");
|
|
32
|
+
Object.defineProperty(exports, "parseSnapshotTimestamp", { enumerable: true, get: function () { return named_snapshot_paths_2.parseNamedSnapshotTimestamp; } });
|
|
33
|
+
//# sourceMappingURL=snapshot-retention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-retention.js","sourceRoot":"","sources":["../../../src/lib/yjs-pending/snapshot-retention.ts"],"names":[],"mappings":";;;AAOA,gEAEC;AAGD,kFAkBC;AA9BD,gFAA4E;AAC5E,oFAAgF;AAChF,uEAAkF;AAClF,iFAAoF;AAEvE,QAAA,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAE5D,SAAgB,0BAA0B,CAAC,YAAoB;IAC7D,OAAO,IAAA,+CAAsB,EAAC,YAAY,CAAC,IAAI,IAAA,+CAAsB,EAAC,YAAY,CAAC,CAAA;AACrF,CAAC;AAED,8FAA8F;AACvF,KAAK,UAAU,mCAAmC,CACvD,MAAc,EACd,QAAgB,IAAI,CAAC,GAAG,EAAE;IAE1B,MAAM,MAAM,GAAG,KAAK,GAAG,6BAAqB,CAAA;IAC5C,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,MAAM,IAAA,kCAAgB,EAAC,MAAM,CAAC,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACzC,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,SAAQ;QACV,CAAC;QACD,MAAM,EAAE,GAAG,IAAA,kDAA2B,EAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAA,8BAAY,EAAC,GAAG,CAAC,CAAA;YACvB,OAAO,IAAI,CAAC,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,+EAA8G;AAArG,8HAAA,2BAA2B,OAA0B"}
|
|
@@ -13,6 +13,7 @@ export declare function readCommittedYjsState(parsed: ParsedDocumentTarget): Pro
|
|
|
13
13
|
export declare function writeCommittedYjsState(parsed: ParsedDocumentTarget, state: Uint8Array): Promise<void>;
|
|
14
14
|
export declare function writeCommittedContentSnapshot(parsed: ParsedDocumentTarget, content: string): Promise<void>;
|
|
15
15
|
export declare function writeNamedSessionSnapshot(sessionId: string, artifactPath: string, content: string, at?: Date): Promise<string>;
|
|
16
|
+
export declare function writeNamedNotebookSnapshot(accountId: string, notebookId: string, content: string, at?: Date): Promise<string>;
|
|
16
17
|
export declare function docTextContent(doc: Y.Doc): string;
|
|
17
18
|
export declare function loadMergedState(documentIdentifier: string): Promise<Uint8Array | null>;
|
|
18
19
|
export declare function hydrateEphemeralDoc(documentIdentifier: string): Promise<Y.Doc | null>;
|