@directive-run/core 1.5.0 → 1.6.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.
Files changed (63) hide show
  1. package/dist/adapter-utils.cjs +1 -1
  2. package/dist/adapter-utils.d.cts +1 -1
  3. package/dist/adapter-utils.d.ts +1 -1
  4. package/dist/adapter-utils.js +1 -1
  5. package/dist/chunk-EOLY64E6.cjs +3 -0
  6. package/dist/chunk-EOLY64E6.cjs.map +1 -0
  7. package/dist/chunk-K3KVGWLP.cjs +3 -0
  8. package/dist/chunk-K3KVGWLP.cjs.map +1 -0
  9. package/dist/chunk-OVNPYGYJ.js +3 -0
  10. package/dist/chunk-OVNPYGYJ.js.map +1 -0
  11. package/dist/chunk-QOK7CHOW.js +16 -0
  12. package/dist/chunk-QOK7CHOW.js.map +1 -0
  13. package/dist/chunk-T4ZO4IYL.cjs +16 -0
  14. package/dist/chunk-T4ZO4IYL.cjs.map +1 -0
  15. package/dist/chunk-T6IJUWYR.js +3 -0
  16. package/dist/chunk-T6IJUWYR.js.map +1 -0
  17. package/dist/{helpers-h9PR2JSJ.d.ts → helpers-BwAThjnJ.d.ts} +1 -1
  18. package/dist/{helpers-B1MiHave.d.cts → helpers-CG27mEGG.d.cts} +1 -1
  19. package/dist/index.cjs +4 -1
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +236 -6
  22. package/dist/index.d.ts +236 -6
  23. package/dist/index.js +4 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/internals.cjs +1 -1
  26. package/dist/internals.d.cts +41 -5
  27. package/dist/internals.d.ts +41 -5
  28. package/dist/internals.js +1 -1
  29. package/dist/plugins/index.cjs +1 -1
  30. package/dist/plugins/index.cjs.map +1 -1
  31. package/dist/plugins/index.d.cts +1 -1
  32. package/dist/plugins/index.d.ts +1 -1
  33. package/dist/plugins/index.js +1 -1
  34. package/dist/plugins/index.js.map +1 -1
  35. package/dist/{plugins-Bakr7js6.d.ts → plugins-DvrsPhzx.d.cts} +124 -21
  36. package/dist/{plugins-Bakr7js6.d.cts → plugins-DvrsPhzx.d.ts} +124 -21
  37. package/dist/system-5BSCMT63.cjs +2 -0
  38. package/dist/{system-CK3SHMXZ.cjs.map → system-5BSCMT63.cjs.map} +1 -1
  39. package/dist/system-DMJ6XEJ7.js +2 -0
  40. package/dist/{system-744ZPPES.js.map → system-DMJ6XEJ7.js.map} +1 -1
  41. package/dist/testing.cjs +1 -1
  42. package/dist/testing.d.cts +1 -1
  43. package/dist/testing.d.ts +1 -1
  44. package/dist/testing.js +1 -1
  45. package/dist/worker.cjs +1 -1
  46. package/dist/worker.d.cts +1 -1
  47. package/dist/worker.d.ts +1 -1
  48. package/dist/worker.js +1 -1
  49. package/package.json +1 -1
  50. package/dist/chunk-HAF5JCET.js +0 -16
  51. package/dist/chunk-HAF5JCET.js.map +0 -1
  52. package/dist/chunk-M5KZXNZX.js +0 -3
  53. package/dist/chunk-M5KZXNZX.js.map +0 -1
  54. package/dist/chunk-PGUTGWUI.cjs +0 -3
  55. package/dist/chunk-PGUTGWUI.cjs.map +0 -1
  56. package/dist/chunk-SQVKCJHE.cjs +0 -16
  57. package/dist/chunk-SQVKCJHE.cjs.map +0 -1
  58. package/dist/chunk-YCCQ73C6.js +0 -3
  59. package/dist/chunk-YCCQ73C6.js.map +0 -1
  60. package/dist/chunk-ZHS3EW2Z.cjs +0 -3
  61. package/dist/chunk-ZHS3EW2Z.cjs.map +0 -1
  62. package/dist/system-744ZPPES.js +0 -2
  63. package/dist/system-CK3SHMXZ.cjs +0 -2
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkPGUTGWUI_cjs=require('./chunk-PGUTGWUI.cjs'),chunkS3CFYDIB_cjs=require('./chunk-S3CFYDIB.cjs'),chunkZHS3EW2Z_cjs=require('./chunk-ZHS3EW2Z.cjs');Object.defineProperty(exports,"createConstraintFactory",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.m}});Object.defineProperty(exports,"createConstraintsManager",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.z}});Object.defineProperty(exports,"createDerivationsManager",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.A}});Object.defineProperty(exports,"createDisabledHistory",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.t}});Object.defineProperty(exports,"createEffectsManager",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.B}});Object.defineProperty(exports,"createEngine",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.J}});Object.defineProperty(exports,"createErrorBoundaryManager",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.D}});Object.defineProperty(exports,"createFacts",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.G}});Object.defineProperty(exports,"createFactsProxy",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.F}});Object.defineProperty(exports,"createFactsStore",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.E}});Object.defineProperty(exports,"createHistoryManager",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.s}});Object.defineProperty(exports,"createPluginManager",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.H}});Object.defineProperty(exports,"createResolverFactory",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.n}});Object.defineProperty(exports,"createResolversManager",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.I}});Object.defineProperty(exports,"createRetryLaterManager",{enumerable:true,get:function(){return chunkPGUTGWUI_cjs.C}});Object.defineProperty(exports,"getCurrentDeps",{enumerable:true,get:function(){return chunkS3CFYDIB_cjs.g}});Object.defineProperty(exports,"isTracking",{enumerable:true,get:function(){return chunkS3CFYDIB_cjs.h}});Object.defineProperty(exports,"trackAccess",{enumerable:true,get:function(){return chunkS3CFYDIB_cjs.k}});Object.defineProperty(exports,"withTracking",{enumerable:true,get:function(){return chunkS3CFYDIB_cjs.i}});Object.defineProperty(exports,"withoutTracking",{enumerable:true,get:function(){return chunkS3CFYDIB_cjs.j}});Object.defineProperty(exports,"safeStringify",{enumerable:true,get:function(){return chunkZHS3EW2Z_cjs.l}});//# sourceMappingURL=internals.cjs.map
1
+ 'use strict';var chunkK3KVGWLP_cjs=require('./chunk-K3KVGWLP.cjs'),chunkS3CFYDIB_cjs=require('./chunk-S3CFYDIB.cjs'),chunkEOLY64E6_cjs=require('./chunk-EOLY64E6.cjs');Object.defineProperty(exports,"createConstraintFactory",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.q}});Object.defineProperty(exports,"createConstraintsManager",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.D}});Object.defineProperty(exports,"createDerivationsManager",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.E}});Object.defineProperty(exports,"createDisabledHistory",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.x}});Object.defineProperty(exports,"createEffectsManager",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.F}});Object.defineProperty(exports,"createEngine",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.N}});Object.defineProperty(exports,"createErrorBoundaryManager",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.H}});Object.defineProperty(exports,"createFacts",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.K}});Object.defineProperty(exports,"createFactsProxy",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.J}});Object.defineProperty(exports,"createFactsStore",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.I}});Object.defineProperty(exports,"createHistoryManager",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.w}});Object.defineProperty(exports,"createPluginManager",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.L}});Object.defineProperty(exports,"createResolverFactory",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.r}});Object.defineProperty(exports,"createResolversManager",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.M}});Object.defineProperty(exports,"createRetryLaterManager",{enumerable:true,get:function(){return chunkK3KVGWLP_cjs.G}});Object.defineProperty(exports,"getCurrentDeps",{enumerable:true,get:function(){return chunkS3CFYDIB_cjs.g}});Object.defineProperty(exports,"isTracking",{enumerable:true,get:function(){return chunkS3CFYDIB_cjs.h}});Object.defineProperty(exports,"trackAccess",{enumerable:true,get:function(){return chunkS3CFYDIB_cjs.k}});Object.defineProperty(exports,"withTracking",{enumerable:true,get:function(){return chunkS3CFYDIB_cjs.i}});Object.defineProperty(exports,"withoutTracking",{enumerable:true,get:function(){return chunkS3CFYDIB_cjs.j}});Object.defineProperty(exports,"safeStringify",{enumerable:true,get:function(){return chunkEOLY64E6_cjs.n}});//# sourceMappingURL=internals.cjs.map
2
2
  //# sourceMappingURL=internals.cjs.map
@@ -1,7 +1,7 @@
1
- import { a8 as Schema, ai as FactsStore, a as Facts, D as DefinitionMeta, E as EffectsDef, aj as ConstraintsDef, s as RequirementKeyFn, R as RequirementWithId, ak as ConstraintState, z as FactPredicate, C as ClauseResult, al as ResolversDef, am as ResolverStatus, r as Requirement, o as Plugin, aa as System, an as FactChange, G as FactsSnapshot, ao as ReconcileResult, a9 as Snapshot, t as DirectiveError, ap as RecoveryStrategy, af as TraceEntry, aq as ErrorSource, q as ErrorBoundaryConfig, ar as RetryLaterConfig, H as HistoryAPI, I as HistoryOption, ab as SystemConfig } from './plugins-Bakr7js6.cjs';
2
- export { as as BatchItemResult, at as BatchResolveResults, au as ConstraintsControl, av as CrossModuleConstraintDef, i as CrossModuleConstraintsDef, aw as CrossModuleDerivationFn, g as CrossModuleDerivationsDef, ax as CrossModuleEffectDef, h as CrossModuleEffectsDef, ay as CrossModuleFactsWithSelf, az as DerivationKeys, aA as DerivationReturnType, aB as DerivationsControl, aC as DerivationsSchema, aD as DeriveAccessor, aE as DispatchEventsFromSchema, u as DistributableSnapshot, v as DistributableSnapshotOptions, aF as EffectCleanup, aG as EffectsControl, aH as EventPayloadSchema, aI as EventsAccessor, aJ as EventsAccessorFromSchema, aK as EventsDef, aL as EventsSchema, aM as FactKeys, aN as FactReturnType, aO as FlexibleEventHandler, aP as HistoryConfig, aQ as InferEventPayloadFromSchema, aR as InferRequirementPayloadFromSchema, aS as InferSchema, aT as MutableNamespacedFacts, aU as NamespacedDerivations, aV as NamespacedEventsAccessor, aW as NamespacedFacts, aX as ObservableKeys, aY as RequirementExplanation, aZ as RequirementOutput, a_ as RequirementPayloadSchema, a$ as RequirementsSchema, b0 as ResolverContext, b1 as ResolversControl, b2 as SnapshotMeta, b3 as SystemEvent, b4 as TraceConfig, b5 as TypedConstraintDef, c as TypedConstraintsDef, T as TypedDerivationsDef, b as TypedEventsDef, b6 as TypedResolverContext, b7 as TypedResolverDef, d as TypedResolversDef, b8 as UnionEvents } from './plugins-Bakr7js6.cjs';
3
- import { b as DerivationsDef, c as DerivedValues } from './helpers-B1MiHave.cjs';
4
- export { d as DerivationState, T as TypedConstraint, e as TypedResolver, f as createConstraintFactory, g as createResolverFactory } from './helpers-B1MiHave.cjs';
1
+ import { a8 as Schema, ai as FactsStore, b as Facts, D as DefinitionMeta, E as EffectsDef, aj as ConstraintsDef, t as RequirementKeyFn, R as RequirementWithId, ak as ConstraintState, a as FactPredicate, C as ClauseResult, al as ResolversDef, am as ResolverStatus, s as Requirement, p as Plugin, aa as System, an as FactChange, G as FactsSnapshot, ao as ReconcileResult, a9 as Snapshot, u as DirectiveError, ap as RecoveryStrategy, af as TraceEntry, aq as ErrorSource, r as ErrorBoundaryConfig, ar as RetryLaterConfig, H as HistoryAPI, I as HistoryOption, ab as SystemConfig } from './plugins-DvrsPhzx.cjs';
2
+ export { as as BatchItemResult, at as BatchResolveResults, au as ConstraintsControl, av as CrossModuleConstraintDef, j as CrossModuleConstraintsDef, aw as CrossModuleDerivationFn, h as CrossModuleDerivationsDef, ax as CrossModuleEffectDef, i as CrossModuleEffectsDef, ay as CrossModuleFactsWithSelf, az as DerivationKeys, aA as DerivationReturnType, aB as DerivationsControl, aC as DerivationsSchema, aD as DeriveAccessor, aE as DispatchEventsFromSchema, v as DistributableSnapshot, w as DistributableSnapshotOptions, aF as EffectCleanup, aG as EffectsControl, aH as EventPayloadSchema, aI as EventsAccessor, aJ as EventsAccessorFromSchema, aK as EventsDef, aL as EventsSchema, aM as FactKeys, aN as FactReturnType, aO as FlexibleEventHandler, aP as HistoryConfig, aQ as InferEventPayloadFromSchema, aR as InferRequirementPayloadFromSchema, aS as InferSchema, aT as MutableNamespacedFacts, aU as NamespacedDerivations, aV as NamespacedEventsAccessor, aW as NamespacedFacts, aX as ObservableKeys, aY as RequirementExplanation, aZ as RequirementOutput, a_ as RequirementPayloadSchema, a$ as RequirementsSchema, b0 as ResolverContext, b1 as ResolversControl, b2 as SnapshotMeta, b3 as SystemEvent, b4 as TraceConfig, b5 as TypedConstraintDef, d as TypedConstraintsDef, T as TypedDerivationsDef, c as TypedEventsDef, b6 as TypedResolverContext, b7 as TypedResolverDef, e as TypedResolversDef, b8 as UnionEvents } from './plugins-DvrsPhzx.cjs';
3
+ import { b as DerivationsDef, c as DerivedValues } from './helpers-CG27mEGG.cjs';
4
+ export { d as DerivationState, T as TypedConstraint, e as TypedResolver, f as createConstraintFactory, g as createResolverFactory } from './helpers-CG27mEGG.cjs';
5
5
  export { g as safeStringify } from './utils-BnQajqPu.cjs';
6
6
 
7
7
  /**
@@ -613,8 +613,16 @@ interface ResolversManager<_S extends Schema> {
613
613
  * for batch processing instead of being resolved immediately.
614
614
  *
615
615
  * @param req - The requirement (with a stable identity ID) to resolve.
616
+ * @param options.factsBaseline - Optional pre-dispatch facts snapshot
617
+ * shared by every resolver dispatched in the same reconcile tick. Used
618
+ * by RFC-1 constraint-binding to seed each resolver's `expected` map
619
+ * from a value that pre-dates any sibling resolver's writes, preventing
620
+ * the sibling-clobber gap where resolver 2 silently overwrites
621
+ * resolver 1's owned write.
616
622
  */
617
- resolve(req: RequirementWithId): void;
623
+ resolve(req: RequirementWithId, options?: {
624
+ factsBaseline?: Readonly<Record<string, unknown>>;
625
+ }): void;
618
626
  /**
619
627
  * Cancel an in-flight or batch-queued resolver by requirement ID.
620
628
  *
@@ -769,6 +777,19 @@ interface CreateResolversOptions<S extends Schema> {
769
777
  onRetry?: (resolver: string, req: RequirementWithId, attempt: number) => void;
770
778
  /** Called when a resolver is canceled via {@link ResolversManager.cancel | cancel}. */
771
779
  onCancel?: (resolver: string, req: RequirementWithId) => void;
780
+ /**
781
+ * Called when a bound resolver's owned-fact write is dropped because the
782
+ * fact was changed by something outside the resolver (RFC-0003 clobber).
783
+ * Fires once per dropped write; the resolver's `AbortController` is also
784
+ * aborted in the same step. Wired to plugins for observability.
785
+ */
786
+ onClobber?: (resolver: string, req: RequirementWithId, fact: string, expected: unknown, actual: unknown) => void;
787
+ /**
788
+ * Called once when a single resolver instance exceeds the per-instance
789
+ * clobber-event cap. `dropped` is the number of per-clobber events
790
+ * suppressed. Rate-limits clobber-event amplification (RFC-0003).
791
+ */
792
+ onClobberSuppressed?: (resolver: string, req: RequirementWithId, dropped: number) => void;
772
793
  /** Called after any resolver finishes (success, error, or batch completion) to trigger reconciliation. */
773
794
  onResolutionComplete?: () => void;
774
795
  /**
@@ -846,6 +867,21 @@ interface PluginManager<_S extends Schema = any> {
846
867
  emitResolverError(resolver: string, req: RequirementWithId, error: unknown): void;
847
868
  emitResolverRetry(resolver: string, req: RequirementWithId, attempt: number): void;
848
869
  emitResolverCancel(resolver: string, req: RequirementWithId): void;
870
+ emitResolverWriteRejected(event: {
871
+ kind: "rejection";
872
+ resolver: string;
873
+ req: RequirementWithId;
874
+ reason: "clobbered";
875
+ fact: string;
876
+ expected: unknown;
877
+ actual: unknown;
878
+ } | {
879
+ kind: "summary";
880
+ resolver: string;
881
+ req: RequirementWithId;
882
+ reason: "clobbered";
883
+ dropped: number;
884
+ }): void;
849
885
  emitEffectRun(id: string): void;
850
886
  emitEffectError(id: string, error: unknown): void;
851
887
  emitSnapshot(snapshot: Snapshot): void;
@@ -1,7 +1,7 @@
1
- import { a8 as Schema, ai as FactsStore, a as Facts, D as DefinitionMeta, E as EffectsDef, aj as ConstraintsDef, s as RequirementKeyFn, R as RequirementWithId, ak as ConstraintState, z as FactPredicate, C as ClauseResult, al as ResolversDef, am as ResolverStatus, r as Requirement, o as Plugin, aa as System, an as FactChange, G as FactsSnapshot, ao as ReconcileResult, a9 as Snapshot, t as DirectiveError, ap as RecoveryStrategy, af as TraceEntry, aq as ErrorSource, q as ErrorBoundaryConfig, ar as RetryLaterConfig, H as HistoryAPI, I as HistoryOption, ab as SystemConfig } from './plugins-Bakr7js6.js';
2
- export { as as BatchItemResult, at as BatchResolveResults, au as ConstraintsControl, av as CrossModuleConstraintDef, i as CrossModuleConstraintsDef, aw as CrossModuleDerivationFn, g as CrossModuleDerivationsDef, ax as CrossModuleEffectDef, h as CrossModuleEffectsDef, ay as CrossModuleFactsWithSelf, az as DerivationKeys, aA as DerivationReturnType, aB as DerivationsControl, aC as DerivationsSchema, aD as DeriveAccessor, aE as DispatchEventsFromSchema, u as DistributableSnapshot, v as DistributableSnapshotOptions, aF as EffectCleanup, aG as EffectsControl, aH as EventPayloadSchema, aI as EventsAccessor, aJ as EventsAccessorFromSchema, aK as EventsDef, aL as EventsSchema, aM as FactKeys, aN as FactReturnType, aO as FlexibleEventHandler, aP as HistoryConfig, aQ as InferEventPayloadFromSchema, aR as InferRequirementPayloadFromSchema, aS as InferSchema, aT as MutableNamespacedFacts, aU as NamespacedDerivations, aV as NamespacedEventsAccessor, aW as NamespacedFacts, aX as ObservableKeys, aY as RequirementExplanation, aZ as RequirementOutput, a_ as RequirementPayloadSchema, a$ as RequirementsSchema, b0 as ResolverContext, b1 as ResolversControl, b2 as SnapshotMeta, b3 as SystemEvent, b4 as TraceConfig, b5 as TypedConstraintDef, c as TypedConstraintsDef, T as TypedDerivationsDef, b as TypedEventsDef, b6 as TypedResolverContext, b7 as TypedResolverDef, d as TypedResolversDef, b8 as UnionEvents } from './plugins-Bakr7js6.js';
3
- import { b as DerivationsDef, c as DerivedValues } from './helpers-h9PR2JSJ.js';
4
- export { d as DerivationState, T as TypedConstraint, e as TypedResolver, f as createConstraintFactory, g as createResolverFactory } from './helpers-h9PR2JSJ.js';
1
+ import { a8 as Schema, ai as FactsStore, b as Facts, D as DefinitionMeta, E as EffectsDef, aj as ConstraintsDef, t as RequirementKeyFn, R as RequirementWithId, ak as ConstraintState, a as FactPredicate, C as ClauseResult, al as ResolversDef, am as ResolverStatus, s as Requirement, p as Plugin, aa as System, an as FactChange, G as FactsSnapshot, ao as ReconcileResult, a9 as Snapshot, u as DirectiveError, ap as RecoveryStrategy, af as TraceEntry, aq as ErrorSource, r as ErrorBoundaryConfig, ar as RetryLaterConfig, H as HistoryAPI, I as HistoryOption, ab as SystemConfig } from './plugins-DvrsPhzx.js';
2
+ export { as as BatchItemResult, at as BatchResolveResults, au as ConstraintsControl, av as CrossModuleConstraintDef, j as CrossModuleConstraintsDef, aw as CrossModuleDerivationFn, h as CrossModuleDerivationsDef, ax as CrossModuleEffectDef, i as CrossModuleEffectsDef, ay as CrossModuleFactsWithSelf, az as DerivationKeys, aA as DerivationReturnType, aB as DerivationsControl, aC as DerivationsSchema, aD as DeriveAccessor, aE as DispatchEventsFromSchema, v as DistributableSnapshot, w as DistributableSnapshotOptions, aF as EffectCleanup, aG as EffectsControl, aH as EventPayloadSchema, aI as EventsAccessor, aJ as EventsAccessorFromSchema, aK as EventsDef, aL as EventsSchema, aM as FactKeys, aN as FactReturnType, aO as FlexibleEventHandler, aP as HistoryConfig, aQ as InferEventPayloadFromSchema, aR as InferRequirementPayloadFromSchema, aS as InferSchema, aT as MutableNamespacedFacts, aU as NamespacedDerivations, aV as NamespacedEventsAccessor, aW as NamespacedFacts, aX as ObservableKeys, aY as RequirementExplanation, aZ as RequirementOutput, a_ as RequirementPayloadSchema, a$ as RequirementsSchema, b0 as ResolverContext, b1 as ResolversControl, b2 as SnapshotMeta, b3 as SystemEvent, b4 as TraceConfig, b5 as TypedConstraintDef, d as TypedConstraintsDef, T as TypedDerivationsDef, c as TypedEventsDef, b6 as TypedResolverContext, b7 as TypedResolverDef, e as TypedResolversDef, b8 as UnionEvents } from './plugins-DvrsPhzx.js';
3
+ import { b as DerivationsDef, c as DerivedValues } from './helpers-BwAThjnJ.js';
4
+ export { d as DerivationState, T as TypedConstraint, e as TypedResolver, f as createConstraintFactory, g as createResolverFactory } from './helpers-BwAThjnJ.js';
5
5
  export { g as safeStringify } from './utils-BnQajqPu.js';
6
6
 
7
7
  /**
@@ -613,8 +613,16 @@ interface ResolversManager<_S extends Schema> {
613
613
  * for batch processing instead of being resolved immediately.
614
614
  *
615
615
  * @param req - The requirement (with a stable identity ID) to resolve.
616
+ * @param options.factsBaseline - Optional pre-dispatch facts snapshot
617
+ * shared by every resolver dispatched in the same reconcile tick. Used
618
+ * by RFC-1 constraint-binding to seed each resolver's `expected` map
619
+ * from a value that pre-dates any sibling resolver's writes, preventing
620
+ * the sibling-clobber gap where resolver 2 silently overwrites
621
+ * resolver 1's owned write.
616
622
  */
617
- resolve(req: RequirementWithId): void;
623
+ resolve(req: RequirementWithId, options?: {
624
+ factsBaseline?: Readonly<Record<string, unknown>>;
625
+ }): void;
618
626
  /**
619
627
  * Cancel an in-flight or batch-queued resolver by requirement ID.
620
628
  *
@@ -769,6 +777,19 @@ interface CreateResolversOptions<S extends Schema> {
769
777
  onRetry?: (resolver: string, req: RequirementWithId, attempt: number) => void;
770
778
  /** Called when a resolver is canceled via {@link ResolversManager.cancel | cancel}. */
771
779
  onCancel?: (resolver: string, req: RequirementWithId) => void;
780
+ /**
781
+ * Called when a bound resolver's owned-fact write is dropped because the
782
+ * fact was changed by something outside the resolver (RFC-0003 clobber).
783
+ * Fires once per dropped write; the resolver's `AbortController` is also
784
+ * aborted in the same step. Wired to plugins for observability.
785
+ */
786
+ onClobber?: (resolver: string, req: RequirementWithId, fact: string, expected: unknown, actual: unknown) => void;
787
+ /**
788
+ * Called once when a single resolver instance exceeds the per-instance
789
+ * clobber-event cap. `dropped` is the number of per-clobber events
790
+ * suppressed. Rate-limits clobber-event amplification (RFC-0003).
791
+ */
792
+ onClobberSuppressed?: (resolver: string, req: RequirementWithId, dropped: number) => void;
772
793
  /** Called after any resolver finishes (success, error, or batch completion) to trigger reconciliation. */
773
794
  onResolutionComplete?: () => void;
774
795
  /**
@@ -846,6 +867,21 @@ interface PluginManager<_S extends Schema = any> {
846
867
  emitResolverError(resolver: string, req: RequirementWithId, error: unknown): void;
847
868
  emitResolverRetry(resolver: string, req: RequirementWithId, attempt: number): void;
848
869
  emitResolverCancel(resolver: string, req: RequirementWithId): void;
870
+ emitResolverWriteRejected(event: {
871
+ kind: "rejection";
872
+ resolver: string;
873
+ req: RequirementWithId;
874
+ reason: "clobbered";
875
+ fact: string;
876
+ expected: unknown;
877
+ actual: unknown;
878
+ } | {
879
+ kind: "summary";
880
+ resolver: string;
881
+ req: RequirementWithId;
882
+ reason: "clobbered";
883
+ dropped: number;
884
+ }): void;
849
885
  emitEffectRun(id: string): void;
850
886
  emitEffectError(id: string, error: unknown): void;
851
887
  emitSnapshot(snapshot: Snapshot): void;
package/dist/internals.js CHANGED
@@ -1,2 +1,2 @@
1
- export{m as createConstraintFactory,z as createConstraintsManager,A as createDerivationsManager,t as createDisabledHistory,B as createEffectsManager,J as createEngine,D as createErrorBoundaryManager,G as createFacts,F as createFactsProxy,E as createFactsStore,s as createHistoryManager,H as createPluginManager,n as createResolverFactory,I as createResolversManager,C as createRetryLaterManager}from'./chunk-YCCQ73C6.js';export{g as getCurrentDeps,h as isTracking,k as trackAccess,i as withTracking,j as withoutTracking}from'./chunk-EH2Q754B.js';export{l as safeStringify}from'./chunk-M5KZXNZX.js';//# sourceMappingURL=internals.js.map
1
+ export{q as createConstraintFactory,D as createConstraintsManager,E as createDerivationsManager,x as createDisabledHistory,F as createEffectsManager,N as createEngine,H as createErrorBoundaryManager,K as createFacts,J as createFactsProxy,I as createFactsStore,w as createHistoryManager,L as createPluginManager,r as createResolverFactory,M as createResolversManager,G as createRetryLaterManager}from'./chunk-OVNPYGYJ.js';export{g as getCurrentDeps,h as isTracking,k as trackAccess,i as withTracking,j as withoutTracking}from'./chunk-EH2Q754B.js';export{n as safeStringify}from'./chunk-T6IJUWYR.js';//# sourceMappingURL=internals.js.map
2
2
  //# sourceMappingURL=internals.js.map
@@ -1,3 +1,3 @@
1
- 'use strict';var chunkZHS3EW2Z_cjs=require('../chunk-ZHS3EW2Z.cjs');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var Ae={debug:0,info:1,warn:2,error:3};function Ke(t={}){let{level:a="info",filter:o=()=>true,logger:r=console,prefix:u="[Directive]"}=t,g=Ae[a],c=(n,i,...s)=>{Ae[n]<g||o(i)&&r[n](`${u} ${i}`,...s);};return {name:"logging",onInit:()=>c("debug","init"),onStart:()=>c("info","start"),onStop:()=>c("info","stop"),onDestroy:()=>c("debug","destroy"),onFactSet:(n,i,s)=>{c("debug","fact.set",{key:n,value:i,prev:s});},onFactDelete:(n,i)=>{c("debug","fact.delete",{key:n,prev:i});},onFactsBatch:n=>{c("debug","facts.batch",{count:n.length,changes:n});},onDerivationCompute:(n,i,s)=>{c("debug","derivation.compute",{id:n,value:i,deps:s});},onDerivationInvalidate:n=>{c("debug","derivation.invalidate",{id:n});},onReconcileStart:()=>{c("debug","reconcile.start");},onReconcileEnd:n=>{c("debug","reconcile.end",{unmet:n.unmet.length,inflight:n.inflight.length,completed:n.completed.length,canceled:n.canceled.length});},onConstraintEvaluate:(n,i,s)=>{if(s){let p=s.filter(S=>S.pass).length;c("debug","constraint.evaluate",{id:n,active:i,clauses:{total:s.length,passed:p}});return}c("debug","constraint.evaluate",{id:n,active:i});},onConstraintError:(n,i)=>{c("error","constraint.error",{id:n,error:i});},onRequirementCreated:n=>{c("debug","requirement.created",{id:n.id,type:n.requirement.type});},onRequirementMet:(n,i)=>{c("info","requirement.met",{id:n.id,byResolver:i});},onRequirementCanceled:n=>{c("debug","requirement.canceled",{id:n.id});},onResolverStart:(n,i)=>{c("debug","resolver.start",{resolver:n,requirementId:i.id});},onResolverComplete:(n,i,s)=>{c("info","resolver.complete",{resolver:n,requirementId:i.id,duration:s});},onResolverError:(n,i,s)=>{c("error","resolver.error",{resolver:n,requirementId:i.id,error:s});},onResolverRetry:(n,i,s)=>{c("warn","resolver.retry",{resolver:n,requirementId:i.id,attempt:s});},onResolverCancel:(n,i)=>{c("debug","resolver.cancel",{resolver:n,requirementId:i.id});},onEffectRun:n=>{c("debug","effect.run",{id:n});},onEffectError:(n,i)=>{c("error","effect.error",{id:n,error:i});},onSnapshot:n=>{c("debug","timetravel.snapshot",{id:n.id,trigger:n.trigger});},onHistoryNavigate:(n,i)=>{c("info","timetravel.jump",{from:n,to:i});},onError:n=>{c("error","error",{source:n.source,sourceId:n.sourceId,message:n.message});},onErrorRecovery:(n,i)=>{c("warn","error.recovery",{source:n.source,sourceId:n.sourceId,strategy:i});},onDefinitionRegister:(n,i)=>{c("info","definition.register",{type:n,id:i});},onDefinitionAssign:(n,i)=>{c("info","definition.assign",{type:n,id:i});},onDefinitionUnregister:(n,i)=>{c("info","definition.unregister",{type:n,id:i});},onDefinitionCall:(n,i,s)=>{c("debug","definition.call",{type:n,id:i,props:s});},onTraceComplete:n=>{c("debug","trace.complete",{id:n.id,status:n.status,duration:n.duration,factChanges:n.factChanges.length,derivationsRecomputed:n.derivationsRecomputed.length,constraintsHit:n.constraintsHit.length,resolversStarted:n.resolversStarted.length,effectsRun:n.effectsRun.length});}}}var se=class{constructor(a){this.capacity=a;this.buf=new Array(a);}buf;head=0;_size=0;get size(){return this._size}push(a){this.buf[this.head]=a,this.head=(this.head+1)%this.capacity,this._size<this.capacity&&this._size++;}toArray(){return this._size===0?[]:this._size<this.capacity?this.buf.slice(0,this._size):[...this.buf.slice(this.head),...this.buf.slice(0,this.head)]}clear(){this.buf=new Array(this.capacity),this.head=0,this._size=0;}};function ue(){try{if(typeof process<"u"&&process.env?.NODE_ENV==="production")return !1}catch{}try{if(typeof ({ url: (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)) })<"u"&&undefined?.MODE==="production")return !1}catch{}return true}function fe(t){try{if(t===void 0)return "undefined";if(t===null)return "null";if(typeof t=="bigint")return String(t)+"n";if(typeof t=="symbol")return String(t);if(typeof t=="object"){let a=JSON.stringify(t,(o,r)=>typeof r=="bigint"?String(r)+"n":typeof r=="symbol"?String(r):r);return a.length>120?a.slice(0,117)+"...":a}return String(t)}catch{return "<error>"}}function J(t,a){return t.length<=a?t:t.slice(0,a-3)+"..."}function te(t){try{return t.inspect()}catch{return null}}function ke(t){try{return t==null||typeof t!="object"?t:JSON.parse(JSON.stringify(t))}catch{return null}}function Oe(t){return t===void 0?1e3:!Number.isFinite(t)||t<1?(ue()&&console.warn(`[directive:devtools] Invalid maxEvents value (${t}), using default 1000`),1e3):Math.floor(t)}function Le(){return {reconcileCount:0,reconcileTotalMs:0,resolverStats:new Map,effectRunCount:0,effectErrorCount:0,lastReconcileStartMs:0}}var Je=200,ne=340,re=16,oe=80,be=2,ve=["#8b9aff","#4ade80","#fbbf24","#c084fc","#f472b6","#22d3ee"];function Pe(){return {entries:new se(Je),inflight:new Map}}function Ie(){return {derivationDeps:new Map,activeConstraints:new Set,recentlyChangedFacts:new Set,recentlyComputedDerivations:new Set,recentlyActiveConstraints:new Set,animationTimer:null}}var _e=1e4,Ne=100;function $e(){return {isRecording:false,recordedEvents:[],snapshots:[]}}var Be=50,ye=200,y={bg:"#1a1a2e",text:"#e0e0e0",accent:"#8b9aff",muted:"#b0b0d0",border:"#333",rowBorder:"#2a2a4a",green:"#4ade80",yellow:"#fbbf24",red:"#f87171",closeBtn:"#aaa",font:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace"},V={nodeW:90,nodeH:16,nodeGap:6,startY:16,colGap:20,fontSize:10,labelMaxChars:11};function He(t,a,o,r){let u=false,g={position:"fixed",zIndex:"99999",...a.includes("bottom")?{bottom:"12px"}:{top:"12px"},...a.includes("right")?{right:"12px"}:{left:"12px"}},c=document.createElement("style");c.textContent=`[data-directive-devtools] summary:focus-visible{outline:2px solid ${y.accent};outline-offset:2px;border-radius:2px}[data-directive-devtools] button:focus-visible{outline:2px solid ${y.accent};outline-offset:2px}`,document.head.appendChild(c);let n=document.createElement("button");n.setAttribute("aria-label","Open Directive DevTools"),n.setAttribute("aria-expanded",String(o)),n.title="Ctrl+Shift+D to toggle",Object.assign(n.style,{...g,background:y.bg,color:y.text,border:`1px solid ${y.border}`,borderRadius:"6px",padding:"10px 14px",minWidth:"44px",minHeight:"44px",cursor:"pointer",fontFamily:y.font,fontSize:"12px",display:o?"none":"block"}),n.textContent="Directive";let i=document.createElement("div");i.setAttribute("role","region"),i.setAttribute("aria-label","Directive DevTools"),i.setAttribute("data-directive-devtools",""),i.tabIndex=-1,Object.assign(i.style,{...g,background:y.bg,color:y.text,border:`1px solid ${y.border}`,borderRadius:"8px",padding:"12px",fontFamily:y.font,fontSize:"11px",maxWidth:"min(380px, calc(100vw - 24px))",maxHeight:"min(500px, calc(100vh - 24px))",overflow:"auto",boxShadow:"0 4px 20px rgba(0,0,0,0.5)",display:o?"block":"none"});let s=document.createElement("div");Object.assign(s.style,{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"8px"});let p=document.createElement("strong");p.style.color=y.accent,p.textContent=t==="default"?"Directive DevTools":`DevTools (${t})`;let S=document.createElement("button");S.setAttribute("aria-label","Close DevTools"),Object.assign(S.style,{background:"none",border:"none",color:y.closeBtn,cursor:"pointer",fontSize:"16px",padding:"8px 12px",minWidth:"44px",minHeight:"44px",lineHeight:"1",display:"flex",alignItems:"center",justifyContent:"center"}),S.textContent="\xD7",s.appendChild(p),s.appendChild(S),i.appendChild(s);let k=document.createElement("div");k.style.marginBottom="6px",k.setAttribute("aria-live","polite");let _=document.createElement("span");_.style.color=y.green,_.textContent="Settled",k.appendChild(_),i.appendChild(k);let T=document.createElement("div");Object.assign(T.style,{display:"none",marginBottom:"8px",padding:"4px 8px",background:"#252545",borderRadius:"4px",alignItems:"center",gap:"6px"});let w=document.createElement("button");Object.assign(w.style,{background:"none",border:`1px solid ${y.border}`,color:y.text,cursor:"pointer",padding:"4px 10px",borderRadius:"3px",fontFamily:y.font,fontSize:"11px",minWidth:"44px",minHeight:"44px"}),w.textContent="\u25C0 Undo",w.disabled=true;let m=document.createElement("button");Object.assign(m.style,{background:"none",border:`1px solid ${y.border}`,color:y.text,cursor:"pointer",padding:"4px 10px",borderRadius:"3px",fontFamily:y.font,fontSize:"11px",minWidth:"44px",minHeight:"44px"}),m.textContent="Redo \u25B6",m.disabled=true;let v=document.createElement("span");v.style.color=y.muted,v.style.fontSize="10px",T.appendChild(w),T.appendChild(m),T.appendChild(v),i.appendChild(T);function D(z,Y){let G=document.createElement("details");Y&&(G.open=true),G.style.marginBottom="4px";let K=document.createElement("summary");Object.assign(K.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"});let ee=document.createElement("span");K.textContent=`${z} (`,K.appendChild(ee),K.appendChild(document.createTextNode(")")),ee.textContent="0",G.appendChild(K);let Q=document.createElement("table");Object.assign(Q.style,{width:"100%",borderCollapse:"collapse",fontSize:"11px"});let Me=document.createElement("thead"),Te=document.createElement("tr");for(let Ye of ["Key","Value"]){let le=document.createElement("th");le.scope="col",Object.assign(le.style,{textAlign:"left",padding:"2px 4px",color:y.accent}),le.textContent=Ye,Te.appendChild(le);}Me.appendChild(Te),Q.appendChild(Me);let De=document.createElement("tbody");return Q.appendChild(De),G.appendChild(Q),{details:G,tbody:De,countSpan:ee}}function M(z,Y){let G=document.createElement("details");G.style.marginBottom="4px";let K=document.createElement("summary");Object.assign(K.style,{cursor:"pointer",color:Y,marginBottom:"4px"});let ee=document.createElement("span");K.textContent=`${z} (`,K.appendChild(ee),K.appendChild(document.createTextNode(")")),ee.textContent="0",G.appendChild(K);let Q=document.createElement("ul");return Object.assign(Q.style,{margin:"0",paddingLeft:"16px"}),G.appendChild(Q),{details:G,list:Q,countSpan:ee}}let O=D("Facts",true);i.appendChild(O.details);let H=D("Derivations",false);i.appendChild(H.details);let A=M("Inflight",y.yellow);i.appendChild(A.details);let F=M("Unmet",y.red);i.appendChild(F.details);let L=document.createElement("details");L.style.marginBottom="4px";let j=document.createElement("summary");Object.assign(j.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"}),j.textContent="Performance",L.appendChild(j);let P=document.createElement("div");P.style.fontSize="10px",P.style.color=y.muted,P.textContent="No data yet",L.appendChild(P),i.appendChild(L);let $=document.createElement("details");$.style.marginBottom="4px";let x=document.createElement("summary");Object.assign(x.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"}),x.textContent="Dependency Graph",$.appendChild(x);let E=document.createElementNS("http://www.w3.org/2000/svg","svg");E.setAttribute("width","100%"),E.setAttribute("height","120"),E.setAttribute("role","img"),E.setAttribute("aria-label","System dependency graph"),E.style.display="block",E.setAttribute("viewBox","0 0 460 120"),E.setAttribute("preserveAspectRatio","xMinYMin meet"),$.appendChild(E),i.appendChild($);let C=document.createElement("details");C.style.marginBottom="4px";let N=document.createElement("summary");Object.assign(N.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"}),N.textContent="Timeline",C.appendChild(N);let I=document.createElementNS("http://www.w3.org/2000/svg","svg");I.setAttribute("width","100%"),I.setAttribute("height","60"),I.setAttribute("role","img"),I.setAttribute("aria-label","Resolver execution timeline"),I.style.display="block",I.setAttribute("viewBox",`0 0 ${ne} 60`),I.setAttribute("preserveAspectRatio","xMinYMin meet");let d=document.createElementNS("http://www.w3.org/2000/svg","text");d.setAttribute("x",String(ne/2)),d.setAttribute("y","30"),d.setAttribute("text-anchor","middle"),d.setAttribute("fill",y.muted),d.setAttribute("font-size","10"),d.setAttribute("font-family",y.font),d.textContent="No resolver activity yet",I.appendChild(d),C.appendChild(I),i.appendChild(C);let b,f,e,l;if(r){let z=document.createElement("details");z.style.marginBottom="4px";let Y=document.createElement("summary");Object.assign(Y.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"}),e=document.createElement("span"),e.textContent="0",Y.textContent="Events (",Y.appendChild(e),Y.appendChild(document.createTextNode(")")),z.appendChild(Y),f=document.createElement("div"),Object.assign(f.style,{maxHeight:"150px",overflow:"auto",fontSize:"10px"}),f.setAttribute("role","log"),f.setAttribute("aria-live","polite"),f.tabIndex=0;let G=document.createElement("div");G.style.color=y.muted,G.style.padding="4px",G.textContent="Waiting for events...",G.className="dt-events-empty",f.appendChild(G),z.appendChild(f),i.appendChild(z),b=z,l=document.createElement("div");}else b=document.createElement("details"),f=document.createElement("div"),e=document.createElement("span"),l=document.createElement("div"),l.style.fontSize="10px",l.style.color=y.muted,l.style.marginTop="4px",l.style.fontStyle="italic",l.textContent="Enable trace: true for event log",i.appendChild(l);let h=document.createElement("div");Object.assign(h.style,{display:"flex",gap:"6px",marginTop:"6px"});let R=document.createElement("button");Object.assign(R.style,{background:"none",border:`1px solid ${y.border}`,color:y.text,cursor:"pointer",padding:"8px 12px",borderRadius:"3px",fontFamily:y.font,fontSize:"10px",minWidth:"44px",minHeight:"44px"}),R.textContent="\u23FA Record";let B=document.createElement("button");Object.assign(B.style,{background:"none",border:`1px solid ${y.border}`,color:y.text,cursor:"pointer",padding:"8px 12px",borderRadius:"3px",fontFamily:y.font,fontSize:"10px",minWidth:"44px",minHeight:"44px"}),B.textContent="\u2913 Export",h.appendChild(R),h.appendChild(B),i.appendChild(h),i.addEventListener("wheel",z=>{let Y=i,G=Y.scrollTop===0&&z.deltaY<0,K=Y.scrollTop+Y.clientHeight>=Y.scrollHeight&&z.deltaY>0;(G||K)&&z.preventDefault();},{passive:false});let q=o,X=new Set;function W(){q=true,i.style.display="block",n.style.display="none",n.setAttribute("aria-expanded","true"),S.focus();}function U(){q=false,i.style.display="none",n.style.display="block",n.setAttribute("aria-expanded","false"),n.focus();}n.addEventListener("click",W),S.addEventListener("click",U);function ie(z){z.key==="Escape"&&q&&U();}i.addEventListener("keydown",ie);function we(z){z.key==="d"&&z.shiftKey&&(z.ctrlKey||z.metaKey)&&(z.preventDefault(),q?U():W());}document.addEventListener("keydown",we);function ge(){u||(document.body.appendChild(n),document.body.appendChild(i));}document.body?ge():document.addEventListener("DOMContentLoaded",ge,{once:true});function Xe(){u=true,n.removeEventListener("click",W),S.removeEventListener("click",U),i.removeEventListener("keydown",ie),document.removeEventListener("keydown",we),document.removeEventListener("DOMContentLoaded",ge);for(let z of X)clearTimeout(z);X.clear(),n.remove(),i.remove(),c.remove();}return {refs:{container:i,toggleBtn:n,titleEl:p,statusEl:_,factsBody:O.tbody,factsCount:O.countSpan,derivBody:H.tbody,derivCount:H.countSpan,derivSection:H.details,inflightList:A.list,inflightSection:A.details,inflightCount:A.countSpan,unmetList:F.list,unmetSection:F.details,unmetCount:F.countSpan,perfSection:L,perfBody:P,historySection:T,historyLabel:v,undoBtn:w,redoBtn:m,flowSection:$,flowSvg:E,timelineSection:C,timelineSvg:I,eventsSection:b,eventsList:f,eventsCount:e,traceHint:l,recordBtn:R,exportBtn:B},destroy:Xe,isOpen:()=>q,flashTimers:X}}function ae(t,a,o,r,u,g){let c=fe(r),n=t.get(o);if(n){let i=n.cells;if(i[1]&&(i[1].textContent=c,u&&g)){let s=i[1];s.style.background="rgba(139, 154, 255, 0.25)";let p=setTimeout(()=>{s.style.background="",g.delete(p);},300);g.add(p);}}else {n=document.createElement("tr"),n.style.borderBottom=`1px solid ${y.rowBorder}`;let i=document.createElement("td");Object.assign(i.style,{padding:"2px 4px",color:y.muted}),i.textContent=o;let s=document.createElement("td");s.style.padding="2px 4px",s.textContent=c,n.appendChild(i),n.appendChild(s),a.appendChild(n),t.set(o,n);}}function je(t,a){let o=t.get(a);o&&(o.remove(),t.delete(a));}function de(t,a,o){if(t.inflightList.replaceChildren(),t.inflightCount.textContent=String(a.length),a.length>0)for(let r of a){let u=document.createElement("li");u.style.fontSize="11px",u.textContent=`${r.resolverId} (${r.id})`,t.inflightList.appendChild(u);}else {let r=document.createElement("li");r.style.fontSize="10px",r.style.color=y.muted,r.textContent="None",t.inflightList.appendChild(r);}if(t.unmetList.replaceChildren(),t.unmetCount.textContent=String(o.length),o.length>0)for(let r of o){let u=document.createElement("li");u.style.fontSize="11px",u.textContent=`${r.requirement.type} from ${r.fromConstraint}`,t.unmetList.appendChild(u);}else {let r=document.createElement("li");r.style.fontSize="10px",r.style.color=y.muted,r.textContent="None",t.unmetList.appendChild(r);}}function me(t,a,o){let r=a===0&&o===0;t.statusEl.style.color=r?y.green:y.yellow,t.statusEl.textContent=r?"Settled":"Working...",t.toggleBtn.textContent=r?"Directive":"Directive...",t.toggleBtn.setAttribute("aria-label",`Open Directive DevTools${r?"":" (system working)"}`);}function he(t,a,o,r){let u=Object.keys(o.derive);if(t.derivCount.textContent=String(u.length),u.length===0){a.clear(),t.derivBody.replaceChildren();let c=document.createElement("tr"),n=document.createElement("td");n.colSpan=2,n.style.color=y.muted,n.style.fontSize="10px",n.textContent="No derivations defined",c.appendChild(n),t.derivBody.appendChild(c);return}let g=new Set(u);for(let[c,n]of a)g.has(c)||(n.remove(),a.delete(c));for(let c of u){let n;try{n=fe(o.read(c));}catch{n="<error>";}ae(a,t.derivBody,c,n,true,r);}}function Fe(t,a,o,r){let u=t.eventsList.querySelector(".dt-events-empty");u&&u.remove();let g=document.createElement("div");Object.assign(g.style,{padding:"2px 4px",borderBottom:`1px solid ${y.rowBorder}`,fontFamily:"inherit"});let c=new Date,n=`${String(c.getHours()).padStart(2,"0")}:${String(c.getMinutes()).padStart(2,"0")}:${String(c.getSeconds()).padStart(2,"0")}.${String(c.getMilliseconds()).padStart(3,"0")}`,i;try{let k=JSON.stringify(o);i=J(k,60);}catch{i="{}";}let s=document.createElement("span");s.style.color=y.closeBtn,s.textContent=n;let p=document.createElement("span");p.style.color=y.accent,p.textContent=` ${a} `;let S=document.createElement("span");for(S.style.color=y.muted,S.textContent=i,g.appendChild(s),g.appendChild(p),g.appendChild(S),t.eventsList.prepend(g);t.eventsList.childElementCount>Be;)t.eventsList.lastElementChild?.remove();t.eventsCount.textContent=String(r);}function qe(t,a){t.perfBody.replaceChildren();let o=a.reconcileCount>0?(a.reconcileTotalMs/a.reconcileCount).toFixed(1):"\u2014",r=[`Reconciles: ${a.reconcileCount} (avg ${o}ms)`,`Effects: ${a.effectRunCount} run, ${a.effectErrorCount} errors`];for(let u of r){let g=document.createElement("div");g.style.marginBottom="2px",g.textContent=u,t.perfBody.appendChild(g);}if(a.resolverStats.size>0){let u=document.createElement("div");u.style.marginTop="4px",u.style.marginBottom="2px",u.style.color=y.accent,u.textContent="Resolvers:",t.perfBody.appendChild(u);let g=[...a.resolverStats.entries()].sort((c,n)=>n[1].totalMs-c[1].totalMs);for(let[c,n]of g){let i=n.count>0?(n.totalMs/n.count).toFixed(1):"0",s=document.createElement("div");s.style.paddingLeft="8px",s.textContent=`${c}: ${n.count}x, avg ${i}ms${n.errors>0?`, ${n.errors} err`:""}`,n.errors>0&&(s.style.color=y.red),t.perfBody.appendChild(s);}}}function Se(t,a){let o=a.history;if(!o){t.historySection.style.display="none";return}t.historySection.style.display="flex";let r=o.currentIndex,u=o.snapshots.length;t.historyLabel.textContent=u>0?`${r+1} / ${u}`:"0 snapshots";let g=r>0,c=r<u-1;t.undoBtn.disabled=!g,t.undoBtn.style.opacity=g?"1":"0.4",t.redoBtn.disabled=!c,t.redoBtn.style.opacity=c?"1":"0.4";}function Ve(t,a){t.undoBtn.addEventListener("click",()=>{a.history&&a.history.currentIndex>0&&a.history.goBack(1);}),t.redoBtn.addEventListener("click",()=>{a.history&&a.history.currentIndex<a.history.snapshots.length-1&&a.history.goForward(1);});}var xe=new WeakMap;function Qe(t,a,o,r,u,g){return [t.join(","),a.join(","),o.map(c=>`${c.id}:${c.active}`).join(","),[...r.entries()].map(([c,n])=>`${c}:${n.status}:${n.type}`).join(","),u.join(","),g.join(",")].join("|")}function Ze(t,a,o,r,u){for(let g of o){let c=t.nodes.get(`0:${g}`);if(!c)continue;let n=a.recentlyChangedFacts.has(g);c.rect.setAttribute("fill",n?y.text+"33":"none"),c.rect.setAttribute("stroke-width",n?"2":"1");}for(let g of r){let c=t.nodes.get(`1:${g}`);if(!c)continue;let n=a.recentlyComputedDerivations.has(g);c.rect.setAttribute("fill",n?y.accent+"33":"none"),c.rect.setAttribute("stroke-width",n?"2":"1");}for(let g of u){let c=t.nodes.get(`2:${g}`);if(!c)continue;let n=a.recentlyActiveConstraints.has(g),i=c.rect.getAttribute("stroke")??y.muted;c.rect.setAttribute("fill",n?i+"33":"none"),c.rect.setAttribute("stroke-width",n?"2":"1");}}function Ee(t,a,o){let r=te(a);if(!r)return;let u;try{u=Object.keys(a.facts.$store.toObject());}catch{u=[];}let g=Object.keys(a.derive),c=r.constraints,n=r.unmet,i=r.inflight,s=Object.keys(r.resolvers),p=new Map;for(let d of n)p.set(d.id,{type:d.requirement.type,fromConstraint:d.fromConstraint,status:"unmet"});for(let d of i)p.set(d.id,{type:d.resolverId,fromConstraint:"",status:"inflight"});if(u.length===0&&g.length===0&&c.length===0&&s.length===0){xe.delete(t.flowSvg),t.flowSvg.replaceChildren(),t.flowSvg.setAttribute("viewBox","0 0 460 40");let d=document.createElementNS("http://www.w3.org/2000/svg","text");d.setAttribute("x","230"),d.setAttribute("y","24"),d.setAttribute("text-anchor","middle"),d.setAttribute("fill",y.muted),d.setAttribute("font-size","10"),d.setAttribute("font-family",y.font),d.textContent="No system topology",t.flowSvg.appendChild(d);return}let S=i.map(d=>d.resolverId).sort(),k=Qe(u,g,c,p,s,S),_=xe.get(t.flowSvg);if(_&&_.fingerprint===k){Ze(_,o,u,g,c.map(d=>d.id));return}let T=V.nodeW+V.colGap,w=[5,5+T,5+T*2,5+T*3,5+T*4],m=w[4]+V.nodeW+5;function v(d){let b=V.startY+12;return d.map(f=>{let e={...f,y:b};return b+=V.nodeH+V.nodeGap,e})}let D=v(u.map(d=>{let b=r.facts.find(f=>f.key===d);return {id:d,label:J(b?.meta?.label??d,V.labelMaxChars)}})),M=v(g.map(d=>{let b=r.derivations.find(f=>f.id===d);return {id:d,label:J(b?.meta?.label??d,V.labelMaxChars)}})),O=v(c.map(d=>({id:d.id,label:J(d.meta?.label??d.id,V.labelMaxChars),active:d.active,priority:d.priority}))),H=v([...p.entries()].map(([d,b])=>({id:d,type:b.type,fromConstraint:b.fromConstraint,status:b.status}))),A=v(s.map(d=>{let b=r.resolverDefs.find(f=>f.id===d);return {id:d,label:J(b?.meta?.label??d,V.labelMaxChars)}})),F=Math.max(D.length,M.length,O.length,H.length,A.length,1),L=V.startY+12+F*(V.nodeH+V.nodeGap)+8;t.flowSvg.replaceChildren(),t.flowSvg.setAttribute("viewBox",`0 0 ${m} ${L}`),t.flowSvg.setAttribute("aria-label",`Dependency graph: ${u.length} facts, ${g.length} derivations, ${c.length} constraints, ${p.size} requirements, ${s.length} resolvers`);let j=["Facts","Derivations","Constraints","Reqs","Resolvers"];for(let[d,b]of j.entries()){let f=document.createElementNS("http://www.w3.org/2000/svg","text");f.setAttribute("x",String(w[d]??0)),f.setAttribute("y","10"),f.setAttribute("fill",y.accent),f.setAttribute("font-size",String(V.fontSize)),f.setAttribute("font-family",y.font),f.textContent=b,t.flowSvg.appendChild(f);}let P={fingerprint:k,nodes:new Map};function $(d,b,f,e,l,h,R,B,q){let X=document.createElementNS("http://www.w3.org/2000/svg","g");if(q){let ie=document.createElementNS("http://www.w3.org/2000/svg","title");ie.textContent=q,X.appendChild(ie);}let W=document.createElementNS("http://www.w3.org/2000/svg","rect");W.setAttribute("x",String(b)),W.setAttribute("y",String(f-6)),W.setAttribute("width",String(V.nodeW)),W.setAttribute("height",String(V.nodeH)),W.setAttribute("rx","3"),W.setAttribute("fill",B?h+"33":"none"),W.setAttribute("stroke",h),W.setAttribute("stroke-width",B?"2":"1"),W.setAttribute("opacity",R?"0.35":"1"),X.appendChild(W);let U=document.createElementNS("http://www.w3.org/2000/svg","text");return U.setAttribute("x",String(b+4)),U.setAttribute("y",String(f+4)),U.setAttribute("fill",h),U.setAttribute("font-size",String(V.fontSize)),U.setAttribute("font-family",y.font),U.setAttribute("opacity",R?"0.35":"1"),U.textContent=l,X.appendChild(U),t.flowSvg.appendChild(X),P.nodes.set(`${d}:${e}`,{g:X,rect:W,text:U}),{midX:b+V.nodeW/2,midY:f}}function x(d,b,f,e,l,h){let R=document.createElementNS("http://www.w3.org/2000/svg","line");R.setAttribute("x1",String(d)),R.setAttribute("y1",String(b)),R.setAttribute("x2",String(f)),R.setAttribute("y2",String(e)),R.setAttribute("stroke",l),R.setAttribute("stroke-width","1"),R.setAttribute("stroke-dasharray","3,2"),R.setAttribute("opacity","0.7"),t.flowSvg.appendChild(R);}let E=new Map,C=new Map,N=new Map,I=new Map;for(let d of D){let b=o.recentlyChangedFacts.has(d.id),f=r.facts.find(l=>l.key===d.id)?.meta,e=$(0,w[0],d.y,d.id,d.label,y.text,false,b,f?.description);E.set(d.id,e);}for(let d of M){let b=o.recentlyComputedDerivations.has(d.id),f=r.derivations.find(l=>l.id===d.id)?.meta,e=$(1,w[1],d.y,d.id,d.label,y.accent,false,b,f?.description);C.set(d.id,e);}for(let d of O){let b=o.recentlyActiveConstraints.has(d.id),f=c.find(l=>l.id===d.id)?.meta,e=$(2,w[2],d.y,d.id,d.label,f?.color??(d.active?y.yellow:y.muted),!d.active,b,f?.description);N.set(d.id,e);}for(let d of H){let b=d.status==="unmet"?y.red:y.yellow,f=$(3,w[3],d.y,d.id,J(d.type,V.labelMaxChars),b,false,false);I.set(d.id,f);}for(let d of A){let b=i.some(e=>e.resolverId===d.id),f=r.resolverDefs.find(e=>e.id===d.id)?.meta;$(4,w[4],d.y,d.id,d.label,f?.color??(b?y.green:y.muted),!b,false,f?.description);}for(let d of M){let b=o.derivationDeps.get(d.id),f=C.get(d.id);if(b&&f)for(let e of b){let l=E.get(e);l&&x(l.midX+V.nodeW/2,l.midY,f.midX-V.nodeW/2,f.midY,y.accent);}}for(let d of H){let b=N.get(d.fromConstraint),f=I.get(d.id);b&&f&&x(b.midX+V.nodeW/2,b.midY,f.midX-V.nodeW/2,f.midY,y.muted);}for(let d of i){let b=I.get(d.id);if(b){let f=A.find(e=>e.id===d.resolverId);f&&x(b.midX+V.nodeW/2,b.midY,w[4],f.y,y.green);}}xe.set(t.flowSvg,P);}function ze(t){t.animationTimer&&clearTimeout(t.animationTimer),t.animationTimer=setTimeout(()=>{t.recentlyChangedFacts.clear(),t.recentlyComputedDerivations.clear(),t.recentlyActiveConstraints.clear(),t.animationTimer=null;},600);}function We(t,a){let o=a.entries.toArray();if(o.length===0)return;t.timelineSvg.replaceChildren();let r=Number.POSITIVE_INFINITY,u=Number.NEGATIVE_INFINITY;for(let T of o)T.startMs<r&&(r=T.startMs),T.endMs>u&&(u=T.endMs);let g=performance.now();for(let T of a.inflight.values())T<r&&(r=T),g>u&&(u=g);let c=u-r||1,n=ne-oe-10,i=[],s=new Set;for(let T of o)s.has(T.resolver)||(s.add(T.resolver),i.push(T.resolver));for(let T of a.inflight.keys())s.has(T)||(s.add(T),i.push(T));let S=i.slice(-12),k=re*S.length+20;t.timelineSvg.setAttribute("viewBox",`0 0 ${ne} ${k}`),t.timelineSvg.setAttribute("height",String(Math.min(k,200)));let _=5;for(let T=0;T<=_;T++){let w=oe+n*T/_,m=c*T/_,v=document.createElementNS("http://www.w3.org/2000/svg","text");v.setAttribute("x",String(w)),v.setAttribute("y","8"),v.setAttribute("fill",y.muted),v.setAttribute("font-size","6"),v.setAttribute("font-family",y.font),v.setAttribute("text-anchor","middle"),v.textContent=m<1e3?`${m.toFixed(0)}ms`:`${(m/1e3).toFixed(1)}s`,t.timelineSvg.appendChild(v);let D=document.createElementNS("http://www.w3.org/2000/svg","line");D.setAttribute("x1",String(w)),D.setAttribute("y1","10"),D.setAttribute("x2",String(w)),D.setAttribute("y2",String(k)),D.setAttribute("stroke",y.border),D.setAttribute("stroke-width","0.5"),t.timelineSvg.appendChild(D);}for(let T=0;T<S.length;T++){let w=S[T],m=12+T*re,v=T%ve.length,D=ve[v],M=document.createElementNS("http://www.w3.org/2000/svg","text");M.setAttribute("x",String(oe-4)),M.setAttribute("y",String(m+re/2+3)),M.setAttribute("fill",y.muted),M.setAttribute("font-size","7"),M.setAttribute("font-family",y.font),M.setAttribute("text-anchor","end"),M.textContent=J(w,12),t.timelineSvg.appendChild(M);let O=o.filter(A=>A.resolver===w);for(let A of O){let F=oe+(A.startMs-r)/c*n,L=Math.max((A.endMs-A.startMs)/c*n,be),j=document.createElementNS("http://www.w3.org/2000/svg","rect");j.setAttribute("x",String(F)),j.setAttribute("y",String(m+2)),j.setAttribute("width",String(L)),j.setAttribute("height",String(re-4)),j.setAttribute("rx","2"),j.setAttribute("fill",A.error?y.red:D),j.setAttribute("opacity","0.8");let P=document.createElementNS("http://www.w3.org/2000/svg","title"),$=A.endMs-A.startMs;P.textContent=`${w}: ${$.toFixed(1)}ms${A.error?" (error)":""}`,j.appendChild(P),t.timelineSvg.appendChild(j);}let H=a.inflight.get(w);if(H!==void 0){let A=oe+(H-r)/c*n,F=Math.max((g-H)/c*n,be),L=document.createElementNS("http://www.w3.org/2000/svg","rect");L.setAttribute("x",String(A)),L.setAttribute("y",String(m+2)),L.setAttribute("width",String(F)),L.setAttribute("height",String(re-4)),L.setAttribute("rx","2"),L.setAttribute("fill",D),L.setAttribute("opacity","0.4"),L.setAttribute("stroke",D),L.setAttribute("stroke-width","1"),L.setAttribute("stroke-dasharray","3,2");let j=document.createElementNS("http://www.w3.org/2000/svg","title");j.textContent=`${w}: inflight ${(g-H).toFixed(0)}ms`,L.appendChild(j),t.timelineSvg.appendChild(L);}}t.timelineSvg.setAttribute("aria-label",`Timeline: ${o.length} resolver executions across ${S.length} resolvers`);}function et(){if(typeof window>"u")return {systems:new Map,getSystem:()=>null,getSystems:()=>[],inspect:()=>null,getEvents:()=>[],explain:()=>null,exportSession:()=>null,importSession:()=>false,clearEvents:()=>{},subscribe:()=>()=>{}};if(!window.__DIRECTIVE__){let t=new Map,a={systems:t,getSystem(o){return o?t.get(o)?.system??null:t.values().next().value?.system??null},getSystems(){return [...t.keys()]},inspect(o){let r=this.getSystem(o),u=o?t.get(o):t.values().next().value,g=r?.inspect()??null;return g&&u&&(g.resolverStats=u.resolverStats?Object.fromEntries(u.resolverStats):{}),g},getEvents(o){return o?t.get(o)?.events.toArray()??[]:t.values().next().value?.events.toArray()??[]},explain(o,r){return this.getSystem(r)?.explain(o)??null},subscribe(o,r){let u=r?t.get(r):t.values().next().value;if(!u){let g=false,n=setInterval(()=>{let s=r?t.get(r):t.values().next().value;s&&!g&&(g=true,s.subscribers.add(o));},100),i=setTimeout(()=>clearInterval(n),1e4);return ()=>{clearInterval(n),clearTimeout(i);for(let s of t.values())s.subscribers.delete(o);}}return u.subscribers.add(o),()=>{u.subscribers.delete(o);}},exportSession(o){let r=o?t.get(o):t.values().next().value;return r?JSON.stringify({version:1,name:o??t.keys().next().value??"default",exportedAt:Date.now(),events:r.events.toArray()}):null},importSession(o,r){try{if(o.length>10*1024*1024)return !1;let u=JSON.parse(o);if(!u||typeof u!="object"||Array.isArray(u)||!Array.isArray(u.events))return !1;let g=r?t.get(r):t.values().next().value;if(!g)return !1;let c=g.maxEvents,n=u.events,i=n.length>c?n.length-c:0;g.events.clear();for(let s=i;s<n.length;s++){let p=n[s];p&&typeof p=="object"&&!Array.isArray(p)&&typeof p.timestamp=="number"&&typeof p.type=="string"&&p.type!=="__proto__"&&p.type!=="constructor"&&p.type!=="prototype"&&g.events.push({timestamp:p.timestamp,type:p.type,data:p.data??null});}return !0}catch{return false}},clearEvents(o){let r=o?t.get(o):t.values().next().value;r&&r.events.clear();}};return Object.defineProperty(window,"__DIRECTIVE__",{value:a,writable:false,configurable:ue(),enumerable:true}),a}return window.__DIRECTIVE__}function tt(t={}){let{name:a="default",trace:o=false,maxEvents:r,panel:u=false,position:g="bottom-right",defaultOpen:c=false}=t,n=Oe(r),i=et(),s={system:null,events:new se(n),maxEvents:n,subscribers:new Set,resolverStats:new Map};i.systems.set(a,s);let p=(e,l)=>{let h={timestamp:Date.now(),type:e,data:l};o&&s.events.push(h);for(let R of s.subscribers)try{R(h);}catch{}},S=null,k=new Map,_=new Map,T=Le(),w=Ie(),m=$e(),v=Pe(),D=u&&typeof window<"u"&&typeof document<"u"&&ue(),M=null,O=0,H=1,A=2,F=4,L=8,j=16,P=32,$=64,x=128,E=new Map,C=new Set,N=null;function I(e){O|=e,M===null&&typeof requestAnimationFrame<"u"&&(M=requestAnimationFrame(d));}function d(){if(M=null,!S||!s.system){O=0;return}let e=S.refs,l=s.system,h=O;if(O=0,h&H){for(let R of C)je(k,R);C.clear();for(let[R,{value:B,flash:q}]of E)ae(k,e.factsBody,R,B,q,S.flashTimers);E.clear(),e.factsCount.textContent=String(k.size);}if(h&A&&he(e,_,l,S.flashTimers),h&L)if(N)me(e,N.inflight.length,N.unmet.length);else {let R=te(l);R&&me(e,R.inflight.length,R.unmet.length);}if(h&F)if(N)de(e,N.inflight,N.unmet);else {let R=te(l);R&&de(e,R.inflight,R.unmet);}h&j&&qe(e,T),h&P&&Ee(e,l,w),h&$&&Se(e,l),h&x&&We(e,v);}function b(e,l){S&&o&&Fe(S.refs,e,l,s.events.size);}function f(e,l){m.isRecording&&m.recordedEvents.length<_e&&m.recordedEvents.push({timestamp:Date.now(),type:e,data:ke(l)});}return {name:"devtools",onInit:e=>{if(s.system=e,p("init",{}),typeof window<"u"&&console.log(`%c[Directive Devtools]%c System "${a}" initialized. Access via window.__DIRECTIVE__`,"color: #7c3aed; font-weight: bold","color: inherit"),D){let l=s.system;S=He(a,g,c,o);let h=S.refs;try{let B=l.facts.$store.toObject();for(let[q,X]of Object.entries(B))ae(k,h.factsBody,q,X,!1);h.factsCount.textContent=String(Object.keys(B).length);}catch{}he(h,_,l);let R=te(l);R&&(me(h,R.inflight.length,R.unmet.length),de(h,R.inflight,R.unmet)),Se(h,l),Ve(h,l),Ee(h,l,w),h.recordBtn.addEventListener("click",()=>{if(m.isRecording=!m.isRecording,h.recordBtn.textContent=m.isRecording?"\u23F9 Stop":"\u23FA Record",h.recordBtn.style.color=m.isRecording?y.red:y.text,m.isRecording){m.recordedEvents=[],m.snapshots=[];try{m.snapshots.push({timestamp:Date.now(),facts:l.facts.$store.toObject()});}catch{}}}),h.exportBtn.addEventListener("click",()=>{let B=m.recordedEvents.length>0?m.recordedEvents:s.events.toArray(),q=JSON.stringify({version:1,name:a,exportedAt:Date.now(),events:B,snapshots:m.snapshots},null,2),X=new Blob([q],{type:"application/json"}),W=URL.createObjectURL(X),U=document.createElement("a");U.href=W,U.download=`directive-session-${a}-${Date.now()}.json`,U.click(),URL.revokeObjectURL(W);});}},onStart:e=>{p("start",{}),b("start",{}),f("start",{});},onStop:e=>{p("stop",{}),b("stop",{}),f("stop",{});},onDestroy:e=>{p("destroy",{}),i.systems.delete(a),M!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(M),M=null),w.animationTimer&&clearTimeout(w.animationTimer),S&&(S.destroy(),S=null,k.clear(),_.clear());},onFactSet:(e,l,h)=>{p("fact.set",{key:e,value:l,prev:h}),f("fact.set",{key:e,value:l,prev:h}),w.recentlyChangedFacts.add(e),S&&s.system&&(E.set(e,{value:l,flash:true}),C.delete(e),I(H),b("fact.set",{key:e,value:l}));},onFactDelete:(e,l)=>{p("fact.delete",{key:e,prev:l}),f("fact.delete",{key:e,prev:l}),S&&(C.add(e),E.delete(e),I(H),b("fact.delete",{key:e}));},onFactsBatch:e=>{if(p("facts.batch",{changes:e}),f("facts.batch",{count:e.length}),S&&s.system){for(let l of e)l.type==="delete"?(C.add(l.key),E.delete(l.key)):(w.recentlyChangedFacts.add(l.key),E.set(l.key,{value:l.value,flash:true}),C.delete(l.key));I(H),b("facts.batch",{count:e.length});}},onDerivationCompute:(e,l,h)=>{p("derivation.compute",{id:e,value:l,deps:h}),f("derivation.compute",{id:e,deps:h}),w.derivationDeps.set(e,h),w.recentlyComputedDerivations.add(e),b("derivation.compute",{id:e,deps:h});},onDerivationInvalidate:e=>{p("derivation.invalidate",{id:e}),b("derivation.invalidate",{id:e});},onReconcileStart:e=>{p("reconcile.start",{}),T.lastReconcileStartMs=performance.now(),b("reconcile.start",{}),f("reconcile.start",{});},onReconcileEnd:e=>{if(p("reconcile.end",e),f("reconcile.end",{unmet:e.unmet.length,inflight:e.inflight.length,completed:e.completed.length}),T.lastReconcileStartMs>0){let l=performance.now()-T.lastReconcileStartMs;T.reconcileCount++,T.reconcileTotalMs+=l,T.lastReconcileStartMs=0;}if(m.isRecording&&s.system&&m.snapshots.length<Ne)try{m.snapshots.push({timestamp:Date.now(),facts:s.system.facts.$store.toObject()});}catch{}S&&s.system&&(N=e,ze(w),I(A|L|F|j|P|$),b("reconcile.end",{unmet:e.unmet.length,inflight:e.inflight.length}));},onConstraintEvaluate:(e,l,h)=>{let R=s.system?.meta?.constraint(e)?.label,B=R?{id:e,active:l,label:R}:{id:e,active:l},q=h?{...B,whenExplain:h}:B;p("constraint.evaluate",q),f("constraint.evaluate",q),l?(w.activeConstraints.add(e),w.recentlyActiveConstraints.add(e)):w.activeConstraints.delete(e),b("constraint.evaluate",{id:e,active:l});},onConstraintError:(e,l)=>{p("constraint.error",{id:e,error:String(l)}),b("constraint.error",{id:e,error:String(l)});},onRequirementCreated:e=>{p("requirement.created",{id:e.id,type:e.requirement.type}),f("requirement.created",{id:e.id,type:e.requirement.type}),b("requirement.created",{id:e.id,type:e.requirement.type});},onRequirementMet:(e,l)=>{p("requirement.met",{id:e.id,byResolver:l}),f("requirement.met",{id:e.id,byResolver:l}),b("requirement.met",{id:e.id,byResolver:l});},onRequirementCanceled:e=>{p("requirement.canceled",{id:e.id}),f("requirement.canceled",{id:e.id}),b("requirement.canceled",{id:e.id});},onResolverStart:(e,l)=>{let h=s.system?.meta?.resolver(e)?.label,R={resolver:e,requirementId:l.id},B=h?{...R,label:h}:R;p("resolver.start",B),f("resolver.start",B),v.inflight.set(e,performance.now()),S&&s.system&&(I(F|L|x),b("resolver.start",{resolver:e,requirementId:l.id}));},onResolverComplete:(e,l,h)=>{let R=s.system?.meta?.resolver(e)?.label;p("resolver.complete",{resolver:e,requirementId:l.id,duration:h,...R?{label:R}:{}}),f("resolver.complete",{resolver:e,requirementId:l.id,duration:h});let B=s.resolverStats.get(e)??{count:0,totalMs:0,errors:0};if(B.count++,B.totalMs+=h,s.resolverStats.set(e,B),s.resolverStats.size>ye){let X=s.resolverStats.keys().next().value;X!==void 0&&s.resolverStats.delete(X);}T.resolverStats.set(e,{...B});let q=v.inflight.get(e);v.inflight.delete(e),q!==void 0&&v.entries.push({resolver:e,startMs:q,endMs:performance.now(),error:false}),S&&s.system&&(I(F|L|j|x),b("resolver.complete",{resolver:e,duration:h}));},onResolverError:(e,l,h)=>{p("resolver.error",{resolver:e,requirementId:l.id,error:String(h)}),f("resolver.error",{resolver:e,requirementId:l.id,error:String(h)});let R=s.resolverStats.get(e)??{count:0,totalMs:0,errors:0};if(R.errors++,s.resolverStats.set(e,R),s.resolverStats.size>ye){let q=s.resolverStats.keys().next().value;q!==void 0&&s.resolverStats.delete(q);}T.resolverStats.set(e,{...R});let B=v.inflight.get(e);v.inflight.delete(e),B!==void 0&&v.entries.push({resolver:e,startMs:B,endMs:performance.now(),error:true}),S&&s.system&&(I(F|L|j|x),b("resolver.error",{resolver:e,error:String(h)}));},onResolverRetry:(e,l,h)=>{p("resolver.retry",{resolver:e,requirementId:l.id,attempt:h}),f("resolver.retry",{resolver:e,requirementId:l.id,attempt:h}),b("resolver.retry",{resolver:e,attempt:h});},onResolverCancel:(e,l)=>{p("resolver.cancel",{resolver:e,requirementId:l.id}),f("resolver.cancel",{resolver:e,requirementId:l.id}),v.inflight.delete(e),b("resolver.cancel",{resolver:e});},onEffectRun:e=>{let l=s.system?.meta?.effect(e)?.label,h=l?{id:e,label:l}:{id:e};p("effect.run",h),f("effect.run",h),T.effectRunCount++,b("effect.run",{id:e});},onEffectError:(e,l)=>{p("effect.error",{id:e,error:String(l)}),T.effectErrorCount++,b("effect.error",{id:e,error:String(l)});},onSnapshot:e=>{p("timetravel.snapshot",{id:e.id,trigger:e.trigger}),S&&s.system&&I($),b("timetravel.snapshot",{id:e.id,trigger:e.trigger});},onHistoryNavigate:(e,l)=>{if(p("timetravel.jump",{from:e,to:l}),f("timetravel.jump",{from:e,to:l}),S&&s.system){let h=s.system;try{let R=h.facts.$store.toObject();k.clear(),S.refs.factsBody.replaceChildren();for(let[B,q]of Object.entries(R))ae(k,S.refs.factsBody,B,q,!1);S.refs.factsCount.textContent=String(Object.keys(R).length);}catch{}_.clear(),w.derivationDeps.clear(),S.refs.derivBody.replaceChildren(),N=null,I(A|L|F|P|$),b("timetravel.jump",{from:e,to:l});}},onError:e=>{p("error",{source:e.source,sourceId:e.sourceId,message:e.message}),f("error",{source:e.source,message:e.message}),b("error",{source:e.source,message:e.message});},onErrorRecovery:(e,l)=>{p("error.recovery",{source:e.source,sourceId:e.sourceId,strategy:l}),b("error.recovery",{source:e.source,strategy:l});},onTraceComplete:e=>{p("trace.complete",{id:e.id,status:e.status,facts:e.factChanges.length,constraints:e.constraintsHit.length,requirements:e.requirementsAdded.length,resolvers:e.resolversStarted.length,effects:e.effectsRun.length}),b("trace.complete",{id:e.id});},onDefinitionRegister:(e,l)=>{p("definition.register",{type:e,id:l}),f("definition.register",{type:e,id:l}),b("definition.register",{type:e,id:l});},onDefinitionAssign:(e,l)=>{p("definition.assign",{type:e,id:l}),f("definition.assign",{type:e,id:l}),b("definition.assign",{type:e,id:l});},onDefinitionUnregister:(e,l)=>{p("definition.unregister",{type:e,id:l}),f("definition.unregister",{type:e,id:l}),b("definition.unregister",{type:e,id:l});},onDefinitionCall:(e,l,h)=>{p("definition.call",{type:e,id:l,props:h}),f("definition.call",{type:e,id:l,props:h}),b("definition.call",{type:e,id:l,props:h});}}}var Ge="directive-devtools-event",Ue=new Set(["__proto__","constructor","prototype"]),nt=Math.random().toString(36).slice(2,8);function rt(){if(typeof window<"u"){let t=`__DIRECTIVE_BRIDGE_ID_${nt}__`,a=window,o=a[t]??0;return a[t]=o+1,o+1}return 1}function ot(t){let a=false;for(let r of Ue)if(r in t){a=true;break}if(!a)return t;let o=Object.create(null);for(let[r,u]of Object.entries(t))Ue.has(r)||(o[r]=u);return o}function it(t){if(!(typeof window>"u"))try{let a=ot(t),o={id:rt(),timestamp:Date.now(),snapshotId:null,...a};window.dispatchEvent(new CustomEvent(Ge,{detail:o}));}catch{}}function st(t){let{storage:a,key:o,include:r,exclude:u=[],debounce:g=100,onRestore:c,onSave:n,onError:i}=t,s=null,p=null,S=new Set,k=m=>u.includes(m)?false:r?r.includes(m):true,_=()=>{try{let m=a.getItem(o);if(!m)return null;let v=JSON.parse(m);return typeof v!="object"||v===null?null:chunkZHS3EW2Z_cjs.c(v)?v:(i?.(new Error("Potential prototype pollution detected in stored data")),null)}catch(m){return i?.(m instanceof Error?m:new Error(String(m))),null}},T=()=>{if(p)try{let m={};for(let v of S)k(v)&&(m[v]=p.facts[v]);a.setItem(o,JSON.stringify(m)),n?.(m);}catch(m){i?.(m instanceof Error?m:new Error(String(m)));}},w=()=>{s&&clearTimeout(s),s=setTimeout(T,g);};return {name:"persistence",onInit:m=>{p=m;let v=_();v&&(p.facts.$store.batch(()=>{for(let[D,M]of Object.entries(v))k(D)&&(p.facts[D]=M,S.add(D));}),c?.(v));},onDestroy:()=>{s&&clearTimeout(s),T();},onFactSet:m=>{S.add(m),k(m)&&w();},onFactDelete:m=>{S.delete(m),k(m)&&w();},onFactsBatch:m=>{let v=false;for(let D of m)D.type==="set"?S.add(D.key):S.delete(D.key),k(D.key)&&(v=true);v&&w();}}}function at(t={}){let{onSlowConstraint:a,onSlowResolver:o,slowConstraintThresholdMs:r=16,slowResolverThresholdMs:u=1e3}=t,g=new Map,c=new Map,n=new Map,i={runs:0,totalDurationMs:0,avgDurationMs:0,maxDurationMs:0},s=0,p=0,S=0;function k(m){let v=g.get(m);return v||(v={evaluations:0,totalDurationMs:0,avgDurationMs:0,maxDurationMs:0,lastEvaluatedAt:0},g.set(m,v)),v}function _(m){let v=c.get(m);return v||(v={starts:0,completions:0,errors:0,retries:0,cancellations:0,totalDurationMs:0,avgDurationMs:0,maxDurationMs:0,lastCompletedAt:0},c.set(m,v)),v}function T(m){let v=n.get(m);return v||(v={runs:0,errors:0,lastRunAt:0},n.set(m,v)),v}let w={name:"performance",onStart(){s=Date.now();},onConstraintEvaluate(m,v){let D=performance.now(),M=k(m);if(M.evaluations++,M.lastEvaluatedAt=Date.now(),S>0){let O=D-S;M.totalDurationMs+=O;let H=M.evaluations;M.avgDurationMs=M.totalDurationMs/H,O>M.maxDurationMs&&(M.maxDurationMs=O),O>r&&a?.(m,O);}S=D;},onResolverStart(m,v){let D=_(m);D.starts++;},onResolverComplete(m,v,D){let M=_(m);M.completions++,M.totalDurationMs+=D,M.avgDurationMs=M.totalDurationMs/M.completions,D>M.maxDurationMs&&(M.maxDurationMs=D),M.lastCompletedAt=Date.now(),D>u&&o?.(m,D);},onResolverError(m,v,D){_(m).errors++;},onResolverRetry(m,v,D){_(m).retries++;},onResolverCancel(m,v){_(m).cancellations++;},onEffectRun(m){let v=T(m);v.runs++,v.lastRunAt=Date.now();},onEffectError(m,v){T(m).errors++;},onReconcileStart(){p=performance.now(),S=0;},onReconcileEnd(){let m=performance.now()-p;i.runs++,i.totalDurationMs+=m,i.avgDurationMs=i.totalDurationMs/i.runs,m>i.maxDurationMs&&(i.maxDurationMs=m);},onDestroy(){w.reset();},getSnapshot(){let m={};for(let[M,O]of g)m[M]={...O};let v={};for(let[M,O]of c)v[M]={...O};let D={};for(let[M,O]of n)D[M]={...O};return {constraints:m,resolvers:v,effects:D,reconcile:{...i},uptime:s?Date.now()-s:0}},reset(){g.clear(),c.clear(),n.clear(),i.runs=0,i.totalDurationMs=0,i.avgDurationMs=0,i.maxDurationMs=0,S=0;}};return w}function pe(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function Ce(t,a){if(t.length===0)return 0;let o=[...t].sort((u,g)=>u-g),r=Math.ceil(a/100*o.length)-1;return o[Math.max(0,r)]??0}function ct(t={}){let{serviceName:a="directive-agents",metrics:o={},tracing:r={},alerts:u=[],summaryMetrics:g={},events:c={}}=t,n={requests:g.requests??"agent.requests",errors:g.errors??"agent.errors",latency:g.latency??"agent.latency",tokens:g.tokens??"agent.tokens",cost:g.cost??"agent.cost"},{enabled:i=true,exportInterval:s,exporter:p,maxDataPoints:S=1e3}=o,{enabled:k=true,sampleRate:_=1,maxSpans:T=1e3,exporter:w}=r,m=Date.now(),v=new Map,D=new Map,M=[],O=[],H=new Map,A=new Map,F;s&&(p||w)&&(F=setInterval(async()=>{try{if(p&&i&&await p(Array.from(A.values())),w&&k){let x=M.splice(0,100);x.length>0&&await w(x);}}catch(x){console.error("[Directive Observability] Export error:",x);}},s));function L(x){if(!i)return;let E=`${x.name}:${JSON.stringify(Object.fromEntries(Object.entries(x.labels).sort()))}`,C=v.get(E);C||(C=[],v.set(E,C)),C.push(x),C.length>S&&C.shift(),j(x.name,C),c.onMetricRecorded?.(x),P(x.name);}function j(x,E){if(E.length===0)return;let C=E.map(f=>f.value),N=C.reduce((f,e)=>f+e,0),I=E[0],d=C[C.length-1],b={name:x,type:I.type,count:E.length,sum:N,min:Math.min(...C),max:Math.max(...C),avg:N/E.length,lastValue:d,lastUpdated:Date.now()};A.set(x,b);}function P(x){for(let E of u){if(E.metric!==x)continue;let C=A.get(x);if(!C)continue;let N=`${E.metric}:${E.threshold}`,I=H.get(N),d=E.cooldownMs??6e4;if(I&&Date.now()-I<d)continue;let b=E.operator??">",f=C.lastValue,e=E.threshold,l=false;switch(b){case ">":l=f>e;break;case "<":l=f<e;break;case ">=":l=f>=e;break;case "<=":l=f<=e;break;case "==":l=f===e;break}if(l){let h={alertId:pe(),metric:x,currentValue:f,threshold:e,operator:b,action:E.action,timestamp:Date.now(),message:`Alert: ${x} ${b} ${e} (current: ${f})`};switch(O.push(h),O.length>1e3&&O.splice(0,O.length-1e3),H.set(N,Date.now()),c.onAlert?.(h),E.action){case "log":console.log(`[Observability] ${h.message}`);break;case "warn":console.warn(`[Observability] ${h.message}`);break;case "alert":console.error(`[Observability ALERT] ${h.message}`);break;case "callback":E.callback?.(C,e);break}}}}function $(x){let E=[];for(let[C,N]of v)if(C.startsWith(`${x}:`))for(let I of N)E.push(I.value);return E.length===0?{}:{p50:Ce(E,50),p90:Ce(E,90),p99:Ce(E,99)}}return {incrementCounter(x,E={},C=1){L({name:x,type:"counter",value:C,labels:E,timestamp:Date.now()});},setGauge(x,E,C={}){L({name:x,type:"gauge",value:E,labels:C,timestamp:Date.now()});},observeHistogram(x,E,C={}){L({name:x,type:"histogram",value:E,labels:C,timestamp:Date.now()});},startSpan(x,E){if(Math.random()>_)return {traceId:"sampled-out",spanId:"sampled-out",operationName:x,serviceName:a,startTime:Date.now(),status:"ok",tags:{},logs:[]};let C={traceId:E?D.get(E)?.traceId??pe():pe(),spanId:pe(),parentSpanId:E,operationName:x,serviceName:a,startTime:Date.now(),status:"ok",tags:{},logs:[]};return k&&(D.set(C.spanId,C),c.onSpanStart?.(C)),C},endSpan(x,E="ok"){if(x==="sampled-out")return;let C=D.get(x);if(C){for(C.endTime=Date.now(),C.duration=C.endTime-C.startTime,C.status=E,D.delete(x),M.push(C);M.length>T;)M.shift();L({name:`${C.operationName}.latency`,type:"histogram",value:C.duration,labels:{},timestamp:Date.now()}),E==="error"&&L({name:`${C.operationName}.errors`,type:"counter",value:1,labels:{},timestamp:Date.now()}),c.onSpanEnd?.(C);}},addSpanLog(x,E,C="info"){if(x==="sampled-out")return;let N=D.get(x);N&&N.logs.push({timestamp:Date.now(),message:E,level:C});},addSpanTag(x,E,C){if(x==="sampled-out")return;let N=D.get(x);N&&(N.tags[E]=C);},getDashboard(){let x=A.get(n.requests),E=A.get(n.errors),C=A.get(n.latency),N=A.get(n.tokens),I=A.get(n.cost),d=x?.sum??0,b=E?.sum??0,f=d>0?b/d:0,e=C?$(n.latency):{};return {service:{name:a,uptime:Date.now()-m,startTime:m},metrics:Object.fromEntries(A),traces:[...M].slice(-100),alerts:[...O].slice(-50),summary:{totalRequests:d,totalErrors:b,errorRate:f,avgLatency:C?.avg??0,p99Latency:e.p99??0,activeSpans:D.size,totalTokens:N?.sum??0,totalCost:I?.sum??0}}},getMetric(x){let E=A.get(x);if(!E)return;let C=$(x);return {...E,...C}},getTraces(x=100){return [...M].slice(-x)},getAlerts(){return [...O]},export(){return {metrics:Array.from(A.values()),traces:[...M],alerts:[...O]}},clear(){v.clear(),A.clear(),D.clear(),M.length=0,O.length=0,H.clear();},async destroy(){F&&(clearInterval(F),F=void 0);try{p&&i&&A.size>0&&await p(Array.from(A.values())),w&&k&&M.length>0&&await w([...M]);}catch(x){console.error("[Directive Observability] Error flushing data during destroy:",x);}v.clear(),A.clear(),D.clear(),M.length=0,O.length=0,H.clear();},getHealthStatus(){let x=A.get(n.requests),E=A.get(n.errors),C=x?.sum??0,N=E?.sum??0,I=C>0?N/C:0,d=O.filter(b=>Date.now()-b.timestamp<3e5).length;return {healthy:I<.1&&d===0,uptime:Date.now()-m,errorRate:I,activeAlerts:d}}}}function lt(t){return {trackRun(a,o){let r={agent:a};t.incrementCounter("agent.requests",r),o.success||t.incrementCounter("agent.errors",r),t.observeHistogram("agent.latency",o.latencyMs,r),o.inputTokens!==void 0&&(t.incrementCounter("agent.tokens.input",r,o.inputTokens),t.incrementCounter("agent.tokens",r,o.inputTokens)),o.outputTokens!==void 0&&(t.incrementCounter("agent.tokens.output",r,o.outputTokens),t.incrementCounter("agent.tokens",r,o.outputTokens)),o.cost!==void 0&&t.incrementCounter("agent.cost",r,o.cost),o.toolCalls!==void 0&&t.incrementCounter("agent.tool_calls",r,o.toolCalls);},trackGuardrail(a,o){let r={guardrail:a};t.incrementCounter("guardrail.checks",r),o.passed||t.incrementCounter("guardrail.failures",r),o.blocked&&t.incrementCounter("guardrail.blocks",r),t.observeHistogram("guardrail.latency",o.latencyMs,r);},trackApproval(a,o){let r={tool:a};t.incrementCounter("approval.requests",r),o.approved?t.incrementCounter("approval.approved",r):t.incrementCounter("approval.rejected",r),o.timedOut&&t.incrementCounter("approval.timeouts",r),t.observeHistogram("approval.wait_time",o.waitTimeMs,r);},trackHandoff(a,o,r){t.incrementCounter("handoff.count",{from:a,to:o}),t.observeHistogram("handoff.latency",r);}}}function ut(t){let a=[{key:"service.name",value:{stringValue:t.serviceName??"directive-agents"}}];if(t.serviceVersion&&a.push({key:"service.version",value:{stringValue:t.serviceVersion}}),t.resourceAttributes)for(let[o,r]of Object.entries(t.resourceAttributes))a.push({key:o,value:{stringValue:r}});return {attributes:a}}function Z(t){return `${BigInt(t)*BigInt(1e6)}`}function dt(t){switch(t){case "counter":return "sum";case "gauge":return "gauge";case "histogram":return "histogram";default:return "gauge"}}function mt(t,a,o){let r=t.map(u=>{let g=u.lastUpdated-6e4,c=[{asInt:u.type==="counter"?u.sum:void 0,asDouble:u.type!=="counter"?u.lastValue:void 0,timeUnixNano:Z(u.lastUpdated),startTimeUnixNano:Z(g),attributes:[]}],n=dt(u.type),i={name:u.name,unit:""};return n==="sum"?i.sum={dataPoints:c,aggregationTemporality:2,isMonotonic:true}:n==="histogram"?i.histogram={dataPoints:[{count:u.count,sum:u.sum,min:u.min,max:u.max,timeUnixNano:Z(u.lastUpdated),startTimeUnixNano:Z(g),attributes:[]}],aggregationTemporality:2}:i.gauge={dataPoints:c},i});return {resourceMetrics:[{resource:a,scopeMetrics:[{scope:{name:"directive",version:o},metrics:r}]}]}}function pt(t,a,o){let r=t.map(u=>{let g=u.logs.map(i=>({timeUnixNano:Z(i.timestamp),name:i.level,attributes:[{key:"message",value:{stringValue:i.message}},{key:"level",value:{stringValue:i.level}}]})),c=Object.entries(u.tags).map(([i,s])=>({key:i,value:typeof s=="string"?{stringValue:s}:typeof s=="number"?{intValue:`${s}`}:{boolValue:s}})),n=u.status==="ok"?1:u.status==="error"?2:0;return {traceId:u.traceId.replace(/-/g,"").padEnd(32,"0").slice(0,32),spanId:u.spanId.replace(/-/g,"").padEnd(16,"0").slice(0,16),parentSpanId:u.parentSpanId?u.parentSpanId.replace(/-/g,"").padEnd(16,"0").slice(0,16):void 0,name:u.operationName,kind:1,startTimeUnixNano:Z(u.startTime),endTimeUnixNano:u.endTime?Z(u.endTime):Z(u.startTime),attributes:c,events:g,status:{code:n}}});return {resourceSpans:[{resource:a,scopeSpans:[{scope:{name:"directive",version:o},spans:r}]}]}}function gt(t){let{endpoint:a,headers:o={},scopeVersion:r="0.1.0",timeoutMs:u=1e4,fetch:g=globalThis.fetch,onError:c}=t;try{let s=new URL(a);if(s.protocol!=="http:"&&s.protocol!=="https:")throw new Error("[Directive] Only http: and https: protocols are supported")}catch(s){throw new Error(`[Directive OTLP] Invalid endpoint URL "${a}": ${s instanceof Error?s.message:String(s)}`)}if(/\/v1\/(metrics|traces)/.test(a)&&console.warn(`[Directive OTLP] Endpoint "${a}" already contains a /v1/metrics or /v1/traces path. The exporter will append /v1/metrics or /v1/traces automatically. Use the base URL (e.g., "http://localhost:4318") instead.`),u<=0||!Number.isFinite(u))throw new Error(`[Directive OTLP] timeoutMs must be > 0, got ${u}`);let n=ut(t);async function i(s,p,S){let k=`${a.replace(/\/$/,"")}${s}`,_=new AbortController,T=setTimeout(()=>_.abort(),u);try{let w=await g(k,{method:"POST",headers:{"Content-Type":"application/json",...o},body:JSON.stringify(p),signal:_.signal});if(!w.ok)throw new Error(`[Directive] OTLP export failed: ${w.status} ${w.statusText}`)}catch(w){let m=w instanceof Error?w:new Error(String(w));c?c(m,S):console.error(`[Directive OTLP] Export ${S} error:`,m.message);}finally{clearTimeout(T);}}return {async exportMetrics(s){if(s.length===0)return;let p=mt(s,n,r);await i("/v1/metrics",p,"metrics");},async exportTraces(s){if(s.length===0)return;let p=pt(s,n,r);await i("/v1/traces",p,"traces");}}}var ce=class extends Error{code="CIRCUIT_OPEN";retryAfterMs;state;constructor(a,o,r="OPEN",u){let g=u?`[Directive CircuitBreaker] Circuit "${a}" is ${r}. ${u}`:`[Directive CircuitBreaker] Circuit "${a}" is ${r}. Request rejected. Try again in ${Math.ceil(o/1e3)}s.`;super(g),this.name="CircuitBreakerOpenError",this.retryAfterMs=o,this.state=r;}};function ft(t={}){let{failureThreshold:a=5,recoveryTimeMs:o=3e4,halfOpenMaxRequests:r=3,failureWindowMs:u=6e4,observability:g,metricPrefix:c="circuit_breaker",name:n="default",isFailure:i=()=>true,onStateChange:s}=t;if(a<1||!Number.isFinite(a))throw new Error(`[Directive CircuitBreaker] failureThreshold must be >= 1, got ${a}`);if(o<=0||!Number.isFinite(o))throw new Error(`[Directive CircuitBreaker] recoveryTimeMs must be > 0, got ${o}`);if(r<1||!Number.isFinite(r))throw new Error(`[Directive CircuitBreaker] halfOpenMaxRequests must be >= 1, got ${r}`);if(u<=0||!Number.isFinite(u))throw new Error(`[Directive CircuitBreaker] failureWindowMs must be > 0, got ${u}`);let p="CLOSED",S=[],k=0,_=0,T=Date.now(),w=0,m=0,v=0,D=0,M=0,O=null,H=null;function A(P){if(p===P)return;let $=p;p=P,T=Date.now(),P==="OPEN"&&(w=Date.now()),P==="HALF_OPEN"&&(k=0,_=0),s?.($,P),g&&g.incrementCounter(`${c}.state_change`,{name:n,from:$,to:P});}function F(){let P=Date.now()-u;return S=S.filter($=>$>P),S.length}function L(){D++,H=Date.now(),g&&g.incrementCounter(`${c}.success`,{name:n}),p==="HALF_OPEN"&&(_++,_>=r&&(A("CLOSED"),S=[]));}function j(P){if(!i(P)){L();return}v++,O=Date.now(),S.push(Date.now());let $=a*2;if(S.length>$&&(S=S.slice(-$)),g&&g.incrementCounter(`${c}.failure`,{name:n}),p==="HALF_OPEN"){A("OPEN");return}p==="CLOSED"&&F()>=a&&A("OPEN");}return {async execute(P){if(m++,g&&g.incrementCounter(`${c}.requests`,{name:n}),p==="OPEN")if(Date.now()-w>=o)A("HALF_OPEN");else throw M++,g&&g.incrementCounter(`${c}.rejected`,{name:n}),new ce(n,o-(Date.now()-w));if(p==="HALF_OPEN"){if(k>=r)throw M++,new ce(n,o,"HALF_OPEN",`Max trial requests (${r}) reached.`);k++;}let $=Date.now();try{let x=await P();return L(),g&&g.observeHistogram(`${c}.latency`,Date.now()-$,{name:n}),x}catch(x){let E=x instanceof Error?x:new Error(String(x));throw j(E),g&&g.observeHistogram(`${c}.latency`,Date.now()-$,{name:n}),x}},getState(){return p==="OPEN"&&Date.now()-w>=o&&A("HALF_OPEN"),p},getStats(){return {state:this.getState(),totalRequests:m,totalFailures:v,totalSuccesses:D,totalRejected:M,recentFailures:F(),lastFailureTime:O,lastSuccessTime:H,lastStateChange:T}},forceState(P){A(P);},reset(){let P=p;p="CLOSED",S=[],k=0,_=0,T=Date.now(),w=0,m=0,v=0,D=0,M=0,O=null,H=null,P!=="CLOSED"&&s?.(P,"CLOSED");},isAllowed(){return p==="CLOSED"?true:p==="OPEN"?Date.now()-w>=o:k<r}}}
1
+ 'use strict';var chunkEOLY64E6_cjs=require('../chunk-EOLY64E6.cjs');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var Ae={debug:0,info:1,warn:2,error:3};function Ke(n={}){let{level:c="info",filter:o=()=>true,logger:r=console,prefix:u="[Directive]"}=n,g=Ae[c],l=(t,i,...s)=>{Ae[t]<g||o(i)&&r[t](`${u} ${i}`,...s);};return {name:"logging",onInit:()=>l("debug","init"),onStart:()=>l("info","start"),onStop:()=>l("info","stop"),onDestroy:()=>l("debug","destroy"),onFactSet:(t,i,s)=>{l("debug","fact.set",{key:t,value:i,prev:s});},onFactDelete:(t,i)=>{l("debug","fact.delete",{key:t,prev:i});},onFactsBatch:t=>{l("debug","facts.batch",{count:t.length,changes:t});},onDerivationCompute:(t,i,s)=>{l("debug","derivation.compute",{id:t,value:i,deps:s});},onDerivationInvalidate:t=>{l("debug","derivation.invalidate",{id:t});},onReconcileStart:()=>{l("debug","reconcile.start");},onReconcileEnd:t=>{l("debug","reconcile.end",{unmet:t.unmet.length,inflight:t.inflight.length,completed:t.completed.length,canceled:t.canceled.length});},onConstraintEvaluate:(t,i,s)=>{if(s){let p=s.filter(S=>S.pass).length;l("debug","constraint.evaluate",{id:t,active:i,clauses:{total:s.length,passed:p}});return}l("debug","constraint.evaluate",{id:t,active:i});},onConstraintError:(t,i)=>{l("error","constraint.error",{id:t,error:i});},onRequirementCreated:t=>{l("debug","requirement.created",{id:t.id,type:t.requirement.type});},onRequirementMet:(t,i)=>{l("info","requirement.met",{id:t.id,byResolver:i});},onRequirementCanceled:t=>{l("debug","requirement.canceled",{id:t.id});},onResolverStart:(t,i)=>{l("debug","resolver.start",{resolver:t,requirementId:i.id});},onResolverComplete:(t,i,s)=>{l("info","resolver.complete",{resolver:t,requirementId:i.id,duration:s});},onResolverError:(t,i,s)=>{l("error","resolver.error",{resolver:t,requirementId:i.id,error:s});},onResolverRetry:(t,i,s)=>{l("warn","resolver.retry",{resolver:t,requirementId:i.id,attempt:s});},onResolverCancel:(t,i)=>{l("debug","resolver.cancel",{resolver:t,requirementId:i.id});},onResolverWriteRejected:t=>{l("warn","resolver.write.rejected",t.kind==="summary"?{kind:t.kind,resolver:t.resolver,requirementId:t.req.id,reason:t.reason,dropped:t.dropped}:{kind:t.kind,resolver:t.resolver,requirementId:t.req.id,reason:t.reason,fact:t.fact,expected:t.expected,actual:t.actual});},onEffectRun:t=>{l("debug","effect.run",{id:t});},onEffectError:(t,i)=>{l("error","effect.error",{id:t,error:i});},onSnapshot:t=>{l("debug","timetravel.snapshot",{id:t.id,trigger:t.trigger});},onHistoryNavigate:(t,i)=>{l("info","timetravel.jump",{from:t,to:i});},onError:t=>{l("error","error",{source:t.source,sourceId:t.sourceId,message:t.message});},onErrorRecovery:(t,i)=>{l("warn","error.recovery",{source:t.source,sourceId:t.sourceId,strategy:i});},onDefinitionRegister:(t,i)=>{l("info","definition.register",{type:t,id:i});},onDefinitionAssign:(t,i)=>{l("info","definition.assign",{type:t,id:i});},onDefinitionUnregister:(t,i)=>{l("info","definition.unregister",{type:t,id:i});},onDefinitionCall:(t,i,s)=>{l("debug","definition.call",{type:t,id:i,props:s});},onTraceComplete:t=>{l("debug","trace.complete",{id:t.id,status:t.status,duration:t.duration,factChanges:t.factChanges.length,derivationsRecomputed:t.derivationsRecomputed.length,constraintsHit:t.constraintsHit.length,resolversStarted:t.resolversStarted.length,effectsRun:t.effectsRun.length});}}}var se=class{constructor(c){this.capacity=c;this.buf=new Array(c);}buf;head=0;_size=0;get size(){return this._size}push(c){this.buf[this.head]=c,this.head=(this.head+1)%this.capacity,this._size<this.capacity&&this._size++;}toArray(){return this._size===0?[]:this._size<this.capacity?this.buf.slice(0,this._size):[...this.buf.slice(this.head),...this.buf.slice(0,this.head)]}clear(){this.buf=new Array(this.capacity),this.head=0,this._size=0;}};function ue(){try{if(typeof process<"u"&&process.env?.NODE_ENV==="production")return !1}catch{}try{if(typeof ({ url: (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)) })<"u"&&undefined?.MODE==="production")return !1}catch{}return true}function fe(n){try{if(n===void 0)return "undefined";if(n===null)return "null";if(typeof n=="bigint")return String(n)+"n";if(typeof n=="symbol")return String(n);if(typeof n=="object"){let c=JSON.stringify(n,(o,r)=>typeof r=="bigint"?String(r)+"n":typeof r=="symbol"?String(r):r);return c.length>120?c.slice(0,117)+"...":c}return String(n)}catch{return "<error>"}}function J(n,c){return n.length<=c?n:n.slice(0,c-3)+"..."}function te(n){try{return n.inspect()}catch{return null}}function ke(n){try{return n==null||typeof n!="object"?n:JSON.parse(JSON.stringify(n))}catch{return null}}function Oe(n){return n===void 0?1e3:!Number.isFinite(n)||n<1?(ue()&&console.warn(`[directive:devtools] Invalid maxEvents value (${n}), using default 1000`),1e3):Math.floor(n)}function Le(){return {reconcileCount:0,reconcileTotalMs:0,resolverStats:new Map,effectRunCount:0,effectErrorCount:0,lastReconcileStartMs:0}}var Je=200,ne=340,re=16,oe=80,be=2,ve=["#8b9aff","#4ade80","#fbbf24","#c084fc","#f472b6","#22d3ee"];function Pe(){return {entries:new se(Je),inflight:new Map}}function Ie(){return {derivationDeps:new Map,activeConstraints:new Set,recentlyChangedFacts:new Set,recentlyComputedDerivations:new Set,recentlyActiveConstraints:new Set,animationTimer:null}}var _e=1e4,Ne=100;function $e(){return {isRecording:false,recordedEvents:[],snapshots:[]}}var Be=50,ye=200,y={bg:"#1a1a2e",text:"#e0e0e0",accent:"#8b9aff",muted:"#b0b0d0",border:"#333",rowBorder:"#2a2a4a",green:"#4ade80",yellow:"#fbbf24",red:"#f87171",closeBtn:"#aaa",font:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace"},V={nodeW:90,nodeH:16,nodeGap:6,startY:16,colGap:20,fontSize:10,labelMaxChars:11};function He(n,c,o,r){let u=false,g={position:"fixed",zIndex:"99999",...c.includes("bottom")?{bottom:"12px"}:{top:"12px"},...c.includes("right")?{right:"12px"}:{left:"12px"}},l=document.createElement("style");l.textContent=`[data-directive-devtools] summary:focus-visible{outline:2px solid ${y.accent};outline-offset:2px;border-radius:2px}[data-directive-devtools] button:focus-visible{outline:2px solid ${y.accent};outline-offset:2px}`,document.head.appendChild(l);let t=document.createElement("button");t.setAttribute("aria-label","Open Directive DevTools"),t.setAttribute("aria-expanded",String(o)),t.title="Ctrl+Shift+D to toggle",Object.assign(t.style,{...g,background:y.bg,color:y.text,border:`1px solid ${y.border}`,borderRadius:"6px",padding:"10px 14px",minWidth:"44px",minHeight:"44px",cursor:"pointer",fontFamily:y.font,fontSize:"12px",display:o?"none":"block"}),t.textContent="Directive";let i=document.createElement("div");i.setAttribute("role","region"),i.setAttribute("aria-label","Directive DevTools"),i.setAttribute("data-directive-devtools",""),i.tabIndex=-1,Object.assign(i.style,{...g,background:y.bg,color:y.text,border:`1px solid ${y.border}`,borderRadius:"8px",padding:"12px",fontFamily:y.font,fontSize:"11px",maxWidth:"min(380px, calc(100vw - 24px))",maxHeight:"min(500px, calc(100vh - 24px))",overflow:"auto",boxShadow:"0 4px 20px rgba(0,0,0,0.5)",display:o?"block":"none"});let s=document.createElement("div");Object.assign(s.style,{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"8px"});let p=document.createElement("strong");p.style.color=y.accent,p.textContent=n==="default"?"Directive DevTools":`DevTools (${n})`;let S=document.createElement("button");S.setAttribute("aria-label","Close DevTools"),Object.assign(S.style,{background:"none",border:"none",color:y.closeBtn,cursor:"pointer",fontSize:"16px",padding:"8px 12px",minWidth:"44px",minHeight:"44px",lineHeight:"1",display:"flex",alignItems:"center",justifyContent:"center"}),S.textContent="\xD7",s.appendChild(p),s.appendChild(S),i.appendChild(s);let k=document.createElement("div");k.style.marginBottom="6px",k.setAttribute("aria-live","polite");let _=document.createElement("span");_.style.color=y.green,_.textContent="Settled",k.appendChild(_),i.appendChild(k);let T=document.createElement("div");Object.assign(T.style,{display:"none",marginBottom:"8px",padding:"4px 8px",background:"#252545",borderRadius:"4px",alignItems:"center",gap:"6px"});let w=document.createElement("button");Object.assign(w.style,{background:"none",border:`1px solid ${y.border}`,color:y.text,cursor:"pointer",padding:"4px 10px",borderRadius:"3px",fontFamily:y.font,fontSize:"11px",minWidth:"44px",minHeight:"44px"}),w.textContent="\u25C0 Undo",w.disabled=true;let m=document.createElement("button");Object.assign(m.style,{background:"none",border:`1px solid ${y.border}`,color:y.text,cursor:"pointer",padding:"4px 10px",borderRadius:"3px",fontFamily:y.font,fontSize:"11px",minWidth:"44px",minHeight:"44px"}),m.textContent="Redo \u25B6",m.disabled=true;let v=document.createElement("span");v.style.color=y.muted,v.style.fontSize="10px",T.appendChild(w),T.appendChild(m),T.appendChild(v),i.appendChild(T);function D(z,Y){let G=document.createElement("details");Y&&(G.open=true),G.style.marginBottom="4px";let K=document.createElement("summary");Object.assign(K.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"});let ee=document.createElement("span");K.textContent=`${z} (`,K.appendChild(ee),K.appendChild(document.createTextNode(")")),ee.textContent="0",G.appendChild(K);let Q=document.createElement("table");Object.assign(Q.style,{width:"100%",borderCollapse:"collapse",fontSize:"11px"});let Me=document.createElement("thead"),Te=document.createElement("tr");for(let Ye of ["Key","Value"]){let le=document.createElement("th");le.scope="col",Object.assign(le.style,{textAlign:"left",padding:"2px 4px",color:y.accent}),le.textContent=Ye,Te.appendChild(le);}Me.appendChild(Te),Q.appendChild(Me);let De=document.createElement("tbody");return Q.appendChild(De),G.appendChild(Q),{details:G,tbody:De,countSpan:ee}}function M(z,Y){let G=document.createElement("details");G.style.marginBottom="4px";let K=document.createElement("summary");Object.assign(K.style,{cursor:"pointer",color:Y,marginBottom:"4px"});let ee=document.createElement("span");K.textContent=`${z} (`,K.appendChild(ee),K.appendChild(document.createTextNode(")")),ee.textContent="0",G.appendChild(K);let Q=document.createElement("ul");return Object.assign(Q.style,{margin:"0",paddingLeft:"16px"}),G.appendChild(Q),{details:G,list:Q,countSpan:ee}}let O=D("Facts",true);i.appendChild(O.details);let H=D("Derivations",false);i.appendChild(H.details);let A=M("Inflight",y.yellow);i.appendChild(A.details);let F=M("Unmet",y.red);i.appendChild(F.details);let L=document.createElement("details");L.style.marginBottom="4px";let j=document.createElement("summary");Object.assign(j.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"}),j.textContent="Performance",L.appendChild(j);let P=document.createElement("div");P.style.fontSize="10px",P.style.color=y.muted,P.textContent="No data yet",L.appendChild(P),i.appendChild(L);let $=document.createElement("details");$.style.marginBottom="4px";let x=document.createElement("summary");Object.assign(x.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"}),x.textContent="Dependency Graph",$.appendChild(x);let E=document.createElementNS("http://www.w3.org/2000/svg","svg");E.setAttribute("width","100%"),E.setAttribute("height","120"),E.setAttribute("role","img"),E.setAttribute("aria-label","System dependency graph"),E.style.display="block",E.setAttribute("viewBox","0 0 460 120"),E.setAttribute("preserveAspectRatio","xMinYMin meet"),$.appendChild(E),i.appendChild($);let C=document.createElement("details");C.style.marginBottom="4px";let N=document.createElement("summary");Object.assign(N.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"}),N.textContent="Timeline",C.appendChild(N);let I=document.createElementNS("http://www.w3.org/2000/svg","svg");I.setAttribute("width","100%"),I.setAttribute("height","60"),I.setAttribute("role","img"),I.setAttribute("aria-label","Resolver execution timeline"),I.style.display="block",I.setAttribute("viewBox",`0 0 ${ne} 60`),I.setAttribute("preserveAspectRatio","xMinYMin meet");let d=document.createElementNS("http://www.w3.org/2000/svg","text");d.setAttribute("x",String(ne/2)),d.setAttribute("y","30"),d.setAttribute("text-anchor","middle"),d.setAttribute("fill",y.muted),d.setAttribute("font-size","10"),d.setAttribute("font-family",y.font),d.textContent="No resolver activity yet",I.appendChild(d),C.appendChild(I),i.appendChild(C);let b,f,e,a;if(r){let z=document.createElement("details");z.style.marginBottom="4px";let Y=document.createElement("summary");Object.assign(Y.style,{cursor:"pointer",color:y.accent,marginBottom:"4px"}),e=document.createElement("span"),e.textContent="0",Y.textContent="Events (",Y.appendChild(e),Y.appendChild(document.createTextNode(")")),z.appendChild(Y),f=document.createElement("div"),Object.assign(f.style,{maxHeight:"150px",overflow:"auto",fontSize:"10px"}),f.setAttribute("role","log"),f.setAttribute("aria-live","polite"),f.tabIndex=0;let G=document.createElement("div");G.style.color=y.muted,G.style.padding="4px",G.textContent="Waiting for events...",G.className="dt-events-empty",f.appendChild(G),z.appendChild(f),i.appendChild(z),b=z,a=document.createElement("div");}else b=document.createElement("details"),f=document.createElement("div"),e=document.createElement("span"),a=document.createElement("div"),a.style.fontSize="10px",a.style.color=y.muted,a.style.marginTop="4px",a.style.fontStyle="italic",a.textContent="Enable trace: true for event log",i.appendChild(a);let h=document.createElement("div");Object.assign(h.style,{display:"flex",gap:"6px",marginTop:"6px"});let R=document.createElement("button");Object.assign(R.style,{background:"none",border:`1px solid ${y.border}`,color:y.text,cursor:"pointer",padding:"8px 12px",borderRadius:"3px",fontFamily:y.font,fontSize:"10px",minWidth:"44px",minHeight:"44px"}),R.textContent="\u23FA Record";let B=document.createElement("button");Object.assign(B.style,{background:"none",border:`1px solid ${y.border}`,color:y.text,cursor:"pointer",padding:"8px 12px",borderRadius:"3px",fontFamily:y.font,fontSize:"10px",minWidth:"44px",minHeight:"44px"}),B.textContent="\u2913 Export",h.appendChild(R),h.appendChild(B),i.appendChild(h),i.addEventListener("wheel",z=>{let Y=i,G=Y.scrollTop===0&&z.deltaY<0,K=Y.scrollTop+Y.clientHeight>=Y.scrollHeight&&z.deltaY>0;(G||K)&&z.preventDefault();},{passive:false});let q=o,X=new Set;function W(){q=true,i.style.display="block",t.style.display="none",t.setAttribute("aria-expanded","true"),S.focus();}function U(){q=false,i.style.display="none",t.style.display="block",t.setAttribute("aria-expanded","false"),t.focus();}t.addEventListener("click",W),S.addEventListener("click",U);function ie(z){z.key==="Escape"&&q&&U();}i.addEventListener("keydown",ie);function we(z){z.key==="d"&&z.shiftKey&&(z.ctrlKey||z.metaKey)&&(z.preventDefault(),q?U():W());}document.addEventListener("keydown",we);function ge(){u||(document.body.appendChild(t),document.body.appendChild(i));}document.body?ge():document.addEventListener("DOMContentLoaded",ge,{once:true});function Xe(){u=true,t.removeEventListener("click",W),S.removeEventListener("click",U),i.removeEventListener("keydown",ie),document.removeEventListener("keydown",we),document.removeEventListener("DOMContentLoaded",ge);for(let z of X)clearTimeout(z);X.clear(),t.remove(),i.remove(),l.remove();}return {refs:{container:i,toggleBtn:t,titleEl:p,statusEl:_,factsBody:O.tbody,factsCount:O.countSpan,derivBody:H.tbody,derivCount:H.countSpan,derivSection:H.details,inflightList:A.list,inflightSection:A.details,inflightCount:A.countSpan,unmetList:F.list,unmetSection:F.details,unmetCount:F.countSpan,perfSection:L,perfBody:P,historySection:T,historyLabel:v,undoBtn:w,redoBtn:m,flowSection:$,flowSvg:E,timelineSection:C,timelineSvg:I,eventsSection:b,eventsList:f,eventsCount:e,traceHint:a,recordBtn:R,exportBtn:B},destroy:Xe,isOpen:()=>q,flashTimers:X}}function ae(n,c,o,r,u,g){let l=fe(r),t=n.get(o);if(t){let i=t.cells;if(i[1]&&(i[1].textContent=l,u&&g)){let s=i[1];s.style.background="rgba(139, 154, 255, 0.25)";let p=setTimeout(()=>{s.style.background="",g.delete(p);},300);g.add(p);}}else {t=document.createElement("tr"),t.style.borderBottom=`1px solid ${y.rowBorder}`;let i=document.createElement("td");Object.assign(i.style,{padding:"2px 4px",color:y.muted}),i.textContent=o;let s=document.createElement("td");s.style.padding="2px 4px",s.textContent=l,t.appendChild(i),t.appendChild(s),c.appendChild(t),n.set(o,t);}}function je(n,c){let o=n.get(c);o&&(o.remove(),n.delete(c));}function de(n,c,o){if(n.inflightList.replaceChildren(),n.inflightCount.textContent=String(c.length),c.length>0)for(let r of c){let u=document.createElement("li");u.style.fontSize="11px",u.textContent=`${r.resolverId} (${r.id})`,n.inflightList.appendChild(u);}else {let r=document.createElement("li");r.style.fontSize="10px",r.style.color=y.muted,r.textContent="None",n.inflightList.appendChild(r);}if(n.unmetList.replaceChildren(),n.unmetCount.textContent=String(o.length),o.length>0)for(let r of o){let u=document.createElement("li");u.style.fontSize="11px",u.textContent=`${r.requirement.type} from ${r.fromConstraint}`,n.unmetList.appendChild(u);}else {let r=document.createElement("li");r.style.fontSize="10px",r.style.color=y.muted,r.textContent="None",n.unmetList.appendChild(r);}}function me(n,c,o){let r=c===0&&o===0;n.statusEl.style.color=r?y.green:y.yellow,n.statusEl.textContent=r?"Settled":"Working...",n.toggleBtn.textContent=r?"Directive":"Directive...",n.toggleBtn.setAttribute("aria-label",`Open Directive DevTools${r?"":" (system working)"}`);}function he(n,c,o,r){let u=Object.keys(o.derive);if(n.derivCount.textContent=String(u.length),u.length===0){c.clear(),n.derivBody.replaceChildren();let l=document.createElement("tr"),t=document.createElement("td");t.colSpan=2,t.style.color=y.muted,t.style.fontSize="10px",t.textContent="No derivations defined",l.appendChild(t),n.derivBody.appendChild(l);return}let g=new Set(u);for(let[l,t]of c)g.has(l)||(t.remove(),c.delete(l));for(let l of u){let t;try{t=fe(o.read(l));}catch{t="<error>";}ae(c,n.derivBody,l,t,true,r);}}function Fe(n,c,o,r){let u=n.eventsList.querySelector(".dt-events-empty");u&&u.remove();let g=document.createElement("div");Object.assign(g.style,{padding:"2px 4px",borderBottom:`1px solid ${y.rowBorder}`,fontFamily:"inherit"});let l=new Date,t=`${String(l.getHours()).padStart(2,"0")}:${String(l.getMinutes()).padStart(2,"0")}:${String(l.getSeconds()).padStart(2,"0")}.${String(l.getMilliseconds()).padStart(3,"0")}`,i;try{let k=JSON.stringify(o);i=J(k,60);}catch{i="{}";}let s=document.createElement("span");s.style.color=y.closeBtn,s.textContent=t;let p=document.createElement("span");p.style.color=y.accent,p.textContent=` ${c} `;let S=document.createElement("span");for(S.style.color=y.muted,S.textContent=i,g.appendChild(s),g.appendChild(p),g.appendChild(S),n.eventsList.prepend(g);n.eventsList.childElementCount>Be;)n.eventsList.lastElementChild?.remove();n.eventsCount.textContent=String(r);}function qe(n,c){n.perfBody.replaceChildren();let o=c.reconcileCount>0?(c.reconcileTotalMs/c.reconcileCount).toFixed(1):"\u2014",r=[`Reconciles: ${c.reconcileCount} (avg ${o}ms)`,`Effects: ${c.effectRunCount} run, ${c.effectErrorCount} errors`];for(let u of r){let g=document.createElement("div");g.style.marginBottom="2px",g.textContent=u,n.perfBody.appendChild(g);}if(c.resolverStats.size>0){let u=document.createElement("div");u.style.marginTop="4px",u.style.marginBottom="2px",u.style.color=y.accent,u.textContent="Resolvers:",n.perfBody.appendChild(u);let g=[...c.resolverStats.entries()].sort((l,t)=>t[1].totalMs-l[1].totalMs);for(let[l,t]of g){let i=t.count>0?(t.totalMs/t.count).toFixed(1):"0",s=document.createElement("div");s.style.paddingLeft="8px",s.textContent=`${l}: ${t.count}x, avg ${i}ms${t.errors>0?`, ${t.errors} err`:""}`,t.errors>0&&(s.style.color=y.red),n.perfBody.appendChild(s);}}}function Se(n,c){let o=c.history;if(!o){n.historySection.style.display="none";return}n.historySection.style.display="flex";let r=o.currentIndex,u=o.snapshots.length;n.historyLabel.textContent=u>0?`${r+1} / ${u}`:"0 snapshots";let g=r>0,l=r<u-1;n.undoBtn.disabled=!g,n.undoBtn.style.opacity=g?"1":"0.4",n.redoBtn.disabled=!l,n.redoBtn.style.opacity=l?"1":"0.4";}function Ve(n,c){n.undoBtn.addEventListener("click",()=>{c.history&&c.history.currentIndex>0&&c.history.goBack(1);}),n.redoBtn.addEventListener("click",()=>{c.history&&c.history.currentIndex<c.history.snapshots.length-1&&c.history.goForward(1);});}var xe=new WeakMap;function Qe(n,c,o,r,u,g){return [n.join(","),c.join(","),o.map(l=>`${l.id}:${l.active}`).join(","),[...r.entries()].map(([l,t])=>`${l}:${t.status}:${t.type}`).join(","),u.join(","),g.join(",")].join("|")}function Ze(n,c,o,r,u){for(let g of o){let l=n.nodes.get(`0:${g}`);if(!l)continue;let t=c.recentlyChangedFacts.has(g);l.rect.setAttribute("fill",t?y.text+"33":"none"),l.rect.setAttribute("stroke-width",t?"2":"1");}for(let g of r){let l=n.nodes.get(`1:${g}`);if(!l)continue;let t=c.recentlyComputedDerivations.has(g);l.rect.setAttribute("fill",t?y.accent+"33":"none"),l.rect.setAttribute("stroke-width",t?"2":"1");}for(let g of u){let l=n.nodes.get(`2:${g}`);if(!l)continue;let t=c.recentlyActiveConstraints.has(g),i=l.rect.getAttribute("stroke")??y.muted;l.rect.setAttribute("fill",t?i+"33":"none"),l.rect.setAttribute("stroke-width",t?"2":"1");}}function Ee(n,c,o){let r=te(c);if(!r)return;let u;try{u=Object.keys(c.facts.$store.toObject());}catch{u=[];}let g=Object.keys(c.derive),l=r.constraints,t=r.unmet,i=r.inflight,s=Object.keys(r.resolvers),p=new Map;for(let d of t)p.set(d.id,{type:d.requirement.type,fromConstraint:d.fromConstraint,status:"unmet"});for(let d of i)p.set(d.id,{type:d.resolverId,fromConstraint:"",status:"inflight"});if(u.length===0&&g.length===0&&l.length===0&&s.length===0){xe.delete(n.flowSvg),n.flowSvg.replaceChildren(),n.flowSvg.setAttribute("viewBox","0 0 460 40");let d=document.createElementNS("http://www.w3.org/2000/svg","text");d.setAttribute("x","230"),d.setAttribute("y","24"),d.setAttribute("text-anchor","middle"),d.setAttribute("fill",y.muted),d.setAttribute("font-size","10"),d.setAttribute("font-family",y.font),d.textContent="No system topology",n.flowSvg.appendChild(d);return}let S=i.map(d=>d.resolverId).sort(),k=Qe(u,g,l,p,s,S),_=xe.get(n.flowSvg);if(_&&_.fingerprint===k){Ze(_,o,u,g,l.map(d=>d.id));return}let T=V.nodeW+V.colGap,w=[5,5+T,5+T*2,5+T*3,5+T*4],m=w[4]+V.nodeW+5;function v(d){let b=V.startY+12;return d.map(f=>{let e={...f,y:b};return b+=V.nodeH+V.nodeGap,e})}let D=v(u.map(d=>{let b=r.facts.find(f=>f.key===d);return {id:d,label:J(b?.meta?.label??d,V.labelMaxChars)}})),M=v(g.map(d=>{let b=r.derivations.find(f=>f.id===d);return {id:d,label:J(b?.meta?.label??d,V.labelMaxChars)}})),O=v(l.map(d=>({id:d.id,label:J(d.meta?.label??d.id,V.labelMaxChars),active:d.active,priority:d.priority}))),H=v([...p.entries()].map(([d,b])=>({id:d,type:b.type,fromConstraint:b.fromConstraint,status:b.status}))),A=v(s.map(d=>{let b=r.resolverDefs.find(f=>f.id===d);return {id:d,label:J(b?.meta?.label??d,V.labelMaxChars)}})),F=Math.max(D.length,M.length,O.length,H.length,A.length,1),L=V.startY+12+F*(V.nodeH+V.nodeGap)+8;n.flowSvg.replaceChildren(),n.flowSvg.setAttribute("viewBox",`0 0 ${m} ${L}`),n.flowSvg.setAttribute("aria-label",`Dependency graph: ${u.length} facts, ${g.length} derivations, ${l.length} constraints, ${p.size} requirements, ${s.length} resolvers`);let j=["Facts","Derivations","Constraints","Reqs","Resolvers"];for(let[d,b]of j.entries()){let f=document.createElementNS("http://www.w3.org/2000/svg","text");f.setAttribute("x",String(w[d]??0)),f.setAttribute("y","10"),f.setAttribute("fill",y.accent),f.setAttribute("font-size",String(V.fontSize)),f.setAttribute("font-family",y.font),f.textContent=b,n.flowSvg.appendChild(f);}let P={fingerprint:k,nodes:new Map};function $(d,b,f,e,a,h,R,B,q){let X=document.createElementNS("http://www.w3.org/2000/svg","g");if(q){let ie=document.createElementNS("http://www.w3.org/2000/svg","title");ie.textContent=q,X.appendChild(ie);}let W=document.createElementNS("http://www.w3.org/2000/svg","rect");W.setAttribute("x",String(b)),W.setAttribute("y",String(f-6)),W.setAttribute("width",String(V.nodeW)),W.setAttribute("height",String(V.nodeH)),W.setAttribute("rx","3"),W.setAttribute("fill",B?h+"33":"none"),W.setAttribute("stroke",h),W.setAttribute("stroke-width",B?"2":"1"),W.setAttribute("opacity",R?"0.35":"1"),X.appendChild(W);let U=document.createElementNS("http://www.w3.org/2000/svg","text");return U.setAttribute("x",String(b+4)),U.setAttribute("y",String(f+4)),U.setAttribute("fill",h),U.setAttribute("font-size",String(V.fontSize)),U.setAttribute("font-family",y.font),U.setAttribute("opacity",R?"0.35":"1"),U.textContent=a,X.appendChild(U),n.flowSvg.appendChild(X),P.nodes.set(`${d}:${e}`,{g:X,rect:W,text:U}),{midX:b+V.nodeW/2,midY:f}}function x(d,b,f,e,a,h){let R=document.createElementNS("http://www.w3.org/2000/svg","line");R.setAttribute("x1",String(d)),R.setAttribute("y1",String(b)),R.setAttribute("x2",String(f)),R.setAttribute("y2",String(e)),R.setAttribute("stroke",a),R.setAttribute("stroke-width","1"),R.setAttribute("stroke-dasharray","3,2"),R.setAttribute("opacity","0.7"),n.flowSvg.appendChild(R);}let E=new Map,C=new Map,N=new Map,I=new Map;for(let d of D){let b=o.recentlyChangedFacts.has(d.id),f=r.facts.find(a=>a.key===d.id)?.meta,e=$(0,w[0],d.y,d.id,d.label,y.text,false,b,f?.description);E.set(d.id,e);}for(let d of M){let b=o.recentlyComputedDerivations.has(d.id),f=r.derivations.find(a=>a.id===d.id)?.meta,e=$(1,w[1],d.y,d.id,d.label,y.accent,false,b,f?.description);C.set(d.id,e);}for(let d of O){let b=o.recentlyActiveConstraints.has(d.id),f=l.find(a=>a.id===d.id)?.meta,e=$(2,w[2],d.y,d.id,d.label,f?.color??(d.active?y.yellow:y.muted),!d.active,b,f?.description);N.set(d.id,e);}for(let d of H){let b=d.status==="unmet"?y.red:y.yellow,f=$(3,w[3],d.y,d.id,J(d.type,V.labelMaxChars),b,false,false);I.set(d.id,f);}for(let d of A){let b=i.some(e=>e.resolverId===d.id),f=r.resolverDefs.find(e=>e.id===d.id)?.meta;$(4,w[4],d.y,d.id,d.label,f?.color??(b?y.green:y.muted),!b,false,f?.description);}for(let d of M){let b=o.derivationDeps.get(d.id),f=C.get(d.id);if(b&&f)for(let e of b){let a=E.get(e);a&&x(a.midX+V.nodeW/2,a.midY,f.midX-V.nodeW/2,f.midY,y.accent);}}for(let d of H){let b=N.get(d.fromConstraint),f=I.get(d.id);b&&f&&x(b.midX+V.nodeW/2,b.midY,f.midX-V.nodeW/2,f.midY,y.muted);}for(let d of i){let b=I.get(d.id);if(b){let f=A.find(e=>e.id===d.resolverId);f&&x(b.midX+V.nodeW/2,b.midY,w[4],f.y,y.green);}}xe.set(n.flowSvg,P);}function ze(n){n.animationTimer&&clearTimeout(n.animationTimer),n.animationTimer=setTimeout(()=>{n.recentlyChangedFacts.clear(),n.recentlyComputedDerivations.clear(),n.recentlyActiveConstraints.clear(),n.animationTimer=null;},600);}function We(n,c){let o=c.entries.toArray();if(o.length===0)return;n.timelineSvg.replaceChildren();let r=Number.POSITIVE_INFINITY,u=Number.NEGATIVE_INFINITY;for(let T of o)T.startMs<r&&(r=T.startMs),T.endMs>u&&(u=T.endMs);let g=performance.now();for(let T of c.inflight.values())T<r&&(r=T),g>u&&(u=g);let l=u-r||1,t=ne-oe-10,i=[],s=new Set;for(let T of o)s.has(T.resolver)||(s.add(T.resolver),i.push(T.resolver));for(let T of c.inflight.keys())s.has(T)||(s.add(T),i.push(T));let S=i.slice(-12),k=re*S.length+20;n.timelineSvg.setAttribute("viewBox",`0 0 ${ne} ${k}`),n.timelineSvg.setAttribute("height",String(Math.min(k,200)));let _=5;for(let T=0;T<=_;T++){let w=oe+t*T/_,m=l*T/_,v=document.createElementNS("http://www.w3.org/2000/svg","text");v.setAttribute("x",String(w)),v.setAttribute("y","8"),v.setAttribute("fill",y.muted),v.setAttribute("font-size","6"),v.setAttribute("font-family",y.font),v.setAttribute("text-anchor","middle"),v.textContent=m<1e3?`${m.toFixed(0)}ms`:`${(m/1e3).toFixed(1)}s`,n.timelineSvg.appendChild(v);let D=document.createElementNS("http://www.w3.org/2000/svg","line");D.setAttribute("x1",String(w)),D.setAttribute("y1","10"),D.setAttribute("x2",String(w)),D.setAttribute("y2",String(k)),D.setAttribute("stroke",y.border),D.setAttribute("stroke-width","0.5"),n.timelineSvg.appendChild(D);}for(let T=0;T<S.length;T++){let w=S[T],m=12+T*re,v=T%ve.length,D=ve[v],M=document.createElementNS("http://www.w3.org/2000/svg","text");M.setAttribute("x",String(oe-4)),M.setAttribute("y",String(m+re/2+3)),M.setAttribute("fill",y.muted),M.setAttribute("font-size","7"),M.setAttribute("font-family",y.font),M.setAttribute("text-anchor","end"),M.textContent=J(w,12),n.timelineSvg.appendChild(M);let O=o.filter(A=>A.resolver===w);for(let A of O){let F=oe+(A.startMs-r)/l*t,L=Math.max((A.endMs-A.startMs)/l*t,be),j=document.createElementNS("http://www.w3.org/2000/svg","rect");j.setAttribute("x",String(F)),j.setAttribute("y",String(m+2)),j.setAttribute("width",String(L)),j.setAttribute("height",String(re-4)),j.setAttribute("rx","2"),j.setAttribute("fill",A.error?y.red:D),j.setAttribute("opacity","0.8");let P=document.createElementNS("http://www.w3.org/2000/svg","title"),$=A.endMs-A.startMs;P.textContent=`${w}: ${$.toFixed(1)}ms${A.error?" (error)":""}`,j.appendChild(P),n.timelineSvg.appendChild(j);}let H=c.inflight.get(w);if(H!==void 0){let A=oe+(H-r)/l*t,F=Math.max((g-H)/l*t,be),L=document.createElementNS("http://www.w3.org/2000/svg","rect");L.setAttribute("x",String(A)),L.setAttribute("y",String(m+2)),L.setAttribute("width",String(F)),L.setAttribute("height",String(re-4)),L.setAttribute("rx","2"),L.setAttribute("fill",D),L.setAttribute("opacity","0.4"),L.setAttribute("stroke",D),L.setAttribute("stroke-width","1"),L.setAttribute("stroke-dasharray","3,2");let j=document.createElementNS("http://www.w3.org/2000/svg","title");j.textContent=`${w}: inflight ${(g-H).toFixed(0)}ms`,L.appendChild(j),n.timelineSvg.appendChild(L);}}n.timelineSvg.setAttribute("aria-label",`Timeline: ${o.length} resolver executions across ${S.length} resolvers`);}function et(){if(typeof window>"u")return {systems:new Map,getSystem:()=>null,getSystems:()=>[],inspect:()=>null,getEvents:()=>[],explain:()=>null,exportSession:()=>null,importSession:()=>false,clearEvents:()=>{},subscribe:()=>()=>{}};if(!window.__DIRECTIVE__){let n=new Map,c={systems:n,getSystem(o){return o?n.get(o)?.system??null:n.values().next().value?.system??null},getSystems(){return [...n.keys()]},inspect(o){let r=this.getSystem(o),u=o?n.get(o):n.values().next().value,g=r?.inspect()??null;return g&&u&&(g.resolverStats=u.resolverStats?Object.fromEntries(u.resolverStats):{}),g},getEvents(o){return o?n.get(o)?.events.toArray()??[]:n.values().next().value?.events.toArray()??[]},explain(o,r){return this.getSystem(r)?.explain(o)??null},subscribe(o,r){let u=r?n.get(r):n.values().next().value;if(!u){let g=false,t=setInterval(()=>{let s=r?n.get(r):n.values().next().value;s&&!g&&(g=true,s.subscribers.add(o));},100),i=setTimeout(()=>clearInterval(t),1e4);return ()=>{clearInterval(t),clearTimeout(i);for(let s of n.values())s.subscribers.delete(o);}}return u.subscribers.add(o),()=>{u.subscribers.delete(o);}},exportSession(o){let r=o?n.get(o):n.values().next().value;return r?JSON.stringify({version:1,name:o??n.keys().next().value??"default",exportedAt:Date.now(),events:r.events.toArray()}):null},importSession(o,r){try{if(o.length>10*1024*1024)return !1;let u=JSON.parse(o);if(!u||typeof u!="object"||Array.isArray(u)||!Array.isArray(u.events))return !1;let g=r?n.get(r):n.values().next().value;if(!g)return !1;let l=g.maxEvents,t=u.events,i=t.length>l?t.length-l:0;g.events.clear();for(let s=i;s<t.length;s++){let p=t[s];p&&typeof p=="object"&&!Array.isArray(p)&&typeof p.timestamp=="number"&&typeof p.type=="string"&&p.type!=="__proto__"&&p.type!=="constructor"&&p.type!=="prototype"&&g.events.push({timestamp:p.timestamp,type:p.type,data:p.data??null});}return !0}catch{return false}},clearEvents(o){let r=o?n.get(o):n.values().next().value;r&&r.events.clear();}};return Object.defineProperty(window,"__DIRECTIVE__",{value:c,writable:false,configurable:ue(),enumerable:true}),c}return window.__DIRECTIVE__}function tt(n={}){let{name:c="default",trace:o=false,maxEvents:r,panel:u=false,position:g="bottom-right",defaultOpen:l=false}=n,t=Oe(r),i=et(),s={system:null,events:new se(t),maxEvents:t,subscribers:new Set,resolverStats:new Map};i.systems.set(c,s);let p=(e,a)=>{let h={timestamp:Date.now(),type:e,data:a};o&&s.events.push(h);for(let R of s.subscribers)try{R(h);}catch{}},S=null,k=new Map,_=new Map,T=Le(),w=Ie(),m=$e(),v=Pe(),D=u&&typeof window<"u"&&typeof document<"u"&&ue(),M=null,O=0,H=1,A=2,F=4,L=8,j=16,P=32,$=64,x=128,E=new Map,C=new Set,N=null;function I(e){O|=e,M===null&&typeof requestAnimationFrame<"u"&&(M=requestAnimationFrame(d));}function d(){if(M=null,!S||!s.system){O=0;return}let e=S.refs,a=s.system,h=O;if(O=0,h&H){for(let R of C)je(k,R);C.clear();for(let[R,{value:B,flash:q}]of E)ae(k,e.factsBody,R,B,q,S.flashTimers);E.clear(),e.factsCount.textContent=String(k.size);}if(h&A&&he(e,_,a,S.flashTimers),h&L)if(N)me(e,N.inflight.length,N.unmet.length);else {let R=te(a);R&&me(e,R.inflight.length,R.unmet.length);}if(h&F)if(N)de(e,N.inflight,N.unmet);else {let R=te(a);R&&de(e,R.inflight,R.unmet);}h&j&&qe(e,T),h&P&&Ee(e,a,w),h&$&&Se(e,a),h&x&&We(e,v);}function b(e,a){S&&o&&Fe(S.refs,e,a,s.events.size);}function f(e,a){m.isRecording&&m.recordedEvents.length<_e&&m.recordedEvents.push({timestamp:Date.now(),type:e,data:ke(a)});}return {name:"devtools",onInit:e=>{if(s.system=e,p("init",{}),typeof window<"u"&&console.log(`%c[Directive Devtools]%c System "${c}" initialized. Access via window.__DIRECTIVE__`,"color: #7c3aed; font-weight: bold","color: inherit"),D){let a=s.system;S=He(c,g,l,o);let h=S.refs;try{let B=a.facts.$store.toObject();for(let[q,X]of Object.entries(B))ae(k,h.factsBody,q,X,!1);h.factsCount.textContent=String(Object.keys(B).length);}catch{}he(h,_,a);let R=te(a);R&&(me(h,R.inflight.length,R.unmet.length),de(h,R.inflight,R.unmet)),Se(h,a),Ve(h,a),Ee(h,a,w),h.recordBtn.addEventListener("click",()=>{if(m.isRecording=!m.isRecording,h.recordBtn.textContent=m.isRecording?"\u23F9 Stop":"\u23FA Record",h.recordBtn.style.color=m.isRecording?y.red:y.text,m.isRecording){m.recordedEvents=[],m.snapshots=[];try{m.snapshots.push({timestamp:Date.now(),facts:a.facts.$store.toObject()});}catch{}}}),h.exportBtn.addEventListener("click",()=>{let B=m.recordedEvents.length>0?m.recordedEvents:s.events.toArray(),q=JSON.stringify({version:1,name:c,exportedAt:Date.now(),events:B,snapshots:m.snapshots},null,2),X=new Blob([q],{type:"application/json"}),W=URL.createObjectURL(X),U=document.createElement("a");U.href=W,U.download=`directive-session-${c}-${Date.now()}.json`,U.click(),URL.revokeObjectURL(W);});}},onStart:e=>{p("start",{}),b("start",{}),f("start",{});},onStop:e=>{p("stop",{}),b("stop",{}),f("stop",{});},onDestroy:e=>{p("destroy",{}),i.systems.delete(c),M!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(M),M=null),w.animationTimer&&clearTimeout(w.animationTimer),S&&(S.destroy(),S=null,k.clear(),_.clear());},onFactSet:(e,a,h)=>{p("fact.set",{key:e,value:a,prev:h}),f("fact.set",{key:e,value:a,prev:h}),w.recentlyChangedFacts.add(e),S&&s.system&&(E.set(e,{value:a,flash:true}),C.delete(e),I(H),b("fact.set",{key:e,value:a}));},onFactDelete:(e,a)=>{p("fact.delete",{key:e,prev:a}),f("fact.delete",{key:e,prev:a}),S&&(C.add(e),E.delete(e),I(H),b("fact.delete",{key:e}));},onFactsBatch:e=>{if(p("facts.batch",{changes:e}),f("facts.batch",{count:e.length}),S&&s.system){for(let a of e)a.type==="delete"?(C.add(a.key),E.delete(a.key)):(w.recentlyChangedFacts.add(a.key),E.set(a.key,{value:a.value,flash:true}),C.delete(a.key));I(H),b("facts.batch",{count:e.length});}},onDerivationCompute:(e,a,h)=>{p("derivation.compute",{id:e,value:a,deps:h}),f("derivation.compute",{id:e,deps:h}),w.derivationDeps.set(e,h),w.recentlyComputedDerivations.add(e),b("derivation.compute",{id:e,deps:h});},onDerivationInvalidate:e=>{p("derivation.invalidate",{id:e}),b("derivation.invalidate",{id:e});},onReconcileStart:e=>{p("reconcile.start",{}),T.lastReconcileStartMs=performance.now(),b("reconcile.start",{}),f("reconcile.start",{});},onReconcileEnd:e=>{if(p("reconcile.end",e),f("reconcile.end",{unmet:e.unmet.length,inflight:e.inflight.length,completed:e.completed.length}),T.lastReconcileStartMs>0){let a=performance.now()-T.lastReconcileStartMs;T.reconcileCount++,T.reconcileTotalMs+=a,T.lastReconcileStartMs=0;}if(m.isRecording&&s.system&&m.snapshots.length<Ne)try{m.snapshots.push({timestamp:Date.now(),facts:s.system.facts.$store.toObject()});}catch{}S&&s.system&&(N=e,ze(w),I(A|L|F|j|P|$),b("reconcile.end",{unmet:e.unmet.length,inflight:e.inflight.length}));},onConstraintEvaluate:(e,a,h)=>{let R=s.system?.meta?.constraint(e)?.label,B=R?{id:e,active:a,label:R}:{id:e,active:a},q=h?{...B,whenExplain:h}:B;p("constraint.evaluate",q),f("constraint.evaluate",q),a?(w.activeConstraints.add(e),w.recentlyActiveConstraints.add(e)):w.activeConstraints.delete(e),b("constraint.evaluate",{id:e,active:a});},onConstraintError:(e,a)=>{p("constraint.error",{id:e,error:String(a)}),b("constraint.error",{id:e,error:String(a)});},onRequirementCreated:e=>{p("requirement.created",{id:e.id,type:e.requirement.type}),f("requirement.created",{id:e.id,type:e.requirement.type}),b("requirement.created",{id:e.id,type:e.requirement.type});},onRequirementMet:(e,a)=>{p("requirement.met",{id:e.id,byResolver:a}),f("requirement.met",{id:e.id,byResolver:a}),b("requirement.met",{id:e.id,byResolver:a});},onRequirementCanceled:e=>{p("requirement.canceled",{id:e.id}),f("requirement.canceled",{id:e.id}),b("requirement.canceled",{id:e.id});},onResolverStart:(e,a)=>{let h=s.system?.meta?.resolver(e)?.label,R={resolver:e,requirementId:a.id},B=h?{...R,label:h}:R;p("resolver.start",B),f("resolver.start",B),v.inflight.set(e,performance.now()),S&&s.system&&(I(F|L|x),b("resolver.start",{resolver:e,requirementId:a.id}));},onResolverComplete:(e,a,h)=>{let R=s.system?.meta?.resolver(e)?.label;p("resolver.complete",{resolver:e,requirementId:a.id,duration:h,...R?{label:R}:{}}),f("resolver.complete",{resolver:e,requirementId:a.id,duration:h});let B=s.resolverStats.get(e)??{count:0,totalMs:0,errors:0};if(B.count++,B.totalMs+=h,s.resolverStats.set(e,B),s.resolverStats.size>ye){let X=s.resolverStats.keys().next().value;X!==void 0&&s.resolverStats.delete(X);}T.resolverStats.set(e,{...B});let q=v.inflight.get(e);v.inflight.delete(e),q!==void 0&&v.entries.push({resolver:e,startMs:q,endMs:performance.now(),error:false}),S&&s.system&&(I(F|L|j|x),b("resolver.complete",{resolver:e,duration:h}));},onResolverError:(e,a,h)=>{p("resolver.error",{resolver:e,requirementId:a.id,error:String(h)}),f("resolver.error",{resolver:e,requirementId:a.id,error:String(h)});let R=s.resolverStats.get(e)??{count:0,totalMs:0,errors:0};if(R.errors++,s.resolverStats.set(e,R),s.resolverStats.size>ye){let q=s.resolverStats.keys().next().value;q!==void 0&&s.resolverStats.delete(q);}T.resolverStats.set(e,{...R});let B=v.inflight.get(e);v.inflight.delete(e),B!==void 0&&v.entries.push({resolver:e,startMs:B,endMs:performance.now(),error:true}),S&&s.system&&(I(F|L|j|x),b("resolver.error",{resolver:e,error:String(h)}));},onResolverRetry:(e,a,h)=>{p("resolver.retry",{resolver:e,requirementId:a.id,attempt:h}),f("resolver.retry",{resolver:e,requirementId:a.id,attempt:h}),b("resolver.retry",{resolver:e,attempt:h});},onResolverCancel:(e,a)=>{p("resolver.cancel",{resolver:e,requirementId:a.id}),f("resolver.cancel",{resolver:e,requirementId:a.id}),v.inflight.delete(e),b("resolver.cancel",{resolver:e});},onResolverWriteRejected:e=>{let a=e.kind==="summary"?{kind:e.kind,resolver:e.resolver,requirementId:e.req.id,reason:e.reason,dropped:e.dropped}:{kind:e.kind,resolver:e.resolver,requirementId:e.req.id,reason:e.reason,fact:e.fact,expected:e.expected,actual:e.actual};p("resolver.write.rejected",a),f("resolver.write.rejected",a),b("resolver.write.rejected",e.kind==="summary"?{resolver:e.resolver,dropped:e.dropped}:{resolver:e.resolver,fact:e.fact});},onEffectRun:e=>{let a=s.system?.meta?.effect(e)?.label,h=a?{id:e,label:a}:{id:e};p("effect.run",h),f("effect.run",h),T.effectRunCount++,b("effect.run",{id:e});},onEffectError:(e,a)=>{p("effect.error",{id:e,error:String(a)}),T.effectErrorCount++,b("effect.error",{id:e,error:String(a)});},onSnapshot:e=>{p("timetravel.snapshot",{id:e.id,trigger:e.trigger}),S&&s.system&&I($),b("timetravel.snapshot",{id:e.id,trigger:e.trigger});},onHistoryNavigate:(e,a)=>{if(p("timetravel.jump",{from:e,to:a}),f("timetravel.jump",{from:e,to:a}),S&&s.system){let h=s.system;try{let R=h.facts.$store.toObject();k.clear(),S.refs.factsBody.replaceChildren();for(let[B,q]of Object.entries(R))ae(k,S.refs.factsBody,B,q,!1);S.refs.factsCount.textContent=String(Object.keys(R).length);}catch{}_.clear(),w.derivationDeps.clear(),S.refs.derivBody.replaceChildren(),N=null,I(A|L|F|P|$),b("timetravel.jump",{from:e,to:a});}},onError:e=>{p("error",{source:e.source,sourceId:e.sourceId,message:e.message}),f("error",{source:e.source,message:e.message}),b("error",{source:e.source,message:e.message});},onErrorRecovery:(e,a)=>{p("error.recovery",{source:e.source,sourceId:e.sourceId,strategy:a}),b("error.recovery",{source:e.source,strategy:a});},onTraceComplete:e=>{p("trace.complete",{id:e.id,status:e.status,facts:e.factChanges.length,constraints:e.constraintsHit.length,requirements:e.requirementsAdded.length,resolvers:e.resolversStarted.length,effects:e.effectsRun.length}),b("trace.complete",{id:e.id});},onDefinitionRegister:(e,a)=>{p("definition.register",{type:e,id:a}),f("definition.register",{type:e,id:a}),b("definition.register",{type:e,id:a});},onDefinitionAssign:(e,a)=>{p("definition.assign",{type:e,id:a}),f("definition.assign",{type:e,id:a}),b("definition.assign",{type:e,id:a});},onDefinitionUnregister:(e,a)=>{p("definition.unregister",{type:e,id:a}),f("definition.unregister",{type:e,id:a}),b("definition.unregister",{type:e,id:a});},onDefinitionCall:(e,a,h)=>{p("definition.call",{type:e,id:a,props:h}),f("definition.call",{type:e,id:a,props:h}),b("definition.call",{type:e,id:a,props:h});}}}var Ge="directive-devtools-event",Ue=new Set(["__proto__","constructor","prototype"]),nt=Math.random().toString(36).slice(2,8);function rt(){if(typeof window<"u"){let n=`__DIRECTIVE_BRIDGE_ID_${nt}__`,c=window,o=c[n]??0;return c[n]=o+1,o+1}return 1}function ot(n){let c=false;for(let r of Ue)if(r in n){c=true;break}if(!c)return n;let o=Object.create(null);for(let[r,u]of Object.entries(n))Ue.has(r)||(o[r]=u);return o}function it(n){if(!(typeof window>"u"))try{let c=ot(n),o={id:rt(),timestamp:Date.now(),snapshotId:null,...c};window.dispatchEvent(new CustomEvent(Ge,{detail:o}));}catch{}}function st(n){let{storage:c,key:o,include:r,exclude:u=[],debounce:g=100,onRestore:l,onSave:t,onError:i}=n,s=null,p=null,S=new Set,k=m=>u.includes(m)?false:r?r.includes(m):true,_=()=>{try{let m=c.getItem(o);if(!m)return null;let v=JSON.parse(m);return typeof v!="object"||v===null?null:chunkEOLY64E6_cjs.e(v)?v:(i?.(new Error("Potential prototype pollution detected in stored data")),null)}catch(m){return i?.(m instanceof Error?m:new Error(String(m))),null}},T=()=>{if(p)try{let m={};for(let v of S)k(v)&&(m[v]=p.facts[v]);c.setItem(o,JSON.stringify(m)),t?.(m);}catch(m){i?.(m instanceof Error?m:new Error(String(m)));}},w=()=>{s&&clearTimeout(s),s=setTimeout(T,g);};return {name:"persistence",onInit:m=>{p=m;let v=_();v&&(p.facts.$store.batch(()=>{for(let[D,M]of Object.entries(v))k(D)&&(p.facts[D]=M,S.add(D));}),l?.(v));},onDestroy:()=>{s&&clearTimeout(s),T();},onFactSet:m=>{S.add(m),k(m)&&w();},onFactDelete:m=>{S.delete(m),k(m)&&w();},onFactsBatch:m=>{let v=false;for(let D of m)D.type==="set"?S.add(D.key):S.delete(D.key),k(D.key)&&(v=true);v&&w();}}}function at(n={}){let{onSlowConstraint:c,onSlowResolver:o,slowConstraintThresholdMs:r=16,slowResolverThresholdMs:u=1e3}=n,g=new Map,l=new Map,t=new Map,i={runs:0,totalDurationMs:0,avgDurationMs:0,maxDurationMs:0},s=0,p=0,S=0;function k(m){let v=g.get(m);return v||(v={evaluations:0,totalDurationMs:0,avgDurationMs:0,maxDurationMs:0,lastEvaluatedAt:0},g.set(m,v)),v}function _(m){let v=l.get(m);return v||(v={starts:0,completions:0,errors:0,retries:0,cancellations:0,totalDurationMs:0,avgDurationMs:0,maxDurationMs:0,lastCompletedAt:0},l.set(m,v)),v}function T(m){let v=t.get(m);return v||(v={runs:0,errors:0,lastRunAt:0},t.set(m,v)),v}let w={name:"performance",onStart(){s=Date.now();},onConstraintEvaluate(m,v){let D=performance.now(),M=k(m);if(M.evaluations++,M.lastEvaluatedAt=Date.now(),S>0){let O=D-S;M.totalDurationMs+=O;let H=M.evaluations;M.avgDurationMs=M.totalDurationMs/H,O>M.maxDurationMs&&(M.maxDurationMs=O),O>r&&c?.(m,O);}S=D;},onResolverStart(m,v){let D=_(m);D.starts++;},onResolverComplete(m,v,D){let M=_(m);M.completions++,M.totalDurationMs+=D,M.avgDurationMs=M.totalDurationMs/M.completions,D>M.maxDurationMs&&(M.maxDurationMs=D),M.lastCompletedAt=Date.now(),D>u&&o?.(m,D);},onResolverError(m,v,D){_(m).errors++;},onResolverRetry(m,v,D){_(m).retries++;},onResolverCancel(m,v){_(m).cancellations++;},onEffectRun(m){let v=T(m);v.runs++,v.lastRunAt=Date.now();},onEffectError(m,v){T(m).errors++;},onReconcileStart(){p=performance.now(),S=0;},onReconcileEnd(){let m=performance.now()-p;i.runs++,i.totalDurationMs+=m,i.avgDurationMs=i.totalDurationMs/i.runs,m>i.maxDurationMs&&(i.maxDurationMs=m);},onDestroy(){w.reset();},getSnapshot(){let m={};for(let[M,O]of g)m[M]={...O};let v={};for(let[M,O]of l)v[M]={...O};let D={};for(let[M,O]of t)D[M]={...O};return {constraints:m,resolvers:v,effects:D,reconcile:{...i},uptime:s?Date.now()-s:0}},reset(){g.clear(),l.clear(),t.clear(),i.runs=0,i.totalDurationMs=0,i.avgDurationMs=0,i.maxDurationMs=0,S=0;}};return w}function pe(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function Ce(n,c){if(n.length===0)return 0;let o=[...n].sort((u,g)=>u-g),r=Math.ceil(c/100*o.length)-1;return o[Math.max(0,r)]??0}function ct(n={}){let{serviceName:c="directive-agents",metrics:o={},tracing:r={},alerts:u=[],summaryMetrics:g={},events:l={}}=n,t={requests:g.requests??"agent.requests",errors:g.errors??"agent.errors",latency:g.latency??"agent.latency",tokens:g.tokens??"agent.tokens",cost:g.cost??"agent.cost"},{enabled:i=true,exportInterval:s,exporter:p,maxDataPoints:S=1e3}=o,{enabled:k=true,sampleRate:_=1,maxSpans:T=1e3,exporter:w}=r,m=Date.now(),v=new Map,D=new Map,M=[],O=[],H=new Map,A=new Map,F;s&&(p||w)&&(F=setInterval(async()=>{try{if(p&&i&&await p(Array.from(A.values())),w&&k){let x=M.splice(0,100);x.length>0&&await w(x);}}catch(x){console.error("[Directive Observability] Export error:",x);}},s));function L(x){if(!i)return;let E=`${x.name}:${JSON.stringify(Object.fromEntries(Object.entries(x.labels).sort()))}`,C=v.get(E);C||(C=[],v.set(E,C)),C.push(x),C.length>S&&C.shift(),j(x.name,C),l.onMetricRecorded?.(x),P(x.name);}function j(x,E){if(E.length===0)return;let C=E.map(f=>f.value),N=C.reduce((f,e)=>f+e,0),I=E[0],d=C[C.length-1],b={name:x,type:I.type,count:E.length,sum:N,min:Math.min(...C),max:Math.max(...C),avg:N/E.length,lastValue:d,lastUpdated:Date.now()};A.set(x,b);}function P(x){for(let E of u){if(E.metric!==x)continue;let C=A.get(x);if(!C)continue;let N=`${E.metric}:${E.threshold}`,I=H.get(N),d=E.cooldownMs??6e4;if(I&&Date.now()-I<d)continue;let b=E.operator??">",f=C.lastValue,e=E.threshold,a=false;switch(b){case ">":a=f>e;break;case "<":a=f<e;break;case ">=":a=f>=e;break;case "<=":a=f<=e;break;case "==":a=f===e;break}if(a){let h={alertId:pe(),metric:x,currentValue:f,threshold:e,operator:b,action:E.action,timestamp:Date.now(),message:`Alert: ${x} ${b} ${e} (current: ${f})`};switch(O.push(h),O.length>1e3&&O.splice(0,O.length-1e3),H.set(N,Date.now()),l.onAlert?.(h),E.action){case "log":console.log(`[Observability] ${h.message}`);break;case "warn":console.warn(`[Observability] ${h.message}`);break;case "alert":console.error(`[Observability ALERT] ${h.message}`);break;case "callback":E.callback?.(C,e);break}}}}function $(x){let E=[];for(let[C,N]of v)if(C.startsWith(`${x}:`))for(let I of N)E.push(I.value);return E.length===0?{}:{p50:Ce(E,50),p90:Ce(E,90),p99:Ce(E,99)}}return {incrementCounter(x,E={},C=1){L({name:x,type:"counter",value:C,labels:E,timestamp:Date.now()});},setGauge(x,E,C={}){L({name:x,type:"gauge",value:E,labels:C,timestamp:Date.now()});},observeHistogram(x,E,C={}){L({name:x,type:"histogram",value:E,labels:C,timestamp:Date.now()});},startSpan(x,E){if(Math.random()>_)return {traceId:"sampled-out",spanId:"sampled-out",operationName:x,serviceName:c,startTime:Date.now(),status:"ok",tags:{},logs:[]};let C={traceId:E?D.get(E)?.traceId??pe():pe(),spanId:pe(),parentSpanId:E,operationName:x,serviceName:c,startTime:Date.now(),status:"ok",tags:{},logs:[]};return k&&(D.set(C.spanId,C),l.onSpanStart?.(C)),C},endSpan(x,E="ok"){if(x==="sampled-out")return;let C=D.get(x);if(C){for(C.endTime=Date.now(),C.duration=C.endTime-C.startTime,C.status=E,D.delete(x),M.push(C);M.length>T;)M.shift();L({name:`${C.operationName}.latency`,type:"histogram",value:C.duration,labels:{},timestamp:Date.now()}),E==="error"&&L({name:`${C.operationName}.errors`,type:"counter",value:1,labels:{},timestamp:Date.now()}),l.onSpanEnd?.(C);}},addSpanLog(x,E,C="info"){if(x==="sampled-out")return;let N=D.get(x);N&&N.logs.push({timestamp:Date.now(),message:E,level:C});},addSpanTag(x,E,C){if(x==="sampled-out")return;let N=D.get(x);N&&(N.tags[E]=C);},getDashboard(){let x=A.get(t.requests),E=A.get(t.errors),C=A.get(t.latency),N=A.get(t.tokens),I=A.get(t.cost),d=x?.sum??0,b=E?.sum??0,f=d>0?b/d:0,e=C?$(t.latency):{};return {service:{name:c,uptime:Date.now()-m,startTime:m},metrics:Object.fromEntries(A),traces:[...M].slice(-100),alerts:[...O].slice(-50),summary:{totalRequests:d,totalErrors:b,errorRate:f,avgLatency:C?.avg??0,p99Latency:e.p99??0,activeSpans:D.size,totalTokens:N?.sum??0,totalCost:I?.sum??0}}},getMetric(x){let E=A.get(x);if(!E)return;let C=$(x);return {...E,...C}},getTraces(x=100){return [...M].slice(-x)},getAlerts(){return [...O]},export(){return {metrics:Array.from(A.values()),traces:[...M],alerts:[...O]}},clear(){v.clear(),A.clear(),D.clear(),M.length=0,O.length=0,H.clear();},async destroy(){F&&(clearInterval(F),F=void 0);try{p&&i&&A.size>0&&await p(Array.from(A.values())),w&&k&&M.length>0&&await w([...M]);}catch(x){console.error("[Directive Observability] Error flushing data during destroy:",x);}v.clear(),A.clear(),D.clear(),M.length=0,O.length=0,H.clear();},getHealthStatus(){let x=A.get(t.requests),E=A.get(t.errors),C=x?.sum??0,N=E?.sum??0,I=C>0?N/C:0,d=O.filter(b=>Date.now()-b.timestamp<3e5).length;return {healthy:I<.1&&d===0,uptime:Date.now()-m,errorRate:I,activeAlerts:d}}}}function lt(n){return {trackRun(c,o){let r={agent:c};n.incrementCounter("agent.requests",r),o.success||n.incrementCounter("agent.errors",r),n.observeHistogram("agent.latency",o.latencyMs,r),o.inputTokens!==void 0&&(n.incrementCounter("agent.tokens.input",r,o.inputTokens),n.incrementCounter("agent.tokens",r,o.inputTokens)),o.outputTokens!==void 0&&(n.incrementCounter("agent.tokens.output",r,o.outputTokens),n.incrementCounter("agent.tokens",r,o.outputTokens)),o.cost!==void 0&&n.incrementCounter("agent.cost",r,o.cost),o.toolCalls!==void 0&&n.incrementCounter("agent.tool_calls",r,o.toolCalls);},trackGuardrail(c,o){let r={guardrail:c};n.incrementCounter("guardrail.checks",r),o.passed||n.incrementCounter("guardrail.failures",r),o.blocked&&n.incrementCounter("guardrail.blocks",r),n.observeHistogram("guardrail.latency",o.latencyMs,r);},trackApproval(c,o){let r={tool:c};n.incrementCounter("approval.requests",r),o.approved?n.incrementCounter("approval.approved",r):n.incrementCounter("approval.rejected",r),o.timedOut&&n.incrementCounter("approval.timeouts",r),n.observeHistogram("approval.wait_time",o.waitTimeMs,r);},trackHandoff(c,o,r){n.incrementCounter("handoff.count",{from:c,to:o}),n.observeHistogram("handoff.latency",r);}}}function ut(n){let c=[{key:"service.name",value:{stringValue:n.serviceName??"directive-agents"}}];if(n.serviceVersion&&c.push({key:"service.version",value:{stringValue:n.serviceVersion}}),n.resourceAttributes)for(let[o,r]of Object.entries(n.resourceAttributes))c.push({key:o,value:{stringValue:r}});return {attributes:c}}function Z(n){return `${BigInt(n)*BigInt(1e6)}`}function dt(n){switch(n){case "counter":return "sum";case "gauge":return "gauge";case "histogram":return "histogram";default:return "gauge"}}function mt(n,c,o){let r=n.map(u=>{let g=u.lastUpdated-6e4,l=[{asInt:u.type==="counter"?u.sum:void 0,asDouble:u.type!=="counter"?u.lastValue:void 0,timeUnixNano:Z(u.lastUpdated),startTimeUnixNano:Z(g),attributes:[]}],t=dt(u.type),i={name:u.name,unit:""};return t==="sum"?i.sum={dataPoints:l,aggregationTemporality:2,isMonotonic:true}:t==="histogram"?i.histogram={dataPoints:[{count:u.count,sum:u.sum,min:u.min,max:u.max,timeUnixNano:Z(u.lastUpdated),startTimeUnixNano:Z(g),attributes:[]}],aggregationTemporality:2}:i.gauge={dataPoints:l},i});return {resourceMetrics:[{resource:c,scopeMetrics:[{scope:{name:"directive",version:o},metrics:r}]}]}}function pt(n,c,o){let r=n.map(u=>{let g=u.logs.map(i=>({timeUnixNano:Z(i.timestamp),name:i.level,attributes:[{key:"message",value:{stringValue:i.message}},{key:"level",value:{stringValue:i.level}}]})),l=Object.entries(u.tags).map(([i,s])=>({key:i,value:typeof s=="string"?{stringValue:s}:typeof s=="number"?{intValue:`${s}`}:{boolValue:s}})),t=u.status==="ok"?1:u.status==="error"?2:0;return {traceId:u.traceId.replace(/-/g,"").padEnd(32,"0").slice(0,32),spanId:u.spanId.replace(/-/g,"").padEnd(16,"0").slice(0,16),parentSpanId:u.parentSpanId?u.parentSpanId.replace(/-/g,"").padEnd(16,"0").slice(0,16):void 0,name:u.operationName,kind:1,startTimeUnixNano:Z(u.startTime),endTimeUnixNano:u.endTime?Z(u.endTime):Z(u.startTime),attributes:l,events:g,status:{code:t}}});return {resourceSpans:[{resource:c,scopeSpans:[{scope:{name:"directive",version:o},spans:r}]}]}}function gt(n){let{endpoint:c,headers:o={},scopeVersion:r="0.1.0",timeoutMs:u=1e4,fetch:g=globalThis.fetch,onError:l}=n;try{let s=new URL(c);if(s.protocol!=="http:"&&s.protocol!=="https:")throw new Error("[Directive] Only http: and https: protocols are supported")}catch(s){throw new Error(`[Directive OTLP] Invalid endpoint URL "${c}": ${s instanceof Error?s.message:String(s)}`)}if(/\/v1\/(metrics|traces)/.test(c)&&console.warn(`[Directive OTLP] Endpoint "${c}" already contains a /v1/metrics or /v1/traces path. The exporter will append /v1/metrics or /v1/traces automatically. Use the base URL (e.g., "http://localhost:4318") instead.`),u<=0||!Number.isFinite(u))throw new Error(`[Directive OTLP] timeoutMs must be > 0, got ${u}`);let t=ut(n);async function i(s,p,S){let k=`${c.replace(/\/$/,"")}${s}`,_=new AbortController,T=setTimeout(()=>_.abort(),u);try{let w=await g(k,{method:"POST",headers:{"Content-Type":"application/json",...o},body:JSON.stringify(p),signal:_.signal});if(!w.ok)throw new Error(`[Directive] OTLP export failed: ${w.status} ${w.statusText}`)}catch(w){let m=w instanceof Error?w:new Error(String(w));l?l(m,S):console.error(`[Directive OTLP] Export ${S} error:`,m.message);}finally{clearTimeout(T);}}return {async exportMetrics(s){if(s.length===0)return;let p=mt(s,t,r);await i("/v1/metrics",p,"metrics");},async exportTraces(s){if(s.length===0)return;let p=pt(s,t,r);await i("/v1/traces",p,"traces");}}}var ce=class extends Error{code="CIRCUIT_OPEN";retryAfterMs;state;constructor(c,o,r="OPEN",u){let g=u?`[Directive CircuitBreaker] Circuit "${c}" is ${r}. ${u}`:`[Directive CircuitBreaker] Circuit "${c}" is ${r}. Request rejected. Try again in ${Math.ceil(o/1e3)}s.`;super(g),this.name="CircuitBreakerOpenError",this.retryAfterMs=o,this.state=r;}};function ft(n={}){let{failureThreshold:c=5,recoveryTimeMs:o=3e4,halfOpenMaxRequests:r=3,failureWindowMs:u=6e4,observability:g,metricPrefix:l="circuit_breaker",name:t="default",isFailure:i=()=>true,onStateChange:s}=n;if(c<1||!Number.isFinite(c))throw new Error(`[Directive CircuitBreaker] failureThreshold must be >= 1, got ${c}`);if(o<=0||!Number.isFinite(o))throw new Error(`[Directive CircuitBreaker] recoveryTimeMs must be > 0, got ${o}`);if(r<1||!Number.isFinite(r))throw new Error(`[Directive CircuitBreaker] halfOpenMaxRequests must be >= 1, got ${r}`);if(u<=0||!Number.isFinite(u))throw new Error(`[Directive CircuitBreaker] failureWindowMs must be > 0, got ${u}`);let p="CLOSED",S=[],k=0,_=0,T=Date.now(),w=0,m=0,v=0,D=0,M=0,O=null,H=null;function A(P){if(p===P)return;let $=p;p=P,T=Date.now(),P==="OPEN"&&(w=Date.now()),P==="HALF_OPEN"&&(k=0,_=0),s?.($,P),g&&g.incrementCounter(`${l}.state_change`,{name:t,from:$,to:P});}function F(){let P=Date.now()-u;return S=S.filter($=>$>P),S.length}function L(){D++,H=Date.now(),g&&g.incrementCounter(`${l}.success`,{name:t}),p==="HALF_OPEN"&&(_++,_>=r&&(A("CLOSED"),S=[]));}function j(P){if(!i(P)){L();return}v++,O=Date.now(),S.push(Date.now());let $=c*2;if(S.length>$&&(S=S.slice(-$)),g&&g.incrementCounter(`${l}.failure`,{name:t}),p==="HALF_OPEN"){A("OPEN");return}p==="CLOSED"&&F()>=c&&A("OPEN");}return {async execute(P){if(m++,g&&g.incrementCounter(`${l}.requests`,{name:t}),p==="OPEN")if(Date.now()-w>=o)A("HALF_OPEN");else throw M++,g&&g.incrementCounter(`${l}.rejected`,{name:t}),new ce(t,o-(Date.now()-w));if(p==="HALF_OPEN"){if(k>=r)throw M++,new ce(t,o,"HALF_OPEN",`Max trial requests (${r}) reached.`);k++;}let $=Date.now();try{let x=await P();return L(),g&&g.observeHistogram(`${l}.latency`,Date.now()-$,{name:t}),x}catch(x){let E=x instanceof Error?x:new Error(String(x));throw j(E),g&&g.observeHistogram(`${l}.latency`,Date.now()-$,{name:t}),x}},getState(){return p==="OPEN"&&Date.now()-w>=o&&A("HALF_OPEN"),p},getStats(){return {state:this.getState(),totalRequests:m,totalFailures:v,totalSuccesses:D,totalRejected:M,recentFailures:F(),lastFailureTime:O,lastSuccessTime:H,lastStateChange:T}},forceState(P){A(P);},reset(){let P=p;p="CLOSED",S=[],k=0,_=0,T=Date.now(),w=0,m=0,v=0,D=0,M=0,O=null,H=null,P!=="CLOSED"&&s?.(P,"CLOSED");},isAllowed(){return p==="CLOSED"?true:p==="OPEN"?Date.now()-w>=o:k<r}}}
2
2
  exports.CircuitBreakerOpenError=ce;exports.DEVTOOLS_EVENT_NAME=Ge;exports.createAgentMetrics=lt;exports.createCircuitBreaker=ft;exports.createOTLPExporter=gt;exports.createObservability=ct;exports.devtoolsPlugin=tt;exports.emitDevToolsEvent=it;exports.loggingPlugin=Ke;exports.performancePlugin=at;exports.persistencePlugin=st;//# sourceMappingURL=index.cjs.map
3
3
  //# sourceMappingURL=index.cjs.map