@openclawbrain/cli 0.4.4 → 0.4.6

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.
@@ -132,6 +132,48 @@ function loadTrainingStateJson(db, key) {
132
132
  function writeTrainingStateJson(db, key, value) {
133
133
  db.prepare(`INSERT OR REPLACE INTO brain_training_state (key, value) VALUES (?, ?)`).run(key, JSON.stringify(value));
134
134
  }
135
+ function buildTracedLearningRoutingBuildFromServeTime(serveTimeLearning) {
136
+ return {
137
+ learnedRoutingPath: serveTimeLearning.pgVersion === "v2" ? "policy_gradient_v2" : "policy_gradient_v1",
138
+ pgVersionRequested: serveTimeLearning.pgVersion,
139
+ pgVersionUsed: serveTimeLearning.pgVersion,
140
+ decisionLogCount: normalizeCount(serveTimeLearning.decisionLogCount),
141
+ fallbackReason: serveTimeLearning.pgVersion === "v1"
142
+ ? normalizeOptionalString(serveTimeLearning.fallbackReason) ?? "no_serve_time_decisions"
143
+ : null,
144
+ updatedBaseline: null
145
+ };
146
+ }
147
+ export function buildTracedLearningBridgePayloadFromRuntime(input) {
148
+ const lastMaterialization = input?.lastMaterialization ?? null;
149
+ const serveTimeLearning = input?.serveTimeLearning ?? {
150
+ pgVersion: "v1",
151
+ decisionLogCount: 0,
152
+ fallbackReason: null
153
+ };
154
+ const learnedRouter = lastMaterialization?.candidate?.summary?.learnedRouter ?? null;
155
+ const routingBuild = lastMaterialization?.candidate?.routingBuild ?? buildTracedLearningRoutingBuildFromServeTime(serveTimeLearning);
156
+ const fallbackReason = routingBuild.fallbackReason ??
157
+ (routingBuild.pgVersionUsed === "v1"
158
+ ? normalizeOptionalString(serveTimeLearning.fallbackReason) ?? "no_serve_time_decisions"
159
+ : null);
160
+ return normalizeBridgePayload({
161
+ updatedAt: input?.updatedAt,
162
+ routeTraceCount: learnedRouter?.routeTraceCount ?? serveTimeLearning.decisionLogCount,
163
+ supervisionCount: learnedRouter?.supervisionCount ?? 0,
164
+ routerUpdateCount: learnedRouter?.updateCount ?? 0,
165
+ teacherArtifactCount: input?.teacherArtifactCount ?? 0,
166
+ pgVersionRequested: routingBuild.pgVersionRequested,
167
+ pgVersionUsed: routingBuild.pgVersionUsed,
168
+ decisionLogCount: routingBuild.decisionLogCount,
169
+ fallbackReason,
170
+ routerNoOpReason: learnedRouter?.noOpReason ?? null,
171
+ materializedPackId: input?.materializedPackId ?? lastMaterialization?.candidate?.summary?.packId ?? null,
172
+ promoted: input?.promoted === true,
173
+ baselinePersisted: input?.baselinePersisted === true,
174
+ source: input?.source
175
+ });
176
+ }
135
177
  function countRows(db, tableName) {
136
178
  const row = db.prepare(`SELECT COUNT(*) as count FROM ${tableName}`).get();
137
179
  return normalizeCount(row?.count);
@@ -323,6 +365,12 @@ export function persistBrainStoreTracedLearningBridge(payload, options = {}) {
323
365
  }
324
366
  }
325
367
  }
368
+ export function persistTracedLearningBridgeState(activationRoot, payload, options = {}) {
369
+ const bridge = mergeTracedLearningBridgePayload(payload, loadBrainStoreTracedLearningBridge(options));
370
+ persistBrainStoreTracedLearningBridge(bridge, options);
371
+ writeTracedLearningBridge(activationRoot, bridge);
372
+ return bridge;
373
+ }
326
374
  export function loadBrainStoreTracedLearningBridge(options = {}) {
327
375
  const brainRoot = resolveBrainRoot(options.env ?? process.env);
328
376
  const dbPath = path.join(brainRoot, "state.db");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclawbrain/cli",
3
- "version": "0.4.4",
3
+ "version": "0.4.6",
4
4
  "description": "OpenClawBrain operator CLI package with install/status helpers, daemon controls, and import/export tooling.",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",