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,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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EACL,cAAc,EACd,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,GAGtB,MAAM,kBAAkB,CAAC;AAE1B,iDAAiD;AACjD,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,QAAkC;IACzE,OAAO,iBAAiB,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,QAAkC;IAC1E,OAAO,iBAAiB,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAkC;IAC5E,OAAO,iBAAiB,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,MAAc,EACd,OAAe,EACf,QAA6B,EAC7B,aAA+D,SAAS,EACxE,WAAmB,EAAE;IAErB,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC,cAAc,CACpD,MAAM,EACN,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CACjC,CAAC;IAEF,yCAAyC;IACzC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAExC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,iBAAiB,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,SAAS;IACtD,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAClC,IAAI,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,MAAc;IAOzC,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE9C,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,IAAI,IAAI;QAC5C,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;QACtC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;QAC1B,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;QACtC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;KAC7B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,MAAc,EAAE,QAAgB;IACxD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc;IAC1C,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,SAAS,EAAE,OAAO,IAAI,iBAAiB,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ;IAWtB,OAAO,iBAAiB,EAAE,CAAC,QAAQ,EAAE,CAAC;AACxC,CAAC"}
@@ -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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"}