@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.
@@ -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":"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"}
@@ -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"}