@openclawbrain/openclaw 0.1.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/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # @openclawbrain/openclaw
2
+
3
+ OpenClaw-facing runtime integration helpers for the TypeScript-first OpenClawBrain stack.
4
+
5
+ Use this package when OpenClaw needs a narrow, typed bridge over promoted packs without giving up runtime ownership:
6
+
7
+ - resolve the active promoted pack from activation pointers
8
+ - consume `runtime_compile.v1` through a strict fail-open helper
9
+ - emit normalized interaction and feedback events for learner handoff
10
+ - optionally write learner-facing event-export bundles on disk
11
+
12
+ ```ts
13
+ import { compileRuntimeContext, runRuntimeTurn } from "@openclawbrain/openclaw";
14
+
15
+ const compileResult = compileRuntimeContext({
16
+ activationRoot: "/var/openclawbrain/activation",
17
+ message: "feedback scanner route gating",
18
+ runtimeHints: ["feedback scanner"]
19
+ });
20
+
21
+ const turnResult = runRuntimeTurn(
22
+ {
23
+ sessionId: "session-123",
24
+ channel: "whatsapp",
25
+ userMessage: "feedback scanner route gating",
26
+ compile: {
27
+ createdAt: "2026-03-07T17:01:00.000Z"
28
+ },
29
+ delivery: {
30
+ createdAt: "2026-03-07T17:02:00.000Z",
31
+ messageId: "msg-123"
32
+ },
33
+ export: {
34
+ rootDir: "/var/openclawbrain/exports/session-123"
35
+ }
36
+ },
37
+ {
38
+ activationRoot: "/var/openclawbrain/activation"
39
+ }
40
+ );
41
+ ```
42
+
43
+ This package stays fail-open by default: compile failures fall back to standard OpenClaw context injection, and event-export write failures do not erase successful compile output.
@@ -0,0 +1,148 @@
1
+ import { type ActivationPointerRecordV1, type FeedbackEventKind, type NormalizedEventExportV1, type RouteMode, type RuntimeCompileResponseV1 } from "@openclawbrain/contracts";
2
+ import { type ActivationSlotInspection } from "@openclawbrain/pack-format";
3
+ declare const RUNTIME_EVENT_EXPORT_BUNDLE_CONTRACT: "normalized_event_export_bundle.v1";
4
+ export declare const RUNTIME_EVENT_EXPORT_BUNDLE_LAYOUT: {
5
+ readonly manifest: "manifest.json";
6
+ readonly payload: "normalized-event-export.json";
7
+ };
8
+ export interface RuntimeEventExportBundleSummaryV1 {
9
+ runtimeOwner: "openclaw";
10
+ sessionId: string | null;
11
+ channel: string | null;
12
+ eventRange: Pick<NormalizedEventExportV1["range"], "start" | "end" | "count">;
13
+ interactionCount: number;
14
+ feedbackCount: number;
15
+ sourceStreams: string[];
16
+ contracts: NormalizedEventExportV1["provenance"]["contracts"];
17
+ }
18
+ export interface RuntimeEventExportBundleManifestV1 {
19
+ contract: typeof RUNTIME_EVENT_EXPORT_BUNDLE_CONTRACT;
20
+ exportName: string;
21
+ exportedAt: string;
22
+ payloadPath: string;
23
+ payloadDigest: string;
24
+ summary: RuntimeEventExportBundleSummaryV1;
25
+ }
26
+ export interface RuntimeEventExportBundleDescriptor {
27
+ rootDir: string;
28
+ manifestPath: string;
29
+ payloadPath: string;
30
+ manifest: RuntimeEventExportBundleManifestV1;
31
+ normalizedEventExport: NormalizedEventExportV1;
32
+ }
33
+ export interface CompileRuntimeContextInput {
34
+ activationRoot: string;
35
+ message: string;
36
+ agentId?: string;
37
+ maxContextBlocks?: number;
38
+ mode?: RouteMode;
39
+ runtimeHints?: readonly string[];
40
+ }
41
+ export interface ActiveCompileTarget {
42
+ activationRoot: string;
43
+ activePointer: ActivationPointerRecordV1;
44
+ inspection: ActivationSlotInspection;
45
+ }
46
+ export interface RuntimeCompileSuccess {
47
+ ok: true;
48
+ fallbackToStaticContext: false;
49
+ activationRoot: string;
50
+ activePackId: string;
51
+ packRootDir: string;
52
+ compileResponse: RuntimeCompileResponseV1;
53
+ brainContext: string;
54
+ }
55
+ export interface RuntimeCompileFailure {
56
+ ok: false;
57
+ fallbackToStaticContext: true;
58
+ activationRoot: string;
59
+ error: string;
60
+ brainContext: string;
61
+ }
62
+ export type RuntimeCompileResult = RuntimeCompileSuccess | RuntimeCompileFailure;
63
+ export interface RuntimeTurnCompileInput {
64
+ createdAt?: string | null;
65
+ sequence?: number | null;
66
+ eventId?: string | null;
67
+ }
68
+ export interface RuntimeTurnDeliveryInput {
69
+ createdAt?: string | null;
70
+ sequence?: number | null;
71
+ eventId?: string | null;
72
+ messageId?: string | null;
73
+ }
74
+ export interface RuntimeTurnFeedbackInput {
75
+ content: string;
76
+ createdAt?: string | null;
77
+ sequence?: number | null;
78
+ eventId?: string | null;
79
+ kind?: FeedbackEventKind | null;
80
+ messageId?: string | null;
81
+ relatedInteractionId?: string | null;
82
+ }
83
+ export interface RuntimeTurnExportInput {
84
+ rootDir: string;
85
+ exportName?: string | null;
86
+ exportedAt?: string | null;
87
+ }
88
+ export interface OpenClawRuntimeTurnInput {
89
+ activationRoot?: string | null;
90
+ agentId?: string | null;
91
+ sessionId: string;
92
+ channel: string;
93
+ sourceStream?: string | null;
94
+ userMessage: string;
95
+ createdAt?: string | null;
96
+ sequenceStart?: number | null;
97
+ maxContextBlocks?: number;
98
+ mode?: RouteMode;
99
+ runtimeHints?: readonly string[];
100
+ compile?: RuntimeTurnCompileInput | null;
101
+ delivery?: boolean | RuntimeTurnDeliveryInput | null;
102
+ feedback?: readonly (RuntimeTurnFeedbackInput | null)[] | null;
103
+ export?: RuntimeTurnExportInput | null;
104
+ }
105
+ export interface RuntimeEventExportNoWrite {
106
+ ok: true;
107
+ wroteBundle: false;
108
+ normalizedEventExport: NormalizedEventExportV1;
109
+ }
110
+ export interface RuntimeEventExportWriteSuccess {
111
+ ok: true;
112
+ wroteBundle: true;
113
+ normalizedEventExport: NormalizedEventExportV1;
114
+ rootDir: string;
115
+ manifestPath: string;
116
+ payloadPath: string;
117
+ manifest: RuntimeEventExportBundleManifestV1;
118
+ }
119
+ export interface RuntimeEventExportFailure {
120
+ ok: false;
121
+ wroteBundle: false;
122
+ error: string;
123
+ }
124
+ export type RuntimeEventExportResult = RuntimeEventExportNoWrite | RuntimeEventExportWriteSuccess | RuntimeEventExportFailure;
125
+ export interface RunRuntimeTurnOptions {
126
+ activationRoot?: string;
127
+ failOpen?: boolean;
128
+ }
129
+ export type RuntimeTurnResult = RuntimeCompileResult & {
130
+ eventExport: RuntimeEventExportResult;
131
+ warnings: string[];
132
+ };
133
+ export declare function buildRuntimeEventExportBundleManifest(input: {
134
+ exportName: string;
135
+ exportedAt: string;
136
+ payloadPath: string;
137
+ normalizedEventExport: NormalizedEventExportV1;
138
+ }): RuntimeEventExportBundleManifestV1;
139
+ export declare function validateRuntimeEventExportBundleManifest(value: RuntimeEventExportBundleManifestV1, normalizedEventExport?: NormalizedEventExportV1): string[];
140
+ export declare function loadRuntimeEventExportBundle(rootDir: string): RuntimeEventExportBundleDescriptor;
141
+ export declare function classifyFeedbackKind(content: string): FeedbackEventKind;
142
+ export declare function formatPromptContext(compileResponse: RuntimeCompileResponseV1): string;
143
+ export declare function resolveActivePackForCompile(activationRoot: string): ActiveCompileTarget;
144
+ export declare function compileRuntimeContext(input: CompileRuntimeContextInput): RuntimeCompileResult;
145
+ export declare function buildNormalizedRuntimeEventExport(turn: OpenClawRuntimeTurnInput, compileResult: RuntimeCompileResult): NormalizedEventExportV1;
146
+ export declare function writeRuntimeEventExportBundle(turn: OpenClawRuntimeTurnInput, normalizedEventExport: NormalizedEventExportV1): RuntimeEventExportNoWrite | RuntimeEventExportWriteSuccess;
147
+ export declare function runRuntimeTurn(turn: OpenClawRuntimeTurnInput, options?: RunRuntimeTurnOptions): RuntimeTurnResult;
148
+ export {};
@@ -0,0 +1,495 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import process from "node:process";
5
+ import { compileRuntime } from "@openclawbrain/compiler";
6
+ import { CONTRACT_IDS, buildNormalizedEventExport, canonicalJson, checksumJsonPayload, createFeedbackEvent, createInteractionEvent, validateNormalizedEventExport } from "@openclawbrain/contracts";
7
+ import { inspectActivationState } from "@openclawbrain/pack-format";
8
+ const DEFAULT_AGENT_ID = "openclaw-runtime";
9
+ const FEEDBACK_KINDS = new Set(["correction", "teaching", "approval", "suppression"]);
10
+ const RUNTIME_EVENT_EXPORT_BUNDLE_CONTRACT = "normalized_event_export_bundle.v1";
11
+ export const RUNTIME_EVENT_EXPORT_BUNDLE_LAYOUT = {
12
+ manifest: "manifest.json",
13
+ payload: "normalized-event-export.json"
14
+ };
15
+ function toErrorMessage(error) {
16
+ return error instanceof Error ? error.message : String(error);
17
+ }
18
+ function readJsonFile(filePath) {
19
+ return JSON.parse(readFileSync(filePath, "utf8"));
20
+ }
21
+ function resolveBundlePayloadPath(rootDir, payloadPath) {
22
+ const resolved = path.resolve(rootDir, payloadPath);
23
+ const relative = path.relative(rootDir, resolved);
24
+ if (path.isAbsolute(payloadPath) || relative.startsWith("..") || relative === "") {
25
+ throw new Error("event export bundle payloadPath must stay within the bundle root");
26
+ }
27
+ return resolved;
28
+ }
29
+ export function buildRuntimeEventExportBundleManifest(input) {
30
+ return {
31
+ contract: RUNTIME_EVENT_EXPORT_BUNDLE_CONTRACT,
32
+ exportName: input.exportName,
33
+ exportedAt: input.exportedAt,
34
+ payloadPath: input.payloadPath,
35
+ payloadDigest: checksumJsonPayload(input.normalizedEventExport),
36
+ summary: {
37
+ runtimeOwner: input.normalizedEventExport.provenance.runtimeOwner,
38
+ sessionId: input.normalizedEventExport.provenance.sessionId,
39
+ channel: input.normalizedEventExport.provenance.channel,
40
+ eventRange: {
41
+ start: input.normalizedEventExport.range.start,
42
+ end: input.normalizedEventExport.range.end,
43
+ count: input.normalizedEventExport.range.count
44
+ },
45
+ interactionCount: input.normalizedEventExport.provenance.interactionCount,
46
+ feedbackCount: input.normalizedEventExport.provenance.feedbackCount,
47
+ sourceStreams: [...input.normalizedEventExport.provenance.sourceStreams],
48
+ contracts: [...input.normalizedEventExport.provenance.contracts]
49
+ }
50
+ };
51
+ }
52
+ export function validateRuntimeEventExportBundleManifest(value, normalizedEventExport) {
53
+ const errors = [];
54
+ if (value.contract !== RUNTIME_EVENT_EXPORT_BUNDLE_CONTRACT) {
55
+ errors.push("normalized_event_export_bundle.v1 contract is required");
56
+ }
57
+ if (value.exportName.length === 0) {
58
+ errors.push("exportName is required");
59
+ }
60
+ if (Number.isNaN(Date.parse(value.exportedAt))) {
61
+ errors.push("exportedAt must be an ISO timestamp");
62
+ }
63
+ if (value.payloadPath.length === 0) {
64
+ errors.push("payloadPath is required");
65
+ }
66
+ if (value.payloadDigest.length === 0) {
67
+ errors.push("payloadDigest is required");
68
+ }
69
+ if (normalizedEventExport !== undefined) {
70
+ const exportErrors = validateNormalizedEventExport(normalizedEventExport);
71
+ if (exportErrors.length > 0) {
72
+ errors.push(...exportErrors);
73
+ }
74
+ const rebuilt = buildRuntimeEventExportBundleManifest({
75
+ exportName: value.exportName,
76
+ exportedAt: value.exportedAt,
77
+ payloadPath: value.payloadPath,
78
+ normalizedEventExport
79
+ });
80
+ if (rebuilt.payloadDigest !== value.payloadDigest) {
81
+ errors.push("event export bundle payloadDigest does not match the supplied normalized event export");
82
+ }
83
+ if (canonicalJson(rebuilt.summary) !== canonicalJson(value.summary)) {
84
+ errors.push("event export bundle summary does not match the supplied normalized event export");
85
+ }
86
+ }
87
+ return errors;
88
+ }
89
+ export function loadRuntimeEventExportBundle(rootDir) {
90
+ const resolvedRoot = path.resolve(rootDir);
91
+ const manifestPath = path.join(resolvedRoot, RUNTIME_EVENT_EXPORT_BUNDLE_LAYOUT.manifest);
92
+ const manifest = readJsonFile(manifestPath);
93
+ const payloadPath = resolveBundlePayloadPath(resolvedRoot, manifest.payloadPath);
94
+ const normalizedEventExport = readJsonFile(payloadPath);
95
+ const validationErrors = validateRuntimeEventExportBundleManifest(manifest, normalizedEventExport);
96
+ if (validationErrors.length > 0) {
97
+ throw new Error(`event export bundle is invalid: ${validationErrors.join("; ")}`);
98
+ }
99
+ return {
100
+ rootDir: resolvedRoot,
101
+ manifestPath,
102
+ payloadPath,
103
+ manifest,
104
+ normalizedEventExport
105
+ };
106
+ }
107
+ function normalizeNonEmptyString(value, fieldName) {
108
+ if (typeof value !== "string" || value.trim().length === 0) {
109
+ throw new Error(`${fieldName} is required`);
110
+ }
111
+ return value.trim();
112
+ }
113
+ function normalizeOptionalString(value) {
114
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
115
+ }
116
+ function normalizeNonNegativeInteger(value, fieldName, fallbackValue) {
117
+ if (value === undefined || value === null) {
118
+ return fallbackValue;
119
+ }
120
+ if (!Number.isInteger(value) || value < 0) {
121
+ throw new Error(`${fieldName} must be a non-negative integer`);
122
+ }
123
+ return value;
124
+ }
125
+ function normalizeIsoTimestamp(value, fieldName, fallbackValue) {
126
+ const candidate = value ?? fallbackValue;
127
+ if (candidate === undefined || candidate === null || candidate === "") {
128
+ throw new Error(`${fieldName} is required`);
129
+ }
130
+ if (typeof candidate !== "string" || Number.isNaN(Date.parse(candidate))) {
131
+ throw new Error(`${fieldName} must be an ISO timestamp`);
132
+ }
133
+ return new Date(candidate).toISOString();
134
+ }
135
+ function normalizeMode(value) {
136
+ return value ?? "heuristic";
137
+ }
138
+ function normalizeRuntimeHints(value) {
139
+ if (value === undefined) {
140
+ return [];
141
+ }
142
+ if (value.some((item) => typeof item !== "string" || item.trim().length === 0)) {
143
+ throw new Error("runtimeHints must be an array of non-empty strings");
144
+ }
145
+ return value.map((item) => item.trim());
146
+ }
147
+ function deterministicEventId(value) {
148
+ const digest = createHash("sha256").update(JSON.stringify(value)).digest("hex");
149
+ return `evt-${digest.slice(0, 16)}`;
150
+ }
151
+ function nextSequenceFactory(startValue = 1) {
152
+ let cursor = normalizeNonNegativeInteger(startValue, "sequenceStart", 1);
153
+ return (explicitValue) => {
154
+ if (explicitValue !== undefined && explicitValue !== null) {
155
+ const normalized = normalizeNonNegativeInteger(explicitValue, "sequence", explicitValue);
156
+ cursor = Math.max(cursor, normalized + 1);
157
+ return normalized;
158
+ }
159
+ const current = cursor;
160
+ cursor += 1;
161
+ return current;
162
+ };
163
+ }
164
+ function isFeedbackKind(value) {
165
+ return FEEDBACK_KINDS.has(value);
166
+ }
167
+ function isPresent(value) {
168
+ return value !== null;
169
+ }
170
+ export function classifyFeedbackKind(content) {
171
+ const normalized = content.trim().toLowerCase();
172
+ if (normalized.length === 0) {
173
+ return "teaching";
174
+ }
175
+ if (/\b(stop|suppress|mute|silence|pause|don't send|do not send)\b/u.test(normalized)) {
176
+ return "suppression";
177
+ }
178
+ if (/\b(approved|approve|looks good|ship it|exactly right|that works)\b/u.test(normalized)) {
179
+ return "approval";
180
+ }
181
+ if (/\b(wrong|incorrect|correction|not right|do this instead|not x[, ]+y)\b/u.test(normalized) ||
182
+ normalized.startsWith("no") ||
183
+ normalized.startsWith("wrong")) {
184
+ return "correction";
185
+ }
186
+ return "teaching";
187
+ }
188
+ export function formatPromptContext(compileResponse) {
189
+ const lines = [
190
+ "[BRAIN_CONTEXT v1]",
191
+ `PACK_ID: ${compileResponse.packId}`,
192
+ `MODE: ${compileResponse.diagnostics.modeEffective}`
193
+ ];
194
+ if (compileResponse.diagnostics.routerIdentity !== null) {
195
+ lines.push(`ROUTER: ${compileResponse.diagnostics.routerIdentity}`);
196
+ }
197
+ if (compileResponse.selectedContext.length > 0) {
198
+ lines.push("");
199
+ }
200
+ for (const block of compileResponse.selectedContext) {
201
+ lines.push(`SOURCE: ${block.source}`);
202
+ lines.push(`BLOCK_ID: ${block.id}`);
203
+ lines.push(block.text.trim());
204
+ lines.push("");
205
+ }
206
+ if (lines[lines.length - 1] === "") {
207
+ lines.pop();
208
+ }
209
+ lines.push("[/BRAIN_CONTEXT]");
210
+ return `${lines.join("\n")}\n`;
211
+ }
212
+ function fallbackCompileResult(error, activationRoot) {
213
+ return {
214
+ ok: false,
215
+ fallbackToStaticContext: true,
216
+ activationRoot: path.resolve(activationRoot),
217
+ error: toErrorMessage(error),
218
+ brainContext: ""
219
+ };
220
+ }
221
+ export function resolveActivePackForCompile(activationRoot) {
222
+ const resolvedActivationRoot = path.resolve(normalizeNonEmptyString(activationRoot, "activationRoot"));
223
+ const inspection = inspectActivationState(resolvedActivationRoot);
224
+ const activePointer = inspection.pointers.active;
225
+ if (inspection.active === null || activePointer === null) {
226
+ throw new Error(`No active pack pointer found in ${resolvedActivationRoot}`);
227
+ }
228
+ if (!inspection.active.activationReady) {
229
+ throw new Error(`Active pack is not activation-ready: ${inspection.active.findings.join("; ")}`);
230
+ }
231
+ return {
232
+ activationRoot: resolvedActivationRoot,
233
+ activePointer,
234
+ inspection: inspection.active
235
+ };
236
+ }
237
+ export function compileRuntimeContext(input) {
238
+ const activationRoot = path.resolve(normalizeNonEmptyString(input.activationRoot, "activationRoot"));
239
+ const agentId = normalizeOptionalString(input.agentId) ?? process.env.OPENCLAWBRAIN_AGENT_ID ?? DEFAULT_AGENT_ID;
240
+ const runtimeHints = normalizeRuntimeHints(input.runtimeHints);
241
+ try {
242
+ const target = resolveActivePackForCompile(activationRoot);
243
+ const compileResponse = compileRuntime(target.activePointer.packRootDir, {
244
+ contract: CONTRACT_IDS.runtimeCompile,
245
+ agentId,
246
+ userMessage: normalizeNonEmptyString(input.message, "message"),
247
+ maxContextBlocks: normalizeNonNegativeInteger(input.maxContextBlocks, "maxContextBlocks", 4),
248
+ modeRequested: normalizeMode(input.mode),
249
+ activePackId: target.activePointer.packId,
250
+ ...(runtimeHints.length > 0 ? { runtimeHints } : {})
251
+ });
252
+ return {
253
+ ok: true,
254
+ fallbackToStaticContext: false,
255
+ activationRoot,
256
+ activePackId: target.activePointer.packId,
257
+ packRootDir: path.resolve(target.activePointer.packRootDir),
258
+ compileResponse,
259
+ brainContext: formatPromptContext(compileResponse)
260
+ };
261
+ }
262
+ catch (error) {
263
+ return fallbackCompileResult(error, activationRoot);
264
+ }
265
+ }
266
+ function buildCompileInteractionEvent(input) {
267
+ if (!input.compileResult.ok) {
268
+ return null;
269
+ }
270
+ const sequence = input.nextSequence(input.turn.compile?.sequence);
271
+ const eventId = normalizeOptionalString(input.turn.compile?.eventId) ?? deterministicEventId({
272
+ channel: input.turn.channel,
273
+ createdAt: input.createdAt,
274
+ kind: "memory_compiled",
275
+ packId: input.compileResult.compileResponse.packId,
276
+ sequence,
277
+ sessionId: input.turn.sessionId,
278
+ source: input.sourceStream
279
+ });
280
+ return createInteractionEvent({
281
+ eventId,
282
+ agentId: input.agentId,
283
+ sessionId: input.turn.sessionId,
284
+ channel: input.turn.channel,
285
+ sequence,
286
+ kind: "memory_compiled",
287
+ createdAt: input.createdAt,
288
+ source: {
289
+ runtimeOwner: "openclaw",
290
+ stream: input.sourceStream
291
+ },
292
+ packId: input.compileResult.compileResponse.packId
293
+ });
294
+ }
295
+ function buildDeliveryInteractionEvent(input) {
296
+ if (input.turn.delivery === undefined || input.turn.delivery === null || input.turn.delivery === false) {
297
+ return null;
298
+ }
299
+ const delivery = typeof input.turn.delivery === "object" ? input.turn.delivery : {};
300
+ const createdAt = normalizeIsoTimestamp(delivery.createdAt, "delivery.createdAt", input.defaultCreatedAt);
301
+ const sequence = input.nextSequence(delivery.sequence);
302
+ const messageId = normalizeOptionalString(delivery.messageId);
303
+ const eventId = normalizeOptionalString(delivery.eventId) ?? deterministicEventId({
304
+ channel: input.turn.channel,
305
+ createdAt,
306
+ kind: "message_delivered",
307
+ messageId: messageId ?? null,
308
+ packId: input.compileResult.ok ? input.compileResult.compileResponse.packId : null,
309
+ sequence,
310
+ sessionId: input.turn.sessionId,
311
+ source: input.sourceStream
312
+ });
313
+ return createInteractionEvent({
314
+ eventId,
315
+ agentId: input.agentId,
316
+ sessionId: input.turn.sessionId,
317
+ channel: input.turn.channel,
318
+ sequence,
319
+ kind: "message_delivered",
320
+ createdAt,
321
+ source: {
322
+ runtimeOwner: "openclaw",
323
+ stream: input.sourceStream
324
+ },
325
+ ...(input.compileResult.ok ? { packId: input.compileResult.compileResponse.packId } : {}),
326
+ ...(messageId !== undefined ? { messageId } : {})
327
+ });
328
+ }
329
+ function buildFeedbackEvents(input) {
330
+ const feedbackItems = input.turn.feedback ?? [];
331
+ return feedbackItems.map((item, index) => {
332
+ if (item === null) {
333
+ throw new Error(`feedback[${index}] must be an object`);
334
+ }
335
+ const content = normalizeNonEmptyString(item.content, `feedback[${index}].content`);
336
+ const createdAt = normalizeIsoTimestamp(item.createdAt, `feedback[${index}].createdAt`, input.defaultCreatedAt);
337
+ const sequence = input.nextSequence(item.sequence);
338
+ const kind = item.kind === undefined || item.kind === null ? classifyFeedbackKind(content) : item.kind;
339
+ if (!isFeedbackKind(kind)) {
340
+ throw new Error(`feedback[${index}].kind must be correction, teaching, approval, or suppression`);
341
+ }
342
+ const messageId = normalizeOptionalString(item.messageId);
343
+ const eventId = normalizeOptionalString(item.eventId) ?? deterministicEventId({
344
+ channel: input.turn.channel,
345
+ content,
346
+ createdAt,
347
+ kind,
348
+ messageId: messageId ?? null,
349
+ sequence,
350
+ sessionId: input.turn.sessionId,
351
+ source: input.sourceStream
352
+ });
353
+ const relatedInteractionId = normalizeOptionalString(item.relatedInteractionId) ?? input.compileInteraction?.eventId;
354
+ return createFeedbackEvent({
355
+ eventId,
356
+ agentId: input.agentId,
357
+ sessionId: input.turn.sessionId,
358
+ channel: input.turn.channel,
359
+ sequence,
360
+ kind,
361
+ createdAt,
362
+ source: {
363
+ runtimeOwner: "openclaw",
364
+ stream: input.sourceStream
365
+ },
366
+ content,
367
+ ...(messageId !== undefined ? { messageId } : {}),
368
+ ...(relatedInteractionId !== undefined ? { relatedInteractionId } : {})
369
+ });
370
+ });
371
+ }
372
+ export function buildNormalizedRuntimeEventExport(turn, compileResult) {
373
+ const agentId = normalizeOptionalString(turn.agentId) ?? process.env.OPENCLAWBRAIN_AGENT_ID ?? DEFAULT_AGENT_ID;
374
+ const sessionId = normalizeNonEmptyString(turn.sessionId, "sessionId");
375
+ const channel = normalizeNonEmptyString(turn.channel, "channel");
376
+ const sourceStream = normalizeOptionalString(turn.sourceStream) ?? `openclaw/runtime/${channel}`;
377
+ const compileCreatedAt = normalizeIsoTimestamp(turn.compile?.createdAt, "compile.createdAt", turn.createdAt);
378
+ const nextSequence = nextSequenceFactory(turn.sequenceStart ?? 1);
379
+ const normalizedTurn = {
380
+ ...turn,
381
+ agentId,
382
+ channel,
383
+ sessionId
384
+ };
385
+ const compileInteraction = buildCompileInteractionEvent({
386
+ turn: normalizedTurn,
387
+ compileResult,
388
+ sourceStream,
389
+ nextSequence,
390
+ createdAt: compileCreatedAt,
391
+ agentId
392
+ });
393
+ const feedbackEvents = buildFeedbackEvents({
394
+ turn: normalizedTurn,
395
+ sourceStream,
396
+ nextSequence,
397
+ defaultCreatedAt: compileCreatedAt,
398
+ compileInteraction,
399
+ agentId
400
+ });
401
+ const deliveryInteraction = buildDeliveryInteractionEvent({
402
+ turn: normalizedTurn,
403
+ compileResult,
404
+ sourceStream,
405
+ nextSequence,
406
+ defaultCreatedAt: compileCreatedAt,
407
+ agentId
408
+ });
409
+ const interactionEvents = [compileInteraction, deliveryInteraction].filter(isPresent);
410
+ if (interactionEvents.length === 0 && feedbackEvents.length === 0) {
411
+ throw new Error("runtime turn did not produce any normalized events");
412
+ }
413
+ const normalizedEventExport = buildNormalizedEventExport({
414
+ interactionEvents,
415
+ feedbackEvents
416
+ });
417
+ const validationErrors = validateNormalizedEventExport(normalizedEventExport);
418
+ if (validationErrors.length > 0) {
419
+ throw new Error(`normalized event export is invalid: ${validationErrors.join("; ")}`);
420
+ }
421
+ return normalizedEventExport;
422
+ }
423
+ export function writeRuntimeEventExportBundle(turn, normalizedEventExport) {
424
+ if (turn.export === undefined || turn.export === null) {
425
+ return {
426
+ ok: true,
427
+ wroteBundle: false,
428
+ normalizedEventExport
429
+ };
430
+ }
431
+ const rootDir = normalizeNonEmptyString(turn.export.rootDir, "export.rootDir");
432
+ const exportName = normalizeOptionalString(turn.export.exportName) ??
433
+ `${turn.sessionId}-${normalizedEventExport.range.start}-${normalizedEventExport.range.end}`;
434
+ const exportedAt = normalizeIsoTimestamp(turn.export.exportedAt, "export.exportedAt", normalizedEventExport.range.lastCreatedAt ?? normalizedEventExport.range.firstCreatedAt ?? new Date().toISOString());
435
+ const resolvedRoot = path.resolve(rootDir);
436
+ const manifest = buildRuntimeEventExportBundleManifest({
437
+ exportName,
438
+ exportedAt,
439
+ payloadPath: RUNTIME_EVENT_EXPORT_BUNDLE_LAYOUT.payload,
440
+ normalizedEventExport
441
+ });
442
+ const manifestPath = path.join(resolvedRoot, RUNTIME_EVENT_EXPORT_BUNDLE_LAYOUT.manifest);
443
+ const payloadPath = path.join(resolvedRoot, manifest.payloadPath);
444
+ mkdirSync(path.dirname(payloadPath), { recursive: true });
445
+ writeFileSync(payloadPath, canonicalJson(normalizedEventExport), "utf8");
446
+ writeFileSync(manifestPath, canonicalJson(manifest), "utf8");
447
+ const descriptor = loadRuntimeEventExportBundle(resolvedRoot);
448
+ return {
449
+ ok: true,
450
+ wroteBundle: true,
451
+ normalizedEventExport,
452
+ rootDir: descriptor.rootDir,
453
+ manifestPath: descriptor.manifestPath,
454
+ payloadPath: descriptor.payloadPath,
455
+ manifest: descriptor.manifest
456
+ };
457
+ }
458
+ export function runRuntimeTurn(turn, options = {}) {
459
+ const agentId = normalizeOptionalString(turn.agentId);
460
+ const compileInput = {
461
+ activationRoot: options.activationRoot ?? normalizeNonEmptyString(turn.activationRoot ?? undefined, "activationRoot"),
462
+ message: normalizeNonEmptyString(turn.userMessage, "userMessage"),
463
+ ...(agentId !== undefined ? { agentId } : {}),
464
+ ...(turn.maxContextBlocks !== undefined ? { maxContextBlocks: turn.maxContextBlocks } : {}),
465
+ ...(turn.mode !== undefined ? { mode: turn.mode } : {}),
466
+ ...(turn.runtimeHints !== undefined ? { runtimeHints: turn.runtimeHints } : {})
467
+ };
468
+ const compileResult = compileRuntimeContext(compileInput);
469
+ const warnings = [];
470
+ try {
471
+ const normalizedEventExport = buildNormalizedRuntimeEventExport(turn, compileResult);
472
+ const eventExport = writeRuntimeEventExportBundle(turn, normalizedEventExport);
473
+ return {
474
+ ...compileResult,
475
+ eventExport,
476
+ warnings
477
+ };
478
+ }
479
+ catch (error) {
480
+ if (options.failOpen === false) {
481
+ throw error;
482
+ }
483
+ warnings.push(toErrorMessage(error));
484
+ return {
485
+ ...compileResult,
486
+ eventExport: {
487
+ ok: false,
488
+ wroteBundle: false,
489
+ error: toErrorMessage(error)
490
+ },
491
+ warnings
492
+ };
493
+ }
494
+ }
495
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@openclawbrain/openclaw",
3
+ "version": "0.1.0",
4
+ "description": "OpenClaw-facing runtime integration helpers for active-pack compile consumption and normalized event emission.",
5
+ "type": "module",
6
+ "main": "./dist/src/index.js",
7
+ "types": "./dist/src/index.d.ts",
8
+ "sideEffects": false,
9
+ "license": "Apache-2.0",
10
+ "author": "Jonathan Gu <jonathangu@gmail.com>",
11
+ "keywords": [
12
+ "openclawbrain",
13
+ "openclaw",
14
+ "runtime",
15
+ "typescript"
16
+ ],
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/jonathangu/openclawbrain.git",
20
+ "directory": "packages/openclaw"
21
+ },
22
+ "homepage": "https://github.com/jonathangu/openclawbrain/tree/main/packages/openclaw#readme",
23
+ "bugs": {
24
+ "url": "https://github.com/jonathangu/openclawbrain/issues"
25
+ },
26
+ "engines": {
27
+ "node": ">=20"
28
+ },
29
+ "exports": {
30
+ ".": {
31
+ "types": "./dist/src/index.d.ts",
32
+ "import": "./dist/src/index.js",
33
+ "default": "./dist/src/index.js"
34
+ },
35
+ "./package.json": "./package.json"
36
+ },
37
+ "files": [
38
+ "dist/src"
39
+ ],
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "scripts": {
44
+ "build": "tsc -b",
45
+ "clean": "tsc -b --clean",
46
+ "prepack": "pnpm run build",
47
+ "test": "node --test dist/test/*.test.js"
48
+ },
49
+ "dependencies": {
50
+ "@openclawbrain/compiler": "workspace:^",
51
+ "@openclawbrain/contracts": "workspace:^",
52
+ "@openclawbrain/learner": "workspace:^",
53
+ "@openclawbrain/pack-format": "workspace:^"
54
+ }
55
+ }