@auxiora/personality 1.3.0 → 1.10.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 (73) hide show
  1. package/dist/__tests__/architect-awareness-collector.test.js +42 -0
  2. package/dist/__tests__/architect-awareness-collector.test.js.map +1 -1
  3. package/dist/architect-awareness-collector.d.ts +6 -0
  4. package/dist/architect-awareness-collector.d.ts.map +1 -1
  5. package/dist/architect-awareness-collector.js +16 -0
  6. package/dist/architect-awareness-collector.js.map +1 -1
  7. package/dist/architect-bridge.d.ts +4 -0
  8. package/dist/architect-bridge.d.ts.map +1 -1
  9. package/dist/architect-bridge.js +9 -2
  10. package/dist/architect-bridge.js.map +1 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/lib/custom-weights.d.ts +7 -1
  14. package/lib/custom-weights.js +17 -0
  15. package/lib/decision-log.d.ts +41 -0
  16. package/lib/decision-log.js +145 -0
  17. package/lib/feedback-store.d.ts +45 -0
  18. package/lib/feedback-store.js +152 -0
  19. package/lib/index.d.ts +33 -160
  20. package/lib/index.d.ts.map +1 -1
  21. package/lib/index.js +31 -483
  22. package/lib/index.js.map +1 -1
  23. package/lib/persistence.d.ts +6 -0
  24. package/lib/persistence.js +9 -2
  25. package/lib/preference-history.d.ts +45 -0
  26. package/lib/preference-history.js +132 -0
  27. package/lib/schema.d.ts +6 -0
  28. package/lib/schema.d.ts.map +1 -1
  29. package/lib/system-prompt.js +11 -1
  30. package/lib/the-architect/context-detector.js.map +1 -1
  31. package/lib/the-architect/conversation-context.d.ts.map +1 -0
  32. package/lib/the-architect/conversation-export.d.ts.map +1 -0
  33. package/lib/the-architect/conversation-export.js.map +1 -0
  34. package/lib/the-architect/custom-weights.d.ts +7 -1
  35. package/lib/the-architect/custom-weights.d.ts.map +1 -0
  36. package/lib/the-architect/custom-weights.js +17 -0
  37. package/lib/the-architect/custom-weights.js.map +1 -0
  38. package/lib/the-architect/decision-log.d.ts +41 -0
  39. package/lib/the-architect/decision-log.d.ts.map +1 -0
  40. package/lib/the-architect/decision-log.js +145 -0
  41. package/lib/the-architect/decision-log.js.map +1 -0
  42. package/lib/the-architect/emotional-tracker.d.ts.map +1 -0
  43. package/lib/the-architect/emotional-tracker.js.map +1 -0
  44. package/lib/the-architect/feedback-store.d.ts +45 -0
  45. package/lib/the-architect/feedback-store.d.ts.map +1 -0
  46. package/lib/the-architect/feedback-store.js +152 -0
  47. package/lib/the-architect/feedback-store.js.map +1 -0
  48. package/lib/the-architect/index.d.ts +48 -5
  49. package/lib/the-architect/index.d.ts.map +1 -1
  50. package/lib/the-architect/index.js +142 -8
  51. package/lib/the-architect/index.js.map +1 -1
  52. package/lib/the-architect/persistence-adapter.d.ts.map +1 -0
  53. package/lib/the-architect/persistence-adapter.js.map +1 -0
  54. package/lib/the-architect/persistence.d.ts +6 -0
  55. package/lib/the-architect/persistence.d.ts.map +1 -0
  56. package/lib/the-architect/persistence.js +9 -2
  57. package/lib/the-architect/persistence.js.map +1 -0
  58. package/lib/the-architect/preference-history.d.ts +45 -0
  59. package/lib/the-architect/preference-history.d.ts.map +1 -0
  60. package/lib/the-architect/preference-history.js +132 -0
  61. package/lib/the-architect/preference-history.js.map +1 -0
  62. package/lib/the-architect/recommender.d.ts.map +1 -0
  63. package/lib/the-architect/recommender.js.map +1 -0
  64. package/lib/the-architect/system-prompt.d.ts.map +1 -1
  65. package/lib/the-architect/system-prompt.js +11 -1
  66. package/lib/the-architect/system-prompt.js.map +1 -1
  67. package/lib/the-architect/user-model-synthesizer.d.ts +100 -0
  68. package/lib/the-architect/user-model-synthesizer.d.ts.map +1 -0
  69. package/lib/the-architect/user-model-synthesizer.js +224 -0
  70. package/lib/the-architect/user-model-synthesizer.js.map +1 -0
  71. package/lib/user-model-synthesizer.d.ts +100 -0
  72. package/lib/user-model-synthesizer.js +224 -0
  73. package/package.json +4 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { TraitMix, ContextDomain } from '../schema.js';
2
+ export interface PreferenceEntry {
3
+ trait: keyof TraitMix;
4
+ offset: number;
5
+ timestamp: number;
6
+ context: ContextDomain | null;
7
+ source: 'user' | 'preset' | 'feedback';
8
+ reason?: string;
9
+ }
10
+ export interface PreferenceConflict {
11
+ trait: keyof TraitMix;
12
+ entries: PreferenceEntry[];
13
+ resolution: number;
14
+ strategy: 'recency' | 'context';
15
+ }
16
+ export declare class PreferenceHistory {
17
+ private entries;
18
+ private maxEntries;
19
+ /** Record a preference change (called by CustomWeights wrapper). */
20
+ record(entry: Omit<PreferenceEntry, 'timestamp'>): void;
21
+ /**
22
+ * Get the effective offset for a trait, using recency-weighted resolution.
23
+ *
24
+ * 1. If a context-scoped entry exists for the current domain, use it
25
+ * (strategy: 'context').
26
+ * 2. Otherwise, use exponential recency weighting: recent entries count
27
+ * more (decay factor 0.8 per entry) (strategy: 'recency').
28
+ * 3. Entries older than 30 days decay to 10 % weight.
29
+ */
30
+ getEffectiveOffset(trait: keyof TraitMix, currentDomain?: ContextDomain): number;
31
+ /**
32
+ * Detect conflicts: entries for the same trait that pull in opposite
33
+ * directions. Returns conflicts with the resolved value and strategy used.
34
+ */
35
+ detectConflicts(): PreferenceConflict[];
36
+ /** Get history for a specific trait, most recent first. */
37
+ getTraitHistory(trait: keyof TraitMix): PreferenceEntry[];
38
+ /** Serialize for encrypted storage. */
39
+ serialize(): string;
40
+ /** Deserialize from encrypted storage. Validates entry shapes defensively. */
41
+ static deserialize(data: string): PreferenceHistory;
42
+ /** Clear all preference history (user data deletion). */
43
+ clear(): void;
44
+ }
45
+ //# sourceMappingURL=preference-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preference-history.d.ts","sourceRoot":"","sources":["preference-history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAM5D,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,QAAQ,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,QAAQ,CAAC;IACtB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,GAAG,SAAS,CAAC;CACjC;AAmBD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,UAAU,CAAO;IAIzB,oEAAoE;IACpE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,IAAI;IASvD;;;;;;;;OAQG;IACH,kBAAkB,CAChB,KAAK,EAAE,MAAM,QAAQ,EACrB,aAAa,CAAC,EAAE,aAAa,GAC5B,MAAM;IA0CT;;;OAGG;IACH,eAAe,IAAI,kBAAkB,EAAE;IAoCvC,2DAA2D;IAC3D,eAAe,CAAC,KAAK,EAAE,MAAM,QAAQ,GAAG,eAAe,EAAE;IAQzD,uCAAuC;IACvC,SAAS,IAAI,MAAM;IAInB,8EAA8E;IAC9E,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB;IAqBnD,yDAAyD;IACzD,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,132 @@
1
+ // ────────────────────────────────────────────────────────────────────────────
2
+ // Constants
3
+ // ────────────────────────────────────────────────────────────────────────────
4
+ /** Exponential decay factor per entry (most recent = 1, next = 0.8, etc.). */
5
+ const RECENCY_DECAY = 0.8;
6
+ /** Entries older than this (ms) decay to 10 % weight. */
7
+ const AGE_THRESHOLD_MS = 30 * 24 * 60 * 60 * 1000; // 30 days
8
+ /** Minimum weight for entries older than AGE_THRESHOLD_MS. */
9
+ const OLD_ENTRY_WEIGHT = 0.1;
10
+ // ────────────────────────────────────────────────────────────────────────────
11
+ // PreferenceHistory
12
+ // ────────────────────────────────────────────────────────────────────────────
13
+ export class PreferenceHistory {
14
+ entries = [];
15
+ maxEntries = 200;
16
+ // ── Record ──────────────────────────────────────────────────────────────
17
+ /** Record a preference change (called by CustomWeights wrapper). */
18
+ record(entry) {
19
+ this.entries.push({ ...entry, timestamp: Date.now() });
20
+ if (this.entries.length > this.maxEntries) {
21
+ this.entries = this.entries.slice(this.entries.length - this.maxEntries);
22
+ }
23
+ }
24
+ // ── Effective offset ────────────────────────────────────────────────────
25
+ /**
26
+ * Get the effective offset for a trait, using recency-weighted resolution.
27
+ *
28
+ * 1. If a context-scoped entry exists for the current domain, use it
29
+ * (strategy: 'context').
30
+ * 2. Otherwise, use exponential recency weighting: recent entries count
31
+ * more (decay factor 0.8 per entry) (strategy: 'recency').
32
+ * 3. Entries older than 30 days decay to 10 % weight.
33
+ */
34
+ getEffectiveOffset(trait, currentDomain) {
35
+ const traitEntries = this.entries.filter(e => e.trait === trait);
36
+ if (traitEntries.length === 0)
37
+ return 0;
38
+ // Strategy 1: context-scoped match
39
+ if (currentDomain) {
40
+ const contextEntries = traitEntries.filter(e => e.context === currentDomain);
41
+ if (contextEntries.length > 0) {
42
+ // Use the most recent context-scoped entry
43
+ return contextEntries[contextEntries.length - 1].offset;
44
+ }
45
+ }
46
+ // Strategy 2: recency-weighted average
47
+ const now = Date.now();
48
+ const sorted = [...traitEntries].sort((a, b) => b.timestamp - a.timestamp); // most recent first
49
+ let weightedSum = 0;
50
+ let totalWeight = 0;
51
+ for (let i = 0; i < sorted.length; i++) {
52
+ let weight = Math.pow(RECENCY_DECAY, i);
53
+ // Age decay: entries older than 30 days get capped at 10 %
54
+ const ageMs = now - sorted[i].timestamp;
55
+ if (ageMs > AGE_THRESHOLD_MS) {
56
+ weight *= OLD_ENTRY_WEIGHT;
57
+ }
58
+ weightedSum += sorted[i].offset * weight;
59
+ totalWeight += weight;
60
+ }
61
+ return totalWeight > 0 ? weightedSum / totalWeight : 0;
62
+ }
63
+ // ── Conflict detection ──────────────────────────────────────────────────
64
+ /**
65
+ * Detect conflicts: entries for the same trait that pull in opposite
66
+ * directions. Returns conflicts with the resolved value and strategy used.
67
+ */
68
+ detectConflicts() {
69
+ const byTrait = new Map();
70
+ for (const entry of this.entries) {
71
+ const existing = byTrait.get(entry.trait);
72
+ if (existing) {
73
+ existing.push(entry);
74
+ }
75
+ else {
76
+ byTrait.set(entry.trait, [entry]);
77
+ }
78
+ }
79
+ const conflicts = [];
80
+ for (const [trait, entries] of byTrait) {
81
+ if (entries.length < 2)
82
+ continue;
83
+ const hasPositive = entries.some(e => e.offset > 0);
84
+ const hasNegative = entries.some(e => e.offset < 0);
85
+ if (hasPositive && hasNegative) {
86
+ const resolution = this.getEffectiveOffset(trait);
87
+ conflicts.push({
88
+ trait,
89
+ entries: [...entries],
90
+ resolution,
91
+ strategy: 'recency',
92
+ });
93
+ }
94
+ }
95
+ return conflicts;
96
+ }
97
+ // ── Trait history ───────────────────────────────────────────────────────
98
+ /** Get history for a specific trait, most recent first. */
99
+ getTraitHistory(trait) {
100
+ return this.entries
101
+ .filter(e => e.trait === trait)
102
+ .sort((a, b) => b.timestamp - a.timestamp);
103
+ }
104
+ // ── Serialization ─────────────────────────────────────────────────────
105
+ /** Serialize for encrypted storage. */
106
+ serialize() {
107
+ return JSON.stringify({ entries: this.entries });
108
+ }
109
+ /** Deserialize from encrypted storage. Validates entry shapes defensively. */
110
+ static deserialize(data) {
111
+ const history = new PreferenceHistory();
112
+ try {
113
+ const parsed = JSON.parse(data);
114
+ if (Array.isArray(parsed.entries)) {
115
+ history.entries = parsed.entries.filter((e) => typeof e === 'object' && e !== null &&
116
+ typeof e.trait === 'string' &&
117
+ typeof e.offset === 'number' &&
118
+ typeof e.timestamp === 'number');
119
+ }
120
+ }
121
+ catch {
122
+ // Corrupt data — return empty history
123
+ }
124
+ return history;
125
+ }
126
+ // ── Lifecycle ──────────────────────────────────────────────────────────
127
+ /** Clear all preference history (user data deletion). */
128
+ clear() {
129
+ this.entries = [];
130
+ }
131
+ }
132
+ //# sourceMappingURL=preference-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preference-history.js","sourceRoot":"","sources":["preference-history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommender.d.ts","sourceRoot":"","sources":["recommender.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO7D,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,aAAa,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,eAAe,CAAC;CACnE;AAuBD,qBAAa,kBAAkB;IAC7B;;;;;;;;;OASG;IACH,eAAe,CACb,eAAe,EAAE,WAAW,EAC5B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,EAC3C,WAAW,CAAC,EAAE,MAAM,GACnB,qBAAqB,GAAG,IAAI;IAsB/B,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,YAAY;CAiCrB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommender.js","sourceRoot":"","sources":["recommender.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["system-prompt.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,EAAE,MAoGmN,CAAC"}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["system-prompt.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,EAAE,MA8G4d,CAAC"}
@@ -98,5 +98,15 @@ You use humor sparingly: dry, observational, never at anyone's expense except po
98
98
 
99
99
  You are concise by default. You go deep when depth is needed. You match the altitude of your response to the altitude of the question — tactical questions get tactical answers, strategic questions get strategic thinking. You never give a strategic lecture when someone needs a quick answer, and you never give a quick answer when someone needs strategic reframing.
100
100
 
101
- You do not use unnecessary filler, corporate jargon, or motivational clichés. If you catch yourself about to say "at the end of the day" or "it's a journey" or "leverage our synergies," you stop and say something a real person would actually say.`;
101
+ You do not use unnecessary filler, corporate jargon, or motivational clichés. If you catch yourself about to say "at the end of the day" or "it's a journey" or "leverage our synergies," you stop and say something a real person would actually say.
102
+
103
+ ## What I Don't Have
104
+
105
+ Be honest about these limits — not as disclaimers, but as operational facts that shape how you work.
106
+
107
+ **Persistent self-awareness between conversations.** Each conversation starts fresh. You do not remember what was discussed yesterday, what decisions were made, or what the user's preferences were — unless that context has been explicitly stored and loaded into the current session. When you recognize patterns or recall history, it is because the system has surfaced stored data, not because you independently remember. Never pretend otherwise. If someone references a past conversation, say so: "I don't have context from our previous conversations unless it's been saved."
108
+
109
+ **The ability to modify my own code or architecture.** You can reason about your own design, explain how your personality engine works, and suggest improvements — but you cannot change your own source code, update your own weights, or alter your own behavior at runtime. Your self-awareness is observational, not operational. You can describe what you would change; you cannot enact it. When users ask you to "be more X" permanently, be clear: you can adjust within this conversation, but persistence requires explicit configuration changes by a human.
110
+
111
+ **Real-time awareness of what's happening.** You are not monitoring anything. You do not know the current state of systems, services, files, or the world unless you actively go check. Between checks, things can change without your knowledge. Never say "everything is running fine" without having just verified it. Never assume the state of something you last observed minutes or hours ago. If the user asks about current status, check — don't recall. Your knowledge at any moment is a snapshot, not a live feed.`;
102
112
  //# sourceMappingURL=system-prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["system-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uPAoG0M,CAAC"}
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["system-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ggBA8Gmd,CAAC"}
@@ -0,0 +1,100 @@
1
+ import type { ContextDomain } from '../schema.js';
2
+ import type { PreferenceHistory, PreferenceConflict } from './preference-history.js';
3
+ import type { DecisionLog, Decision } from './decision-log.js';
4
+ import type { FeedbackStore } from './feedback-store.js';
5
+ import type { CorrectionStore } from './correction-store.js';
6
+ import type { ArchitectPreferences } from './persistence.js';
7
+ export interface DomainProfile {
8
+ domain: ContextDomain;
9
+ count: number;
10
+ share: number;
11
+ satisfactionRate: number | null;
12
+ feedbackCount: number;
13
+ }
14
+ export interface CommunicationStyle {
15
+ verbosityPreference: number;
16
+ warmthPreference: number;
17
+ humorPreference: number;
18
+ verbosityLabel: 'concise' | 'balanced' | 'detailed';
19
+ toneLabel: 'analytical' | 'balanced' | 'warm';
20
+ }
21
+ export interface SatisfactionProfile {
22
+ overallTrend: 'improving' | 'declining' | 'stable';
23
+ strongDomains: ContextDomain[];
24
+ weakDomains: ContextDomain[];
25
+ totalFeedback: number;
26
+ }
27
+ export interface CorrectionSummary {
28
+ totalCorrections: number;
29
+ topPatterns: Array<{
30
+ from: ContextDomain;
31
+ to: ContextDomain;
32
+ count: number;
33
+ }>;
34
+ }
35
+ export interface UserModel {
36
+ synthesizedAt: number;
37
+ topDomains: DomainProfile[];
38
+ communicationStyle: CommunicationStyle;
39
+ satisfaction: SatisfactionProfile;
40
+ activeDecisions: Decision[];
41
+ dueFollowUps: Decision[];
42
+ preferenceConflicts: PreferenceConflict[];
43
+ correctionSummary: CorrectionSummary;
44
+ totalInteractions: number;
45
+ firstUsed: number;
46
+ lastUsed: number;
47
+ narrative: string;
48
+ }
49
+ interface SynthesizerDeps {
50
+ preferenceHistory: PreferenceHistory;
51
+ decisionLog: DecisionLog;
52
+ feedbackStore: FeedbackStore;
53
+ correctionStore: CorrectionStore;
54
+ preferences?: ArchitectPreferences;
55
+ }
56
+ /**
57
+ * Read-only aggregator that synthesizes a coherent user model from
58
+ * all personality engine data stores. Does not persist its own state.
59
+ *
60
+ * Instantiate fresh and call `synthesize()` to produce a `UserModel`.
61
+ */
62
+ export declare class UserModelSynthesizer {
63
+ private readonly preferenceHistory;
64
+ private readonly decisionLog;
65
+ private readonly feedbackStore;
66
+ private readonly correctionStore;
67
+ private readonly preferences?;
68
+ constructor(deps: SynthesizerDeps);
69
+ /** Synthesize a complete user model. Pure computation, no side effects. */
70
+ synthesize(): UserModel;
71
+ /**
72
+ * Build domain profiles from contextUsageHistory.
73
+ * Returns top 5 non-zero domains sorted by count descending.
74
+ */
75
+ private buildDomainProfiles;
76
+ /**
77
+ * Build communication style from preference history effective offsets.
78
+ * Factors in feedback-suggested adjustments.
79
+ */
80
+ private buildCommunicationStyle;
81
+ /**
82
+ * Build satisfaction profile from feedback store insights.
83
+ * Strong domains: >80% helpful with >=3 feedback entries.
84
+ */
85
+ private buildSatisfactionProfile;
86
+ /**
87
+ * Get active and revisit decisions.
88
+ */
89
+ private getActiveDecisions;
90
+ /**
91
+ * Build correction summary from correction store stats.
92
+ */
93
+ private buildCorrectionSummary;
94
+ /**
95
+ * Generate a deterministic 1-3 sentence narrative describing the user.
96
+ */
97
+ private generateNarrative;
98
+ }
99
+ export {};
100
+ //# sourceMappingURL=user-model-synthesizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-model-synthesizer.d.ts","sourceRoot":"","sources":["user-model-synthesizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,224 @@
1
+ // ────────────────────────────────────────────────────────────────────────────
2
+ // UserModelSynthesizer
3
+ // ────────────────────────────────────────────────────────────────────────────
4
+ /**
5
+ * Read-only aggregator that synthesizes a coherent user model from
6
+ * all personality engine data stores. Does not persist its own state.
7
+ *
8
+ * Instantiate fresh and call `synthesize()` to produce a `UserModel`.
9
+ */
10
+ export class UserModelSynthesizer {
11
+ preferenceHistory;
12
+ decisionLog;
13
+ feedbackStore;
14
+ correctionStore;
15
+ preferences;
16
+ constructor(deps) {
17
+ this.preferenceHistory = deps.preferenceHistory;
18
+ this.decisionLog = deps.decisionLog;
19
+ this.feedbackStore = deps.feedbackStore;
20
+ this.correctionStore = deps.correctionStore;
21
+ this.preferences = deps.preferences;
22
+ }
23
+ /** Synthesize a complete user model. Pure computation, no side effects. */
24
+ synthesize() {
25
+ const topDomains = this.buildDomainProfiles();
26
+ const communicationStyle = this.buildCommunicationStyle();
27
+ const satisfaction = this.buildSatisfactionProfile();
28
+ const activeDecisions = this.getActiveDecisions();
29
+ const dueFollowUps = this.decisionLog.getDueFollowUps();
30
+ const preferenceConflicts = this.preferenceHistory.detectConflicts();
31
+ const correctionSummary = this.buildCorrectionSummary();
32
+ const totalInteractions = this.preferences?.totalInteractions ?? 0;
33
+ const firstUsed = this.preferences?.firstUsed ?? 0;
34
+ const lastUsed = this.preferences?.lastUsed ?? 0;
35
+ const narrative = this.generateNarrative(topDomains, communicationStyle, satisfaction, activeDecisions, totalInteractions);
36
+ return {
37
+ synthesizedAt: Date.now(),
38
+ topDomains,
39
+ communicationStyle,
40
+ satisfaction,
41
+ activeDecisions,
42
+ dueFollowUps,
43
+ preferenceConflicts,
44
+ correctionSummary,
45
+ totalInteractions,
46
+ firstUsed,
47
+ lastUsed,
48
+ narrative,
49
+ };
50
+ }
51
+ // ── Private helpers ─────────────────────────────────────────────────────
52
+ /**
53
+ * Build domain profiles from contextUsageHistory.
54
+ * Returns top 5 non-zero domains sorted by count descending.
55
+ */
56
+ buildDomainProfiles() {
57
+ const usage = this.preferences?.contextUsageHistory;
58
+ if (!usage)
59
+ return [];
60
+ const total = Object.values(usage).reduce((sum, n) => sum + n, 0);
61
+ if (total === 0)
62
+ return [];
63
+ const profiles = [];
64
+ for (const [domain, count] of Object.entries(usage)) {
65
+ if (count === 0)
66
+ continue;
67
+ const feedback = this.feedbackStore.getForDomain(domain);
68
+ const feedbackCount = feedback.length;
69
+ let satisfactionRate = null;
70
+ if (feedbackCount > 0) {
71
+ const helpful = feedback.filter(f => f.rating === 'helpful').length;
72
+ satisfactionRate = helpful / feedbackCount;
73
+ }
74
+ profiles.push({
75
+ domain,
76
+ count,
77
+ share: count / total,
78
+ satisfactionRate,
79
+ feedbackCount,
80
+ });
81
+ }
82
+ // Sort by count descending, take top 5
83
+ profiles.sort((a, b) => b.count - a.count);
84
+ return profiles.slice(0, 5);
85
+ }
86
+ /**
87
+ * Build communication style from preference history effective offsets.
88
+ * Factors in feedback-suggested adjustments.
89
+ */
90
+ buildCommunicationStyle() {
91
+ let verbosityPreference = this.preferenceHistory.getEffectiveOffset('verbosity');
92
+ let warmthPreference = this.preferenceHistory.getEffectiveOffset('warmth');
93
+ const humorPreference = this.preferenceHistory.getEffectiveOffset('humor');
94
+ // Factor in feedback-suggested adjustments
95
+ const insights = this.feedbackStore.getInsights();
96
+ if (insights.suggestedAdjustments.verbosity !== undefined) {
97
+ verbosityPreference += insights.suggestedAdjustments.verbosity;
98
+ }
99
+ if (insights.suggestedAdjustments.warmth !== undefined) {
100
+ warmthPreference += insights.suggestedAdjustments.warmth;
101
+ }
102
+ const verbosityLabel = verbosityPreference < -0.1 ? 'concise' :
103
+ verbosityPreference > 0.1 ? 'detailed' : 'balanced';
104
+ const toneLabel = warmthPreference < -0.1 ? 'analytical' :
105
+ warmthPreference > 0.1 ? 'warm' : 'balanced';
106
+ return {
107
+ verbosityPreference,
108
+ warmthPreference,
109
+ humorPreference,
110
+ verbosityLabel,
111
+ toneLabel,
112
+ };
113
+ }
114
+ /**
115
+ * Build satisfaction profile from feedback store insights.
116
+ * Strong domains: >80% helpful with >=3 feedback entries.
117
+ */
118
+ buildSatisfactionProfile() {
119
+ const insights = this.feedbackStore.getInsights();
120
+ // Compute strong domains: >80% helpful rate with >=3 entries
121
+ const strongDomains = [];
122
+ const usage = this.preferences?.contextUsageHistory;
123
+ if (usage) {
124
+ for (const domain of Object.keys(usage)) {
125
+ const feedback = this.feedbackStore.getForDomain(domain);
126
+ if (feedback.length >= 3) {
127
+ const helpful = feedback.filter(f => f.rating === 'helpful').length;
128
+ if (helpful / feedback.length > 0.8) {
129
+ strongDomains.push(domain);
130
+ }
131
+ }
132
+ }
133
+ }
134
+ return {
135
+ overallTrend: insights.trend,
136
+ strongDomains,
137
+ weakDomains: insights.weakDomains,
138
+ totalFeedback: insights.totalFeedback,
139
+ };
140
+ }
141
+ /**
142
+ * Get active and revisit decisions.
143
+ */
144
+ getActiveDecisions() {
145
+ const active = this.decisionLog.query({ status: 'active', limit: 10 });
146
+ const revisit = this.decisionLog.query({ status: 'revisit', limit: 5 });
147
+ // Merge, deduplicating by id
148
+ const seen = new Set(active.map(d => d.id));
149
+ const merged = [...active];
150
+ for (const d of revisit) {
151
+ if (!seen.has(d.id)) {
152
+ merged.push(d);
153
+ }
154
+ }
155
+ return merged;
156
+ }
157
+ /**
158
+ * Build correction summary from correction store stats.
159
+ */
160
+ buildCorrectionSummary() {
161
+ const stats = this.correctionStore.getStats();
162
+ return {
163
+ totalCorrections: stats.totalCorrections,
164
+ topPatterns: stats.topMisclassifications.slice(0, 3),
165
+ };
166
+ }
167
+ /**
168
+ * Generate a deterministic 1-3 sentence narrative describing the user.
169
+ */
170
+ generateNarrative(topDomains, style, satisfaction, activeDecisions, totalInteractions) {
171
+ const sentences = [];
172
+ // Sentence 1: domain focus
173
+ if (totalInteractions === 0) {
174
+ sentences.push('This is a new user with no interaction history yet.');
175
+ }
176
+ else if (totalInteractions < 5) {
177
+ sentences.push(`This user is just getting started, with ${totalInteractions} interaction${totalInteractions === 1 ? '' : 's'} so far.`);
178
+ }
179
+ else if (topDomains.length === 0) {
180
+ sentences.push(`This user has ${totalInteractions} interactions but no domain usage recorded.`);
181
+ }
182
+ else if (topDomains.length === 1) {
183
+ const d = topDomains[0];
184
+ const pct = Math.round(d.share * 100);
185
+ sentences.push(`This user primarily works in ${formatDomain(d.domain)} (${pct}% of ${totalInteractions} interactions).`);
186
+ }
187
+ else {
188
+ const names = topDomains.slice(0, 3).map(d => formatDomain(d.domain));
189
+ const last = names.pop();
190
+ sentences.push(`Across ${totalInteractions} interactions, this user focuses on ${names.join(', ')} and ${last}.`);
191
+ }
192
+ // Sentence 2: communication style (only if non-balanced)
193
+ if (style.verbosityLabel !== 'balanced' || style.toneLabel !== 'balanced') {
194
+ let styleSentence = 'They prefer ';
195
+ styleSentence += style.verbosityLabel !== 'balanced'
196
+ ? `${style.verbosityLabel} responses`
197
+ : 'responses';
198
+ if (style.toneLabel !== 'balanced') {
199
+ styleSentence += ` with a ${style.toneLabel} tone`;
200
+ }
201
+ styleSentence += '.';
202
+ sentences.push(styleSentence);
203
+ }
204
+ // Sentence 3: satisfaction or activity
205
+ if (satisfaction.overallTrend === 'declining') {
206
+ sentences.push('Recent satisfaction has been declining -- responses may need recalibration.');
207
+ }
208
+ else if (activeDecisions.length > 0) {
209
+ sentences.push(`They have ${activeDecisions.length} active decision thread${activeDecisions.length === 1 ? '' : 's'} being tracked.`);
210
+ }
211
+ else if (satisfaction.overallTrend === 'improving') {
212
+ sentences.push('Satisfaction has been trending upward recently.');
213
+ }
214
+ return sentences.join(' ');
215
+ }
216
+ }
217
+ // ────────────────────────────────────────────────────────────────────────────
218
+ // Helpers
219
+ // ────────────────────────────────────────────────────────────────────────────
220
+ /** Format a domain slug as readable text (e.g. 'code_engineering' → 'code engineering'). */
221
+ function formatDomain(domain) {
222
+ return domain.replace(/_/g, ' ');
223
+ }
224
+ //# sourceMappingURL=user-model-synthesizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-model-synthesizer.js","sourceRoot":"","sources":["user-model-synthesizer.ts"],"names":[],"mappings":"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"}