@contractspec/lib.personalization 6.1.0 → 6.2.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 (49) hide show
  1. package/README.md +353 -3
  2. package/dist/adaptive-evolution.d.ts +40 -0
  3. package/dist/adaptive-evolution.js +2 -0
  4. package/dist/adaptive-experience-policy.test.d.ts +1 -0
  5. package/dist/adaptive-experience.d.ts +74 -0
  6. package/dist/adaptive-experience.js +2 -0
  7. package/dist/adaptive-experience.test.d.ts +1 -0
  8. package/dist/adaptive-onboarding-scores.d.ts +9 -0
  9. package/dist/adaptive-onboarding-scores.js +2 -0
  10. package/dist/adaptive-onboarding.d.ts +46 -0
  11. package/dist/adaptive-onboarding.js +2 -0
  12. package/dist/behavior-signals.d.ts +50 -0
  13. package/dist/behavior-signals.js +2 -0
  14. package/dist/behavior-support-preset-definitions.d.ts +22 -0
  15. package/dist/behavior-support-preset-definitions.js +2 -0
  16. package/dist/behavior-support-presets.d.ts +146 -0
  17. package/dist/behavior-support-presets.js +2 -0
  18. package/dist/behavior-support.d.ts +18 -0
  19. package/dist/behavior-support.js +2 -0
  20. package/dist/behavior-support.test.d.ts +1 -0
  21. package/dist/index.d.ts +5 -0
  22. package/dist/index.js +4 -4
  23. package/dist/node/adaptive-evolution.js +1 -0
  24. package/dist/node/adaptive-experience.js +1 -0
  25. package/dist/node/adaptive-onboarding-scores.js +1 -0
  26. package/dist/node/adaptive-onboarding.js +1 -0
  27. package/dist/node/behavior-signals.js +1 -0
  28. package/dist/node/behavior-support-preset-definitions.js +1 -0
  29. package/dist/node/behavior-support-presets.js +1 -0
  30. package/dist/node/behavior-support.js +1 -0
  31. package/dist/node/index.js +4 -4
  32. package/dist/node/preference-dimensions.js +1 -0
  33. package/dist/node/preference-evolution-types.js +0 -0
  34. package/dist/node/preference-evolution.js +1 -0
  35. package/dist/node/preference-onboarding.js +1 -0
  36. package/dist/node/preference-presets.js +1 -0
  37. package/dist/preference-dimensions.d.ts +8 -0
  38. package/dist/preference-dimensions.js +1 -0
  39. package/dist/preference-dimensions.test.d.ts +1 -0
  40. package/dist/preference-evolution-types.d.ts +49 -0
  41. package/dist/preference-evolution-types.js +1 -0
  42. package/dist/preference-evolution.d.ts +3 -0
  43. package/dist/preference-evolution.js +2 -0
  44. package/dist/preference-evolution.test.d.ts +1 -0
  45. package/dist/preference-onboarding.d.ts +24 -0
  46. package/dist/preference-onboarding.js +2 -0
  47. package/dist/preference-presets.d.ts +97 -0
  48. package/dist/preference-presets.js +2 -0
  49. package/package.json +150 -6
@@ -0,0 +1 @@
1
+ var o=["steadyMomentum","activationFirst","permissionFirst","deepWorkBuilder","recoveryFirst","identityBuilder","selfAuthorityBuilder","socialMomentum","deadlineSprint","minimalNudge"],i={steadyMomentum:{attention:"next-step",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"progress",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"resume",reflection:"brief"},activationFirst:{attention:"next-step",activation:"guided-start",actionScale:"small",rhythm:"flexible",environment:"structured",challenge:"low",meaningFrame:"relief",permission:"start-smaller",selfAuthority:"confidence-building",accountability:"private",recovery:"resume",reflection:"brief"},permissionFirst:{attention:"ambient",activation:"prompted",actionScale:"small",rhythm:"flexible",environment:"open",challenge:"low",meaningFrame:"agency",permission:"renegotiate",selfAuthority:"confidence-building",accountability:"private",recovery:"renegotiate",reflection:"brief"},deepWorkBuilder:{attention:"priority",activation:"ritual",actionScale:"standard",rhythm:"time-boxed",environment:"focused",challenge:"stretch",meaningFrame:"mastery",permission:"proceed",selfAuthority:"high-autonomy",accountability:"self-review",recovery:"repair",reflection:"standard"},recoveryFirst:{attention:"next-step",activation:"guided-start",actionScale:"small",rhythm:"flexible",environment:"structured",challenge:"low",meaningFrame:"relief",permission:"renegotiate",selfAuthority:"confidence-building",accountability:"private",recovery:"repair",reflection:"brief"},identityBuilder:{attention:"review",activation:"ritual",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"agency",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"repair",reflection:"standard"},selfAuthorityBuilder:{attention:"priority",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"agency",permission:"proceed",selfAuthority:"confidence-building",accountability:"self-review",recovery:"repair",reflection:"standard"},socialMomentum:{attention:"priority",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"collaborative",challenge:"moderate",meaningFrame:"belonging",permission:"proceed",selfAuthority:"structured",accountability:"peer-review",recovery:"repair",reflection:"brief"},deadlineSprint:{attention:"priority",activation:"prompted",actionScale:"small",rhythm:"deadline-driven",environment:"focused",challenge:"stretch",meaningFrame:"impact",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"resume",reflection:"brief"},minimalNudge:{attention:"ambient",activation:"self-start",actionScale:"standard",rhythm:"flexible",environment:"open",challenge:"moderate",meaningFrame:"progress",permission:"proceed",selfAuthority:"high-autonomy",accountability:"private",recovery:"resume",reflection:"none"}};function c(t){return{...i[t]}}var a={steadyMomentum:e("steadyMomentum","Steady momentum","Consistent progress with moderate support."),activationFirst:e("activationFirst","Activation-first","Reduces start friction and makes the first useful action easier."),permissionFirst:e("permissionFirst","Permission-first","Helps users start smaller, pause, or renegotiate without friction."),deepWorkBuilder:e("deepWorkBuilder","Deep work builder","Protects focus, mastery, and intentional work."),recoveryFirst:e("recoveryFirst","Recovery-first","Makes repair and resumption easier after misses or interruptions."),identityBuilder:e("identityBuilder","Identity builder","Connects action to user-defined values or commitments."),selfAuthorityBuilder:e("selfAuthorityBuilder","Self-authority builder","Builds confidence, composure, structure, and follow-through."),socialMomentum:e("socialMomentum","Social momentum","Uses shared rhythm, collaboration, or review when explicitly wanted."),deadlineSprint:e("deadlineSprint","Deadline sprint","Supports short-term urgency and focused execution."),minimalNudge:e("minimalNudge","Minimal nudge","Keeps behavior support low-noise with minimal intervention.")};function m(t){let r=a[t];return{...r,dimensions:{...r.dimensions}}}function e(t,r,n){return{id:t,label:r,intent:n,dimensions:i[t]}}export{m as getBehaviorSupportPresetDefinition,a as BEHAVIOR_SUPPORT_PRESET_DEFINITIONS};
@@ -0,0 +1 @@
1
+ var i=["steadyMomentum","activationFirst","permissionFirst","deepWorkBuilder","recoveryFirst","identityBuilder","selfAuthorityBuilder","socialMomentum","deadlineSprint","minimalNudge"],t={steadyMomentum:{attention:"next-step",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"progress",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"resume",reflection:"brief"},activationFirst:{attention:"next-step",activation:"guided-start",actionScale:"small",rhythm:"flexible",environment:"structured",challenge:"low",meaningFrame:"relief",permission:"start-smaller",selfAuthority:"confidence-building",accountability:"private",recovery:"resume",reflection:"brief"},permissionFirst:{attention:"ambient",activation:"prompted",actionScale:"small",rhythm:"flexible",environment:"open",challenge:"low",meaningFrame:"agency",permission:"renegotiate",selfAuthority:"confidence-building",accountability:"private",recovery:"renegotiate",reflection:"brief"},deepWorkBuilder:{attention:"priority",activation:"ritual",actionScale:"standard",rhythm:"time-boxed",environment:"focused",challenge:"stretch",meaningFrame:"mastery",permission:"proceed",selfAuthority:"high-autonomy",accountability:"self-review",recovery:"repair",reflection:"standard"},recoveryFirst:{attention:"next-step",activation:"guided-start",actionScale:"small",rhythm:"flexible",environment:"structured",challenge:"low",meaningFrame:"relief",permission:"renegotiate",selfAuthority:"confidence-building",accountability:"private",recovery:"repair",reflection:"brief"},identityBuilder:{attention:"review",activation:"ritual",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"agency",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"repair",reflection:"standard"},selfAuthorityBuilder:{attention:"priority",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"agency",permission:"proceed",selfAuthority:"confidence-building",accountability:"self-review",recovery:"repair",reflection:"standard"},socialMomentum:{attention:"priority",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"collaborative",challenge:"moderate",meaningFrame:"belonging",permission:"proceed",selfAuthority:"structured",accountability:"peer-review",recovery:"repair",reflection:"brief"},deadlineSprint:{attention:"priority",activation:"prompted",actionScale:"small",rhythm:"deadline-driven",environment:"focused",challenge:"stretch",meaningFrame:"impact",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"resume",reflection:"brief"},minimalNudge:{attention:"ambient",activation:"self-start",actionScale:"standard",rhythm:"flexible",environment:"open",challenge:"moderate",meaningFrame:"progress",permission:"proceed",selfAuthority:"high-autonomy",accountability:"private",recovery:"resume",reflection:"none"}};function r(e){return{...t[e]}}export{r as getBehaviorSupportPresetDimensions,i as BEHAVIOR_SUPPORT_PRESET_IDS,t as BEHAVIOR_SUPPORT_PRESETS};
@@ -0,0 +1 @@
1
+ var o=["steadyMomentum","activationFirst","permissionFirst","deepWorkBuilder","recoveryFirst","identityBuilder","selfAuthorityBuilder","socialMomentum","deadlineSprint","minimalNudge"],i={steadyMomentum:{attention:"next-step",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"progress",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"resume",reflection:"brief"},activationFirst:{attention:"next-step",activation:"guided-start",actionScale:"small",rhythm:"flexible",environment:"structured",challenge:"low",meaningFrame:"relief",permission:"start-smaller",selfAuthority:"confidence-building",accountability:"private",recovery:"resume",reflection:"brief"},permissionFirst:{attention:"ambient",activation:"prompted",actionScale:"small",rhythm:"flexible",environment:"open",challenge:"low",meaningFrame:"agency",permission:"renegotiate",selfAuthority:"confidence-building",accountability:"private",recovery:"renegotiate",reflection:"brief"},deepWorkBuilder:{attention:"priority",activation:"ritual",actionScale:"standard",rhythm:"time-boxed",environment:"focused",challenge:"stretch",meaningFrame:"mastery",permission:"proceed",selfAuthority:"high-autonomy",accountability:"self-review",recovery:"repair",reflection:"standard"},recoveryFirst:{attention:"next-step",activation:"guided-start",actionScale:"small",rhythm:"flexible",environment:"structured",challenge:"low",meaningFrame:"relief",permission:"renegotiate",selfAuthority:"confidence-building",accountability:"private",recovery:"repair",reflection:"brief"},identityBuilder:{attention:"review",activation:"ritual",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"agency",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"repair",reflection:"standard"},selfAuthorityBuilder:{attention:"priority",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"agency",permission:"proceed",selfAuthority:"confidence-building",accountability:"self-review",recovery:"repair",reflection:"standard"},socialMomentum:{attention:"priority",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"collaborative",challenge:"moderate",meaningFrame:"belonging",permission:"proceed",selfAuthority:"structured",accountability:"peer-review",recovery:"repair",reflection:"brief"},deadlineSprint:{attention:"priority",activation:"prompted",actionScale:"small",rhythm:"deadline-driven",environment:"focused",challenge:"stretch",meaningFrame:"impact",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"resume",reflection:"brief"},minimalNudge:{attention:"ambient",activation:"self-start",actionScale:"standard",rhythm:"flexible",environment:"open",challenge:"moderate",meaningFrame:"progress",permission:"proceed",selfAuthority:"high-autonomy",accountability:"private",recovery:"resume",reflection:"none"}};function c(t){return{...i[t]}}var a={steadyMomentum:e("steadyMomentum","Steady momentum","Consistent progress with moderate support."),activationFirst:e("activationFirst","Activation-first","Reduces start friction and makes the first useful action easier."),permissionFirst:e("permissionFirst","Permission-first","Helps users start smaller, pause, or renegotiate without friction."),deepWorkBuilder:e("deepWorkBuilder","Deep work builder","Protects focus, mastery, and intentional work."),recoveryFirst:e("recoveryFirst","Recovery-first","Makes repair and resumption easier after misses or interruptions."),identityBuilder:e("identityBuilder","Identity builder","Connects action to user-defined values or commitments."),selfAuthorityBuilder:e("selfAuthorityBuilder","Self-authority builder","Builds confidence, composure, structure, and follow-through."),socialMomentum:e("socialMomentum","Social momentum","Uses shared rhythm, collaboration, or review when explicitly wanted."),deadlineSprint:e("deadlineSprint","Deadline sprint","Supports short-term urgency and focused execution."),minimalNudge:e("minimalNudge","Minimal nudge","Keeps behavior support low-noise with minimal intervention.")};function m(t){let r=a[t];return{...r,dimensions:{...r.dimensions}}}function e(t,r,n){return{id:t,label:r,intent:n,dimensions:i[t]}}export{c as getBehaviorSupportPresetDimensions,m as getBehaviorSupportPresetDefinition,o as BEHAVIOR_SUPPORT_PRESET_IDS,a as BEHAVIOR_SUPPORT_PRESET_DEFINITIONS,i as BEHAVIOR_SUPPORT_PRESETS};
@@ -1,4 +1,4 @@
1
- function G(e,t){let i=[];e.suggestedHiddenFields.forEach((n)=>{i.push({type:"hideField",field:n,reason:"Automatically hidden because usage is near zero"})});let r=new Set([...e.deniedFields??[],...t.deniedFields??[]]),a=e.frequentlyUsedFields.filter((n)=>!r.has(n));if(a.length)i.push({type:"reorderFields",fields:a});if(!i.length)return null;return{overlayId:t.overlayId,version:t.version??"1.0.0",appliesTo:{tenantId:t.tenantId,capability:t.capability,userId:t.userId,role:t.role},modifications:i,metadata:{generatedAt:new Date().toISOString(),automated:!0}}}function J(e){return e.workflowBottlenecks.map((t)=>({workflow:t.workflow,step:t.step,note:`High drop rate (${Math.round(t.dropRate*100)}%) detected`}))}class I{store;options;constructor(e,t={}){this.store=e;this.options=t}async analyze(e){let t={tenantId:e.tenantId,userId:e.userId,role:e.role};if(e.windowMs)t.since=Date.now()-e.windowMs;let i=await this.store.summarize(t);return k(i,this.options)}}function k(e,t){let i=t.fieldInactivityThreshold??3,r=t.minSamples??10,a=[],n=[];for(let[d,c]of Object.entries(e.fieldCounts)){if(c<=i)a.push(d);if(c>=i*4)n.push(d)}let o=Object.entries(e.workflowStepCounts).flatMap(([d,c])=>{let w=Object.values(c).reduce((f,p)=>f+p,0);if(!w||w<r)return[];return Object.entries(c).filter(([,f])=>f/w<0.4).map(([f,p])=>({workflow:d,step:f,dropRate:1-p/w}))}),s=Object.keys(e.deniedFieldCounts??{}),h=Object.keys(e.deniedActionCounts??{}),m=x(e);return{unusedFields:a,suggestedHiddenFields:a.slice(0,5),frequentlyUsedFields:n.filter((d)=>!s.includes(d)).slice(0,10),deniedFields:s,deniedActions:h,workflowBottlenecks:o,layoutPreference:m,dataViewPreferences:V(e)}}function V(e){let t=Object.entries(e.dataViewViewModeCounts??{}).flatMap(([i,r])=>{let a=Object.entries(r).sort(([,n],[,o])=>(o??0)-(n??0))[0]?.[0];if(!b(a))return[];return[[i,{preferredViewMode:a}]]});return t.length?Object.fromEntries(t):void 0}function b(e){return e==="list"||e==="grid"||e==="table"}function x(e){let t=Object.keys(e.fieldCounts).length;if(!t)return;if(t>=15)return"table";if(t>=8)return"grid";return"form"}var g=["list","grid","table"];function Y({spec:e,preferences:t,insights:i,record:r}){let a=P(e),n=F(e,a),o=D(e,i,a),s=l(r?.viewMode,a),h=E(e),m=A(e);return{viewMode:s??o??n??"list",density:r?.density??S(t)??h??"comfortable",dataDepth:r?.dataDepth??t?.dataDepth??m??"standard",pageSize:r?.pageSize??u(e)?.pagination?.pageSize,source:{viewMode:s?"record":o?"insights":n?"contract":"fallback",density:r?.density?"record":t?"preferences":h?"contract":"fallback",dataDepth:r?.dataDepth?"record":t?.dataDepth?"preferences":m?"contract":"fallback",pageSize:r?.pageSize?"record":u(e)?.pagination?.pageSize?"contract":void 0}}}function S(e){if(!e)return;if(e.density==="minimal"||e.density==="compact"||e.density==="dense")return"compact";return"comfortable"}function N(e){return{density:e==="compact"?"compact":"standard"}}function L(e,t){return{dataViewKey:e.meta.key,dataViewVersion:e.meta.version,viewMode:t}}function D(e,t,i){let r=t?.dataViewPreferences?.[e.meta.key]?.preferredViewMode,a=t?.layoutPreference;return l(r,i)??l(a,i)}function F(e,t){if(!v(e.view.kind))return;let i=u(e)?.viewModes?.defaultMode;return l(i,t)??l(e.view.kind,t)}function E(e){if(e.view.kind==="table"&&e.view.density)return e.view.density;return u(e)?.density}function A(e){return u(e)?.dataDepth}function P(e){if(!v(e.view.kind))return[];let t=u(e),i=t?.viewModes?.allowedModes?.filter(y);if(i?.length)return C(i);if(t?.toolbar?.viewMode===!0)return g;return t?.viewModes?g:[e.view.kind]}function u(e){if(e.view.kind==="detail")return;return e.view.collection}function l(e,t){return y(e)&&t.includes(e)?e:void 0}function C(e){return g.filter((t)=>e.includes(t))}function v(e){return e==="list"||e==="grid"||e==="table"}function y(e){return v(e)}import{registerDocBlocks as R}from"@contractspec/lib.contracts-spec/docs";var T=[{id:"docs.personalization.behavior-tracking",title:"Behavior Tracking",summary:"`@contractspec/lib.personalization` provides primitives to observe how tenants/users interact with specs and turn that telemetry into personalization insights.",kind:"reference",visibility:"public",route:"/docs/personalization/behavior-tracking",tags:["personalization","behavior-tracking"],body:`# Behavior Tracking
1
+ function Ke(e,t){let r=[];e.suggestedHiddenFields.forEach((o)=>{r.push({type:"hideField",field:o,reason:"Automatically hidden because usage is near zero"})});let i=new Set([...e.deniedFields??[],...t.deniedFields??[]]),n=e.frequentlyUsedFields.filter((o)=>!i.has(o));if(n.length)r.push({type:"reorderFields",fields:n});if(!r.length)return null;return{overlayId:t.overlayId,version:t.version??"1.0.0",appliesTo:{tenantId:t.tenantId,capability:t.capability,userId:t.userId,role:t.role},modifications:r,metadata:{generatedAt:new Date().toISOString(),automated:!0}}}function He(e){return e.workflowBottlenecks.map((t)=>({workflow:t.workflow,step:t.step,note:`High drop rate (${Math.round(t.dropRate*100)}%) detected`}))}var k=new Set(["control","dataDepth"]);function F({current:e,observations:t,preferredScope:r="surface",minimumEvidenceCount:i=3,minimumSessionCount:n=2,minimumSurfaceCountForGlobal:o=2}){let a=new Set(t.filter((u)=>u.explicit===!0).map((u)=>u.dimension));return z(t).filter((u)=>u.value!==e[u.dimension]).filter((u)=>!a.has(u.dimension)||u.explicit).map((u)=>L(u,e,{minimumEvidenceCount:i,minimumSessionCount:n,minimumSurfaceCountForGlobal:o,preferredScope:r})).filter((u)=>u!==void 0)}function z(e){let t=new Map;for(let r of e){if(!H(r.dimension,r.value))continue;let i=[r.dimension,r.value,r.signal,r.explicit?"explicit":"inferred"].join(":"),n=t.get(i);if(n)n.events.push(r);else t.set(i,{dimension:r.dimension,value:r.value,signal:r.signal,explicit:r.explicit===!0,events:[r]})}return Array.from(t.values())}function L(e,t,r){let i=N(e.events,e.signal);if(!e.explicit&&i.count<r.minimumEvidenceCount)return;if(!e.explicit&&i.sessionCount<r.minimumSessionCount)return;let n=W(e,i,r),o=!e.explicit||n!=="surface"||k.has(e.dimension);return{id:["preference-evolution",n,e.dimension,String(e.value)].join(":"),dimension:e.dimension,from:t[e.dimension],to:e.value,scope:n,requiresConfirmation:o,reversible:!0,reasons:j(e,i,n),evidence:i,patch:{[e.dimension]:e.value}}}function W(e,t,r){if(e.explicit)return r.preferredScope;if(r.preferredScope==="surface")return"surface";return t.surfaceCount>=r.minimumSurfaceCountForGlobal?r.preferredScope:"surface"}function N(e,t){let r=new Set(e.map((n)=>n.sessionId).filter(Boolean)),i=new Set(e.map((n)=>n.surfaceId).filter(Boolean));return{signal:t,count:e.reduce((n,o)=>n+(o.count??1),0),sessionCount:r.size||1,surfaceCount:i.size||1,reasons:Array.from(new Set(e.flatMap((n)=>n.reason?[n.reason]:[])))}}function j(e,t,r){let i=[`Observed ${t.count} ${e.signal.replaceAll("_"," ")} signals across ${t.sessionCount} session(s).`,`Suggested as a ${r} preference change, not a hidden global mutation.`];if(e.explicit)i.push("Explicit user choices take priority over inferred behavior.");if(k.has(e.dimension))i.push("This dimension can affect control or data exposure, so confirmation is required.");return[...i,...t.reasons]}var K={guidance:"|none|hints|tooltips|walkthrough|wizard|",density:"|minimal|compact|standard|detailed|dense|",dataDepth:"|summary|standard|detailed|exhaustive|",control:"|restricted|standard|advanced|full|",media:"|text|visual|voice|hybrid|",pace:"|deliberate|balanced|rapid|",narrative:"|top-down|bottom-up|adaptive|"};function H(e,t){return K[e].includes(`|${t}|`)}var C=new Set(["challenge","accountability","environment"]);function Ge({currentPreferences:e,currentBehaviorSupport:t,preferenceObservations:r=[],behaviorSignals:i=[],preferredScope:n="surface"}){let o=F({current:e,observations:r,preferredScope:n}),a=Q({currentBehaviorSupport:t,behaviorSignals:i});return{preferenceSuggestions:o,behaviorSupportSuggestions:a.suggestions,suppressedSuggestions:a.suppressed}}function Q({currentBehaviorSupport:e,behaviorSignals:t}){let r=[],i=[];for(let n of t??[]){let o=n.evidence.suggestedAdaptation;if(!o||o.target!=="behaviorSupport")continue;let a=o.dimension;if(!$(a)){i.push({id:o.id,reason:"Suggested behavior support dimension is not recognized.",signalIds:[n.id]});continue}if(!G(a,o.value)){i.push({id:o.id,reason:"Suggested behavior support value does not match the dimension.",signalIds:[n.id]});continue}let s=o.value;if(s===e[a])continue;let u=(o.requiresConfirmation??o.impact!=="low")||C.has(a);r.push({id:o.id,dimension:a,from:e[a],to:s,scope:o.scope.level,requiresConfirmation:u,reversible:!0,automatic:!1,reasons:Y(n,a),evidence:{signalIds:[n.id],confidence:n.evidence.confidence,observations:n.evidence.observations},patch:{[a]:s}})}return{suggestions:r,suppressed:i}}function Y(e,t){let r=["Behavior support changes are suggestions, not silent mutations.","The signal describes scoped observed behavior, not a user identity.","The suggestion is reversible and should be explainable in the UI."];if(C.has(t))r.push("Changes to challenge, accountability, or social exposure require confirmation.");if(e.evidence.userFeedback)r.push(`User feedback state: ${e.evidence.userFeedback}.`);return r}var V={attention:["ambient","next-step","priority","review"],activation:["self-start","prompted","guided-start","ritual"],actionScale:["tiny","small","standard","large"],rhythm:["flexible","steady","time-boxed","deadline-driven"],environment:["open","structured","focused","collaborative"],challenge:["low","moderate","stretch","high"],meaningFrame:["progress","mastery","impact","relief","belonging","agency"],permission:["proceed","start-smaller","pause","renegotiate"],selfAuthority:["light","structured","confidence-building","high-autonomy"],accountability:["private","self-review","peer-review","external-review"],recovery:["resume","repair","reset","renegotiate"],reflection:["none","brief","standard","deep"]};function $(e){return Object.prototype.hasOwnProperty.call(V,e)}function G(e,t){return t?V[e].includes(t):!1}function Je({preferences:e,behaviorSupport:t,behaviorSignals:r=[],context:i={},permissions:n=[],constraints:o=[],policies:a=[],overrides:s=[]}){let u=r.flatMap(Z),c=[],f=[];for(let d of u){let v=q(d,a,s),D=X(v,n,o,a,s);if(D)f.push({...v,suppressedReason:D});else c.push(v)}let p=r.map((d)=>d.id),h=ee({appliedAdaptations:c,suppressedAdaptations:f,overrides:s});return{interaction:{...e},behaviorSupport:{...t},context:{...i},appliedAdaptations:c,suppressedAdaptations:f,reasons:h,evidenceIds:p,constraints:o.map((d)=>({...d})),permissions:n.map((d)=>({...d})),policies:a.map((d)=>({...d})),overrides:s.map((d)=>({...d})),persistence:"runtime-only",canUndo:!0,userFacingSummary:"This runtime result explains what changed, why it changed, and how it can be undone."}}function Z(e){let t=e.evidence.suggestedAdaptation;if(!t)return[];return[{id:t.id,kind:J(t.target,t.dimension),scope:t.scope,description:t.description,requiresConfirmation:(t.requiresConfirmation??t.impact!=="low")||e.evidence.safetyLevel!=="safe",reversible:!0,evidenceIds:[e.id],safetyLevel:e.evidence.safetyLevel}]}function J(e,t){if(e==="preference")return"ui";if(t==="recovery")return"recovery";if(t==="reflection")return"reflection";if(t==="environment")return"focus";if(e==="behaviorSupport")return"next-action";return"guidance"}function X(e,t,r,i,n){let o=n.find((c)=>c.target==="runtimeAction"&&S(e,c.key)&&c.value===!1);if(o)return o.reason??"Explicit override disabled this action.";let a=t.find((c)=>!c.allowed&&e.id.includes(c.key));if(a)return a.reason??"Permission denied.";let s=r.find((c)=>c.blocksAdaptation&&(!c.target||e.id.includes(c.target)));if(s)return s.reason;let u=i.find((c)=>c.effect==="block"&&(!c.target||e.id.includes(c.target)));if(u)return u.reason;return}function q(e,t,r){let i=t.some((o)=>(o.effect==="require-confirmation"||o.effect==="constrain")&&(!o.target||S(e,o.target))),n=r.some((o)=>o.target==="runtimeAction"&&S(e,o.key)&&(o.value==="require-confirmation"||o.value==="confirm"));if(!i&&!n)return e;return{...e,requiresConfirmation:!0}}function S(e,t){return e.id.includes(t)||e.kind===t}function ee(e){let t=["Resolved adaptive experience is runtime-only and should not be stored as a hidden user profile.","Permissions, constraints, policy, and explicit overrides bound all adaptation."];if(e.appliedAdaptations.length>0)t.push("Scoped behavior evidence produced explainable runtime actions.");if(e.suppressedAdaptations.length>0)t.push("Some suggested adaptations were suppressed by safety boundaries.");if(e.overrides.length>0)t.push("Explicit overrides were preserved as higher priority context.");return t}var w=["steadyMomentum","activationFirst","permissionFirst","deepWorkBuilder","recoveryFirst","identityBuilder","selfAuthorityBuilder","socialMomentum","deadlineSprint","minimalNudge"],b={steadyMomentum:{attention:"next-step",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"progress",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"resume",reflection:"brief"},activationFirst:{attention:"next-step",activation:"guided-start",actionScale:"small",rhythm:"flexible",environment:"structured",challenge:"low",meaningFrame:"relief",permission:"start-smaller",selfAuthority:"confidence-building",accountability:"private",recovery:"resume",reflection:"brief"},permissionFirst:{attention:"ambient",activation:"prompted",actionScale:"small",rhythm:"flexible",environment:"open",challenge:"low",meaningFrame:"agency",permission:"renegotiate",selfAuthority:"confidence-building",accountability:"private",recovery:"renegotiate",reflection:"brief"},deepWorkBuilder:{attention:"priority",activation:"ritual",actionScale:"standard",rhythm:"time-boxed",environment:"focused",challenge:"stretch",meaningFrame:"mastery",permission:"proceed",selfAuthority:"high-autonomy",accountability:"self-review",recovery:"repair",reflection:"standard"},recoveryFirst:{attention:"next-step",activation:"guided-start",actionScale:"small",rhythm:"flexible",environment:"structured",challenge:"low",meaningFrame:"relief",permission:"renegotiate",selfAuthority:"confidence-building",accountability:"private",recovery:"repair",reflection:"brief"},identityBuilder:{attention:"review",activation:"ritual",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"agency",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"repair",reflection:"standard"},selfAuthorityBuilder:{attention:"priority",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"agency",permission:"proceed",selfAuthority:"confidence-building",accountability:"self-review",recovery:"repair",reflection:"standard"},socialMomentum:{attention:"priority",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"collaborative",challenge:"moderate",meaningFrame:"belonging",permission:"proceed",selfAuthority:"structured",accountability:"peer-review",recovery:"repair",reflection:"brief"},deadlineSprint:{attention:"priority",activation:"prompted",actionScale:"small",rhythm:"deadline-driven",environment:"focused",challenge:"stretch",meaningFrame:"impact",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"resume",reflection:"brief"},minimalNudge:{attention:"ambient",activation:"self-start",actionScale:"standard",rhythm:"flexible",environment:"open",challenge:"moderate",meaningFrame:"progress",permission:"proceed",selfAuthority:"high-autonomy",accountability:"private",recovery:"resume",reflection:"none"}};function qe(e){return{...b[e]}}var A={steadyMomentum:l("steadyMomentum","Steady momentum","Consistent progress with moderate support."),activationFirst:l("activationFirst","Activation-first","Reduces start friction and makes the first useful action easier."),permissionFirst:l("permissionFirst","Permission-first","Helps users start smaller, pause, or renegotiate without friction."),deepWorkBuilder:l("deepWorkBuilder","Deep work builder","Protects focus, mastery, and intentional work."),recoveryFirst:l("recoveryFirst","Recovery-first","Makes repair and resumption easier after misses or interruptions."),identityBuilder:l("identityBuilder","Identity builder","Connects action to user-defined values or commitments."),selfAuthorityBuilder:l("selfAuthorityBuilder","Self-authority builder","Builds confidence, composure, structure, and follow-through."),socialMomentum:l("socialMomentum","Social momentum","Uses shared rhythm, collaboration, or review when explicitly wanted."),deadlineSprint:l("deadlineSprint","Deadline sprint","Supports short-term urgency and focused execution."),minimalNudge:l("minimalNudge","Minimal nudge","Keeps behavior support low-noise with minimal intervention.")};function rt(e){let t=A[e];return{...t,dimensions:{...t.dimensions}}}function l(e,t,r){return{id:e,label:t,intent:r,dimensions:b[e]}}function R(e){let t=te(),r=[],i=0,n=(o,a,s)=>{if(t[o]+=a,s)r.push(s)};if(e.startSupport)i+=1,re(e.startSupport,n);if(e.actionSize)i+=1,ie(e.actionSize,n);if(e.recoveryPreference)i+=1,ne(e.recoveryPreference,n);if(e.accountabilityPreference)i+=1,oe(e.accountabilityPreference,n);if(e.rhythmPreference)i+=1,ae(e.rhythmPreference,n);if(e.meaningPreference)i+=1,se(e.meaningPreference,n);if(e.reflectionPreference)i+=1,ce(e.reflectionPreference,n);if(e.role)r.push("Role text was recorded for context but did not score support presets.");return{scores:t,reasons:r,signalCount:i}}function P(e,t,r){if(r===0)return 0.35;let i=0.45+Math.min(e/(r*4),0.4)+Math.min((e-t)*0.05,0.15);return Math.round(Math.min(i,0.95)*100)/100}function te(){return w.reduce((e,t)=>({...e,[t]:t==="steadyMomentum"?1:0}),{})}function re(e,t){if(e==="self-start")t("minimalNudge",4,"You prefer low-noise starts.");if(e==="prompt")t("steadyMomentum",3,"You prefer a clear prompt to begin.");if(e==="guided")t("activationFirst",4,"You prefer guided start support.");if(e==="ritual")t("deepWorkBuilder",4,"You prefer a repeatable start ritual.")}function ie(e,t){if(e==="tiny")t("activationFirst",3,"Tiny first steps feel easier to trust.");if(e==="small")t("permissionFirst",3,"Small first steps feel easier to trust.");if(e==="standard")t("steadyMomentum",2,"Standard next actions fit you.");if(e==="large")t("deepWorkBuilder",2,"You prefer substantial action blocks.")}function ne(e,t){if(e==="repair")t("recoveryFirst",5,"Repair should be easy after a miss.");if(e==="renegotiate")t("permissionFirst",4,"Renegotiation should stay available.");if(e==="resume")t("steadyMomentum",2,"You prefer to resume without a reset.");if(e==="reset")t("activationFirst",2,"A clean restart can be useful.")}function oe(e,t){if(e==="private")t("minimalNudge",3,"You prefer private progress.");if(e==="self-review")t("selfAuthorityBuilder",3,"You prefer self-review.");if(e==="shared-review")t("socialMomentum",4,"You prefer shared review.")}function ae(e,t){if(e==="flexible")t("permissionFirst",2);if(e==="steady")t("steadyMomentum",3);if(e==="focus-block")t("deepWorkBuilder",4);if(e==="deadline")t("deadlineSprint",4)}function se(e,t){if(e==="mastery")t("deepWorkBuilder",3);if(e==="impact")t("deadlineSprint",2);if(e==="relief")t("recoveryFirst",3);if(e==="agency")t("identityBuilder",3);if(e==="progress")t("steadyMomentum",2)}function ce(e,t){if(e==="none")t("minimalNudge",3);if(e==="brief")t("steadyMomentum",2);if(e==="standard")t("selfAuthorityBuilder",2);if(e==="deep")t("deepWorkBuilder",3)}var E=["balanced","guideMe","summaryFirst","deepAnalyst","builder","opsWarRoom","auditReview","minimalFocus"],_={balanced:{guidance:"hints",density:"standard",dataDepth:"standard",control:"standard",media:"hybrid",pace:"balanced",narrative:"adaptive"},guideMe:{guidance:"walkthrough",density:"detailed",dataDepth:"standard",control:"restricted",media:"hybrid",pace:"deliberate",narrative:"top-down"},summaryFirst:{guidance:"hints",density:"compact",dataDepth:"summary",control:"standard",media:"visual",pace:"rapid",narrative:"top-down"},deepAnalyst:{guidance:"tooltips",density:"compact",dataDepth:"exhaustive",control:"advanced",media:"hybrid",pace:"balanced",narrative:"bottom-up"},builder:{guidance:"hints",density:"compact",dataDepth:"detailed",control:"full",media:"text",pace:"rapid",narrative:"bottom-up"},opsWarRoom:{guidance:"hints",density:"dense",dataDepth:"detailed",control:"advanced",media:"visual",pace:"rapid",narrative:"adaptive"},auditReview:{guidance:"tooltips",density:"detailed",dataDepth:"exhaustive",control:"advanced",media:"text",pace:"deliberate",narrative:"bottom-up"},minimalFocus:{guidance:"none",density:"minimal",dataDepth:"summary",control:"restricted",media:"text",pace:"balanced",narrative:"top-down"}},x={balanced:m("balanced","Balanced","Safe default for general use."),guideMe:m("guideMe","Guide me","Slower, more guided onboarding for new or uncertain users."),summaryFirst:m("summaryFirst","Summary-first","Compact, fast, dashboard-style usage that starts with summaries."),deepAnalyst:m("deepAnalyst","Deep analyst","Data-rich, evidence-first investigation mode."),builder:m("builder","Builder","Fast, configurable mode for admins, developers, and creators."),opsWarRoom:m("opsWarRoom","Ops war room","Dense, visual, rapid mode for monitoring and incidents."),auditReview:m("auditReview","Audit review","Deliberate, traceable, detail-heavy review mode."),minimalFocus:m("minimalFocus","Minimal focus","Low-noise, focused, simple experience.")};function ut(e){return{..._[e]}}function dt(e){let t=x[e];return{...t,dimensions:{...t.dimensions}}}function ft(e){return{...x,...e}}function m(e,t,r){return{id:e,label:t,intent:r,dimensions:_[e]}}function M(e){let t=ue(),r=[],i=0,n=(c,f,p)=>{if(t[c]+=f,p)r.push(p)};if(e.primaryIntent)i+=1,de(e.primaryIntent,n);if(e.wantsStepByStepHelp!==void 0)if(i+=1,e.wantsStepByStepHelp)n("guideMe",4,"You asked for step-by-step help.");else n("minimalFocus",1.5,"You did not ask for guided walkthroughs."),n("builder",1);if(e.detailPreference)i+=1,fe(e.detailPreference,n);if(e.pacePreference)i+=1,pe(e.pacePreference,n);if(e.controlPreference)i+=1,le(e.controlPreference,n);if(e.mediaPreference)i+=1,me(e.mediaPreference,n);if(e.role)r.push("Role text was recorded for context but did not score presets.");let o=E.map((c)=>({preset:c,score:t[c]})).sort((c,f)=>f.score-c.score),a=o[0]??{preset:"balanced",score:1},s=o[1]?.score??0,u=T(a.score,s,i);return{selectedPreset:a.preset,confidence:u,reasons:r.length?ve(r):["Balanced is the default when onboarding signals are sparse."],alternatives:o.slice(1,4).map(({preset:c,score:f})=>({preset:c,confidence:T(f,0,i),reason:x[c].intent}))}}function ue(){return E.reduce((e,t)=>({...e,[t]:t==="balanced"?1:0}),{})}function de(e,t){if(e==="general")t("balanced",3,"You chose a general-purpose setup.");if(e==="learning")t("guideMe",4,"You are mostly learning.");if(e==="reviewing")t("auditReview",4,"You are mostly reviewing.");if(e==="building")t("builder",4,"You are mostly building.");if(e==="monitoring")t("opsWarRoom",4,"You are mostly monitoring.");if(e==="analyzing")t("deepAnalyst",4,"You are mostly analyzing.")}function fe(e,t){if(e==="summaries")t("summaryFirst",4,"You prefer to scan summaries first."),t("minimalFocus",2);if(e==="details")t("deepAnalyst",2,"You prefer to inspect details."),t("auditReview",2);if(e==="evidence")t("deepAnalyst",4,"You prefer evidence before summaries."),t("auditReview",3)}function pe(e,t){if(e==="fast")t("opsWarRoom",3,"You prefer a fast interface."),t("summaryFirst",2),t("builder",2);if(e==="balanced")t("balanced",2,"You prefer a balanced pace.");if(e==="deliberate")t("auditReview",3,"You prefer a deliberate pace."),t("guideMe",2)}function le(e,t){if(e==="simple")t("minimalFocus",3,"You prefer simple controls."),t("guideMe",2);if(e==="standard")t("balanced",2,"You prefer standard controls.");if(e==="advanced")t("builder",3,"You prefer advanced control."),t("deepAnalyst",2),t("opsWarRoom",2),t("auditReview",2)}function me(e,t){if(e==="visual")t("opsWarRoom",2),t("summaryFirst",1);if(e==="text")t("minimalFocus",1),t("builder",1),t("auditReview",1);if(e==="hybrid")t("balanced",1),t("guideMe",1),t("deepAnalyst",1)}function T(e,t,r){if(r===0)return 0.35;let i=0.45+Math.min(e/(r*4),0.4)+Math.min((e-t)*0.05,0.15);return Math.round(Math.min(i,0.95)*100)/100}function ve(e){return Array.from(new Set(e))}function yt(e){let t=M(e.interaction??{}),r=he(e.behaviorSupport??{}),i=Math.round((t.confidence+r.confidence)/2*100)/100;return{selectedInteractionPreset:t.selectedPreset,selectedBehaviorSupportPreset:r.selectedPreset,confidence:i,reasons:[...t.reasons,...r.reasons],alternativeInteractionPresets:t.alternatives,alternativeBehaviorSupportPresets:r.alternatives,editableDimensions:{interaction:["guidance","density","dataDepth","control","media","pace","narrative"],behaviorSupport:r.editableDimensions}}}function he(e){let{scores:t,reasons:r,signalCount:i}=R(e),n=w.map((s)=>({preset:s,score:t[s]})).sort((s,u)=>u.score-s.score),o=n[0]??{preset:"steadyMomentum",score:1},a=n[1]?.score??0;return{selectedPreset:o.preset,confidence:P(o.score,a,i),reasons:r.length?Array.from(new Set(r)):["Steady momentum is the default when support signals are sparse."],alternatives:n.slice(1,4).map(({preset:s,score:u})=>({preset:s,confidence:P(u,0,i),reason:A[s].intent})),editableDimensions:["attention","activation","actionScale","rhythm","environment","challenge","meaningFrame","permission","selfAuthority","accountability","recovery","reflection"]}}class ge{store;options;constructor(e,t={}){this.store=e;this.options=t}async analyze(e){let t={tenantId:e.tenantId,userId:e.userId,role:e.role};if(e.windowMs)t.since=Date.now()-e.windowMs;let r=await this.store.summarize(t);return ye(r,this.options)}}function ye(e,t){let r=t.fieldInactivityThreshold??3,i=t.minSamples??10,n=[],o=[];for(let[f,p]of Object.entries(e.fieldCounts)){if(p<=r)n.push(f);if(p>=r*4)o.push(f)}let a=Object.entries(e.workflowStepCounts).flatMap(([f,p])=>{let h=Object.values(p).reduce((d,v)=>d+v,0);if(!h||h<i)return[];return Object.entries(p).filter(([,d])=>d/h<0.4).map(([d,v])=>({workflow:f,step:d,dropRate:1-v/h}))}),s=Object.keys(e.deniedFieldCounts??{}),u=Object.keys(e.deniedActionCounts??{}),c=Se(e);return{unusedFields:n,suggestedHiddenFields:n.slice(0,5),frequentlyUsedFields:o.filter((f)=>!s.includes(f)).slice(0,10),deniedFields:s,deniedActions:u,workflowBottlenecks:a,layoutPreference:c,dataViewPreferences:we(e)}}function we(e){let t=Object.entries(e.dataViewViewModeCounts??{}).flatMap(([r,i])=>{let n=Object.entries(i).sort(([,o],[,a])=>(a??0)-(o??0))[0]?.[0];if(!xe(n))return[];return[[r,{preferredViewMode:n}]]});return t.length?Object.fromEntries(t):void 0}function xe(e){return e==="list"||e==="grid"||e==="table"}function Se(e){let t=Object.keys(e.fieldCounts).length;if(!t)return;if(t>=15)return"table";if(t>=8)return"grid";return"form"}var be=["lazy","avoidant","anxious","weak discipline","low motivation","needy","approval-seeking","procrastinator","high-value user","low-value user","compliant user","manipulable user","unreliable","low-performing"];function Ae(e){let t=e.join(" ").toLowerCase();return be.filter((r)=>t.includes(r))}function St(e){let t=Ae([e.summary,...e.evidence.observations,e.evidence.baseline??"",e.evidence.repeatedPattern??"",e.evidence.deviationFromBaseline??""]);if(t.length>0)throw Error(`Behavior signals must describe observations, not unsafe labels: ${t.join(", ")}`);return{...e,prohibitedConclusions:["Do not infer personality, morality, discipline, clinical state, or user value from this signal.","Use this signal only as scoped evidence for explainable adaptation suggestions."]}}var B=["list","grid","table"];function At({spec:e,preferences:t,insights:r,record:i}){let n=ke(e),o=Be(e,n),a=Ee(e,r,n),s=y(i?.viewMode,n),u=Ie(e),c=De(e);return{viewMode:s??a??o??"list",density:i?.density??Pe(t)??u??"comfortable",dataDepth:i?.dataDepth??t?.dataDepth??c??"standard",pageSize:i?.pageSize??g(e)?.pagination?.pageSize,source:{viewMode:s?"record":a?"insights":o?"contract":"fallback",density:i?.density?"record":t?"preferences":u?"contract":"fallback",dataDepth:i?.dataDepth?"record":t?.dataDepth?"preferences":c?"contract":"fallback",pageSize:i?.pageSize?"record":g(e)?.pagination?.pageSize?"contract":void 0}}}function Pe(e){if(!e)return;if(e.density==="minimal"||e.density==="compact"||e.density==="dense")return"compact";return"comfortable"}function Pt(e){return{density:e==="compact"?"compact":"standard"}}function Et(e,t){return{dataViewKey:e.meta.key,dataViewVersion:e.meta.version,viewMode:t}}function Ee(e,t,r){let i=t?.dataViewPreferences?.[e.meta.key]?.preferredViewMode,n=t?.layoutPreference;return y(i,r)??y(n,r)}function Be(e,t){if(!I(e.view.kind))return;let r=g(e)?.viewModes?.defaultMode;return y(r,t)??y(e.view.kind,t)}function Ie(e){if(e.view.kind==="table"&&e.view.density)return e.view.density;return g(e)?.density}function De(e){return g(e)?.dataDepth}function ke(e){if(!I(e.view.kind))return[];let t=g(e),r=t?.viewModes?.allowedModes?.filter(O);if(r?.length)return Fe(r);if(t?.toolbar?.viewMode===!0)return B;return t?.viewModes?B:[e.view.kind]}function g(e){if(e.view.kind==="detail")return;return e.view.collection}function y(e,t){return O(e)&&t.includes(e)?e:void 0}function Fe(e){return B.filter((t)=>e.includes(t))}function I(e){return e==="list"||e==="grid"||e==="table"}function O(e){return I(e)}import{registerDocBlocks as Ce}from"@contractspec/lib.contracts-spec/docs";var Ve=[{id:"docs.personalization.behavior-tracking",title:"Behavior Tracking",summary:"`@contractspec/lib.personalization` provides primitives to observe how tenants/users interact with specs and turn that telemetry into personalization insights.",kind:"reference",visibility:"public",route:"/docs/personalization/behavior-tracking",tags:["personalization","behavior-tracking"],body:`# Behavior Tracking
2
2
 
3
3
  \`@contractspec/lib.personalization\` provides primitives to observe how tenants/users interact with specs and turn that telemetry into personalization insights.
4
4
 
@@ -77,7 +77,7 @@ When the adapter returns an overlay spec, pass it to the overlay engine to regis
77
77
 
78
78
 
79
79
 
80
- `}];R(T);import{registerDocBlocks as z}from"@contractspec/lib.contracts-spec/docs";var _=[{id:"docs.personalization.overlay-engine",title:"Overlay Engine",summary:"`@contractspec/lib.overlay-engine` is the canonical runtime for OverlaySpecs. It validates specs, tracks scope precedence, and exposes hooks for React renderers.",kind:"reference",visibility:"public",route:"/docs/personalization/overlay-engine",tags:["personalization","overlay-engine"],body:`# Overlay Engine
80
+ `}];Ce(Ve);import{registerDocBlocks as Re}from"@contractspec/lib.contracts-spec/docs";var _e=[{id:"docs.personalization.overlay-engine",title:"Overlay Engine",summary:"`@contractspec/lib.overlay-engine` is the canonical runtime for OverlaySpecs. It validates specs, tracks scope precedence, and exposes hooks for React renderers.",kind:"reference",visibility:"public",route:"/docs/personalization/overlay-engine",tags:["personalization","overlay-engine"],body:`# Overlay Engine
81
81
 
82
82
  \`@contractspec/lib.overlay-engine\` is the canonical runtime for OverlaySpecs. It validates specs, tracks scope precedence, and exposes hooks for React renderers.
83
83
 
@@ -157,7 +157,7 @@ const result = engine.apply({
157
157
 
158
158
 
159
159
 
160
- `}];z(_);import{registerDocBlocks as O}from"@contractspec/lib.contracts-spec/docs";var U=[{id:"docs.personalization.workflow-composition",title:"Workflow Composition",summary:"`@contractspec/lib.workflow-composer` composes base WorkflowSpecs with tenant/role/device-specific extensions, strict validation, deterministic merge ordering, metadata/annotation overlays, and orphan-graph protection for hidden-step rewrites.",kind:"reference",visibility:"public",route:"/docs/personalization/workflow-composition",tags:["personalization","workflow-composition"],body:`# Workflow Composition
160
+ `}];Re(_e);import{registerDocBlocks as Te}from"@contractspec/lib.contracts-spec/docs";var Me=[{id:"docs.personalization.workflow-composition",title:"Workflow Composition",summary:"`@contractspec/lib.workflow-composer` composes base WorkflowSpecs with tenant/role/device-specific extensions, strict validation, deterministic merge ordering, metadata/annotation overlays, and orphan-graph protection for hidden-step rewrites.",kind:"reference",visibility:"public",route:"/docs/personalization/workflow-composition",tags:["personalization","workflow-composition"],body:`# Workflow Composition
161
161
 
162
162
  \`@contractspec/lib.workflow-composer\` composes base WorkflowSpecs with tenant/role/device-specific extensions.
163
163
 
@@ -209,4 +209,4 @@ workflowRunner.execute(runtimeSpec, ctx);
209
209
  - \`metadata\` and \`annotations\` overlays are merged into the composed runtime workflow for downstream observability and rollout tracing.
210
210
 
211
211
  This keeps tenant overlays additive, auditable, and replay-safe.
212
- `}];O(U);class j{events=[];async record(e){this.events.push(e)}async bulkRecord(e){this.events.push(...e)}async query(e){return K(this.events,e)}async summarize(e){let t=await this.query(e),i={fieldCounts:{},featureCounts:{},workflowStepCounts:{},dataViewInteractionCounts:{},dataViewViewModeCounts:{},totalEvents:t.length,deniedFieldCounts:{},deniedActionCounts:{}};return t.forEach((r)=>{switch(Q(i,r),r.type){case"field_access":i.fieldCounts[r.field]=(i.fieldCounts[r.field]??0)+1;break;case"feature_usage":i.featureCounts[r.feature]=(i.featureCounts[r.feature]??0)+1;break;case"workflow_step":{let a=i.workflowStepCounts[r.workflow]??={};a[r.step]=(a[r.step]??0)+1;break}case"data_view_interaction":{let a=i.dataViewInteractionCounts??={},n=a[r.dataViewKey]??={};if(n[r.action]=(n[r.action]??0)+1,r.viewMode){let o=i.dataViewViewModeCounts??={},s=o[r.dataViewKey]??={};s[r.viewMode]=(s[r.viewMode]??0)+1}break}default:break}}),i}async clear(){this.events=[]}}function K(e,t){return e.filter((i)=>{if(t.tenantId&&i.tenantId!==t.tenantId)return!1;if(t.userId&&i.userId!==t.userId)return!1;if(t.role&&i.role!==t.role&&!i.roles?.includes(t.role))return!1;if(t.roles?.length&&!t.roles.some((r)=>i.roles?.includes(r)||i.role===r))return!1;if(t.permission&&!i.permissions?.includes(t.permission))return!1;if(t.permissions?.length&&!t.permissions.every((r)=>i.permissions?.includes(r)))return!1;if(t.since&&i.timestamp<t.since)return!1;if(t.until&&i.timestamp>t.until)return!1;if(t.operation&&i.type==="field_access"&&i.operation!==t.operation)return!1;if(t.feature&&i.type==="feature_usage"&&i.feature!==t.feature)return!1;if(t.workflow&&i.type==="workflow_step"&&i.workflow!==t.workflow)return!1;if(t.dataViewKey&&i.type==="data_view_interaction"&&i.dataViewKey!==t.dataViewKey)return!1;if(t.dataViewAction&&i.type==="data_view_interaction"&&i.action!==t.dataViewAction)return!1;return!0})}function Q(e,t){Object.values(t.policyDecisions??{}).forEach((i)=>{if(i.effect!=="deny")return;i.fields?.forEach((r)=>{let a=e.deniedFieldCounts??={};a[r]=(a[r]??0)+1}),i.actions?.forEach((r)=>{let a=e.deniedActionCounts??={};a[r]=(a[r]??0)+1})})}import{metrics as H,trace as W}from"@opentelemetry/api";var $=25;class B{store;context;tracer=W.getTracer("lssm.personalization","1.0.0");counter=H.getMeter("lssm.personalization","1.0.0").createCounter("lssm.personalization.events",{description:"Behavior events tracked for personalization"});buffer=[];bufferSize;flushTimer;constructor(e){if(this.store=e.store,this.context=e.context,this.bufferSize=e.bufferSize??$,e.autoFlushIntervalMs)this.flushTimer=setInterval(()=>{this.flush()},e.autoFlushIntervalMs)}trackFieldAccess(e){let t={type:"field_access",operation:e.operation,field:e.field,timestamp:Date.now(),...this.context,metadata:{...this.context.metadata,...e.metadata}};this.enqueue(t)}trackFeatureUsage(e){let t={type:"feature_usage",feature:e.feature,action:e.action,timestamp:Date.now(),...this.context,metadata:{...this.context.metadata,...e.metadata}};this.enqueue(t)}trackWorkflowStep(e){let t={type:"workflow_step",workflow:e.workflow,step:e.step,status:e.status,timestamp:Date.now(),...this.context,metadata:{...this.context.metadata,...e.metadata}};this.enqueue(t)}trackDataViewInteraction(e){let t={type:"data_view_interaction",dataViewKey:e.dataViewKey,dataViewVersion:e.dataViewVersion,action:e.action,viewMode:e.viewMode,density:e.density,dataDepth:e.dataDepth,filterKey:e.filterKey,sortField:e.sortField,page:e.page,pageSize:e.pageSize,timestamp:Date.now(),...this.context,metadata:{...this.context.metadata,...e.metadata}};this.enqueue(t)}async flush(){if(!this.buffer.length)return;let e=this.buffer;this.buffer=[],await this.store.bulkRecord(e)}async dispose(){if(this.flushTimer)clearInterval(this.flushTimer);await this.flush()}enqueue(e){if(this.buffer.push(e),this.counter.add(1,{tenantId:this.context.tenantId,type:e.type}),this.tracer.startActiveSpan(`personalization.${e.type}`,(t)=>{if(t.setAttribute("tenant.id",this.context.tenantId),this.context.userId)t.setAttribute("user.id",this.context.userId);t.setAttribute("personalization.event_type",e.type),t.end()}),this.buffer.length>=this.bufferSize)this.flush()}}var fe=(e)=>new B(e);import{defineFeature as Z}from"@contractspec/lib.contracts-spec/features";var me=Z({meta:{key:"libs.personalization",version:"1.0.0",title:"Personalization",description:"Behavior tracking, analysis, and adaptation helpers for ContractSpec personalization.",domain:"personalization",owners:["@contractspec-core"],tags:["package","libs","personalization"],stability:"experimental"}});export{Y as resolveDataViewPreferences,S as preferenceDimensionsToDataViewDensity,J as insightsToWorkflowAdaptations,G as insightsToOverlaySuggestion,L as dataViewModeToPreferencePatch,N as dataViewDensityToPreferencePatch,fe as createBehaviorTracker,me as PersonalizationFeature,j as InMemoryBehaviorStore,B as BehaviorTracker,I as BehaviorAnalyzer};
212
+ `}];Te(Me);class Oe{events=[];async record(e){this.events.push(e)}async bulkRecord(e){this.events.push(...e)}async query(e){return Ue(this.events,e)}async summarize(e){let t=await this.query(e),r={fieldCounts:{},featureCounts:{},workflowStepCounts:{},dataViewInteractionCounts:{},dataViewViewModeCounts:{},totalEvents:t.length,deniedFieldCounts:{},deniedActionCounts:{}};return t.forEach((i)=>{switch(ze(r,i),i.type){case"field_access":r.fieldCounts[i.field]=(r.fieldCounts[i.field]??0)+1;break;case"feature_usage":r.featureCounts[i.feature]=(r.featureCounts[i.feature]??0)+1;break;case"workflow_step":{let n=r.workflowStepCounts[i.workflow]??={};n[i.step]=(n[i.step]??0)+1;break}case"data_view_interaction":{let n=r.dataViewInteractionCounts??={},o=n[i.dataViewKey]??={};if(o[i.action]=(o[i.action]??0)+1,i.viewMode){let a=r.dataViewViewModeCounts??={},s=a[i.dataViewKey]??={};s[i.viewMode]=(s[i.viewMode]??0)+1}break}default:break}}),r}async clear(){this.events=[]}}function Ue(e,t){return e.filter((r)=>{if(t.tenantId&&r.tenantId!==t.tenantId)return!1;if(t.userId&&r.userId!==t.userId)return!1;if(t.role&&r.role!==t.role&&!r.roles?.includes(t.role))return!1;if(t.roles?.length&&!t.roles.some((i)=>r.roles?.includes(i)||r.role===i))return!1;if(t.permission&&!r.permissions?.includes(t.permission))return!1;if(t.permissions?.length&&!t.permissions.every((i)=>r.permissions?.includes(i)))return!1;if(t.since&&r.timestamp<t.since)return!1;if(t.until&&r.timestamp>t.until)return!1;if(t.operation&&r.type==="field_access"&&r.operation!==t.operation)return!1;if(t.feature&&r.type==="feature_usage"&&r.feature!==t.feature)return!1;if(t.workflow&&r.type==="workflow_step"&&r.workflow!==t.workflow)return!1;if(t.dataViewKey&&r.type==="data_view_interaction"&&r.dataViewKey!==t.dataViewKey)return!1;if(t.dataViewAction&&r.type==="data_view_interaction"&&r.action!==t.dataViewAction)return!1;return!0})}function ze(e,t){Object.values(t.policyDecisions??{}).forEach((r)=>{if(r.effect!=="deny")return;r.fields?.forEach((i)=>{let n=e.deniedFieldCounts??={};n[i]=(n[i]??0)+1}),r.actions?.forEach((i)=>{let n=e.deniedActionCounts??={};n[i]=(n[i]??0)+1})})}import{metrics as Le,trace as We}from"@opentelemetry/api";var Ne=25;class U{store;context;tracer=We.getTracer("lssm.personalization","1.0.0");counter=Le.getMeter("lssm.personalization","1.0.0").createCounter("lssm.personalization.events",{description:"Behavior events tracked for personalization"});buffer=[];bufferSize;flushTimer;constructor(e){if(this.store=e.store,this.context=e.context,this.bufferSize=e.bufferSize??Ne,e.autoFlushIntervalMs)this.flushTimer=setInterval(()=>{this.flush()},e.autoFlushIntervalMs)}trackFieldAccess(e){let t={type:"field_access",operation:e.operation,field:e.field,timestamp:Date.now(),...this.context,metadata:{...this.context.metadata,...e.metadata}};this.enqueue(t)}trackFeatureUsage(e){let t={type:"feature_usage",feature:e.feature,action:e.action,timestamp:Date.now(),...this.context,metadata:{...this.context.metadata,...e.metadata}};this.enqueue(t)}trackWorkflowStep(e){let t={type:"workflow_step",workflow:e.workflow,step:e.step,status:e.status,timestamp:Date.now(),...this.context,metadata:{...this.context.metadata,...e.metadata}};this.enqueue(t)}trackDataViewInteraction(e){let t={type:"data_view_interaction",dataViewKey:e.dataViewKey,dataViewVersion:e.dataViewVersion,action:e.action,viewMode:e.viewMode,density:e.density,dataDepth:e.dataDepth,filterKey:e.filterKey,sortField:e.sortField,page:e.page,pageSize:e.pageSize,timestamp:Date.now(),...this.context,metadata:{...this.context.metadata,...e.metadata}};this.enqueue(t)}async flush(){if(!this.buffer.length)return;let e=this.buffer;this.buffer=[],await this.store.bulkRecord(e)}async dispose(){if(this.flushTimer)clearInterval(this.flushTimer);await this.flush()}enqueue(e){if(this.buffer.push(e),this.counter.add(1,{tenantId:this.context.tenantId,type:e.type}),this.tracer.startActiveSpan(`personalization.${e.type}`,(t)=>{if(t.setAttribute("tenant.id",this.context.tenantId),this.context.userId)t.setAttribute("user.id",this.context.userId);t.setAttribute("personalization.event_type",e.type),t.end()}),this.buffer.length>=this.bufferSize)this.flush()}}var Yt=(e)=>new U(e);import{defineFeature as je}from"@contractspec/lib.contracts-spec/features";var Zt=je({meta:{key:"libs.personalization",version:"1.0.0",title:"Personalization",description:"Behavior tracking, analysis, and adaptation helpers for ContractSpec personalization.",domain:"personalization",owners:["@contractspec-core"],tags:["package","libs","personalization"],stability:"experimental"}});export{F as suggestPreferenceEvolution,Ge as suggestAdaptiveExperienceEvolution,At as resolveDataViewPreferences,Je as resolveAdaptiveExperience,M as recommendPreferencePreset,he as recommendBehaviorSupportPreset,yt as recommendAdaptiveExperience,Pe as preferenceDimensionsToDataViewDensity,He as insightsToWorkflowAdaptations,Ke as insightsToOverlaySuggestion,ut as getPreferencePresetDimensions,dt as getPreferencePresetDefinition,qe as getBehaviorSupportPresetDimensions,rt as getBehaviorSupportPresetDefinition,Ae as findUnsafeBehaviorLanguage,Et as dataViewModeToPreferencePatch,Pt as dataViewDensityToPreferencePatch,ft as createPreferencePresetCatalog,Yt as createBehaviorTracker,St as createBehaviorSignalModel,be as UNSAFE_BEHAVIOR_LABELS,Zt as PersonalizationFeature,E as PREFERENCE_PRESET_IDS,x as PREFERENCE_PRESET_DEFINITIONS,_ as PREFERENCE_DIMENSION_PRESETS,Oe as InMemoryBehaviorStore,U as BehaviorTracker,ge as BehaviorAnalyzer,w as BEHAVIOR_SUPPORT_PRESET_IDS,A as BEHAVIOR_SUPPORT_PRESET_DEFINITIONS,b as BEHAVIOR_SUPPORT_PRESETS};
@@ -0,0 +1 @@
1
+ var E=new Set(["control","dataDepth"]);function w({current:e,observations:i,preferredScope:r="surface",minimumEvidenceCount:n=3,minimumSessionCount:t=2,minimumSurfaceCountForGlobal:o=2}){let a=new Set(i.filter((c)=>c.explicit===!0).map((c)=>c.dimension));return k(i).filter((c)=>c.value!==e[c.dimension]).filter((c)=>!a.has(c.dimension)||c.explicit).map((c)=>_(c,e,{minimumEvidenceCount:n,minimumSessionCount:t,minimumSurfaceCountForGlobal:o,preferredScope:r})).filter((c)=>c!==void 0)}function k(e){let i=new Map;for(let r of e){if(!N(r.dimension,r.value))continue;let n=[r.dimension,r.value,r.signal,r.explicit?"explicit":"inferred"].join(":"),t=i.get(n);if(t)t.events.push(r);else i.set(n,{dimension:r.dimension,value:r.value,signal:r.signal,explicit:r.explicit===!0,events:[r]})}return Array.from(i.values())}function _(e,i,r){let n=O(e.events,e.signal);if(!e.explicit&&n.count<r.minimumEvidenceCount)return;if(!e.explicit&&n.sessionCount<r.minimumSessionCount)return;let t=L(e,n,r),o=!e.explicit||t!=="surface"||E.has(e.dimension);return{id:["preference-evolution",t,e.dimension,String(e.value)].join(":"),dimension:e.dimension,from:i[e.dimension],to:e.value,scope:t,requiresConfirmation:o,reversible:!0,reasons:T(e,n,t),evidence:n,patch:{[e.dimension]:e.value}}}function L(e,i,r){if(e.explicit)return r.preferredScope;if(r.preferredScope==="surface")return"surface";return i.surfaceCount>=r.minimumSurfaceCountForGlobal?r.preferredScope:"surface"}function O(e,i){let r=new Set(e.map((t)=>t.sessionId).filter(Boolean)),n=new Set(e.map((t)=>t.surfaceId).filter(Boolean));return{signal:i,count:e.reduce((t,o)=>t+(o.count??1),0),sessionCount:r.size||1,surfaceCount:n.size||1,reasons:Array.from(new Set(e.flatMap((t)=>t.reason?[t.reason]:[])))}}function T(e,i,r){let n=[`Observed ${i.count} ${e.signal.replaceAll("_"," ")} signals across ${i.sessionCount} session(s).`,`Suggested as a ${r} preference change, not a hidden global mutation.`];if(e.explicit)n.push("Explicit user choices take priority over inferred behavior.");if(E.has(e.dimension))n.push("This dimension can affect control or data exposure, so confirmation is required.");return[...n,...i.reasons]}var U={guidance:"|none|hints|tooltips|walkthrough|wizard|",density:"|minimal|compact|standard|detailed|dense|",dataDepth:"|summary|standard|detailed|exhaustive|",control:"|restricted|standard|advanced|full|",media:"|text|visual|voice|hybrid|",pace:"|deliberate|balanced|rapid|",narrative:"|top-down|bottom-up|adaptive|"};function N(e,i){return U[e].includes(`|${i}|`)}var B=new Set(["challenge","accountability","environment"]);function ve({currentPreferences:e,currentBehaviorSupport:i,preferenceObservations:r=[],behaviorSignals:n=[],preferredScope:t="surface"}){let o=w({current:e,observations:r,preferredScope:t}),a=W({currentBehaviorSupport:i,behaviorSignals:n});return{preferenceSuggestions:o,behaviorSupportSuggestions:a.suggestions,suppressedSuggestions:a.suppressed}}function W({currentBehaviorSupport:e,behaviorSignals:i}){let r=[],n=[];for(let t of i??[]){let o=t.evidence.suggestedAdaptation;if(!o||o.target!=="behaviorSupport")continue;let a=o.dimension;if(!q(a)){n.push({id:o.id,reason:"Suggested behavior support dimension is not recognized.",signalIds:[t.id]});continue}if(!z(a,o.value)){n.push({id:o.id,reason:"Suggested behavior support value does not match the dimension.",signalIds:[t.id]});continue}let p=o.value;if(p===e[a])continue;let c=(o.requiresConfirmation??o.impact!=="low")||B.has(a);r.push({id:o.id,dimension:a,from:e[a],to:p,scope:o.scope.level,requiresConfirmation:c,reversible:!0,automatic:!1,reasons:Y(t,a),evidence:{signalIds:[t.id],confidence:t.evidence.confidence,observations:t.evidence.observations},patch:{[a]:p}})}return{suggestions:r,suppressed:n}}function Y(e,i){let r=["Behavior support changes are suggestions, not silent mutations.","The signal describes scoped observed behavior, not a user identity.","The suggestion is reversible and should be explainable in the UI."];if(B.has(i))r.push("Changes to challenge, accountability, or social exposure require confirmation.");if(e.evidence.userFeedback)r.push(`User feedback state: ${e.evidence.userFeedback}.`);return r}var D={attention:["ambient","next-step","priority","review"],activation:["self-start","prompted","guided-start","ritual"],actionScale:["tiny","small","standard","large"],rhythm:["flexible","steady","time-boxed","deadline-driven"],environment:["open","structured","focused","collaborative"],challenge:["low","moderate","stretch","high"],meaningFrame:["progress","mastery","impact","relief","belonging","agency"],permission:["proceed","start-smaller","pause","renegotiate"],selfAuthority:["light","structured","confidence-building","high-autonomy"],accountability:["private","self-review","peer-review","external-review"],recovery:["resume","repair","reset","renegotiate"],reflection:["none","brief","standard","deep"]};function q(e){return Object.prototype.hasOwnProperty.call(D,e)}function z(e,i){return i?D[e].includes(i):!1}function he({preferences:e,behaviorSupport:i,behaviorSignals:r=[],context:n={},permissions:t=[],constraints:o=[],policies:a=[],overrides:p=[]}){let c=r.flatMap(G),s=[],l=[];for(let u of c){let h=j(u,a,p),P=$(h,t,o,a,p);if(P)l.push({...h,suppressedReason:P});else s.push(h)}let d=r.map((u)=>u.id),R=H({appliedAdaptations:s,suppressedAdaptations:l,overrides:p});return{interaction:{...e},behaviorSupport:{...i},context:{...n},appliedAdaptations:s,suppressedAdaptations:l,reasons:R,evidenceIds:d,constraints:o.map((u)=>({...u})),permissions:t.map((u)=>({...u})),policies:a.map((u)=>({...u})),overrides:p.map((u)=>({...u})),persistence:"runtime-only",canUndo:!0,userFacingSummary:"This runtime result explains what changed, why it changed, and how it can be undone."}}function G(e){let i=e.evidence.suggestedAdaptation;if(!i)return[];return[{id:i.id,kind:V(i.target,i.dimension),scope:i.scope,description:i.description,requiresConfirmation:(i.requiresConfirmation??i.impact!=="low")||e.evidence.safetyLevel!=="safe",reversible:!0,evidenceIds:[e.id],safetyLevel:e.evidence.safetyLevel}]}function V(e,i){if(e==="preference")return"ui";if(i==="recovery")return"recovery";if(i==="reflection")return"reflection";if(i==="environment")return"focus";if(e==="behaviorSupport")return"next-action";return"guidance"}function $(e,i,r,n,t){let o=t.find((s)=>s.target==="runtimeAction"&&g(e,s.key)&&s.value===!1);if(o)return o.reason??"Explicit override disabled this action.";let a=i.find((s)=>!s.allowed&&e.id.includes(s.key));if(a)return a.reason??"Permission denied.";let p=r.find((s)=>s.blocksAdaptation&&(!s.target||e.id.includes(s.target)));if(p)return p.reason;let c=n.find((s)=>s.effect==="block"&&(!s.target||e.id.includes(s.target)));if(c)return c.reason;return}function j(e,i,r){let n=i.some((o)=>(o.effect==="require-confirmation"||o.effect==="constrain")&&(!o.target||g(e,o.target))),t=r.some((o)=>o.target==="runtimeAction"&&g(e,o.key)&&(o.value==="require-confirmation"||o.value==="confirm"));if(!n&&!t)return e;return{...e,requiresConfirmation:!0}}function g(e,i){return e.id.includes(i)||e.kind===i}function H(e){let i=["Resolved adaptive experience is runtime-only and should not be stored as a hidden user profile.","Permissions, constraints, policy, and explicit overrides bound all adaptation."];if(e.appliedAdaptations.length>0)i.push("Scoped behavior evidence produced explainable runtime actions.");if(e.suppressedAdaptations.length>0)i.push("Some suggested adaptations were suppressed by safety boundaries.");if(e.overrides.length>0)i.push("Explicit overrides were preserved as higher priority context.");return i}var v=["steadyMomentum","activationFirst","permissionFirst","deepWorkBuilder","recoveryFirst","identityBuilder","selfAuthorityBuilder","socialMomentum","deadlineSprint","minimalNudge"],S={steadyMomentum:{attention:"next-step",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"progress",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"resume",reflection:"brief"},activationFirst:{attention:"next-step",activation:"guided-start",actionScale:"small",rhythm:"flexible",environment:"structured",challenge:"low",meaningFrame:"relief",permission:"start-smaller",selfAuthority:"confidence-building",accountability:"private",recovery:"resume",reflection:"brief"},permissionFirst:{attention:"ambient",activation:"prompted",actionScale:"small",rhythm:"flexible",environment:"open",challenge:"low",meaningFrame:"agency",permission:"renegotiate",selfAuthority:"confidence-building",accountability:"private",recovery:"renegotiate",reflection:"brief"},deepWorkBuilder:{attention:"priority",activation:"ritual",actionScale:"standard",rhythm:"time-boxed",environment:"focused",challenge:"stretch",meaningFrame:"mastery",permission:"proceed",selfAuthority:"high-autonomy",accountability:"self-review",recovery:"repair",reflection:"standard"},recoveryFirst:{attention:"next-step",activation:"guided-start",actionScale:"small",rhythm:"flexible",environment:"structured",challenge:"low",meaningFrame:"relief",permission:"renegotiate",selfAuthority:"confidence-building",accountability:"private",recovery:"repair",reflection:"brief"},identityBuilder:{attention:"review",activation:"ritual",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"agency",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"repair",reflection:"standard"},selfAuthorityBuilder:{attention:"priority",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"agency",permission:"proceed",selfAuthority:"confidence-building",accountability:"self-review",recovery:"repair",reflection:"standard"},socialMomentum:{attention:"priority",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"collaborative",challenge:"moderate",meaningFrame:"belonging",permission:"proceed",selfAuthority:"structured",accountability:"peer-review",recovery:"repair",reflection:"brief"},deadlineSprint:{attention:"priority",activation:"prompted",actionScale:"small",rhythm:"deadline-driven",environment:"focused",challenge:"stretch",meaningFrame:"impact",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"resume",reflection:"brief"},minimalNudge:{attention:"ambient",activation:"self-start",actionScale:"standard",rhythm:"flexible",environment:"open",challenge:"moderate",meaningFrame:"progress",permission:"proceed",selfAuthority:"high-autonomy",accountability:"private",recovery:"resume",reflection:"none"}};function Se(e){return{...S[e]}}var x={steadyMomentum:f("steadyMomentum","Steady momentum","Consistent progress with moderate support."),activationFirst:f("activationFirst","Activation-first","Reduces start friction and makes the first useful action easier."),permissionFirst:f("permissionFirst","Permission-first","Helps users start smaller, pause, or renegotiate without friction."),deepWorkBuilder:f("deepWorkBuilder","Deep work builder","Protects focus, mastery, and intentional work."),recoveryFirst:f("recoveryFirst","Recovery-first","Makes repair and resumption easier after misses or interruptions."),identityBuilder:f("identityBuilder","Identity builder","Connects action to user-defined values or commitments."),selfAuthorityBuilder:f("selfAuthorityBuilder","Self-authority builder","Builds confidence, composure, structure, and follow-through."),socialMomentum:f("socialMomentum","Social momentum","Uses shared rhythm, collaboration, or review when explicitly wanted."),deadlineSprint:f("deadlineSprint","Deadline sprint","Supports short-term urgency and focused execution."),minimalNudge:f("minimalNudge","Minimal nudge","Keeps behavior support low-noise with minimal intervention.")};function Ae(e){let i=x[e];return{...i,dimensions:{...i.dimensions}}}function f(e,i,r){return{id:e,label:i,intent:r,dimensions:S[e]}}function I(e){let i=K(),r=[],n=0,t=(o,a,p)=>{if(i[o]+=a,p)r.push(p)};if(e.startSupport)n+=1,J(e.startSupport,t);if(e.actionSize)n+=1,Q(e.actionSize,t);if(e.recoveryPreference)n+=1,X(e.recoveryPreference,t);if(e.accountabilityPreference)n+=1,Z(e.accountabilityPreference,t);if(e.rhythmPreference)n+=1,ee(e.rhythmPreference,t);if(e.meaningPreference)n+=1,ie(e.meaningPreference,t);if(e.reflectionPreference)n+=1,re(e.reflectionPreference,t);if(e.role)r.push("Role text was recorded for context but did not score support presets.");return{scores:i,reasons:r,signalCount:n}}function b(e,i,r){if(r===0)return 0.35;let n=0.45+Math.min(e/(r*4),0.4)+Math.min((e-i)*0.05,0.15);return Math.round(Math.min(n,0.95)*100)/100}function K(){return v.reduce((e,i)=>({...e,[i]:i==="steadyMomentum"?1:0}),{})}function J(e,i){if(e==="self-start")i("minimalNudge",4,"You prefer low-noise starts.");if(e==="prompt")i("steadyMomentum",3,"You prefer a clear prompt to begin.");if(e==="guided")i("activationFirst",4,"You prefer guided start support.");if(e==="ritual")i("deepWorkBuilder",4,"You prefer a repeatable start ritual.")}function Q(e,i){if(e==="tiny")i("activationFirst",3,"Tiny first steps feel easier to trust.");if(e==="small")i("permissionFirst",3,"Small first steps feel easier to trust.");if(e==="standard")i("steadyMomentum",2,"Standard next actions fit you.");if(e==="large")i("deepWorkBuilder",2,"You prefer substantial action blocks.")}function X(e,i){if(e==="repair")i("recoveryFirst",5,"Repair should be easy after a miss.");if(e==="renegotiate")i("permissionFirst",4,"Renegotiation should stay available.");if(e==="resume")i("steadyMomentum",2,"You prefer to resume without a reset.");if(e==="reset")i("activationFirst",2,"A clean restart can be useful.")}function Z(e,i){if(e==="private")i("minimalNudge",3,"You prefer private progress.");if(e==="self-review")i("selfAuthorityBuilder",3,"You prefer self-review.");if(e==="shared-review")i("socialMomentum",4,"You prefer shared review.")}function ee(e,i){if(e==="flexible")i("permissionFirst",2);if(e==="steady")i("steadyMomentum",3);if(e==="focus-block")i("deepWorkBuilder",4);if(e==="deadline")i("deadlineSprint",4)}function ie(e,i){if(e==="mastery")i("deepWorkBuilder",3);if(e==="impact")i("deadlineSprint",2);if(e==="relief")i("recoveryFirst",3);if(e==="agency")i("identityBuilder",3);if(e==="progress")i("steadyMomentum",2)}function re(e,i){if(e==="none")i("minimalNudge",3);if(e==="brief")i("steadyMomentum",2);if(e==="standard")i("selfAuthorityBuilder",2);if(e==="deep")i("deepWorkBuilder",3)}var A=["balanced","guideMe","summaryFirst","deepAnalyst","builder","opsWarRoom","auditReview","minimalFocus"],F={balanced:{guidance:"hints",density:"standard",dataDepth:"standard",control:"standard",media:"hybrid",pace:"balanced",narrative:"adaptive"},guideMe:{guidance:"walkthrough",density:"detailed",dataDepth:"standard",control:"restricted",media:"hybrid",pace:"deliberate",narrative:"top-down"},summaryFirst:{guidance:"hints",density:"compact",dataDepth:"summary",control:"standard",media:"visual",pace:"rapid",narrative:"top-down"},deepAnalyst:{guidance:"tooltips",density:"compact",dataDepth:"exhaustive",control:"advanced",media:"hybrid",pace:"balanced",narrative:"bottom-up"},builder:{guidance:"hints",density:"compact",dataDepth:"detailed",control:"full",media:"text",pace:"rapid",narrative:"bottom-up"},opsWarRoom:{guidance:"hints",density:"dense",dataDepth:"detailed",control:"advanced",media:"visual",pace:"rapid",narrative:"adaptive"},auditReview:{guidance:"tooltips",density:"detailed",dataDepth:"exhaustive",control:"advanced",media:"text",pace:"deliberate",narrative:"bottom-up"},minimalFocus:{guidance:"none",density:"minimal",dataDepth:"summary",control:"restricted",media:"text",pace:"balanced",narrative:"top-down"}},y={balanced:m("balanced","Balanced","Safe default for general use."),guideMe:m("guideMe","Guide me","Slower, more guided onboarding for new or uncertain users."),summaryFirst:m("summaryFirst","Summary-first","Compact, fast, dashboard-style usage that starts with summaries."),deepAnalyst:m("deepAnalyst","Deep analyst","Data-rich, evidence-first investigation mode."),builder:m("builder","Builder","Fast, configurable mode for admins, developers, and creators."),opsWarRoom:m("opsWarRoom","Ops war room","Dense, visual, rapid mode for monitoring and incidents."),auditReview:m("auditReview","Audit review","Deliberate, traceable, detail-heavy review mode."),minimalFocus:m("minimalFocus","Minimal focus","Low-noise, focused, simple experience.")};function Fe(e){return{...F[e]}}function Me(e){let i=y[e];return{...i,dimensions:{...i.dimensions}}}function Ce(e){return{...y,...e}}function m(e,i,r){return{id:e,label:i,intent:r,dimensions:F[e]}}function C(e){let i=te(),r=[],n=0,t=(s,l,d)=>{if(i[s]+=l,d)r.push(d)};if(e.primaryIntent)n+=1,ne(e.primaryIntent,t);if(e.wantsStepByStepHelp!==void 0)if(n+=1,e.wantsStepByStepHelp)t("guideMe",4,"You asked for step-by-step help.");else t("minimalFocus",1.5,"You did not ask for guided walkthroughs."),t("builder",1);if(e.detailPreference)n+=1,oe(e.detailPreference,t);if(e.pacePreference)n+=1,se(e.pacePreference,t);if(e.controlPreference)n+=1,ae(e.controlPreference,t);if(e.mediaPreference)n+=1,ce(e.mediaPreference,t);if(e.role)r.push("Role text was recorded for context but did not score presets.");let o=A.map((s)=>({preset:s,score:i[s]})).sort((s,l)=>l.score-s.score),a=o[0]??{preset:"balanced",score:1},p=o[1]?.score??0,c=M(a.score,p,n);return{selectedPreset:a.preset,confidence:c,reasons:r.length?pe(r):["Balanced is the default when onboarding signals are sparse."],alternatives:o.slice(1,4).map(({preset:s,score:l})=>({preset:s,confidence:M(l,0,n),reason:y[s].intent}))}}function te(){return A.reduce((e,i)=>({...e,[i]:i==="balanced"?1:0}),{})}function ne(e,i){if(e==="general")i("balanced",3,"You chose a general-purpose setup.");if(e==="learning")i("guideMe",4,"You are mostly learning.");if(e==="reviewing")i("auditReview",4,"You are mostly reviewing.");if(e==="building")i("builder",4,"You are mostly building.");if(e==="monitoring")i("opsWarRoom",4,"You are mostly monitoring.");if(e==="analyzing")i("deepAnalyst",4,"You are mostly analyzing.")}function oe(e,i){if(e==="summaries")i("summaryFirst",4,"You prefer to scan summaries first."),i("minimalFocus",2);if(e==="details")i("deepAnalyst",2,"You prefer to inspect details."),i("auditReview",2);if(e==="evidence")i("deepAnalyst",4,"You prefer evidence before summaries."),i("auditReview",3)}function se(e,i){if(e==="fast")i("opsWarRoom",3,"You prefer a fast interface."),i("summaryFirst",2),i("builder",2);if(e==="balanced")i("balanced",2,"You prefer a balanced pace.");if(e==="deliberate")i("auditReview",3,"You prefer a deliberate pace."),i("guideMe",2)}function ae(e,i){if(e==="simple")i("minimalFocus",3,"You prefer simple controls."),i("guideMe",2);if(e==="standard")i("balanced",2,"You prefer standard controls.");if(e==="advanced")i("builder",3,"You prefer advanced control."),i("deepAnalyst",2),i("opsWarRoom",2),i("auditReview",2)}function ce(e,i){if(e==="visual")i("opsWarRoom",2),i("summaryFirst",1);if(e==="text")i("minimalFocus",1),i("builder",1),i("auditReview",1);if(e==="hybrid")i("balanced",1),i("guideMe",1),i("deepAnalyst",1)}function M(e,i,r){if(r===0)return 0.35;let n=0.45+Math.min(e/(r*4),0.4)+Math.min((e-i)*0.05,0.15);return Math.round(Math.min(n,0.95)*100)/100}function pe(e){return Array.from(new Set(e))}function Ue(e){let i=C(e.interaction??{}),r=ue(e.behaviorSupport??{}),n=Math.round((i.confidence+r.confidence)/2*100)/100;return{selectedInteractionPreset:i.selectedPreset,selectedBehaviorSupportPreset:r.selectedPreset,confidence:n,reasons:[...i.reasons,...r.reasons],alternativeInteractionPresets:i.alternatives,alternativeBehaviorSupportPresets:r.alternatives,editableDimensions:{interaction:["guidance","density","dataDepth","control","media","pace","narrative"],behaviorSupport:r.editableDimensions}}}function ue(e){let{scores:i,reasons:r,signalCount:n}=I(e),t=v.map((p)=>({preset:p,score:i[p]})).sort((p,c)=>c.score-p.score),o=t[0]??{preset:"steadyMomentum",score:1},a=t[1]?.score??0;return{selectedPreset:o.preset,confidence:b(o.score,a,n),reasons:r.length?Array.from(new Set(r)):["Steady momentum is the default when support signals are sparse."],alternatives:t.slice(1,4).map(({preset:p,score:c})=>({preset:p,confidence:b(c,0,n),reason:x[p].intent})),editableDimensions:["attention","activation","actionScale","rhythm","environment","challenge","meaningFrame","permission","selfAuthority","accountability","recovery","reflection"]}}var fe=["lazy","avoidant","anxious","weak discipline","low motivation","needy","approval-seeking","procrastinator","high-value user","low-value user","compliant user","manipulable user","unreliable","low-performing"];function le(e){let i=e.join(" ").toLowerCase();return fe.filter((r)=>i.includes(r))}function We(e){let i=le([e.summary,...e.evidence.observations,e.evidence.baseline??"",e.evidence.repeatedPattern??"",e.evidence.deviationFromBaseline??""]);if(i.length>0)throw Error(`Behavior signals must describe observations, not unsafe labels: ${i.join(", ")}`);return{...e,prohibitedConclusions:["Do not infer personality, morality, discipline, clinical state, or user value from this signal.","Use this signal only as scoped evidence for explainable adaptation suggestions."]}}export{w as suggestPreferenceEvolution,ve as suggestAdaptiveExperienceEvolution,he as resolveAdaptiveExperience,C as recommendPreferencePreset,ue as recommendBehaviorSupportPreset,Ue as recommendAdaptiveExperience,Fe as getPreferencePresetDimensions,Me as getPreferencePresetDefinition,Se as getBehaviorSupportPresetDimensions,Ae as getBehaviorSupportPresetDefinition,le as findUnsafeBehaviorLanguage,Ce as createPreferencePresetCatalog,We as createBehaviorSignalModel,fe as UNSAFE_BEHAVIOR_LABELS,A as PREFERENCE_PRESET_IDS,y as PREFERENCE_PRESET_DEFINITIONS,F as PREFERENCE_DIMENSION_PRESETS,v as BEHAVIOR_SUPPORT_PRESET_IDS,x as BEHAVIOR_SUPPORT_PRESET_DEFINITIONS,S as BEHAVIOR_SUPPORT_PRESETS};
File without changes
@@ -0,0 +1 @@
1
+ var u=new Set(["control","dataDepth"]);function S({current:e,observations:i,preferredScope:n="surface",minimumEvidenceCount:o=3,minimumSessionCount:r=2,minimumSurfaceCountForGlobal:s=2}){let c=new Set(i.filter((t)=>t.explicit===!0).map((t)=>t.dimension));return l(i).filter((t)=>t.value!==e[t.dimension]).filter((t)=>!c.has(t.dimension)||t.explicit).map((t)=>f(t,e,{minimumEvidenceCount:o,minimumSessionCount:r,minimumSurfaceCountForGlobal:s,preferredScope:n})).filter((t)=>t!==void 0)}function l(e){let i=new Map;for(let n of e){if(!d(n.dimension,n.value))continue;let o=[n.dimension,n.value,n.signal,n.explicit?"explicit":"inferred"].join(":"),r=i.get(o);if(r)r.events.push(n);else i.set(o,{dimension:n.dimension,value:n.value,signal:n.signal,explicit:n.explicit===!0,events:[n]})}return Array.from(i.values())}function f(e,i,n){let o=m(e.events,e.signal);if(!e.explicit&&o.count<n.minimumEvidenceCount)return;if(!e.explicit&&o.sessionCount<n.minimumSessionCount)return;let r=a(e,o,n),s=!e.explicit||r!=="surface"||u.has(e.dimension);return{id:["preference-evolution",r,e.dimension,String(e.value)].join(":"),dimension:e.dimension,from:i[e.dimension],to:e.value,scope:r,requiresConfirmation:s,reversible:!0,reasons:p(e,o,r),evidence:o,patch:{[e.dimension]:e.value}}}function a(e,i,n){if(e.explicit)return n.preferredScope;if(n.preferredScope==="surface")return"surface";return i.surfaceCount>=n.minimumSurfaceCountForGlobal?n.preferredScope:"surface"}function m(e,i){let n=new Set(e.map((r)=>r.sessionId).filter(Boolean)),o=new Set(e.map((r)=>r.surfaceId).filter(Boolean));return{signal:i,count:e.reduce((r,s)=>r+(s.count??1),0),sessionCount:n.size||1,surfaceCount:o.size||1,reasons:Array.from(new Set(e.flatMap((r)=>r.reason?[r.reason]:[])))}}function p(e,i,n){let o=[`Observed ${i.count} ${e.signal.replaceAll("_"," ")} signals across ${i.sessionCount} session(s).`,`Suggested as a ${n} preference change, not a hidden global mutation.`];if(e.explicit)o.push("Explicit user choices take priority over inferred behavior.");if(u.has(e.dimension))o.push("This dimension can affect control or data exposure, so confirmation is required.");return[...o,...i.reasons]}var v={guidance:"|none|hints|tooltips|walkthrough|wizard|",density:"|minimal|compact|standard|detailed|dense|",dataDepth:"|summary|standard|detailed|exhaustive|",control:"|restricted|standard|advanced|full|",media:"|text|visual|voice|hybrid|",pace:"|deliberate|balanced|rapid|",narrative:"|top-down|bottom-up|adaptive|"};function d(e,i){return v[e].includes(`|${i}|`)}export{S as suggestPreferenceEvolution};
@@ -0,0 +1 @@
1
+ var P=["balanced","guideMe","summaryFirst","deepAnalyst","builder","opsWarRoom","auditReview","minimalFocus"],y={balanced:{guidance:"hints",density:"standard",dataDepth:"standard",control:"standard",media:"hybrid",pace:"balanced",narrative:"adaptive"},guideMe:{guidance:"walkthrough",density:"detailed",dataDepth:"standard",control:"restricted",media:"hybrid",pace:"deliberate",narrative:"top-down"},summaryFirst:{guidance:"hints",density:"compact",dataDepth:"summary",control:"standard",media:"visual",pace:"rapid",narrative:"top-down"},deepAnalyst:{guidance:"tooltips",density:"compact",dataDepth:"exhaustive",control:"advanced",media:"hybrid",pace:"balanced",narrative:"bottom-up"},builder:{guidance:"hints",density:"compact",dataDepth:"detailed",control:"full",media:"text",pace:"rapid",narrative:"bottom-up"},opsWarRoom:{guidance:"hints",density:"dense",dataDepth:"detailed",control:"advanced",media:"visual",pace:"rapid",narrative:"adaptive"},auditReview:{guidance:"tooltips",density:"detailed",dataDepth:"exhaustive",control:"advanced",media:"text",pace:"deliberate",narrative:"bottom-up"},minimalFocus:{guidance:"none",density:"minimal",dataDepth:"summary",control:"restricted",media:"text",pace:"balanced",narrative:"top-down"}},f={balanced:m("balanced","Balanced","Safe default for general use."),guideMe:m("guideMe","Guide me","Slower, more guided onboarding for new or uncertain users."),summaryFirst:m("summaryFirst","Summary-first","Compact, fast, dashboard-style usage that starts with summaries."),deepAnalyst:m("deepAnalyst","Deep analyst","Data-rich, evidence-first investigation mode."),builder:m("builder","Builder","Fast, configurable mode for admins, developers, and creators."),opsWarRoom:m("opsWarRoom","Ops war room","Dense, visual, rapid mode for monitoring and incidents."),auditReview:m("auditReview","Audit review","Deliberate, traceable, detail-heavy review mode."),minimalFocus:m("minimalFocus","Minimal focus","Low-noise, focused, simple experience.")};function T(e){return{...y[e]}}function E(e){let r=f[e];return{...r,dimensions:{...r.dimensions}}}function A(e){return{...f,...e}}function m(e,r,i){return{id:e,label:r,intent:i,dimensions:y[e]}}function N(e){let r=h(),i=[],t=0,o=(n,c,a)=>{if(r[n]+=c,a)i.push(a)};if(e.primaryIntent)t+=1,s(e.primaryIntent,o);if(e.wantsStepByStepHelp!==void 0)if(t+=1,e.wantsStepByStepHelp)o("guideMe",4,"You asked for step-by-step help.");else o("minimalFocus",1.5,"You did not ask for guided walkthroughs."),o("builder",1);if(e.detailPreference)t+=1,I(e.detailPreference,o);if(e.pacePreference)t+=1,x(e.pacePreference,o);if(e.controlPreference)t+=1,w(e.controlPreference,o);if(e.mediaPreference)t+=1,R(e.mediaPreference,o);if(e.role)i.push("Role text was recorded for context but did not score presets.");let u=P.map((n)=>({preset:n,score:r[n]})).sort((n,c)=>c.score-n.score),p=u[0]??{preset:"balanced",score:1},v=u[1]?.score??0,D=b(p.score,v,t);return{selectedPreset:p.preset,confidence:D,reasons:i.length?F(i):["Balanced is the default when onboarding signals are sparse."],alternatives:u.slice(1,4).map(({preset:n,score:c})=>({preset:n,confidence:b(c,0,t),reason:f[n].intent}))}}function h(){return P.reduce((e,r)=>({...e,[r]:r==="balanced"?1:0}),{})}function s(e,r){if(e==="general")r("balanced",3,"You chose a general-purpose setup.");if(e==="learning")r("guideMe",4,"You are mostly learning.");if(e==="reviewing")r("auditReview",4,"You are mostly reviewing.");if(e==="building")r("builder",4,"You are mostly building.");if(e==="monitoring")r("opsWarRoom",4,"You are mostly monitoring.");if(e==="analyzing")r("deepAnalyst",4,"You are mostly analyzing.")}function I(e,r){if(e==="summaries")r("summaryFirst",4,"You prefer to scan summaries first."),r("minimalFocus",2);if(e==="details")r("deepAnalyst",2,"You prefer to inspect details."),r("auditReview",2);if(e==="evidence")r("deepAnalyst",4,"You prefer evidence before summaries."),r("auditReview",3)}function x(e,r){if(e==="fast")r("opsWarRoom",3,"You prefer a fast interface."),r("summaryFirst",2),r("builder",2);if(e==="balanced")r("balanced",2,"You prefer a balanced pace.");if(e==="deliberate")r("auditReview",3,"You prefer a deliberate pace."),r("guideMe",2)}function w(e,r){if(e==="simple")r("minimalFocus",3,"You prefer simple controls."),r("guideMe",2);if(e==="standard")r("balanced",2,"You prefer standard controls.");if(e==="advanced")r("builder",3,"You prefer advanced control."),r("deepAnalyst",2),r("opsWarRoom",2),r("auditReview",2)}function R(e,r){if(e==="visual")r("opsWarRoom",2),r("summaryFirst",1);if(e==="text")r("minimalFocus",1),r("builder",1),r("auditReview",1);if(e==="hybrid")r("balanced",1),r("guideMe",1),r("deepAnalyst",1)}function b(e,r,i){if(i===0)return 0.35;let t=0.45+Math.min(e/(i*4),0.4)+Math.min((e-r)*0.05,0.15);return Math.round(Math.min(t,0.95)*100)/100}function F(e){return Array.from(new Set(e))}export{N as recommendPreferencePreset};
@@ -0,0 +1 @@
1
+ var d=["balanced","guideMe","summaryFirst","deepAnalyst","builder","opsWarRoom","auditReview","minimalFocus"],a={balanced:{guidance:"hints",density:"standard",dataDepth:"standard",control:"standard",media:"hybrid",pace:"balanced",narrative:"adaptive"},guideMe:{guidance:"walkthrough",density:"detailed",dataDepth:"standard",control:"restricted",media:"hybrid",pace:"deliberate",narrative:"top-down"},summaryFirst:{guidance:"hints",density:"compact",dataDepth:"summary",control:"standard",media:"visual",pace:"rapid",narrative:"top-down"},deepAnalyst:{guidance:"tooltips",density:"compact",dataDepth:"exhaustive",control:"advanced",media:"hybrid",pace:"balanced",narrative:"bottom-up"},builder:{guidance:"hints",density:"compact",dataDepth:"detailed",control:"full",media:"text",pace:"rapid",narrative:"bottom-up"},opsWarRoom:{guidance:"hints",density:"dense",dataDepth:"detailed",control:"advanced",media:"visual",pace:"rapid",narrative:"adaptive"},auditReview:{guidance:"tooltips",density:"detailed",dataDepth:"exhaustive",control:"advanced",media:"text",pace:"deliberate",narrative:"bottom-up"},minimalFocus:{guidance:"none",density:"minimal",dataDepth:"summary",control:"restricted",media:"text",pace:"balanced",narrative:"top-down"}},i={balanced:t("balanced","Balanced","Safe default for general use."),guideMe:t("guideMe","Guide me","Slower, more guided onboarding for new or uncertain users."),summaryFirst:t("summaryFirst","Summary-first","Compact, fast, dashboard-style usage that starts with summaries."),deepAnalyst:t("deepAnalyst","Deep analyst","Data-rich, evidence-first investigation mode."),builder:t("builder","Builder","Fast, configurable mode for admins, developers, and creators."),opsWarRoom:t("opsWarRoom","Ops war room","Dense, visual, rapid mode for monitoring and incidents."),auditReview:t("auditReview","Audit review","Deliberate, traceable, detail-heavy review mode."),minimalFocus:t("minimalFocus","Minimal focus","Low-noise, focused, simple experience.")};function s(e){return{...a[e]}}function o(e){let r=i[e];return{...r,dimensions:{...r.dimensions}}}function c(e){return{...i,...e}}function t(e,r,n){return{id:e,label:r,intent:n,dimensions:a[e]}}export{s as getPreferencePresetDimensions,o as getPreferencePresetDefinition,c as createPreferencePresetCatalog,d as PREFERENCE_PRESET_IDS,i as PREFERENCE_PRESET_DEFINITIONS,a as PREFERENCE_DIMENSION_PRESETS};
@@ -46,3 +46,11 @@ export interface BundlePreferenceAdapter {
46
46
  scope: 'user' | 'workspace-user' | 'surface';
47
47
  }): Promise<void>;
48
48
  }
49
+ export * from './adaptive-evolution';
50
+ export * from './adaptive-experience';
51
+ export * from './adaptive-onboarding';
52
+ export * from './behavior-signals';
53
+ export * from './behavior-support';
54
+ export * from './preference-evolution';
55
+ export * from './preference-onboarding';
56
+ export * from './preference-presets';
@@ -1 +1,2 @@
1
1
  // @bun
2
+ var E=new Set(["control","dataDepth"]);function w({current:e,observations:i,preferredScope:r="surface",minimumEvidenceCount:n=3,minimumSessionCount:t=2,minimumSurfaceCountForGlobal:o=2}){let a=new Set(i.filter((c)=>c.explicit===!0).map((c)=>c.dimension));return k(i).filter((c)=>c.value!==e[c.dimension]).filter((c)=>!a.has(c.dimension)||c.explicit).map((c)=>_(c,e,{minimumEvidenceCount:n,minimumSessionCount:t,minimumSurfaceCountForGlobal:o,preferredScope:r})).filter((c)=>c!==void 0)}function k(e){let i=new Map;for(let r of e){if(!N(r.dimension,r.value))continue;let n=[r.dimension,r.value,r.signal,r.explicit?"explicit":"inferred"].join(":"),t=i.get(n);if(t)t.events.push(r);else i.set(n,{dimension:r.dimension,value:r.value,signal:r.signal,explicit:r.explicit===!0,events:[r]})}return Array.from(i.values())}function _(e,i,r){let n=O(e.events,e.signal);if(!e.explicit&&n.count<r.minimumEvidenceCount)return;if(!e.explicit&&n.sessionCount<r.minimumSessionCount)return;let t=L(e,n,r),o=!e.explicit||t!=="surface"||E.has(e.dimension);return{id:["preference-evolution",t,e.dimension,String(e.value)].join(":"),dimension:e.dimension,from:i[e.dimension],to:e.value,scope:t,requiresConfirmation:o,reversible:!0,reasons:T(e,n,t),evidence:n,patch:{[e.dimension]:e.value}}}function L(e,i,r){if(e.explicit)return r.preferredScope;if(r.preferredScope==="surface")return"surface";return i.surfaceCount>=r.minimumSurfaceCountForGlobal?r.preferredScope:"surface"}function O(e,i){let r=new Set(e.map((t)=>t.sessionId).filter(Boolean)),n=new Set(e.map((t)=>t.surfaceId).filter(Boolean));return{signal:i,count:e.reduce((t,o)=>t+(o.count??1),0),sessionCount:r.size||1,surfaceCount:n.size||1,reasons:Array.from(new Set(e.flatMap((t)=>t.reason?[t.reason]:[])))}}function T(e,i,r){let n=[`Observed ${i.count} ${e.signal.replaceAll("_"," ")} signals across ${i.sessionCount} session(s).`,`Suggested as a ${r} preference change, not a hidden global mutation.`];if(e.explicit)n.push("Explicit user choices take priority over inferred behavior.");if(E.has(e.dimension))n.push("This dimension can affect control or data exposure, so confirmation is required.");return[...n,...i.reasons]}var U={guidance:"|none|hints|tooltips|walkthrough|wizard|",density:"|minimal|compact|standard|detailed|dense|",dataDepth:"|summary|standard|detailed|exhaustive|",control:"|restricted|standard|advanced|full|",media:"|text|visual|voice|hybrid|",pace:"|deliberate|balanced|rapid|",narrative:"|top-down|bottom-up|adaptive|"};function N(e,i){return U[e].includes(`|${i}|`)}var B=new Set(["challenge","accountability","environment"]);function ve({currentPreferences:e,currentBehaviorSupport:i,preferenceObservations:r=[],behaviorSignals:n=[],preferredScope:t="surface"}){let o=w({current:e,observations:r,preferredScope:t}),a=W({currentBehaviorSupport:i,behaviorSignals:n});return{preferenceSuggestions:o,behaviorSupportSuggestions:a.suggestions,suppressedSuggestions:a.suppressed}}function W({currentBehaviorSupport:e,behaviorSignals:i}){let r=[],n=[];for(let t of i??[]){let o=t.evidence.suggestedAdaptation;if(!o||o.target!=="behaviorSupport")continue;let a=o.dimension;if(!q(a)){n.push({id:o.id,reason:"Suggested behavior support dimension is not recognized.",signalIds:[t.id]});continue}if(!z(a,o.value)){n.push({id:o.id,reason:"Suggested behavior support value does not match the dimension.",signalIds:[t.id]});continue}let p=o.value;if(p===e[a])continue;let c=(o.requiresConfirmation??o.impact!=="low")||B.has(a);r.push({id:o.id,dimension:a,from:e[a],to:p,scope:o.scope.level,requiresConfirmation:c,reversible:!0,automatic:!1,reasons:Y(t,a),evidence:{signalIds:[t.id],confidence:t.evidence.confidence,observations:t.evidence.observations},patch:{[a]:p}})}return{suggestions:r,suppressed:n}}function Y(e,i){let r=["Behavior support changes are suggestions, not silent mutations.","The signal describes scoped observed behavior, not a user identity.","The suggestion is reversible and should be explainable in the UI."];if(B.has(i))r.push("Changes to challenge, accountability, or social exposure require confirmation.");if(e.evidence.userFeedback)r.push(`User feedback state: ${e.evidence.userFeedback}.`);return r}var D={attention:["ambient","next-step","priority","review"],activation:["self-start","prompted","guided-start","ritual"],actionScale:["tiny","small","standard","large"],rhythm:["flexible","steady","time-boxed","deadline-driven"],environment:["open","structured","focused","collaborative"],challenge:["low","moderate","stretch","high"],meaningFrame:["progress","mastery","impact","relief","belonging","agency"],permission:["proceed","start-smaller","pause","renegotiate"],selfAuthority:["light","structured","confidence-building","high-autonomy"],accountability:["private","self-review","peer-review","external-review"],recovery:["resume","repair","reset","renegotiate"],reflection:["none","brief","standard","deep"]};function q(e){return Object.prototype.hasOwnProperty.call(D,e)}function z(e,i){return i?D[e].includes(i):!1}function he({preferences:e,behaviorSupport:i,behaviorSignals:r=[],context:n={},permissions:t=[],constraints:o=[],policies:a=[],overrides:p=[]}){let c=r.flatMap(G),s=[],l=[];for(let u of c){let h=j(u,a,p),P=$(h,t,o,a,p);if(P)l.push({...h,suppressedReason:P});else s.push(h)}let d=r.map((u)=>u.id),R=H({appliedAdaptations:s,suppressedAdaptations:l,overrides:p});return{interaction:{...e},behaviorSupport:{...i},context:{...n},appliedAdaptations:s,suppressedAdaptations:l,reasons:R,evidenceIds:d,constraints:o.map((u)=>({...u})),permissions:t.map((u)=>({...u})),policies:a.map((u)=>({...u})),overrides:p.map((u)=>({...u})),persistence:"runtime-only",canUndo:!0,userFacingSummary:"This runtime result explains what changed, why it changed, and how it can be undone."}}function G(e){let i=e.evidence.suggestedAdaptation;if(!i)return[];return[{id:i.id,kind:V(i.target,i.dimension),scope:i.scope,description:i.description,requiresConfirmation:(i.requiresConfirmation??i.impact!=="low")||e.evidence.safetyLevel!=="safe",reversible:!0,evidenceIds:[e.id],safetyLevel:e.evidence.safetyLevel}]}function V(e,i){if(e==="preference")return"ui";if(i==="recovery")return"recovery";if(i==="reflection")return"reflection";if(i==="environment")return"focus";if(e==="behaviorSupport")return"next-action";return"guidance"}function $(e,i,r,n,t){let o=t.find((s)=>s.target==="runtimeAction"&&g(e,s.key)&&s.value===!1);if(o)return o.reason??"Explicit override disabled this action.";let a=i.find((s)=>!s.allowed&&e.id.includes(s.key));if(a)return a.reason??"Permission denied.";let p=r.find((s)=>s.blocksAdaptation&&(!s.target||e.id.includes(s.target)));if(p)return p.reason;let c=n.find((s)=>s.effect==="block"&&(!s.target||e.id.includes(s.target)));if(c)return c.reason;return}function j(e,i,r){let n=i.some((o)=>(o.effect==="require-confirmation"||o.effect==="constrain")&&(!o.target||g(e,o.target))),t=r.some((o)=>o.target==="runtimeAction"&&g(e,o.key)&&(o.value==="require-confirmation"||o.value==="confirm"));if(!n&&!t)return e;return{...e,requiresConfirmation:!0}}function g(e,i){return e.id.includes(i)||e.kind===i}function H(e){let i=["Resolved adaptive experience is runtime-only and should not be stored as a hidden user profile.","Permissions, constraints, policy, and explicit overrides bound all adaptation."];if(e.appliedAdaptations.length>0)i.push("Scoped behavior evidence produced explainable runtime actions.");if(e.suppressedAdaptations.length>0)i.push("Some suggested adaptations were suppressed by safety boundaries.");if(e.overrides.length>0)i.push("Explicit overrides were preserved as higher priority context.");return i}var v=["steadyMomentum","activationFirst","permissionFirst","deepWorkBuilder","recoveryFirst","identityBuilder","selfAuthorityBuilder","socialMomentum","deadlineSprint","minimalNudge"],S={steadyMomentum:{attention:"next-step",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"progress",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"resume",reflection:"brief"},activationFirst:{attention:"next-step",activation:"guided-start",actionScale:"small",rhythm:"flexible",environment:"structured",challenge:"low",meaningFrame:"relief",permission:"start-smaller",selfAuthority:"confidence-building",accountability:"private",recovery:"resume",reflection:"brief"},permissionFirst:{attention:"ambient",activation:"prompted",actionScale:"small",rhythm:"flexible",environment:"open",challenge:"low",meaningFrame:"agency",permission:"renegotiate",selfAuthority:"confidence-building",accountability:"private",recovery:"renegotiate",reflection:"brief"},deepWorkBuilder:{attention:"priority",activation:"ritual",actionScale:"standard",rhythm:"time-boxed",environment:"focused",challenge:"stretch",meaningFrame:"mastery",permission:"proceed",selfAuthority:"high-autonomy",accountability:"self-review",recovery:"repair",reflection:"standard"},recoveryFirst:{attention:"next-step",activation:"guided-start",actionScale:"small",rhythm:"flexible",environment:"structured",challenge:"low",meaningFrame:"relief",permission:"renegotiate",selfAuthority:"confidence-building",accountability:"private",recovery:"repair",reflection:"brief"},identityBuilder:{attention:"review",activation:"ritual",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"agency",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"repair",reflection:"standard"},selfAuthorityBuilder:{attention:"priority",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"structured",challenge:"moderate",meaningFrame:"agency",permission:"proceed",selfAuthority:"confidence-building",accountability:"self-review",recovery:"repair",reflection:"standard"},socialMomentum:{attention:"priority",activation:"prompted",actionScale:"standard",rhythm:"steady",environment:"collaborative",challenge:"moderate",meaningFrame:"belonging",permission:"proceed",selfAuthority:"structured",accountability:"peer-review",recovery:"repair",reflection:"brief"},deadlineSprint:{attention:"priority",activation:"prompted",actionScale:"small",rhythm:"deadline-driven",environment:"focused",challenge:"stretch",meaningFrame:"impact",permission:"proceed",selfAuthority:"structured",accountability:"self-review",recovery:"resume",reflection:"brief"},minimalNudge:{attention:"ambient",activation:"self-start",actionScale:"standard",rhythm:"flexible",environment:"open",challenge:"moderate",meaningFrame:"progress",permission:"proceed",selfAuthority:"high-autonomy",accountability:"private",recovery:"resume",reflection:"none"}};function Se(e){return{...S[e]}}var x={steadyMomentum:f("steadyMomentum","Steady momentum","Consistent progress with moderate support."),activationFirst:f("activationFirst","Activation-first","Reduces start friction and makes the first useful action easier."),permissionFirst:f("permissionFirst","Permission-first","Helps users start smaller, pause, or renegotiate without friction."),deepWorkBuilder:f("deepWorkBuilder","Deep work builder","Protects focus, mastery, and intentional work."),recoveryFirst:f("recoveryFirst","Recovery-first","Makes repair and resumption easier after misses or interruptions."),identityBuilder:f("identityBuilder","Identity builder","Connects action to user-defined values or commitments."),selfAuthorityBuilder:f("selfAuthorityBuilder","Self-authority builder","Builds confidence, composure, structure, and follow-through."),socialMomentum:f("socialMomentum","Social momentum","Uses shared rhythm, collaboration, or review when explicitly wanted."),deadlineSprint:f("deadlineSprint","Deadline sprint","Supports short-term urgency and focused execution."),minimalNudge:f("minimalNudge","Minimal nudge","Keeps behavior support low-noise with minimal intervention.")};function Ae(e){let i=x[e];return{...i,dimensions:{...i.dimensions}}}function f(e,i,r){return{id:e,label:i,intent:r,dimensions:S[e]}}function I(e){let i=K(),r=[],n=0,t=(o,a,p)=>{if(i[o]+=a,p)r.push(p)};if(e.startSupport)n+=1,J(e.startSupport,t);if(e.actionSize)n+=1,Q(e.actionSize,t);if(e.recoveryPreference)n+=1,X(e.recoveryPreference,t);if(e.accountabilityPreference)n+=1,Z(e.accountabilityPreference,t);if(e.rhythmPreference)n+=1,ee(e.rhythmPreference,t);if(e.meaningPreference)n+=1,ie(e.meaningPreference,t);if(e.reflectionPreference)n+=1,re(e.reflectionPreference,t);if(e.role)r.push("Role text was recorded for context but did not score support presets.");return{scores:i,reasons:r,signalCount:n}}function b(e,i,r){if(r===0)return 0.35;let n=0.45+Math.min(e/(r*4),0.4)+Math.min((e-i)*0.05,0.15);return Math.round(Math.min(n,0.95)*100)/100}function K(){return v.reduce((e,i)=>({...e,[i]:i==="steadyMomentum"?1:0}),{})}function J(e,i){if(e==="self-start")i("minimalNudge",4,"You prefer low-noise starts.");if(e==="prompt")i("steadyMomentum",3,"You prefer a clear prompt to begin.");if(e==="guided")i("activationFirst",4,"You prefer guided start support.");if(e==="ritual")i("deepWorkBuilder",4,"You prefer a repeatable start ritual.")}function Q(e,i){if(e==="tiny")i("activationFirst",3,"Tiny first steps feel easier to trust.");if(e==="small")i("permissionFirst",3,"Small first steps feel easier to trust.");if(e==="standard")i("steadyMomentum",2,"Standard next actions fit you.");if(e==="large")i("deepWorkBuilder",2,"You prefer substantial action blocks.")}function X(e,i){if(e==="repair")i("recoveryFirst",5,"Repair should be easy after a miss.");if(e==="renegotiate")i("permissionFirst",4,"Renegotiation should stay available.");if(e==="resume")i("steadyMomentum",2,"You prefer to resume without a reset.");if(e==="reset")i("activationFirst",2,"A clean restart can be useful.")}function Z(e,i){if(e==="private")i("minimalNudge",3,"You prefer private progress.");if(e==="self-review")i("selfAuthorityBuilder",3,"You prefer self-review.");if(e==="shared-review")i("socialMomentum",4,"You prefer shared review.")}function ee(e,i){if(e==="flexible")i("permissionFirst",2);if(e==="steady")i("steadyMomentum",3);if(e==="focus-block")i("deepWorkBuilder",4);if(e==="deadline")i("deadlineSprint",4)}function ie(e,i){if(e==="mastery")i("deepWorkBuilder",3);if(e==="impact")i("deadlineSprint",2);if(e==="relief")i("recoveryFirst",3);if(e==="agency")i("identityBuilder",3);if(e==="progress")i("steadyMomentum",2)}function re(e,i){if(e==="none")i("minimalNudge",3);if(e==="brief")i("steadyMomentum",2);if(e==="standard")i("selfAuthorityBuilder",2);if(e==="deep")i("deepWorkBuilder",3)}var A=["balanced","guideMe","summaryFirst","deepAnalyst","builder","opsWarRoom","auditReview","minimalFocus"],F={balanced:{guidance:"hints",density:"standard",dataDepth:"standard",control:"standard",media:"hybrid",pace:"balanced",narrative:"adaptive"},guideMe:{guidance:"walkthrough",density:"detailed",dataDepth:"standard",control:"restricted",media:"hybrid",pace:"deliberate",narrative:"top-down"},summaryFirst:{guidance:"hints",density:"compact",dataDepth:"summary",control:"standard",media:"visual",pace:"rapid",narrative:"top-down"},deepAnalyst:{guidance:"tooltips",density:"compact",dataDepth:"exhaustive",control:"advanced",media:"hybrid",pace:"balanced",narrative:"bottom-up"},builder:{guidance:"hints",density:"compact",dataDepth:"detailed",control:"full",media:"text",pace:"rapid",narrative:"bottom-up"},opsWarRoom:{guidance:"hints",density:"dense",dataDepth:"detailed",control:"advanced",media:"visual",pace:"rapid",narrative:"adaptive"},auditReview:{guidance:"tooltips",density:"detailed",dataDepth:"exhaustive",control:"advanced",media:"text",pace:"deliberate",narrative:"bottom-up"},minimalFocus:{guidance:"none",density:"minimal",dataDepth:"summary",control:"restricted",media:"text",pace:"balanced",narrative:"top-down"}},y={balanced:m("balanced","Balanced","Safe default for general use."),guideMe:m("guideMe","Guide me","Slower, more guided onboarding for new or uncertain users."),summaryFirst:m("summaryFirst","Summary-first","Compact, fast, dashboard-style usage that starts with summaries."),deepAnalyst:m("deepAnalyst","Deep analyst","Data-rich, evidence-first investigation mode."),builder:m("builder","Builder","Fast, configurable mode for admins, developers, and creators."),opsWarRoom:m("opsWarRoom","Ops war room","Dense, visual, rapid mode for monitoring and incidents."),auditReview:m("auditReview","Audit review","Deliberate, traceable, detail-heavy review mode."),minimalFocus:m("minimalFocus","Minimal focus","Low-noise, focused, simple experience.")};function Fe(e){return{...F[e]}}function Me(e){let i=y[e];return{...i,dimensions:{...i.dimensions}}}function Ce(e){return{...y,...e}}function m(e,i,r){return{id:e,label:i,intent:r,dimensions:F[e]}}function C(e){let i=te(),r=[],n=0,t=(s,l,d)=>{if(i[s]+=l,d)r.push(d)};if(e.primaryIntent)n+=1,ne(e.primaryIntent,t);if(e.wantsStepByStepHelp!==void 0)if(n+=1,e.wantsStepByStepHelp)t("guideMe",4,"You asked for step-by-step help.");else t("minimalFocus",1.5,"You did not ask for guided walkthroughs."),t("builder",1);if(e.detailPreference)n+=1,oe(e.detailPreference,t);if(e.pacePreference)n+=1,se(e.pacePreference,t);if(e.controlPreference)n+=1,ae(e.controlPreference,t);if(e.mediaPreference)n+=1,ce(e.mediaPreference,t);if(e.role)r.push("Role text was recorded for context but did not score presets.");let o=A.map((s)=>({preset:s,score:i[s]})).sort((s,l)=>l.score-s.score),a=o[0]??{preset:"balanced",score:1},p=o[1]?.score??0,c=M(a.score,p,n);return{selectedPreset:a.preset,confidence:c,reasons:r.length?pe(r):["Balanced is the default when onboarding signals are sparse."],alternatives:o.slice(1,4).map(({preset:s,score:l})=>({preset:s,confidence:M(l,0,n),reason:y[s].intent}))}}function te(){return A.reduce((e,i)=>({...e,[i]:i==="balanced"?1:0}),{})}function ne(e,i){if(e==="general")i("balanced",3,"You chose a general-purpose setup.");if(e==="learning")i("guideMe",4,"You are mostly learning.");if(e==="reviewing")i("auditReview",4,"You are mostly reviewing.");if(e==="building")i("builder",4,"You are mostly building.");if(e==="monitoring")i("opsWarRoom",4,"You are mostly monitoring.");if(e==="analyzing")i("deepAnalyst",4,"You are mostly analyzing.")}function oe(e,i){if(e==="summaries")i("summaryFirst",4,"You prefer to scan summaries first."),i("minimalFocus",2);if(e==="details")i("deepAnalyst",2,"You prefer to inspect details."),i("auditReview",2);if(e==="evidence")i("deepAnalyst",4,"You prefer evidence before summaries."),i("auditReview",3)}function se(e,i){if(e==="fast")i("opsWarRoom",3,"You prefer a fast interface."),i("summaryFirst",2),i("builder",2);if(e==="balanced")i("balanced",2,"You prefer a balanced pace.");if(e==="deliberate")i("auditReview",3,"You prefer a deliberate pace."),i("guideMe",2)}function ae(e,i){if(e==="simple")i("minimalFocus",3,"You prefer simple controls."),i("guideMe",2);if(e==="standard")i("balanced",2,"You prefer standard controls.");if(e==="advanced")i("builder",3,"You prefer advanced control."),i("deepAnalyst",2),i("opsWarRoom",2),i("auditReview",2)}function ce(e,i){if(e==="visual")i("opsWarRoom",2),i("summaryFirst",1);if(e==="text")i("minimalFocus",1),i("builder",1),i("auditReview",1);if(e==="hybrid")i("balanced",1),i("guideMe",1),i("deepAnalyst",1)}function M(e,i,r){if(r===0)return 0.35;let n=0.45+Math.min(e/(r*4),0.4)+Math.min((e-i)*0.05,0.15);return Math.round(Math.min(n,0.95)*100)/100}function pe(e){return Array.from(new Set(e))}function Ue(e){let i=C(e.interaction??{}),r=ue(e.behaviorSupport??{}),n=Math.round((i.confidence+r.confidence)/2*100)/100;return{selectedInteractionPreset:i.selectedPreset,selectedBehaviorSupportPreset:r.selectedPreset,confidence:n,reasons:[...i.reasons,...r.reasons],alternativeInteractionPresets:i.alternatives,alternativeBehaviorSupportPresets:r.alternatives,editableDimensions:{interaction:["guidance","density","dataDepth","control","media","pace","narrative"],behaviorSupport:r.editableDimensions}}}function ue(e){let{scores:i,reasons:r,signalCount:n}=I(e),t=v.map((p)=>({preset:p,score:i[p]})).sort((p,c)=>c.score-p.score),o=t[0]??{preset:"steadyMomentum",score:1},a=t[1]?.score??0;return{selectedPreset:o.preset,confidence:b(o.score,a,n),reasons:r.length?Array.from(new Set(r)):["Steady momentum is the default when support signals are sparse."],alternatives:t.slice(1,4).map(({preset:p,score:c})=>({preset:p,confidence:b(c,0,n),reason:x[p].intent})),editableDimensions:["attention","activation","actionScale","rhythm","environment","challenge","meaningFrame","permission","selfAuthority","accountability","recovery","reflection"]}}var fe=["lazy","avoidant","anxious","weak discipline","low motivation","needy","approval-seeking","procrastinator","high-value user","low-value user","compliant user","manipulable user","unreliable","low-performing"];function le(e){let i=e.join(" ").toLowerCase();return fe.filter((r)=>i.includes(r))}function We(e){let i=le([e.summary,...e.evidence.observations,e.evidence.baseline??"",e.evidence.repeatedPattern??"",e.evidence.deviationFromBaseline??""]);if(i.length>0)throw Error(`Behavior signals must describe observations, not unsafe labels: ${i.join(", ")}`);return{...e,prohibitedConclusions:["Do not infer personality, morality, discipline, clinical state, or user value from this signal.","Use this signal only as scoped evidence for explainable adaptation suggestions."]}}export{w as suggestPreferenceEvolution,ve as suggestAdaptiveExperienceEvolution,he as resolveAdaptiveExperience,C as recommendPreferencePreset,ue as recommendBehaviorSupportPreset,Ue as recommendAdaptiveExperience,Fe as getPreferencePresetDimensions,Me as getPreferencePresetDefinition,Se as getBehaviorSupportPresetDimensions,Ae as getBehaviorSupportPresetDefinition,le as findUnsafeBehaviorLanguage,Ce as createPreferencePresetCatalog,We as createBehaviorSignalModel,fe as UNSAFE_BEHAVIOR_LABELS,A as PREFERENCE_PRESET_IDS,y as PREFERENCE_PRESET_DEFINITIONS,F as PREFERENCE_DIMENSION_PRESETS,v as BEHAVIOR_SUPPORT_PRESET_IDS,x as BEHAVIOR_SUPPORT_PRESET_DEFINITIONS,S as BEHAVIOR_SUPPORT_PRESETS};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,49 @@
1
+ import type { PreferenceDimensions, PreferenceScope } from './preference-dimensions';
2
+ export type PreferenceDimension = keyof PreferenceDimensions;
3
+ export type PreferenceDimensionValue = PreferenceDimensions[PreferenceDimension];
4
+ export type PreferenceEvolutionSignal = 'explicit_choice' | 'setting_changed' | 'summary_expanded' | 'guidance_dismissed' | 'advanced_controls_opened' | 'media_mode_changed' | 'evidence_opened' | 'noise_reduced';
5
+ export type PreferenceEvolutionScope = Extract<PreferenceScope, 'user' | 'workspace-user' | 'surface'>;
6
+ type PreferenceEvolutionObservationByDimension = {
7
+ [Dimension in PreferenceDimension]: {
8
+ dimension: Dimension;
9
+ value: PreferenceDimensions[Dimension];
10
+ };
11
+ }[PreferenceDimension];
12
+ export type PreferenceEvolutionObservation = PreferenceEvolutionObservationByDimension & {
13
+ signal: PreferenceEvolutionSignal;
14
+ surfaceId?: string;
15
+ sessionId?: string;
16
+ count?: number;
17
+ explicit?: boolean;
18
+ reason?: string;
19
+ occurredAt?: string;
20
+ };
21
+ export interface PreferenceEvolutionInput {
22
+ current: PreferenceDimensions;
23
+ observations: PreferenceEvolutionObservation[];
24
+ /** Default: surface. User/workspace promotion still requires cross-session evidence. */
25
+ preferredScope?: PreferenceEvolutionScope;
26
+ minimumEvidenceCount?: number;
27
+ minimumSessionCount?: number;
28
+ minimumSurfaceCountForGlobal?: number;
29
+ }
30
+ export interface PreferenceEvolutionEvidence {
31
+ signal: PreferenceEvolutionSignal;
32
+ count: number;
33
+ sessionCount: number;
34
+ surfaceCount: number;
35
+ reasons: string[];
36
+ }
37
+ export interface PreferenceEvolutionSuggestion {
38
+ id: string;
39
+ dimension: PreferenceDimension;
40
+ from: PreferenceDimensionValue;
41
+ to: PreferenceDimensionValue;
42
+ scope: PreferenceEvolutionScope;
43
+ requiresConfirmation: boolean;
44
+ reversible: boolean;
45
+ reasons: string[];
46
+ evidence: PreferenceEvolutionEvidence;
47
+ patch: Partial<PreferenceDimensions>;
48
+ }
49
+ export {};
@@ -0,0 +1 @@
1
+ // @bun
@@ -0,0 +1,3 @@
1
+ import type { PreferenceEvolutionInput, PreferenceEvolutionSuggestion } from './preference-evolution-types';
2
+ export type { PreferenceDimension, PreferenceDimensionValue, PreferenceEvolutionEvidence, PreferenceEvolutionInput, PreferenceEvolutionObservation, PreferenceEvolutionScope, PreferenceEvolutionSignal, PreferenceEvolutionSuggestion, } from './preference-evolution-types';
3
+ export declare function suggestPreferenceEvolution({ current, observations, preferredScope, minimumEvidenceCount, minimumSessionCount, minimumSurfaceCountForGlobal, }: PreferenceEvolutionInput): PreferenceEvolutionSuggestion[];
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ var u=new Set(["control","dataDepth"]);function S({current:e,observations:i,preferredScope:n="surface",minimumEvidenceCount:o=3,minimumSessionCount:r=2,minimumSurfaceCountForGlobal:s=2}){let c=new Set(i.filter((t)=>t.explicit===!0).map((t)=>t.dimension));return l(i).filter((t)=>t.value!==e[t.dimension]).filter((t)=>!c.has(t.dimension)||t.explicit).map((t)=>f(t,e,{minimumEvidenceCount:o,minimumSessionCount:r,minimumSurfaceCountForGlobal:s,preferredScope:n})).filter((t)=>t!==void 0)}function l(e){let i=new Map;for(let n of e){if(!d(n.dimension,n.value))continue;let o=[n.dimension,n.value,n.signal,n.explicit?"explicit":"inferred"].join(":"),r=i.get(o);if(r)r.events.push(n);else i.set(o,{dimension:n.dimension,value:n.value,signal:n.signal,explicit:n.explicit===!0,events:[n]})}return Array.from(i.values())}function f(e,i,n){let o=m(e.events,e.signal);if(!e.explicit&&o.count<n.minimumEvidenceCount)return;if(!e.explicit&&o.sessionCount<n.minimumSessionCount)return;let r=a(e,o,n),s=!e.explicit||r!=="surface"||u.has(e.dimension);return{id:["preference-evolution",r,e.dimension,String(e.value)].join(":"),dimension:e.dimension,from:i[e.dimension],to:e.value,scope:r,requiresConfirmation:s,reversible:!0,reasons:p(e,o,r),evidence:o,patch:{[e.dimension]:e.value}}}function a(e,i,n){if(e.explicit)return n.preferredScope;if(n.preferredScope==="surface")return"surface";return i.surfaceCount>=n.minimumSurfaceCountForGlobal?n.preferredScope:"surface"}function m(e,i){let n=new Set(e.map((r)=>r.sessionId).filter(Boolean)),o=new Set(e.map((r)=>r.surfaceId).filter(Boolean));return{signal:i,count:e.reduce((r,s)=>r+(s.count??1),0),sessionCount:n.size||1,surfaceCount:o.size||1,reasons:Array.from(new Set(e.flatMap((r)=>r.reason?[r.reason]:[])))}}function p(e,i,n){let o=[`Observed ${i.count} ${e.signal.replaceAll("_"," ")} signals across ${i.sessionCount} session(s).`,`Suggested as a ${n} preference change, not a hidden global mutation.`];if(e.explicit)o.push("Explicit user choices take priority over inferred behavior.");if(u.has(e.dimension))o.push("This dimension can affect control or data exposure, so confirmation is required.");return[...o,...i.reasons]}var v={guidance:"|none|hints|tooltips|walkthrough|wizard|",density:"|minimal|compact|standard|detailed|dense|",dataDepth:"|summary|standard|detailed|exhaustive|",control:"|restricted|standard|advanced|full|",media:"|text|visual|voice|hybrid|",pace:"|deliberate|balanced|rapid|",narrative:"|top-down|bottom-up|adaptive|"};function d(e,i){return v[e].includes(`|${i}|`)}export{S as suggestPreferenceEvolution};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,24 @@
1
+ import { type PreferencePresetId } from './preference-presets';
2
+ export type OnboardingPrimaryIntent = 'general' | 'learning' | 'reviewing' | 'building' | 'monitoring' | 'analyzing';
3
+ export interface PreferenceOnboardingSignals {
4
+ wantsStepByStepHelp?: boolean;
5
+ detailPreference?: 'summaries' | 'details' | 'evidence';
6
+ pacePreference?: 'fast' | 'balanced' | 'deliberate';
7
+ controlPreference?: 'simple' | 'standard' | 'advanced';
8
+ primaryIntent?: OnboardingPrimaryIntent;
9
+ mediaPreference?: 'text' | 'visual' | 'hybrid';
10
+ /** Weak tie-breaker only. Never use role as the primary decision input. */
11
+ role?: string;
12
+ }
13
+ export interface PreferencePresetAlternative {
14
+ preset: PreferencePresetId;
15
+ confidence: number;
16
+ reason: string;
17
+ }
18
+ export interface PreferencePresetRecommendation {
19
+ selectedPreset: PreferencePresetId;
20
+ confidence: number;
21
+ reasons: string[];
22
+ alternatives: PreferencePresetAlternative[];
23
+ }
24
+ export declare function recommendPreferencePreset(signals: PreferenceOnboardingSignals): PreferencePresetRecommendation;
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ var P=["balanced","guideMe","summaryFirst","deepAnalyst","builder","opsWarRoom","auditReview","minimalFocus"],y={balanced:{guidance:"hints",density:"standard",dataDepth:"standard",control:"standard",media:"hybrid",pace:"balanced",narrative:"adaptive"},guideMe:{guidance:"walkthrough",density:"detailed",dataDepth:"standard",control:"restricted",media:"hybrid",pace:"deliberate",narrative:"top-down"},summaryFirst:{guidance:"hints",density:"compact",dataDepth:"summary",control:"standard",media:"visual",pace:"rapid",narrative:"top-down"},deepAnalyst:{guidance:"tooltips",density:"compact",dataDepth:"exhaustive",control:"advanced",media:"hybrid",pace:"balanced",narrative:"bottom-up"},builder:{guidance:"hints",density:"compact",dataDepth:"detailed",control:"full",media:"text",pace:"rapid",narrative:"bottom-up"},opsWarRoom:{guidance:"hints",density:"dense",dataDepth:"detailed",control:"advanced",media:"visual",pace:"rapid",narrative:"adaptive"},auditReview:{guidance:"tooltips",density:"detailed",dataDepth:"exhaustive",control:"advanced",media:"text",pace:"deliberate",narrative:"bottom-up"},minimalFocus:{guidance:"none",density:"minimal",dataDepth:"summary",control:"restricted",media:"text",pace:"balanced",narrative:"top-down"}},f={balanced:m("balanced","Balanced","Safe default for general use."),guideMe:m("guideMe","Guide me","Slower, more guided onboarding for new or uncertain users."),summaryFirst:m("summaryFirst","Summary-first","Compact, fast, dashboard-style usage that starts with summaries."),deepAnalyst:m("deepAnalyst","Deep analyst","Data-rich, evidence-first investigation mode."),builder:m("builder","Builder","Fast, configurable mode for admins, developers, and creators."),opsWarRoom:m("opsWarRoom","Ops war room","Dense, visual, rapid mode for monitoring and incidents."),auditReview:m("auditReview","Audit review","Deliberate, traceable, detail-heavy review mode."),minimalFocus:m("minimalFocus","Minimal focus","Low-noise, focused, simple experience.")};function T(e){return{...y[e]}}function E(e){let r=f[e];return{...r,dimensions:{...r.dimensions}}}function A(e){return{...f,...e}}function m(e,r,i){return{id:e,label:r,intent:i,dimensions:y[e]}}function N(e){let r=h(),i=[],t=0,o=(n,c,a)=>{if(r[n]+=c,a)i.push(a)};if(e.primaryIntent)t+=1,s(e.primaryIntent,o);if(e.wantsStepByStepHelp!==void 0)if(t+=1,e.wantsStepByStepHelp)o("guideMe",4,"You asked for step-by-step help.");else o("minimalFocus",1.5,"You did not ask for guided walkthroughs."),o("builder",1);if(e.detailPreference)t+=1,I(e.detailPreference,o);if(e.pacePreference)t+=1,x(e.pacePreference,o);if(e.controlPreference)t+=1,w(e.controlPreference,o);if(e.mediaPreference)t+=1,R(e.mediaPreference,o);if(e.role)i.push("Role text was recorded for context but did not score presets.");let u=P.map((n)=>({preset:n,score:r[n]})).sort((n,c)=>c.score-n.score),p=u[0]??{preset:"balanced",score:1},v=u[1]?.score??0,D=b(p.score,v,t);return{selectedPreset:p.preset,confidence:D,reasons:i.length?F(i):["Balanced is the default when onboarding signals are sparse."],alternatives:u.slice(1,4).map(({preset:n,score:c})=>({preset:n,confidence:b(c,0,t),reason:f[n].intent}))}}function h(){return P.reduce((e,r)=>({...e,[r]:r==="balanced"?1:0}),{})}function s(e,r){if(e==="general")r("balanced",3,"You chose a general-purpose setup.");if(e==="learning")r("guideMe",4,"You are mostly learning.");if(e==="reviewing")r("auditReview",4,"You are mostly reviewing.");if(e==="building")r("builder",4,"You are mostly building.");if(e==="monitoring")r("opsWarRoom",4,"You are mostly monitoring.");if(e==="analyzing")r("deepAnalyst",4,"You are mostly analyzing.")}function I(e,r){if(e==="summaries")r("summaryFirst",4,"You prefer to scan summaries first."),r("minimalFocus",2);if(e==="details")r("deepAnalyst",2,"You prefer to inspect details."),r("auditReview",2);if(e==="evidence")r("deepAnalyst",4,"You prefer evidence before summaries."),r("auditReview",3)}function x(e,r){if(e==="fast")r("opsWarRoom",3,"You prefer a fast interface."),r("summaryFirst",2),r("builder",2);if(e==="balanced")r("balanced",2,"You prefer a balanced pace.");if(e==="deliberate")r("auditReview",3,"You prefer a deliberate pace."),r("guideMe",2)}function w(e,r){if(e==="simple")r("minimalFocus",3,"You prefer simple controls."),r("guideMe",2);if(e==="standard")r("balanced",2,"You prefer standard controls.");if(e==="advanced")r("builder",3,"You prefer advanced control."),r("deepAnalyst",2),r("opsWarRoom",2),r("auditReview",2)}function R(e,r){if(e==="visual")r("opsWarRoom",2),r("summaryFirst",1);if(e==="text")r("minimalFocus",1),r("builder",1),r("auditReview",1);if(e==="hybrid")r("balanced",1),r("guideMe",1),r("deepAnalyst",1)}function b(e,r,i){if(i===0)return 0.35;let t=0.45+Math.min(e/(i*4),0.4)+Math.min((e-r)*0.05,0.15);return Math.round(Math.min(t,0.95)*100)/100}function F(e){return Array.from(new Set(e))}export{N as recommendPreferencePreset};
@@ -0,0 +1,97 @@
1
+ import type { PreferenceDimensions } from './preference-dimensions';
2
+ export declare const PREFERENCE_PRESET_IDS: readonly ["balanced", "guideMe", "summaryFirst", "deepAnalyst", "builder", "opsWarRoom", "auditReview", "minimalFocus"];
3
+ export type PreferencePresetId = (typeof PREFERENCE_PRESET_IDS)[number];
4
+ export interface PreferencePresetDefinition<TId extends string = PreferencePresetId> {
5
+ id: TId;
6
+ label: string;
7
+ intent: string;
8
+ dimensions: PreferenceDimensions;
9
+ }
10
+ export type PreferencePresetCatalog<TId extends string = PreferencePresetId> = Record<TId, PreferencePresetDefinition<TId>>;
11
+ export declare const PREFERENCE_DIMENSION_PRESETS: {
12
+ balanced: {
13
+ guidance: "hints";
14
+ density: "standard";
15
+ dataDepth: "standard";
16
+ control: "standard";
17
+ media: "hybrid";
18
+ pace: "balanced";
19
+ narrative: "adaptive";
20
+ };
21
+ guideMe: {
22
+ guidance: "walkthrough";
23
+ density: "detailed";
24
+ dataDepth: "standard";
25
+ control: "restricted";
26
+ media: "hybrid";
27
+ pace: "deliberate";
28
+ narrative: "top-down";
29
+ };
30
+ summaryFirst: {
31
+ guidance: "hints";
32
+ density: "compact";
33
+ dataDepth: "summary";
34
+ control: "standard";
35
+ media: "visual";
36
+ pace: "rapid";
37
+ narrative: "top-down";
38
+ };
39
+ deepAnalyst: {
40
+ guidance: "tooltips";
41
+ density: "compact";
42
+ dataDepth: "exhaustive";
43
+ control: "advanced";
44
+ media: "hybrid";
45
+ pace: "balanced";
46
+ narrative: "bottom-up";
47
+ };
48
+ builder: {
49
+ guidance: "hints";
50
+ density: "compact";
51
+ dataDepth: "detailed";
52
+ control: "full";
53
+ media: "text";
54
+ pace: "rapid";
55
+ narrative: "bottom-up";
56
+ };
57
+ opsWarRoom: {
58
+ guidance: "hints";
59
+ density: "dense";
60
+ dataDepth: "detailed";
61
+ control: "advanced";
62
+ media: "visual";
63
+ pace: "rapid";
64
+ narrative: "adaptive";
65
+ };
66
+ auditReview: {
67
+ guidance: "tooltips";
68
+ density: "detailed";
69
+ dataDepth: "exhaustive";
70
+ control: "advanced";
71
+ media: "text";
72
+ pace: "deliberate";
73
+ narrative: "bottom-up";
74
+ };
75
+ minimalFocus: {
76
+ guidance: "none";
77
+ density: "minimal";
78
+ dataDepth: "summary";
79
+ control: "restricted";
80
+ media: "text";
81
+ pace: "balanced";
82
+ narrative: "top-down";
83
+ };
84
+ };
85
+ export declare const PREFERENCE_PRESET_DEFINITIONS: {
86
+ balanced: PreferencePresetDefinition<"balanced" | "guideMe" | "summaryFirst" | "deepAnalyst" | "builder" | "opsWarRoom" | "auditReview" | "minimalFocus">;
87
+ guideMe: PreferencePresetDefinition<"balanced" | "guideMe" | "summaryFirst" | "deepAnalyst" | "builder" | "opsWarRoom" | "auditReview" | "minimalFocus">;
88
+ summaryFirst: PreferencePresetDefinition<"balanced" | "guideMe" | "summaryFirst" | "deepAnalyst" | "builder" | "opsWarRoom" | "auditReview" | "minimalFocus">;
89
+ deepAnalyst: PreferencePresetDefinition<"balanced" | "guideMe" | "summaryFirst" | "deepAnalyst" | "builder" | "opsWarRoom" | "auditReview" | "minimalFocus">;
90
+ builder: PreferencePresetDefinition<"balanced" | "guideMe" | "summaryFirst" | "deepAnalyst" | "builder" | "opsWarRoom" | "auditReview" | "minimalFocus">;
91
+ opsWarRoom: PreferencePresetDefinition<"balanced" | "guideMe" | "summaryFirst" | "deepAnalyst" | "builder" | "opsWarRoom" | "auditReview" | "minimalFocus">;
92
+ auditReview: PreferencePresetDefinition<"balanced" | "guideMe" | "summaryFirst" | "deepAnalyst" | "builder" | "opsWarRoom" | "auditReview" | "minimalFocus">;
93
+ minimalFocus: PreferencePresetDefinition<"balanced" | "guideMe" | "summaryFirst" | "deepAnalyst" | "builder" | "opsWarRoom" | "auditReview" | "minimalFocus">;
94
+ };
95
+ export declare function getPreferencePresetDimensions(id: PreferencePresetId): PreferenceDimensions;
96
+ export declare function getPreferencePresetDefinition(id: PreferencePresetId): PreferencePresetDefinition;
97
+ export declare function createPreferencePresetCatalog<TId extends string>(customPresets: PreferencePresetCatalog<TId>): PreferencePresetCatalog<PreferencePresetId | TId>;