@multiplayer-app/sandbox 0.0.15 → 0.0.17
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/notebook.agent.d.ts +4 -0
- package/dist/agents/notebook.agent.d.ts.map +1 -0
- package/dist/agents/notebook.agent.js +48 -0
- package/dist/agents/notebook.agent.js.map +1 -0
- package/dist/agents/shared/content-generator-system-prompt.d.ts +1 -1
- package/dist/agents/shared/content-generator-system-prompt.d.ts.map +1 -1
- package/dist/agents/shared/content-generator-system-prompt.js +3 -3
- package/dist/agents/shared/notebook-agent-system-prompt.d.ts +2 -0
- package/dist/agents/shared/notebook-agent-system-prompt.d.ts.map +1 -0
- package/dist/agents/shared/notebook-agent-system-prompt.js +64 -0
- package/dist/agents/shared/notebook-agent-system-prompt.js.map +1 -0
- package/dist/agents/shared/notebook-tools.d.ts +24 -0
- package/dist/agents/shared/notebook-tools.d.ts.map +1 -0
- package/dist/agents/shared/notebook-tools.js +383 -0
- package/dist/agents/shared/notebook-tools.js.map +1 -0
- package/dist/agents/shared/publish-session-artifacts.tool.d.ts +2 -0
- package/dist/agents/shared/publish-session-artifacts.tool.d.ts.map +1 -1
- package/dist/agents/shared/publish-session-artifacts.tool.js +41 -26
- package/dist/agents/shared/publish-session-artifacts.tool.js.map +1 -1
- package/dist/agents/shared/update-session-artifacts.tool.d.ts.map +1 -1
- package/dist/agents/shared/update-session-artifacts.tool.js +37 -20
- package/dist/agents/shared/update-session-artifacts.tool.js.map +1 -1
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +2 -0
- package/dist/agents.js.map +1 -1
- package/dist/context.d.ts +2 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js.map +1 -1
- package/dist/create-builder-api.d.ts +3 -1
- package/dist/create-builder-api.d.ts.map +1 -1
- package/dist/create-builder-api.js +1 -0
- package/dist/create-builder-api.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/notebooks/notebook-assistant.d.ts +3 -0
- package/dist/lib/notebooks/notebook-assistant.d.ts.map +1 -1
- package/dist/lib/notebooks/notebook-assistant.js +13 -3
- package/dist/lib/notebooks/notebook-assistant.js.map +1 -1
- package/dist/lib/notebooks/notebook-yjs-blocks.d.ts +46 -0
- package/dist/lib/notebooks/notebook-yjs-blocks.d.ts.map +1 -0
- package/dist/lib/notebooks/notebook-yjs-blocks.js +223 -0
- package/dist/lib/notebooks/notebook-yjs-blocks.js.map +1 -0
- package/dist/lib/session-artifacts/hashline-tags.d.ts +17 -0
- package/dist/lib/session-artifacts/hashline-tags.d.ts.map +1 -0
- package/dist/lib/session-artifacts/hashline-tags.js +69 -0
- package/dist/lib/session-artifacts/hashline-tags.js.map +1 -0
- package/dist/lib/session-artifacts/parse-hashline-diff.d.ts +1 -0
- package/dist/lib/session-artifacts/parse-hashline-diff.d.ts.map +1 -1
- package/dist/lib/session-artifacts/parse-hashline-diff.js +30 -9
- package/dist/lib/session-artifacts/parse-hashline-diff.js.map +1 -1
- package/dist/lib/session-pages/html-artifact-template.d.ts +12 -0
- package/dist/lib/session-pages/html-artifact-template.d.ts.map +1 -0
- package/dist/lib/session-pages/html-artifact-template.js +46 -0
- package/dist/lib/session-pages/html-artifact-template.js.map +1 -0
- package/dist/lib/session-pages/write-session-artifacts.d.ts +4 -0
- package/dist/lib/session-pages/write-session-artifacts.d.ts.map +1 -1
- package/dist/lib/session-pages/write-session-artifacts.js +8 -1
- package/dist/lib/session-pages/write-session-artifacts.js.map +1 -1
- package/dist/lib/socket/artifact-events.d.ts.map +1 -1
- package/dist/lib/socket/artifact-events.js +8 -1
- package/dist/lib/socket/artifact-events.js.map +1 -1
- package/dist/lib/sql-schema.d.ts +8 -1
- package/dist/lib/sql-schema.d.ts.map +1 -1
- package/dist/realtime/session-artifact-yjs-store.d.ts +7 -0
- package/dist/realtime/session-artifact-yjs-store.d.ts.map +1 -1
- package/dist/realtime/session-artifact-yjs-store.js +29 -0
- package/dist/realtime/session-artifact-yjs-store.js.map +1 -1
- package/dist/routes/chats/multiUserMessages.d.ts.map +1 -1
- package/dist/routes/chats/multiUserMessages.js +2 -0
- package/dist/routes/chats/multiUserMessages.js.map +1 -1
- package/dist/routes/chats/stream.d.ts.map +1 -1
- package/dist/routes/chats/stream.js +2 -0
- package/dist/routes/chats/stream.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notebook-yjs-blocks.d.ts","sourceRoot":"","sources":["../../../src/lib/notebooks/notebook-yjs-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;CACrB;AAOD,eAAO,MAAM,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAQlD,CAAA;AAuBD,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,OAAO,CAmC3E;AAwCD,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,GAAG,UAAU,EAAE,CASxE;AAID,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAevD;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAUD,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,oBAAoB,EAAE,CAsBzE;AAID;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAerE"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.tipTapNodeSchema = void 0;
|
|
37
|
+
exports.tipTapNodeToYXml = tipTapNodeToYXml;
|
|
38
|
+
exports.readFragmentBlocks = readFragmentBlocks;
|
|
39
|
+
exports.blockPlainText = blockPlainText;
|
|
40
|
+
exports.buildOutline = buildOutline;
|
|
41
|
+
exports.ensureRunnableBlockAttrs = ensureRunnableBlockAttrs;
|
|
42
|
+
const Y = __importStar(require("yjs"));
|
|
43
|
+
const zod_1 = require("zod");
|
|
44
|
+
const tipTapMarkSchema = zod_1.z.object({
|
|
45
|
+
type: zod_1.z.string().min(1),
|
|
46
|
+
attrs: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
|
|
47
|
+
});
|
|
48
|
+
exports.tipTapNodeSchema = zod_1.z.lazy(() => zod_1.z.object({
|
|
49
|
+
type: zod_1.z.string().min(1),
|
|
50
|
+
attrs: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
|
|
51
|
+
content: zod_1.z.array(exports.tipTapNodeSchema).optional(),
|
|
52
|
+
text: zod_1.z.string().optional(),
|
|
53
|
+
marks: zod_1.z.array(tipTapMarkSchema).optional(),
|
|
54
|
+
}));
|
|
55
|
+
function marksToDeltaAttributes(marks) {
|
|
56
|
+
var _a;
|
|
57
|
+
const attributes = {};
|
|
58
|
+
for (const mark of marks !== null && marks !== void 0 ? marks : []) {
|
|
59
|
+
if (mark.type !== 'ychange') {
|
|
60
|
+
attributes[mark.type] = (_a = mark.attrs) !== null && _a !== void 0 ? _a : {};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return attributes;
|
|
64
|
+
}
|
|
65
|
+
function createTextFromRun(run) {
|
|
66
|
+
const text = new Y.XmlText();
|
|
67
|
+
text.applyDelta(run.map((node) => {
|
|
68
|
+
var _a;
|
|
69
|
+
return ({
|
|
70
|
+
insert: (_a = node.text) !== null && _a !== void 0 ? _a : '',
|
|
71
|
+
attributes: marksToDeltaAttributes(node.marks),
|
|
72
|
+
});
|
|
73
|
+
}));
|
|
74
|
+
return text;
|
|
75
|
+
}
|
|
76
|
+
/** Convert a TipTap JSON node to a Y.Xml type, matching y-prosemirror's encoding. */
|
|
77
|
+
function tipTapNodeToYXml(node) {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
if (node.type === 'text') {
|
|
80
|
+
return createTextFromRun([node]);
|
|
81
|
+
}
|
|
82
|
+
const element = new Y.XmlElement(node.type);
|
|
83
|
+
for (const [key, value] of Object.entries((_a = node.attrs) !== null && _a !== void 0 ? _a : {})) {
|
|
84
|
+
if (value !== null && value !== undefined && key !== 'ychange') {
|
|
85
|
+
element.setAttribute(key, value);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Consecutive text nodes collapse into a single Y.XmlText (normalizePNodeContent).
|
|
89
|
+
const children = [];
|
|
90
|
+
let textRun = [];
|
|
91
|
+
const flushRun = () => {
|
|
92
|
+
if (textRun.length > 0) {
|
|
93
|
+
children.push(createTextFromRun(textRun));
|
|
94
|
+
textRun = [];
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
for (const child of (_b = node.content) !== null && _b !== void 0 ? _b : []) {
|
|
98
|
+
if (child.type === 'text') {
|
|
99
|
+
textRun.push(child);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
flushRun();
|
|
103
|
+
children.push(tipTapNodeToYXml(child));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
flushRun();
|
|
107
|
+
if (children.length > 0) {
|
|
108
|
+
element.insert(0, children);
|
|
109
|
+
}
|
|
110
|
+
return element;
|
|
111
|
+
}
|
|
112
|
+
function serializeXmlText(item) {
|
|
113
|
+
const delta = item.toDelta();
|
|
114
|
+
return delta.map((op) => {
|
|
115
|
+
const text = { type: 'text', text: op.insert };
|
|
116
|
+
if (op.attributes) {
|
|
117
|
+
text.marks = Object.keys(op.attributes).map((type) => {
|
|
118
|
+
var _a;
|
|
119
|
+
return ({
|
|
120
|
+
type,
|
|
121
|
+
attrs: (_a = op.attributes) === null || _a === void 0 ? void 0 : _a[type],
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
return text;
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function serializeXmlElement(item) {
|
|
129
|
+
const node = { type: item.nodeName };
|
|
130
|
+
const attrs = item.getAttributes();
|
|
131
|
+
if (Object.keys(attrs).length > 0) {
|
|
132
|
+
node.attrs = attrs;
|
|
133
|
+
}
|
|
134
|
+
const children = item.toArray();
|
|
135
|
+
if (children.length > 0) {
|
|
136
|
+
node.content = children.flatMap((child) => child instanceof Y.XmlText
|
|
137
|
+
? serializeXmlText(child)
|
|
138
|
+
: [serializeXmlElement(child)]);
|
|
139
|
+
}
|
|
140
|
+
return node;
|
|
141
|
+
}
|
|
142
|
+
/** Read the fragment's top-level blocks as TipTap JSON (mirror of yXmlFragmentToProsemirrorJSON). */
|
|
143
|
+
function readFragmentBlocks(fragment) {
|
|
144
|
+
return fragment
|
|
145
|
+
.toArray()
|
|
146
|
+
.map((item) => item instanceof Y.XmlText
|
|
147
|
+
? serializeXmlText(item)
|
|
148
|
+
: serializeXmlElement(item))
|
|
149
|
+
.flat();
|
|
150
|
+
}
|
|
151
|
+
const TEXTUAL_ATTR_KEYS = ['query', 'content', 'title'];
|
|
152
|
+
/** Plain text of a block for search/previews, including code/query attrs of atom blocks. */
|
|
153
|
+
function blockPlainText(node) {
|
|
154
|
+
var _a, _b;
|
|
155
|
+
const parts = [];
|
|
156
|
+
if (node.text) {
|
|
157
|
+
parts.push(node.text);
|
|
158
|
+
}
|
|
159
|
+
for (const key of TEXTUAL_ATTR_KEYS) {
|
|
160
|
+
const value = (_a = node.attrs) === null || _a === void 0 ? void 0 : _a[key];
|
|
161
|
+
if (typeof value === 'string' && value.length > 0) {
|
|
162
|
+
parts.push(value);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
for (const child of (_b = node.content) !== null && _b !== void 0 ? _b : []) {
|
|
166
|
+
parts.push(blockPlainText(child));
|
|
167
|
+
}
|
|
168
|
+
return parts.filter(Boolean).join(' ');
|
|
169
|
+
}
|
|
170
|
+
const OUTLINE_PREVIEW_LENGTH = 150;
|
|
171
|
+
const OUTLINE_ATTR_KEYS = {
|
|
172
|
+
heading: ['level'],
|
|
173
|
+
sqlBlock: ['_globalName', 'databaseName'],
|
|
174
|
+
runnableCodeBlock: ['_globalName', 'language'],
|
|
175
|
+
chartBlock: ['_globalName', 'title'],
|
|
176
|
+
};
|
|
177
|
+
/** Compact numbered outline of top-level blocks for agent orientation. */
|
|
178
|
+
function buildOutline(blocks) {
|
|
179
|
+
return blocks.map((block, index) => {
|
|
180
|
+
const entry = {
|
|
181
|
+
index,
|
|
182
|
+
type: block.type,
|
|
183
|
+
preview: blockPlainText(block).slice(0, OUTLINE_PREVIEW_LENGTH),
|
|
184
|
+
};
|
|
185
|
+
const keys = OUTLINE_ATTR_KEYS[block.type];
|
|
186
|
+
if (keys && block.attrs) {
|
|
187
|
+
const attrs = {};
|
|
188
|
+
for (const key of keys) {
|
|
189
|
+
if (block.attrs[key] !== undefined) {
|
|
190
|
+
attrs[key] = block.attrs[key];
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (Object.keys(attrs).length > 0) {
|
|
194
|
+
entry.attrs = attrs;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return entry;
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
const RUNNABLE_BLOCK_TYPES = new Set(['runnableCodeBlock', 'sqlBlock', 'chartBlock']);
|
|
201
|
+
/**
|
|
202
|
+
* Ensure runnable blocks carry the `_id`/`_globalName` attrs the editor generates
|
|
203
|
+
* client-side (`generateId`/`generateName` in @multiplayer-app/blocknote); server-created
|
|
204
|
+
* nodes bypass TipTap attribute defaults, so missing values are filled here.
|
|
205
|
+
*/
|
|
206
|
+
function ensureRunnableBlockAttrs(node) {
|
|
207
|
+
var _a;
|
|
208
|
+
if (!RUNNABLE_BLOCK_TYPES.has(node.type)) {
|
|
209
|
+
return node;
|
|
210
|
+
}
|
|
211
|
+
const attrs = { ...((_a = node.attrs) !== null && _a !== void 0 ? _a : {}) };
|
|
212
|
+
if (typeof attrs._id !== 'string' || attrs._id.length === 0) {
|
|
213
|
+
attrs._id = `${Date.now()}-${Math.random()}`;
|
|
214
|
+
}
|
|
215
|
+
if (typeof attrs._globalName !== 'string' || attrs._globalName.length === 0) {
|
|
216
|
+
attrs._globalName = Date.now().toString();
|
|
217
|
+
}
|
|
218
|
+
if (node.type !== 'chartBlock' && attrs._runnable === undefined) {
|
|
219
|
+
attrs._runnable = true;
|
|
220
|
+
}
|
|
221
|
+
return { ...node, attrs };
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=notebook-yjs-blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notebook-yjs-blocks.js","sourceRoot":"","sources":["../../../src/lib/notebooks/notebook-yjs-blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface TaggedLine {
|
|
2
|
+
tag: string;
|
|
3
|
+
text: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function computeLineHash(line: string): string;
|
|
6
|
+
export declare function splitContentLines(content: string): string[];
|
|
7
|
+
export declare function joinContentLines(lines: string[]): string;
|
|
8
|
+
export declare function formatTaggedLines(content: string): TaggedLine[];
|
|
9
|
+
export interface ParsedTagRange {
|
|
10
|
+
startLine: number;
|
|
11
|
+
startHash: string;
|
|
12
|
+
endLine: number;
|
|
13
|
+
endHash: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function parseTagRange(range: string): ParsedTagRange;
|
|
16
|
+
export declare function applyTaggedLinePatch(lines: string[], range: string, replace: string): string[];
|
|
17
|
+
//# sourceMappingURL=hashline-tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashline-tags.d.ts","sourceRoot":"","sources":["../../../src/lib/session-artifacts/hashline-tags.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAK3D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAExD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAK/D;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAmB3D;AAgBD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAe9F"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.computeLineHash = computeLineHash;
|
|
4
|
+
exports.splitContentLines = splitContentLines;
|
|
5
|
+
exports.joinContentLines = joinContentLines;
|
|
6
|
+
exports.formatTaggedLines = formatTaggedLines;
|
|
7
|
+
exports.parseTagRange = parseTagRange;
|
|
8
|
+
exports.applyTaggedLinePatch = applyTaggedLinePatch;
|
|
9
|
+
const node_crypto_1 = require("node:crypto");
|
|
10
|
+
const TAG_RANGE_PATTERN = /^(\d+):([0-9a-f]+)\.\.(\d+):([0-9a-f]+)$/i;
|
|
11
|
+
function computeLineHash(line) {
|
|
12
|
+
return (0, node_crypto_1.createHash)('sha256').update(line).digest('hex').slice(0, 2);
|
|
13
|
+
}
|
|
14
|
+
function splitContentLines(content) {
|
|
15
|
+
if (content.length === 0) {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
return content.split('\n');
|
|
19
|
+
}
|
|
20
|
+
function joinContentLines(lines) {
|
|
21
|
+
return lines.join('\n');
|
|
22
|
+
}
|
|
23
|
+
function formatTaggedLines(content) {
|
|
24
|
+
return splitContentLines(content).map((text, index) => ({
|
|
25
|
+
tag: `${index + 1}:${computeLineHash(text)}`,
|
|
26
|
+
text,
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
function parseTagRange(range) {
|
|
30
|
+
const match = range.trim().match(TAG_RANGE_PATTERN);
|
|
31
|
+
if (!match) {
|
|
32
|
+
throw new Error(`Invalid tag range: ${range}`);
|
|
33
|
+
}
|
|
34
|
+
const startLine = Number.parseInt(match[1], 10);
|
|
35
|
+
const endLine = Number.parseInt(match[3], 10);
|
|
36
|
+
if (startLine < 1 || endLine < startLine) {
|
|
37
|
+
throw new Error(`Invalid tag range bounds: ${range}`);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
startLine,
|
|
41
|
+
startHash: match[2].toLowerCase(),
|
|
42
|
+
endLine,
|
|
43
|
+
endHash: match[4].toLowerCase(),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function assertLineTag(lines, lineNumber, expectedHash) {
|
|
47
|
+
const index = lineNumber - 1;
|
|
48
|
+
if (index < 0 || index >= lines.length) {
|
|
49
|
+
throw new Error(`Line ${lineNumber} out of range (file has ${lines.length} lines)`);
|
|
50
|
+
}
|
|
51
|
+
const actualHash = computeLineHash(lines[index]);
|
|
52
|
+
if (actualHash !== expectedHash) {
|
|
53
|
+
throw new Error(`Hash mismatch at line ${lineNumber}: expected ${expectedHash}, got ${actualHash}. Re-read the file before editing.`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function applyTaggedLinePatch(lines, range, replace) {
|
|
57
|
+
const { startLine, startHash, endLine, endHash } = parseTagRange(range);
|
|
58
|
+
assertLineTag(lines, startLine, startHash);
|
|
59
|
+
assertLineTag(lines, endLine, endHash);
|
|
60
|
+
const replacementLines = splitContentLines(replace);
|
|
61
|
+
const startIndex = startLine - 1;
|
|
62
|
+
const deleteCount = endLine - startLine + 1;
|
|
63
|
+
return [
|
|
64
|
+
...lines.slice(0, startIndex),
|
|
65
|
+
...replacementLines,
|
|
66
|
+
...lines.slice(startIndex + deleteCount),
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=hashline-tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashline-tags.js","sourceRoot":"","sources":["../../../src/lib/session-artifacts/hashline-tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ interface Patch {
|
|
|
5
5
|
replace: string;
|
|
6
6
|
}
|
|
7
7
|
export declare function parsePatches(input: string): Patch[];
|
|
8
|
+
export declare function applyPatchToLines(lines: string[], patchText: string): string[];
|
|
8
9
|
export declare function applyPatch(ytext: Y.Text, patchText: string): void;
|
|
9
10
|
export {};
|
|
10
11
|
//# sourceMappingURL=parse-hashline-diff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-hashline-diff.d.ts","sourceRoot":"","sources":["../../../src/lib/session-artifacts/parse-hashline-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"parse-hashline-diff.d.ts","sourceRoot":"","sources":["../../../src/lib/session-artifacts/parse-hashline-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAQxB,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAKD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CAmBnD;AAUD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAS9E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAcjE"}
|
|
@@ -1,32 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parsePatches = parsePatches;
|
|
4
|
+
exports.applyPatchToLines = applyPatchToLines;
|
|
4
5
|
exports.applyPatch = applyPatch;
|
|
6
|
+
const hashline_tags_1 = require("./hashline-tags");
|
|
5
7
|
const PATCH_PATTERN = /<<<SEARCH\s+([^\n]+)\n([\s\S]*?)>>>REPLACE\n([\s\S]*?)<<<END/g;
|
|
6
8
|
function parsePatches(input) {
|
|
7
9
|
const patches = [];
|
|
8
10
|
let match;
|
|
9
11
|
while ((match = PATCH_PATTERN.exec(input)) !== null) {
|
|
12
|
+
let replace = match[3];
|
|
13
|
+
if (replace.endsWith('\n')) {
|
|
14
|
+
replace = replace.slice(0, -1);
|
|
15
|
+
}
|
|
10
16
|
patches.push({
|
|
11
17
|
range: match[1].trim(),
|
|
12
18
|
search: match[2],
|
|
13
|
-
replace
|
|
19
|
+
replace,
|
|
14
20
|
});
|
|
15
21
|
}
|
|
16
22
|
return patches;
|
|
17
23
|
}
|
|
24
|
+
function sortPatchesForApplication(patches) {
|
|
25
|
+
return [...patches].sort((left, right) => {
|
|
26
|
+
const leftStart = (0, hashline_tags_1.parseTagRange)(left.range).startLine;
|
|
27
|
+
const rightStart = (0, hashline_tags_1.parseTagRange)(right.range).startLine;
|
|
28
|
+
return rightStart - leftStart;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function applyPatchToLines(lines, patchText) {
|
|
32
|
+
const patches = sortPatchesForApplication(parsePatches(patchText));
|
|
33
|
+
let nextLines = lines;
|
|
34
|
+
for (const patch of patches) {
|
|
35
|
+
nextLines = (0, hashline_tags_1.applyTaggedLinePatch)(nextLines, patch.range, patch.replace);
|
|
36
|
+
}
|
|
37
|
+
return nextLines;
|
|
38
|
+
}
|
|
18
39
|
function applyPatch(ytext, patchText) {
|
|
19
40
|
var _a;
|
|
20
41
|
const patches = parsePatches(patchText);
|
|
42
|
+
if (patches.length === 0) {
|
|
43
|
+
throw new Error('No SEARCH/REPLACE blocks found in diff');
|
|
44
|
+
}
|
|
21
45
|
(_a = ytext.doc) === null || _a === void 0 ? void 0 : _a.transact(() => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
ytext.delete(start, patch.search.length);
|
|
29
|
-
ytext.insert(start, patch.replace);
|
|
46
|
+
const current = ytext.toString();
|
|
47
|
+
const updated = (0, hashline_tags_1.joinContentLines)(applyPatchToLines((0, hashline_tags_1.splitContentLines)(current), patchText));
|
|
48
|
+
ytext.delete(0, current.length);
|
|
49
|
+
if (updated.length > 0) {
|
|
50
|
+
ytext.insert(0, updated);
|
|
30
51
|
}
|
|
31
52
|
});
|
|
32
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-hashline-diff.js","sourceRoot":"","sources":["../../../src/lib/session-artifacts/parse-hashline-diff.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"parse-hashline-diff.js","sourceRoot":"","sources":["../../../src/lib/session-artifacts/parse-hashline-diff.ts"],"names":[],"mappings":";;AAiBA,oCAmBC;AAUD,8CASC;AAED,gCAcC;AAtED,mDAKwB;AAQxB,MAAM,aAAa,GACjB,+DAA+D,CAAA;AAEjE,SAAgB,YAAY,CAAC,KAAa;IACxC,MAAM,OAAO,GAAY,EAAE,CAAA;IAE3B,IAAI,KAA6B,CAAA;IAEjC,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpD,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACtB,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAChC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YACtB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YAChB,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAgB;IACjD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,IAAA,6BAAa,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAA;QACrD,MAAM,UAAU,GAAG,IAAA,6BAAa,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAA;QACvD,OAAO,UAAU,GAAG,SAAS,CAAA;IAC/B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,iBAAiB,CAAC,KAAe,EAAE,SAAiB;IAClE,MAAM,OAAO,GAAG,yBAAyB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAA;IAElE,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,SAAS,GAAG,IAAA,oCAAoB,EAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACzE,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAgB,UAAU,CAAC,KAAa,EAAE,SAAiB;;IACzD,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAC3D,CAAC;IAED,MAAA,KAAK,CAAC,GAAG,0CAAE,QAAQ,CAAC,GAAG,EAAE;QACvB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAChC,MAAM,OAAO,GAAG,IAAA,gCAAgB,EAAC,iBAAiB,CAAC,IAAA,iCAAiB,EAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAA;QAC1F,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAC/B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface WrapHtmlFragmentOptions {
|
|
2
|
+
title?: string;
|
|
3
|
+
lang?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function isHtmlFragment(content: string): boolean;
|
|
6
|
+
export declare function wrapHtmlFragment(fragment: string, options?: WrapHtmlFragmentOptions): string;
|
|
7
|
+
export declare function prepareHtmlArtifactContent(content: string, options?: {
|
|
8
|
+
fragment?: boolean;
|
|
9
|
+
title?: string;
|
|
10
|
+
lang?: string;
|
|
11
|
+
}): string;
|
|
12
|
+
//# sourceMappingURL=html-artifact-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-artifact-template.d.ts","sourceRoot":"","sources":["../../../src/lib/session-pages/html-artifact-template.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,MAAM,CAoBhG;AAUD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAClE,MAAM,CAOR"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isHtmlFragment = isHtmlFragment;
|
|
4
|
+
exports.wrapHtmlFragment = wrapHtmlFragment;
|
|
5
|
+
exports.prepareHtmlArtifactContent = prepareHtmlArtifactContent;
|
|
6
|
+
const PICO_CSS_URL = 'https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css';
|
|
7
|
+
const FULL_HTML_DOCUMENT_PATTERN = /<!DOCTYPE\s+html|<html[\s>]/i;
|
|
8
|
+
function isHtmlFragment(content) {
|
|
9
|
+
return !FULL_HTML_DOCUMENT_PATTERN.test(content.trim());
|
|
10
|
+
}
|
|
11
|
+
function wrapHtmlFragment(fragment, options = {}) {
|
|
12
|
+
var _a, _b;
|
|
13
|
+
const lang = (_a = options.lang) !== null && _a !== void 0 ? _a : 'en';
|
|
14
|
+
const title = ((_b = options.title) === null || _b === void 0 ? void 0 : _b.trim()) || 'Page';
|
|
15
|
+
const body = fragment.trim();
|
|
16
|
+
return `<!DOCTYPE html>
|
|
17
|
+
<html lang="${lang}">
|
|
18
|
+
<head>
|
|
19
|
+
<meta charset="utf-8">
|
|
20
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
21
|
+
<link rel="stylesheet" href="${PICO_CSS_URL}">
|
|
22
|
+
<title>${escapeHtml(title)}</title>
|
|
23
|
+
</head>
|
|
24
|
+
<body>
|
|
25
|
+
<main class="container">
|
|
26
|
+
${body}
|
|
27
|
+
</main>
|
|
28
|
+
</body>
|
|
29
|
+
</html>
|
|
30
|
+
`;
|
|
31
|
+
}
|
|
32
|
+
function escapeHtml(value) {
|
|
33
|
+
return value
|
|
34
|
+
.replace(/&/g, '&')
|
|
35
|
+
.replace(/</g, '<')
|
|
36
|
+
.replace(/>/g, '>')
|
|
37
|
+
.replace(/"/g, '"');
|
|
38
|
+
}
|
|
39
|
+
function prepareHtmlArtifactContent(content, options = {}) {
|
|
40
|
+
const useFragment = options.fragment === true || (options.fragment !== false && isHtmlFragment(content));
|
|
41
|
+
if (!useFragment) {
|
|
42
|
+
return content;
|
|
43
|
+
}
|
|
44
|
+
return wrapHtmlFragment(content, { title: options.title, lang: options.lang });
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=html-artifact-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-artifact-template.js","sourceRoot":"","sources":["../../../src/lib/session-pages/html-artifact-template.ts"],"names":[],"mappings":";;AASA,wCAEC;AAED,4CAoBC;AAUD,gEAUC;AArDD,MAAM,YAAY,GAAG,+DAA+D,CAAA;AAEpF,MAAM,0BAA0B,GAAG,8BAA8B,CAAA;AAOjE,SAAgB,cAAc,CAAC,OAAe;IAC5C,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;AACzD,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,UAAmC,EAAE;;IACtF,MAAM,IAAI,GAAG,MAAA,OAAO,CAAC,IAAI,mCAAI,IAAI,CAAA;IACjC,MAAM,KAAK,GAAG,CAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,IAAI,EAAE,KAAI,MAAM,CAAA;IAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAA;IAE5B,OAAO;cACK,IAAI;;;;iCAIe,YAAY;WAClC,UAAU,CAAC,KAAK,CAAC;;;;EAI1B,IAAI;;;;CAIL,CAAA;AACD,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC5B,CAAC;AAED,SAAgB,0BAA0B,CACxC,OAAe,EACf,UAAiE,EAAE;IAEnE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,KAAK,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IACxG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,OAAO,gBAAgB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;AAChF,CAAC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export interface SessionArtifactFile {
|
|
2
2
|
path: string;
|
|
3
3
|
content: string;
|
|
4
|
+
/** For .html files: when true, content is a body/main fragment wrapped in a Pico template server-side. */
|
|
5
|
+
fragment?: boolean;
|
|
6
|
+
/** Optional document title when publishing an HTML fragment. */
|
|
7
|
+
title?: string;
|
|
4
8
|
}
|
|
5
9
|
export interface WriteSessionArtifactsInput {
|
|
6
10
|
sessionId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-session-artifacts.d.ts","sourceRoot":"","sources":["../../../src/lib/session-pages/write-session-artifacts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"write-session-artifacts.d.ts","sourceRoot":"","sources":["../../../src/lib/session-pages/write-session-artifacts.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gEAAgE;IAChE,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,CA0BtC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.writeSessionArtifacts = writeSessionArtifacts;
|
|
4
4
|
const session_artifact_yjs_store_1 = require("../../realtime/session-artifact-yjs-store");
|
|
5
|
+
const html_artifact_template_1 = require("./html-artifact-template");
|
|
5
6
|
const paths_1 = require("./paths");
|
|
6
7
|
async function writeSessionArtifacts(input) {
|
|
7
8
|
if (input.files.length === 0) {
|
|
@@ -11,7 +12,13 @@ async function writeSessionArtifacts(input) {
|
|
|
11
12
|
const artifacts = [];
|
|
12
13
|
for (const file of input.files) {
|
|
13
14
|
const relativePath = (0, paths_1.normalizeArtifactPath)(file.path);
|
|
14
|
-
const
|
|
15
|
+
const content = relativePath.toLowerCase().endsWith('.html')
|
|
16
|
+
? (0, html_artifact_template_1.prepareHtmlArtifactContent)(file.content, {
|
|
17
|
+
fragment: file.fragment,
|
|
18
|
+
title: file.title,
|
|
19
|
+
})
|
|
20
|
+
: file.content;
|
|
21
|
+
const published = await store.initializeFromContent(input.sessionId, relativePath, content);
|
|
15
22
|
artifacts.push({
|
|
16
23
|
path: published.path,
|
|
17
24
|
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":";;AA2BA,sDA4BC;AAvDD,0FAAsF;AACtF,qEAAqE;AACrE,mCAA+C;AAyBxC,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;gBACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC;YACJ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAA;QAClB,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;QAC3F,SAAS,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,KAAK,EAAE,SAAS,CAAC,KAAK;SACvB,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,SAAS;KACV,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-events.d.ts","sourceRoot":"","sources":["../../../src/lib/socket/artifact-events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"artifact-events.d.ts","sourceRoot":"","sources":["../../../src/lib/socket/artifact-events.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB,EAAG,iBAA0B,CAAA;AAE/D,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAiBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAavF;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAKjG"}
|
|
@@ -5,6 +5,7 @@ exports.emitArtifactUpdate = emitArtifactUpdate;
|
|
|
5
5
|
exports.emitArtifactUpdateToUsers = emitArtifactUpdateToUsers;
|
|
6
6
|
const ai_agent_types_1 = require("@multiplayer-app/ai-agent-types");
|
|
7
7
|
const context_1 = require("../../context");
|
|
8
|
+
const logger_1 = require("../../logger");
|
|
8
9
|
exports.ARTIFACT_UPDATE_EVENT = 'artifact:update';
|
|
9
10
|
function getSocketIO() {
|
|
10
11
|
try {
|
|
@@ -17,8 +18,14 @@ function getSocketIO() {
|
|
|
17
18
|
}
|
|
18
19
|
function emitArtifactUpdate(userId, payload) {
|
|
19
20
|
const io = getSocketIO();
|
|
20
|
-
if (!io
|
|
21
|
+
if (!io) {
|
|
22
|
+
(0, logger_1.getBuilderApiLogger)().warn('Artifact update not emitted — Socket.IO unavailable');
|
|
21
23
|
return;
|
|
24
|
+
}
|
|
25
|
+
if (!userId) {
|
|
26
|
+
(0, logger_1.getBuilderApiLogger)().warn('Artifact update not emitted — missing userId');
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
22
29
|
const userRoom = `${ai_agent_types_1.SocketIOConfig.UserRoomPrefix}${userId}`;
|
|
23
30
|
io.to(userRoom).emit(exports.ARTIFACT_UPDATE_EVENT, payload);
|
|
24
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-events.js","sourceRoot":"","sources":["../../../src/lib/socket/artifact-events.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"artifact-events.js","sourceRoot":"","sources":["../../../src/lib/socket/artifact-events.ts"],"names":[],"mappings":";;;AA+BA,gDAaC;AAED,8DAKC;AAlDD,oEAAgE;AAChE,2CAA+C;AAC/C,yCAAkD;AAErC,QAAA,qBAAqB,GAAG,iBAA0B,CAAA;AAiB/D,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,yBAAe,GAAE,CAAA;QACjC,OAAQ,OAA6C,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;IAC7E,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAc,EAAE,OAA8B;IAC/E,MAAM,EAAE,GAAG,WAAW,EAAE,CAAA;IACxB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,IAAA,4BAAmB,GAAE,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;QACjF,OAAM;IACR,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAA,4BAAmB,GAAE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAA;QAC1E,OAAM;IACR,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,+BAAc,CAAC,cAAc,GAAG,MAAM,EAAE,CAAA;IAC5D,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,6BAAqB,EAAE,OAAO,CAAC,CAAA;AACtD,CAAC;AAED,SAAgB,yBAAyB,CAAC,OAAiB,EAAE,OAA8B;IACzF,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACpD,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;QAC5B,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,CAAC;AACH,CAAC"}
|
package/dist/lib/sql-schema.d.ts
CHANGED
|
@@ -11,8 +11,14 @@ export interface SqlTableSchema {
|
|
|
11
11
|
name: string;
|
|
12
12
|
columns: SqlTableColumn[];
|
|
13
13
|
}
|
|
14
|
+
export interface SqlDatabaseSchema {
|
|
15
|
+
name: string;
|
|
16
|
+
label?: string;
|
|
17
|
+
dialect?: string;
|
|
18
|
+
tables: SqlTableSchema[];
|
|
19
|
+
}
|
|
14
20
|
export interface SqlSchemaProvider {
|
|
15
|
-
|
|
21
|
+
listDatabases(): Promise<SqlDatabaseSchema[]>;
|
|
16
22
|
}
|
|
17
23
|
export interface SqlQueryResult {
|
|
18
24
|
columns: string[];
|
|
@@ -20,4 +26,5 @@ export interface SqlQueryResult {
|
|
|
20
26
|
rowCount: number;
|
|
21
27
|
durationMs: number;
|
|
22
28
|
}
|
|
29
|
+
export type SqlExecutor = (query: string, databaseName: string) => Promise<SqlQueryResult>;
|
|
23
30
|
//# sourceMappingURL=sql-schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-schema.d.ts","sourceRoot":"","sources":["../../src/lib/sql-schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,YAAY,EAAE,OAAO,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,cAAc,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,
|
|
1
|
+
{"version":3,"file":"sql-schema.d.ts","sourceRoot":"","sources":["../../src/lib/sql-schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,YAAY,EAAE,OAAO,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,cAAc,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAA;CAC9C;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAA"}
|
|
@@ -26,6 +26,13 @@ export declare class SessionArtifactYjsStore {
|
|
|
26
26
|
applyPatchText(sessionId: string, artifactPath: string, patchText: string): Promise<{
|
|
27
27
|
path: string;
|
|
28
28
|
}>;
|
|
29
|
+
/** Notebook content lives in the 'xml' fragment (TipTap/y-prosemirror document). */
|
|
30
|
+
getNotebookFragment(accountId: string, notebookId: string): Promise<Y.XmlFragment>;
|
|
31
|
+
/**
|
|
32
|
+
* Mutates the notebook document in a single transaction, broadcasts the update to
|
|
33
|
+
* connected editors, and persists state immediately.
|
|
34
|
+
*/
|
|
35
|
+
mutateNotebook(accountId: string, notebookId: string, mutator: (fragment: Y.XmlFragment, doc: Y.Doc) => void): Promise<void>;
|
|
29
36
|
evictDocument(sessionId: string, artifactPath: string): void;
|
|
30
37
|
resetFromFileContent(sessionId: string, artifactPath: string): Promise<void>;
|
|
31
38
|
schedulePersist(documentIdentifier: string, doc: Y.Doc): void;
|