@multiplayer-app/sandbox 0.0.32 → 0.0.33-beta.1
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/design-skills.d.ts +48 -0
- package/dist/agents/shared/design-skills.d.ts.map +1 -0
- package/dist/agents/shared/design-skills.js +230 -0
- package/dist/agents/shared/design-skills.js.map +1 -0
- package/dist/agents/shared/generate-session-images.tool.d.ts +15 -0
- package/dist/agents/shared/generate-session-images.tool.d.ts.map +1 -0
- package/dist/agents/shared/generate-session-images.tool.js +98 -0
- package/dist/agents/shared/generate-session-images.tool.js.map +1 -0
- 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/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/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-binary-session-artifact.d.ts +12 -0
- package/dist/lib/session-pages/write-binary-session-artifact.d.ts.map +1 -0
- package/dist/lib/session-pages/write-binary-session-artifact.js +23 -0
- package/dist/lib/session-pages/write-binary-session-artifact.js.map +1 -0
- 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/realtime/session-artifact-yjs-store.d.ts +18 -0
- package/dist/realtime/session-artifact-yjs-store.d.ts.map +1 -1
- package/dist/realtime/session-artifact-yjs-store.js +62 -0
- package/dist/realtime/session-artifact-yjs-store.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/package.json +9 -9
- package/dist/agents/blocknote.agent.d.ts +0 -6
- package/dist/agents/blocknote.agent.d.ts.map +0 -1
- package/dist/agents/blocknote.agent.js +0 -18
- package/dist/agents/blocknote.agent.js.map +0 -1
- package/dist/agents/filingramp-fetch.agent.d.ts +0 -4
- package/dist/agents/filingramp-fetch.agent.d.ts.map +0 -1
- package/dist/agents/filingramp-fetch.agent.js +0 -195
- package/dist/agents/filingramp-fetch.agent.js.map +0 -1
- package/dist/agents/knowledge/filingramp-endpoints.d.ts +0 -23
- package/dist/agents/knowledge/filingramp-endpoints.d.ts.map +0 -1
- package/dist/agents/knowledge/filingramp-endpoints.js +0 -116
- package/dist/agents/knowledge/filingramp-endpoints.js.map +0 -1
- package/dist/agents/shared/blocknote-system-prompt.d.ts +0 -2
- package/dist/agents/shared/blocknote-system-prompt.d.ts.map +0 -1
- package/dist/agents/shared/blocknote-system-prompt.js +0 -40
- package/dist/agents/shared/blocknote-system-prompt.js.map +0 -1
- package/dist/agents/shared/get-latest-session-artifact.tool.d.ts +0 -7
- package/dist/agents/shared/get-latest-session-artifact.tool.d.ts.map +0 -1
- package/dist/agents/shared/get-latest-session-artifact.tool.js +0 -43
- package/dist/agents/shared/get-latest-session-artifact.tool.js.map +0 -1
- package/dist/agents/shared/get-session-artifact-content.tool.d.ts +0 -7
- package/dist/agents/shared/get-session-artifact-content.tool.d.ts.map +0 -1
- package/dist/agents/shared/get-session-artifact-content.tool.js +0 -44
- package/dist/agents/shared/get-session-artifact-content.tool.js.map +0 -1
- package/dist/agents/shared/list-session-artifact-paths.tool.d.ts +0 -5
- package/dist/agents/shared/list-session-artifact-paths.tool.d.ts.map +0 -1
- package/dist/agents/shared/list-session-artifact-paths.tool.js +0 -37
- package/dist/agents/shared/list-session-artifact-paths.tool.js.map +0 -1
- package/dist/lib/ai/agent-ai-service.d.ts +0 -3
- package/dist/lib/ai/agent-ai-service.d.ts.map +0 -1
- package/dist/lib/ai/agent-ai-service.js +0 -15
- package/dist/lib/ai/agent-ai-service.js.map +0 -1
- package/dist/lib/ai/ai-error-details.d.ts +0 -13
- package/dist/lib/ai/ai-error-details.d.ts.map +0 -1
- package/dist/lib/ai/ai-error-details.js +0 -84
- package/dist/lib/ai/ai-error-details.js.map +0 -1
- package/dist/lib/ai/generate-ai-text.d.ts +0 -12
- package/dist/lib/ai/generate-ai-text.d.ts.map +0 -1
- package/dist/lib/ai/generate-ai-text.js +0 -105
- package/dist/lib/ai/generate-ai-text.js.map +0 -1
- package/dist/lib/ai/run-explicit-agent.d.ts +0 -15
- package/dist/lib/ai/run-explicit-agent.d.ts.map +0 -1
- package/dist/lib/ai/run-explicit-agent.js +0 -30
- package/dist/lib/ai/run-explicit-agent.js.map +0 -1
- package/dist/lib/notebooks/notebook-sql-client.d.ts +0 -5
- package/dist/lib/notebooks/notebook-sql-client.d.ts.map +0 -1
- package/dist/lib/notebooks/notebook-sql-client.js +0 -37
- package/dist/lib/notebooks/notebook-sql-client.js.map +0 -1
- package/dist/lib/notebooks/notebook-sql-schema.d.ts +0 -16
- package/dist/lib/notebooks/notebook-sql-schema.d.ts.map +0 -1
- package/dist/lib/notebooks/notebook-sql-schema.js +0 -117
- package/dist/lib/notebooks/notebook-sql-schema.js.map +0 -1
- package/dist/lib/notebooks/notebook-sql.d.ts +0 -9
- package/dist/lib/notebooks/notebook-sql.d.ts.map +0 -1
- package/dist/lib/notebooks/notebook-sql.js +0 -36
- package/dist/lib/notebooks/notebook-sql.js.map +0 -1
- package/dist/lib/session-artifacts/apply-hashline-edits.d.ts +0 -3
- package/dist/lib/session-artifacts/apply-hashline-edits.d.ts.map +0 -1
- package/dist/lib/session-artifacts/apply-hashline-edits.js +0 -25
- package/dist/lib/session-artifacts/apply-hashline-edits.js.map +0 -1
- package/dist/lib/session-artifacts/artifact-text-edit.d.ts +0 -8
- package/dist/lib/session-artifacts/artifact-text-edit.d.ts.map +0 -1
- package/dist/lib/session-artifacts/artifact-text-edit.js +0 -23
- package/dist/lib/session-artifacts/artifact-text-edit.js.map +0 -1
- package/dist/lib/session-artifacts/hashline-tag.d.ts +0 -33
- package/dist/lib/session-artifacts/hashline-tag.d.ts.map +0 -1
- package/dist/lib/session-artifacts/hashline-tag.js +0 -80
- package/dist/lib/session-artifacts/hashline-tag.js.map +0 -1
- package/dist/lib/session-pages/inject-preview-error-reporter.d.ts +0 -3
- package/dist/lib/session-pages/inject-preview-error-reporter.d.ts.map +0 -1
- package/dist/lib/session-pages/inject-preview-error-reporter.js +0 -30
- package/dist/lib/session-pages/inject-preview-error-reporter.js.map +0 -1
- package/dist/lib/session-pages/read-session-artifact.d.ts +0 -7
- package/dist/lib/session-pages/read-session-artifact.d.ts.map +0 -1
- package/dist/lib/session-pages/read-session-artifact.js +0 -60
- package/dist/lib/session-pages/read-session-artifact.js.map +0 -1
- package/dist/lib/session-pages/session-pico-css.d.ts +0 -5
- package/dist/lib/session-pages/session-pico-css.d.ts.map +0 -1
- package/dist/lib/session-pages/session-pico-css.js +0 -11
- package/dist/lib/session-pages/session-pico-css.js.map +0 -1
- package/dist/realtime/realtime-auth.d.ts +0 -12
- package/dist/realtime/realtime-auth.d.ts.map +0 -1
- package/dist/realtime/realtime-auth.js +0 -25
- package/dist/realtime/realtime-auth.js.map +0 -1
- package/dist/realtime/yjs-account-namespace.d.ts +0 -5
- package/dist/realtime/yjs-account-namespace.d.ts.map +0 -1
- package/dist/realtime/yjs-account-namespace.js +0 -21
- package/dist/realtime/yjs-account-namespace.js.map +0 -1
- package/dist/routes/notebooks/sql-execute.d.ts +0 -3
- package/dist/routes/notebooks/sql-execute.d.ts.map +0 -1
- package/dist/routes/notebooks/sql-execute.js +0 -45
- package/dist/routes/notebooks/sql-execute.js.map +0 -1
- package/dist/routes/sql.d.ts +0 -2
- package/dist/routes/sql.d.ts.map +0 -1
- package/dist/routes/sql.js +0 -50
- package/dist/routes/sql.js.map +0 -1
|
@@ -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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface BinarySessionArtifact {
|
|
2
|
+
path: string;
|
|
3
|
+
bytes: number;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Write a binary artifact (e.g. a generated image) directly into the session
|
|
7
|
+
* directory. Binary files bypass the Yjs text store: they are not
|
|
8
|
+
* collaboratively edited, and listSessionArtifacts / the artifact GET route
|
|
9
|
+
* pick them up straight from disk.
|
|
10
|
+
*/
|
|
11
|
+
export declare function writeBinarySessionArtifact(sessionId: string, artifactPath: string, data: Uint8Array): Promise<BinarySessionArtifact>;
|
|
12
|
+
//# sourceMappingURL=write-binary-session-artifact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-binary-session-artifact.d.ts","sourceRoot":"","sources":["../../../src/lib/session-pages/write-binary-session-artifact.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,qBAAqB,CAAC,CAMhC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.writeBinarySessionArtifact = writeBinarySessionArtifact;
|
|
7
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const paths_1 = require("./paths");
|
|
10
|
+
/**
|
|
11
|
+
* Write a binary artifact (e.g. a generated image) directly into the session
|
|
12
|
+
* directory. Binary files bypass the Yjs text store: they are not
|
|
13
|
+
* collaboratively edited, and listSessionArtifacts / the artifact GET route
|
|
14
|
+
* pick them up straight from disk.
|
|
15
|
+
*/
|
|
16
|
+
async function writeBinarySessionArtifact(sessionId, artifactPath, data) {
|
|
17
|
+
const relativePath = (0, paths_1.normalizeArtifactPath)(artifactPath);
|
|
18
|
+
const absolutePath = (0, paths_1.resolveArtifactPath)(sessionId, relativePath);
|
|
19
|
+
await promises_1.default.mkdir(node_path_1.default.dirname(absolutePath), { recursive: true });
|
|
20
|
+
await promises_1.default.writeFile(absolutePath, Buffer.from(data));
|
|
21
|
+
return { path: relativePath, bytes: data.byteLength };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=write-binary-session-artifact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-binary-session-artifact.js","sourceRoot":"","sources":["../../../src/lib/session-pages/write-binary-session-artifact.ts"],"names":[],"mappings":";;;;;AAeA,gEAUC;AAzBD,gEAAiC;AACjC,0DAA4B;AAC5B,mCAAoE;AAOpE;;;;;GAKG;AACI,KAAK,UAAU,0BAA0B,CAC9C,SAAiB,EACjB,YAAoB,EACpB,IAAgB;IAEhB,MAAM,YAAY,GAAG,IAAA,6BAAqB,EAAC,YAAY,CAAC,CAAA;IACxD,MAAM,YAAY,GAAG,IAAA,2BAAmB,EAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IACjE,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/D,MAAM,kBAAE,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACnD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAA;AACvD,CAAC"}
|
|
@@ -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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"}
|
|
@@ -11,6 +11,24 @@ export declare class SessionArtifactYjsStore {
|
|
|
11
11
|
bytes: number;
|
|
12
12
|
documentIdentifier: string;
|
|
13
13
|
}>;
|
|
14
|
+
/**
|
|
15
|
+
* Replace the full text of an existing artifact (wholesale rewrite / hashline
|
|
16
|
+
* apply). Unlike initializeFromContent, this requires the file to already exist.
|
|
17
|
+
*/
|
|
18
|
+
replaceFromContent(sessionId: string, artifactPath: string, content: string): Promise<{
|
|
19
|
+
path: string;
|
|
20
|
+
bytes: number;
|
|
21
|
+
documentIdentifier: string;
|
|
22
|
+
}>;
|
|
23
|
+
/**
|
|
24
|
+
* Create or overwrite. Prefer initializeFromContent (create-only) for publish
|
|
25
|
+
* and replaceFromContent for edits; use this for plan.json-style upserts.
|
|
26
|
+
*/
|
|
27
|
+
upsertFromContent(sessionId: string, artifactPath: string, content: string): Promise<{
|
|
28
|
+
path: string;
|
|
29
|
+
bytes: number;
|
|
30
|
+
documentIdentifier: string;
|
|
31
|
+
}>;
|
|
14
32
|
applyPatchText(sessionId: string, artifactPath: string, patchText: string): Promise<{
|
|
15
33
|
path: string;
|
|
16
34
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-artifact-yjs-store.d.ts","sourceRoot":"","sources":["../../src/realtime/session-artifact-yjs-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAyBxB,KAAK,eAAe,GAAG,CAAC,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;AAE/E,qBAAa,uBAAuB;IAClC,OAAO,CAAC,eAAe,CAA+B;IAEtD,iBAAiB,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI;IAI5C,mBAAmB,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAErE,YAAY,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;IAc/D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAcvE,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"session-artifact-yjs-store.d.ts","sourceRoot":"","sources":["../../src/realtime/session-artifact-yjs-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAyBxB,KAAK,eAAe,GAAG,CAAC,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;AAE/E,qBAAa,uBAAuB;IAClC,OAAO,CAAC,eAAe,CAA+B;IAEtD,iBAAiB,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI;IAI5C,mBAAmB,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAErE,YAAY,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;IAc/D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAcvE,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;IAyCvE;;;OAGG;IACG,kBAAkB,CACtB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;IAmDvE;;;OAGG;IACG,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;IAUjE,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAwBtB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;IAQlF,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,GACrD,OAAO,CAAC,IAAI,CAAC;IAoBhB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAExD,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5E,uBAAuB,CAC3B,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC;QAAE,EAAE,EAAE;YAAE,QAAQ,IAAI,MAAM,CAAA;SAAE,CAAC;QAAC,KAAK,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,SAAS,CAAC;IAQpE,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YAYxE,qBAAqB;IAcnC,OAAO,CAAC,qBAAqB;CAO9B;AAID,wBAAgB,0BAA0B,IAAI,uBAAuB,CAKpE"}
|
|
@@ -114,6 +114,68 @@ class SessionArtifactYjsStore {
|
|
|
114
114
|
documentIdentifier,
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Replace the full text of an existing artifact (wholesale rewrite / hashline
|
|
119
|
+
* apply). Unlike initializeFromContent, this requires the file to already exist.
|
|
120
|
+
*/
|
|
121
|
+
async replaceFromContent(sessionId, artifactPath, content) {
|
|
122
|
+
var _a;
|
|
123
|
+
const normalizedPath = (0, paths_1.normalizeArtifactPath)(artifactPath);
|
|
124
|
+
const documentIdentifier = (0, session_artifact_document_id_1.buildSessionArtifactDocumentId)(sessionId, normalizedPath);
|
|
125
|
+
const accountId = await (0, resolve_session_account_id_1.resolveSessionAccountId)(sessionId);
|
|
126
|
+
if (!(await this.sessionArtifactExists(accountId, sessionId, normalizedPath, documentIdentifier))) {
|
|
127
|
+
throw new Error(`File not found: ${normalizedPath}. Use publishSessionArtifacts to create new artifacts.`);
|
|
128
|
+
}
|
|
129
|
+
const doc = await this.getOrLoadDoc(documentIdentifier);
|
|
130
|
+
if (!doc) {
|
|
131
|
+
throw new Error(`Invalid session artifact document: ${normalizedPath}`);
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const beforeVector = Y.encodeStateVector(doc);
|
|
135
|
+
const ytext = doc.getText('content');
|
|
136
|
+
doc.transact(() => {
|
|
137
|
+
if (ytext.length > 0) {
|
|
138
|
+
ytext.delete(0, ytext.length);
|
|
139
|
+
}
|
|
140
|
+
if (content.length > 0) {
|
|
141
|
+
ytext.insert(0, content);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
const update = Y.encodeStateAsUpdate(doc, beforeVector);
|
|
145
|
+
if (update.byteLength > 0) {
|
|
146
|
+
await (0, yjs_persistence_1.appendIncrementalUpdate)(documentIdentifier, accountId, update);
|
|
147
|
+
(_a = this.broadcastUpdate) === null || _a === void 0 ? void 0 : _a.call(this, documentIdentifier, update);
|
|
148
|
+
}
|
|
149
|
+
const parsed = {
|
|
150
|
+
kind: 'session-artifact',
|
|
151
|
+
sessionId,
|
|
152
|
+
artifactPath: normalizedPath,
|
|
153
|
+
};
|
|
154
|
+
// Keep REST/preview readers in sync even before the next pending flush.
|
|
155
|
+
await (0, yjs_persistence_1.writeCommittedContentSnapshot)(parsed, content);
|
|
156
|
+
return {
|
|
157
|
+
path: normalizedPath,
|
|
158
|
+
bytes: Buffer.byteLength(content, 'utf8'),
|
|
159
|
+
documentIdentifier,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
doc.destroy();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Create or overwrite. Prefer initializeFromContent (create-only) for publish
|
|
168
|
+
* and replaceFromContent for edits; use this for plan.json-style upserts.
|
|
169
|
+
*/
|
|
170
|
+
async upsertFromContent(sessionId, artifactPath, content) {
|
|
171
|
+
const normalizedPath = (0, paths_1.normalizeArtifactPath)(artifactPath);
|
|
172
|
+
const documentIdentifier = (0, session_artifact_document_id_1.buildSessionArtifactDocumentId)(sessionId, normalizedPath);
|
|
173
|
+
const accountId = await (0, resolve_session_account_id_1.resolveSessionAccountId)(sessionId);
|
|
174
|
+
if (await this.sessionArtifactExists(accountId, sessionId, normalizedPath, documentIdentifier)) {
|
|
175
|
+
return this.replaceFromContent(sessionId, normalizedPath, content);
|
|
176
|
+
}
|
|
177
|
+
return this.initializeFromContent(sessionId, normalizedPath, content);
|
|
178
|
+
}
|
|
117
179
|
async applyPatchText(sessionId, artifactPath, patchText) {
|
|
118
180
|
var _a;
|
|
119
181
|
const normalizedPath = (0, paths_1.normalizeArtifactPath)(artifactPath);
|