@buildlog/types 1.0.0
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/LICENSE +21 -0
- package/README.md +67 -0
- package/dist/index.cjs +456 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2515 -0
- package/dist/index.d.ts +2515 -0
- package/dist/index.js +406 -0
- package/dist/index.js.map +1 -0
- package/package.json +63 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// src/schema.ts
|
|
4
|
+
var EditorTypeSchema = z.enum([
|
|
5
|
+
"cursor",
|
|
6
|
+
"vscode",
|
|
7
|
+
"windsurf",
|
|
8
|
+
"zed",
|
|
9
|
+
"neovim",
|
|
10
|
+
"jetbrains",
|
|
11
|
+
"openclaw",
|
|
12
|
+
"other"
|
|
13
|
+
]);
|
|
14
|
+
var AIProviderSchema = z.enum([
|
|
15
|
+
"claude",
|
|
16
|
+
"gpt",
|
|
17
|
+
"copilot",
|
|
18
|
+
"gemini",
|
|
19
|
+
"other"
|
|
20
|
+
]);
|
|
21
|
+
var ChangeSourceSchema = z.enum([
|
|
22
|
+
"manual",
|
|
23
|
+
"ai_accepted",
|
|
24
|
+
"ai_partial",
|
|
25
|
+
"ai_rejected_then_manual"
|
|
26
|
+
]);
|
|
27
|
+
var NoteCategorySchema = z.enum([
|
|
28
|
+
"explanation",
|
|
29
|
+
"gotcha",
|
|
30
|
+
"tip",
|
|
31
|
+
"warning",
|
|
32
|
+
"todo"
|
|
33
|
+
]);
|
|
34
|
+
var ErrorCategorySchema = z.enum([
|
|
35
|
+
"build",
|
|
36
|
+
"runtime",
|
|
37
|
+
"lint",
|
|
38
|
+
"type",
|
|
39
|
+
"test",
|
|
40
|
+
"other"
|
|
41
|
+
]);
|
|
42
|
+
var BuildlogAuthorSchema = z.object({
|
|
43
|
+
name: z.string().optional(),
|
|
44
|
+
username: z.string().optional(),
|
|
45
|
+
url: z.string().url().optional(),
|
|
46
|
+
avatarUrl: z.string().url().optional()
|
|
47
|
+
});
|
|
48
|
+
var BuildlogProjectSchema = z.object({
|
|
49
|
+
name: z.string().optional(),
|
|
50
|
+
repository: z.string().optional(),
|
|
51
|
+
branch: z.string().optional(),
|
|
52
|
+
commit: z.string().optional()
|
|
53
|
+
});
|
|
54
|
+
var FileSnapshotSchema = z.object({
|
|
55
|
+
path: z.string().min(1),
|
|
56
|
+
content: z.string(),
|
|
57
|
+
language: z.string(),
|
|
58
|
+
sizeBytes: z.number().int().nonnegative().optional(),
|
|
59
|
+
hash: z.string().optional()
|
|
60
|
+
});
|
|
61
|
+
var BuildlogStateSchema = z.object({
|
|
62
|
+
files: z.array(FileSnapshotSchema),
|
|
63
|
+
fileTree: z.array(z.string()).optional()
|
|
64
|
+
});
|
|
65
|
+
var TextSelectionSchema = z.object({
|
|
66
|
+
filePath: z.string(),
|
|
67
|
+
startLine: z.number().int().nonnegative(),
|
|
68
|
+
endLine: z.number().int().nonnegative(),
|
|
69
|
+
text: z.string()
|
|
70
|
+
});
|
|
71
|
+
var CodeBlockSchema = z.object({
|
|
72
|
+
language: z.string(),
|
|
73
|
+
code: z.string(),
|
|
74
|
+
filePath: z.string().optional(),
|
|
75
|
+
startLine: z.number().int().nonnegative().optional()
|
|
76
|
+
});
|
|
77
|
+
var TokenUsageSchema = z.object({
|
|
78
|
+
input: z.number().int().nonnegative().optional(),
|
|
79
|
+
output: z.number().int().nonnegative().optional()
|
|
80
|
+
});
|
|
81
|
+
var LinesChangedSchema = z.object({
|
|
82
|
+
added: z.number().int().nonnegative(),
|
|
83
|
+
removed: z.number().int().nonnegative()
|
|
84
|
+
});
|
|
85
|
+
var NoteReferenceSchema = z.object({
|
|
86
|
+
filePath: z.string(),
|
|
87
|
+
startLine: z.number().int().nonnegative().optional(),
|
|
88
|
+
endLine: z.number().int().nonnegative().optional()
|
|
89
|
+
});
|
|
90
|
+
var BaseEventSchema = z.object({
|
|
91
|
+
id: z.string().uuid(),
|
|
92
|
+
timestamp: z.number().nonnegative(),
|
|
93
|
+
sequence: z.number().int().nonnegative()
|
|
94
|
+
});
|
|
95
|
+
var PromptEventSchema = BaseEventSchema.extend({
|
|
96
|
+
type: z.literal("prompt"),
|
|
97
|
+
content: z.string().min(1),
|
|
98
|
+
contextFiles: z.array(z.string()).optional(),
|
|
99
|
+
selection: TextSelectionSchema.optional(),
|
|
100
|
+
provider: AIProviderSchema.optional(),
|
|
101
|
+
model: z.string().optional()
|
|
102
|
+
});
|
|
103
|
+
var AIResponseEventSchema = BaseEventSchema.extend({
|
|
104
|
+
type: z.literal("ai_response"),
|
|
105
|
+
content: z.string(),
|
|
106
|
+
codeBlocks: z.array(CodeBlockSchema).optional(),
|
|
107
|
+
promptEventId: z.string().uuid().optional(),
|
|
108
|
+
provider: AIProviderSchema.optional(),
|
|
109
|
+
model: z.string().optional(),
|
|
110
|
+
tokenUsage: TokenUsageSchema.optional()
|
|
111
|
+
});
|
|
112
|
+
var CodeChangeEventSchema = BaseEventSchema.extend({
|
|
113
|
+
type: z.literal("code_change"),
|
|
114
|
+
filePath: z.string().min(1),
|
|
115
|
+
diff: z.string(),
|
|
116
|
+
source: ChangeSourceSchema,
|
|
117
|
+
linesChanged: LinesChangedSchema.optional(),
|
|
118
|
+
aiResponseEventId: z.string().uuid().optional()
|
|
119
|
+
});
|
|
120
|
+
var FileCreateEventSchema = BaseEventSchema.extend({
|
|
121
|
+
type: z.literal("file_create"),
|
|
122
|
+
filePath: z.string().min(1),
|
|
123
|
+
content: z.string(),
|
|
124
|
+
language: z.string(),
|
|
125
|
+
source: z.enum(["manual", "ai_accepted"]),
|
|
126
|
+
aiResponseEventId: z.string().uuid().optional()
|
|
127
|
+
});
|
|
128
|
+
var FileDeleteEventSchema = BaseEventSchema.extend({
|
|
129
|
+
type: z.literal("file_delete"),
|
|
130
|
+
filePath: z.string().min(1),
|
|
131
|
+
previousContent: z.string().optional()
|
|
132
|
+
});
|
|
133
|
+
var FileRenameEventSchema = BaseEventSchema.extend({
|
|
134
|
+
type: z.literal("file_rename"),
|
|
135
|
+
fromPath: z.string().min(1),
|
|
136
|
+
toPath: z.string().min(1)
|
|
137
|
+
});
|
|
138
|
+
var TerminalEventSchema = BaseEventSchema.extend({
|
|
139
|
+
type: z.literal("terminal"),
|
|
140
|
+
command: z.string().min(1),
|
|
141
|
+
output: z.string().optional(),
|
|
142
|
+
exitCode: z.number().int().optional(),
|
|
143
|
+
cwd: z.string().optional(),
|
|
144
|
+
durationSeconds: z.number().nonnegative().optional()
|
|
145
|
+
});
|
|
146
|
+
var NoteEventSchema = BaseEventSchema.extend({
|
|
147
|
+
type: z.literal("note"),
|
|
148
|
+
content: z.string().min(1),
|
|
149
|
+
category: NoteCategorySchema.optional(),
|
|
150
|
+
reference: NoteReferenceSchema.optional()
|
|
151
|
+
});
|
|
152
|
+
var CheckpointEventSchema = BaseEventSchema.extend({
|
|
153
|
+
type: z.literal("checkpoint"),
|
|
154
|
+
name: z.string().min(1),
|
|
155
|
+
description: z.string().optional(),
|
|
156
|
+
state: BuildlogStateSchema.optional()
|
|
157
|
+
});
|
|
158
|
+
var ErrorEventSchema = BaseEventSchema.extend({
|
|
159
|
+
type: z.literal("error"),
|
|
160
|
+
message: z.string().min(1),
|
|
161
|
+
category: ErrorCategorySchema,
|
|
162
|
+
filePath: z.string().optional(),
|
|
163
|
+
line: z.number().int().nonnegative().optional(),
|
|
164
|
+
stackTrace: z.string().optional(),
|
|
165
|
+
resolved: z.boolean().optional(),
|
|
166
|
+
resolvedByEventId: z.string().uuid().optional()
|
|
167
|
+
});
|
|
168
|
+
var BuildlogEventSchema = z.discriminatedUnion("type", [
|
|
169
|
+
PromptEventSchema,
|
|
170
|
+
AIResponseEventSchema,
|
|
171
|
+
CodeChangeEventSchema,
|
|
172
|
+
FileCreateEventSchema,
|
|
173
|
+
FileDeleteEventSchema,
|
|
174
|
+
FileRenameEventSchema,
|
|
175
|
+
TerminalEventSchema,
|
|
176
|
+
NoteEventSchema,
|
|
177
|
+
CheckpointEventSchema,
|
|
178
|
+
ErrorEventSchema
|
|
179
|
+
]);
|
|
180
|
+
var BuildlogMetadataSchema = z.object({
|
|
181
|
+
id: z.string().uuid(),
|
|
182
|
+
title: z.string().min(1).max(200),
|
|
183
|
+
description: z.string().max(2e3).optional(),
|
|
184
|
+
author: BuildlogAuthorSchema.optional(),
|
|
185
|
+
createdAt: z.string().datetime(),
|
|
186
|
+
updatedAt: z.string().datetime().optional(),
|
|
187
|
+
durationSeconds: z.number().int().nonnegative(),
|
|
188
|
+
editor: EditorTypeSchema,
|
|
189
|
+
aiProviders: z.array(AIProviderSchema).optional(),
|
|
190
|
+
primaryLanguage: z.string().optional(),
|
|
191
|
+
languages: z.array(z.string()).optional(),
|
|
192
|
+
tags: z.array(z.string().max(50)).max(20).optional(),
|
|
193
|
+
project: BuildlogProjectSchema.optional(),
|
|
194
|
+
custom: z.record(z.unknown()).optional()
|
|
195
|
+
});
|
|
196
|
+
var BuildlogFileSchema = z.object({
|
|
197
|
+
version: z.literal("1.0.0"),
|
|
198
|
+
metadata: BuildlogMetadataSchema,
|
|
199
|
+
initialState: BuildlogStateSchema,
|
|
200
|
+
events: z.array(BuildlogEventSchema),
|
|
201
|
+
finalState: BuildlogStateSchema
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
// src/constants.ts
|
|
205
|
+
var BUILDLOG_VERSION = "1.0.0";
|
|
206
|
+
var BUILDLOG_MIME_TYPE = "application/vnd.buildlog+json";
|
|
207
|
+
var BUILDLOG_EXTENSIONS = [".buildlog", ".vibe"];
|
|
208
|
+
var BUILDLOG_DEFAULT_EXTENSION = ".buildlog";
|
|
209
|
+
var BUILDLOG_MAX_SIZE_BYTES = 10 * 1024 * 1024;
|
|
210
|
+
var BUILDLOG_MAX_EVENTS = 1e4;
|
|
211
|
+
var BUILDLOG_MAX_TITLE_LENGTH = 200;
|
|
212
|
+
var BUILDLOG_MAX_DESCRIPTION_LENGTH = 2e3;
|
|
213
|
+
var BUILDLOG_MAX_TAGS = 20;
|
|
214
|
+
var BUILDLOG_MAX_TAG_LENGTH = 50;
|
|
215
|
+
|
|
216
|
+
// src/utils.ts
|
|
217
|
+
function isBuildlogFile(filename) {
|
|
218
|
+
const lower = filename.toLowerCase();
|
|
219
|
+
return BUILDLOG_EXTENSIONS.some((ext) => lower.endsWith(ext));
|
|
220
|
+
}
|
|
221
|
+
function getBuildlogExtension() {
|
|
222
|
+
return ".buildlog";
|
|
223
|
+
}
|
|
224
|
+
function getBuildlogMimeType() {
|
|
225
|
+
return BUILDLOG_MIME_TYPE;
|
|
226
|
+
}
|
|
227
|
+
function validateBuildlog(data) {
|
|
228
|
+
const result = BuildlogFileSchema.safeParse(data);
|
|
229
|
+
if (result.success) {
|
|
230
|
+
return { valid: true };
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
valid: false,
|
|
234
|
+
errors: result.error.issues.map((issue) => ({
|
|
235
|
+
path: issue.path.join("."),
|
|
236
|
+
message: issue.message,
|
|
237
|
+
code: issue.code
|
|
238
|
+
}))
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function parseBuildlog(json) {
|
|
242
|
+
const data = JSON.parse(json);
|
|
243
|
+
const result = BuildlogFileSchema.parse(data);
|
|
244
|
+
return result;
|
|
245
|
+
}
|
|
246
|
+
function safeParseBuildlog(json) {
|
|
247
|
+
try {
|
|
248
|
+
return parseBuildlog(json);
|
|
249
|
+
} catch {
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function computeStats(buildlog) {
|
|
254
|
+
const stats = {
|
|
255
|
+
durationSeconds: buildlog.metadata.durationSeconds,
|
|
256
|
+
eventCount: buildlog.events.length,
|
|
257
|
+
promptCount: 0,
|
|
258
|
+
responseCount: 0,
|
|
259
|
+
fileCount: buildlog.finalState.files.length,
|
|
260
|
+
linesAdded: 0,
|
|
261
|
+
linesRemoved: 0,
|
|
262
|
+
languages: []
|
|
263
|
+
};
|
|
264
|
+
const languageSet = /* @__PURE__ */ new Set();
|
|
265
|
+
for (const event of buildlog.events) {
|
|
266
|
+
switch (event.type) {
|
|
267
|
+
case "prompt":
|
|
268
|
+
stats.promptCount++;
|
|
269
|
+
break;
|
|
270
|
+
case "ai_response":
|
|
271
|
+
stats.responseCount++;
|
|
272
|
+
break;
|
|
273
|
+
case "code_change":
|
|
274
|
+
if (event.linesChanged) {
|
|
275
|
+
stats.linesAdded += event.linesChanged.added;
|
|
276
|
+
stats.linesRemoved += event.linesChanged.removed;
|
|
277
|
+
}
|
|
278
|
+
break;
|
|
279
|
+
case "file_create":
|
|
280
|
+
languageSet.add(event.language);
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
for (const file of buildlog.finalState.files) {
|
|
285
|
+
languageSet.add(file.language);
|
|
286
|
+
}
|
|
287
|
+
stats.languages = Array.from(languageSet).sort();
|
|
288
|
+
return stats;
|
|
289
|
+
}
|
|
290
|
+
function formatDuration(seconds) {
|
|
291
|
+
const hours = Math.floor(seconds / 3600);
|
|
292
|
+
const minutes = Math.floor(seconds % 3600 / 60);
|
|
293
|
+
const secs = seconds % 60;
|
|
294
|
+
if (hours > 0) {
|
|
295
|
+
return `${hours}:${minutes.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")}`;
|
|
296
|
+
}
|
|
297
|
+
return `${minutes}:${secs.toString().padStart(2, "0")}`;
|
|
298
|
+
}
|
|
299
|
+
function getEventIcon(event) {
|
|
300
|
+
const icons = {
|
|
301
|
+
prompt: "\u{1F4AC}",
|
|
302
|
+
ai_response: "\u{1F916}",
|
|
303
|
+
code_change: "\u270F\uFE0F",
|
|
304
|
+
file_create: "\u{1F4C4}",
|
|
305
|
+
file_delete: "\u{1F5D1}\uFE0F",
|
|
306
|
+
file_rename: "\u{1F4C1}",
|
|
307
|
+
terminal: "\u{1F5A5}\uFE0F",
|
|
308
|
+
note: "\u{1F4DD}",
|
|
309
|
+
checkpoint: "\u{1F6A9}",
|
|
310
|
+
error: "\u274C"
|
|
311
|
+
};
|
|
312
|
+
return icons[event.type];
|
|
313
|
+
}
|
|
314
|
+
function getEventLabel(event) {
|
|
315
|
+
const labels = {
|
|
316
|
+
prompt: "Prompt",
|
|
317
|
+
ai_response: "AI Response",
|
|
318
|
+
code_change: "Code Change",
|
|
319
|
+
file_create: "File Created",
|
|
320
|
+
file_delete: "File Deleted",
|
|
321
|
+
file_rename: "File Renamed",
|
|
322
|
+
terminal: "Terminal",
|
|
323
|
+
note: "Note",
|
|
324
|
+
checkpoint: "Checkpoint",
|
|
325
|
+
error: "Error"
|
|
326
|
+
};
|
|
327
|
+
return labels[event.type];
|
|
328
|
+
}
|
|
329
|
+
function detectLanguage(filePath) {
|
|
330
|
+
const ext = filePath.split(".").pop()?.toLowerCase();
|
|
331
|
+
const languageMap = {
|
|
332
|
+
ts: "typescript",
|
|
333
|
+
tsx: "typescript",
|
|
334
|
+
js: "javascript",
|
|
335
|
+
jsx: "javascript",
|
|
336
|
+
mjs: "javascript",
|
|
337
|
+
cjs: "javascript",
|
|
338
|
+
py: "python",
|
|
339
|
+
rb: "ruby",
|
|
340
|
+
go: "go",
|
|
341
|
+
rs: "rust",
|
|
342
|
+
java: "java",
|
|
343
|
+
kt: "kotlin",
|
|
344
|
+
kts: "kotlin",
|
|
345
|
+
swift: "swift",
|
|
346
|
+
cpp: "cpp",
|
|
347
|
+
cc: "cpp",
|
|
348
|
+
cxx: "cpp",
|
|
349
|
+
c: "c",
|
|
350
|
+
h: "c",
|
|
351
|
+
hpp: "cpp",
|
|
352
|
+
cs: "csharp",
|
|
353
|
+
php: "php",
|
|
354
|
+
css: "css",
|
|
355
|
+
scss: "scss",
|
|
356
|
+
sass: "sass",
|
|
357
|
+
less: "less",
|
|
358
|
+
html: "html",
|
|
359
|
+
htm: "html",
|
|
360
|
+
vue: "vue",
|
|
361
|
+
svelte: "svelte",
|
|
362
|
+
json: "json",
|
|
363
|
+
yaml: "yaml",
|
|
364
|
+
yml: "yaml",
|
|
365
|
+
toml: "toml",
|
|
366
|
+
xml: "xml",
|
|
367
|
+
md: "markdown",
|
|
368
|
+
mdx: "markdown",
|
|
369
|
+
sql: "sql",
|
|
370
|
+
sh: "bash",
|
|
371
|
+
bash: "bash",
|
|
372
|
+
zsh: "bash",
|
|
373
|
+
fish: "fish",
|
|
374
|
+
ps1: "powershell",
|
|
375
|
+
dockerfile: "dockerfile",
|
|
376
|
+
makefile: "makefile",
|
|
377
|
+
cmake: "cmake",
|
|
378
|
+
tf: "terraform",
|
|
379
|
+
hcl: "hcl",
|
|
380
|
+
graphql: "graphql",
|
|
381
|
+
gql: "graphql",
|
|
382
|
+
proto: "protobuf",
|
|
383
|
+
r: "r",
|
|
384
|
+
scala: "scala",
|
|
385
|
+
clj: "clojure",
|
|
386
|
+
ex: "elixir",
|
|
387
|
+
exs: "elixir",
|
|
388
|
+
erl: "erlang",
|
|
389
|
+
hs: "haskell",
|
|
390
|
+
lua: "lua",
|
|
391
|
+
pl: "perl",
|
|
392
|
+
dart: "dart",
|
|
393
|
+
nim: "nim",
|
|
394
|
+
zig: "zig",
|
|
395
|
+
v: "v",
|
|
396
|
+
sol: "solidity"
|
|
397
|
+
};
|
|
398
|
+
return languageMap[ext || ""] || "plaintext";
|
|
399
|
+
}
|
|
400
|
+
function slugify(title) {
|
|
401
|
+
return title.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, 50);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
export { AIProviderSchema, AIResponseEventSchema, BUILDLOG_DEFAULT_EXTENSION, BUILDLOG_EXTENSIONS, BUILDLOG_MAX_DESCRIPTION_LENGTH, BUILDLOG_MAX_EVENTS, BUILDLOG_MAX_SIZE_BYTES, BUILDLOG_MAX_TAGS, BUILDLOG_MAX_TAG_LENGTH, BUILDLOG_MAX_TITLE_LENGTH, BUILDLOG_MIME_TYPE, BUILDLOG_VERSION, BuildlogAuthorSchema, BuildlogEventSchema, BuildlogFileSchema, BuildlogMetadataSchema, BuildlogProjectSchema, BuildlogStateSchema, ChangeSourceSchema, CheckpointEventSchema, CodeBlockSchema, CodeChangeEventSchema, EditorTypeSchema, ErrorCategorySchema, ErrorEventSchema, FileCreateEventSchema, FileDeleteEventSchema, FileRenameEventSchema, FileSnapshotSchema, LinesChangedSchema, NoteCategorySchema, NoteEventSchema, NoteReferenceSchema, PromptEventSchema, TerminalEventSchema, TextSelectionSchema, TokenUsageSchema, computeStats, detectLanguage, formatDuration, getBuildlogExtension, getBuildlogMimeType, getEventIcon, getEventLabel, isBuildlogFile, parseBuildlog, safeParseBuildlog, slugify, validateBuildlog };
|
|
405
|
+
//# sourceMappingURL=index.js.map
|
|
406
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema.ts","../src/constants.ts","../src/utils.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n// =============================================================================\n// ENUMS & PRIMITIVES\n// =============================================================================\n\nexport const EditorTypeSchema = z.enum([\n \"cursor\", \"vscode\", \"windsurf\", \"zed\", \"neovim\", \"jetbrains\", \"openclaw\", \"other\"\n]);\n\nexport const AIProviderSchema = z.enum([\n \"claude\", \"gpt\", \"copilot\", \"gemini\", \"other\"\n]);\n\nexport const ChangeSourceSchema = z.enum([\n \"manual\", \"ai_accepted\", \"ai_partial\", \"ai_rejected_then_manual\"\n]);\n\nexport const NoteCategorySchema = z.enum([\n \"explanation\", \"gotcha\", \"tip\", \"warning\", \"todo\"\n]);\n\nexport const ErrorCategorySchema = z.enum([\n \"build\", \"runtime\", \"lint\", \"type\", \"test\", \"other\"\n]);\n\n// =============================================================================\n// NESTED SCHEMAS\n// =============================================================================\n\nexport const BuildlogAuthorSchema = z.object({\n name: z.string().optional(),\n username: z.string().optional(),\n url: z.string().url().optional(),\n avatarUrl: z.string().url().optional(),\n});\n\nexport const BuildlogProjectSchema = z.object({\n name: z.string().optional(),\n repository: z.string().optional(),\n branch: z.string().optional(),\n commit: z.string().optional(),\n});\n\nexport const FileSnapshotSchema = z.object({\n path: z.string().min(1),\n content: z.string(),\n language: z.string(),\n sizeBytes: z.number().int().nonnegative().optional(),\n hash: z.string().optional(),\n});\n\nexport const BuildlogStateSchema = z.object({\n files: z.array(FileSnapshotSchema),\n fileTree: z.array(z.string()).optional(),\n});\n\nexport const TextSelectionSchema = z.object({\n filePath: z.string(),\n startLine: z.number().int().nonnegative(),\n endLine: z.number().int().nonnegative(),\n text: z.string(),\n});\n\nexport const CodeBlockSchema = z.object({\n language: z.string(),\n code: z.string(),\n filePath: z.string().optional(),\n startLine: z.number().int().nonnegative().optional(),\n});\n\nexport const TokenUsageSchema = z.object({\n input: z.number().int().nonnegative().optional(),\n output: z.number().int().nonnegative().optional(),\n});\n\nexport const LinesChangedSchema = z.object({\n added: z.number().int().nonnegative(),\n removed: z.number().int().nonnegative(),\n});\n\nexport const NoteReferenceSchema = z.object({\n filePath: z.string(),\n startLine: z.number().int().nonnegative().optional(),\n endLine: z.number().int().nonnegative().optional(),\n});\n\n// =============================================================================\n// EVENT SCHEMAS\n// =============================================================================\n\nconst BaseEventSchema = z.object({\n id: z.string().uuid(),\n timestamp: z.number().nonnegative(),\n sequence: z.number().int().nonnegative(),\n});\n\nexport const PromptEventSchema = BaseEventSchema.extend({\n type: z.literal(\"prompt\"),\n content: z.string().min(1),\n contextFiles: z.array(z.string()).optional(),\n selection: TextSelectionSchema.optional(),\n provider: AIProviderSchema.optional(),\n model: z.string().optional(),\n});\n\nexport const AIResponseEventSchema = BaseEventSchema.extend({\n type: z.literal(\"ai_response\"),\n content: z.string(),\n codeBlocks: z.array(CodeBlockSchema).optional(),\n promptEventId: z.string().uuid().optional(),\n provider: AIProviderSchema.optional(),\n model: z.string().optional(),\n tokenUsage: TokenUsageSchema.optional(),\n});\n\nexport const CodeChangeEventSchema = BaseEventSchema.extend({\n type: z.literal(\"code_change\"),\n filePath: z.string().min(1),\n diff: z.string(),\n source: ChangeSourceSchema,\n linesChanged: LinesChangedSchema.optional(),\n aiResponseEventId: z.string().uuid().optional(),\n});\n\nexport const FileCreateEventSchema = BaseEventSchema.extend({\n type: z.literal(\"file_create\"),\n filePath: z.string().min(1),\n content: z.string(),\n language: z.string(),\n source: z.enum([\"manual\", \"ai_accepted\"]),\n aiResponseEventId: z.string().uuid().optional(),\n});\n\nexport const FileDeleteEventSchema = BaseEventSchema.extend({\n type: z.literal(\"file_delete\"),\n filePath: z.string().min(1),\n previousContent: z.string().optional(),\n});\n\nexport const FileRenameEventSchema = BaseEventSchema.extend({\n type: z.literal(\"file_rename\"),\n fromPath: z.string().min(1),\n toPath: z.string().min(1),\n});\n\nexport const TerminalEventSchema = BaseEventSchema.extend({\n type: z.literal(\"terminal\"),\n command: z.string().min(1),\n output: z.string().optional(),\n exitCode: z.number().int().optional(),\n cwd: z.string().optional(),\n durationSeconds: z.number().nonnegative().optional(),\n});\n\nexport const NoteEventSchema = BaseEventSchema.extend({\n type: z.literal(\"note\"),\n content: z.string().min(1),\n category: NoteCategorySchema.optional(),\n reference: NoteReferenceSchema.optional(),\n});\n\nexport const CheckpointEventSchema = BaseEventSchema.extend({\n type: z.literal(\"checkpoint\"),\n name: z.string().min(1),\n description: z.string().optional(),\n state: BuildlogStateSchema.optional(),\n});\n\nexport const ErrorEventSchema = BaseEventSchema.extend({\n type: z.literal(\"error\"),\n message: z.string().min(1),\n category: ErrorCategorySchema,\n filePath: z.string().optional(),\n line: z.number().int().nonnegative().optional(),\n stackTrace: z.string().optional(),\n resolved: z.boolean().optional(),\n resolvedByEventId: z.string().uuid().optional(),\n});\n\nexport const BuildlogEventSchema = z.discriminatedUnion(\"type\", [\n PromptEventSchema,\n AIResponseEventSchema,\n CodeChangeEventSchema,\n FileCreateEventSchema,\n FileDeleteEventSchema,\n FileRenameEventSchema,\n TerminalEventSchema,\n NoteEventSchema,\n CheckpointEventSchema,\n ErrorEventSchema,\n]);\n\n// =============================================================================\n// METADATA SCHEMA\n// =============================================================================\n\nexport const BuildlogMetadataSchema = z.object({\n id: z.string().uuid(),\n title: z.string().min(1).max(200),\n description: z.string().max(2000).optional(),\n author: BuildlogAuthorSchema.optional(),\n createdAt: z.string().datetime(),\n updatedAt: z.string().datetime().optional(),\n durationSeconds: z.number().int().nonnegative(),\n editor: EditorTypeSchema,\n aiProviders: z.array(AIProviderSchema).optional(),\n primaryLanguage: z.string().optional(),\n languages: z.array(z.string()).optional(),\n tags: z.array(z.string().max(50)).max(20).optional(),\n project: BuildlogProjectSchema.optional(),\n custom: z.record(z.unknown()).optional(),\n});\n\n// =============================================================================\n// ROOT FILE SCHEMA\n// =============================================================================\n\nexport const BuildlogFileSchema = z.object({\n version: z.literal(\"1.0.0\"),\n metadata: BuildlogMetadataSchema,\n initialState: BuildlogStateSchema,\n events: z.array(BuildlogEventSchema),\n finalState: BuildlogStateSchema,\n});\n\n// Type inference from schemas\nexport type BuildlogFileFromSchema = z.infer<typeof BuildlogFileSchema>;\nexport type BuildlogEventFromSchema = z.infer<typeof BuildlogEventSchema>;\n","/** Current buildlog schema version */\nexport const BUILDLOG_VERSION = '1.0.0';\n\n/** MIME type for buildlog files */\nexport const BUILDLOG_MIME_TYPE = 'application/vnd.buildlog+json';\n\n/** Valid file extensions for buildlog files */\nexport const BUILDLOG_EXTENSIONS = ['.buildlog', '.vibe'];\n\n/** Default file extension */\nexport const BUILDLOG_DEFAULT_EXTENSION = '.buildlog';\n\n/** Maximum recommended file size for a single buildlog (10MB) */\nexport const BUILDLOG_MAX_SIZE_BYTES = 10 * 1024 * 1024;\n\n/** Maximum recommended events per buildlog */\nexport const BUILDLOG_MAX_EVENTS = 10000;\n\n/** Maximum title length */\nexport const BUILDLOG_MAX_TITLE_LENGTH = 200;\n\n/** Maximum description length */\nexport const BUILDLOG_MAX_DESCRIPTION_LENGTH = 2000;\n\n/** Maximum tags */\nexport const BUILDLOG_MAX_TAGS = 20;\n\n/** Maximum tag length */\nexport const BUILDLOG_MAX_TAG_LENGTH = 50;\n","import type { \n BuildlogFile, \n BuildlogEvent, \n BuildlogStats,\n ValidationResult \n} from './types';\nimport { BuildlogFileSchema } from './schema';\nimport { BUILDLOG_EXTENSIONS, BUILDLOG_MIME_TYPE } from './constants';\n\n/**\n * Check if a filename has a valid buildlog extension\n */\nexport function isBuildlogFile(filename: string): boolean {\n const lower = filename.toLowerCase();\n return BUILDLOG_EXTENSIONS.some(ext => lower.endsWith(ext));\n}\n\n/**\n * Get the file extension for buildlog files\n */\nexport function getBuildlogExtension(): string {\n return '.buildlog';\n}\n\n/**\n * Get the MIME type for buildlog files\n */\nexport function getBuildlogMimeType(): string {\n return BUILDLOG_MIME_TYPE;\n}\n\n/**\n * Validate a buildlog file\n */\nexport function validateBuildlog(data: unknown): ValidationResult {\n const result = BuildlogFileSchema.safeParse(data);\n \n if (result.success) {\n return { valid: true };\n }\n \n return {\n valid: false,\n errors: result.error.issues.map(issue => ({\n path: issue.path.join('.'),\n message: issue.message,\n code: issue.code,\n })),\n };\n}\n\n/**\n * Parse and validate a buildlog JSON string\n */\nexport function parseBuildlog(json: string): BuildlogFile {\n const data = JSON.parse(json);\n const result = BuildlogFileSchema.parse(data);\n return result as BuildlogFile;\n}\n\n/**\n * Safely parse a buildlog, returning null on failure\n */\nexport function safeParseBuildlog(json: string): BuildlogFile | null {\n try {\n return parseBuildlog(json);\n } catch {\n return null;\n }\n}\n\n/**\n * Compute statistics from a buildlog\n */\nexport function computeStats(buildlog: BuildlogFile): BuildlogStats {\n const stats: BuildlogStats = {\n durationSeconds: buildlog.metadata.durationSeconds,\n eventCount: buildlog.events.length,\n promptCount: 0,\n responseCount: 0,\n fileCount: buildlog.finalState.files.length,\n linesAdded: 0,\n linesRemoved: 0,\n languages: [],\n };\n\n const languageSet = new Set<string>();\n\n for (const event of buildlog.events) {\n switch (event.type) {\n case 'prompt':\n stats.promptCount++;\n break;\n case 'ai_response':\n stats.responseCount++;\n break;\n case 'code_change':\n if (event.linesChanged) {\n stats.linesAdded += event.linesChanged.added;\n stats.linesRemoved += event.linesChanged.removed;\n }\n break;\n case 'file_create':\n languageSet.add(event.language);\n break;\n }\n }\n\n for (const file of buildlog.finalState.files) {\n languageSet.add(file.language);\n }\n\n stats.languages = Array.from(languageSet).sort();\n \n return stats;\n}\n\n/**\n * Format duration in seconds to human readable string\n */\nexport function formatDuration(seconds: number): string {\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n const secs = seconds % 60;\n\n if (hours > 0) {\n return `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n }\n return `${minutes}:${secs.toString().padStart(2, '0')}`;\n}\n\n/**\n * Get event icon for display\n */\nexport function getEventIcon(event: BuildlogEvent): string {\n const icons: Record<BuildlogEvent['type'], string> = {\n prompt: '💬',\n ai_response: '🤖',\n code_change: '✏️',\n file_create: '📄',\n file_delete: '🗑️',\n file_rename: '📁',\n terminal: '🖥️',\n note: '📝',\n checkpoint: '🚩',\n error: '❌',\n };\n return icons[event.type];\n}\n\n/**\n * Get human readable event type label\n */\nexport function getEventLabel(event: BuildlogEvent): string {\n const labels: Record<BuildlogEvent['type'], string> = {\n prompt: 'Prompt',\n ai_response: 'AI Response',\n code_change: 'Code Change',\n file_create: 'File Created',\n file_delete: 'File Deleted',\n file_rename: 'File Renamed',\n terminal: 'Terminal',\n note: 'Note',\n checkpoint: 'Checkpoint',\n error: 'Error',\n };\n return labels[event.type];\n}\n\n/**\n * Detect programming language from file path\n */\nexport function detectLanguage(filePath: string): string {\n const ext = filePath.split('.').pop()?.toLowerCase();\n \n const languageMap: Record<string, string> = {\n ts: 'typescript',\n tsx: 'typescript',\n js: 'javascript',\n jsx: 'javascript',\n mjs: 'javascript',\n cjs: 'javascript',\n py: 'python',\n rb: 'ruby',\n go: 'go',\n rs: 'rust',\n java: 'java',\n kt: 'kotlin',\n kts: 'kotlin',\n swift: 'swift',\n cpp: 'cpp',\n cc: 'cpp',\n cxx: 'cpp',\n c: 'c',\n h: 'c',\n hpp: 'cpp',\n cs: 'csharp',\n php: 'php',\n css: 'css',\n scss: 'scss',\n sass: 'sass',\n less: 'less',\n html: 'html',\n htm: 'html',\n vue: 'vue',\n svelte: 'svelte',\n json: 'json',\n yaml: 'yaml',\n yml: 'yaml',\n toml: 'toml',\n xml: 'xml',\n md: 'markdown',\n mdx: 'markdown',\n sql: 'sql',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n fish: 'fish',\n ps1: 'powershell',\n dockerfile: 'dockerfile',\n makefile: 'makefile',\n cmake: 'cmake',\n tf: 'terraform',\n hcl: 'hcl',\n graphql: 'graphql',\n gql: 'graphql',\n proto: 'protobuf',\n r: 'r',\n scala: 'scala',\n clj: 'clojure',\n ex: 'elixir',\n exs: 'elixir',\n erl: 'erlang',\n hs: 'haskell',\n lua: 'lua',\n pl: 'perl',\n dart: 'dart',\n nim: 'nim',\n zig: 'zig',\n v: 'v',\n sol: 'solidity',\n };\n\n return languageMap[ext || ''] || 'plaintext';\n}\n\n/**\n * Generate a slug from a title\n */\nexport function slugify(title: string): string {\n return title\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '')\n .slice(0, 50);\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@buildlog/types",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Type definitions and schemas for the .buildlog file format",
|
|
5
|
+
"author": "Buildlog <hello@buildlog.ai>",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/buildlog/types.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://buildlog.ai",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"buildlog",
|
|
14
|
+
"vibe-coding",
|
|
15
|
+
"ai",
|
|
16
|
+
"typescript",
|
|
17
|
+
"schema"
|
|
18
|
+
],
|
|
19
|
+
"type": "module",
|
|
20
|
+
"main": "./dist/index.cjs",
|
|
21
|
+
"module": "./dist/index.js",
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"import": {
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"default": "./dist/index.js"
|
|
28
|
+
},
|
|
29
|
+
"require": {
|
|
30
|
+
"types": "./dist/index.d.cts",
|
|
31
|
+
"default": "./dist/index.cjs"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist"
|
|
37
|
+
],
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsup",
|
|
40
|
+
"dev": "tsup --watch",
|
|
41
|
+
"test": "vitest",
|
|
42
|
+
"test:coverage": "vitest --coverage",
|
|
43
|
+
"lint": "eslint src",
|
|
44
|
+
"typecheck": "tsc --noEmit",
|
|
45
|
+
"clean": "rm -rf dist",
|
|
46
|
+
"prepublishOnly": "npm run build"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"zod": "^3.23.0"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@types/node": "^20.0.0",
|
|
53
|
+
"tsup": "^8.0.0",
|
|
54
|
+
"typescript": "^5.4.0",
|
|
55
|
+
"vitest": "^1.4.0",
|
|
56
|
+
"eslint": "^8.57.0",
|
|
57
|
+
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
|
58
|
+
"@typescript-eslint/parser": "^7.0.0"
|
|
59
|
+
},
|
|
60
|
+
"engines": {
|
|
61
|
+
"node": ">=18.0.0"
|
|
62
|
+
}
|
|
63
|
+
}
|