@contractspec/example.personalization 3.7.20 → 3.7.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +12 -12
- package/CHANGELOG.md +28 -0
- package/dist/browser/example.js +1 -1
- package/dist/browser/index.js +2 -2
- package/dist/browser/personalization.feature.js +1 -1
- package/dist/example.d.ts +3 -2
- package/dist/example.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -2
- package/dist/node/example.js +1 -1
- package/dist/node/index.js +2 -2
- package/dist/node/personalization.feature.js +1 -1
- package/dist/personalization.feature.js +1 -1
- package/package.json +7 -7
- package/src/example.ts +16 -20
- package/src/index.ts +2 -0
- package/src/personalization.feature.ts +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -2,45 +2,45 @@ $ contractspec-bun-build prebuild
|
|
|
2
2
|
$ bun run build:bundle && bun run build:types
|
|
3
3
|
$ contractspec-bun-build transpile
|
|
4
4
|
[contractspec-bun-build] transpile target=bun root=src entries=10 noBundle=false
|
|
5
|
-
Bundled 10 modules in
|
|
5
|
+
Bundled 10 modules in 16ms
|
|
6
6
|
|
|
7
7
|
./behavior-tracking.js 0.95 KB (entry point)
|
|
8
|
-
./index.js 7.
|
|
8
|
+
./index.js 7.52 KB (entry point)
|
|
9
9
|
./personalization.theme.js 0.88 KB (entry point)
|
|
10
10
|
./workflow-extension.js 1.1 KB (entry point)
|
|
11
11
|
docs/index.js 1.29 KB (entry point)
|
|
12
12
|
docs/personalization.docblock.js 1.29 KB (entry point)
|
|
13
|
-
./example.js 0.
|
|
13
|
+
./example.js 0.67 KB (entry point)
|
|
14
14
|
./overlay-customization.js 1.0 KB (entry point)
|
|
15
15
|
./personalization.experiment.js 1.15 KB (entry point)
|
|
16
|
-
./personalization.feature.js 0.
|
|
16
|
+
./personalization.feature.js 0.56 KB (entry point)
|
|
17
17
|
|
|
18
18
|
[contractspec-bun-build] transpile target=node root=src entries=10 noBundle=false
|
|
19
|
-
Bundled 10 modules in
|
|
19
|
+
Bundled 10 modules in 26ms
|
|
20
20
|
|
|
21
21
|
./behavior-tracking.js 0.94 KB (entry point)
|
|
22
|
-
./index.js 7.
|
|
22
|
+
./index.js 7.51 KB (entry point)
|
|
23
23
|
./personalization.theme.js 0.87 KB (entry point)
|
|
24
24
|
./workflow-extension.js 1.1 KB (entry point)
|
|
25
25
|
docs/index.js 1.28 KB (entry point)
|
|
26
26
|
docs/personalization.docblock.js 1.28 KB (entry point)
|
|
27
|
-
./example.js 0.
|
|
27
|
+
./example.js 0.66 KB (entry point)
|
|
28
28
|
./overlay-customization.js 1.0 KB (entry point)
|
|
29
29
|
./personalization.experiment.js 1.14 KB (entry point)
|
|
30
|
-
./personalization.feature.js 0.
|
|
30
|
+
./personalization.feature.js 0.56 KB (entry point)
|
|
31
31
|
|
|
32
32
|
[contractspec-bun-build] transpile target=browser root=src entries=10 noBundle=false
|
|
33
|
-
Bundled 10 modules in
|
|
33
|
+
Bundled 10 modules in 20ms
|
|
34
34
|
|
|
35
35
|
./behavior-tracking.js 0.94 KB (entry point)
|
|
36
|
-
./index.js 7.
|
|
36
|
+
./index.js 7.51 KB (entry point)
|
|
37
37
|
./personalization.theme.js 0.87 KB (entry point)
|
|
38
38
|
./workflow-extension.js 1.1 KB (entry point)
|
|
39
39
|
docs/index.js 1.28 KB (entry point)
|
|
40
40
|
docs/personalization.docblock.js 1.28 KB (entry point)
|
|
41
|
-
./example.js 0.
|
|
41
|
+
./example.js 0.66 KB (entry point)
|
|
42
42
|
./overlay-customization.js 1.0 KB (entry point)
|
|
43
43
|
./personalization.experiment.js 1.14 KB (entry point)
|
|
44
|
-
./personalization.feature.js 0.
|
|
44
|
+
./personalization.feature.js 0.56 KB (entry point)
|
|
45
45
|
|
|
46
46
|
$ contractspec-bun-build types
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# @contractspec/example.personalization
|
|
2
2
|
|
|
3
|
+
## 3.7.22
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- chore: auto-bump internal dependents
|
|
8
|
+
- Updated dependencies because of chore: auto-bump internal dependents
|
|
9
|
+
- Updated dependencies because of Stabilize Turborepo build caching by making generated artifacts deterministic, modeling web LLM generation explicitly, and avoiding no-op build-tool rewrites.
|
|
10
|
+
- @contractspec/lib.logger@3.7.15
|
|
11
|
+
- @contractspec/lib.overlay-engine@3.7.22
|
|
12
|
+
- @contractspec/lib.personalization@6.0.22
|
|
13
|
+
- @contractspec/lib.workflow-composer@3.7.22
|
|
14
|
+
- @contractspec/lib.contracts-spec@5.5.1
|
|
15
|
+
|
|
16
|
+
## 3.7.21
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- chore: auto-bump internal dependents
|
|
21
|
+
- Updated dependencies because of chore: auto-bump internal dependents
|
|
22
|
+
- Updated dependencies because of Add FormSpec layout hints, semantic field rendering, and portable text/textarea input-group addons.
|
|
23
|
+
- Updated dependencies because of Add ThemeSpec light/dark modes and a design-system Tailwind bridge for CSS variables, presets, CSS text, and OKLCH color pass-through.
|
|
24
|
+
- Updated dependencies because of Add a canonical typed result system for ContractSpec success and failure propagation across operations, workflows, jobs, server adapters, MCP, GraphQL, and React clients.
|
|
25
|
+
- @contractspec/lib.logger@3.7.14
|
|
26
|
+
- @contractspec/lib.overlay-engine@3.7.21
|
|
27
|
+
- @contractspec/lib.personalization@6.0.21
|
|
28
|
+
- @contractspec/lib.workflow-composer@3.7.21
|
|
29
|
+
- @contractspec/lib.contracts-spec@5.5.0
|
|
30
|
+
|
|
3
31
|
## 3.7.20
|
|
4
32
|
|
|
5
33
|
### Patch Changes
|
package/dist/browser/example.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization
|
|
1
|
+
import{defineExample as g}from"@contractspec/lib.contracts-spec/examples";var h=g({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),q=h;export{q as default,h as ExamplesPersonalizationExample};
|
package/dist/browser/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorAnalyzer as N}from"@contractspec/lib.personalization/analyzer";import{InMemoryBehaviorStore as
|
|
1
|
+
import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorAnalyzer as N}from"@contractspec/lib.personalization/analyzer";import{InMemoryBehaviorStore as Q}from"@contractspec/lib.personalization/store";import{createBehaviorTracker as U}from"@contractspec/lib.personalization/tracker";var V=new J({level:K.INFO,environment:"production",enableColors:!1});async function v(){let x=new Q,j=U({store:x,context:{tenantId:"acme",userId:"user-123"}});j.trackFieldAccess({operation:"billing.createOrder",field:"internalNotes"}),j.trackFieldAccess({operation:"billing.createOrder",field:"customerReference"}),j.trackFeatureUsage({feature:"workflow-editor",action:"opened"}),j.trackWorkflowStep({workflow:"invoice-approval",step:"review",status:"entered"}),await j.flush();let q=await new N(x).analyze({tenantId:"acme",userId:"user-123"});V.info("Behavior insights computed",{insights:q})}import{registerDocBlocks as X}from"@contractspec/lib.contracts-spec/docs";var Y=[{id:"docs.examples.personalization",title:"Personalization Patterns (example)",summary:"Behavior tracking, overlay-driven UI tweaks, and tenant workflow extension patterns.",kind:"reference",visibility:"public",route:"/docs/examples/personalization",tags:["personalization","overlays","workflows","example"],body:`## Includes
|
|
2
2
|
- Behavior tracking + insight analysis.
|
|
3
3
|
- Overlay customization (hide fields, rename labels).
|
|
4
4
|
- Workflow extension (inject tenant-specific steps).
|
|
@@ -6,4 +6,4 @@ import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorA
|
|
|
6
6
|
## Guardrails
|
|
7
7
|
- Keep tracking events structured and non-PII.
|
|
8
8
|
- Keep overlays signed and scoped.
|
|
9
|
-
- Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization — Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];
|
|
9
|
+
- Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization — Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];X(Y);import{defineExample as Z}from"@contractspec/lib.contracts-spec/examples";var _=Z({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),$=_;import{Logger as A,LogLevel as C}from"@contractspec/lib.logger";import{OverlayEngine as D,OverlayRegistry as F}from"@contractspec/lib.overlay-engine";import{signOverlay as I}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as M}from"@contractspec/lib.overlay-engine/spec";var R=new A({level:C.INFO,environment:"production",enableColors:!1});async function a(){let x=new F({allowUnsigned:!0}),j=new D({registry:x}),G=M({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await I(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});R.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as T,StabilityEnum as f}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[T.PlatformCore],tags:["personalization","experiment","overlay"],stability:f.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as P}from"@contractspec/lib.contracts-spec/features";var xx=P({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as W,StabilityEnum as d}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[W.PlatformCore],tags:["personalization","theme","onboarding"],stability:d.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as z}from"@contractspec/lib.contracts-spec";import{Logger as S,LogLevel as m}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new S({level:m.INFO,environment:"production",enableColors:!1}),O={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:z.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Qx(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:O,tenantId:"acme"})}function Ux(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{a as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Ux as logTenantWorkflowSteps,$ as example,Qx as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment,_ as ExamplesPersonalizationExample};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});export{j as PersonalizationFeature};
|
|
1
|
+
import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});export{j as PersonalizationFeature};
|
package/dist/example.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
declare const
|
|
2
|
-
export default
|
|
1
|
+
declare const ExamplesPersonalizationExample: import("@contractspec/lib.contracts-spec").ExampleSpec;
|
|
2
|
+
export default ExamplesPersonalizationExample;
|
|
3
|
+
export { ExamplesPersonalizationExample };
|
package/dist/example.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization
|
|
2
|
+
import{defineExample as g}from"@contractspec/lib.contracts-spec/examples";var h=g({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),q=h;export{q as default,h as ExamplesPersonalizationExample};
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorAnalyzer as N}from"@contractspec/lib.personalization/analyzer";import{InMemoryBehaviorStore as
|
|
2
|
+
import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorAnalyzer as N}from"@contractspec/lib.personalization/analyzer";import{InMemoryBehaviorStore as Q}from"@contractspec/lib.personalization/store";import{createBehaviorTracker as U}from"@contractspec/lib.personalization/tracker";var V=new J({level:K.INFO,environment:"production",enableColors:!1});async function v(){let x=new Q,j=U({store:x,context:{tenantId:"acme",userId:"user-123"}});j.trackFieldAccess({operation:"billing.createOrder",field:"internalNotes"}),j.trackFieldAccess({operation:"billing.createOrder",field:"customerReference"}),j.trackFeatureUsage({feature:"workflow-editor",action:"opened"}),j.trackWorkflowStep({workflow:"invoice-approval",step:"review",status:"entered"}),await j.flush();let q=await new N(x).analyze({tenantId:"acme",userId:"user-123"});V.info("Behavior insights computed",{insights:q})}import{registerDocBlocks as X}from"@contractspec/lib.contracts-spec/docs";var Y=[{id:"docs.examples.personalization",title:"Personalization Patterns (example)",summary:"Behavior tracking, overlay-driven UI tweaks, and tenant workflow extension patterns.",kind:"reference",visibility:"public",route:"/docs/examples/personalization",tags:["personalization","overlays","workflows","example"],body:`## Includes
|
|
3
3
|
- Behavior tracking + insight analysis.
|
|
4
4
|
- Overlay customization (hide fields, rename labels).
|
|
5
5
|
- Workflow extension (inject tenant-specific steps).
|
|
@@ -7,4 +7,4 @@ import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorA
|
|
|
7
7
|
## Guardrails
|
|
8
8
|
- Keep tracking events structured and non-PII.
|
|
9
9
|
- Keep overlays signed and scoped.
|
|
10
|
-
- Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization \u2014 Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];
|
|
10
|
+
- Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization \u2014 Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];X(Y);import{defineExample as Z}from"@contractspec/lib.contracts-spec/examples";var _=Z({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),$=_;import{Logger as A,LogLevel as C}from"@contractspec/lib.logger";import{OverlayEngine as D,OverlayRegistry as F}from"@contractspec/lib.overlay-engine";import{signOverlay as I}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as M}from"@contractspec/lib.overlay-engine/spec";var R=new A({level:C.INFO,environment:"production",enableColors:!1});async function a(){let x=new F({allowUnsigned:!0}),j=new D({registry:x}),G=M({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await I(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});R.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as T,StabilityEnum as f}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[T.PlatformCore],tags:["personalization","experiment","overlay"],stability:f.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as P}from"@contractspec/lib.contracts-spec/features";var xx=P({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as W,StabilityEnum as d}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[W.PlatformCore],tags:["personalization","theme","onboarding"],stability:d.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as z}from"@contractspec/lib.contracts-spec";import{Logger as S,LogLevel as m}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new S({level:m.INFO,environment:"production",enableColors:!1}),O={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:z.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Qx(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:O,tenantId:"acme"})}function Ux(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{a as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Ux as logTenantWorkflowSteps,$ as example,Qx as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment,_ as ExamplesPersonalizationExample};
|
package/dist/node/example.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization
|
|
1
|
+
import{defineExample as g}from"@contractspec/lib.contracts-spec/examples";var h=g({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),q=h;export{q as default,h as ExamplesPersonalizationExample};
|
package/dist/node/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorAnalyzer as N}from"@contractspec/lib.personalization/analyzer";import{InMemoryBehaviorStore as
|
|
1
|
+
import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorAnalyzer as N}from"@contractspec/lib.personalization/analyzer";import{InMemoryBehaviorStore as Q}from"@contractspec/lib.personalization/store";import{createBehaviorTracker as U}from"@contractspec/lib.personalization/tracker";var V=new J({level:K.INFO,environment:"production",enableColors:!1});async function v(){let x=new Q,j=U({store:x,context:{tenantId:"acme",userId:"user-123"}});j.trackFieldAccess({operation:"billing.createOrder",field:"internalNotes"}),j.trackFieldAccess({operation:"billing.createOrder",field:"customerReference"}),j.trackFeatureUsage({feature:"workflow-editor",action:"opened"}),j.trackWorkflowStep({workflow:"invoice-approval",step:"review",status:"entered"}),await j.flush();let q=await new N(x).analyze({tenantId:"acme",userId:"user-123"});V.info("Behavior insights computed",{insights:q})}import{registerDocBlocks as X}from"@contractspec/lib.contracts-spec/docs";var Y=[{id:"docs.examples.personalization",title:"Personalization Patterns (example)",summary:"Behavior tracking, overlay-driven UI tweaks, and tenant workflow extension patterns.",kind:"reference",visibility:"public",route:"/docs/examples/personalization",tags:["personalization","overlays","workflows","example"],body:`## Includes
|
|
2
2
|
- Behavior tracking + insight analysis.
|
|
3
3
|
- Overlay customization (hide fields, rename labels).
|
|
4
4
|
- Workflow extension (inject tenant-specific steps).
|
|
@@ -6,4 +6,4 @@ import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorA
|
|
|
6
6
|
## Guardrails
|
|
7
7
|
- Keep tracking events structured and non-PII.
|
|
8
8
|
- Keep overlays signed and scoped.
|
|
9
|
-
- Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization — Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];
|
|
9
|
+
- Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization — Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];X(Y);import{defineExample as Z}from"@contractspec/lib.contracts-spec/examples";var _=Z({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),$=_;import{Logger as A,LogLevel as C}from"@contractspec/lib.logger";import{OverlayEngine as D,OverlayRegistry as F}from"@contractspec/lib.overlay-engine";import{signOverlay as I}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as M}from"@contractspec/lib.overlay-engine/spec";var R=new A({level:C.INFO,environment:"production",enableColors:!1});async function a(){let x=new F({allowUnsigned:!0}),j=new D({registry:x}),G=M({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await I(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});R.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as T,StabilityEnum as f}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[T.PlatformCore],tags:["personalization","experiment","overlay"],stability:f.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as P}from"@contractspec/lib.contracts-spec/features";var xx=P({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as W,StabilityEnum as d}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[W.PlatformCore],tags:["personalization","theme","onboarding"],stability:d.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as z}from"@contractspec/lib.contracts-spec";import{Logger as S,LogLevel as m}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new S({level:m.INFO,environment:"production",enableColors:!1}),O={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:z.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Qx(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:O,tenantId:"acme"})}function Ux(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{a as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Ux as logTenantWorkflowSteps,$ as example,Qx as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment,_ as ExamplesPersonalizationExample};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});export{j as PersonalizationFeature};
|
|
1
|
+
import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});export{j as PersonalizationFeature};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});export{j as PersonalizationFeature};
|
|
2
|
+
import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});export{j as PersonalizationFeature};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contractspec/example.personalization",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.22",
|
|
4
4
|
"description": "Personalization examples: behavior tracking, overlay customization, workflow extension.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -92,16 +92,16 @@
|
|
|
92
92
|
"typecheck": "tsc --noEmit"
|
|
93
93
|
},
|
|
94
94
|
"dependencies": {
|
|
95
|
-
"@contractspec/lib.personalization": "6.0.
|
|
96
|
-
"@contractspec/lib.overlay-engine": "3.7.
|
|
97
|
-
"@contractspec/lib.workflow-composer": "3.7.
|
|
98
|
-
"@contractspec/lib.contracts-spec": "5.
|
|
99
|
-
"@contractspec/lib.logger": "3.7.
|
|
95
|
+
"@contractspec/lib.personalization": "6.0.22",
|
|
96
|
+
"@contractspec/lib.overlay-engine": "3.7.22",
|
|
97
|
+
"@contractspec/lib.workflow-composer": "3.7.22",
|
|
98
|
+
"@contractspec/lib.contracts-spec": "5.5.1",
|
|
99
|
+
"@contractspec/lib.logger": "3.7.15"
|
|
100
100
|
},
|
|
101
101
|
"devDependencies": {
|
|
102
102
|
"@contractspec/tool.typescript": "3.7.13",
|
|
103
103
|
"typescript": "^5.9.3",
|
|
104
|
-
"@contractspec/tool.bun": "3.7.
|
|
104
|
+
"@contractspec/tool.bun": "3.7.17"
|
|
105
105
|
},
|
|
106
106
|
"publishConfig": {
|
|
107
107
|
"access": "public",
|
package/src/example.ts
CHANGED
|
@@ -1,32 +1,28 @@
|
|
|
1
|
-
import { defineExample } from '@contractspec/lib.contracts-spec';
|
|
1
|
+
import { defineExample } from '@contractspec/lib.contracts-spec/examples';
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const ExamplesPersonalizationExample = defineExample({
|
|
4
4
|
meta: {
|
|
5
|
-
key: 'personalization',
|
|
5
|
+
key: 'examples.personalization',
|
|
6
6
|
version: '1.0.0',
|
|
7
|
-
title: 'Personalization
|
|
7
|
+
title: 'Personalization',
|
|
8
8
|
description:
|
|
9
|
-
'
|
|
10
|
-
kind: '
|
|
11
|
-
visibility: '
|
|
9
|
+
'Personalization examples: behavior tracking, overlay customization, workflow extension.',
|
|
10
|
+
kind: 'template',
|
|
11
|
+
visibility: 'experimental',
|
|
12
12
|
stability: 'experimental',
|
|
13
|
-
owners: ['@
|
|
14
|
-
tags: ['
|
|
13
|
+
owners: ['@contractspec-core'],
|
|
14
|
+
tags: ['package', 'examples', 'personalization'],
|
|
15
15
|
},
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
surfaces: {
|
|
17
|
+
templates: true,
|
|
18
|
+
sandbox: { enabled: true, modes: ['playground', 'specs'] },
|
|
19
|
+
studio: { enabled: false, installable: false },
|
|
20
|
+
mcp: { enabled: false },
|
|
19
21
|
},
|
|
20
22
|
entrypoints: {
|
|
21
23
|
packageName: '@contractspec/example.personalization',
|
|
22
|
-
docs: './docs',
|
|
23
|
-
},
|
|
24
|
-
surfaces: {
|
|
25
|
-
templates: true,
|
|
26
|
-
sandbox: { enabled: true, modes: ['markdown', 'specs'] },
|
|
27
|
-
studio: { enabled: true, installable: true },
|
|
28
|
-
mcp: { enabled: true },
|
|
29
24
|
},
|
|
30
25
|
});
|
|
31
26
|
|
|
32
|
-
export default
|
|
27
|
+
export default ExamplesPersonalizationExample;
|
|
28
|
+
export { ExamplesPersonalizationExample };
|
package/src/index.ts
CHANGED