@buildlog/openclaw-skill 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 +282 -0
- package/SKILL.md +122 -0
- package/dist/exporter.d.ts +110 -0
- package/dist/exporter.d.ts.map +1 -0
- package/dist/exporter.js +346 -0
- package/dist/exporter.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/recorder.d.ts +145 -0
- package/dist/recorder.d.ts.map +1 -0
- package/dist/recorder.js +286 -0
- package/dist/recorder.js.map +1 -0
- package/dist/skill.d.ts +75 -0
- package/dist/skill.d.ts.map +1 -0
- package/dist/skill.js +394 -0
- package/dist/skill.js.map +1 -0
- package/dist/types.d.ts +63 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/uploader.d.ts +97 -0
- package/dist/uploader.d.ts.map +1 -0
- package/dist/uploader.js +239 -0
- package/dist/uploader.js.map +1 -0
- package/package.json +53 -0
package/dist/exporter.js
ADDED
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BuildlogExporter = void 0;
|
|
4
|
+
exports.exportSession = exportSession;
|
|
5
|
+
const DEFAULT_OPTIONS = {
|
|
6
|
+
includeSystemMessages: false,
|
|
7
|
+
includeFileContents: true,
|
|
8
|
+
maxFileSizeKb: 100,
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* BuildlogExporter - Convert session history to buildlog format
|
|
12
|
+
*
|
|
13
|
+
* Supports retroactive export from session_history
|
|
14
|
+
*/
|
|
15
|
+
class BuildlogExporter {
|
|
16
|
+
options;
|
|
17
|
+
constructor(options = {}) {
|
|
18
|
+
this.options = { ...DEFAULT_OPTIONS, ...options };
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Export a session history to buildlog format
|
|
22
|
+
*/
|
|
23
|
+
export(history) {
|
|
24
|
+
const messages = this.filterMessages(history.messages);
|
|
25
|
+
const entries = this.convertToEntries(messages, history);
|
|
26
|
+
const metadata = this.buildMetadata(history, entries);
|
|
27
|
+
return {
|
|
28
|
+
version: '1.0.0',
|
|
29
|
+
metadata,
|
|
30
|
+
entries,
|
|
31
|
+
chapters: this.detectChapters(entries),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Export only the last N messages
|
|
36
|
+
*/
|
|
37
|
+
exportLastN(history, n) {
|
|
38
|
+
const limitedHistory = {
|
|
39
|
+
...history,
|
|
40
|
+
messages: history.messages.slice(-n),
|
|
41
|
+
};
|
|
42
|
+
return this.export(limitedHistory);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Export a range of messages
|
|
46
|
+
*/
|
|
47
|
+
exportRange(history, start, end) {
|
|
48
|
+
const limitedHistory = {
|
|
49
|
+
...history,
|
|
50
|
+
messages: history.messages.slice(start, end),
|
|
51
|
+
};
|
|
52
|
+
return this.export(limitedHistory);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Merge file changes and terminal commands into the timeline
|
|
56
|
+
*/
|
|
57
|
+
convertToEntries(messages, history) {
|
|
58
|
+
const entries = [];
|
|
59
|
+
// Create a timeline of all events
|
|
60
|
+
const timeline = [];
|
|
61
|
+
// Add messages to timeline
|
|
62
|
+
for (const msg of messages) {
|
|
63
|
+
timeline.push({
|
|
64
|
+
timestamp: msg.timestamp ?? Date.now(),
|
|
65
|
+
type: 'message',
|
|
66
|
+
data: msg,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
// Add file changes to timeline
|
|
70
|
+
if (history.fileChanges) {
|
|
71
|
+
for (const fc of history.fileChanges) {
|
|
72
|
+
timeline.push({
|
|
73
|
+
timestamp: fc.timestamp ?? Date.now(),
|
|
74
|
+
type: 'file',
|
|
75
|
+
data: fc,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Add terminal commands to timeline
|
|
80
|
+
if (history.terminalCommands) {
|
|
81
|
+
for (const cmd of history.terminalCommands) {
|
|
82
|
+
timeline.push({
|
|
83
|
+
timestamp: cmd.timestamp ?? Date.now(),
|
|
84
|
+
type: 'terminal',
|
|
85
|
+
data: cmd,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Sort by timestamp
|
|
90
|
+
timeline.sort((a, b) => a.timestamp - b.timestamp);
|
|
91
|
+
// Convert to entries
|
|
92
|
+
for (const event of timeline) {
|
|
93
|
+
switch (event.type) {
|
|
94
|
+
case 'message':
|
|
95
|
+
entries.push(this.messageToEntry(event.data, event.timestamp));
|
|
96
|
+
break;
|
|
97
|
+
case 'file':
|
|
98
|
+
entries.push(this.fileChangeToEntry(event.data, event.timestamp));
|
|
99
|
+
break;
|
|
100
|
+
case 'terminal':
|
|
101
|
+
entries.push(this.terminalToEntry(event.data, event.timestamp));
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return entries;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Convert a session message to a buildlog entry
|
|
109
|
+
*/
|
|
110
|
+
messageToEntry(message, timestamp) {
|
|
111
|
+
const entry = {
|
|
112
|
+
type: message.role === 'user' ? 'user' : 'assistant',
|
|
113
|
+
timestamp,
|
|
114
|
+
content: message.content,
|
|
115
|
+
};
|
|
116
|
+
if (message.toolCalls && message.toolCalls.length > 0) {
|
|
117
|
+
entry.toolCalls = message.toolCalls.map((tc) => ({
|
|
118
|
+
name: tc.name,
|
|
119
|
+
arguments: tc.arguments,
|
|
120
|
+
result: tc.result,
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
if (message.attachments && message.attachments.length > 0) {
|
|
124
|
+
entry.attachments = message.attachments.map((a) => ({
|
|
125
|
+
type: a.type ?? 'file',
|
|
126
|
+
name: a.name,
|
|
127
|
+
content: this.options.includeFileContents
|
|
128
|
+
? this.truncateContent(a.content)
|
|
129
|
+
: undefined,
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
return entry;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Convert a file change to a buildlog entry
|
|
136
|
+
*/
|
|
137
|
+
fileChangeToEntry(fileChange, timestamp) {
|
|
138
|
+
const fc = { ...fileChange };
|
|
139
|
+
if (!this.options.includeFileContents) {
|
|
140
|
+
delete fc.content;
|
|
141
|
+
delete fc.previousContent;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
if (fc.content) {
|
|
145
|
+
fc.content = this.truncateContent(fc.content);
|
|
146
|
+
}
|
|
147
|
+
if (fc.previousContent) {
|
|
148
|
+
fc.previousContent = this.truncateContent(fc.previousContent);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
type: 'file_change',
|
|
153
|
+
timestamp,
|
|
154
|
+
fileChange: fc,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Convert a terminal command to a buildlog entry
|
|
159
|
+
*/
|
|
160
|
+
terminalToEntry(command, timestamp) {
|
|
161
|
+
return {
|
|
162
|
+
type: 'terminal',
|
|
163
|
+
timestamp,
|
|
164
|
+
command: {
|
|
165
|
+
...command,
|
|
166
|
+
output: command.output ? this.truncateContent(command.output) : undefined,
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Filter messages based on options
|
|
172
|
+
*/
|
|
173
|
+
filterMessages(messages) {
|
|
174
|
+
let filtered = messages;
|
|
175
|
+
// Filter out system messages if not included
|
|
176
|
+
if (!this.options.includeSystemMessages) {
|
|
177
|
+
filtered = filtered.filter((m) => m.role !== 'system');
|
|
178
|
+
}
|
|
179
|
+
// Limit to last N if specified
|
|
180
|
+
if (this.options.lastN && this.options.lastN > 0) {
|
|
181
|
+
filtered = filtered.slice(-this.options.lastN);
|
|
182
|
+
}
|
|
183
|
+
return filtered;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Build metadata for the buildlog
|
|
187
|
+
*/
|
|
188
|
+
buildMetadata(history, entries) {
|
|
189
|
+
const now = new Date().toISOString();
|
|
190
|
+
const timestamps = entries.map((e) => e.timestamp).filter(Boolean);
|
|
191
|
+
const duration = timestamps.length >= 2
|
|
192
|
+
? Math.max(...timestamps) - Math.min(...timestamps)
|
|
193
|
+
: 0;
|
|
194
|
+
return {
|
|
195
|
+
id: this.generateId(),
|
|
196
|
+
title: this.options.title ?? this.inferTitle(history) ?? 'Untitled Session',
|
|
197
|
+
description: this.options.description ?? this.inferDescription(history),
|
|
198
|
+
createdAt: now,
|
|
199
|
+
duration,
|
|
200
|
+
entryCount: entries.length,
|
|
201
|
+
tags: this.options.tags ?? this.inferTags(history),
|
|
202
|
+
author: this.options.author,
|
|
203
|
+
...history.metadata,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Try to infer a title from the session content
|
|
208
|
+
*/
|
|
209
|
+
inferTitle(history) {
|
|
210
|
+
// Look for the first substantial user message
|
|
211
|
+
const firstUserMessage = history.messages.find((m) => m.role === 'user' && m.content.length > 10);
|
|
212
|
+
if (!firstUserMessage) {
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
// Extract first line or first 50 chars
|
|
216
|
+
const content = firstUserMessage.content;
|
|
217
|
+
const firstLine = content.split('\n')[0];
|
|
218
|
+
if (firstLine.length <= 60) {
|
|
219
|
+
return firstLine;
|
|
220
|
+
}
|
|
221
|
+
return firstLine.slice(0, 57) + '...';
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Try to infer a description from the session
|
|
225
|
+
*/
|
|
226
|
+
inferDescription(history) {
|
|
227
|
+
const messageCount = history.messages.filter((m) => m.role !== 'system').length;
|
|
228
|
+
const fileCount = history.fileChanges?.length ?? 0;
|
|
229
|
+
const cmdCount = history.terminalCommands?.length ?? 0;
|
|
230
|
+
const parts = [];
|
|
231
|
+
if (messageCount > 0)
|
|
232
|
+
parts.push(`${messageCount} messages`);
|
|
233
|
+
if (fileCount > 0)
|
|
234
|
+
parts.push(`${fileCount} file changes`);
|
|
235
|
+
if (cmdCount > 0)
|
|
236
|
+
parts.push(`${cmdCount} commands`);
|
|
237
|
+
return parts.length > 0 ? `Session with ${parts.join(', ')}` : undefined;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Try to infer tags from file extensions and content
|
|
241
|
+
*/
|
|
242
|
+
inferTags(history) {
|
|
243
|
+
const tags = new Set();
|
|
244
|
+
// Infer from file extensions
|
|
245
|
+
if (history.fileChanges) {
|
|
246
|
+
for (const fc of history.fileChanges) {
|
|
247
|
+
const ext = fc.path.split('.').pop()?.toLowerCase();
|
|
248
|
+
if (ext) {
|
|
249
|
+
const langMap = {
|
|
250
|
+
ts: 'typescript',
|
|
251
|
+
tsx: 'typescript',
|
|
252
|
+
js: 'javascript',
|
|
253
|
+
jsx: 'javascript',
|
|
254
|
+
py: 'python',
|
|
255
|
+
rs: 'rust',
|
|
256
|
+
go: 'go',
|
|
257
|
+
rb: 'ruby',
|
|
258
|
+
java: 'java',
|
|
259
|
+
cpp: 'c++',
|
|
260
|
+
c: 'c',
|
|
261
|
+
cs: 'csharp',
|
|
262
|
+
swift: 'swift',
|
|
263
|
+
kt: 'kotlin',
|
|
264
|
+
};
|
|
265
|
+
if (langMap[ext]) {
|
|
266
|
+
tags.add(langMap[ext]);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// Look for common keywords in messages
|
|
272
|
+
const allContent = history.messages.map((m) => m.content).join(' ').toLowerCase();
|
|
273
|
+
const keywords = [
|
|
274
|
+
'react', 'vue', 'angular', 'node', 'express', 'api', 'database',
|
|
275
|
+
'testing', 'docker', 'kubernetes', 'aws', 'git', 'debug',
|
|
276
|
+
];
|
|
277
|
+
for (const kw of keywords) {
|
|
278
|
+
if (allContent.includes(kw)) {
|
|
279
|
+
tags.add(kw);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return Array.from(tags).slice(0, 10);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Detect natural chapter breaks in the content
|
|
286
|
+
*/
|
|
287
|
+
detectChapters(entries) {
|
|
288
|
+
const chapters = [];
|
|
289
|
+
for (let i = 0; i < entries.length; i++) {
|
|
290
|
+
const entry = entries[i];
|
|
291
|
+
// Look for user messages that start a new topic
|
|
292
|
+
if (entry.type === 'user' && entry.content) {
|
|
293
|
+
const content = entry.content.toLowerCase();
|
|
294
|
+
// Check for chapter-like phrases
|
|
295
|
+
const chapterPatterns = [
|
|
296
|
+
/^(now|next|let's|let us|can you|please)\s+(create|build|add|implement|fix|update|refactor)/i,
|
|
297
|
+
/^(step|part|phase)\s+\d+/i,
|
|
298
|
+
/^(first|second|third|finally|lastly)/i,
|
|
299
|
+
];
|
|
300
|
+
for (const pattern of chapterPatterns) {
|
|
301
|
+
if (pattern.test(content)) {
|
|
302
|
+
const title = this.extractChapterTitle(entry.content);
|
|
303
|
+
chapters.push({ title, startIndex: i });
|
|
304
|
+
break;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return chapters;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Extract a chapter title from a message
|
|
313
|
+
*/
|
|
314
|
+
extractChapterTitle(content) {
|
|
315
|
+
const firstLine = content.split('\n')[0];
|
|
316
|
+
if (firstLine.length <= 50) {
|
|
317
|
+
return firstLine;
|
|
318
|
+
}
|
|
319
|
+
return firstLine.slice(0, 47) + '...';
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Truncate content to max size
|
|
323
|
+
*/
|
|
324
|
+
truncateContent(content) {
|
|
325
|
+
const maxBytes = (this.options.maxFileSizeKb ?? 100) * 1024;
|
|
326
|
+
if (content.length <= maxBytes) {
|
|
327
|
+
return content;
|
|
328
|
+
}
|
|
329
|
+
return content.slice(0, maxBytes) + '\n... [truncated]';
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Generate a unique ID
|
|
333
|
+
*/
|
|
334
|
+
generateId() {
|
|
335
|
+
return `bl_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
exports.BuildlogExporter = BuildlogExporter;
|
|
339
|
+
/**
|
|
340
|
+
* Convenience function to export a session
|
|
341
|
+
*/
|
|
342
|
+
function exportSession(history, options = {}) {
|
|
343
|
+
const exporter = new BuildlogExporter(options);
|
|
344
|
+
return exporter.export(history);
|
|
345
|
+
}
|
|
346
|
+
//# sourceMappingURL=exporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporter.js","sourceRoot":"","sources":["../src/exporter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @buildlog/openclaw-skill
|
|
3
|
+
*
|
|
4
|
+
* Record, export, and share your AI coding sessions as replayable buildlogs.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { BuildlogSkill, createBuildlogSkill } from '@buildlog/openclaw-skill';
|
|
9
|
+
*
|
|
10
|
+
* const skill = createBuildlogSkill({
|
|
11
|
+
* apiKey: 'your-api-key',
|
|
12
|
+
* autoUpload: false,
|
|
13
|
+
* defaultPublic: true,
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* await skill.initialize(openClawContext);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export { BuildlogSkill, createBuildlogSkill } from './skill.js';
|
|
20
|
+
export type { SkillConfig, OpenClawContext, CommandMatch } from './skill.js';
|
|
21
|
+
export { BuildlogRecorder } from './recorder.js';
|
|
22
|
+
export type { RecorderState, RecorderConfig, RecordingSession, Note, Chapter, OpenClawEvent, UserMessageEvent, AssistantMessageEvent, FileChangeEvent, TerminalCommandEvent, } from './recorder.js';
|
|
23
|
+
export { BuildlogExporter, exportSession } from './exporter.js';
|
|
24
|
+
export type { SessionMessage, SessionHistory, ExportOptions, } from './exporter.js';
|
|
25
|
+
export { BuildlogUploader, UploadError, uploadBuildlog } from './uploader.js';
|
|
26
|
+
export type { UploadConfig, UploadOptions, UploadResult, BuildlogInfo, } from './uploader.js';
|
|
27
|
+
export type { Buildlog, BuildlogEntry, BuildlogMetadata, FileChange, TerminalCommand, BuildlogChapter, } from './types.js';
|
|
28
|
+
import { BuildlogSkill } from './skill.js';
|
|
29
|
+
export default BuildlogSkill;
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EACV,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,IAAI,EACJ,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EACV,cAAc,EACd,cAAc,EACd,aAAa,GACd,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC9E,YAAY,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,eAAe,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @buildlog/openclaw-skill
|
|
4
|
+
*
|
|
5
|
+
* Record, export, and share your AI coding sessions as replayable buildlogs.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { BuildlogSkill, createBuildlogSkill } from '@buildlog/openclaw-skill';
|
|
10
|
+
*
|
|
11
|
+
* const skill = createBuildlogSkill({
|
|
12
|
+
* apiKey: 'your-api-key',
|
|
13
|
+
* autoUpload: false,
|
|
14
|
+
* defaultPublic: true,
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* await skill.initialize(openClawContext);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.uploadBuildlog = exports.UploadError = exports.BuildlogUploader = exports.exportSession = exports.BuildlogExporter = exports.BuildlogRecorder = exports.createBuildlogSkill = exports.BuildlogSkill = void 0;
|
|
22
|
+
// Main skill export
|
|
23
|
+
var skill_js_1 = require("./skill.js");
|
|
24
|
+
Object.defineProperty(exports, "BuildlogSkill", { enumerable: true, get: function () { return skill_js_1.BuildlogSkill; } });
|
|
25
|
+
Object.defineProperty(exports, "createBuildlogSkill", { enumerable: true, get: function () { return skill_js_1.createBuildlogSkill; } });
|
|
26
|
+
// Recorder exports
|
|
27
|
+
var recorder_js_1 = require("./recorder.js");
|
|
28
|
+
Object.defineProperty(exports, "BuildlogRecorder", { enumerable: true, get: function () { return recorder_js_1.BuildlogRecorder; } });
|
|
29
|
+
// Exporter exports
|
|
30
|
+
var exporter_js_1 = require("./exporter.js");
|
|
31
|
+
Object.defineProperty(exports, "BuildlogExporter", { enumerable: true, get: function () { return exporter_js_1.BuildlogExporter; } });
|
|
32
|
+
Object.defineProperty(exports, "exportSession", { enumerable: true, get: function () { return exporter_js_1.exportSession; } });
|
|
33
|
+
// Uploader exports
|
|
34
|
+
var uploader_js_1 = require("./uploader.js");
|
|
35
|
+
Object.defineProperty(exports, "BuildlogUploader", { enumerable: true, get: function () { return uploader_js_1.BuildlogUploader; } });
|
|
36
|
+
Object.defineProperty(exports, "UploadError", { enumerable: true, get: function () { return uploader_js_1.UploadError; } });
|
|
37
|
+
Object.defineProperty(exports, "uploadBuildlog", { enumerable: true, get: function () { return uploader_js_1.uploadBuildlog; } });
|
|
38
|
+
// Default export for OpenClaw skill registration
|
|
39
|
+
const skill_js_2 = require("./skill.js");
|
|
40
|
+
exports.default = skill_js_2.BuildlogSkill;
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AAEH,oBAAoB;AACpB,uCAAgE;AAAvD,yGAAA,aAAa,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAG3C,mBAAmB;AACnB,6CAAiD;AAAxC,+GAAA,gBAAgB,OAAA;AAczB,mBAAmB;AACnB,6CAAgE;AAAvD,+GAAA,gBAAgB,OAAA;AAAE,4GAAA,aAAa,OAAA;AAOxC,mBAAmB;AACnB,6CAA8E;AAArE,+GAAA,gBAAgB,OAAA;AAAE,0GAAA,WAAW,OAAA;AAAE,6GAAA,cAAc,OAAA;AAkBtD,iDAAiD;AACjD,yCAA2C;AAC3C,kBAAe,wBAAa,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { Buildlog, BuildlogEntry, BuildlogMetadata, FileChange, TerminalCommand } from './types.js';
|
|
2
|
+
export type RecorderState = 'idle' | 'recording' | 'paused';
|
|
3
|
+
export interface RecorderConfig {
|
|
4
|
+
includeFileContents: boolean;
|
|
5
|
+
maxFileSizeKb: number;
|
|
6
|
+
}
|
|
7
|
+
export interface Note {
|
|
8
|
+
timestamp: number;
|
|
9
|
+
text: string;
|
|
10
|
+
entryIndex: number;
|
|
11
|
+
}
|
|
12
|
+
export interface Chapter {
|
|
13
|
+
title: string;
|
|
14
|
+
entryIndex: number;
|
|
15
|
+
timestamp: number;
|
|
16
|
+
}
|
|
17
|
+
export interface RecordingSession {
|
|
18
|
+
id: string;
|
|
19
|
+
title: string;
|
|
20
|
+
startedAt: number;
|
|
21
|
+
entries: BuildlogEntry[];
|
|
22
|
+
notes: Note[];
|
|
23
|
+
chapters: Chapter[];
|
|
24
|
+
metadata: Partial<BuildlogMetadata>;
|
|
25
|
+
}
|
|
26
|
+
export interface OpenClawEvent {
|
|
27
|
+
type: 'user_message' | 'assistant_message' | 'file_change' | 'terminal_command' | 'tool_use';
|
|
28
|
+
timestamp: number;
|
|
29
|
+
data: unknown;
|
|
30
|
+
}
|
|
31
|
+
export interface UserMessageEvent extends OpenClawEvent {
|
|
32
|
+
type: 'user_message';
|
|
33
|
+
data: {
|
|
34
|
+
content: string;
|
|
35
|
+
attachments?: Array<{
|
|
36
|
+
name: string;
|
|
37
|
+
content: string;
|
|
38
|
+
}>;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface AssistantMessageEvent extends OpenClawEvent {
|
|
42
|
+
type: 'assistant_message';
|
|
43
|
+
data: {
|
|
44
|
+
content: string;
|
|
45
|
+
toolCalls?: Array<{
|
|
46
|
+
name: string;
|
|
47
|
+
arguments: Record<string, unknown>;
|
|
48
|
+
}>;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export interface FileChangeEvent extends OpenClawEvent {
|
|
52
|
+
type: 'file_change';
|
|
53
|
+
data: FileChange;
|
|
54
|
+
}
|
|
55
|
+
export interface TerminalCommandEvent extends OpenClawEvent {
|
|
56
|
+
type: 'terminal_command';
|
|
57
|
+
data: TerminalCommand;
|
|
58
|
+
}
|
|
59
|
+
type EventHandler = (event: OpenClawEvent) => void;
|
|
60
|
+
/**
|
|
61
|
+
* BuildlogRecorder - State machine for recording OpenClaw sessions
|
|
62
|
+
*
|
|
63
|
+
* States: idle -> recording <-> paused -> idle
|
|
64
|
+
*/
|
|
65
|
+
export declare class BuildlogRecorder {
|
|
66
|
+
private state;
|
|
67
|
+
private session;
|
|
68
|
+
private config;
|
|
69
|
+
private eventHandlers;
|
|
70
|
+
private pendingUserMessage;
|
|
71
|
+
constructor(config?: Partial<RecorderConfig>);
|
|
72
|
+
/**
|
|
73
|
+
* Get current recorder state
|
|
74
|
+
*/
|
|
75
|
+
getState(): RecorderState;
|
|
76
|
+
/**
|
|
77
|
+
* Get current session if recording
|
|
78
|
+
*/
|
|
79
|
+
getSession(): RecordingSession | null;
|
|
80
|
+
/**
|
|
81
|
+
* Check if actively recording (not paused)
|
|
82
|
+
*/
|
|
83
|
+
isRecording(): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Start a new recording session
|
|
86
|
+
*/
|
|
87
|
+
start(title: string, metadata?: Partial<BuildlogMetadata>): void;
|
|
88
|
+
/**
|
|
89
|
+
* Stop recording and return the session
|
|
90
|
+
*/
|
|
91
|
+
stop(): RecordingSession | null;
|
|
92
|
+
/**
|
|
93
|
+
* Pause recording
|
|
94
|
+
*/
|
|
95
|
+
pause(): void;
|
|
96
|
+
/**
|
|
97
|
+
* Resume recording
|
|
98
|
+
*/
|
|
99
|
+
resume(): void;
|
|
100
|
+
/**
|
|
101
|
+
* Process an OpenClaw event
|
|
102
|
+
*/
|
|
103
|
+
handleEvent(event: OpenClawEvent): void;
|
|
104
|
+
/**
|
|
105
|
+
* Add a note at the current position
|
|
106
|
+
*/
|
|
107
|
+
addNote(text: string): void;
|
|
108
|
+
/**
|
|
109
|
+
* Add a chapter marker
|
|
110
|
+
*/
|
|
111
|
+
addChapter(title: string): void;
|
|
112
|
+
/**
|
|
113
|
+
* Mark the last entry as important
|
|
114
|
+
*/
|
|
115
|
+
markImportant(): void;
|
|
116
|
+
/**
|
|
117
|
+
* Get recording status
|
|
118
|
+
*/
|
|
119
|
+
getStatus(): {
|
|
120
|
+
state: RecorderState;
|
|
121
|
+
sessionId?: string;
|
|
122
|
+
title?: string;
|
|
123
|
+
entryCount: number;
|
|
124
|
+
duration: number;
|
|
125
|
+
noteCount: number;
|
|
126
|
+
chapterCount: number;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Convert session to Buildlog format
|
|
130
|
+
*/
|
|
131
|
+
toBuildlog(): Buildlog | null;
|
|
132
|
+
/**
|
|
133
|
+
* Subscribe to recorder events
|
|
134
|
+
*/
|
|
135
|
+
on(event: string, handler: EventHandler): () => void;
|
|
136
|
+
private handleUserMessage;
|
|
137
|
+
private handleAssistantMessage;
|
|
138
|
+
private handleFileChange;
|
|
139
|
+
private handleTerminalCommand;
|
|
140
|
+
private truncateContent;
|
|
141
|
+
private generateId;
|
|
142
|
+
private emit;
|
|
143
|
+
}
|
|
144
|
+
export {};
|
|
145
|
+
//# sourceMappingURL=recorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"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"}
|