@cognitive-engine/reasoning 0.1.0 → 0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"intention-generator.d.ts","sourceRoot":"","sources":["../src/intention-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,SAAS,EAET,MAAM,EACN,aAAa,EACb,eAAe,EAChB,MAAM,wBAAwB,CAAA;AAe/B;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,cAAc,GACpB,SAAS,EAAE,CAwDb;AA2CD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,GAAE,aAAa,EAAO,GAChC,eAAe,EAAE,CAWnB"}
1
+ {"version":3,"file":"intention-generator.d.ts","sourceRoot":"","sources":["../src/intention-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,SAAS,EAET,MAAM,EACN,aAAa,EACb,eAAe,EAChB,MAAM,wBAAwB,CAAA;AAuB/B;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,cAAc,GACpB,SAAS,EAAE,CAcb;AAmGD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,GAAE,aAAa,EAAO,GAChC,eAAe,EAAE,CAWnB"}
@@ -9,62 +9,81 @@ const REQUEST_TO_INTENTION = {
9
9
  feedback: 'empathize',
10
10
  };
11
11
  const NEGATIVE_EMOTIONS = new Set(['frustrated', 'anxious', 'negative']);
12
+ const PRIORITY_HIGHEST = 10;
13
+ const PRIORITY_URGENT = 9;
14
+ const PRIORITY_EMPATHY = 8;
15
+ const PRIORITY_CLARIFY = 4;
16
+ const URGENCY_HIGH_THRESHOLD = 7;
17
+ const MIN_BELIEFS_FOR_CONTEXT = 5;
18
+ const TARGET_PREVIEW_LENGTH = 50;
12
19
  /**
13
20
  * Generate intentions from percept + cognitive state using BDI rules.
14
21
  */
15
22
  export function generateIntentions(percept, state) {
16
- const intentions = [];
17
- // CRITICAL: listening mode = ONLY empathize, no advice
18
23
  if (percept.responseMode === 'listening') {
19
- return [
20
- {
21
- type: 'empathize',
22
- target: percept.emotionalTone || 'neutral',
23
- priority: 10,
24
- reason: 'User is sharing, not asking for advice',
25
- },
26
- ];
24
+ return [buildListeningIntention(percept)];
27
25
  }
28
- // Primary intention by request type
26
+ const intentions = [
27
+ buildPrimaryIntention(percept),
28
+ ];
29
+ appendEmpathyIntention(intentions, percept);
30
+ appendUrgencyIntention(intentions, percept);
31
+ appendClarifyIntention(intentions, state);
32
+ return intentions.sort((a, b) => b.priority - a.priority);
33
+ }
34
+ function buildListeningIntention(percept) {
35
+ return {
36
+ type: 'empathize',
37
+ target: percept.emotionalTone || 'neutral',
38
+ priority: PRIORITY_HIGHEST,
39
+ reason: 'User is sharing, not asking for advice',
40
+ };
41
+ }
42
+ function buildPrimaryIntention(percept) {
29
43
  const intentionType = REQUEST_TO_INTENTION[percept.requestType] ?? 'inform';
30
- intentions.push({
44
+ return {
31
45
  type: intentionType,
32
- target: percept.rawText.substring(0, 50),
33
- priority: 10,
46
+ target: percept.rawText.substring(0, TARGET_PREVIEW_LENGTH),
47
+ priority: PRIORITY_HIGHEST,
34
48
  reason: `Primary response to ${percept.requestType}`,
35
- });
36
- // Negative emotion → empathize first
49
+ };
50
+ }
51
+ function appendEmpathyIntention(intentions, percept) {
37
52
  if (NEGATIVE_EMOTIONS.has(percept.emotionalTone)) {
38
53
  intentions.push({
39
54
  type: 'empathize',
40
55
  target: percept.emotionalTone,
41
- priority: 8,
56
+ priority: PRIORITY_EMPATHY,
42
57
  reason: 'User is experiencing negative emotion',
43
58
  });
44
59
  }
45
- // High urgency → prioritize speed
46
- if (percept.urgency > 7) {
60
+ }
61
+ function appendUrgencyIntention(intentions, percept) {
62
+ if (percept.urgency > URGENCY_HIGH_THRESHOLD) {
47
63
  intentions.push({
48
64
  type: 'inform',
49
65
  target: 'urgent_response',
50
- priority: 9,
66
+ priority: PRIORITY_URGENT,
51
67
  reason: 'High urgency detected',
52
68
  });
53
69
  }
54
- // Few beliefs → clarify
55
- if (state.beliefs.length < 5) {
70
+ }
71
+ function appendClarifyIntention(intentions, state) {
72
+ if (state.beliefs.length < MIN_BELIEFS_FOR_CONTEXT) {
56
73
  intentions.push({
57
74
  type: 'clarify',
58
75
  target: 'user_context',
59
- priority: 4,
76
+ priority: PRIORITY_CLARIFY,
60
77
  reason: 'Not enough context about user',
61
78
  });
62
79
  }
63
- return intentions.sort((a, b) => b.priority - a.priority);
64
80
  }
65
81
  // ═══════════════════════════════════════════
66
82
  // Built-in inference rules
67
83
  // ═══════════════════════════════════════════
84
+ const CONFIDENCE_PROBLEM_INFERENCE = 0.6;
85
+ const CONFIDENCE_CREATIVE_INFERENCE = 0.5;
86
+ const CONFIDENCE_SPEED_INFERENCE = 0.7;
68
87
  const BUILTIN_RULES = [
69
88
  {
70
89
  name: 'negative_emotion_problem',
@@ -74,7 +93,7 @@ const BUILTIN_RULES = [
74
93
  subject: 'user',
75
94
  predicate: 'has_problem_with',
76
95
  object: percept.entities[0]?.value ?? 'unknown',
77
- confidence: 0.6,
96
+ confidence: CONFIDENCE_PROBLEM_INFERENCE,
78
97
  }),
79
98
  },
80
99
  {
@@ -85,17 +104,17 @@ const BUILTIN_RULES = [
85
104
  subject: 'user',
86
105
  predicate: 'is_creative',
87
106
  object: 'true',
88
- confidence: 0.5,
107
+ confidence: CONFIDENCE_CREATIVE_INFERENCE,
89
108
  }),
90
109
  },
91
110
  {
92
111
  name: 'values_speed',
93
- condition: (percept) => percept.urgency > 7,
112
+ condition: (percept) => percept.urgency > URGENCY_HIGH_THRESHOLD,
94
113
  action: () => ({
95
114
  subject: 'user',
96
115
  predicate: 'values',
97
116
  object: 'speed',
98
- confidence: 0.7,
117
+ confidence: CONFIDENCE_SPEED_INFERENCE,
99
118
  }),
100
119
  },
101
120
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"intention-generator.js","sourceRoot":"","sources":["../src/intention-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intention-generator.js","sourceRoot":"","sources":["../src/intention-generator.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,8 @@ export declare class Reasoner {
22
22
  reason(percept: Percept): ReasoningResult;
23
23
  /** Get current cognitive state snapshot. */
24
24
  getState(): CognitiveState;
25
+ private inferBeliefs;
26
+ private buildCognitiveState;
25
27
  private generateHypotheses;
26
28
  private generateQuestions;
27
29
  private calculateConfidence;
@@ -1 +1 @@
1
- {"version":3,"file":"reasoner.d.ts","sourceRoot":"","sources":["../src/reasoner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,eAAe,EACf,eAAe,EAEhB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGnD;;;;;;;;;GASG;AACH,qBAAa,QAAQ;IACnB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAA;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;gBAEjC,MAAM,GAAE,eAAoB;IAMxC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe;IAgDzC,4CAA4C;IAC5C,QAAQ,IAAI,cAAc;IAY1B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,mBAAmB;CAqB5B"}
1
+ {"version":3,"file":"reasoner.d.ts","sourceRoot":"","sources":["../src/reasoner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,eAAe,EACf,eAAe,EAGhB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAenD;;;;;;;;;GASG;AACH,qBAAa,QAAQ;IACnB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAA;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;gBAEjC,MAAM,GAAE,eAAoB;IAMxC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe;IAgBzC,4CAA4C;IAC5C,QAAQ,IAAI,cAAc;IAY1B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,mBAAmB;CAkB5B"}
package/dist/reasoner.js CHANGED
@@ -1,6 +1,17 @@
1
1
  import { WorldModel } from './world-model.js';
2
2
  import { WorkingMemory } from './working-memory.js';
3
3
  import { generateIntentions, applyInferenceRules } from './intention-generator.js';
4
+ const DEFAULT_MAX_WORKING_MEMORY = 50;
5
+ const CONFIDENCE_BASE = 0.5;
6
+ const CONFIDENCE_BELIEF_FACTOR = 0.02;
7
+ const CONFIDENCE_BELIEF_CAP = 0.2;
8
+ const CONFIDENCE_CLEAR_INTENTION_BOOST = 0.1;
9
+ const CONFIDENCE_FEW_INTENTIONS_BOOST = 0.1;
10
+ const CONFIDENCE_MAX = 0.95;
11
+ const HIGH_PRIORITY_THRESHOLD = 8;
12
+ const MAX_CONFLICTING_INTENTIONS = 3;
13
+ const MIN_BELIEFS_FOR_CONTEXT = 3;
14
+ const TARGET_PREVIEW_LENGTH = 50;
4
15
  /**
5
16
  * BDI Reasoning Engine.
6
17
  *
@@ -17,44 +28,24 @@ export class Reasoner {
17
28
  customRules;
18
29
  constructor(config = {}) {
19
30
  this.worldModel = new WorldModel();
20
- this.workingMemory = new WorkingMemory(config.maxWorkingMemory ?? 50);
31
+ this.workingMemory = new WorkingMemory(config.maxWorkingMemory ?? DEFAULT_MAX_WORKING_MEMORY);
21
32
  this.customRules = config.customRules ?? [];
22
33
  }
23
34
  /**
24
35
  * Main reasoning loop: perceive → reason → decide.
25
36
  */
26
37
  reason(percept) {
27
- // 1. Update working memory
28
38
  this.workingMemory.update(percept);
29
- // 2. Apply inference rules
30
- const beliefs = this.worldModel.getBeliefs();
31
- const candidates = applyInferenceRules(percept, beliefs, this.customRules);
32
- // 3. Update world model with inferred beliefs
33
- const newBeliefs = candidates.map((c) => this.worldModel.addBelief(c, 'inferred'));
34
- // 4. Build cognitive state
35
- const state = {
36
- beliefs: this.worldModel.getBeliefs(),
37
- goals: [],
38
- workingMemory: this.workingMemory.getItems(),
39
- currentIntentions: [],
40
- emotionalContext: percept.emotionalTone,
41
- attentionFocus: percept.entities.map((e) => e.value),
42
- lastUpdated: new Date(),
43
- };
44
- // 5. Generate intentions
39
+ const newBeliefs = this.inferBeliefs(percept);
40
+ const state = this.buildCognitiveState(percept);
45
41
  const intentions = generateIntentions(percept, state);
46
- // 6. Generate hypotheses and questions
47
- const hypotheses = this.generateHypotheses(percept);
48
- const questionsToAsk = this.generateQuestions(percept, state);
49
- // 7. Calculate confidence
50
- const confidence = this.calculateConfidence(intentions, state);
51
42
  return {
52
43
  intentions,
53
44
  newBeliefs,
54
- hypotheses,
55
- questionsToAsk,
45
+ hypotheses: this.generateHypotheses(percept),
46
+ questionsToAsk: this.generateQuestions(percept, state),
56
47
  suggestedActions: [],
57
- confidence,
48
+ confidence: this.calculateConfidence(intentions, state),
58
49
  };
59
50
  }
60
51
  /** Get current cognitive state snapshot. */
@@ -69,34 +60,42 @@ export class Reasoner {
69
60
  lastUpdated: new Date(),
70
61
  };
71
62
  }
63
+ inferBeliefs(percept) {
64
+ const beliefs = this.worldModel.getBeliefs();
65
+ const candidates = applyInferenceRules(percept, beliefs, this.customRules);
66
+ return candidates.map((c) => this.worldModel.addBelief(c, 'inferred'));
67
+ }
68
+ buildCognitiveState(percept) {
69
+ return {
70
+ beliefs: this.worldModel.getBeliefs(),
71
+ goals: [],
72
+ workingMemory: this.workingMemory.getItems(),
73
+ currentIntentions: [],
74
+ emotionalContext: percept.emotionalTone,
75
+ attentionFocus: percept.entities.map((e) => e.value),
76
+ lastUpdated: new Date(),
77
+ };
78
+ }
72
79
  generateHypotheses(percept) {
73
- const hypotheses = [];
74
- for (const need of percept.implicitNeeds) {
75
- hypotheses.push(`User might need ${need}`);
76
- }
77
- return hypotheses;
80
+ return percept.implicitNeeds.map((need) => `User might need ${need}`);
78
81
  }
79
82
  generateQuestions(percept, state) {
80
83
  const questions = [];
81
- // If few beliefs, suggest asking for more context
82
- if (state.beliefs.length < 3 && percept.requestType !== 'greeting') {
84
+ if (state.beliefs.length < MIN_BELIEFS_FOR_CONTEXT && percept.requestType !== 'greeting') {
83
85
  questions.push('What specific outcome are you looking for?');
84
86
  }
85
87
  return questions;
86
88
  }
87
89
  calculateConfidence(intentions, state) {
88
- let confidence = 0.5;
89
- // More beliefs = more confident
90
- confidence += Math.min(0.2, state.beliefs.length * 0.02);
91
- // Clear primary intention = more confident
92
- if (intentions.length > 0 && intentions[0].priority >= 8) {
93
- confidence += 0.1;
90
+ let confidence = CONFIDENCE_BASE;
91
+ confidence += Math.min(CONFIDENCE_BELIEF_CAP, state.beliefs.length * CONFIDENCE_BELIEF_FACTOR);
92
+ if (intentions.length > 0 && intentions[0].priority >= HIGH_PRIORITY_THRESHOLD) {
93
+ confidence += CONFIDENCE_CLEAR_INTENTION_BOOST;
94
94
  }
95
- // Few conflicting intentions = more confident
96
- if (intentions.length <= 3) {
97
- confidence += 0.1;
95
+ if (intentions.length <= MAX_CONFLICTING_INTENTIONS) {
96
+ confidence += CONFIDENCE_FEW_INTENTIONS_BOOST;
98
97
  }
99
- return Math.min(0.95, confidence);
98
+ return Math.min(CONFIDENCE_MAX, confidence);
100
99
  }
101
100
  }
102
101
  //# sourceMappingURL=reasoner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reasoner.js","sourceRoot":"","sources":["../src/reasoner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reasoner.js","sourceRoot":"","sources":["../src/reasoner.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,8 @@ export declare class WorldModel {
15
15
  * If the belief already exists, performs Bayesian confidence update.
16
16
  */
17
17
  addBelief(candidate: BeliefCandidate, source: BeliefSource): Belief;
18
+ private reinforceExistingBelief;
19
+ private createNewBelief;
18
20
  /** Strengthen belief confidence. */
19
21
  confirmBelief(beliefId: string): void;
20
22
  /** Weaken belief confidence. Auto-deletes if below threshold. */
@@ -1 +1 @@
1
- {"version":3,"file":"world-model.d.ts","sourceRoot":"","sources":["../src/world-model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAQnF;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAiC;IAEhD,+BAA+B;IAC/B,UAAU,IAAI,MAAM,EAAE;IAItB,wCAAwC;IACxC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAI5C,gEAAgE;IAChE,YAAY,CACV,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,SAAS;IASrB;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM;IAsCnE,oCAAoC;IACpC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUrC,iEAAiE;IACjE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAO,GAAG,IAAI;IAenD,gDAAgD;IAChD,UAAU,IAAI,IAAI;IAYlB,gCAAgC;IAChC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIpC,yBAAyB;IACzB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,gBAAgB;CASzB"}
1
+ {"version":3,"file":"world-model.d.ts","sourceRoot":"","sources":["../src/world-model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAgBnF;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAiC;IAEhD,+BAA+B;IAC/B,UAAU,IAAI,MAAM,EAAE;IAItB,wCAAwC;IACxC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAI5C,gEAAgE;IAChE,YAAY,CACV,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,SAAS;IASrB;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM;IAcnE,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,eAAe;IAiBvB,oCAAoC;IACpC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUrC,iEAAiE;IACjE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAwB,GAAG,IAAI;IAepE,gDAAgD;IAChD,UAAU,IAAI,IAAI;IAYlB,gCAAgC;IAChC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIpC,yBAAyB;IACzB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,gBAAgB;CASzB"}
@@ -4,6 +4,13 @@ const SOURCE_WEIGHTS = {
4
4
  observed: 0.6,
5
5
  inferred: 0.4,
6
6
  };
7
+ const CONFIDENCE_MAX = 0.99;
8
+ const CONFIDENCE_MIN = 0.01;
9
+ const CONFIDENCE_CONFIRM_BOOST = 0.1;
10
+ const CONFIDENCE_DELETION_THRESHOLD = 0.1;
11
+ const DEFAULT_WEAKEN_AMOUNT = 0.15;
12
+ const DECAY_RATE_INFERRED = 0.1;
13
+ const DECAY_RATE_DEFAULT = 0.05;
7
14
  /**
8
15
  * Manages user beliefs (world model) with Bayesian confidence updates.
9
16
  */
@@ -30,15 +37,21 @@ export class WorldModel {
30
37
  addBelief(candidate, source) {
31
38
  const existing = this.findByTriple(candidate.subject, candidate.predicate, candidate.object);
32
39
  if (existing) {
33
- const updated = {
34
- ...existing,
35
- confidence: this.updateConfidence(existing.confidence, candidate.confidence, source),
36
- evidence: [...existing.evidence, `Updated at ${new Date().toISOString()}`],
37
- updatedAt: new Date(),
38
- };
39
- this.beliefs.set(updated.id, updated);
40
- return updated;
40
+ return this.reinforceExistingBelief(existing, candidate, source);
41
41
  }
42
+ return this.createNewBelief(candidate, source);
43
+ }
44
+ reinforceExistingBelief(existing, candidate, source) {
45
+ const updated = {
46
+ ...existing,
47
+ confidence: this.updateConfidence(existing.confidence, candidate.confidence, source),
48
+ evidence: [...existing.evidence, `Updated at ${new Date().toISOString()}`],
49
+ updatedAt: new Date(),
50
+ };
51
+ this.beliefs.set(updated.id, updated);
52
+ return updated;
53
+ }
54
+ createNewBelief(candidate, source) {
42
55
  const now = new Date();
43
56
  const belief = {
44
57
  id: uid('belief'),
@@ -61,17 +74,17 @@ export class WorldModel {
61
74
  return;
62
75
  this.beliefs.set(beliefId, {
63
76
  ...belief,
64
- confidence: Math.min(0.99, belief.confidence + 0.1),
77
+ confidence: Math.min(CONFIDENCE_MAX, belief.confidence + CONFIDENCE_CONFIRM_BOOST),
65
78
  updatedAt: new Date(),
66
79
  });
67
80
  }
68
81
  /** Weaken belief confidence. Auto-deletes if below threshold. */
69
- weakenBelief(beliefId, amount = 0.15) {
82
+ weakenBelief(beliefId, amount = DEFAULT_WEAKEN_AMOUNT) {
70
83
  const belief = this.beliefs.get(beliefId);
71
84
  if (!belief)
72
85
  return;
73
86
  const newConfidence = belief.confidence - amount;
74
- if (newConfidence < 0.1) {
87
+ if (newConfidence < CONFIDENCE_DELETION_THRESHOLD) {
75
88
  this.beliefs.delete(beliefId);
76
89
  }
77
90
  else {
@@ -85,9 +98,9 @@ export class WorldModel {
85
98
  /** Apply periodic decay to inferred beliefs. */
86
99
  applyDecay() {
87
100
  for (const [id, belief] of this.beliefs) {
88
- const decayRate = belief.source === 'inferred' ? 0.1 : 0.05;
101
+ const decayRate = belief.source === 'inferred' ? DECAY_RATE_INFERRED : DECAY_RATE_DEFAULT;
89
102
  const newConfidence = belief.confidence * (1 - decayRate);
90
- if (newConfidence < 0.1) {
103
+ if (newConfidence < CONFIDENCE_DELETION_THRESHOLD) {
91
104
  this.beliefs.delete(id);
92
105
  }
93
106
  else {
@@ -109,7 +122,7 @@ export class WorldModel {
109
122
  updateConfidence(prior, newEvidence, source) {
110
123
  const weight = SOURCE_WEIGHTS[source];
111
124
  const updated = prior * (1 - weight) + newEvidence * weight;
112
- return Math.min(0.99, Math.max(0.01, updated));
125
+ return Math.min(CONFIDENCE_MAX, Math.max(CONFIDENCE_MIN, updated));
113
126
  }
114
127
  }
115
128
  //# sourceMappingURL=world-model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"world-model.js","sourceRoot":"","sources":["../src/world-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"world-model.js","sourceRoot":"","sources":["../src/world-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAA;AAG5C,MAAM,cAAc,GAAiC;IACnD,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;CACd,CAAA;AAED,MAAM,cAAc,GAAG,IAAI,CAAA;AAC3B,MAAM,cAAc,GAAG,IAAI,CAAA;AAC3B,MAAM,wBAAwB,GAAG,GAAG,CAAA;AACpC,MAAM,6BAA6B,GAAG,GAAG,CAAA;AACzC,MAAM,qBAAqB,GAAG,IAAI,CAAA;AAClC,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAC/B,MAAM,kBAAkB,GAAG,IAAI,CAAA;AAE/B;;GAEG;AACH,MAAM,OAAO,UAAU;IACb,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAA;IAEhD,+BAA+B;IAC/B,UAAU;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,wCAAwC;IACxC,eAAe,CAAC,SAAiB;QAC/B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA;IACnE,CAAC;IAED,gEAAgE;IAChE,YAAY,CACV,OAAe,EACf,SAAiB,EACjB,MAAc;QAEd,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,OAAO,KAAK,OAAO;YACrB,CAAC,CAAC,SAAS,KAAK,SAAS;YACzB,CAAC,CAAC,MAAM,KAAK,MAAM,CACtB,CAAA;IACH,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,SAA0B,EAAE,MAAoB;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAChC,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,MAAM,CACjB,CAAA;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAClE,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAChD,CAAC;IAEO,uBAAuB,CAC7B,QAAgB,EAChB,SAA0B,EAC1B,MAAoB;QAEpB,MAAM,OAAO,GAAW;YACtB,GAAG,QAAQ;YACX,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAC/B,QAAQ,CAAC,UAAU,EACnB,SAAS,CAAC,UAAU,EACpB,MAAM,CACP;YACD,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,cAAc,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1E,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAA;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QACrC,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,eAAe,CAAC,SAA0B,EAAE,MAAoB;QACtE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,MAAM,MAAM,GAAW;YACrB,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC;YACjB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,MAAM;YACN,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAA;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACnC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,oCAAoC;IACpC,aAAa,CAAC,QAAgB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACzC,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;YACzB,GAAG,MAAM;YACT,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,UAAU,GAAG,wBAAwB,CAAC;YAClF,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAA;IACJ,CAAC;IAED,iEAAiE;IACjE,YAAY,CAAC,QAAgB,EAAE,MAAM,GAAG,qBAAqB;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACzC,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAA;QAChD,IAAI,aAAa,GAAG,6BAA6B,EAAE,CAAC;YAClD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACzB,GAAG,MAAM;gBACT,UAAU,EAAE,aAAa;gBACzB,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,UAAU;QACR,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAA;YACzF,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;YACzD,IAAI,aAAa,GAAG,6BAA6B,EAAE,CAAC;gBAClD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACzB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAA;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAED,yBAAyB;IACzB,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;IAC1B,CAAC;IAEO,gBAAgB,CACtB,KAAa,EACb,WAAmB,EACnB,MAAoB;QAEpB,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;QACrC,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,WAAW,GAAG,MAAM,CAAA;QAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAA;IACpE,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cognitive-engine/reasoning",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "BDI reasoning engine: beliefs, intentions, inference rules, working memory",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",