@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/recorder.js
ADDED
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BuildlogRecorder = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* BuildlogRecorder - State machine for recording OpenClaw sessions
|
|
6
|
+
*
|
|
7
|
+
* States: idle -> recording <-> paused -> idle
|
|
8
|
+
*/
|
|
9
|
+
class BuildlogRecorder {
|
|
10
|
+
state = 'idle';
|
|
11
|
+
session = null;
|
|
12
|
+
config;
|
|
13
|
+
eventHandlers = new Map();
|
|
14
|
+
pendingUserMessage = null;
|
|
15
|
+
constructor(config = {}) {
|
|
16
|
+
this.config = {
|
|
17
|
+
includeFileContents: config.includeFileContents ?? true,
|
|
18
|
+
maxFileSizeKb: config.maxFileSizeKb ?? 100,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get current recorder state
|
|
23
|
+
*/
|
|
24
|
+
getState() {
|
|
25
|
+
return this.state;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get current session if recording
|
|
29
|
+
*/
|
|
30
|
+
getSession() {
|
|
31
|
+
return this.session;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if actively recording (not paused)
|
|
35
|
+
*/
|
|
36
|
+
isRecording() {
|
|
37
|
+
return this.state === 'recording';
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Start a new recording session
|
|
41
|
+
*/
|
|
42
|
+
start(title, metadata = {}) {
|
|
43
|
+
if (this.state !== 'idle') {
|
|
44
|
+
throw new Error(`Cannot start recording: currently ${this.state}`);
|
|
45
|
+
}
|
|
46
|
+
this.session = {
|
|
47
|
+
id: this.generateId(),
|
|
48
|
+
title,
|
|
49
|
+
startedAt: Date.now(),
|
|
50
|
+
entries: [],
|
|
51
|
+
notes: [],
|
|
52
|
+
chapters: [],
|
|
53
|
+
metadata: {
|
|
54
|
+
...metadata,
|
|
55
|
+
title,
|
|
56
|
+
createdAt: new Date().toISOString(),
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
this.state = 'recording';
|
|
60
|
+
this.emit('started', { sessionId: this.session.id, title });
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Stop recording and return the session
|
|
64
|
+
*/
|
|
65
|
+
stop() {
|
|
66
|
+
if (this.state === 'idle') {
|
|
67
|
+
throw new Error('Cannot stop: not recording');
|
|
68
|
+
}
|
|
69
|
+
const session = this.session;
|
|
70
|
+
if (session) {
|
|
71
|
+
session.metadata.duration = Date.now() - session.startedAt;
|
|
72
|
+
}
|
|
73
|
+
this.state = 'idle';
|
|
74
|
+
this.session = null;
|
|
75
|
+
this.pendingUserMessage = null;
|
|
76
|
+
this.emit('stopped', { session });
|
|
77
|
+
return session;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Pause recording
|
|
81
|
+
*/
|
|
82
|
+
pause() {
|
|
83
|
+
if (this.state !== 'recording') {
|
|
84
|
+
throw new Error(`Cannot pause: currently ${this.state}`);
|
|
85
|
+
}
|
|
86
|
+
this.state = 'paused';
|
|
87
|
+
this.emit('paused', { sessionId: this.session?.id });
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Resume recording
|
|
91
|
+
*/
|
|
92
|
+
resume() {
|
|
93
|
+
if (this.state !== 'paused') {
|
|
94
|
+
throw new Error(`Cannot resume: currently ${this.state}`);
|
|
95
|
+
}
|
|
96
|
+
this.state = 'recording';
|
|
97
|
+
this.emit('resumed', { sessionId: this.session?.id });
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Process an OpenClaw event
|
|
101
|
+
*/
|
|
102
|
+
handleEvent(event) {
|
|
103
|
+
if (this.state !== 'recording' || !this.session) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
switch (event.type) {
|
|
107
|
+
case 'user_message':
|
|
108
|
+
this.handleUserMessage(event);
|
|
109
|
+
break;
|
|
110
|
+
case 'assistant_message':
|
|
111
|
+
this.handleAssistantMessage(event);
|
|
112
|
+
break;
|
|
113
|
+
case 'file_change':
|
|
114
|
+
this.handleFileChange(event);
|
|
115
|
+
break;
|
|
116
|
+
case 'terminal_command':
|
|
117
|
+
this.handleTerminalCommand(event);
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Add a note at the current position
|
|
123
|
+
*/
|
|
124
|
+
addNote(text) {
|
|
125
|
+
if (!this.session) {
|
|
126
|
+
throw new Error('Cannot add note: no active session');
|
|
127
|
+
}
|
|
128
|
+
this.session.notes.push({
|
|
129
|
+
timestamp: Date.now(),
|
|
130
|
+
text,
|
|
131
|
+
entryIndex: this.session.entries.length,
|
|
132
|
+
});
|
|
133
|
+
this.emit('note_added', { text });
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Add a chapter marker
|
|
137
|
+
*/
|
|
138
|
+
addChapter(title) {
|
|
139
|
+
if (!this.session) {
|
|
140
|
+
throw new Error('Cannot add chapter: no active session');
|
|
141
|
+
}
|
|
142
|
+
this.session.chapters.push({
|
|
143
|
+
title,
|
|
144
|
+
entryIndex: this.session.entries.length,
|
|
145
|
+
timestamp: Date.now(),
|
|
146
|
+
});
|
|
147
|
+
this.emit('chapter_added', { title });
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Mark the last entry as important
|
|
151
|
+
*/
|
|
152
|
+
markImportant() {
|
|
153
|
+
if (!this.session || this.session.entries.length === 0) {
|
|
154
|
+
throw new Error('Cannot mark: no entries');
|
|
155
|
+
}
|
|
156
|
+
const lastEntry = this.session.entries[this.session.entries.length - 1];
|
|
157
|
+
lastEntry.metadata = {
|
|
158
|
+
...lastEntry.metadata,
|
|
159
|
+
important: true,
|
|
160
|
+
};
|
|
161
|
+
this.emit('marked_important', { entryIndex: this.session.entries.length - 1 });
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get recording status
|
|
165
|
+
*/
|
|
166
|
+
getStatus() {
|
|
167
|
+
return {
|
|
168
|
+
state: this.state,
|
|
169
|
+
sessionId: this.session?.id,
|
|
170
|
+
title: this.session?.title,
|
|
171
|
+
entryCount: this.session?.entries.length ?? 0,
|
|
172
|
+
duration: this.session ? Date.now() - this.session.startedAt : 0,
|
|
173
|
+
noteCount: this.session?.notes.length ?? 0,
|
|
174
|
+
chapterCount: this.session?.chapters.length ?? 0,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Convert session to Buildlog format
|
|
179
|
+
*/
|
|
180
|
+
toBuildlog() {
|
|
181
|
+
if (!this.session) {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
version: '1.0.0',
|
|
186
|
+
metadata: {
|
|
187
|
+
id: this.session.id,
|
|
188
|
+
title: this.session.title,
|
|
189
|
+
createdAt: new Date(this.session.startedAt).toISOString(),
|
|
190
|
+
duration: Date.now() - this.session.startedAt,
|
|
191
|
+
entryCount: this.session.entries.length,
|
|
192
|
+
...this.session.metadata,
|
|
193
|
+
},
|
|
194
|
+
entries: this.session.entries,
|
|
195
|
+
chapters: this.session.chapters.map((ch) => ({
|
|
196
|
+
title: ch.title,
|
|
197
|
+
startIndex: ch.entryIndex,
|
|
198
|
+
})),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Subscribe to recorder events
|
|
203
|
+
*/
|
|
204
|
+
on(event, handler) {
|
|
205
|
+
const handlers = this.eventHandlers.get(event) ?? [];
|
|
206
|
+
handlers.push(handler);
|
|
207
|
+
this.eventHandlers.set(event, handlers);
|
|
208
|
+
return () => {
|
|
209
|
+
const idx = handlers.indexOf(handler);
|
|
210
|
+
if (idx >= 0)
|
|
211
|
+
handlers.splice(idx, 1);
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
// Private methods
|
|
215
|
+
handleUserMessage(event) {
|
|
216
|
+
const entry = {
|
|
217
|
+
type: 'user',
|
|
218
|
+
timestamp: event.timestamp,
|
|
219
|
+
content: event.data.content,
|
|
220
|
+
attachments: event.data.attachments?.map((a) => ({
|
|
221
|
+
type: 'file',
|
|
222
|
+
name: a.name,
|
|
223
|
+
content: this.truncateContent(a.content),
|
|
224
|
+
})),
|
|
225
|
+
};
|
|
226
|
+
this.pendingUserMessage = entry;
|
|
227
|
+
this.session.entries.push(entry);
|
|
228
|
+
}
|
|
229
|
+
handleAssistantMessage(event) {
|
|
230
|
+
const entry = {
|
|
231
|
+
type: 'assistant',
|
|
232
|
+
timestamp: event.timestamp,
|
|
233
|
+
content: event.data.content,
|
|
234
|
+
toolCalls: event.data.toolCalls,
|
|
235
|
+
};
|
|
236
|
+
this.session.entries.push(entry);
|
|
237
|
+
this.pendingUserMessage = null;
|
|
238
|
+
}
|
|
239
|
+
handleFileChange(event) {
|
|
240
|
+
const fileChange = event.data;
|
|
241
|
+
// Optionally truncate file content
|
|
242
|
+
if (fileChange.content && !this.config.includeFileContents) {
|
|
243
|
+
delete fileChange.content;
|
|
244
|
+
}
|
|
245
|
+
else if (fileChange.content) {
|
|
246
|
+
fileChange.content = this.truncateContent(fileChange.content);
|
|
247
|
+
}
|
|
248
|
+
const entry = {
|
|
249
|
+
type: 'file_change',
|
|
250
|
+
timestamp: event.timestamp,
|
|
251
|
+
fileChange,
|
|
252
|
+
};
|
|
253
|
+
this.session.entries.push(entry);
|
|
254
|
+
}
|
|
255
|
+
handleTerminalCommand(event) {
|
|
256
|
+
const entry = {
|
|
257
|
+
type: 'terminal',
|
|
258
|
+
timestamp: event.timestamp,
|
|
259
|
+
command: event.data,
|
|
260
|
+
};
|
|
261
|
+
this.session.entries.push(entry);
|
|
262
|
+
}
|
|
263
|
+
truncateContent(content) {
|
|
264
|
+
const maxBytes = this.config.maxFileSizeKb * 1024;
|
|
265
|
+
if (content.length <= maxBytes) {
|
|
266
|
+
return content;
|
|
267
|
+
}
|
|
268
|
+
return content.slice(0, maxBytes) + '\n... [truncated]';
|
|
269
|
+
}
|
|
270
|
+
generateId() {
|
|
271
|
+
return `bl_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
|
|
272
|
+
}
|
|
273
|
+
emit(event, data) {
|
|
274
|
+
const handlers = this.eventHandlers.get(event) ?? [];
|
|
275
|
+
for (const handler of handlers) {
|
|
276
|
+
try {
|
|
277
|
+
handler({ type: event, timestamp: Date.now(), data });
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
console.error(`Error in event handler for ${event}:`, err);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
exports.BuildlogRecorder = BuildlogRecorder;
|
|
286
|
+
//# sourceMappingURL=recorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":";;;AAuEA;;;;GAIG;AACH,MAAa,gBAAgB;IACnB,KAAK,GAAkB,MAAM,CAAC;IAC9B,OAAO,GAA4B,IAAI,CAAC;IACxC,MAAM,CAAiB;IACvB,aAAa,GAAgC,IAAI,GAAG,EAAE,CAAC;IACvD,kBAAkB,GAAyB,IAAI,CAAC;IAExD,YAAY,SAAkC,EAAE;QAC9C,IAAI,CAAC,MAAM,GAAG;YACZ,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,IAAI;YACvD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,GAAG;SAC3C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAa,EAAE,WAAsC,EAAE;QAC3D,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,OAAO,GAAG;YACb,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE;YACrB,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE;gBACR,GAAG,QAAQ;gBACX,KAAK;gBACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC;SACF,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAClC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAoB;QAC9B,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChD,OAAO;QACT,CAAC;QAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,cAAc;gBACjB,IAAI,CAAC,iBAAiB,CAAC,KAAyB,CAAC,CAAC;gBAClD,MAAM;YACR,KAAK,mBAAmB;gBACtB,IAAI,CAAC,sBAAsB,CAAC,KAA8B,CAAC,CAAC;gBAC5D,MAAM;YACR,KAAK,aAAa;gBAChB,IAAI,CAAC,gBAAgB,CAAC,KAAwB,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,kBAAkB;gBACrB,IAAI,CAAC,qBAAqB,CAAC,KAA6B,CAAC,CAAC;gBAC1D,MAAM;QACV,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI;YACJ,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;SACxC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,KAAa;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YACzB,KAAK;YACL,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;YACvC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxE,SAAS,CAAC,QAAQ,GAAG;YACnB,GAAG,SAAS,CAAC,QAAQ;YACrB,SAAS,EAAE,IAAI;SAChB,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,SAAS;QASP,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;YAC3B,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK;YAC1B,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC;YAC7C,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAChE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC;YAC1C,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC;SACjD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE;gBACR,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;gBACnB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gBACzB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;gBACzD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;gBAC7C,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;gBACvC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;aACL;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3C,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,UAAU,EAAE,EAAE,CAAC,UAAU;aAC1B,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,EAAE,CAAC,KAAa,EAAE,OAAqB;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAExC,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,GAAG,IAAI,CAAC;gBAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC;IACJ,CAAC;IAED,kBAAkB;IAEV,iBAAiB,CAAC,KAAuB;QAC/C,MAAM,KAAK,GAAkB;YAC3B,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO;YAC3B,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/C,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC;aACzC,CAAC,CAAC;SACJ,CAAC;QAEF,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,OAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAEO,sBAAsB,CAAC,KAA4B;QACzD,MAAM,KAAK,GAAkB;YAC3B,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO;YAC3B,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;SAChC,CAAC;QAEF,IAAI,CAAC,OAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACjC,CAAC;IAEO,gBAAgB,CAAC,KAAsB;QAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;QAE9B,mCAAmC;QACnC,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC3D,OAAO,UAAU,CAAC,OAAO,CAAC;QAC5B,CAAC;aAAM,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YAC9B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,KAAK,GAAkB;YAC3B,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU;SACX,CAAC;QAEF,IAAI,CAAC,OAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAEO,qBAAqB,CAAC,KAA2B;QACvD,MAAM,KAAK,GAAkB;YAC3B,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,IAAI;SACpB,CAAC;QAEF,IAAI,CAAC,OAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAEO,eAAe,CAAC,OAAe;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,mBAAmB,CAAC;IAC1D,CAAC;IAEO,UAAU;QAChB,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACtE,CAAC;IAEO,IAAI,CAAC,KAAa,EAAE,IAAa;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACrD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAmB,CAAC,CAAC;YACzE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;CACF;AArUD,4CAqUC"}
|
package/dist/skill.d.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { type SessionHistory } from './exporter.js';
|
|
2
|
+
/**
|
|
3
|
+
* OpenClaw Skill interface (provided by OpenClaw runtime)
|
|
4
|
+
*/
|
|
5
|
+
export interface OpenClawContext {
|
|
6
|
+
config: SkillConfig;
|
|
7
|
+
session: {
|
|
8
|
+
id: string;
|
|
9
|
+
history: SessionHistory;
|
|
10
|
+
};
|
|
11
|
+
events: {
|
|
12
|
+
on(event: string, handler: (data: unknown) => void): () => void;
|
|
13
|
+
emit(event: string, data: unknown): void;
|
|
14
|
+
};
|
|
15
|
+
respond(message: string): void;
|
|
16
|
+
ask(question: string): Promise<string>;
|
|
17
|
+
confirm(question: string): Promise<boolean>;
|
|
18
|
+
}
|
|
19
|
+
export interface SkillConfig {
|
|
20
|
+
apiKey?: string;
|
|
21
|
+
autoUpload?: boolean;
|
|
22
|
+
defaultPublic?: boolean;
|
|
23
|
+
includeFileContents?: boolean;
|
|
24
|
+
maxFileSizeKb?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface CommandMatch {
|
|
27
|
+
pattern: RegExp;
|
|
28
|
+
handler: (ctx: OpenClawContext, match: RegExpMatchArray) => Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* BuildlogSkill - Main skill implementation for OpenClaw
|
|
32
|
+
*/
|
|
33
|
+
export declare class BuildlogSkill {
|
|
34
|
+
private recorder;
|
|
35
|
+
private exporter;
|
|
36
|
+
private uploader;
|
|
37
|
+
private config;
|
|
38
|
+
private lastBuildlog;
|
|
39
|
+
private unsubscribers;
|
|
40
|
+
private commands;
|
|
41
|
+
constructor(config?: SkillConfig);
|
|
42
|
+
/**
|
|
43
|
+
* Initialize the skill with OpenClaw context
|
|
44
|
+
*/
|
|
45
|
+
initialize(ctx: OpenClawContext): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Handle a user message and check for commands
|
|
48
|
+
*/
|
|
49
|
+
handleMessage(ctx: OpenClawContext, message: string): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* Cleanup when skill is unloaded
|
|
52
|
+
*/
|
|
53
|
+
dispose(): void;
|
|
54
|
+
private handleStart;
|
|
55
|
+
private handleStop;
|
|
56
|
+
private handlePause;
|
|
57
|
+
private handleResume;
|
|
58
|
+
private handleExport;
|
|
59
|
+
private handleExportLastN;
|
|
60
|
+
private handleUpload;
|
|
61
|
+
private handleShare;
|
|
62
|
+
private handleAddNote;
|
|
63
|
+
private handleAddChapter;
|
|
64
|
+
private handleMarkImportant;
|
|
65
|
+
private handleStatus;
|
|
66
|
+
private handleInfo;
|
|
67
|
+
private subscribeToEvents;
|
|
68
|
+
private sessionToBuildlog;
|
|
69
|
+
private uploadBuildlog;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create and initialize skill instance
|
|
73
|
+
*/
|
|
74
|
+
export declare function createBuildlogSkill(config?: SkillConfig): BuildlogSkill;
|
|
75
|
+
//# sourceMappingURL=skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,cAAc,EAAsB,MAAM,eAAe,CAAC;AAG1F;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,cAAc,CAAC;KACzB,CAAC;IACF,MAAM,EAAE;QACN,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;QAChE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;KAC1C,CAAC;IACF,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3E;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,aAAa,CAAyB;IAG9C,OAAO,CAAC,QAAQ,CAkEd;gBAEU,MAAM,GAAE,WAAgB;IAkBpC;;OAEG;IACG,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrD;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc5E;;OAEG;IACH,OAAO,IAAI,IAAI;YAaD,WAAW;YAYX,UAAU;YAoCV,WAAW;YAUX,YAAY;YAUZ,YAAY;YAYZ,iBAAiB;YAajB,YAAY;YA0BZ,WAAW;YAKX,aAAa;YAgBb,gBAAgB;YAgBhB,mBAAmB;YASnB,YAAY;YA6BZ,UAAU;IAMxB,OAAO,CAAC,iBAAiB;IA0CzB,OAAO,CAAC,iBAAiB;YAmBX,cAAc;CAa7B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,WAAgB,GAAG,aAAa,CAE3E"}
|