@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,2 @@
1
+ // @bun
2
+ var y=["steadyMomentum","activationFirst","permissionFirst","deepWorkBuilder","recoveryFirst","identityBuilder","selfAuthorityBuilder","socialMomentum","deadlineSprint","minimalNudge"],h={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 H(e){return{...h[e]}}var d={steadyMomentum:c("steadyMomentum","Steady momentum","Consistent progress with moderate support."),activationFirst:c("activationFirst","Activation-first","Reduces start friction and makes the first useful action easier."),permissionFirst:c("permissionFirst","Permission-first","Helps users start smaller, pause, or renegotiate without friction."),deepWorkBuilder:c("deepWorkBuilder","Deep work builder","Protects focus, mastery, and intentional work."),recoveryFirst:c("recoveryFirst","Recovery-first","Makes repair and resumption easier after misses or interruptions."),identityBuilder:c("identityBuilder","Identity builder","Connects action to user-defined values or commitments."),selfAuthorityBuilder:c("selfAuthorityBuilder","Self-authority builder","Builds confidence, composure, structure, and follow-through."),socialMomentum:c("socialMomentum","Social momentum","Uses shared rhythm, collaboration, or review when explicitly wanted."),deadlineSprint:c("deadlineSprint","Deadline sprint","Supports short-term urgency and focused execution."),minimalNudge:c("minimalNudge","Minimal nudge","Keeps behavior support low-noise with minimal intervention.")};function G(e){let r=d[e];return{...r,dimensions:{...r.dimensions}}}function c(e,r,t){return{id:e,label:r,intent:t,dimensions:h[e]}}function S(e){let r=A(),t=[],i=0,o=(m,u,n)=>{if(r[m]+=u,n)t.push(n)};if(e.startSupport)i+=1,w(e.startSupport,o);if(e.actionSize)i+=1,F(e.actionSize,o);if(e.recoveryPreference)i+=1,D(e.recoveryPreference,o);if(e.accountabilityPreference)i+=1,R(e.accountabilityPreference,o);if(e.rhythmPreference)i+=1,I(e.rhythmPreference,o);if(e.meaningPreference)i+=1,M(e.meaningPreference,o);if(e.reflectionPreference)i+=1,T(e.reflectionPreference,o);if(e.role)t.push("Role text was recorded for context but did not score support presets.");return{scores:r,reasons:t,signalCount:i}}function v(e,r,t){if(t===0)return 0.35;let i=0.45+Math.min(e/(t*4),0.4)+Math.min((e-r)*0.05,0.15);return Math.round(Math.min(i,0.95)*100)/100}function A(){return y.reduce((e,r)=>({...e,[r]:r==="steadyMomentum"?1:0}),{})}function w(e,r){if(e==="self-start")r("minimalNudge",4,"You prefer low-noise starts.");if(e==="prompt")r("steadyMomentum",3,"You prefer a clear prompt to begin.");if(e==="guided")r("activationFirst",4,"You prefer guided start support.");if(e==="ritual")r("deepWorkBuilder",4,"You prefer a repeatable start ritual.")}function F(e,r){if(e==="tiny")r("activationFirst",3,"Tiny first steps feel easier to trust.");if(e==="small")r("permissionFirst",3,"Small first steps feel easier to trust.");if(e==="standard")r("steadyMomentum",2,"Standard next actions fit you.");if(e==="large")r("deepWorkBuilder",2,"You prefer substantial action blocks.")}function D(e,r){if(e==="repair")r("recoveryFirst",5,"Repair should be easy after a miss.");if(e==="renegotiate")r("permissionFirst",4,"Renegotiation should stay available.");if(e==="resume")r("steadyMomentum",2,"You prefer to resume without a reset.");if(e==="reset")r("activationFirst",2,"A clean restart can be useful.")}function R(e,r){if(e==="private")r("minimalNudge",3,"You prefer private progress.");if(e==="self-review")r("selfAuthorityBuilder",3,"You prefer self-review.");if(e==="shared-review")r("socialMomentum",4,"You prefer shared review.")}function I(e,r){if(e==="flexible")r("permissionFirst",2);if(e==="steady")r("steadyMomentum",3);if(e==="focus-block")r("deepWorkBuilder",4);if(e==="deadline")r("deadlineSprint",4)}function M(e,r){if(e==="mastery")r("deepWorkBuilder",3);if(e==="impact")r("deadlineSprint",2);if(e==="relief")r("recoveryFirst",3);if(e==="agency")r("identityBuilder",3);if(e==="progress")r("steadyMomentum",2)}function T(e,r){if(e==="none")r("minimalNudge",3);if(e==="brief")r("steadyMomentum",2);if(e==="standard")r("selfAuthorityBuilder",2);if(e==="deep")r("deepWorkBuilder",3)}var b=["balanced","guideMe","summaryFirst","deepAnalyst","builder","opsWarRoom","auditReview","minimalFocus"],g={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"}},l={balanced:s("balanced","Balanced","Safe default for general use."),guideMe:s("guideMe","Guide me","Slower, more guided onboarding for new or uncertain users."),summaryFirst:s("summaryFirst","Summary-first","Compact, fast, dashboard-style usage that starts with summaries."),deepAnalyst:s("deepAnalyst","Deep analyst","Data-rich, evidence-first investigation mode."),builder:s("builder","Builder","Fast, configurable mode for admins, developers, and creators."),opsWarRoom:s("opsWarRoom","Ops war room","Dense, visual, rapid mode for monitoring and incidents."),auditReview:s("auditReview","Audit review","Deliberate, traceable, detail-heavy review mode."),minimalFocus:s("minimalFocus","Minimal focus","Low-noise, focused, simple experience.")};function Z(e){return{...g[e]}}function $(e){let r=l[e];return{...r,dimensions:{...r.dimensions}}}function q(e){return{...l,...e}}function s(e,r,t){return{id:e,label:r,intent:t,dimensions:g[e]}}function x(e){let r=E(),t=[],i=0,o=(a,f,P)=>{if(r[a]+=f,P)t.push(P)};if(e.primaryIntent)i+=1,W(e.primaryIntent,o);if(e.wantsStepByStepHelp!==void 0)if(i+=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)i+=1,Y(e.detailPreference,o);if(e.pacePreference)i+=1,_(e.pacePreference,o);if(e.controlPreference)i+=1,O(e.controlPreference,o);if(e.mediaPreference)i+=1,k(e.mediaPreference,o);if(e.role)t.push("Role text was recorded for context but did not score presets.");let m=b.map((a)=>({preset:a,score:r[a]})).sort((a,f)=>f.score-a.score),u=m[0]??{preset:"balanced",score:1},n=m[1]?.score??0,p=B(u.score,n,i);return{selectedPreset:u.preset,confidence:p,reasons:t.length?N(t):["Balanced is the default when onboarding signals are sparse."],alternatives:m.slice(1,4).map(({preset:a,score:f})=>({preset:a,confidence:B(f,0,i),reason:l[a].intent}))}}function E(){return b.reduce((e,r)=>({...e,[r]:r==="balanced"?1:0}),{})}function W(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 Y(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 _(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 O(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 k(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,t){if(t===0)return 0.35;let i=0.45+Math.min(e/(t*4),0.4)+Math.min((e-r)*0.05,0.15);return Math.round(Math.min(i,0.95)*100)/100}function N(e){return Array.from(new Set(e))}function ne(e){let r=x(e.interaction??{}),t=z(e.behaviorSupport??{}),i=Math.round((r.confidence+t.confidence)/2*100)/100;return{selectedInteractionPreset:r.selectedPreset,selectedBehaviorSupportPreset:t.selectedPreset,confidence:i,reasons:[...r.reasons,...t.reasons],alternativeInteractionPresets:r.alternatives,alternativeBehaviorSupportPresets:t.alternatives,editableDimensions:{interaction:["guidance","density","dataDepth","control","media","pace","narrative"],behaviorSupport:t.editableDimensions}}}function z(e){let{scores:r,reasons:t,signalCount:i}=S(e),o=y.map((n)=>({preset:n,score:r[n]})).sort((n,p)=>p.score-n.score),m=o[0]??{preset:"steadyMomentum",score:1},u=o[1]?.score??0;return{selectedPreset:m.preset,confidence:v(m.score,u,i),reasons:t.length?Array.from(new Set(t)):["Steady momentum is the default when support signals are sparse."],alternatives:o.slice(1,4).map(({preset:n,score:p})=>({preset:n,confidence:v(p,0,i),reason:d[n].intent})),editableDimensions:["attention","activation","actionScale","rhythm","environment","challenge","meaningFrame","permission","selfAuthority","accountability","recovery","reflection"]}}export{z as recommendBehaviorSupportPreset,ne as recommendAdaptiveExperience};
@@ -0,0 +1,50 @@
1
+ export type AdaptiveScopeLevel = 'surface' | 'workflow' | 'workspace' | 'user';
2
+ export type BehaviorSignalConfidence = 'low' | 'medium' | 'high';
3
+ export type BehaviorSignalSafetyLevel = 'safe' | 'review' | 'high-impact';
4
+ export type BehaviorSignalKind = 'baseline' | 'repeated_pattern' | 'deviation' | 'signal_cluster' | 'user_feedback';
5
+ export type BehaviorSignalSource = 'direct-interaction' | 'explicit-feedback' | 'system-observation' | 'imported';
6
+ export interface AdaptiveScope {
7
+ level: AdaptiveScopeLevel;
8
+ id?: string;
9
+ }
10
+ export interface BehaviorSignalTimeWindow {
11
+ start: string;
12
+ end?: string;
13
+ }
14
+ export interface BehaviorSuggestedAdaptation {
15
+ id: string;
16
+ label: string;
17
+ description: string;
18
+ target: 'preference' | 'behaviorSupport' | 'runtimeAction';
19
+ dimension?: string;
20
+ value?: string;
21
+ scope: AdaptiveScope;
22
+ impact: 'low' | 'medium' | 'high';
23
+ requiresConfirmation?: boolean;
24
+ }
25
+ export interface BehaviorSignalEvidence {
26
+ baseline?: string;
27
+ repeatedPattern?: string;
28
+ deviationFromBaseline?: string;
29
+ signalCluster?: string[];
30
+ timeWindow: BehaviorSignalTimeWindow;
31
+ scope: AdaptiveScope;
32
+ confidence: BehaviorSignalConfidence;
33
+ source: BehaviorSignalSource;
34
+ userFeedback?: 'accepted' | 'rejected' | 'corrected' | 'not-asked';
35
+ suggestedAdaptation?: BehaviorSuggestedAdaptation;
36
+ safetyLevel: BehaviorSignalSafetyLevel;
37
+ observations: string[];
38
+ }
39
+ export interface BehaviorSignalModel {
40
+ id: string;
41
+ kind: BehaviorSignalKind;
42
+ summary: string;
43
+ evidence: BehaviorSignalEvidence;
44
+ prohibitedConclusions: string[];
45
+ createdAt?: string;
46
+ }
47
+ export declare const UNSAFE_BEHAVIOR_LABELS: readonly ["lazy", "avoidant", "anxious", "weak discipline", "low motivation", "needy", "approval-seeking", "procrastinator", "high-value user", "low-value user", "compliant user", "manipulable user", "unreliable", "low-performing"];
48
+ export type UnsafeBehaviorLabel = (typeof UNSAFE_BEHAVIOR_LABELS)[number];
49
+ export declare function findUnsafeBehaviorLanguage(values: string[]): UnsafeBehaviorLabel[];
50
+ export declare function createBehaviorSignalModel(signal: Omit<BehaviorSignalModel, 'prohibitedConclusions'>): BehaviorSignalModel;
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ var a=["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 t(e){let i=e.join(" ").toLowerCase();return a.filter((n)=>i.includes(n))}function r(e){let i=t([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{t as findUnsafeBehaviorLanguage,r as createBehaviorSignalModel,a as UNSAFE_BEHAVIOR_LABELS};
@@ -0,0 +1,22 @@
1
+ import type { BehaviorSupportDimensions } from './behavior-support';
2
+ import { type BehaviorSupportPresetId } from './behavior-support-presets';
3
+ export interface BehaviorSupportPresetDefinition<TId extends string = BehaviorSupportPresetId> {
4
+ id: TId;
5
+ label: string;
6
+ intent: string;
7
+ dimensions: BehaviorSupportDimensions;
8
+ }
9
+ export type BehaviorSupportPresetCatalog<TId extends string = BehaviorSupportPresetId> = Record<TId, BehaviorSupportPresetDefinition<TId>>;
10
+ export declare const BEHAVIOR_SUPPORT_PRESET_DEFINITIONS: {
11
+ steadyMomentum: BehaviorSupportPresetDefinition<"steadyMomentum" | "activationFirst" | "permissionFirst" | "deepWorkBuilder" | "recoveryFirst" | "identityBuilder" | "selfAuthorityBuilder" | "socialMomentum" | "deadlineSprint" | "minimalNudge">;
12
+ activationFirst: BehaviorSupportPresetDefinition<"steadyMomentum" | "activationFirst" | "permissionFirst" | "deepWorkBuilder" | "recoveryFirst" | "identityBuilder" | "selfAuthorityBuilder" | "socialMomentum" | "deadlineSprint" | "minimalNudge">;
13
+ permissionFirst: BehaviorSupportPresetDefinition<"steadyMomentum" | "activationFirst" | "permissionFirst" | "deepWorkBuilder" | "recoveryFirst" | "identityBuilder" | "selfAuthorityBuilder" | "socialMomentum" | "deadlineSprint" | "minimalNudge">;
14
+ deepWorkBuilder: BehaviorSupportPresetDefinition<"steadyMomentum" | "activationFirst" | "permissionFirst" | "deepWorkBuilder" | "recoveryFirst" | "identityBuilder" | "selfAuthorityBuilder" | "socialMomentum" | "deadlineSprint" | "minimalNudge">;
15
+ recoveryFirst: BehaviorSupportPresetDefinition<"steadyMomentum" | "activationFirst" | "permissionFirst" | "deepWorkBuilder" | "recoveryFirst" | "identityBuilder" | "selfAuthorityBuilder" | "socialMomentum" | "deadlineSprint" | "minimalNudge">;
16
+ identityBuilder: BehaviorSupportPresetDefinition<"steadyMomentum" | "activationFirst" | "permissionFirst" | "deepWorkBuilder" | "recoveryFirst" | "identityBuilder" | "selfAuthorityBuilder" | "socialMomentum" | "deadlineSprint" | "minimalNudge">;
17
+ selfAuthorityBuilder: BehaviorSupportPresetDefinition<"steadyMomentum" | "activationFirst" | "permissionFirst" | "deepWorkBuilder" | "recoveryFirst" | "identityBuilder" | "selfAuthorityBuilder" | "socialMomentum" | "deadlineSprint" | "minimalNudge">;
18
+ socialMomentum: BehaviorSupportPresetDefinition<"steadyMomentum" | "activationFirst" | "permissionFirst" | "deepWorkBuilder" | "recoveryFirst" | "identityBuilder" | "selfAuthorityBuilder" | "socialMomentum" | "deadlineSprint" | "minimalNudge">;
19
+ deadlineSprint: BehaviorSupportPresetDefinition<"steadyMomentum" | "activationFirst" | "permissionFirst" | "deepWorkBuilder" | "recoveryFirst" | "identityBuilder" | "selfAuthorityBuilder" | "socialMomentum" | "deadlineSprint" | "minimalNudge">;
20
+ minimalNudge: BehaviorSupportPresetDefinition<"steadyMomentum" | "activationFirst" | "permissionFirst" | "deepWorkBuilder" | "recoveryFirst" | "identityBuilder" | "selfAuthorityBuilder" | "socialMomentum" | "deadlineSprint" | "minimalNudge">;
21
+ };
22
+ export declare function getBehaviorSupportPresetDefinition(id: BehaviorSupportPresetId): BehaviorSupportPresetDefinition;
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ 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,146 @@
1
+ import type { BehaviorSupportDimensions } from './behavior-support';
2
+ export declare const BEHAVIOR_SUPPORT_PRESET_IDS: readonly ["steadyMomentum", "activationFirst", "permissionFirst", "deepWorkBuilder", "recoveryFirst", "identityBuilder", "selfAuthorityBuilder", "socialMomentum", "deadlineSprint", "minimalNudge"];
3
+ export type BehaviorSupportPresetId = (typeof BEHAVIOR_SUPPORT_PRESET_IDS)[number];
4
+ export declare const BEHAVIOR_SUPPORT_PRESETS: {
5
+ steadyMomentum: {
6
+ attention: "next-step";
7
+ activation: "prompted";
8
+ actionScale: "standard";
9
+ rhythm: "steady";
10
+ environment: "structured";
11
+ challenge: "moderate";
12
+ meaningFrame: "progress";
13
+ permission: "proceed";
14
+ selfAuthority: "structured";
15
+ accountability: "self-review";
16
+ recovery: "resume";
17
+ reflection: "brief";
18
+ };
19
+ activationFirst: {
20
+ attention: "next-step";
21
+ activation: "guided-start";
22
+ actionScale: "small";
23
+ rhythm: "flexible";
24
+ environment: "structured";
25
+ challenge: "low";
26
+ meaningFrame: "relief";
27
+ permission: "start-smaller";
28
+ selfAuthority: "confidence-building";
29
+ accountability: "private";
30
+ recovery: "resume";
31
+ reflection: "brief";
32
+ };
33
+ permissionFirst: {
34
+ attention: "ambient";
35
+ activation: "prompted";
36
+ actionScale: "small";
37
+ rhythm: "flexible";
38
+ environment: "open";
39
+ challenge: "low";
40
+ meaningFrame: "agency";
41
+ permission: "renegotiate";
42
+ selfAuthority: "confidence-building";
43
+ accountability: "private";
44
+ recovery: "renegotiate";
45
+ reflection: "brief";
46
+ };
47
+ deepWorkBuilder: {
48
+ attention: "priority";
49
+ activation: "ritual";
50
+ actionScale: "standard";
51
+ rhythm: "time-boxed";
52
+ environment: "focused";
53
+ challenge: "stretch";
54
+ meaningFrame: "mastery";
55
+ permission: "proceed";
56
+ selfAuthority: "high-autonomy";
57
+ accountability: "self-review";
58
+ recovery: "repair";
59
+ reflection: "standard";
60
+ };
61
+ recoveryFirst: {
62
+ attention: "next-step";
63
+ activation: "guided-start";
64
+ actionScale: "small";
65
+ rhythm: "flexible";
66
+ environment: "structured";
67
+ challenge: "low";
68
+ meaningFrame: "relief";
69
+ permission: "renegotiate";
70
+ selfAuthority: "confidence-building";
71
+ accountability: "private";
72
+ recovery: "repair";
73
+ reflection: "brief";
74
+ };
75
+ identityBuilder: {
76
+ attention: "review";
77
+ activation: "ritual";
78
+ actionScale: "standard";
79
+ rhythm: "steady";
80
+ environment: "structured";
81
+ challenge: "moderate";
82
+ meaningFrame: "agency";
83
+ permission: "proceed";
84
+ selfAuthority: "structured";
85
+ accountability: "self-review";
86
+ recovery: "repair";
87
+ reflection: "standard";
88
+ };
89
+ selfAuthorityBuilder: {
90
+ attention: "priority";
91
+ activation: "prompted";
92
+ actionScale: "standard";
93
+ rhythm: "steady";
94
+ environment: "structured";
95
+ challenge: "moderate";
96
+ meaningFrame: "agency";
97
+ permission: "proceed";
98
+ selfAuthority: "confidence-building";
99
+ accountability: "self-review";
100
+ recovery: "repair";
101
+ reflection: "standard";
102
+ };
103
+ socialMomentum: {
104
+ attention: "priority";
105
+ activation: "prompted";
106
+ actionScale: "standard";
107
+ rhythm: "steady";
108
+ environment: "collaborative";
109
+ challenge: "moderate";
110
+ meaningFrame: "belonging";
111
+ permission: "proceed";
112
+ selfAuthority: "structured";
113
+ accountability: "peer-review";
114
+ recovery: "repair";
115
+ reflection: "brief";
116
+ };
117
+ deadlineSprint: {
118
+ attention: "priority";
119
+ activation: "prompted";
120
+ actionScale: "small";
121
+ rhythm: "deadline-driven";
122
+ environment: "focused";
123
+ challenge: "stretch";
124
+ meaningFrame: "impact";
125
+ permission: "proceed";
126
+ selfAuthority: "structured";
127
+ accountability: "self-review";
128
+ recovery: "resume";
129
+ reflection: "brief";
130
+ };
131
+ minimalNudge: {
132
+ attention: "ambient";
133
+ activation: "self-start";
134
+ actionScale: "standard";
135
+ rhythm: "flexible";
136
+ environment: "open";
137
+ challenge: "moderate";
138
+ meaningFrame: "progress";
139
+ permission: "proceed";
140
+ selfAuthority: "high-autonomy";
141
+ accountability: "private";
142
+ recovery: "resume";
143
+ reflection: "none";
144
+ };
145
+ };
146
+ export declare function getBehaviorSupportPresetDimensions(id: BehaviorSupportPresetId): BehaviorSupportDimensions;
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ 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,18 @@
1
+ export interface BehaviorSupportDimensions {
2
+ attention: 'ambient' | 'next-step' | 'priority' | 'review';
3
+ activation: 'self-start' | 'prompted' | 'guided-start' | 'ritual';
4
+ actionScale: 'tiny' | 'small' | 'standard' | 'large';
5
+ rhythm: 'flexible' | 'steady' | 'time-boxed' | 'deadline-driven';
6
+ environment: 'open' | 'structured' | 'focused' | 'collaborative';
7
+ challenge: 'low' | 'moderate' | 'stretch' | 'high';
8
+ meaningFrame: 'progress' | 'mastery' | 'impact' | 'relief' | 'belonging' | 'agency';
9
+ permission: 'proceed' | 'start-smaller' | 'pause' | 'renegotiate';
10
+ selfAuthority: 'light' | 'structured' | 'confidence-building' | 'high-autonomy';
11
+ accountability: 'private' | 'self-review' | 'peer-review' | 'external-review';
12
+ recovery: 'resume' | 'repair' | 'reset' | 'renegotiate';
13
+ reflection: 'none' | 'brief' | 'standard' | 'deep';
14
+ }
15
+ export type BehaviorSupportDimension = keyof BehaviorSupportDimensions;
16
+ export type BehaviorSupportDimensionValue = BehaviorSupportDimensions[BehaviorSupportDimension];
17
+ export * from './behavior-support-preset-definitions';
18
+ export * from './behavior-support-presets';
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ 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};
@@ -0,0 +1 @@
1
+ export {};
package/dist/index.d.ts CHANGED
@@ -1,5 +1,10 @@
1
1
  export * from './adapter';
2
+ export * from './adaptive-evolution';
3
+ export * from './adaptive-experience';
4
+ export * from './adaptive-onboarding';
2
5
  export * from './analyzer';
6
+ export * from './behavior-signals';
7
+ export * from './behavior-support';
3
8
  export * from './data-view-preferences';
4
9
  export * from './preference-dimensions';
5
10
  export * from './store';
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- 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
2
+ 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
3
3
 
4
4
  \`@contractspec/lib.personalization\` provides primitives to observe how tenants/users interact with specs and turn that telemetry into personalization insights.
5
5
 
@@ -78,7 +78,7 @@ When the adapter returns an overlay spec, pass it to the overlay engine to regis
78
78
 
79
79
 
80
80
 
81
- `}];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
81
+ `}];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
82
82
 
83
83
  \`@contractspec/lib.overlay-engine\` is the canonical runtime for OverlaySpecs. It validates specs, tracks scope precedence, and exposes hooks for React renderers.
84
84
 
@@ -158,7 +158,7 @@ const result = engine.apply({
158
158
 
159
159
 
160
160
 
161
- `}];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
161
+ `}];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
162
162
 
163
163
  \`@contractspec/lib.workflow-composer\` composes base WorkflowSpecs with tenant/role/device-specific extensions.
164
164
 
@@ -210,4 +210,4 @@ workflowRunner.execute(runtimeSpec, ctx);
210
210
  - \`metadata\` and \`annotations\` overlays are merged into the composed runtime workflow for downstream observability and rollout tracing.
211
211
 
212
212
  This keeps tenant overlays additive, auditable, and replay-safe.
213
- `}];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};
213
+ `}];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 f=new Set(["control","dataDepth"]);function l({current:e,observations:r,preferredScope:n="surface",minimumEvidenceCount:i=3,minimumSessionCount:o=2,minimumSurfaceCountForGlobal:t=2}){let u=new Set(r.filter((c)=>c.explicit===!0).map((c)=>c.dimension));return v(r).filter((c)=>c.value!==e[c.dimension]).filter((c)=>!u.has(c.dimension)||c.explicit).map((c)=>P(c,e,{minimumEvidenceCount:i,minimumSessionCount:o,minimumSurfaceCountForGlobal:t,preferredScope:n})).filter((c)=>c!==void 0)}function v(e){let r=new Map;for(let n of e){if(!S(n.dimension,n.value))continue;let i=[n.dimension,n.value,n.signal,n.explicit?"explicit":"inferred"].join(":"),o=r.get(i);if(o)o.events.push(n);else r.set(i,{dimension:n.dimension,value:n.value,signal:n.signal,explicit:n.explicit===!0,events:[n]})}return Array.from(r.values())}function P(e,r,n){let i=a(e.events,e.signal);if(!e.explicit&&i.count<n.minimumEvidenceCount)return;if(!e.explicit&&i.sessionCount<n.minimumSessionCount)return;let o=d(e,i,n),t=!e.explicit||o!=="surface"||f.has(e.dimension);return{id:["preference-evolution",o,e.dimension,String(e.value)].join(":"),dimension:e.dimension,from:r[e.dimension],to:e.value,scope:o,requiresConfirmation:t,reversible:!0,reasons:C(e,i,o),evidence:i,patch:{[e.dimension]:e.value}}}function d(e,r,n){if(e.explicit)return n.preferredScope;if(n.preferredScope==="surface")return"surface";return r.surfaceCount>=n.minimumSurfaceCountForGlobal?n.preferredScope:"surface"}function a(e,r){let n=new Set(e.map((o)=>o.sessionId).filter(Boolean)),i=new Set(e.map((o)=>o.surfaceId).filter(Boolean));return{signal:r,count:e.reduce((o,t)=>o+(t.count??1),0),sessionCount:n.size||1,surfaceCount:i.size||1,reasons:Array.from(new Set(e.flatMap((o)=>o.reason?[o.reason]:[])))}}function C(e,r,n){let i=[`Observed ${r.count} ${e.signal.replaceAll("_"," ")} signals across ${r.sessionCount} session(s).`,`Suggested as a ${n} preference change, not a hidden global mutation.`];if(e.explicit)i.push("Explicit user choices take priority over inferred behavior.");if(f.has(e.dimension))i.push("This dimension can affect control or data exposure, so confirmation is required.");return[...i,...r.reasons]}var p={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 S(e,r){return p[e].includes(`|${r}|`)}var m=new Set(["challenge","accountability","environment"]);function U({currentPreferences:e,currentBehaviorSupport:r,preferenceObservations:n=[],behaviorSignals:i=[],preferredScope:o="surface"}){let t=l({current:e,observations:n,preferredScope:o}),u=D({currentBehaviorSupport:r,behaviorSignals:i});return{preferenceSuggestions:t,behaviorSupportSuggestions:u.suggestions,suppressedSuggestions:u.suppressed}}function D({currentBehaviorSupport:e,behaviorSignals:r}){let n=[],i=[];for(let o of r??[]){let t=o.evidence.suggestedAdaptation;if(!t||t.target!=="behaviorSupport")continue;let u=t.dimension;if(!M(u)){i.push({id:t.id,reason:"Suggested behavior support dimension is not recognized.",signalIds:[o.id]});continue}if(!g(u,t.value)){i.push({id:t.id,reason:"Suggested behavior support value does not match the dimension.",signalIds:[o.id]});continue}let s=t.value;if(s===e[u])continue;let c=(t.requiresConfirmation??t.impact!=="low")||m.has(u);n.push({id:t.id,dimension:u,from:e[u],to:s,scope:t.scope.level,requiresConfirmation:c,reversible:!0,automatic:!1,reasons:I(o,u),evidence:{signalIds:[o.id],confidence:o.evidence.confidence,observations:o.evidence.observations},patch:{[u]:s}})}return{suggestions:n,suppressed:i}}function I(e,r){let n=["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(m.has(r))n.push("Changes to challenge, accountability, or social exposure require confirmation.");if(e.evidence.userFeedback)n.push(`User feedback state: ${e.evidence.userFeedback}.`);return n}var E={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 M(e){return Object.prototype.hasOwnProperty.call(E,e)}function g(e,r){return r?E[e].includes(r):!1}export{U as suggestAdaptiveExperienceEvolution};
@@ -0,0 +1 @@
1
+ function y({preferences:e,behaviorSupport:i,behaviorSignals:s=[],context:c={},permissions:a=[],constraints:r=[],policies:p=[],overrides:o=[]}){let d=s.flatMap(g),n=[],u=[];for(let t of d){let v=h(t,p,o),l=E(v,a,r,p,o);if(l)u.push({...v,suppressedReason:l});else n.push(v)}let A=s.map((t)=>t.id),x=b({appliedAdaptations:n,suppressedAdaptations:u,overrides:o});return{interaction:{...e},behaviorSupport:{...i},context:{...c},appliedAdaptations:n,suppressedAdaptations:u,reasons:x,evidenceIds:A,constraints:r.map((t)=>({...t})),permissions:a.map((t)=>({...t})),policies:p.map((t)=>({...t})),overrides:o.map((t)=>({...t})),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:m(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 m(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(e,i,s,c,a){let r=a.find((n)=>n.target==="runtimeAction"&&f(e,n.key)&&n.value===!1);if(r)return r.reason??"Explicit override disabled this action.";let p=i.find((n)=>!n.allowed&&e.id.includes(n.key));if(p)return p.reason??"Permission denied.";let o=s.find((n)=>n.blocksAdaptation&&(!n.target||e.id.includes(n.target)));if(o)return o.reason;let d=c.find((n)=>n.effect==="block"&&(!n.target||e.id.includes(n.target)));if(d)return d.reason;return}function h(e,i,s){let c=i.some((r)=>(r.effect==="require-confirmation"||r.effect==="constrain")&&(!r.target||f(e,r.target))),a=s.some((r)=>r.target==="runtimeAction"&&f(e,r.key)&&(r.value==="require-confirmation"||r.value==="confirm"));if(!c&&!a)return e;return{...e,requiresConfirmation:!0}}function f(e,i){return e.id.includes(i)||e.kind===i}function b(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}export{y as resolveAdaptiveExperience};
@@ -0,0 +1 @@
1
+ var s=["steadyMomentum","activationFirst","permissionFirst","deepWorkBuilder","recoveryFirst","identityBuilder","selfAuthorityBuilder","socialMomentum","deadlineSprint","minimalNudge"],a={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 b(e){return{...a[e]}}var u={steadyMomentum:i("steadyMomentum","Steady momentum","Consistent progress with moderate support."),activationFirst:i("activationFirst","Activation-first","Reduces start friction and makes the first useful action easier."),permissionFirst:i("permissionFirst","Permission-first","Helps users start smaller, pause, or renegotiate without friction."),deepWorkBuilder:i("deepWorkBuilder","Deep work builder","Protects focus, mastery, and intentional work."),recoveryFirst:i("recoveryFirst","Recovery-first","Makes repair and resumption easier after misses or interruptions."),identityBuilder:i("identityBuilder","Identity builder","Connects action to user-defined values or commitments."),selfAuthorityBuilder:i("selfAuthorityBuilder","Self-authority builder","Builds confidence, composure, structure, and follow-through."),socialMomentum:i("socialMomentum","Social momentum","Uses shared rhythm, collaboration, or review when explicitly wanted."),deadlineSprint:i("deadlineSprint","Deadline sprint","Supports short-term urgency and focused execution."),minimalNudge:i("minimalNudge","Minimal nudge","Keeps behavior support low-noise with minimal intervention.")};function A(e){let r=u[e];return{...r,dimensions:{...r.dimensions}}}function i(e,r,o){return{id:e,label:r,intent:o,dimensions:a[e]}}function k(e){let r=f(),o=[],t=0,n=(m,p,c)=>{if(r[m]+=p,c)o.push(c)};if(e.startSupport)t+=1,l(e.startSupport,n);if(e.actionSize)t+=1,d(e.actionSize,n);if(e.recoveryPreference)t+=1,y(e.recoveryPreference,n);if(e.accountabilityPreference)t+=1,h(e.accountabilityPreference,n);if(e.rhythmPreference)t+=1,v(e.rhythmPreference,n);if(e.meaningPreference)t+=1,S(e.meaningPreference,n);if(e.reflectionPreference)t+=1,g(e.reflectionPreference,n);if(e.role)o.push("Role text was recorded for context but did not score support presets.");return{scores:r,reasons:o,signalCount:t}}function I(e,r,o){if(o===0)return 0.35;let t=0.45+Math.min(e/(o*4),0.4)+Math.min((e-r)*0.05,0.15);return Math.round(Math.min(t,0.95)*100)/100}function f(){return s.reduce((e,r)=>({...e,[r]:r==="steadyMomentum"?1:0}),{})}function l(e,r){if(e==="self-start")r("minimalNudge",4,"You prefer low-noise starts.");if(e==="prompt")r("steadyMomentum",3,"You prefer a clear prompt to begin.");if(e==="guided")r("activationFirst",4,"You prefer guided start support.");if(e==="ritual")r("deepWorkBuilder",4,"You prefer a repeatable start ritual.")}function d(e,r){if(e==="tiny")r("activationFirst",3,"Tiny first steps feel easier to trust.");if(e==="small")r("permissionFirst",3,"Small first steps feel easier to trust.");if(e==="standard")r("steadyMomentum",2,"Standard next actions fit you.");if(e==="large")r("deepWorkBuilder",2,"You prefer substantial action blocks.")}function y(e,r){if(e==="repair")r("recoveryFirst",5,"Repair should be easy after a miss.");if(e==="renegotiate")r("permissionFirst",4,"Renegotiation should stay available.");if(e==="resume")r("steadyMomentum",2,"You prefer to resume without a reset.");if(e==="reset")r("activationFirst",2,"A clean restart can be useful.")}function h(e,r){if(e==="private")r("minimalNudge",3,"You prefer private progress.");if(e==="self-review")r("selfAuthorityBuilder",3,"You prefer self-review.");if(e==="shared-review")r("socialMomentum",4,"You prefer shared review.")}function v(e,r){if(e==="flexible")r("permissionFirst",2);if(e==="steady")r("steadyMomentum",3);if(e==="focus-block")r("deepWorkBuilder",4);if(e==="deadline")r("deadlineSprint",4)}function S(e,r){if(e==="mastery")r("deepWorkBuilder",3);if(e==="impact")r("deadlineSprint",2);if(e==="relief")r("recoveryFirst",3);if(e==="agency")r("identityBuilder",3);if(e==="progress")r("steadyMomentum",2)}function g(e,r){if(e==="none")r("minimalNudge",3);if(e==="brief")r("steadyMomentum",2);if(e==="standard")r("selfAuthorityBuilder",2);if(e==="deep")r("deepWorkBuilder",3)}export{k as scoreBehaviorSupportSignals,I as calculateBehaviorRecommendationConfidence};
@@ -0,0 +1 @@
1
+ var y=["steadyMomentum","activationFirst","permissionFirst","deepWorkBuilder","recoveryFirst","identityBuilder","selfAuthorityBuilder","socialMomentum","deadlineSprint","minimalNudge"],h={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 H(e){return{...h[e]}}var d={steadyMomentum:c("steadyMomentum","Steady momentum","Consistent progress with moderate support."),activationFirst:c("activationFirst","Activation-first","Reduces start friction and makes the first useful action easier."),permissionFirst:c("permissionFirst","Permission-first","Helps users start smaller, pause, or renegotiate without friction."),deepWorkBuilder:c("deepWorkBuilder","Deep work builder","Protects focus, mastery, and intentional work."),recoveryFirst:c("recoveryFirst","Recovery-first","Makes repair and resumption easier after misses or interruptions."),identityBuilder:c("identityBuilder","Identity builder","Connects action to user-defined values or commitments."),selfAuthorityBuilder:c("selfAuthorityBuilder","Self-authority builder","Builds confidence, composure, structure, and follow-through."),socialMomentum:c("socialMomentum","Social momentum","Uses shared rhythm, collaboration, or review when explicitly wanted."),deadlineSprint:c("deadlineSprint","Deadline sprint","Supports short-term urgency and focused execution."),minimalNudge:c("minimalNudge","Minimal nudge","Keeps behavior support low-noise with minimal intervention.")};function G(e){let r=d[e];return{...r,dimensions:{...r.dimensions}}}function c(e,r,t){return{id:e,label:r,intent:t,dimensions:h[e]}}function S(e){let r=A(),t=[],i=0,o=(m,u,n)=>{if(r[m]+=u,n)t.push(n)};if(e.startSupport)i+=1,w(e.startSupport,o);if(e.actionSize)i+=1,F(e.actionSize,o);if(e.recoveryPreference)i+=1,D(e.recoveryPreference,o);if(e.accountabilityPreference)i+=1,R(e.accountabilityPreference,o);if(e.rhythmPreference)i+=1,I(e.rhythmPreference,o);if(e.meaningPreference)i+=1,M(e.meaningPreference,o);if(e.reflectionPreference)i+=1,T(e.reflectionPreference,o);if(e.role)t.push("Role text was recorded for context but did not score support presets.");return{scores:r,reasons:t,signalCount:i}}function v(e,r,t){if(t===0)return 0.35;let i=0.45+Math.min(e/(t*4),0.4)+Math.min((e-r)*0.05,0.15);return Math.round(Math.min(i,0.95)*100)/100}function A(){return y.reduce((e,r)=>({...e,[r]:r==="steadyMomentum"?1:0}),{})}function w(e,r){if(e==="self-start")r("minimalNudge",4,"You prefer low-noise starts.");if(e==="prompt")r("steadyMomentum",3,"You prefer a clear prompt to begin.");if(e==="guided")r("activationFirst",4,"You prefer guided start support.");if(e==="ritual")r("deepWorkBuilder",4,"You prefer a repeatable start ritual.")}function F(e,r){if(e==="tiny")r("activationFirst",3,"Tiny first steps feel easier to trust.");if(e==="small")r("permissionFirst",3,"Small first steps feel easier to trust.");if(e==="standard")r("steadyMomentum",2,"Standard next actions fit you.");if(e==="large")r("deepWorkBuilder",2,"You prefer substantial action blocks.")}function D(e,r){if(e==="repair")r("recoveryFirst",5,"Repair should be easy after a miss.");if(e==="renegotiate")r("permissionFirst",4,"Renegotiation should stay available.");if(e==="resume")r("steadyMomentum",2,"You prefer to resume without a reset.");if(e==="reset")r("activationFirst",2,"A clean restart can be useful.")}function R(e,r){if(e==="private")r("minimalNudge",3,"You prefer private progress.");if(e==="self-review")r("selfAuthorityBuilder",3,"You prefer self-review.");if(e==="shared-review")r("socialMomentum",4,"You prefer shared review.")}function I(e,r){if(e==="flexible")r("permissionFirst",2);if(e==="steady")r("steadyMomentum",3);if(e==="focus-block")r("deepWorkBuilder",4);if(e==="deadline")r("deadlineSprint",4)}function M(e,r){if(e==="mastery")r("deepWorkBuilder",3);if(e==="impact")r("deadlineSprint",2);if(e==="relief")r("recoveryFirst",3);if(e==="agency")r("identityBuilder",3);if(e==="progress")r("steadyMomentum",2)}function T(e,r){if(e==="none")r("minimalNudge",3);if(e==="brief")r("steadyMomentum",2);if(e==="standard")r("selfAuthorityBuilder",2);if(e==="deep")r("deepWorkBuilder",3)}var b=["balanced","guideMe","summaryFirst","deepAnalyst","builder","opsWarRoom","auditReview","minimalFocus"],g={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"}},l={balanced:s("balanced","Balanced","Safe default for general use."),guideMe:s("guideMe","Guide me","Slower, more guided onboarding for new or uncertain users."),summaryFirst:s("summaryFirst","Summary-first","Compact, fast, dashboard-style usage that starts with summaries."),deepAnalyst:s("deepAnalyst","Deep analyst","Data-rich, evidence-first investigation mode."),builder:s("builder","Builder","Fast, configurable mode for admins, developers, and creators."),opsWarRoom:s("opsWarRoom","Ops war room","Dense, visual, rapid mode for monitoring and incidents."),auditReview:s("auditReview","Audit review","Deliberate, traceable, detail-heavy review mode."),minimalFocus:s("minimalFocus","Minimal focus","Low-noise, focused, simple experience.")};function Z(e){return{...g[e]}}function $(e){let r=l[e];return{...r,dimensions:{...r.dimensions}}}function q(e){return{...l,...e}}function s(e,r,t){return{id:e,label:r,intent:t,dimensions:g[e]}}function x(e){let r=E(),t=[],i=0,o=(a,f,P)=>{if(r[a]+=f,P)t.push(P)};if(e.primaryIntent)i+=1,W(e.primaryIntent,o);if(e.wantsStepByStepHelp!==void 0)if(i+=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)i+=1,Y(e.detailPreference,o);if(e.pacePreference)i+=1,_(e.pacePreference,o);if(e.controlPreference)i+=1,O(e.controlPreference,o);if(e.mediaPreference)i+=1,k(e.mediaPreference,o);if(e.role)t.push("Role text was recorded for context but did not score presets.");let m=b.map((a)=>({preset:a,score:r[a]})).sort((a,f)=>f.score-a.score),u=m[0]??{preset:"balanced",score:1},n=m[1]?.score??0,p=B(u.score,n,i);return{selectedPreset:u.preset,confidence:p,reasons:t.length?N(t):["Balanced is the default when onboarding signals are sparse."],alternatives:m.slice(1,4).map(({preset:a,score:f})=>({preset:a,confidence:B(f,0,i),reason:l[a].intent}))}}function E(){return b.reduce((e,r)=>({...e,[r]:r==="balanced"?1:0}),{})}function W(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 Y(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 _(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 O(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 k(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,t){if(t===0)return 0.35;let i=0.45+Math.min(e/(t*4),0.4)+Math.min((e-r)*0.05,0.15);return Math.round(Math.min(i,0.95)*100)/100}function N(e){return Array.from(new Set(e))}function ne(e){let r=x(e.interaction??{}),t=z(e.behaviorSupport??{}),i=Math.round((r.confidence+t.confidence)/2*100)/100;return{selectedInteractionPreset:r.selectedPreset,selectedBehaviorSupportPreset:t.selectedPreset,confidence:i,reasons:[...r.reasons,...t.reasons],alternativeInteractionPresets:r.alternatives,alternativeBehaviorSupportPresets:t.alternatives,editableDimensions:{interaction:["guidance","density","dataDepth","control","media","pace","narrative"],behaviorSupport:t.editableDimensions}}}function z(e){let{scores:r,reasons:t,signalCount:i}=S(e),o=y.map((n)=>({preset:n,score:r[n]})).sort((n,p)=>p.score-n.score),m=o[0]??{preset:"steadyMomentum",score:1},u=o[1]?.score??0;return{selectedPreset:m.preset,confidence:v(m.score,u,i),reasons:t.length?Array.from(new Set(t)):["Steady momentum is the default when support signals are sparse."],alternatives:o.slice(1,4).map(({preset:n,score:p})=>({preset:n,confidence:v(p,0,i),reason:d[n].intent})),editableDimensions:["attention","activation","actionScale","rhythm","environment","challenge","meaningFrame","permission","selfAuthority","accountability","recovery","reflection"]}}export{z as recommendBehaviorSupportPreset,ne as recommendAdaptiveExperience};
@@ -0,0 +1 @@
1
+ var a=["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 t(e){let i=e.join(" ").toLowerCase();return a.filter((n)=>i.includes(n))}function r(e){let i=t([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{t as findUnsafeBehaviorLanguage,r as createBehaviorSignalModel,a as UNSAFE_BEHAVIOR_LABELS};