@chatpanel/events 0.120.0 → 0.120.1

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 (2) hide show
  1. package/event.js +1 -1
  2. package/package.json +1 -1
package/event.js CHANGED
@@ -1 +1 @@
1
- import{isRef as a}from"./ref.js";const c=1,m=Object.freeze({turn:["started","ended"],assistant:["prompted","message","reasoning"],context:["assembled","attached","expanded"],capability:["offered","granted","denied","activated","revoked","invoked","resulted"],privacy:["redacted","egress"],policy:["changed","guard_denied"],data:["created","updated","deleted"],automation:["fired","suppressed"]}),v=Object.freeze(Object.entries(m).flatMap(([e,n])=>n.map(s=>`${e}.${s}`))),w=Object.freeze(["user","rule","schedule","model","agent","channel"]),S=Object.freeze(["global","site","tab","session","agent"]),l=Object.freeze(["R","M","L","C","A","X","H"]),x=Object.freeze(["pure","idempotent","replay-safe","non-replayable"]),I=Object.freeze(["none","redacted","delegated"]);class r extends Error{constructor(n,s,i=null){super(s),this.name="EventError",this.code=n,this.detail=i}}const t=e=>typeof e=="string"&&e.length>0,o=e=>typeof e=="number"&&Number.isFinite(e),f=e=>Array.isArray(e);function d(e){return!!e&&w.includes(e.kind)&&t(e.id)}function A(e){return!!e&&S.includes(e.kind)&&t(e.id)}const O={"turn.started":e=>t(e.turnId),"turn.ended":e=>t(e.turnId),"assistant.prompted":e=>t(e.turnId)&&a(e.ref),"assistant.message":e=>t(e.turnId)&&a(e.ref),"assistant.reasoning":e=>t(e.turnId)&&a(e.ref),"context.assembled":e=>o(e.budget)&&o(e.used)&&!!e.parts&&typeof e.parts=="object"&&f(e.resident)&&e.resident.every(a)&&o(e.reachableCount),"context.attached":e=>a(e.ref),"context.expanded":e=>a(e.ref)&&o(e.tokens),"capability.offered":e=>t(e.capability)&&t(e.reason),"capability.granted":e=>t(e.capability)&&d(e.actor),"capability.denied":e=>t(e.capability)&&d(e.actor),"capability.activated":e=>t(e.capability)&&l.includes(e.classUsed),"capability.revoked":e=>t(e.capability)&&t(e.cause),"capability.invoked":e=>t(e.capability)&&d(e.actor)&&A(e.scope)&&x.includes(e.effects)&&(e.effects==="pure"||t(e.idempotencyKey)),"capability.resulted":e=>t(e.capability)&&typeof e.ok=="boolean"&&l.includes(e.classUsed)&&!!e.cost&&o(e.cost.ms),"privacy.redacted":e=>!!e.counts&&typeof e.counts=="object"&&Object.values(e.counts).every(o),"privacy.egress":e=>t(e.host)&&typeof e.redacted=="boolean"&&typeof e.controlled=="boolean","policy.changed":e=>t(e.dial)&&d(e.actor)&&"from"in e&&"to"in e,"policy.guard_denied":e=>t(e.capability)&&t(e.reason),"data.created":e=>a(e.ref),"data.updated":e=>a(e.ref),"data.deleted":e=>a(e.ref)&&typeof e.shredded=="boolean","automation.fired":e=>t(e.ruleId)&&l.includes(e.classUsed),"automation.suppressed":e=>t(e.ruleId)&&t(e.reason)};function y(e){if(!e||typeof e!="object")throw new r("SHAPE","event must be an object");if(e.v!==c)throw new r("VERSION",`expected v=${c}, got ${e.v} — upcast first`,e.v);if(!t(e.id))throw new r("SHAPE","id required");if(!t(e.host))throw new r("SHAPE","host required");if(!Number.isInteger(e.seq)||e.seq<0)throw new r("SHAPE","seq must be a non-negative integer");if(!f(e.causes)||!e.causes.every(t))throw new r("SHAPE","causes must be string[]");if(!o(e.at))throw new r("SHAPE","at required (advisory wall clock)");if(!v.includes(e.type))throw new r("TYPE",`unknown type ${e.type}`,e.type);if(!e.payload||typeof e.payload!="object")throw new r("SHAPE","payload required");const n=O[e.type];if(n&&!n(e.payload))throw new r("PAYLOAD",`payload invalid for ${e.type}`,e.type);return e}function P(e){try{return y(e),!0}catch{return!1}}function k({host:e,seq:n=0,now:s=()=>Date.now(),newId:i}){if(!t(e))throw new r("SHAPE","host required");const p=i||(()=>globalThis.crypto.randomUUID());let u=n;return{get host(){return e},get seq(){return u},append(b,h,E=[]){const g=Object.freeze({v:c,id:p(),host:e,seq:u++,causes:Object.freeze([...E]),at:s(),type:b,payload:h});return y(g)}}}export{w as ACTOR_KINDS,v as ALL_TYPES,l as CLASSES,c as CURRENT_VERSION,x as EFFECTS,I as EGRESS,m as EVENT_TYPES,r as EventError,S as SCOPE_KINDS,k as createAppender,P as isValidEvent,y as validateEvent};
1
+ import{isRef as n}from"./ref.js";const i=1,v=Object.freeze({turn:["started","ended"],assistant:["prompted","message","reasoning"],context:["assembled","attached","expanded","retrieved"],capability:["offered","granted","denied","activated","revoked","invoked","resulted"],privacy:["redacted","egress"],policy:["changed","guard_denied"],data:["created","updated","deleted"],automation:["fired","suppressed"]}),m=Object.freeze(Object.entries(v).flatMap(([e,r])=>r.map(s=>`${e}.${s}`))),w=Object.freeze(["user","rule","schedule","model","agent","channel"]),x=Object.freeze(["global","site","tab","session","agent"]),u=Object.freeze(["R","M","L","C","A","X","H"]),S=Object.freeze(["pure","idempotent","replay-safe","non-replayable"]),k=Object.freeze(["none","redacted","delegated"]);class a extends Error{constructor(r,s,c=null){super(s),this.name="EventError",this.code=r,this.detail=c}}const t=e=>typeof e=="string"&&e.length>0,o=e=>typeof e=="number"&&Number.isFinite(e),l=e=>Array.isArray(e);function d(e){return!!e&&w.includes(e.kind)&&t(e.id)}function A(e){return!!e&&x.includes(e.kind)&&t(e.id)}const O={"turn.started":e=>t(e.turnId),"turn.ended":e=>t(e.turnId),"assistant.prompted":e=>t(e.turnId)&&n(e.ref),"assistant.message":e=>t(e.turnId)&&n(e.ref),"assistant.reasoning":e=>t(e.turnId)&&n(e.ref),"context.assembled":e=>o(e.budget)&&o(e.used)&&!!e.parts&&typeof e.parts=="object"&&l(e.resident)&&e.resident.every(n)&&o(e.reachableCount),"context.attached":e=>n(e.ref),"context.expanded":e=>n(e.ref)&&o(e.tokens),"context.retrieved":e=>t(e.tool)&&o(e.count)&&l(e.sources)&&e.sources.every(r=>r&&typeof r=="object"&&o(r.rank)),"capability.offered":e=>t(e.capability)&&t(e.reason),"capability.granted":e=>t(e.capability)&&d(e.actor),"capability.denied":e=>t(e.capability)&&d(e.actor),"capability.activated":e=>t(e.capability)&&u.includes(e.classUsed),"capability.revoked":e=>t(e.capability)&&t(e.cause),"capability.invoked":e=>t(e.capability)&&d(e.actor)&&A(e.scope)&&S.includes(e.effects)&&(e.effects==="pure"||t(e.idempotencyKey)),"capability.resulted":e=>t(e.capability)&&typeof e.ok=="boolean"&&u.includes(e.classUsed)&&!!e.cost&&o(e.cost.ms),"privacy.redacted":e=>!!e.counts&&typeof e.counts=="object"&&Object.values(e.counts).every(o),"privacy.egress":e=>t(e.host)&&typeof e.redacted=="boolean"&&typeof e.controlled=="boolean","policy.changed":e=>t(e.dial)&&d(e.actor)&&"from"in e&&"to"in e,"policy.guard_denied":e=>t(e.capability)&&t(e.reason),"data.created":e=>n(e.ref),"data.updated":e=>n(e.ref),"data.deleted":e=>n(e.ref)&&typeof e.shredded=="boolean","automation.fired":e=>t(e.ruleId)&&u.includes(e.classUsed),"automation.suppressed":e=>t(e.ruleId)&&t(e.reason)};function y(e){if(!e||typeof e!="object")throw new a("SHAPE","event must be an object");if(e.v!==i)throw new a("VERSION",`expected v=${i}, got ${e.v} — upcast first`,e.v);if(!t(e.id))throw new a("SHAPE","id required");if(!t(e.host))throw new a("SHAPE","host required");if(!Number.isInteger(e.seq)||e.seq<0)throw new a("SHAPE","seq must be a non-negative integer");if(!l(e.causes)||!e.causes.every(t))throw new a("SHAPE","causes must be string[]");if(!o(e.at))throw new a("SHAPE","at required (advisory wall clock)");if(!m.includes(e.type))throw new a("TYPE",`unknown type ${e.type}`,e.type);if(!e.payload||typeof e.payload!="object")throw new a("SHAPE","payload required");const r=O[e.type];if(r&&!r(e.payload))throw new a("PAYLOAD",`payload invalid for ${e.type}`,e.type);return e}function I(e){try{return y(e),!0}catch{return!1}}function P({host:e,seq:r=0,now:s=()=>Date.now(),newId:c}){if(!t(e))throw new a("SHAPE","host required");const p=c||(()=>globalThis.crypto.randomUUID());let f=r;return{get host(){return e},get seq(){return f},append(b,h,E=[]){const g=Object.freeze({v:i,id:p(),host:e,seq:f++,causes:Object.freeze([...E]),at:s(),type:b,payload:h});return y(g)}}}export{w as ACTOR_KINDS,m as ALL_TYPES,u as CLASSES,i as CURRENT_VERSION,S as EFFECTS,k as EGRESS,v as EVENT_TYPES,a as EventError,x as SCOPE_KINDS,P as createAppender,I as isValidEvent,y as validateEvent};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chatpanel/events",
3
- "version": "0.120.0",
3
+ "version": "0.120.1",
4
4
  "description": "The canonical ChatPanel event-log and capability contracts — typed durable facts, clock-free deterministic linearization, schema upcasting, and the invariants the replay harness asserts. Pure, dependency-free ESM shared by the ChatPanel extension, gateway and bridge.",
5
5
  "type": "module",
6
6
  "main": "index.js",