0xkobold 0.7.2 → 0.8.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 (252) hide show
  1. package/HEARTBEAT.md +239 -0
  2. package/IDENTITY.md +12 -0
  3. package/README.md +138 -4
  4. package/SOUL.md +21 -0
  5. package/dist/package.json +10 -5
  6. package/dist/src/agent/bootstrap-loader.js +295 -66
  7. package/dist/src/agent/bootstrap-loader.js.map +1 -1
  8. package/dist/src/agent/context-pruning.js +10 -5
  9. package/dist/src/agent/context-pruning.js.map +1 -1
  10. package/dist/src/agent/embedded-runner.js +29 -15
  11. package/dist/src/agent/embedded-runner.js.map +1 -1
  12. package/dist/src/agent/index.js +5 -2
  13. package/dist/src/agent/index.js.map +1 -1
  14. package/dist/src/agent/system-prompt.js +167 -20
  15. package/dist/src/agent/system-prompt.js.map +1 -1
  16. package/dist/src/agent/tools/spawn-agent.js +72 -5
  17. package/dist/src/agent/tools/spawn-agent.js.map +1 -1
  18. package/dist/src/channels/slack/webhook.js +2 -2
  19. package/dist/src/channels/slack/webhook.js.map +1 -1
  20. package/dist/src/channels/telegram/bot.js +4 -4
  21. package/dist/src/channels/telegram/bot.js.map +1 -1
  22. package/dist/src/channels/whatsapp/integration.js +4 -4
  23. package/dist/src/channels/whatsapp/integration.js.map +1 -1
  24. package/dist/src/cli/commands/gateway.js +9 -10
  25. package/dist/src/cli/commands/gateway.js.map +1 -1
  26. package/dist/src/cli/commands/init.js +90 -0
  27. package/dist/src/cli/commands/init.js.map +1 -1
  28. package/dist/src/cli/commands/setup.js +53 -0
  29. package/dist/src/cli/commands/setup.js.map +1 -1
  30. package/dist/src/cli/index.js +0 -0
  31. package/dist/src/config/unified-config.js +5 -0
  32. package/dist/src/config/unified-config.js.map +1 -1
  33. package/dist/src/cron/index.js +2 -0
  34. package/dist/src/cron/index.js.map +1 -1
  35. package/dist/src/cron/nl-parser.js +522 -0
  36. package/dist/src/cron/nl-parser.js.map +1 -0
  37. package/dist/src/cron/runner.js +6 -31
  38. package/dist/src/cron/runner.js.map +1 -1
  39. package/dist/src/event-bus/index.js.map +1 -1
  40. package/dist/src/extensions/core/agent-orchestrator-extension.js +200 -148
  41. package/dist/src/extensions/core/agent-orchestrator-extension.js.map +1 -1
  42. package/dist/src/extensions/core/diagnostics-extension.js +93 -56
  43. package/dist/src/extensions/core/diagnostics-extension.js.map +1 -1
  44. package/dist/src/extensions/core/draconic-safety-extension.js +256 -3
  45. package/dist/src/extensions/core/draconic-safety-extension.js.map +1 -1
  46. package/dist/src/extensions/core/heartbeat-extension.js +416 -150
  47. package/dist/src/extensions/core/heartbeat-extension.js.map +1 -1
  48. package/dist/src/extensions/core/{generative-agents-extension.js → learning-extension.js} +90 -128
  49. package/dist/src/extensions/core/learning-extension.js.map +1 -0
  50. package/dist/src/extensions/core/perennial-memory-extension.js +884 -87
  51. package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -1
  52. package/dist/src/extensions/core/routed-ollama-extension.js +345 -0
  53. package/dist/src/extensions/core/routed-ollama-extension.js.map +1 -0
  54. package/dist/src/extensions/core/task-manager-extension.js +25 -2
  55. package/dist/src/extensions/core/task-manager-extension.js.map +1 -1
  56. package/dist/src/extensions/core/websearch-enhanced-extension.js +81 -23
  57. package/dist/src/extensions/core/websearch-enhanced-extension.js.map +1 -1
  58. package/dist/src/extensions/core/workspace-footer-extension.js +40 -63
  59. package/dist/src/extensions/core/workspace-footer-extension.js.map +1 -1
  60. package/dist/src/extensions/loader.js +5 -1
  61. package/dist/src/extensions/loader.js.map +1 -1
  62. package/dist/src/gateway/gateway-server.js +74 -3
  63. package/dist/src/gateway/gateway-server.js.map +1 -1
  64. package/dist/src/gateway/index.js +2 -2
  65. package/dist/src/gateway/index.js.map +1 -1
  66. package/dist/src/gateway/methods/agent.js +1 -1
  67. package/dist/src/gateway/methods/agent.js.map +1 -1
  68. package/dist/src/gateway/methods/index.js +4 -0
  69. package/dist/src/gateway/methods/index.js.map +1 -1
  70. package/dist/src/gateway/methods/node.js +261 -0
  71. package/dist/src/gateway/methods/node.js.map +1 -0
  72. package/dist/src/gateway/queue-modes.js +356 -0
  73. package/dist/src/gateway/queue-modes.js.map +1 -0
  74. package/dist/src/index.js +47 -6
  75. package/dist/src/index.js.map +1 -1
  76. package/dist/src/llm/community-analytics.js +569 -0
  77. package/dist/src/llm/community-analytics.js.map +1 -0
  78. package/dist/src/llm/index.js +28 -4
  79. package/dist/src/llm/index.js.map +1 -1
  80. package/dist/src/llm/model-discovery.js +335 -0
  81. package/dist/src/llm/model-discovery.js.map +1 -0
  82. package/dist/src/llm/model-popularity.js +566 -0
  83. package/dist/src/llm/model-popularity.js.map +1 -0
  84. package/dist/src/llm/model-scoring-db.js +553 -0
  85. package/dist/src/llm/model-scoring-db.js.map +1 -0
  86. package/dist/src/llm/multi-provider.js +258 -0
  87. package/dist/src/llm/multi-provider.js.map +1 -0
  88. package/dist/src/llm/ollama.js +133 -187
  89. package/dist/src/llm/ollama.js.map +1 -1
  90. package/dist/src/llm/router-commands.js +773 -0
  91. package/dist/src/llm/router-commands.js.map +1 -0
  92. package/dist/src/llm/router-core.js +600 -0
  93. package/dist/src/llm/router-core.js.map +1 -0
  94. package/dist/src/memory/checkpoint-manager.js +278 -0
  95. package/dist/src/memory/checkpoint-manager.js.map +1 -0
  96. package/dist/src/memory/conflict-detector.js +279 -0
  97. package/dist/src/memory/conflict-detector.js.map +1 -0
  98. package/dist/src/memory/context-graph.js +360 -0
  99. package/dist/src/memory/context-graph.js.map +1 -0
  100. package/dist/src/memory/dialectic/benchmark-cli.js +200 -0
  101. package/dist/src/memory/dialectic/benchmark-cli.js.map +1 -0
  102. package/dist/src/memory/dialectic/debug-reasoning.js +37 -0
  103. package/dist/src/memory/dialectic/debug-reasoning.js.map +1 -0
  104. package/dist/src/memory/dialectic/index.js +135 -0
  105. package/dist/src/memory/dialectic/index.js.map +1 -0
  106. package/dist/src/memory/dialectic/nudges.js +380 -0
  107. package/dist/src/memory/dialectic/nudges.js.map +1 -0
  108. package/dist/src/memory/dialectic/reasoning-engine.js +607 -0
  109. package/dist/src/memory/dialectic/reasoning-engine.js.map +1 -0
  110. package/dist/src/memory/dialectic/reasoning.js +390 -0
  111. package/dist/src/memory/dialectic/reasoning.js.map +1 -0
  112. package/dist/src/memory/dialectic/skill-creation.js +481 -0
  113. package/dist/src/memory/dialectic/skill-creation.js.map +1 -0
  114. package/dist/src/memory/dialectic/store.js +663 -0
  115. package/dist/src/memory/dialectic/store.js.map +1 -0
  116. package/dist/src/memory/dialectic/types.js +11 -0
  117. package/dist/src/memory/dialectic/types.js.map +1 -0
  118. package/dist/src/memory/index.js +24 -2
  119. package/dist/src/memory/index.js.map +1 -1
  120. package/dist/src/memory/memory-decay.js +350 -0
  121. package/dist/src/memory/memory-decay.js.map +1 -0
  122. package/dist/src/memory/memory-integration.js +5 -5
  123. package/dist/src/memory/memory-integration.js.map +1 -1
  124. package/dist/src/memory/migrate-memory-stream.js +97 -0
  125. package/dist/src/memory/migrate-memory-stream.js.map +1 -0
  126. package/dist/src/memory/session-memory-bridge.js +49 -5
  127. package/dist/src/memory/session-memory-bridge.js.map +1 -1
  128. package/dist/src/memory/session-store.js +123 -0
  129. package/dist/src/memory/session-store.js.map +1 -1
  130. package/dist/src/memory/smart-write-rules.js +164 -0
  131. package/dist/src/memory/smart-write-rules.js.map +1 -0
  132. package/dist/src/memory/tiered-memory.js +436 -0
  133. package/dist/src/memory/tiered-memory.js.map +1 -0
  134. package/dist/src/memory/types.js +6 -0
  135. package/dist/src/memory/types.js.map +1 -0
  136. package/dist/src/memory/verify-migration.js +99 -0
  137. package/dist/src/memory/verify-migration.js.map +1 -0
  138. package/dist/src/pi-config.js +11 -9
  139. package/dist/src/pi-config.js.map +1 -1
  140. package/dist/src/skills/conditional-skills.js +464 -0
  141. package/dist/src/skills/conditional-skills.js.map +1 -0
  142. package/dist/src/skills/index.js +5 -0
  143. package/dist/src/skills/index.js.map +1 -1
  144. package/dist/src/skills/loader.js +56 -0
  145. package/dist/src/skills/loader.js.map +1 -1
  146. package/dist/src/skills/skill-manage.js +417 -0
  147. package/dist/src/skills/skill-manage.js.map +1 -0
  148. package/dist/src/tui/commands/orchestration-commands.js +62 -0
  149. package/dist/src/tui/commands/orchestration-commands.js.map +1 -1
  150. package/package.json +10 -5
  151. package/skills/model-router-test.ts +65 -0
  152. package/dist/src/extensions/core/auto-security-scan-extension.js +0 -41
  153. package/dist/src/extensions/core/auto-security-scan-extension.js.map +0 -1
  154. package/dist/src/extensions/core/cloudflare-browser-extension.js +0 -389
  155. package/dist/src/extensions/core/cloudflare-browser-extension.js.map +0 -1
  156. package/dist/src/extensions/core/compaction-safeguard.js +0 -223
  157. package/dist/src/extensions/core/compaction-safeguard.js.map +0 -1
  158. package/dist/src/extensions/core/generative-agents-extension.js.map +0 -1
  159. package/dist/src/extensions/core/obsidian-bridge-extension.js +0 -488
  160. package/dist/src/extensions/core/obsidian-bridge-extension.js.map +0 -1
  161. package/dist/src/llm/router.js +0 -145
  162. package/dist/src/llm/router.js.map +0 -1
  163. package/skills/kobold-scan-skill/node_modules/.package-lock.json +0 -172
  164. package/skills/kobold-scan-skill/node_modules/ansi-styles/index.d.ts +0 -345
  165. package/skills/kobold-scan-skill/node_modules/ansi-styles/index.js +0 -163
  166. package/skills/kobold-scan-skill/node_modules/ansi-styles/license +0 -9
  167. package/skills/kobold-scan-skill/node_modules/ansi-styles/package.json +0 -56
  168. package/skills/kobold-scan-skill/node_modules/ansi-styles/readme.md +0 -152
  169. package/skills/kobold-scan-skill/node_modules/balanced-match/.github/FUNDING.yml +0 -2
  170. package/skills/kobold-scan-skill/node_modules/balanced-match/LICENSE.md +0 -21
  171. package/skills/kobold-scan-skill/node_modules/balanced-match/README.md +0 -97
  172. package/skills/kobold-scan-skill/node_modules/balanced-match/index.js +0 -62
  173. package/skills/kobold-scan-skill/node_modules/balanced-match/package.json +0 -48
  174. package/skills/kobold-scan-skill/node_modules/brace-expansion/.github/FUNDING.yml +0 -2
  175. package/skills/kobold-scan-skill/node_modules/brace-expansion/LICENSE +0 -21
  176. package/skills/kobold-scan-skill/node_modules/brace-expansion/README.md +0 -135
  177. package/skills/kobold-scan-skill/node_modules/brace-expansion/index.js +0 -203
  178. package/skills/kobold-scan-skill/node_modules/brace-expansion/package.json +0 -49
  179. package/skills/kobold-scan-skill/node_modules/chalk/index.d.ts +0 -415
  180. package/skills/kobold-scan-skill/node_modules/chalk/license +0 -9
  181. package/skills/kobold-scan-skill/node_modules/chalk/package.json +0 -68
  182. package/skills/kobold-scan-skill/node_modules/chalk/readme.md +0 -341
  183. package/skills/kobold-scan-skill/node_modules/chalk/source/index.js +0 -229
  184. package/skills/kobold-scan-skill/node_modules/chalk/source/templates.js +0 -134
  185. package/skills/kobold-scan-skill/node_modules/chalk/source/util.js +0 -39
  186. package/skills/kobold-scan-skill/node_modules/color-convert/CHANGELOG.md +0 -54
  187. package/skills/kobold-scan-skill/node_modules/color-convert/LICENSE +0 -21
  188. package/skills/kobold-scan-skill/node_modules/color-convert/README.md +0 -68
  189. package/skills/kobold-scan-skill/node_modules/color-convert/conversions.js +0 -839
  190. package/skills/kobold-scan-skill/node_modules/color-convert/index.js +0 -81
  191. package/skills/kobold-scan-skill/node_modules/color-convert/package.json +0 -48
  192. package/skills/kobold-scan-skill/node_modules/color-convert/route.js +0 -97
  193. package/skills/kobold-scan-skill/node_modules/color-name/LICENSE +0 -8
  194. package/skills/kobold-scan-skill/node_modules/color-name/README.md +0 -11
  195. package/skills/kobold-scan-skill/node_modules/color-name/index.js +0 -152
  196. package/skills/kobold-scan-skill/node_modules/color-name/package.json +0 -28
  197. package/skills/kobold-scan-skill/node_modules/commander/LICENSE +0 -22
  198. package/skills/kobold-scan-skill/node_modules/commander/Readme.md +0 -1129
  199. package/skills/kobold-scan-skill/node_modules/commander/esm.mjs +0 -16
  200. package/skills/kobold-scan-skill/node_modules/commander/index.js +0 -27
  201. package/skills/kobold-scan-skill/node_modules/commander/lib/argument.js +0 -147
  202. package/skills/kobold-scan-skill/node_modules/commander/lib/command.js +0 -2179
  203. package/skills/kobold-scan-skill/node_modules/commander/lib/error.js +0 -45
  204. package/skills/kobold-scan-skill/node_modules/commander/lib/help.js +0 -461
  205. package/skills/kobold-scan-skill/node_modules/commander/lib/option.js +0 -326
  206. package/skills/kobold-scan-skill/node_modules/commander/lib/suggestSimilar.js +0 -100
  207. package/skills/kobold-scan-skill/node_modules/commander/package-support.json +0 -16
  208. package/skills/kobold-scan-skill/node_modules/commander/package.json +0 -80
  209. package/skills/kobold-scan-skill/node_modules/commander/typings/index.d.ts +0 -891
  210. package/skills/kobold-scan-skill/node_modules/fs.realpath/LICENSE +0 -43
  211. package/skills/kobold-scan-skill/node_modules/fs.realpath/README.md +0 -33
  212. package/skills/kobold-scan-skill/node_modules/fs.realpath/index.js +0 -66
  213. package/skills/kobold-scan-skill/node_modules/fs.realpath/old.js +0 -303
  214. package/skills/kobold-scan-skill/node_modules/fs.realpath/package.json +0 -26
  215. package/skills/kobold-scan-skill/node_modules/glob/LICENSE +0 -15
  216. package/skills/kobold-scan-skill/node_modules/glob/README.md +0 -399
  217. package/skills/kobold-scan-skill/node_modules/glob/common.js +0 -244
  218. package/skills/kobold-scan-skill/node_modules/glob/glob.js +0 -790
  219. package/skills/kobold-scan-skill/node_modules/glob/package.json +0 -55
  220. package/skills/kobold-scan-skill/node_modules/glob/sync.js +0 -486
  221. package/skills/kobold-scan-skill/node_modules/has-flag/index.d.ts +0 -39
  222. package/skills/kobold-scan-skill/node_modules/has-flag/index.js +0 -8
  223. package/skills/kobold-scan-skill/node_modules/has-flag/license +0 -9
  224. package/skills/kobold-scan-skill/node_modules/has-flag/package.json +0 -46
  225. package/skills/kobold-scan-skill/node_modules/has-flag/readme.md +0 -89
  226. package/skills/kobold-scan-skill/node_modules/inflight/LICENSE +0 -15
  227. package/skills/kobold-scan-skill/node_modules/inflight/README.md +0 -37
  228. package/skills/kobold-scan-skill/node_modules/inflight/inflight.js +0 -54
  229. package/skills/kobold-scan-skill/node_modules/inflight/package.json +0 -29
  230. package/skills/kobold-scan-skill/node_modules/inherits/LICENSE +0 -16
  231. package/skills/kobold-scan-skill/node_modules/inherits/README.md +0 -42
  232. package/skills/kobold-scan-skill/node_modules/inherits/inherits.js +0 -9
  233. package/skills/kobold-scan-skill/node_modules/inherits/inherits_browser.js +0 -27
  234. package/skills/kobold-scan-skill/node_modules/inherits/package.json +0 -29
  235. package/skills/kobold-scan-skill/node_modules/minimatch/LICENSE +0 -15
  236. package/skills/kobold-scan-skill/node_modules/minimatch/README.md +0 -259
  237. package/skills/kobold-scan-skill/node_modules/minimatch/lib/path.js +0 -4
  238. package/skills/kobold-scan-skill/node_modules/minimatch/minimatch.js +0 -944
  239. package/skills/kobold-scan-skill/node_modules/minimatch/package.json +0 -35
  240. package/skills/kobold-scan-skill/node_modules/once/LICENSE +0 -15
  241. package/skills/kobold-scan-skill/node_modules/once/README.md +0 -79
  242. package/skills/kobold-scan-skill/node_modules/once/once.js +0 -42
  243. package/skills/kobold-scan-skill/node_modules/once/package.json +0 -33
  244. package/skills/kobold-scan-skill/node_modules/supports-color/browser.js +0 -5
  245. package/skills/kobold-scan-skill/node_modules/supports-color/index.js +0 -135
  246. package/skills/kobold-scan-skill/node_modules/supports-color/license +0 -9
  247. package/skills/kobold-scan-skill/node_modules/supports-color/package.json +0 -53
  248. package/skills/kobold-scan-skill/node_modules/supports-color/readme.md +0 -76
  249. package/skills/kobold-scan-skill/node_modules/wrappy/LICENSE +0 -15
  250. package/skills/kobold-scan-skill/node_modules/wrappy/README.md +0 -36
  251. package/skills/kobold-scan-skill/node_modules/wrappy/package.json +0 -29
  252. package/skills/kobold-scan-skill/node_modules/wrappy/wrappy.js +0 -33
@@ -0,0 +1,390 @@
1
+ /**
2
+ * Dialectic Reasoning Engine
3
+ *
4
+ * Honcho-style reasoning: Thesis → Antithesis → Synthesis
5
+ *
6
+ * Key insight: "Traditional RAG retrieves what was said,
7
+ * but misses insights only accessible by rigorous reasoning."
8
+ *
9
+ * This module:
10
+ * 1. Observes raw events/messages
11
+ * 2. Detects contradictions (antithesis)
12
+ * 3. Synthesizes new understanding
13
+ * 4. Extracts inferences (preferences, goals, constraints, values)
14
+ */
15
+ import { getDialecticStore } from "./store";
16
+ // ═════════════════════════════════════════════════════════════════
17
+ // REASONING PROMPTS
18
+ // ═════════════════════════════════════════════════════════════════
19
+ const CONTRADICTION_DETECTION_PROMPT = `You are analyzing observations about a user to detect contradictions.
20
+
21
+ Observations:
22
+ {{observations}}
23
+
24
+ Look for pairs of observations that:
25
+ 1. Directly contradict each other (A says X, B says not X)
26
+ 2. Are incompatible in practice (A wants X, A cannot do X)
27
+ 3. Reveal changed beliefs (A said X before, A says Y now)
28
+
29
+ For each contradiction found, provide:
30
+ - observation_a: The first observation (quote)
31
+ - observation_b: The second observation (quote)
32
+ - resolution: How to resolve it (newer_wins, context, refinement, correction, both_true)
33
+ - resolution_note: Why this resolution
34
+ - confidence: 0.0-1.0
35
+
36
+ Return JSON array. If no contradictions found, return empty array []`;
37
+ const SYNTHESIS_PROMPT = `You are synthesizing observations about a user into a coherent understanding.
38
+
39
+ Observations:
40
+ {{observations}}
41
+
42
+ Contradictions found:
43
+ {{contradictions}}
44
+
45
+ Previous syntheses:
46
+ {{previous_syntheses}}
47
+
48
+ Create a synthesis that:
49
+ 1. Integrates all observations
50
+ 2. Resolves any contradictions
51
+ 3. Identifies patterns and themes
52
+ 4. Highlights what's most important to understand about this user
53
+
54
+ Return JSON:
55
+ {
56
+ "content": "The synthesized understanding...",
57
+ "confidence": 0.0-1.0,
58
+ "key_insights": ["insight1", "insight2"]
59
+ }`;
60
+ const PREFERENCE_EXTRACTION_PROMPT = `You are extracting user preferences from observations.
61
+
62
+ Observations:
63
+ {{observations}}
64
+
65
+ For each preference you can infer:
66
+ - topic: What domain (e.g., "programming_language", "architecture_style")
67
+ - preference: What they prefer (e.g., "TypeScript", "clean and minimal")
68
+ - confidence: How confident (0.0-1.0)
69
+ - evidence: Which observations support this (use quotes)
70
+
71
+ Only extract preferences that are clearly indicated by the evidence.
72
+ Be conservative with confidence - use 0.5+ only if strongly supported.
73
+
74
+ Return JSON array of preferences.`;
75
+ const GOAL_EXTRACTION_PROMPT = `You are extracting user goals from observations.
76
+
77
+ Observations:
78
+ {{observations}}
79
+
80
+ For each goal you can infer:
81
+ - description: What they're trying to achieve
82
+ - status: active, completed, abandoned, or unknown
83
+ - priority: high, medium, or low
84
+ - confidence: 0.0-1.0
85
+ - evidence: Which observations support this
86
+
87
+ Return JSON array of goals.`;
88
+ const CONSTRAINT_EXTRACTION_PROMPT = `You are extracting user constraints from observations.
89
+
90
+ Observations:
91
+ {{observations}}
92
+
93
+ For each constraint you can infer:
94
+ - description: What they cannot or will not do
95
+ - type: hard (cannot violate), soft (would prefer not to), preference (stated constraint)
96
+ - confidence: 0.0-1.0
97
+ - evidence: Which observations support this
98
+
99
+ Return JSON array of constraints.`;
100
+ const VALUE_EXTRACTION_PROMPT = `You are extracting user values from observations.
101
+
102
+ Observations:
103
+ {{observations}}
104
+
105
+ Values are what the user cares about intrinsically - not means to an end.
106
+
107
+ For each value:
108
+ - value: What they value (e.g., "family", "clean architecture", "autonomy")
109
+ - context: In what context (e.g., "when making technical decisions")
110
+ - confidence: 0.0-1.0
111
+ - evidence: Which observations support this
112
+
113
+ Return JSON array of values.`;
114
+ // ═════════════════════════════════════════════════════════════════
115
+ // REASONING ENGINE
116
+ // ═════════════════════════════════════════════════════════════════
117
+ export class DialecticReasoning {
118
+ store;
119
+ ollamaUrl;
120
+ constructor(store, ollamaUrl) {
121
+ this.store = store || getDialecticStore();
122
+ this.ollamaUrl = ollamaUrl || process.env.OLLAMA_URL || "http://localhost:11434";
123
+ }
124
+ // ─────────────────────────────────────────────────────────────────
125
+ // MAIN REASONING FLOW
126
+ // ─────────────────────────────────────────────────────────────────
127
+ /**
128
+ * Process observations for a peer and update their representation.
129
+ * This is the main entry point for dialectic reasoning.
130
+ */
131
+ async reason(peerId, newObservations) {
132
+ // Get all observations for this peer
133
+ const observations = newObservations
134
+ ? [...newObservations, ...this.store.getObservations(peerId, 50)]
135
+ : this.store.getObservations(peerId, 100);
136
+ if (observations.length < 3) {
137
+ // Not enough data to reason
138
+ return {
139
+ contradictions: [],
140
+ synthesis: null,
141
+ preferences: [],
142
+ goals: [],
143
+ constraints: [],
144
+ values: [],
145
+ };
146
+ }
147
+ // Step 1: Detect contradictions
148
+ const contradictions = await this.detectContradictions(peerId, observations);
149
+ // Step 2: Synthesize understanding
150
+ const synthesis = await this.synthesize(peerId, observations, contradictions);
151
+ // Step 3: Extract inferences
152
+ const preferences = await this.extractPreferences(peerId, observations);
153
+ const goals = await this.extractGoals(peerId, observations);
154
+ const constraints = await this.extractConstraints(peerId, observations);
155
+ const values = await this.extractValues(peerId, observations);
156
+ return {
157
+ contradictions,
158
+ synthesis,
159
+ preferences,
160
+ goals,
161
+ constraints,
162
+ values,
163
+ };
164
+ }
165
+ // ─────────────────────────────────────────────────────────────────
166
+ // CONTRADICTION DETECTION
167
+ // ─────────────────────────────────────────────────────────────────
168
+ /**
169
+ * Detect contradictions between observations.
170
+ * Uses LLM for sophisticated detection.
171
+ */
172
+ async detectContradictions(peerId, observations) {
173
+ // Quick heuristic check: are there potential contradictions?
174
+ const potentialPairs = this.findPotentialContradictions(observations);
175
+ if (potentialPairs.length === 0) {
176
+ return [];
177
+ }
178
+ // Use LLM for deeper analysis
179
+ const prompt = CONTRADICTION_DETECTION_PROMPT.replace("{{observations}}", observations.map(o => `- [${o.category}] ${o.content}`).join("\n"));
180
+ try {
181
+ const response = await this.callLLM(prompt);
182
+ const parsed = JSON.parse(response);
183
+ // Handle both array and object responses
184
+ const detected = Array.isArray(parsed) ? parsed : (parsed.contradictions || []);
185
+ // Store contradictions
186
+ const stored = [];
187
+ for (const c of detected.slice(0, 5)) { // Limit to 5
188
+ const contradiction = this.store.addContradiction(peerId, c.observation_a, c.observation_b, c.resolution || "unknown", c.resolution_note || "", c.confidence || 0.5);
189
+ stored.push(contradiction);
190
+ }
191
+ return stored;
192
+ }
193
+ catch (err) {
194
+ console.warn("[DialecticReasoning] Contradiction detection failed:", err);
195
+ return [];
196
+ }
197
+ }
198
+ /**
199
+ * Find pairs of observations that might contradict.
200
+ * Quick heuristic before LLM analysis.
201
+ */
202
+ findPotentialContradictions(observations) {
203
+ const pairs = [];
204
+ // Look for:
205
+ // - Same topic, different values (preference vs preference)
206
+ // - Goal vs constraint (goal: do X, constraint: cannot do X)
207
+ // - Success vs error about same thing
208
+ for (let i = 0; i < observations.length; i++) {
209
+ for (let j = i + 1; j < observations.length; j++) {
210
+ const a = observations[i];
211
+ const b = observations[j];
212
+ // Same category, might conflict
213
+ if (a.category === b.category && a.category === "preference") {
214
+ pairs.push([a, b]);
215
+ }
216
+ // Goal vs constraint
217
+ if ((a.category === "goal" && b.category === "constraint") ||
218
+ (a.category === "constraint" && b.category === "goal")) {
219
+ pairs.push([a, b]);
220
+ }
221
+ // Success vs error
222
+ if ((a.category === "success" && b.category === "error") ||
223
+ (a.category === "error" && b.category === "success")) {
224
+ pairs.push([a, b]);
225
+ }
226
+ }
227
+ }
228
+ return pairs.slice(0, 10); // Limit
229
+ }
230
+ // ─────────────────────────────────────────────────────────────────
231
+ // SYNTHESIS
232
+ // ─────────────────────────────────────────────────────────────────
233
+ /**
234
+ * Synthesize observations into coherent understanding.
235
+ */
236
+ async synthesize(peerId, observations, contradictions) {
237
+ if (observations.length < 5) {
238
+ return null; // Not enough to synthesize
239
+ }
240
+ const previousSyntheses = this.store.getSyntheses(peerId, 3);
241
+ const prompt = SYNTHESIS_PROMPT
242
+ .replace("{{observations}}", observations.map(o => `- [${o.category}] ${o.content}`).join("\n"))
243
+ .replace("{{contradictions}}", contradictions.length > 0
244
+ ? contradictions.map(c => `- ${c.observationA} vs ${c.observationB} (${c.resolution})`).join("\n")
245
+ : "None detected")
246
+ .replace("{{previous_syntheses}}", previousSyntheses.length > 0
247
+ ? previousSyntheses.map(s => `- ${s.content}`).join("\n")
248
+ : "First synthesis");
249
+ try {
250
+ const response = await this.callLLM(prompt);
251
+ const result = JSON.parse(response);
252
+ const synthesis = this.store.addSynthesis(peerId, result.content, observations.slice(0, 20).map(o => o.id), // Link to observations
253
+ contradictions.map(c => c.id), result.confidence || 0.7);
254
+ return synthesis;
255
+ }
256
+ catch (err) {
257
+ console.warn("[DialecticReasoning] Synthesis failed:", err);
258
+ return null;
259
+ }
260
+ }
261
+ // ─────────────────────────────────────────────────────────────────
262
+ // INFERENCE EXTRACTION
263
+ // ─────────────────────────────────────────────────────────────────
264
+ async extractPreferences(peerId, observations) {
265
+ const prompt = PREFERENCE_EXTRACTION_PROMPT.replace("{{observations}}", observations.map(o => `- [${o.category}] ${o.content}`).join("\n"));
266
+ try {
267
+ const response = await this.callLLM(prompt);
268
+ const parsed = JSON.parse(response);
269
+ // Handle both array and object responses
270
+ const preferences = Array.isArray(parsed) ? parsed : (parsed.preferences || []);
271
+ const stored = [];
272
+ for (const p of preferences.slice(0, 10)) { // Limit
273
+ if (p.topic && p.preference && p.confidence >= 0.5) {
274
+ const pref = this.store.addPreference(peerId, p.topic, p.preference, p.evidence || [], p.confidence);
275
+ stored.push(pref);
276
+ }
277
+ }
278
+ return stored;
279
+ }
280
+ catch (err) {
281
+ console.warn("[DialecticReasoning] Preference extraction failed:", err);
282
+ return [];
283
+ }
284
+ }
285
+ async extractGoals(peerId, observations) {
286
+ const prompt = GOAL_EXTRACTION_PROMPT.replace("{{observations}}", observations.map(o => `- [${o.category}] ${o.content}`).join("\n"));
287
+ try {
288
+ const response = await this.callLLM(prompt);
289
+ const parsed = JSON.parse(response);
290
+ // Handle both array and object responses
291
+ const goals = Array.isArray(parsed) ? parsed : (parsed.goals || []);
292
+ const stored = [];
293
+ for (const g of goals.slice(0, 5)) { // Limit to 5 goals
294
+ if (g.description && g.confidence >= 0.5) {
295
+ const goal = this.store.addGoal(peerId, g.description, g.status || "active", g.priority || "medium", g.evidence || [], g.confidence);
296
+ stored.push(goal);
297
+ }
298
+ }
299
+ return stored;
300
+ }
301
+ catch (err) {
302
+ console.warn("[DialecticReasoning] Goal extraction failed:", err);
303
+ return [];
304
+ }
305
+ }
306
+ async extractConstraints(peerId, observations) {
307
+ const prompt = CONSTRAINT_EXTRACTION_PROMPT.replace("{{observations}}", observations.map(o => `- [${o.category}] ${o.content}`).join("\n"));
308
+ try {
309
+ const response = await this.callLLM(prompt);
310
+ const parsed = JSON.parse(response);
311
+ // Handle both array and object responses
312
+ const constraints = Array.isArray(parsed) ? parsed : (parsed.constraints || []);
313
+ const stored = [];
314
+ for (const c of constraints.slice(0, 10)) {
315
+ if (c.description && c.confidence >= 0.5) {
316
+ const constraint = this.store.addConstraint(peerId, c.description, c.type || "soft", c.evidence || [], c.confidence);
317
+ stored.push(constraint);
318
+ }
319
+ }
320
+ return stored;
321
+ }
322
+ catch (err) {
323
+ console.warn("[DialecticReasoning] Constraint extraction failed:", err);
324
+ return [];
325
+ }
326
+ }
327
+ async extractValues(peerId, observations) {
328
+ const prompt = VALUE_EXTRACTION_PROMPT.replace("{{observations}}", observations.map(o => `- [${o.category}] ${o.content}`).join("\n"));
329
+ try {
330
+ const response = await this.callLLM(prompt);
331
+ const parsed = JSON.parse(response);
332
+ // Handle both array and object responses
333
+ const values = Array.isArray(parsed) ? parsed : (parsed.values || []);
334
+ const stored = [];
335
+ for (const v of values.slice(0, 10)) {
336
+ if (v.value && v.confidence >= 0.5) {
337
+ const value = this.store.addValue(peerId, v.value, v.context || "", v.evidence || [], v.confidence);
338
+ stored.push(value);
339
+ }
340
+ }
341
+ return stored;
342
+ }
343
+ catch (err) {
344
+ console.warn("[DialecticReasoning] Value extraction failed:", err);
345
+ return [];
346
+ }
347
+ }
348
+ // ─────────────────────────────────────────────────────────────────
349
+ // LLM CALL
350
+ // ─────────────────────────────────────────────────────────────────
351
+ async callLLM(prompt) {
352
+ const response = await fetch(`${this.ollamaUrl}/api/generate`, {
353
+ method: "POST",
354
+ headers: { "Content-Type": "application/json" },
355
+ body: JSON.stringify({
356
+ model: "glm-5:cloud",
357
+ prompt,
358
+ stream: false,
359
+ format: "json",
360
+ }),
361
+ });
362
+ if (!response.ok) {
363
+ throw new Error(`LLM error: ${response.status}`);
364
+ }
365
+ const data = await response.json();
366
+ let result = data.response;
367
+ // Handle markdown code blocks - extract JSON from ```json ... ```
368
+ if (result.includes("```")) {
369
+ const jsonMatch = result.match(/```(?:json)?\s*([\s\S]*?)```/);
370
+ if (jsonMatch && jsonMatch[1]) {
371
+ result = jsonMatch[1].trim();
372
+ }
373
+ else {
374
+ result = result.replace(/```json?/g, "").replace(/```/g, "").trim();
375
+ }
376
+ }
377
+ return result;
378
+ }
379
+ }
380
+ // ═════════════════════════════════════════════════════════════════
381
+ // SINGLETON
382
+ // ═════════════════════════════════════════════════════════════════
383
+ let reasoning = null;
384
+ export function getDialecticReasoning() {
385
+ if (!reasoning) {
386
+ reasoning = new DialecticReasoning();
387
+ }
388
+ return reasoning;
389
+ }
390
+ //# sourceMappingURL=reasoning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning.js","sourceRoot":"","sources":["../../../../src/memory/dialectic/reasoning.ts"],"names":[],"mappings":"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"}