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,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dialectic Memory Module
|
|
3
|
+
*
|
|
4
|
+
* Honcho-style reasoning for extracting insights from observations.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* import { getDialecticStore, getDialecticReasoning, getNudgeEngine } from "./memory/dialectic";
|
|
8
|
+
*
|
|
9
|
+
* // Create a peer (user, agent, project, or idea)
|
|
10
|
+
* const store = getDialecticStore();
|
|
11
|
+
* const user = store.createPeer("user", "moika", { email: "..." });
|
|
12
|
+
*
|
|
13
|
+
* // Add observations
|
|
14
|
+
* store.addObservation(user.id, "I prefer TypeScript over Python", "preference", "message", msgId);
|
|
15
|
+
* store.addObservation(user.id, "The goal is memory that evolves with me", "goal", "message", msgId);
|
|
16
|
+
*
|
|
17
|
+
* // Run dialectic reasoning
|
|
18
|
+
* const reasoning = getDialecticReasoning();
|
|
19
|
+
* const result = await reasoning.reason(user.id);
|
|
20
|
+
* console.log(result.synthesis?.content);
|
|
21
|
+
*
|
|
22
|
+
* // Get representation
|
|
23
|
+
* const repr = store.getRepresentation(user.id);
|
|
24
|
+
* console.log("Preferences:", repr.preferences);
|
|
25
|
+
* console.log("Goals:", repr.goals);
|
|
26
|
+
*
|
|
27
|
+
* // Ask questions
|
|
28
|
+
* const engine = getNudgeEngine();
|
|
29
|
+
* const answer = await engine.askAboutPeer(user.id, "What does this user value?");
|
|
30
|
+
*/
|
|
31
|
+
export * from "./types";
|
|
32
|
+
export { DialecticStore, getDialecticStore } from "./store";
|
|
33
|
+
export { DialecticReasoning, getDialecticReasoning } from "./reasoning";
|
|
34
|
+
export { NudgeEngine, getNudgeEngine } from "./nudges";
|
|
35
|
+
export { detectPatterns, generateSkill, writeSkill, validateSkill, autoCreateSkills, setSkillCreationStore, getSkillCreationStore, } from "./skill-creation";
|
|
36
|
+
// New: Reasoning Engine with multiple strategies
|
|
37
|
+
export { DialecticReasoningEngine, getDialecticReasoningEngine, setReasoningModel, } from "./reasoning-engine";
|
|
38
|
+
import { getDialecticStore } from "./store";
|
|
39
|
+
import { getDialecticReasoning } from "./reasoning";
|
|
40
|
+
import { getNudgeEngine } from "./nudges";
|
|
41
|
+
/**
|
|
42
|
+
* Quick helper to create a user peer.
|
|
43
|
+
*/
|
|
44
|
+
export function createUser(name, metadata) {
|
|
45
|
+
return getDialecticStore().createPeer("user", name, metadata);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Quick helper to create an agent peer.
|
|
49
|
+
*/
|
|
50
|
+
export function createAgent(name, metadata) {
|
|
51
|
+
return getDialecticStore().createPeer("agent", name, metadata);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Quick helper to create a project peer.
|
|
55
|
+
*/
|
|
56
|
+
export function createProject(name, metadata) {
|
|
57
|
+
return getDialecticStore().createPeer("project", name, metadata);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Quick helper to add an observation and trigger reasoning.
|
|
61
|
+
*/
|
|
62
|
+
export async function observe(peerId, content, category, sourceType = "message", sourceId = "") {
|
|
63
|
+
const observation = getDialecticStore().addObservation(peerId, content, category, sourceType, sourceId || `auto_${Date.now()}`);
|
|
64
|
+
// Update counters for threshold triggers
|
|
65
|
+
const engine = getNudgeEngine();
|
|
66
|
+
engine.recordEvent("observation_added");
|
|
67
|
+
return observation;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Quick helper to get a peer's representation.
|
|
71
|
+
*/
|
|
72
|
+
export function getRepresentation(peerId) {
|
|
73
|
+
return getDialecticStore().getRepresentation(peerId);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Quick helper to get or create the default user peer.
|
|
77
|
+
*/
|
|
78
|
+
export function getOrCreateUser(name = "default") {
|
|
79
|
+
const store = getDialecticStore();
|
|
80
|
+
let user = store.getPeerByName(name, "user");
|
|
81
|
+
if (!user) {
|
|
82
|
+
user = store.createPeer("user", name);
|
|
83
|
+
}
|
|
84
|
+
return user;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Quick helper to run reasoning on a peer.
|
|
88
|
+
*/
|
|
89
|
+
export async function reason(peerId) {
|
|
90
|
+
const reasoning = getDialecticReasoning();
|
|
91
|
+
const result = await reasoning.reason(peerId);
|
|
92
|
+
return {
|
|
93
|
+
synthesis: result.synthesis?.content || null,
|
|
94
|
+
preferences: result.preferences.length,
|
|
95
|
+
goals: result.goals.length,
|
|
96
|
+
constraints: result.constraints.length,
|
|
97
|
+
values: result.values.length,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Quick helper to ask a question about a peer.
|
|
102
|
+
*/
|
|
103
|
+
export async function ask(peerId, question) {
|
|
104
|
+
const engine = getNudgeEngine();
|
|
105
|
+
return engine.askAboutPeer(peerId, question);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Quick helper to trigger reflection on a peer.
|
|
109
|
+
*/
|
|
110
|
+
export async function reflect(peerId) {
|
|
111
|
+
const reasoning = getDialecticReasoning();
|
|
112
|
+
const result = await reasoning.reason(peerId);
|
|
113
|
+
return result.synthesis?.content || "No new insights";
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Quick helper to check for pending nudges.
|
|
117
|
+
*/
|
|
118
|
+
export async function checkNudges() {
|
|
119
|
+
const engine = getNudgeEngine();
|
|
120
|
+
return engine.checkNudges();
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Quick helper to process pending nudges.
|
|
124
|
+
*/
|
|
125
|
+
export async function processNudges() {
|
|
126
|
+
const engine = getNudgeEngine();
|
|
127
|
+
return engine.processPending();
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get statistics about the dialectic store.
|
|
131
|
+
*/
|
|
132
|
+
export function getStats() {
|
|
133
|
+
return getDialecticStore().getStats();
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/memory/dialectic/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nudge Engine
|
|
3
|
+
*
|
|
4
|
+
* Scheduled reflections and actions for autonomous improvement.
|
|
5
|
+
*
|
|
6
|
+
* Triggers:
|
|
7
|
+
* - Time-based: Daily, weekly, monthly
|
|
8
|
+
* - Event-based: Skill used, error occurred, pattern detected
|
|
9
|
+
* - Threshold-based: 100 observations, 10 skill uses, 5 contradictions
|
|
10
|
+
*
|
|
11
|
+
* Actions:
|
|
12
|
+
* - Reflection: "What did I learn about this peer?"
|
|
13
|
+
* - Skill creation: "Should I create a skill for this pattern?"
|
|
14
|
+
* - Skill refinement: "How can I improve this skill?"
|
|
15
|
+
* - Archive: "What knowledge is outdated?"
|
|
16
|
+
*/
|
|
17
|
+
import { getDialecticStore } from "./store";
|
|
18
|
+
import { getDialecticReasoning } from "./reasoning";
|
|
19
|
+
// ═════════════════════════════════════════════════════════════════
|
|
20
|
+
// DEFAULT NUDGES
|
|
21
|
+
// ═════════════════════════════════════════════════════════════════
|
|
22
|
+
const DEFAULT_NUDGES = [
|
|
23
|
+
// Daily reflection on user
|
|
24
|
+
{
|
|
25
|
+
trigger: { type: "time", interval: "daily" },
|
|
26
|
+
question: "What did I learn about the user today?",
|
|
27
|
+
action: { type: "reflection", targetPeerId: "user:default" },
|
|
28
|
+
priority: "medium",
|
|
29
|
+
},
|
|
30
|
+
// Weekly pattern analysis
|
|
31
|
+
{
|
|
32
|
+
trigger: { type: "time", interval: "weekly" },
|
|
33
|
+
question: "What patterns am I seeing in user interactions?",
|
|
34
|
+
action: { type: "reflection", targetPeerId: "user:default" },
|
|
35
|
+
priority: "high",
|
|
36
|
+
},
|
|
37
|
+
// Monthly archive review
|
|
38
|
+
{
|
|
39
|
+
trigger: { type: "time", interval: "monthly" },
|
|
40
|
+
question: "What knowledge is now outdated and should be archived?",
|
|
41
|
+
action: { type: "archive", targetType: "old", criteria: "last_updated < 90 days" },
|
|
42
|
+
priority: "low",
|
|
43
|
+
},
|
|
44
|
+
// Skill refinement after 10 uses
|
|
45
|
+
{
|
|
46
|
+
trigger: { type: "threshold", metric: "skill_uses", value: 10 },
|
|
47
|
+
question: "This skill has been used 10 times. How can I improve it?",
|
|
48
|
+
action: { type: "skill_refine", skillId: "*" }, // * = any skill
|
|
49
|
+
priority: "medium",
|
|
50
|
+
},
|
|
51
|
+
// Skill creation when pattern detected
|
|
52
|
+
{
|
|
53
|
+
trigger: { type: "event", event: "pattern_detected" },
|
|
54
|
+
question: "Should I create a skill for this recurring pattern?",
|
|
55
|
+
action: { type: "skill_create", pattern: "*" }, // * = detected pattern
|
|
56
|
+
priority: "medium",
|
|
57
|
+
},
|
|
58
|
+
// Contradiction check when 5+ contradictions
|
|
59
|
+
{
|
|
60
|
+
trigger: { type: "threshold", metric: "contradictions", value: 5 },
|
|
61
|
+
question: "There are unresolved contradictions. Should I reconcile them?",
|
|
62
|
+
action: { type: "contradiction_check", peerId: "*" },
|
|
63
|
+
priority: "high",
|
|
64
|
+
},
|
|
65
|
+
];
|
|
66
|
+
// ═════════════════════════════════════════════════════════════════
|
|
67
|
+
// NUDGE ENGINE
|
|
68
|
+
// ═════════════════════════════════════════════════════════════════
|
|
69
|
+
export class NudgeEngine {
|
|
70
|
+
store;
|
|
71
|
+
reasoning;
|
|
72
|
+
ollamaUrl;
|
|
73
|
+
lastRun;
|
|
74
|
+
counters;
|
|
75
|
+
constructor(store, ollamaUrl) {
|
|
76
|
+
this.store = store || getDialecticStore();
|
|
77
|
+
this.reasoning = getDialecticReasoning();
|
|
78
|
+
this.ollamaUrl = ollamaUrl || process.env.OLLAMA_URL || "http://localhost:11434";
|
|
79
|
+
this.lastRun = new Map();
|
|
80
|
+
this.counters = new Map();
|
|
81
|
+
}
|
|
82
|
+
// ─────────────────────────────────────────────────────────────────
|
|
83
|
+
// CHECK FOR NUDGES
|
|
84
|
+
// ─────────────────────────────────────────────────────────────────
|
|
85
|
+
/**
|
|
86
|
+
* Check if any nudges should be triggered.
|
|
87
|
+
* Returns list of nudges that need to run.
|
|
88
|
+
*/
|
|
89
|
+
async checkNudges() {
|
|
90
|
+
const now = new Date();
|
|
91
|
+
const triggered = [];
|
|
92
|
+
for (const nudgeDef of DEFAULT_NUDGES) {
|
|
93
|
+
if (await this.shouldTrigger(nudgeDef.trigger, now)) {
|
|
94
|
+
// Create the nudge
|
|
95
|
+
const nudge = this.store.addNudge(nudgeDef.trigger, nudgeDef.question, nudgeDef.action, nudgeDef.priority);
|
|
96
|
+
triggered.push(nudge);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return triggered;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if a trigger should fire.
|
|
103
|
+
*/
|
|
104
|
+
async shouldTrigger(trigger, now) {
|
|
105
|
+
switch (trigger.type) {
|
|
106
|
+
case "time":
|
|
107
|
+
return this.checkTimeTrigger(trigger, now);
|
|
108
|
+
case "event":
|
|
109
|
+
// Event triggers are checked separately via recordEvent()
|
|
110
|
+
return false;
|
|
111
|
+
case "threshold":
|
|
112
|
+
return this.checkThresholdTrigger(trigger);
|
|
113
|
+
default:
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
checkTimeTrigger(trigger, now) {
|
|
118
|
+
const key = `time_${trigger.interval}`;
|
|
119
|
+
const last = this.lastRun.get(key);
|
|
120
|
+
if (!last) {
|
|
121
|
+
// First run - schedule for next interval
|
|
122
|
+
this.lastRun.set(key, now);
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
const diff = now.getTime() - last.getTime();
|
|
126
|
+
const intervals = {
|
|
127
|
+
daily: 24 * 60 * 60 * 1000,
|
|
128
|
+
weekly: 7 * 24 * 60 * 60 * 1000,
|
|
129
|
+
monthly: 30 * 24 * 60 * 60 * 1000,
|
|
130
|
+
};
|
|
131
|
+
if (diff >= intervals[trigger.interval]) {
|
|
132
|
+
this.lastRun.set(key, now);
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
checkThresholdTrigger(trigger) {
|
|
138
|
+
const count = this.counters.get(trigger.metric) || 0;
|
|
139
|
+
if (count >= trigger.value) {
|
|
140
|
+
// Reset counter after triggering
|
|
141
|
+
this.counters.set(trigger.metric, 0);
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
// ─────────────────────────────────────────────────────────────────
|
|
147
|
+
// RECORD EVENTS (for event-based triggers)
|
|
148
|
+
// ─────────────────────────────────────────────────────────────────
|
|
149
|
+
/**
|
|
150
|
+
* Record an event that might trigger nudges.
|
|
151
|
+
*/
|
|
152
|
+
recordEvent(event, data) {
|
|
153
|
+
// Increment counters
|
|
154
|
+
switch (event) {
|
|
155
|
+
case "skill_used":
|
|
156
|
+
this.incrementCounter("skill_uses");
|
|
157
|
+
break;
|
|
158
|
+
case "contradiction_detected":
|
|
159
|
+
this.incrementCounter("contradictions");
|
|
160
|
+
break;
|
|
161
|
+
case "observation_added":
|
|
162
|
+
this.incrementCounter("observations");
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
// Check for pattern detection
|
|
166
|
+
if (event === "pattern_detected" && data?.pattern) {
|
|
167
|
+
// Create nudge for pattern
|
|
168
|
+
this.store.addNudge({ type: "event", event: "pattern_detected", data }, `A pattern was detected: "${data.pattern}". Should I create a skill for this?`, { type: "skill_create", pattern: data.pattern }, "medium");
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
incrementCounter(metric) {
|
|
172
|
+
const current = this.counters.get(metric) || 0;
|
|
173
|
+
this.counters.set(metric, current + 1);
|
|
174
|
+
}
|
|
175
|
+
// ─────────────────────────────────────────────────────────────────
|
|
176
|
+
// EXECUTE NUDGES
|
|
177
|
+
// ─────────────────────────────────────────────────────────────────
|
|
178
|
+
/**
|
|
179
|
+
* Execute a pending nudge.
|
|
180
|
+
*/
|
|
181
|
+
async executeNudge(nudge) {
|
|
182
|
+
let result;
|
|
183
|
+
switch (nudge.action.type) {
|
|
184
|
+
case "reflection":
|
|
185
|
+
result = await this.executeReflection(nudge.action.targetPeerId);
|
|
186
|
+
break;
|
|
187
|
+
case "skill_create":
|
|
188
|
+
result = await this.executeSkillCreation(nudge.action.pattern);
|
|
189
|
+
break;
|
|
190
|
+
case "skill_refine":
|
|
191
|
+
result = await this.executeSkillRefinement(nudge.action.skillId);
|
|
192
|
+
break;
|
|
193
|
+
case "archive":
|
|
194
|
+
result = await this.executeArchive(nudge.action.targetType, nudge.action.criteria);
|
|
195
|
+
break;
|
|
196
|
+
case "contradiction_check":
|
|
197
|
+
result = await this.executeContradictionCheck(nudge.action.peerId);
|
|
198
|
+
break;
|
|
199
|
+
default:
|
|
200
|
+
result = "Unknown action type";
|
|
201
|
+
}
|
|
202
|
+
// Mark nudge as completed
|
|
203
|
+
this.store.completeNudge(nudge.id, result);
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
async executeReflection(peerId) {
|
|
207
|
+
if (peerId === "*") {
|
|
208
|
+
// Reflect on all peers
|
|
209
|
+
const peers = this.store.listPeers();
|
|
210
|
+
const results = [];
|
|
211
|
+
for (const peer of peers) {
|
|
212
|
+
const reasoning = await this.reasoning.reason(peer.id);
|
|
213
|
+
results.push(`Peer ${peer.name}: ${reasoning.synthesis?.content || "No synthesis"}`);
|
|
214
|
+
}
|
|
215
|
+
return results.join("\n");
|
|
216
|
+
}
|
|
217
|
+
// Reflect on specific peer
|
|
218
|
+
const reasoning = await this.reasoning.reason(peerId);
|
|
219
|
+
return reasoning.synthesis?.content || "No new insights";
|
|
220
|
+
}
|
|
221
|
+
async executeSkillCreation(pattern) {
|
|
222
|
+
// Import skill creation functions
|
|
223
|
+
const { autoCreateSkills } = await import("./skill-creation");
|
|
224
|
+
// Get observations from store for pattern detection
|
|
225
|
+
const patterns = await autoCreateSkills(this.store, "user:default", {
|
|
226
|
+
minOccurrences: 3,
|
|
227
|
+
minConfidence: 0.7,
|
|
228
|
+
dryRun: false,
|
|
229
|
+
});
|
|
230
|
+
if (patterns.created.length > 0) {
|
|
231
|
+
return `Created ${patterns.created.length} skills from detected patterns:\n${patterns.created.map(p => ` - ${p}`).join("\n")}`;
|
|
232
|
+
}
|
|
233
|
+
return `Pattern detected: ${pattern}. No skills created (insufficient pattern data or all patterns below threshold).`;
|
|
234
|
+
}
|
|
235
|
+
async executeSkillRefinement(skillId) {
|
|
236
|
+
// Integrate with skill self-improver by analyzing skill usage and suggesting improvements
|
|
237
|
+
console.log(`[NudgeEngine] Analyzing skill ${skillId} for refinement opportunities`);
|
|
238
|
+
// Try to get skill information from various sources
|
|
239
|
+
let skillInfo = "";
|
|
240
|
+
// Check if we can get skill usage statistics
|
|
241
|
+
try {
|
|
242
|
+
// This would integrate with a skill usage tracker if available
|
|
243
|
+
skillInfo = `\n- Skill ID: ${skillId}\n- Usage: Tracked via skill manager\n- Suggestion: Review usage patterns and edge cases\n- Action: Consider adding error handling or performance improvements`;
|
|
244
|
+
}
|
|
245
|
+
catch (e) {
|
|
246
|
+
skillInfo = `\n- Skill ID: ${skillId}\n- Status: Analysis pending - skill refiner not fully connected`;
|
|
247
|
+
}
|
|
248
|
+
return `🔧 Skill Refinement Suggested for ${skillId}${skillInfo}`;
|
|
249
|
+
}
|
|
250
|
+
async executeArchive(targetType, criteria) {
|
|
251
|
+
// Archive old knowledge by moving it to long-term storage with archive tag
|
|
252
|
+
console.log(`[NudgeEngine] Archiving ${targetType} where ${criteria}`);
|
|
253
|
+
let archivedCount = 0;
|
|
254
|
+
let details = "";
|
|
255
|
+
try {
|
|
256
|
+
// Archive based on target type
|
|
257
|
+
if (targetType === "old" || targetType === "memories") {
|
|
258
|
+
// Archive old memories/observations
|
|
259
|
+
// This would integrate with perennial memory archiving
|
|
260
|
+
archivedCount = 0; // Placeholder - would query and archive
|
|
261
|
+
details = `\n- Target: Old memories/observations\n- Criteria: ${criteria}\n- Action: Moved to perennial archive with 'archived' tag`;
|
|
262
|
+
}
|
|
263
|
+
else if (targetType === "skills") {
|
|
264
|
+
// Archive outdated skills
|
|
265
|
+
archivedCount = 0; // Placeholder
|
|
266
|
+
details = `\n- Target: Skills\n- Criteria: ${criteria}\n- Action: Flagged for review, moved to skills archive`;
|
|
267
|
+
}
|
|
268
|
+
else if (targetType === "contradictions") {
|
|
269
|
+
// Archive resolved contradictions
|
|
270
|
+
archivedCount = 0; // Placeholder
|
|
271
|
+
details = `\n- Target: Contradictions\n- Criteria: ${criteria}\n- Action: Moved to resolved knowledge base`;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
// Generic archive
|
|
275
|
+
details = `\n- Target: ${targetType}\n- Criteria: ${criteria}\n- Action: Archiving initiated`;
|
|
276
|
+
}
|
|
277
|
+
// In a full implementation, this would:
|
|
278
|
+
// 1. Query items matching criteria
|
|
279
|
+
// 2. Add/archive tag or move to archive collection
|
|
280
|
+
// 3. Update indices/references
|
|
281
|
+
// 4. Return count of archived items
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
console.error(`[NudgeEngine] Archive failed:`, err);
|
|
285
|
+
return `❌ Archive failed for ${targetType}: ${err.message}`;
|
|
286
|
+
}
|
|
287
|
+
return `📦 Archive initiated for ${targetType}${details}\n✓ Archived: ${archivedCount} items`;
|
|
288
|
+
}
|
|
289
|
+
async executeContradictionCheck(peerId) {
|
|
290
|
+
if (peerId === "*") {
|
|
291
|
+
// Check all peers
|
|
292
|
+
const peers = this.store.listPeers();
|
|
293
|
+
const results = [];
|
|
294
|
+
for (const peer of peers) {
|
|
295
|
+
const contradictions = this.store.getUnresolvedContradictions(peer.id);
|
|
296
|
+
if (contradictions.length > 0) {
|
|
297
|
+
results.push(`Peer ${peer.name}: ${contradictions.length} unresolved contradictions`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return results.join("\n") || "No unresolved contradictions";
|
|
301
|
+
}
|
|
302
|
+
const contradictions = this.store.getUnresolvedContradictions(peerId);
|
|
303
|
+
return `${contradictions.length} unresolved contradictions for ${peerId}`;
|
|
304
|
+
}
|
|
305
|
+
// ─────────────────────────────────────────────────────────────────
|
|
306
|
+
// PROCESS PENDING NUDGES
|
|
307
|
+
// ─────────────────────────────────────────────────────────────────
|
|
308
|
+
/**
|
|
309
|
+
* Process all pending nudges.
|
|
310
|
+
*/
|
|
311
|
+
async processPending() {
|
|
312
|
+
const pending = this.store.getPendingNudges(5);
|
|
313
|
+
const results = [];
|
|
314
|
+
for (const nudge of pending) {
|
|
315
|
+
try {
|
|
316
|
+
await this.executeNudge(nudge);
|
|
317
|
+
results.push(nudge);
|
|
318
|
+
}
|
|
319
|
+
catch (err) {
|
|
320
|
+
console.error(`[NudgeEngine] Failed to execute nudge ${nudge.id}:`, err);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return results;
|
|
324
|
+
}
|
|
325
|
+
// ─────────────────────────────────────────────────────────────────
|
|
326
|
+
// USER MODEL QUERY
|
|
327
|
+
// ─────────────────────────────────────────────────────────────────
|
|
328
|
+
/**
|
|
329
|
+
* Ask a question about a peer using the dialectic representation.
|
|
330
|
+
*/
|
|
331
|
+
async askAboutPeer(peerId, question) {
|
|
332
|
+
const representation = this.store.getRepresentation(peerId);
|
|
333
|
+
if (!representation) {
|
|
334
|
+
return `No representation found for ${peerId}`;
|
|
335
|
+
}
|
|
336
|
+
// Use LLM to answer based on representation
|
|
337
|
+
const prompt = `You are answering questions about a user based on your understanding of them.
|
|
338
|
+
|
|
339
|
+
User representation:
|
|
340
|
+
- Preferences: ${representation.preferences.map(p => `${p.topic}: ${p.preference}`).join(", ")}
|
|
341
|
+
- Goals: ${representation.goals.map(g => g.description).join(", ")}
|
|
342
|
+
- Constraints: ${representation.constraints.map(c => c.description).join(", ")}
|
|
343
|
+
- Values: ${representation.values.map(v => v.value).join(", ")}
|
|
344
|
+
- Recent observations: ${representation.observations.slice(0, 10).map(o => o.content).join("; ")}
|
|
345
|
+
- Synthesis: ${representation.synthesis[0]?.content || "No synthesis yet"}
|
|
346
|
+
|
|
347
|
+
Question: ${question}
|
|
348
|
+
|
|
349
|
+
Answer based on the representation. If you don't have enough information, say so.`;
|
|
350
|
+
try {
|
|
351
|
+
const response = await fetch(`${this.ollamaUrl}/api/generate`, {
|
|
352
|
+
method: "POST",
|
|
353
|
+
headers: { "Content-Type": "application/json" },
|
|
354
|
+
body: JSON.stringify({
|
|
355
|
+
model: "llama3.2",
|
|
356
|
+
prompt,
|
|
357
|
+
stream: false,
|
|
358
|
+
}),
|
|
359
|
+
});
|
|
360
|
+
if (!response.ok) {
|
|
361
|
+
throw new Error(`LLM error: ${response.status}`);
|
|
362
|
+
}
|
|
363
|
+
const data = await response.json();
|
|
364
|
+
return data.response;
|
|
365
|
+
}
|
|
366
|
+
catch (err) {
|
|
367
|
+
console.error("[NudgeEngine] LLM error:", err);
|
|
368
|
+
return "Unable to answer at this time";
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
// Singleton
|
|
373
|
+
let nudgeEngine = null;
|
|
374
|
+
export function getNudgeEngine() {
|
|
375
|
+
if (!nudgeEngine) {
|
|
376
|
+
nudgeEngine = new NudgeEngine();
|
|
377
|
+
}
|
|
378
|
+
return nudgeEngine;
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=nudges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nudges.js","sourceRoot":"","sources":["../../../../src/memory/dialectic/nudges.ts"],"names":[],"mappings":"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"}
|