@almadar/ui 2.46.1 → 2.47.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/dist/lib/index.js CHANGED
@@ -425,7 +425,69 @@ function clearTraits() {
425
425
  notifyListeners4();
426
426
  }
427
427
 
428
+ // lib/logger.ts
429
+ var LEVEL_PRIORITY = { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3 };
430
+ var ENV = typeof process !== "undefined" && process.env ? process.env : {};
431
+ var VITE_ENV = typeof globalThis !== "undefined" && globalThis.__vite_env__ ? globalThis.__vite_env__ : {};
432
+ function getViteEnv(key) {
433
+ try {
434
+ const meta = import.meta;
435
+ return meta?.env?.[key];
436
+ } catch {
437
+ return void 0;
438
+ }
439
+ }
440
+ function envGet(key, viteKey) {
441
+ return ENV[key] ?? (viteKey ? getViteEnv(viteKey) : void 0) ?? VITE_ENV[viteKey ?? key];
442
+ }
443
+ var NODE_ENV = envGet("NODE_ENV", "VITE_NODE_ENV") ?? "development";
444
+ var CONFIGURED_LEVEL = (envGet("LOG_LEVEL", "VITE_LOG_LEVEL") ?? (NODE_ENV === "production" ? "info" : "debug")).toUpperCase();
445
+ var MIN_PRIORITY = LEVEL_PRIORITY[CONFIGURED_LEVEL] ?? 0;
446
+ var DEBUG_FILTER = (envGet("ALMADAR_DEBUG", "VITE_ALMADAR_DEBUG") ?? "").split(",").map((s) => s.trim()).filter(Boolean);
447
+ function matchesNamespace(namespace) {
448
+ if (DEBUG_FILTER.length === 0) return true;
449
+ return DEBUG_FILTER.some((pattern) => {
450
+ if (pattern === "*" || pattern === "almadar:*") return true;
451
+ if (pattern.endsWith(":*")) return namespace.startsWith(pattern.slice(0, -1));
452
+ return namespace === pattern;
453
+ });
454
+ }
455
+ function createLogger(namespace) {
456
+ const nsAllowed = matchesNamespace(namespace);
457
+ const log2 = (level, message, data, correlationId) => {
458
+ if (LEVEL_PRIORITY[level] < MIN_PRIORITY) return;
459
+ if (level === "DEBUG" && !nsAllowed) return;
460
+ const prefix = `[${namespace}]`;
461
+ const logData = correlationId ? { ...data, cid: correlationId } : data;
462
+ switch (level) {
463
+ case "DEBUG":
464
+ console.debug(prefix, message, logData ?? "");
465
+ break;
466
+ case "INFO":
467
+ console.info(prefix, message, logData ?? "");
468
+ break;
469
+ case "WARN":
470
+ console.warn(prefix, message, logData ?? "");
471
+ break;
472
+ case "ERROR":
473
+ console.error(prefix, message, logData ?? "");
474
+ break;
475
+ }
476
+ };
477
+ return {
478
+ debug: (msg, data, cid) => log2("DEBUG", msg, data, cid),
479
+ info: (msg, data, cid) => log2("INFO", msg, data, cid),
480
+ warn: (msg, data, cid) => log2("WARN", msg, data, cid),
481
+ error: (msg, data, cid) => log2("ERROR", msg, data, cid)
482
+ };
483
+ }
484
+ var _cidCounter = 0;
485
+ function generateCorrelationId() {
486
+ return `evt-${Date.now()}-${++_cidCounter}`;
487
+ }
488
+
428
489
  // lib/verificationRegistry.ts
490
+ var log = createLogger("almadar:bridge");
429
491
  var MAX_TRANSITIONS = 500;
430
492
  function getState() {
431
493
  if (typeof window !== "undefined") {
@@ -469,6 +531,7 @@ function recordTransition(trace) {
469
531
  ...trace,
470
532
  id: `t-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`
471
533
  };
534
+ log.info("transition:recorded", { trait: trace.traitName, from: trace.from, to: trace.to, event: trace.event, effectCount: trace.effects.length });
472
535
  getState().transitions.push(entry);
473
536
  if (getState().transitions.length > MAX_TRANSITIONS) {
474
537
  getState().transitions.shift();
@@ -618,10 +681,12 @@ function waitForTransition(event, timeoutMs = 1e4) {
618
681
  }
619
682
  function bindEventBus(eventBus) {
620
683
  if (typeof window === "undefined") return;
684
+ log.info("bindEventBus", { hasOnAny: !!eventBus.onAny });
621
685
  exposeOnWindow();
622
686
  if (window.__orbitalVerification) {
623
687
  window.__orbitalVerification.sendEvent = (event, payload) => {
624
688
  const prefixed = event.startsWith("UI:") ? event : `UI:${event}`;
689
+ log.debug("sendEvent", { event: prefixed, payloadKeys: payload ? Object.keys(payload) : [] });
625
690
  eventBus.emit(prefixed, payload);
626
691
  };
627
692
  const eventLog = [];
@@ -1446,4 +1511,4 @@ function parseContentSegments(content) {
1446
1511
  return segments;
1447
1512
  }
1448
1513
 
1449
- export { ApiError, DEFAULT_CONFIG, apiClient, bindCanvasCapture, bindEventBus, bindTraitStateGetter, clearDebugEvents, clearEntityProvider, clearGuardHistory, clearTicks, clearTraits, clearVerification, cn, debug, debugCollision, debugError, debugGameState, debugGroup, debugGroupEnd, debugInput, debugPhysics, debugTable, debugTime, debugTimeEnd, debugWarn, extractOutputsFromTransitions, extractStateMachine, formatGuard, formatNestedFieldLabel, getAllChecks, getAllTicks, getAllTraits, getBridgeHealth, getDebugEvents, getEffectSummary, getEntitiesByType, getEntityById, getEntitySnapshot, getEventsBySource, getEventsByType, getGuardEvaluationsForTrait, getGuardHistory, getNestedValue, getRecentEvents, getRecentGuardEvaluations, getSnapshot, getSummary, getTick, getTrait, getTransitions, getTransitionsForTrait, initDebugShortcut, isDebugEnabled, logDebugEvent, logEffectExecuted, logError, logEventFired, logInfo, logStateChange, logWarning, onDebugToggle, parseContentSegments, parseMarkdownWithCodeBlocks, recordGuardEvaluation, recordServerResponse, recordTransition, registerCheck, registerTick, registerTrait, renderStateMachineToDomData, renderStateMachineToSvg, setDebugEnabled, setEntityProvider, setTickActive, subscribeToDebugEvents, subscribeToGuardChanges, subscribeToTickChanges, subscribeToTraitChanges, subscribeToVerification, toggleDebug, unregisterTick, unregisterTrait, updateAssetStatus, updateBridgeHealth, updateCheck, updateGuardResult, updateTickExecution, updateTraitState, waitForTransition };
1514
+ export { ApiError, DEFAULT_CONFIG, apiClient, bindCanvasCapture, bindEventBus, bindTraitStateGetter, clearDebugEvents, clearEntityProvider, clearGuardHistory, clearTicks, clearTraits, clearVerification, cn, createLogger, debug, debugCollision, debugError, debugGameState, debugGroup, debugGroupEnd, debugInput, debugPhysics, debugTable, debugTime, debugTimeEnd, debugWarn, extractOutputsFromTransitions, extractStateMachine, formatGuard, formatNestedFieldLabel, generateCorrelationId, getAllChecks, getAllTicks, getAllTraits, getBridgeHealth, getDebugEvents, getEffectSummary, getEntitiesByType, getEntityById, getEntitySnapshot, getEventsBySource, getEventsByType, getGuardEvaluationsForTrait, getGuardHistory, getNestedValue, getRecentEvents, getRecentGuardEvaluations, getSnapshot, getSummary, getTick, getTrait, getTransitions, getTransitionsForTrait, initDebugShortcut, isDebugEnabled, logDebugEvent, logEffectExecuted, logError, logEventFired, logInfo, logStateChange, logWarning, onDebugToggle, parseContentSegments, parseMarkdownWithCodeBlocks, recordGuardEvaluation, recordServerResponse, recordTransition, registerCheck, registerTick, registerTrait, renderStateMachineToDomData, renderStateMachineToSvg, setDebugEnabled, setEntityProvider, setTickActive, subscribeToDebugEvents, subscribeToGuardChanges, subscribeToTickChanges, subscribeToTraitChanges, subscribeToVerification, toggleDebug, unregisterTick, unregisterTrait, updateAssetStatus, updateBridgeHealth, updateCheck, updateGuardResult, updateTickExecution, updateTraitState, waitForTransition };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Almadar Structured Logger
3
+ *
4
+ * Namespace-based logging with level gating and correlation IDs.
5
+ * Pure TypeScript, zero React dependencies. Works in Node.js, Vite, and browser.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ export interface Logger {
10
+ debug: (msg: string, data?: Record<string, unknown>, cid?: string) => void;
11
+ info: (msg: string, data?: Record<string, unknown>, cid?: string) => void;
12
+ warn: (msg: string, data?: Record<string, unknown>, cid?: string) => void;
13
+ error: (msg: string, data?: Record<string, unknown>, cid?: string) => void;
14
+ }
15
+ export declare function createLogger(namespace: string): Logger;
16
+ export declare function generateCorrelationId(): string;
@@ -4,6 +4,7 @@ var React5 = require('react');
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
  var LucideIcons = require('lucide-react');
6
6
 
7
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
7
8
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
9
 
9
10
  function _interopNamespace(e) {
@@ -2506,9 +2507,70 @@ var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
2506
2507
  function cn(...inputs) {
2507
2508
  return twMerge(clsx(inputs));
2508
2509
  }
2510
+
2511
+ // lib/logger.ts
2512
+ var LEVEL_PRIORITY = { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3 };
2513
+ var ENV = typeof process !== "undefined" && process.env ? process.env : {};
2514
+ var VITE_ENV = typeof globalThis !== "undefined" && globalThis.__vite_env__ ? globalThis.__vite_env__ : {};
2515
+ function getViteEnv(key) {
2516
+ try {
2517
+ const meta = ({ url: (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)) });
2518
+ return meta?.env?.[key];
2519
+ } catch {
2520
+ return void 0;
2521
+ }
2522
+ }
2523
+ function envGet(key, viteKey) {
2524
+ return ENV[key] ?? (viteKey ? getViteEnv(viteKey) : void 0) ?? VITE_ENV[viteKey ?? key];
2525
+ }
2526
+ var NODE_ENV = envGet("NODE_ENV", "VITE_NODE_ENV") ?? "development";
2527
+ var CONFIGURED_LEVEL = (envGet("LOG_LEVEL", "VITE_LOG_LEVEL") ?? (NODE_ENV === "production" ? "info" : "debug")).toUpperCase();
2528
+ var MIN_PRIORITY = LEVEL_PRIORITY[CONFIGURED_LEVEL] ?? 0;
2529
+ var DEBUG_FILTER = (envGet("ALMADAR_DEBUG", "VITE_ALMADAR_DEBUG") ?? "").split(",").map((s) => s.trim()).filter(Boolean);
2530
+ function matchesNamespace(namespace) {
2531
+ if (DEBUG_FILTER.length === 0) return true;
2532
+ return DEBUG_FILTER.some((pattern) => {
2533
+ if (pattern === "*" || pattern === "almadar:*") return true;
2534
+ if (pattern.endsWith(":*")) return namespace.startsWith(pattern.slice(0, -1));
2535
+ return namespace === pattern;
2536
+ });
2537
+ }
2538
+ function createLogger(namespace) {
2539
+ const nsAllowed = matchesNamespace(namespace);
2540
+ const log2 = (level, message, data, correlationId) => {
2541
+ if (LEVEL_PRIORITY[level] < MIN_PRIORITY) return;
2542
+ if (level === "DEBUG" && !nsAllowed) return;
2543
+ const prefix = `[${namespace}]`;
2544
+ const logData = correlationId ? { ...data, cid: correlationId } : data;
2545
+ switch (level) {
2546
+ case "DEBUG":
2547
+ console.debug(prefix, message, logData ?? "");
2548
+ break;
2549
+ case "INFO":
2550
+ console.info(prefix, message, logData ?? "");
2551
+ break;
2552
+ case "WARN":
2553
+ console.warn(prefix, message, logData ?? "");
2554
+ break;
2555
+ case "ERROR":
2556
+ console.error(prefix, message, logData ?? "");
2557
+ break;
2558
+ }
2559
+ };
2560
+ return {
2561
+ debug: (msg, data, cid) => log2("DEBUG", msg, data, cid),
2562
+ info: (msg, data, cid) => log2("INFO", msg, data, cid),
2563
+ warn: (msg, data, cid) => log2("WARN", msg, data, cid),
2564
+ error: (msg, data, cid) => log2("ERROR", msg, data, cid)
2565
+ };
2566
+ }
2567
+ createLogger("almadar:eventbus");
2568
+ createLogger("almadar:eventbus:subscribe");
2509
2569
  var EventBusContext = React5.createContext(null);
2510
2570
 
2511
2571
  // hooks/useEventBus.ts
2572
+ var log = createLogger("almadar:eventbus");
2573
+ var subLog2 = createLogger("almadar:eventbus:subscribe");
2512
2574
  function getGlobalEventBus() {
2513
2575
  if (typeof window !== "undefined") {
2514
2576
  return window.__kflowEventBus ?? null;
@@ -2525,6 +2587,7 @@ var fallbackEventBus = {
2525
2587
  timestamp: Date.now()
2526
2588
  };
2527
2589
  const handlers = fallbackListeners.get(type);
2590
+ log.debug("emit", { type, payloadKeys: payload ? Object.keys(payload).length : 0, listenerCount: (handlers?.size ?? 0) + fallbackAnyListeners.size });
2528
2591
  if (handlers) {
2529
2592
  handlers.forEach((handler) => {
2530
2593
  try {
@@ -2547,6 +2610,7 @@ var fallbackEventBus = {
2547
2610
  fallbackListeners.set(type, /* @__PURE__ */ new Set());
2548
2611
  }
2549
2612
  fallbackListeners.get(type).add(listener);
2613
+ subLog2.debug("subscribe", { type, totalListeners: fallbackListeners.get(type).size });
2550
2614
  return () => {
2551
2615
  const handlers = fallbackListeners.get(type);
2552
2616
  if (handlers) {
@@ -2570,6 +2634,7 @@ var fallbackEventBus = {
2570
2634
  },
2571
2635
  onAny: (listener) => {
2572
2636
  fallbackAnyListeners.add(listener);
2637
+ subLog2.debug("subscribe:any", { totalAnyListeners: fallbackAnyListeners.size });
2573
2638
  return () => {
2574
2639
  fallbackAnyListeners.delete(listener);
2575
2640
  };
@@ -2482,9 +2482,70 @@ var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
2482
2482
  function cn(...inputs) {
2483
2483
  return twMerge(clsx(inputs));
2484
2484
  }
2485
+
2486
+ // lib/logger.ts
2487
+ var LEVEL_PRIORITY = { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3 };
2488
+ var ENV = typeof process !== "undefined" && process.env ? process.env : {};
2489
+ var VITE_ENV = typeof globalThis !== "undefined" && globalThis.__vite_env__ ? globalThis.__vite_env__ : {};
2490
+ function getViteEnv(key) {
2491
+ try {
2492
+ const meta = import.meta;
2493
+ return meta?.env?.[key];
2494
+ } catch {
2495
+ return void 0;
2496
+ }
2497
+ }
2498
+ function envGet(key, viteKey) {
2499
+ return ENV[key] ?? (viteKey ? getViteEnv(viteKey) : void 0) ?? VITE_ENV[viteKey ?? key];
2500
+ }
2501
+ var NODE_ENV = envGet("NODE_ENV", "VITE_NODE_ENV") ?? "development";
2502
+ var CONFIGURED_LEVEL = (envGet("LOG_LEVEL", "VITE_LOG_LEVEL") ?? (NODE_ENV === "production" ? "info" : "debug")).toUpperCase();
2503
+ var MIN_PRIORITY = LEVEL_PRIORITY[CONFIGURED_LEVEL] ?? 0;
2504
+ var DEBUG_FILTER = (envGet("ALMADAR_DEBUG", "VITE_ALMADAR_DEBUG") ?? "").split(",").map((s) => s.trim()).filter(Boolean);
2505
+ function matchesNamespace(namespace) {
2506
+ if (DEBUG_FILTER.length === 0) return true;
2507
+ return DEBUG_FILTER.some((pattern) => {
2508
+ if (pattern === "*" || pattern === "almadar:*") return true;
2509
+ if (pattern.endsWith(":*")) return namespace.startsWith(pattern.slice(0, -1));
2510
+ return namespace === pattern;
2511
+ });
2512
+ }
2513
+ function createLogger(namespace) {
2514
+ const nsAllowed = matchesNamespace(namespace);
2515
+ const log2 = (level, message, data, correlationId) => {
2516
+ if (LEVEL_PRIORITY[level] < MIN_PRIORITY) return;
2517
+ if (level === "DEBUG" && !nsAllowed) return;
2518
+ const prefix = `[${namespace}]`;
2519
+ const logData = correlationId ? { ...data, cid: correlationId } : data;
2520
+ switch (level) {
2521
+ case "DEBUG":
2522
+ console.debug(prefix, message, logData ?? "");
2523
+ break;
2524
+ case "INFO":
2525
+ console.info(prefix, message, logData ?? "");
2526
+ break;
2527
+ case "WARN":
2528
+ console.warn(prefix, message, logData ?? "");
2529
+ break;
2530
+ case "ERROR":
2531
+ console.error(prefix, message, logData ?? "");
2532
+ break;
2533
+ }
2534
+ };
2535
+ return {
2536
+ debug: (msg, data, cid) => log2("DEBUG", msg, data, cid),
2537
+ info: (msg, data, cid) => log2("INFO", msg, data, cid),
2538
+ warn: (msg, data, cid) => log2("WARN", msg, data, cid),
2539
+ error: (msg, data, cid) => log2("ERROR", msg, data, cid)
2540
+ };
2541
+ }
2542
+ createLogger("almadar:eventbus");
2543
+ createLogger("almadar:eventbus:subscribe");
2485
2544
  var EventBusContext = createContext(null);
2486
2545
 
2487
2546
  // hooks/useEventBus.ts
2547
+ var log = createLogger("almadar:eventbus");
2548
+ var subLog2 = createLogger("almadar:eventbus:subscribe");
2488
2549
  function getGlobalEventBus() {
2489
2550
  if (typeof window !== "undefined") {
2490
2551
  return window.__kflowEventBus ?? null;
@@ -2501,6 +2562,7 @@ var fallbackEventBus = {
2501
2562
  timestamp: Date.now()
2502
2563
  };
2503
2564
  const handlers = fallbackListeners.get(type);
2565
+ log.debug("emit", { type, payloadKeys: payload ? Object.keys(payload).length : 0, listenerCount: (handlers?.size ?? 0) + fallbackAnyListeners.size });
2504
2566
  if (handlers) {
2505
2567
  handlers.forEach((handler) => {
2506
2568
  try {
@@ -2523,6 +2585,7 @@ var fallbackEventBus = {
2523
2585
  fallbackListeners.set(type, /* @__PURE__ */ new Set());
2524
2586
  }
2525
2587
  fallbackListeners.get(type).add(listener);
2588
+ subLog2.debug("subscribe", { type, totalListeners: fallbackListeners.get(type).size });
2526
2589
  return () => {
2527
2590
  const handlers = fallbackListeners.get(type);
2528
2591
  if (handlers) {
@@ -2546,6 +2609,7 @@ var fallbackEventBus = {
2546
2609
  },
2547
2610
  onAny: (listener) => {
2548
2611
  fallbackAnyListeners.add(listener);
2612
+ subLog2.debug("subscribe:any", { totalAnyListeners: fallbackAnyListeners.size });
2549
2613
  return () => {
2550
2614
  fallbackAnyListeners.delete(listener);
2551
2615
  };
@@ -38,6 +38,7 @@ var langToml = require('react-syntax-highlighter/dist/esm/languages/prism/toml')
38
38
  var langGo = require('react-syntax-highlighter/dist/esm/languages/prism/go');
39
39
  var langGraphql = require('react-syntax-highlighter/dist/esm/languages/prism/graphql');
40
40
 
41
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
41
42
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
42
43
 
43
44
  function _interopNamespace(e) {
@@ -317,6 +318,64 @@ var ThemeProvider = ({
317
318
  );
318
319
  return /* @__PURE__ */ jsxRuntime.jsx(ThemeContext.Provider, { value: contextValue2, children });
319
320
  };
321
+
322
+ // lib/logger.ts
323
+ var LEVEL_PRIORITY = { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3 };
324
+ var ENV = typeof process !== "undefined" && process.env ? process.env : {};
325
+ var VITE_ENV = typeof globalThis !== "undefined" && globalThis.__vite_env__ ? globalThis.__vite_env__ : {};
326
+ function getViteEnv(key) {
327
+ try {
328
+ const meta = ({ url: (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)) });
329
+ return meta?.env?.[key];
330
+ } catch {
331
+ return void 0;
332
+ }
333
+ }
334
+ function envGet(key, viteKey) {
335
+ return ENV[key] ?? (viteKey ? getViteEnv(viteKey) : void 0) ?? VITE_ENV[viteKey ?? key];
336
+ }
337
+ var NODE_ENV = envGet("NODE_ENV", "VITE_NODE_ENV") ?? "development";
338
+ var CONFIGURED_LEVEL = (envGet("LOG_LEVEL", "VITE_LOG_LEVEL") ?? (NODE_ENV === "production" ? "info" : "debug")).toUpperCase();
339
+ var MIN_PRIORITY = LEVEL_PRIORITY[CONFIGURED_LEVEL] ?? 0;
340
+ var DEBUG_FILTER = (envGet("ALMADAR_DEBUG", "VITE_ALMADAR_DEBUG") ?? "").split(",").map((s) => s.trim()).filter(Boolean);
341
+ function matchesNamespace(namespace) {
342
+ if (DEBUG_FILTER.length === 0) return true;
343
+ return DEBUG_FILTER.some((pattern) => {
344
+ if (pattern === "*" || pattern === "almadar:*") return true;
345
+ if (pattern.endsWith(":*")) return namespace.startsWith(pattern.slice(0, -1));
346
+ return namespace === pattern;
347
+ });
348
+ }
349
+ function createLogger(namespace) {
350
+ const nsAllowed = matchesNamespace(namespace);
351
+ const log4 = (level, message, data, correlationId) => {
352
+ if (LEVEL_PRIORITY[level] < MIN_PRIORITY) return;
353
+ if (level === "DEBUG" && !nsAllowed) return;
354
+ const prefix = `[${namespace}]`;
355
+ const logData = correlationId ? { ...data, cid: correlationId } : data;
356
+ switch (level) {
357
+ case "DEBUG":
358
+ console.debug(prefix, message, logData ?? "");
359
+ break;
360
+ case "INFO":
361
+ console.info(prefix, message, logData ?? "");
362
+ break;
363
+ case "WARN":
364
+ console.warn(prefix, message, logData ?? "");
365
+ break;
366
+ case "ERROR":
367
+ console.error(prefix, message, logData ?? "");
368
+ break;
369
+ }
370
+ };
371
+ return {
372
+ debug: (msg, data, cid) => log4("DEBUG", msg, data, cid),
373
+ info: (msg, data, cid) => log4("INFO", msg, data, cid),
374
+ warn: (msg, data, cid) => log4("WARN", msg, data, cid),
375
+ error: (msg, data, cid) => log4("ERROR", msg, data, cid)
376
+ };
377
+ }
378
+ var storeLog = createLogger("almadar:entity:store");
320
379
  var store = /* @__PURE__ */ new Map();
321
380
  var storeListeners = /* @__PURE__ */ new Set();
322
381
  var watchCallbacks = /* @__PURE__ */ new Map();
@@ -356,7 +415,9 @@ function setAll(entityType, records) {
356
415
  }
357
416
  }
358
417
  const prev = store.get(entityType);
359
- store.set(entityType, { entities, ids, version: (prev?.version ?? 0) + 1 });
418
+ const newVersion = (prev?.version ?? 0) + 1;
419
+ store.set(entityType, { entities, ids, version: newVersion });
420
+ storeLog.debug("setAll", { entityType, recordCount: records.length, version: newVersion });
360
421
  notifyListeners(entityType, prev);
361
422
  }
362
423
  function upsertOne(entityType, record) {
@@ -368,6 +429,7 @@ function upsertOne(entityType, record) {
368
429
  if (!snapshot.ids.includes(id)) snapshot.ids.push(id);
369
430
  snapshot.version++;
370
431
  store.set(entityType, snapshot);
432
+ storeLog.debug("upsertOne", { entityType, id, version: snapshot.version });
371
433
  notifyListeners(entityType, prev);
372
434
  }
373
435
  function addOne(entityType, record) {
@@ -384,6 +446,7 @@ function updateOne(entityType, id, changes) {
384
446
  snapshot.entities.set(id, { ...snapshot.entities.get(id), ...changes });
385
447
  snapshot.version++;
386
448
  store.set(entityType, snapshot);
449
+ storeLog.debug("updateOne", { entityType, id, changedFields: Object.keys(changes), version: snapshot.version });
387
450
  notifyListeners(entityType, prev);
388
451
  }
389
452
  function removeOne(entityType, id) {
@@ -397,6 +460,7 @@ function removeOne(entityType, id) {
397
460
  snapshot.entities.delete(id);
398
461
  snapshot.version++;
399
462
  store.set(entityType, snapshot);
463
+ storeLog.debug("removeOne", { entityType, id, remainingCount: snapshot.ids.length, version: snapshot.version });
400
464
  notifyListeners(entityType, prev);
401
465
  }
402
466
  function getSnapshot(entityType) {
@@ -479,6 +543,8 @@ function useEntityStore() {
479
543
  function EntityStoreProvider({ children }) {
480
544
  return /* @__PURE__ */ jsxRuntime.jsx(EntityStoreContext.Provider, { value: contextValue, children });
481
545
  }
546
+ var log = createLogger("almadar:eventbus");
547
+ var subLog = createLogger("almadar:eventbus:subscribe");
482
548
  function setGlobalEventBus(bus) {
483
549
  if (typeof window !== "undefined") {
484
550
  window.__kflowEventBus = bus;
@@ -500,6 +566,7 @@ var fallbackEventBus = {
500
566
  timestamp: Date.now()
501
567
  };
502
568
  const handlers = fallbackListeners.get(type);
569
+ log.debug("emit", { type, payloadKeys: payload ? Object.keys(payload).length : 0, listenerCount: (handlers?.size ?? 0) + fallbackAnyListeners.size });
503
570
  if (handlers) {
504
571
  handlers.forEach((handler) => {
505
572
  try {
@@ -522,6 +589,7 @@ var fallbackEventBus = {
522
589
  fallbackListeners.set(type, /* @__PURE__ */ new Set());
523
590
  }
524
591
  fallbackListeners.get(type).add(listener);
592
+ subLog.debug("subscribe", { type, totalListeners: fallbackListeners.get(type).size });
525
593
  return () => {
526
594
  const handlers = fallbackListeners.get(type);
527
595
  if (handlers) {
@@ -545,6 +613,7 @@ var fallbackEventBus = {
545
613
  },
546
614
  onAny: (listener) => {
547
615
  fallbackAnyListeners.add(listener);
616
+ subLog.debug("subscribe:any", { totalAnyListeners: fallbackAnyListeners.size });
548
617
  return () => {
549
618
  fallbackAnyListeners.delete(listener);
550
619
  };
@@ -554,6 +623,8 @@ function useEventBus() {
554
623
  const context = React114.useContext(providers.EventBusContext);
555
624
  return context ?? getGlobalEventBus() ?? fallbackEventBus;
556
625
  }
626
+ var busLog = createLogger("almadar:eventbus");
627
+ var subLog2 = createLogger("almadar:eventbus:subscribe");
557
628
  var EventBusContext2 = React114.createContext(null);
558
629
  function EventBusProvider({ children, debug: debug2 = false }) {
559
630
  const listenersRef = React114.useRef(/* @__PURE__ */ new Map());
@@ -583,7 +654,8 @@ function EventBusProvider({ children, debug: debug2 = false }) {
583
654
  timestamp: Date.now()
584
655
  };
585
656
  const listeners6 = listenersRef.current.get(type);
586
- const listenerCount = listeners6?.size ?? 0;
657
+ const listenerCount = (listeners6?.size ?? 0) + anyListenersRef.current.size;
658
+ busLog.debug("emit", { type, payloadKeys: payload ? Object.keys(payload).length : 0, listenerCount });
587
659
  if (debug2) {
588
660
  if (listenerCount > 0) {
589
661
  console.log(`[EventBus] Emit: ${type} \u2192 ${listenerCount} listener(s)`, payload);
@@ -616,6 +688,7 @@ function EventBusProvider({ children, debug: debug2 = false }) {
616
688
  }
617
689
  const listeners6 = listenersRef.current.get(type);
618
690
  listeners6.add(listener);
691
+ subLog2.debug("subscribe", { type, totalListeners: listeners6.size });
619
692
  if (debug2) {
620
693
  console.log(`[EventBus] Subscribed to '${type}', total: ${listeners6.size}`);
621
694
  }
@@ -642,6 +715,7 @@ function EventBusProvider({ children, debug: debug2 = false }) {
642
715
  }, []);
643
716
  const onAny = React114.useCallback((listener) => {
644
717
  anyListenersRef.current.add(listener);
718
+ subLog2.debug("subscribe:any", { totalAnyListeners: anyListenersRef.current.size });
645
719
  if (debug2) {
646
720
  console.log(`[EventBus] onAny subscribed, total: ${anyListenersRef.current.size}`);
647
721
  }
@@ -3126,6 +3200,7 @@ var defaultIcon = L__default.default.icon({
3126
3200
  L__default.default.Marker.prototype.options.icon = defaultIcon;
3127
3201
 
3128
3202
  // lib/verificationRegistry.ts
3203
+ var log2 = createLogger("almadar:bridge");
3129
3204
  var MAX_TRANSITIONS = 500;
3130
3205
  function getState() {
3131
3206
  if (typeof window !== "undefined") {
@@ -3158,6 +3233,7 @@ function recordTransition(trace) {
3158
3233
  ...trace,
3159
3234
  id: `t-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`
3160
3235
  };
3236
+ log2.info("transition:recorded", { trait: trace.traitName, from: trace.from, to: trace.to, event: trace.event, effectCount: trace.effects.length });
3161
3237
  getState().transitions.push(entry);
3162
3238
  if (getState().transitions.length > MAX_TRANSITIONS) {
3163
3239
  getState().transitions.shift();
@@ -3259,10 +3335,12 @@ function waitForTransition(event, timeoutMs = 1e4) {
3259
3335
  }
3260
3336
  function bindEventBus(eventBus) {
3261
3337
  if (typeof window === "undefined") return;
3338
+ log2.info("bindEventBus", { hasOnAny: !!eventBus.onAny });
3262
3339
  exposeOnWindow();
3263
3340
  if (window.__orbitalVerification) {
3264
3341
  window.__orbitalVerification.sendEvent = (event, payload) => {
3265
3342
  const prefixed = event.startsWith("UI:") ? event : `UI:${event}`;
3343
+ log2.debug("sendEvent", { event: prefixed, payloadKeys: payload ? Object.keys(payload) : [] });
3266
3344
  eventBus.emit(prefixed, payload);
3267
3345
  };
3268
3346
  const eventLog = [];
@@ -3723,6 +3801,7 @@ function SuspenseConfigProvider({
3723
3801
  );
3724
3802
  }
3725
3803
  SuspenseConfigProvider.displayName = "SuspenseConfigProvider";
3804
+ var log3 = createLogger("almadar:verify");
3726
3805
  var DISPATCH_SUFFIX = ":DISPATCH";
3727
3806
  var SUCCESS_SUFFIX = ":SUCCESS";
3728
3807
  var ERROR_SUFFIX = ":ERROR";
@@ -3768,6 +3847,7 @@ function VerificationProvider({
3768
3847
  const unsub = eventBus.onAny((evt) => {
3769
3848
  const parsed = parseLifecycleEvent(evt.type);
3770
3849
  if (!parsed) return;
3850
+ log3.debug("lifecycle:event", { kind: parsed.kind, traitName: parsed.traitName, event: parsed.event, type: evt.type });
3771
3851
  const payload = evt.payload ?? {};
3772
3852
  if (parsed.kind === "dispatch") {
3773
3853
  const key = `${parsed.traitName}:${String(payload["event"] ?? "")}`;
@@ -3820,6 +3900,7 @@ function VerificationProvider({
3820
3900
  },
3821
3901
  timestamp: Date.now()
3822
3902
  });
3903
+ log3.info("transition:success", { trait: parsed.traitName, event: parsed.event, from: pending?.from, to: newState, effectCount: effects.length });
3823
3904
  } else if (parsed.kind === "error" && parsed.event) {
3824
3905
  const key = `${parsed.traitName}:${parsed.event}`;
3825
3906
  const pending = pendingRef.current.get(key);
@@ -3849,6 +3930,7 @@ function VerificationProvider({
3849
3930
  },
3850
3931
  timestamp: Date.now()
3851
3932
  });
3933
+ log3.warn("transition:error", { trait: parsed.traitName, event: parsed.event, from: fromState, error: errorMsg });
3852
3934
  }
3853
3935
  });
3854
3936
  registerCheck(