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.
- package/HEARTBEAT.md +239 -0
- package/IDENTITY.md +12 -0
- package/README.md +138 -4
- package/SOUL.md +21 -0
- package/dist/package.json +10 -5
- package/dist/src/agent/bootstrap-loader.js +295 -66
- package/dist/src/agent/bootstrap-loader.js.map +1 -1
- package/dist/src/agent/context-pruning.js +10 -5
- package/dist/src/agent/context-pruning.js.map +1 -1
- package/dist/src/agent/embedded-runner.js +29 -15
- package/dist/src/agent/embedded-runner.js.map +1 -1
- package/dist/src/agent/index.js +5 -2
- package/dist/src/agent/index.js.map +1 -1
- package/dist/src/agent/system-prompt.js +167 -20
- package/dist/src/agent/system-prompt.js.map +1 -1
- package/dist/src/agent/tools/spawn-agent.js +72 -5
- package/dist/src/agent/tools/spawn-agent.js.map +1 -1
- package/dist/src/channels/slack/webhook.js +2 -2
- package/dist/src/channels/slack/webhook.js.map +1 -1
- package/dist/src/channels/telegram/bot.js +4 -4
- package/dist/src/channels/telegram/bot.js.map +1 -1
- package/dist/src/channels/whatsapp/integration.js +4 -4
- package/dist/src/channels/whatsapp/integration.js.map +1 -1
- package/dist/src/cli/commands/gateway.js +9 -10
- package/dist/src/cli/commands/gateway.js.map +1 -1
- package/dist/src/cli/commands/init.js +90 -0
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/setup.js +53 -0
- package/dist/src/cli/commands/setup.js.map +1 -1
- package/dist/src/cli/index.js +0 -0
- package/dist/src/config/unified-config.js +5 -0
- package/dist/src/config/unified-config.js.map +1 -1
- package/dist/src/cron/index.js +2 -0
- package/dist/src/cron/index.js.map +1 -1
- package/dist/src/cron/nl-parser.js +522 -0
- package/dist/src/cron/nl-parser.js.map +1 -0
- package/dist/src/cron/runner.js +6 -31
- package/dist/src/cron/runner.js.map +1 -1
- package/dist/src/event-bus/index.js.map +1 -1
- package/dist/src/extensions/core/agent-orchestrator-extension.js +200 -148
- package/dist/src/extensions/core/agent-orchestrator-extension.js.map +1 -1
- package/dist/src/extensions/core/diagnostics-extension.js +93 -56
- package/dist/src/extensions/core/diagnostics-extension.js.map +1 -1
- package/dist/src/extensions/core/draconic-safety-extension.js +256 -3
- package/dist/src/extensions/core/draconic-safety-extension.js.map +1 -1
- package/dist/src/extensions/core/heartbeat-extension.js +416 -150
- package/dist/src/extensions/core/heartbeat-extension.js.map +1 -1
- package/dist/src/extensions/core/{generative-agents-extension.js → learning-extension.js} +90 -128
- package/dist/src/extensions/core/learning-extension.js.map +1 -0
- package/dist/src/extensions/core/perennial-memory-extension.js +884 -87
- package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -1
- package/dist/src/extensions/core/routed-ollama-extension.js +345 -0
- package/dist/src/extensions/core/routed-ollama-extension.js.map +1 -0
- package/dist/src/extensions/core/task-manager-extension.js +25 -2
- package/dist/src/extensions/core/task-manager-extension.js.map +1 -1
- package/dist/src/extensions/core/websearch-enhanced-extension.js +81 -23
- package/dist/src/extensions/core/websearch-enhanced-extension.js.map +1 -1
- package/dist/src/extensions/core/workspace-footer-extension.js +40 -63
- package/dist/src/extensions/core/workspace-footer-extension.js.map +1 -1
- package/dist/src/extensions/loader.js +5 -1
- package/dist/src/extensions/loader.js.map +1 -1
- package/dist/src/gateway/gateway-server.js +74 -3
- package/dist/src/gateway/gateway-server.js.map +1 -1
- package/dist/src/gateway/index.js +2 -2
- package/dist/src/gateway/index.js.map +1 -1
- package/dist/src/gateway/methods/agent.js +1 -1
- package/dist/src/gateway/methods/agent.js.map +1 -1
- package/dist/src/gateway/methods/index.js +4 -0
- package/dist/src/gateway/methods/index.js.map +1 -1
- package/dist/src/gateway/methods/node.js +261 -0
- package/dist/src/gateway/methods/node.js.map +1 -0
- package/dist/src/gateway/queue-modes.js +356 -0
- package/dist/src/gateway/queue-modes.js.map +1 -0
- package/dist/src/index.js +47 -6
- package/dist/src/index.js.map +1 -1
- package/dist/src/llm/community-analytics.js +569 -0
- package/dist/src/llm/community-analytics.js.map +1 -0
- package/dist/src/llm/index.js +28 -4
- package/dist/src/llm/index.js.map +1 -1
- package/dist/src/llm/model-discovery.js +335 -0
- package/dist/src/llm/model-discovery.js.map +1 -0
- package/dist/src/llm/model-popularity.js +566 -0
- package/dist/src/llm/model-popularity.js.map +1 -0
- package/dist/src/llm/model-scoring-db.js +553 -0
- package/dist/src/llm/model-scoring-db.js.map +1 -0
- package/dist/src/llm/multi-provider.js +258 -0
- package/dist/src/llm/multi-provider.js.map +1 -0
- package/dist/src/llm/ollama.js +133 -187
- package/dist/src/llm/ollama.js.map +1 -1
- package/dist/src/llm/router-commands.js +773 -0
- package/dist/src/llm/router-commands.js.map +1 -0
- package/dist/src/llm/router-core.js +600 -0
- package/dist/src/llm/router-core.js.map +1 -0
- package/dist/src/memory/checkpoint-manager.js +278 -0
- package/dist/src/memory/checkpoint-manager.js.map +1 -0
- package/dist/src/memory/conflict-detector.js +279 -0
- package/dist/src/memory/conflict-detector.js.map +1 -0
- package/dist/src/memory/context-graph.js +360 -0
- package/dist/src/memory/context-graph.js.map +1 -0
- package/dist/src/memory/dialectic/benchmark-cli.js +200 -0
- package/dist/src/memory/dialectic/benchmark-cli.js.map +1 -0
- package/dist/src/memory/dialectic/debug-reasoning.js +37 -0
- package/dist/src/memory/dialectic/debug-reasoning.js.map +1 -0
- package/dist/src/memory/dialectic/index.js +135 -0
- package/dist/src/memory/dialectic/index.js.map +1 -0
- package/dist/src/memory/dialectic/nudges.js +380 -0
- package/dist/src/memory/dialectic/nudges.js.map +1 -0
- package/dist/src/memory/dialectic/reasoning-engine.js +607 -0
- package/dist/src/memory/dialectic/reasoning-engine.js.map +1 -0
- package/dist/src/memory/dialectic/reasoning.js +390 -0
- package/dist/src/memory/dialectic/reasoning.js.map +1 -0
- package/dist/src/memory/dialectic/skill-creation.js +481 -0
- package/dist/src/memory/dialectic/skill-creation.js.map +1 -0
- package/dist/src/memory/dialectic/store.js +663 -0
- package/dist/src/memory/dialectic/store.js.map +1 -0
- package/dist/src/memory/dialectic/types.js +11 -0
- package/dist/src/memory/dialectic/types.js.map +1 -0
- package/dist/src/memory/index.js +24 -2
- package/dist/src/memory/index.js.map +1 -1
- package/dist/src/memory/memory-decay.js +350 -0
- package/dist/src/memory/memory-decay.js.map +1 -0
- package/dist/src/memory/memory-integration.js +5 -5
- package/dist/src/memory/memory-integration.js.map +1 -1
- package/dist/src/memory/migrate-memory-stream.js +97 -0
- package/dist/src/memory/migrate-memory-stream.js.map +1 -0
- package/dist/src/memory/session-memory-bridge.js +49 -5
- package/dist/src/memory/session-memory-bridge.js.map +1 -1
- package/dist/src/memory/session-store.js +123 -0
- package/dist/src/memory/session-store.js.map +1 -1
- package/dist/src/memory/smart-write-rules.js +164 -0
- package/dist/src/memory/smart-write-rules.js.map +1 -0
- package/dist/src/memory/tiered-memory.js +436 -0
- package/dist/src/memory/tiered-memory.js.map +1 -0
- package/dist/src/memory/types.js +6 -0
- package/dist/src/memory/types.js.map +1 -0
- package/dist/src/memory/verify-migration.js +99 -0
- package/dist/src/memory/verify-migration.js.map +1 -0
- package/dist/src/pi-config.js +11 -9
- package/dist/src/pi-config.js.map +1 -1
- package/dist/src/skills/conditional-skills.js +464 -0
- package/dist/src/skills/conditional-skills.js.map +1 -0
- package/dist/src/skills/index.js +5 -0
- package/dist/src/skills/index.js.map +1 -1
- package/dist/src/skills/loader.js +56 -0
- package/dist/src/skills/loader.js.map +1 -1
- package/dist/src/skills/skill-manage.js +417 -0
- package/dist/src/skills/skill-manage.js.map +1 -0
- package/dist/src/tui/commands/orchestration-commands.js +62 -0
- package/dist/src/tui/commands/orchestration-commands.js.map +1 -1
- package/package.json +10 -5
- package/skills/model-router-test.ts +65 -0
- package/dist/src/extensions/core/auto-security-scan-extension.js +0 -41
- package/dist/src/extensions/core/auto-security-scan-extension.js.map +0 -1
- package/dist/src/extensions/core/cloudflare-browser-extension.js +0 -389
- package/dist/src/extensions/core/cloudflare-browser-extension.js.map +0 -1
- package/dist/src/extensions/core/compaction-safeguard.js +0 -223
- package/dist/src/extensions/core/compaction-safeguard.js.map +0 -1
- package/dist/src/extensions/core/generative-agents-extension.js.map +0 -1
- package/dist/src/extensions/core/obsidian-bridge-extension.js +0 -488
- package/dist/src/extensions/core/obsidian-bridge-extension.js.map +0 -1
- package/dist/src/llm/router.js +0 -145
- package/dist/src/llm/router.js.map +0 -1
- package/skills/kobold-scan-skill/node_modules/.package-lock.json +0 -172
- package/skills/kobold-scan-skill/node_modules/ansi-styles/index.d.ts +0 -345
- package/skills/kobold-scan-skill/node_modules/ansi-styles/index.js +0 -163
- package/skills/kobold-scan-skill/node_modules/ansi-styles/license +0 -9
- package/skills/kobold-scan-skill/node_modules/ansi-styles/package.json +0 -56
- package/skills/kobold-scan-skill/node_modules/ansi-styles/readme.md +0 -152
- package/skills/kobold-scan-skill/node_modules/balanced-match/.github/FUNDING.yml +0 -2
- package/skills/kobold-scan-skill/node_modules/balanced-match/LICENSE.md +0 -21
- package/skills/kobold-scan-skill/node_modules/balanced-match/README.md +0 -97
- package/skills/kobold-scan-skill/node_modules/balanced-match/index.js +0 -62
- package/skills/kobold-scan-skill/node_modules/balanced-match/package.json +0 -48
- package/skills/kobold-scan-skill/node_modules/brace-expansion/.github/FUNDING.yml +0 -2
- package/skills/kobold-scan-skill/node_modules/brace-expansion/LICENSE +0 -21
- package/skills/kobold-scan-skill/node_modules/brace-expansion/README.md +0 -135
- package/skills/kobold-scan-skill/node_modules/brace-expansion/index.js +0 -203
- package/skills/kobold-scan-skill/node_modules/brace-expansion/package.json +0 -49
- package/skills/kobold-scan-skill/node_modules/chalk/index.d.ts +0 -415
- package/skills/kobold-scan-skill/node_modules/chalk/license +0 -9
- package/skills/kobold-scan-skill/node_modules/chalk/package.json +0 -68
- package/skills/kobold-scan-skill/node_modules/chalk/readme.md +0 -341
- package/skills/kobold-scan-skill/node_modules/chalk/source/index.js +0 -229
- package/skills/kobold-scan-skill/node_modules/chalk/source/templates.js +0 -134
- package/skills/kobold-scan-skill/node_modules/chalk/source/util.js +0 -39
- package/skills/kobold-scan-skill/node_modules/color-convert/CHANGELOG.md +0 -54
- package/skills/kobold-scan-skill/node_modules/color-convert/LICENSE +0 -21
- package/skills/kobold-scan-skill/node_modules/color-convert/README.md +0 -68
- package/skills/kobold-scan-skill/node_modules/color-convert/conversions.js +0 -839
- package/skills/kobold-scan-skill/node_modules/color-convert/index.js +0 -81
- package/skills/kobold-scan-skill/node_modules/color-convert/package.json +0 -48
- package/skills/kobold-scan-skill/node_modules/color-convert/route.js +0 -97
- package/skills/kobold-scan-skill/node_modules/color-name/LICENSE +0 -8
- package/skills/kobold-scan-skill/node_modules/color-name/README.md +0 -11
- package/skills/kobold-scan-skill/node_modules/color-name/index.js +0 -152
- package/skills/kobold-scan-skill/node_modules/color-name/package.json +0 -28
- package/skills/kobold-scan-skill/node_modules/commander/LICENSE +0 -22
- package/skills/kobold-scan-skill/node_modules/commander/Readme.md +0 -1129
- package/skills/kobold-scan-skill/node_modules/commander/esm.mjs +0 -16
- package/skills/kobold-scan-skill/node_modules/commander/index.js +0 -27
- package/skills/kobold-scan-skill/node_modules/commander/lib/argument.js +0 -147
- package/skills/kobold-scan-skill/node_modules/commander/lib/command.js +0 -2179
- package/skills/kobold-scan-skill/node_modules/commander/lib/error.js +0 -45
- package/skills/kobold-scan-skill/node_modules/commander/lib/help.js +0 -461
- package/skills/kobold-scan-skill/node_modules/commander/lib/option.js +0 -326
- package/skills/kobold-scan-skill/node_modules/commander/lib/suggestSimilar.js +0 -100
- package/skills/kobold-scan-skill/node_modules/commander/package-support.json +0 -16
- package/skills/kobold-scan-skill/node_modules/commander/package.json +0 -80
- package/skills/kobold-scan-skill/node_modules/commander/typings/index.d.ts +0 -891
- package/skills/kobold-scan-skill/node_modules/fs.realpath/LICENSE +0 -43
- package/skills/kobold-scan-skill/node_modules/fs.realpath/README.md +0 -33
- package/skills/kobold-scan-skill/node_modules/fs.realpath/index.js +0 -66
- package/skills/kobold-scan-skill/node_modules/fs.realpath/old.js +0 -303
- package/skills/kobold-scan-skill/node_modules/fs.realpath/package.json +0 -26
- package/skills/kobold-scan-skill/node_modules/glob/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/glob/README.md +0 -399
- package/skills/kobold-scan-skill/node_modules/glob/common.js +0 -244
- package/skills/kobold-scan-skill/node_modules/glob/glob.js +0 -790
- package/skills/kobold-scan-skill/node_modules/glob/package.json +0 -55
- package/skills/kobold-scan-skill/node_modules/glob/sync.js +0 -486
- package/skills/kobold-scan-skill/node_modules/has-flag/index.d.ts +0 -39
- package/skills/kobold-scan-skill/node_modules/has-flag/index.js +0 -8
- package/skills/kobold-scan-skill/node_modules/has-flag/license +0 -9
- package/skills/kobold-scan-skill/node_modules/has-flag/package.json +0 -46
- package/skills/kobold-scan-skill/node_modules/has-flag/readme.md +0 -89
- package/skills/kobold-scan-skill/node_modules/inflight/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/inflight/README.md +0 -37
- package/skills/kobold-scan-skill/node_modules/inflight/inflight.js +0 -54
- package/skills/kobold-scan-skill/node_modules/inflight/package.json +0 -29
- package/skills/kobold-scan-skill/node_modules/inherits/LICENSE +0 -16
- package/skills/kobold-scan-skill/node_modules/inherits/README.md +0 -42
- package/skills/kobold-scan-skill/node_modules/inherits/inherits.js +0 -9
- package/skills/kobold-scan-skill/node_modules/inherits/inherits_browser.js +0 -27
- package/skills/kobold-scan-skill/node_modules/inherits/package.json +0 -29
- package/skills/kobold-scan-skill/node_modules/minimatch/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/minimatch/README.md +0 -259
- package/skills/kobold-scan-skill/node_modules/minimatch/lib/path.js +0 -4
- package/skills/kobold-scan-skill/node_modules/minimatch/minimatch.js +0 -944
- package/skills/kobold-scan-skill/node_modules/minimatch/package.json +0 -35
- package/skills/kobold-scan-skill/node_modules/once/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/once/README.md +0 -79
- package/skills/kobold-scan-skill/node_modules/once/once.js +0 -42
- package/skills/kobold-scan-skill/node_modules/once/package.json +0 -33
- package/skills/kobold-scan-skill/node_modules/supports-color/browser.js +0 -5
- package/skills/kobold-scan-skill/node_modules/supports-color/index.js +0 -135
- package/skills/kobold-scan-skill/node_modules/supports-color/license +0 -9
- package/skills/kobold-scan-skill/node_modules/supports-color/package.json +0 -53
- package/skills/kobold-scan-skill/node_modules/supports-color/readme.md +0 -76
- package/skills/kobold-scan-skill/node_modules/wrappy/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/wrappy/README.md +0 -36
- package/skills/kobold-scan-skill/node_modules/wrappy/package.json +0 -29
- 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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"}
|